Files
OpenCellular/board
David Hendricks 42bc4b8b08 snow: re-configure I2C arbitration pins at AP off/on to fix leakage
This (re-)configures the I2C arbitration lines as floating inputs
when the AP powers off, and restores them strictly before the AP
powers on. This is intended to prevent leakage when the AP is off
and arbitration is not needed. This CL does not impact the AP
on/suspend case.

Signed-off-by: David Hendricks <dhendrix@chromium.org>
BRANCH=snow
BUG=chrome-os-partner:12573,chrome-os-partner:12381
TEST=manual (see notes below)

- PA4: SPI1_NSS / AP_CLAIM, input w/ pull-up when AP on
- PA6: SPI1_MISO / EC_CLAIM, output when AP is on
- Both floating when AP off
8 = input with pull up/down, 4 = floating input, 1 = output

AP off (before this CL):
> rw 0x40010800
read 0x40010800 = 0x41484144
> gpioget SPI1_NSS
  0* SPI1_NSS
> gpioget SPI1_MISO
  1  SPI1_MISO

AP off (after this CL):
> rw 0x40010800
read 0x40010800 = 0x44444144
> gpioget SPI1_NSS
  0* SPI1_NSS
> gpioget SPI1_MISO
  0* SPI1_MISO

AP on or suspended (before and after this CL):
> rw 0x40010800
read 0x40010800 = 0x81484144
> gpioget SPI1_NSS
  1* SPI1_NSS
> gpioget SPI1_MISO
  1* SPI1_MISO

Additional testing:
- "pmu 10000" and "cros_test i2c" in u-boot only showed the FET2
  control changing (as expected).

- "pmu 10000" and "while [ 1 ] ;
  do i2cdump -f -y -r 0-24 4 0x48 b ; done" and ran
  "suspend_stress_test" for a couple dozen iterations. The
  registers only changed as expected (FET1 and FET6 turned off
  when suspending).

Change-Id: I72f5cb1883d01b1faad6c2db65dfa09d477e1885
Reviewed-on: https://gerrit.chromium.org/gerrit/32078
Commit-Ready: David Hendricks <dhendrix@chromium.org>
Reviewed-by: David Hendricks <dhendrix@chromium.org>
Tested-by: David Hendricks <dhendrix@chromium.org>
2012-09-07 19:00:11 -07:00
..
2012-08-31 15:41:35 -07:00