Commit Graph

698 Commits

Author SHA1 Message Date
Vic Yang
6e07f94c90 spring: More stable battery LED control
This includes:
  - Discharging with AC present now recognized as battery assist mode
  - Trigger LED update every second instead of from PMU task
  - Minor breathing effect optimization
  - Control LED power and color from the same task to prevent
    simultaneous access to LED driver

BUG=chrome-os-partner:18244
TEST=Manual
BRANCH=spring

Change-Id: I9b34934f46cd4f04aaa7ca30cbe90316aec3e61e
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/45632
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
2013-03-19 14:59:47 -07:00
Randall Spangler
a3c2a73226 Rename board_get_ac() to extpower_is_present()
Code cleanup; use the same function names to mean the same thing
across boards.  No functional changes; just renaming.

BUG=none
BRANCH=none
TEST=build daisy,snow,spring

Change-Id: Icbb4cfda5f5f9ba0cbbc07fee622e9c21af3f8cd
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/45867
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
Commit-Queue: David James <davidjames@chromium.org>
2013-03-19 14:59:31 -07:00
Randall Spangler
9ddb7e0708 Rename tasks to HOOKS and CHIPSET
Rename tasks

TICK -> HOOKS
  The hooks task handles more than just the TICK hook now.

X86POWER -> CHIPSET
GAIAPOWER -> CHIPSET
  Kinda kludgy that the name of the task controls which chipset source gets
  included.  Change this to a CONFIG_CHIPSET_{X86,GAIA} #define to make it
  easier to support future chipsets.  Also, rename the task function to
  chipset_task() so ec.tasklist is chipset-agnostic.

No code changes, just renaming constants and functions.

BUG=none
BRANCH=none
TEST=build bds,link,daisy,snow,spring

Change-Id: I163ce1cd27b2d8d030d42bb1f7eb46b880c244fb
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/45805
2013-03-19 10:31:12 -07:00
ChromeOS Developer
6c285c0994 Move external power detect for link to its own file
Now that it doesn't need to leverage SWITCH_TASK to send the AC_CHANGE
notification, pure GPIO-based external power detection can move from
switch.c to its own file.

BUG=chrome-os-partner:18256
BRANCH=none
TEST=add AC power, UI shows charging indicator; remove AC, indicator goes away

Change-Id: Id495f34185b7d971c241ac6d0a8311a6bf544507
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/45789
2013-03-19 10:31:12 -07:00
Randall Spangler
c196c66432 Call AC change hook from the hook task
Using code like this, modules which service interrupts and notify
hooks will no longer need to have their own tasks to call
hook_notify() from.  They can share the hook task as long as they
don't mind the notification possibly being deferred.

BUG=chrome-os-partner:18256
BRANCH=none
TEST=add AC power, UI shows charging indicator; remove AC, indicator goes away

Change-Id: I1bc32d21b2202c3242d39e0fc533198cd5bb9c66
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/45780
2013-03-19 10:31:10 -07:00
Randall Spangler
05f496759f Add external power present flag to charge_get_flags()
Modules that need to find out about charge/power state no longer need
to use the lower-level switch API.

(This will matter more in future CLs which handle conditions like
"external power present, but at low power so we're doing battery
assist" - that can simply be state=discharging,flags=external_power_present.

BUG=chrome-os-partner:18256
BRANCH=none
TEST=add AC power, UI shows charging indicator; remove AC, indicator goes away

Change-Id: I62130a4e089297fa47ab03f6a76082593c936761
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/45515
Reviewed-by: Vic Yang <victoryang@chromium.org>
2013-03-15 09:07:58 -07:00
Randall Spangler
744cada9d5 Rename power_led.c to onewire_led.c
No code changes, just renaming to make the filename more useful.

BUG=chromium-os:18256
BRANCH=none
TEST=build link.  Plug in AC.  See plug LED come on.

Change-Id: I00d9f222de0b097bb68ef235bc6b0015e4c62f7e
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/45494
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
2013-03-14 15:44:15 -07:00
Randall Spangler
75acd4065a Clean up power LED state machine on link
The power LED now has its own tick-based handler which knows how to
blink the LED and resend the desired LED state to work around the
flaky 1-wire connection.

Removes a bunch of LED state code from charge_state.c.

No user-visible impact.  Does not need to go into link branch.

BUG=chromium-os:18256
BRANCH=none
TEST=manual

1) Discharge battery to <97%
2) Plug in AC.  LED=yellow
3) 'ectool chargeforceidle 1' from root shell.  LED=blinking green/off.
4) 'ectool chargeforceidle 0' from root shell.  LED=yellow.
5) Wait for battery >= 97% (or 'battfake 98' from EC console).  LED=green.
6) Unplug battery.  LED=red (may take 10 sec).
7) Replug battery.  LED=green.

Change-Id: I999ee3e1abe269bb3f737bbc75e0b872316605ce
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/45469
Reviewed-by: Vic Yang <victoryang@chromium.org>
2013-03-14 15:44:14 -07:00
Randall Spangler
e60f1ab224 Give the AP 30 sec warning before shutting down due to low battery
This allows the AP to shut down cleanly.  If it doesn't shut down in
that time period, the EC will forcibly shut it down.

BUG=chrome-os-partner:17124
BRANCH=link
TEST=manual

1. With system off,
  - battfake 2 -> EC hibernates immediately

2. With system on,
  - battfake 2 -> battery shutdown event posted to AP
  - power off system manually within 30 sec -> EC hibernates

3. With system on,
  - battfake 2 -> battery shutdown event posted to AP
  - do not power off AP
  - after 30 sec, EC shuts down AP then hibernates

4. With system on,
  - battfake 2 -> battery shutdown event posted to AP
  - after 15 sec, apply AC power
  - system does NOT shut down
  - remove AC power -> battery shutdown event posted to AP
    (because battfake 2 is still faking 2% battery left)
  - after 30 sec, EC shuts down AP then hibernates
    (check to make sure the full 30 sec elapses; the timer
     should have been restarted when AC power was removed;
     if the EC shuts down the AP immediately this is a
     failure indicating the timer is still running from
     the first shutdown event)

Change-Id: I1a13765f501d705d3a580b2acbbb173d47e020ff
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/44413
2013-03-05 10:26:21 -08:00
Randall Spangler
6971fd7a7f After shutting down AP, hibernate EC if battery is low
This preserves more battery for the real-time clock.  It also gets rid
of one battery level/state, since the EC will now shut down at the
same level (2%) as the AP.

Having the EC hibernate at the same level as the AP shuts down also
prevents the following weird scenario:

- EC powers on at 2% battery.
- EC won't power on the AP to do software sync because battery is low.
- But the charge state machine won't actually hibernate the EC until 1%.
- Between 2% and 1%, AC is inserted and system starts charging.
- But EC-RO is what's doing the charging; we should go through software sync
  before charging.

BUG=chrome-os-partner:17124
BRANCH=link
TEST=manual

On battery power,
1) With system on, battfake 2 -> system shuts down and EC hibernates
2) With system off, battfake 2 -> EC hibernates

Change-Id: I87d17f70d60673f3e3f1c6eb88f3f00a8c9ed4e7
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/44314
2013-03-05 10:26:21 -08:00
Randall Spangler
70cdf52ea1 Wait to power on system until battery state is known
This prevents the system from waking from hibernate at very low
battery, then powering on the AP to do software sync only to find that
the charge state machine shuts down the AP before software sync can
complete.

BUG=chrome-os-partner:17124
BRANCH=link
TEST=manual

On both AC and mostly-charged battery:
- With lid open, reboot EC -> on
- With lid open, reboot EC with power held down -> on
- With lid closed, reboot EC -> system boots and does EC software sync
- With system on -> battfake 2 shuts system down
  (and at that point, opening lid or pressing power does nothing)

With a hacked charge_state.c so fake_state_of_charge starts at 2:
- With lid open or closed, reboot EC -> off
- Opening lid does not turn on system
- Pressing power button does not turn on system
- Plug power back in and press power -> system turns on

Change-Id: Ie1f2933060fac87b1afe68718f374d51cb8994de
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/44313
2013-03-05 10:26:20 -08:00
Vic Yang
1866d471f4 spring: battery LED breath yellow on battery assist
When in battery assit mode, show breathing yellow on battery LED slowly
to indicate battery is actually discharging.

BUG=chrome-os-partner:17561
TEST=Manual
BRANCH=none

Change-Id: I688470d8870b181bf2dd20b5ebcbd6e2d861c5b0
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/44514
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
2013-03-04 16:44:48 -08:00
Randall Spangler
d86df6c388 Add reinit state to charge_state module to distinguish it from at-ec-boot init
This is a precursor to changing the switch state machine to delay
powering on the AP until the charge_state module knows if there's
enough power to do so (which it will know when it leaves the INIT
state).

BUG=chrome-os-partner:17124
BRANCH=link
TEST=manual

1. Reboot EC on battery power.  See charge state init->discharging
2. Plug in AC.  See charge state discharging->reinit
(charge state will then transition to some other charging or idle state
based on battery level)

Change-Id: Ia02cc8b37e9b5e8d6dd8c2fbfdf14e385694b1bf
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/44291
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
2013-02-28 16:12:05 -08:00
Vincent Palatin
2cf4d02acd keep ADC reference voltage on between successive reads
To decrease the amount of time needed for PMU ADC reads, add the option
to keep the ADC reference voltage enable as its stabilization time is
the longest pole.
Also set the stabilization time to 10ms as the max defined in the
datasheet.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>

BRANCH=none
BUG=chrome-os-partner:17997
TEST=on Spring, measure EC_CMD_POWER_INFO latency and see it going from
49ms to 18ms.

Change-Id: I7ed20bcddab165250108eb9f768539b19fa251de
Reviewed-on: https://gerrit.chromium.org/gerrit/44008
Reviewed-by: Vic Yang <victoryang@chromium.org>
Commit-Queue: Vincent Palatin <vpalatin@chromium.org>
Tested-by: Vincent Palatin <vpalatin@chromium.org>
2013-02-25 22:22:34 -08:00
Vic Yang
10f34bf8a9 Allow TSU6721 auto mode under any condition
Although TSU6721 cannot go manual mode under certain conditions, it
is able to go auto mode no matter what.

BUG=chrome-os-partner:14318
TEST=Manual on Spring.
BRANCH=none

Change-Id: Iba8b9bf815a4c0e5a3462e72c4afe85571845d33
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/43864
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
2013-02-25 22:22:34 -08:00
Vic Yang
9aba3baf15 spring: minimize the window that loses TSU6721 interrupt
Since TSU6721 processing is integrated into PMU task, an interrupt
closely following previous one may be dropped. We should check interrupt
status before yeilding control.

BUG=chrome-os-partner:14319, chrome-os-partner:14318
TEST=Boot on Spring. Check TSU6721 functionality.
BRANCH=none

Change-Id: I7ce1c70a214bb4afc9456eb206203cc6c3fe2f33
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/43862
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
2013-02-25 18:59:56 -08:00
Louis Yung-Chieh Lo
c1b16d21e6 Change the I8042_CMD_ENABLE (0xf4) for keystroke (not for KBC).
Old code treat following commands as the same:
  1. I8042_CMD_ENABLE in include/i8042_protocol.h
  2. I8042_ENA_KB (0xae) in include/i8042_protocol.h
  3. bit 4 of command byte, see I8042_KBD_DIS in include/i8042_protocol.h

New code changes 1 in keystroke_enabled variable.

Signed-off-by: Yung-Chieh Lo <yjlou@chromium.org>
BUG=chrome-os-partner:17005,chrome-os-partner:17810
BRANCH=link
TEST=Tested vincent's script with following scenario:
1. not-workarounded kernel: PASS more than 2767, 2946, and 7300 loops.
2. workarounded kernel: PASS more than 5000 loops.

Change-Id: I879a1b1f0186594e4b9dd7fc4320232ebab4a1e1
Reviewed-on: https://gerrit.chromium.org/gerrit/43006
Commit-Queue: Yung-Chieh Lo <yjlou@chromium.org>
Reviewed-by: Yung-Chieh Lo <yjlou@chromium.org>
Tested-by: Yung-Chieh Lo <yjlou@chromium.org>
2013-02-23 17:34:20 -08:00
Vic Yang
070943e9bf spring: Handle dead battery and booting with low power charger
This tweaks initial PWM configuration so that:
  - When battery is dead, more current is allowed to sustain the system.
  - When EC boots with a low power charger, input current is throttled
    so as not to kill the charger.

BUG=chrome-os-partner:14319
TEST=Manual
BRANCH=none

Change-Id: Ib52894b07fecdd533aecab312f40afa0b6df5676
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/43600
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
2013-02-20 09:22:43 -08:00
Vic Yang
aab9accfce spring: Add host command to read power info
Getting voltage and current can be handy when verifying hardware design.
Let's add host command to do this.

BUG=chrome-os-partner:17880
TEST=Manual on Spring
BRANCH=none

Change-Id: I4d4f6a42a9d0f917292d092e132ccd9ce3367fd6
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/43508
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
2013-02-19 23:01:10 -08:00
David Hendricks
2e64bed323 assert ENTERING_RW only if it exists
This adds an #ifdef to fix compilation for boards which do not have
ENTERING_RW (such as McCroskey).

BUG=none
BRANCH=none
TEST=Tested on McCroskey
Signed-off-by: David Hendricks <dhendrix@chromium.org>

Change-Id: Ic5577753edafd7fc249b8c23ab84e8c355a348e7
Reviewed-on: https://gerrit.chromium.org/gerrit/43413
Commit-Queue: David Hendricks <dhendrix@chromium.org>
Reviewed-by: David Hendricks <dhendrix@chromium.org>
Tested-by: David Hendricks <dhendrix@chromium.org>
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
2013-02-19 07:28:17 -08:00
Vincent Palatin
92ceccbc4b tps65090: update LDOs configuration
Match the configuration on Snow :
- set overcurrent timeout to 3200us (max)
 (to avoid triggering the protection on initial inrush current)
- properly enable the auto-discharge feature
 (we need it when the LDOs are turned OFF)

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>

BRANCH=none
BUG=chrome-os-partner:17790 chrome-os-partner:17804
TEST=on Spring, boot and dump the TPS65090 configuration from the EC
command line by using "pmu" command.
See 0x1f in registers 0x0f and 0x14 for LCD and Backlight LDOs.

Change-Id: I20b0cb11d7abb890e921816e75e8ed816ca4f2d4
Reviewed-on: https://gerrit.chromium.org/gerrit/43180
Tested-by: Vincent Palatin <vpalatin@chromium.org>
Reviewed-by: Todd Broch <tbroch@chromium.org>
Commit-Queue: Vincent Palatin <vpalatin@chromium.org>
2013-02-13 11:58:41 -08:00
Randall Spangler
695289cfe6 Add console command to fake battery state of charge
The new 'battfake' command is really handy for testing low-battery
shutdown logic.

BUG=chrome-os-partner:17124
BRANCH=link
TEST=from EC console:
	  reboot
	  battfake -> using real battery level
	  power on system -> lightbar should be blue
	  battfake 5
	  lightbar turns red after a few seconds
	  UI shows battery is very low
	     (shows <5% due to different kernel math)
	  'ectool battery' from root shell shows present capacity ~5% of
	  	  design capacity
	  remove AC power
	  battfake 4
	  UI shows low-battery screen and shuts down (may take a minute)
	  battfake 50
	  power on system
	  UI shows battery at 45-55%
	  battfake 2 -> system shuts down immediately
	  battfake -1
	  power on system
	  UI shows actual battery level

Change-Id: I3180e321241c0f586f3baad2150fb6a2b2d2e242
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/43151
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
2013-02-12 18:10:14 -08:00
Randall Spangler
9fde14da9b Rename and document battery constants
In preparation for cleaning up low-battery logic.  Make clear what
comparison operator is used for each constant (<=, <, >=, >).

Also remove hard-coded and unused display of design warning/low
battery levels from ectool.  Verified via code search that these are
not used anywhere.  Even if we later care about these levels, they
should be battery-specific and not hard-coded as a
platform-independent percentage of full capacity when ectool is
compiled.

BUG=chrome-os-partner:17124
BRANCH=link
TEST=compile link; 'ectool battery' from root shell prints valid info

Change-Id: I3650e27a08f4cc77067beb0685ee1488cc56d02f
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/43119
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
2013-02-12 13:46:44 -08:00
Randall Spangler
c19a4db9e4 link: If a required power rail drops, shut down
This protects the system from ending up in a weird state if one of the
rails fails to come up, or shuts down after coming up.

BUG=chrome-os-partner:17774
BRANCH=link
TEST=manual

- Boot system
- From EC console: gpioset enable_1_5v_ddr 0
- System shuts down; EC console prints "x86 power lost input"
- Press power button; system turns back on
- From EC console: gpioset enable_vs 0
- System shuts down; EC console prints "x86 power lost input"
- Press power button; system turns back on
- Suspend system
- From EC console: gpioset enable_1_5v_ddr 0
- System shuts down; EC console prints "x86 power lost input"
- Press power button; system turns back on

Change-Id: I8ae1630deb4001716b8dfd89d7dec7300cddb5ae
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/43097
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
2013-02-12 10:35:12 -08:00
Vic Yang
c93378dafa spring: Distinguish Apple Chargers
This uses D+/D- voltage to distinguish different Apple chargers.

BUG=chrome-os-partner:14319
TEST=Manual on Spring
BRANCH=none

Change-Id: I50075d466f6e6b1adf613748cf433d7f43c04bfe
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/42850
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
2013-02-07 22:06:05 -08:00
Vic Yang
f4a9ffdee3 spring: Control battery LED
This implements a basic battery LED policy:
  - Charged: green
  - Charging: yellow
  - Error: red
  - No charger: off

BUG=chrome-os-partner:17561
TEST=Manual
BRANCH=none

Change-Id: I7fa8242efa4d0382d8ef0cafe80f01d44c390397
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/42607
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
2013-02-05 20:16:17 -08:00
Vic Yang
c06e987c1b Tweak lp5562 driver interface
This makes it possible to define color constants so as to reduce code
size when called.

BUG=chrome-os-partner:17561
TEST=Build success.
BRANCH=none

Change-Id: I800b8d4b84749907b071febfea58d27fef7cc2b7
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/42617
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
2013-02-05 09:45:44 -08:00
Vic Yang
17dae824d2 spring: Add LP5562 driver
BUG=chrome-os-partner:17341
TEST=Set LED color on Spring board
BRANCH=none

Change-Id: Ibae11a0cf8a724a38e96c5c49952799101bb5764
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/41693
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
2013-01-21 20:25:47 -08:00
Vincent Palatin
c8a61c39ef Add a pass-through for the smart battery
Allow to send commands to the smart battery using EC commands when the
battery is connected to an I2C bus behind the EC.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>

BRANCH=none
BUG=chrome-os-partner:14314
TEST=on Spring, with a kernel including patch to use the pass-through
for the sbs-battery driver, run "power-supply-info" and see the correct
information.

Change-Id: Ie10f1c95afe4a33cf0b55d5a0de7640d5971ebb3
Reviewed-on: https://gerrit.chromium.org/gerrit/41289
Reviewed-by: Vic Yang <victoryang@chromium.org>
Commit-Queue: Vincent Palatin <vpalatin@chromium.org>
Tested-by: Vincent Palatin <vpalatin@chromium.org>
2013-01-19 10:59:20 -08:00
Vincent Palatin
b24b745f81 Add a pass-through for TPSchrome LDOs
Allow to send commands to switch on/off the TPSchrome LDOs by using EC commands
when the TPSchrome chip is connected to an I2C bus behind the EC.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>

BRANCH=none
BUG=chrome-os-partner:14314
TEST=on Spring, with an updated bootloader, switch on screen FETs from
U-Boot instead of hardcoding them in the EC board code.

Change-Id: Ic6cebf04ba73a7c0ca2c54f532f8cf4c953ac0c1
Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/41288
Reviewed-by: Vic Yang <victoryang@chromium.org>
2013-01-16 08:35:03 -08:00
Vic Yang
fd29230988 spring: Add a host command for USB mux switching
To make test and bring-up easier, adds a host command for USB mux
switching.

BUG=chrome-os-partner:17111
TEST=manual
BRANCH=none

Change-Id: I9da43fe934881ce24f326275ef312c4e6a474f11
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/40586
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
2013-01-08 09:30:00 -08:00
Vic Yang
40c79398a6 spring: Sense attached device type
This adds USB port control to charger task. For now, it only senses
attached device type and log it to console.

BUG=chrome-os-partner:14319
TEST=Attach/detach charger and see console output.
BRANCH=none

Change-Id: I1218d520c292d9d398c868122ae3876d3fc889bc
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/40078
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
2013-01-08 08:58:36 -08:00
Vic Yang
6eb8a6e999 tps65090: Throttle PMU interrupt instead of charger task
This is a prepartory work for integrating USB port control into PMU
task.

Currently TPS65090 charger task is throttled to only waken by event once
per 500 ms. This in a way makes it hard to integrate other functionality
into this task. This CL moves the throttling mechanism to interrupt
handler so as to provide better control of when to throttle the
interrupt event.

BUG=chrome-os-partner:14319
TEST=Build success and boot on spring.
BRANCH=none

Change-Id: I72e63180442b379a379e1a87c10ef62395434872
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/40189
Reviewed-by: Rong Chang <rongchang@chromium.org>
2012-12-28 07:48:24 -08:00
Vic Yang
4d7820f4ad spring: Add interrupt and device type support for TSU6721
This adds functions to control interrupt and get device type from
TSU6721.
Also expose initialization function so that we can initialize TSU6721
before we solve the initialization problem.

BUG=chrome-os-partner:14318
TEST=Build success.
BRANCH=none

Change-Id: Ia50f1c93309360d35902a707090694e94a3f7a74
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/40077
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
2012-12-21 08:23:24 -08:00
Bill Richardson
3eb6f58d3e Add AP userspace scripts to tweak lightbar colors
We have yet another tweak for the lightbar, but we don't want to update the
EC. This CL adds an init script that runs on the AP at every boot and pokes
the EC to modify the lightbar settings. We have to run it at every boot
because the EC will hibernate after the AP has been off (not suspended) for
an hour on battery power and will lose its settings.

There's a corresponding CL for the ec-utils ebuild that installs the
userspace scripts into the rootfs.

BUG=chrome-os-partner:16827
BRANCH=link
TEST=manual

Build the image for Link, install, reboot.

Run "ectool lightbar params". The output should match what's in
/usr/share/ec/lightbar_params.txt

Change-Id: If50ac2ef2432f7d60cdaf4c222b68dbdee80b2ec
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/39979
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Reviewed-by: Richard Barnette <jrbarnette@chromium.org>
2012-12-20 10:01:18 -08:00
Vincent Palatin
e927d1506a spring: add basic TSU6721 driver
for now, just control the USB pins muxing.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>

BRANCH=none
BUG=chrome-os-partner:14318
TEST=on Spring, put the EC UART on the micro-B connector and read it
using a modified FTDI cable.

Change-Id: Ib0c87e483fb0bbe1835bd6ea008176b88d6f12f8
Reviewed-on: https://gerrit.chromium.org/gerrit/38361
Commit-Ready: Vincent Palatin <vpalatin@chromium.org>
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Tested-by: Vincent Palatin <vpalatin@chromium.org>
2012-12-13 09:01:09 -08:00
Randall Spangler
ab727c4941 Add more paranoia for flash write protect
If the entire flash is protected (as it normally is after software
sync), fail all flash write/erase operations.

Add a shadow copy of the all_now flag.

BUG=chrome-os-partner:16727
BRANCH=link
TEST=manual

Verify that flash operations work properly before all_now.  Then enable HW WP
and
   flashwp enable
   flashwp now
and try
   flasherase 0x38000 0x1000
   flashwrite 0x38000 0x100
Those commands should fail with error 7

From the host side
   ectool flasherase 0x38000 0x1000
   echo 'Khaaaaaaaaaaan' > /tmp/b16727
   ectool flashwrite 0x38000 /tmp/b16727
should also fail.

Change-Id: I99a4d2bb86080bd12c900582a8fbdfc79c99916c
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/39517
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
2012-12-10 15:42:21 -08:00
Randall Spangler
ad2adc4022 Invalidate hash if flash operation changes the hashed region
This prevents the EC from returning a stale hash.

BUG=chrome-os-partner:16668
BRANCH=link,snow
TEST=manual, with WP disabled

From EC console
- Boot system and wait a second
- hash --> prints valid hash
- flasherase 0x20000 0x1000
- hash --> invalid
- hash rw
- hash --> prints valid hash
- flashwrite 0x20000 0x1000
- hash --> invalid
- hash rw
- flasherase 0x38000 0x1000
- flashwrite 0x38000 0x1000
- hash --> still valid (since 0x38000 is outside the rw section)

From root shell
- ectool hash --> prints valid hash
- ectool flasherase 0x20000 0x1000
- ectool hash --> invalid
- ectool hash recalc RW
- ectool hash --> prints valid hash
- echo 'Making a hash of this' > /tmp/hashofthis
- ectool flashwrite 0x20000 /tmp/hashofthis
- ectool hash --> invalid
- ectool hash recalc RW
- ectool flasherase 0x38000 0x1000
- ectool flashwrite 0x38000 /tmp/hashofthis
- ectool hash --> still valid (since 0x38000 is outside the rw section)

Change-Id: Id915a504a7bc70b8b8c339b5ce55dc5bad5838fe
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/39484
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
2012-12-10 15:14:38 -08:00
Randall Spangler
3d0d2adb63 link: Enable +5VALW at boot and leave it enabled
This works around a problem where disabling +5VALW glitches +3VALW_EC,
which may cause the EC to brown out or hang.

BUG=chrome-os-partner:16600
BRANCH=link
TEST=manual

1. When the system boots, look for this line as the first x86 power state:
  [0.004977 x86 power state 0 = G3, in 0x0001]
2. Boot the system.  Should boot normally.
3. Shut down the system using the power button.
4. After ~10 seconds, you should see that line of output again.
5. At the EC console: 'gpioget enable_5valw' should output:
  1* ENABLE_5VALW

This should ideally be combined with a hardware fix to add 30+ ms of
delay to EC_EN_5V, since when the EC is reset via power+refresh that
tri-states EC_EN_5V, and it takes ~22ms for the EC to boot and start
driving EC_EN_5V again.

Change-Id: Iba4d961d064105faf988a35c2277e9d7406e39e2
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/39334
Reviewed-by: Yung-Chieh Lo <yjlou@chromium.org>
2012-12-06 17:58:31 -08:00
Randall Spangler
e2f8466997 Handle bus errors on thermal I2C bus
1) Properly report I2C errors on TMP006 as error, not device-not-powered.

2) Treat clock timeout and bus-busy I2C status as error (previously ignored).

3) If clock timeout or bus-busy, reset I2C master for that bus to clear the
error.

These should help with systems where the thermal I2C bus gets into a
weird state on suspend/resume.

BUG=chrome-os-partner:16262
BRANCH=link

TEST=boot system; 'battery' and 'temps' should give good info
Then run snanda's suspend_stress_test for a while and repeat.

Change-Id: I534be8236a4d6de82575fe6d33a68502ce0a3a95
Original-Change-Id: Iec5d6bbd357d2e5eb3dc3d361c829f353e996ab6
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/38444
Reviewed-on: https://gerrit.chromium.org/gerrit/38659
Reviewed-by: Yung-Chieh Lo <yjlou@chromium.org>
2012-11-26 14:49:49 -08:00
Vincent Palatin
3c575ccb02 link: allow to decrease maximum battery charging current
Add an interface to allow the CPU to cap the maximum battery charging
current.
The maximum is removed every time the machine goes to S3 or S5.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>

BRANCH=link
BUG=chrome-os-partner:16041
TEST=on Link, plug AC to charge the battery,
then run "ectool chargecurrentlimit 1200" and see
the charging current in "power-supply-info" decreasing to 1.2 A.

Change-Id: I10900e1c264d2db67809638ec0dcb836d721fa75
Reviewed-on: https://gerrit.chromium.org/gerrit/37532
Reviewed-by: Sameer Nanda <snanda@chromium.org>
Reviewed-by: Rong Chang <rongchang@chromium.org>
Commit-Ready: Vincent Palatin <vpalatin@chromium.org>
Tested-by: Vincent Palatin <vpalatin@chromium.org>
2012-11-07 23:48:04 -08:00
Vincent Palatin
7551e8f57f x86: set hibernation delay to 1 hour
When the system is in S5, it will go to hibernate mode after 1 hour
instead of 24 hours.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>

BRANCH=link
BUG=none
TEST=on Link DVT3 with servo connected, turn off the machine and
see the EC going to hibernate after 1 hour (according to EC UART traces)
start the machine and see it boot properly.

Change-Id: I1da87b3e09b90817ce5609f3f74b5969235fb90a
Reviewed-on: https://gerrit.chromium.org/gerrit/37526
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
Tested-by: Vincent Palatin <vpalatin@chromium.org>
Commit-Ready: Vincent Palatin <vpalatin@chromium.org>
2012-11-07 23:48:03 -08:00
Louis Yung-Chieh Lo
25bbb6b5de More supports for A20 enable/disable
Add i8042 output port commands (0xf0-0xff), I8042_ENABLE_A20 and
I8042_DISABLE_A20.

BUG=chrome-os-partner:13119,
BRANCH=None
TEST=Tested on W7 installer. No KB error shown on EC console.

Change-Id: I9ad1fd7baa10683ef18ccf13faf09dc0cefcca0a
Signed-off-by: Louis Yung-Chieh Lo <yjlou@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/34994
Reviewed-by: Stefan Reinauer <reinauer@chromium.org>
2012-11-04 20:27:57 -08:00
Randall Spangler
e9e02762dd Move reset/overheat/shutdown funcs to chipset interface
They're not x86-specific, so move to the chipset interface.

BUG=chrome-os-partner:15579
BRANCH=none
TEST=x86reset warm, then x86reset cold.  Should reboot OS in each case.

Change-Id: Ib571ab916bab16179198a0d054320e59afbae124
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/36785
2012-11-01 12:45:28 -07:00
Randall Spangler
d83f42bdc8 Switch temp sensor polling to use hooks instead of task
This reduces memory / code size, and gets rid of ifdefs in temp_sensor.c.

BUG=chrome-os-partner:15714
BRANCH=none
TEST=boot system and run 'ectool temps all' every few seconds
    - ectool temps all
The numbers should update over time.

Change-Id: Idaac7e6e4cbc1d6689f5d3b607c623a5cc536a4f
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/36940
2012-11-01 12:45:22 -07:00
Randall Spangler
e3c5f77924 link: Fix overflow in hibernate time calculation
The time out value passed to task_wait_event() is signed 32-bit and
thus waiting for 24 hours will cause overflow.  Limit max wait time.

BUG=chrome-os-partner:15797
BRANCH=link

TEST=Disconnect AC, shut down system, and close lid.  From ec console,
do 'hibdelay 8000' and then wait 2.5 hours.  EC should have
hibernated.  (8000 is more than twice the max time for
task_wait_event())

Change-Id: I5fa505554182e8bad6399c12a382ff71bb123d8f
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/37095
Reviewed-by: Vic Yang <victoryang@chromium.org>
2012-11-01 10:08:54 -07:00
Simon Glass
f3c88fa1ab stm32: Implement keyscan test infrastructure
Support the keyscan test functionality on stm32.

Note: This is enabled by default so that it continues to build. But it
is unlikely that we will want this in a shipping image. I suggest we add
the facility for a dev build.

Secondly, the stack has to be larger due to a printf (which admittedly I
could just remove). Should we make the stack size conditional on the
CONFIG? Seems a bit ugly, on the other hand we don't want to waste IRAM.

BUG=chrome-os-partner:12179
BRANCH=none
TEST=manual for now:
On snow:
./ectool keyscan 20000 key_sequence.txt

See that the test passes.

Change-Id: Ic441ca0bde1be9589a924374605e2f146d16f423
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/35118
2012-10-31 17:21:00 -07:00
Randall Spangler
eee95c9448 Switch PWM to use HOOK_SECOND instead of its own task
BUG=chrome-os-partner:15714
BRANCH=none

TEST=taskinfo no longer shows PWM task, and 'ectool pwmgetfanrpm'
updates as fan speed changes.

Change-Id: Ia23f52527c40c8117238ddc2ee4c023f59eba05a
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/36939
Reviewed-by: Simon Glass <sjg@chromium.org>
2012-10-30 15:33:25 -07:00
Randall Spangler
433f98c6b6 Add per-second hook
PWM and temp sensor monitoring want to happen every second,
vs. several times a second for watchdog and LPC.

This is still considerably simpler than having tick functions declare
an interval at which they want to be called, which would require a
RAM-based array of pending tick functions and alarm times.  If you
need that level of complexity, you still need a task.

BUG=chrome-os-partner:15714
BRANCH=none

TEST=temporarily add HOOK_TICK and HOOK_SECOND hooks and see that on
LM4, HOOK_TICK is called 4x a second and HOOK_SECOND is called every
second.

Change-Id: I5c09842fd356d3254021486949b2799142068b4f
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/36938
Commit-Ready: Simon Glass <sjg@chromium.org>
2012-10-30 15:33:25 -07:00
Randall Spangler
8b3a242ff0 Watchdog is reloaded by HOOK_TICK, not its own task
This reduces memory footprint.

BUG=chrome-os-partner:15714
BRANCH=none
TEST=system still boots; 'waitms 1500' prints watchdog error dump

Change-Id: Ieb0248a34655514b03d919cc36c2b369691da716
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/36937
Reviewed-by: Simon Glass <sjg@chromium.org>
2012-10-30 15:33:24 -07:00