alistair23-linux/drivers/mfd
Doug Anderson 9d230c9e4f i2c: ChromeOS EC tunnel driver
On ARM Chromebooks we have a few devices that are accessed by both the
AP (the main "Application Processor") and the EC (the Embedded
Controller).  These are:
* The battery (sbs-battery).
* The power management unit tps65090.

On the original Samsung ARM Chromebook these devices were on an I2C
bus that was shared between the AP and the EC and arbitrated using
some extranal GPIOs (see i2c-arb-gpio-challenge).

The original arbitration scheme worked well enough but had some
downsides:
* It was nonstandard (not using standard I2C multimaster)
* It only worked if the EC-AP communication was I2C
* It was relatively hard to debug problems (hard to tell if i2c issues
  were caused by the EC, the AP, or some device on the bus).

On the HP Chromebook 11 the design was changed to:
* The AP/EC comms were still i2c, but the battery/tps65090 were no
  longer on the bus used for AP/EC communication.  The battery was
  exposed to the AP through a limited i2c tunnel and tps65090 was
  exposed to the AP through a custom Linux driver.

On the Samsung ARM Chromebook 2 the scheme is changed yet again, now:
* The AP/EC comms are now using SPI for faster speeds.
* The EC's i2c bus is exposed to the AP through a full i2c tunnel.

The upstream "tegra124-venice2" uses the same scheme as the Samsung
ARM Chromebook 2, though it has a different set of components on the
other side of the bus.

This driver supports the scheme used by the Samsung ARM Chromebook 2.
Future patches to this driver could add support for the battery tunnel
on the HP Chromebook 11 (and perhaps could even be used to access
tps65090 on the HP Chromebook 11 instead of using a special driver,
but I haven't researched that enough).

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Doug Anderson <dianders@chromium.org>
Reviewed-by: Wolfram Sang <wsa@the-dreams.de>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
2014-06-03 08:11:49 +01:00
..
88pm80x.c mfd: 88pm80x: Change chip id definition and detection 2013-06-18 09:41:10 +02:00
88pm800.c mfd: 88pm800: Fix I2C device resource leak if probe fails 2014-03-19 08:58:15 +00:00
88pm805.c mfd: marvell: Constify struct mfd_cell where possible 2014-01-06 09:13:26 +00:00
88pm860x-core.c mfd: 88pm860x: Fix possible NULL pointer dereference on i2c_new_dummy error 2014-03-19 08:58:11 +00:00
88pm860x-i2c.c
aat2870-core.c mfd: aat2870: Fix sparse error 2013-10-23 16:20:44 +01:00
ab3100-core.c mfd: Use dev_get_platdata() 2013-07-31 13:01:29 +01:00
ab3100-otp.c mfd: ab3100-otp: Convert to managed resources for allocating memory 2013-06-13 12:11:39 +02:00
ab8500-core.c mfd: dbx500/abx500: root out hardcoded IRQ assignments 2014-03-04 08:58:11 +08:00
ab8500-debugfs.c mfd: ab8500-debugfs: Move dereference after check for NULL 2014-01-06 09:13:17 +00:00
ab8500-gpadc.c mfd: ab8500-gpadc: Add CONFIG_PM_SLEEP to suspend/resume 2013-08-14 18:52:51 +01:00
ab8500-sysctrl.c mfd: ab8500-sysctrl: Let sysctrl driver work without pdata 2013-05-21 23:23:21 +02:00
abx500-core.c mfd: abx500-core: Fix compiler warning larger stack frame 2014-06-03 08:11:11 +01:00
adp5520.c mfd: Delete non-required instances of include <linux/init.h> 2014-03-19 08:58:07 +00:00
arizona-core.c mfd: arizona: Add MICVDD to mapped regulators 2014-06-03 08:11:44 +01:00
arizona-i2c.c mfd: arizona: Include linux/of.h header 2013-10-23 16:22:06 +01:00
arizona-irq.c mfd: arizona: Correct error message for addition of main IRQ chip 2014-06-03 08:11:45 +01:00
arizona-spi.c mfd: arizona: Include linux/of.h header 2013-10-23 16:22:06 +01:00
arizona.h mfd: arizona: Integrate wm8997 into Arizona mfd 2013-06-18 00:49:52 +02:00
as3711.c mfd: as3711: Make of_device_id array const 2014-06-03 08:11:38 +01:00
as3722.c mfd: as3722: Make FUSE7_REG readable 2014-03-19 08:58:37 +00:00
asic3.c mfd: Constify struct mfd_cell where possible 2014-01-06 09:13:29 +00:00
axp20x.c mfd: AXP20x: Add mfd driver for AXP20x PMIC 2014-06-03 08:11:25 +01:00
bcm590xx.c mfd: bcm590xx: Fix modalias prefix 2014-06-03 08:11:09 +01:00
cros_ec.c i2c: ChromeOS EC tunnel driver 2014-06-03 08:11:49 +01:00
cros_ec_i2c.c mfd: cros ec: i2c: Use consistent function names 2014-01-21 08:13:35 +00:00
cros_ec_spi.c mfd: cros_ec: spi: Increase cros_ec_spi deadline from 5ms to 100ms 2014-06-03 08:11:48 +01:00
cs5535-mfd.c mfd: Delete non-required instances of include <linux/init.h> 2014-03-19 08:58:07 +00:00
da903x.c mfd: Use dev_get_platdata() 2013-07-31 13:01:29 +01:00
da9052-core.c mfd: da9052: Fix volatile register definition ommissions 2014-03-19 08:58:13 +00:00
da9052-i2c.c mfd: da9052: Add new DA9053 BC chip variant 2014-03-19 08:58:25 +00:00
da9052-irq.c
da9052-spi.c mfd: da9052: Add new DA9053 BC chip variant 2014-03-19 08:58:25 +00:00
da9055-core.c mfd: dialog: Constify struct mfd_cell where possible 2014-01-06 09:13:25 +00:00
da9055-i2c.c mfd: da9055: Add DT support for PMIC 2014-03-19 08:58:39 +00:00
da9063-core.c mfd: da9063: Add support for production silicon variant code 2014-03-19 08:58:19 +00:00
da9063-i2c.c mfd: da9063: Add Dialog DA9063 core driver 2013-08-20 03:15:52 +02:00
da9063-irq.c mfd: da9063: Add IRQ support 2013-08-20 03:16:00 +02:00
davinci_voicecodec.c mfd: davinci_voicecodec: Provide a regmap for register I/O 2013-09-02 10:27:49 +02:00
db8500-prcmu.c mfd: db8500-prcmu: Make mfd_cell array const 2014-06-03 08:11:33 +01:00
dbx500-prcmu-regs.h mfd: dbx500: Remove any mention of the BML8580CLK 2013-09-26 11:04:16 +02:00
dm355evm_msp.c mfd: Use dev_get_platdata() 2013-07-31 13:01:29 +01:00
ezx-pcap.c mfd: ezx-pcap: Drop devm_free_irq of devm_ allocated irq 2013-10-23 16:21:17 +01:00
htc-egpio.c mfd: Use dev_get_platdata() 2013-07-31 13:01:29 +01:00
htc-i2cpld.c mfd: Use dev_get_platdata() 2013-07-31 13:01:29 +01:00
htc-pasic3.c mfd: Constify struct mfd_cell where possible 2014-01-06 09:13:29 +00:00
intel_msic.c mfd: intel: Constify struct mfd_cell where possible 2014-01-06 09:13:28 +00:00
ipaq-micro.c mfd: ipaq-micro: Make mfd_cell array const 2014-06-03 08:11:43 +01:00
janz-cmodio.c mfd: Delete non-required instances of include <linux/init.h> 2014-03-19 08:58:07 +00:00
jz4740-adc.c mfd: Constify struct mfd_cell where possible 2014-01-06 09:13:29 +00:00
Kconfig mfd: Add driver for Atmel Microcontroller on iPaq h3xxx 2014-06-03 08:11:42 +01:00
kempld-core.c mfd: kempld-core: Make mfd_cell array const 2014-06-03 08:11:31 +01:00
lm3533-core.c mfd: Use dev_get_platdata() 2013-07-31 13:01:29 +01:00
lm3533-ctrlbank.c
lp3943.c mfd: lp3943: Make mfd_cell array const 2014-06-03 08:11:36 +01:00
lp8788-irq.c
lp8788.c mfd: Constify struct mfd_cell where possible 2014-01-06 09:13:29 +00:00
lpc_ich.c mfd: lpc_ich: Enable GPIO for Panther Point 2014-06-03 08:11:15 +01:00
lpc_sch.c mfd: Delete non-required instances of include <linux/init.h> 2014-03-19 08:58:07 +00:00
Makefile mfd: Add driver for Atmel Microcontroller on iPaq h3xxx 2014-06-03 08:11:42 +01:00
max8907.c mfd: max8907: Make of_device_id array const 2014-06-03 08:11:32 +01:00
max8925-core.c mfd: maxim: Constify struct mfd_cell where possible 2014-01-06 09:13:27 +00:00
max8925-i2c.c mfd: max8925: Fix possible NULL pointer dereference on i2c_new_dummy error 2014-03-19 08:58:10 +00:00
max8997-irq.c
max8997.c mfd: max8997: Make of_device_id array const 2014-06-03 08:11:30 +01:00
max8998-irq.c mfd: max8998: Add irq domain support 2013-06-30 23:29:44 +02:00
max8998.c mfd: max8998: Make of_device_id array const 2014-06-03 08:11:34 +01:00
max14577.c mfd: max14577: Make mfd_cell array const 2014-06-03 08:11:37 +01:00
max77686-irq.c
max77686.c mfd: max77686: Make of_device_id array const 2014-06-03 08:11:30 +01:00
max77693-irq.c mfd: max77693: Fix up bug of wrong interrupt number 2013-11-04 09:41:19 +01:00
max77693.c mfd: max77693: Make of_device_id array const 2014-06-03 08:11:32 +01:00
mc13xxx-core.c mfd: mc13xxx: Do not use platform data with devicetree 2014-06-03 08:11:29 +01:00
mc13xxx-i2c.c mfd: mc13xxx: Simplify probe() & remove() 2014-01-21 08:28:10 +00:00
mc13xxx-spi.c mfd: mc13xxx: Add missing spi_setup() 2014-03-19 08:58:35 +00:00
mc13xxx.h mfd: mc13xxx: Simplify probe() & remove() 2014-01-21 08:28:10 +00:00
mcp-core.c
mcp-sa11x0.c mfd: Delete non-required instances of include <linux/init.h> 2014-03-19 08:58:07 +00:00
menelaus.c mfd: menelaus: Use devm_*() functions 2013-08-20 08:51:32 +01:00
mfd-core.c mfd: core: Don't use devres functions before device is added 2014-06-03 08:11:18 +01:00
omap-usb-host.c mfd: omap-usb-host: Make of_device_id array const 2014-06-03 08:11:38 +01:00
omap-usb-tll.c mfd: omap-usb-tll: Fix cppcheck sizeof warning 2014-03-13 22:21:48 +00:00
omap-usb.h
palmas.c mfd: palmas: Remove redundant of_match_ptr 2013-10-23 16:22:01 +01:00
pcf50633-adc.c mfd: Delete non-required instances of include <linux/init.h> 2014-03-19 08:58:07 +00:00
pcf50633-core.c mfd: pcf50633: Correct device name for pcf50633 regulator 2013-12-02 17:58:58 +00:00
pcf50633-gpio.c
pcf50633-irq.c
pm8921-core.c mfd: pm8921: Remove pm8xxx API now that sub-devices use regmap 2014-06-03 08:11:23 +01:00
rc5t583-irq.c mfd: Delete non-required instances of include <linux/init.h> 2014-03-19 08:58:07 +00:00
rc5t583.c mfd: Constify struct mfd_cell where possible 2014-01-06 09:13:29 +00:00
rdc321x-southbridge.c mfd: rdc321x: Fix off-by-one for ngpio setting 2014-06-03 08:11:17 +01:00
retu-mfd.c mfd: Delete non-required instances of include <linux/init.h> 2014-03-19 08:58:07 +00:00
rtl8411.c mfd: rtsx: Fix sparse non static symbol warning 2014-01-21 08:28:14 +00:00
rts5209.c mfd: mmc: rtsx: Change default tx phase 2013-08-30 14:24:07 +02:00
rts5227.c For the 3.12 merge window we have one new driver for the DA9063 PMIC 2013-09-07 20:14:19 -07:00
rts5229.c mfd: mmc: rtsx: Change default tx phase 2013-08-30 14:24:07 +02:00
rts5249.c mfd: rtsx: Modify rts5249_optimize_phy 2013-10-23 16:20:59 +01:00
rtsx_pcr.c mmc: rtsx: Revert "mmc: rtsx: add support for pre_req and post_req" 2014-05-08 08:44:50 +01:00
rtsx_pcr.h mfd: rtsx: Add support for card reader rtl8402 2014-01-21 08:28:11 +00:00
rtsx_usb.c mfd: rtsx_usb: Make mfd_cell array const 2014-06-03 08:11:39 +01:00
sec-core.c mfd: sec-core: Make of_device_id array const 2014-06-03 08:11:35 +01:00
sec-irq.c mfd: sec-core: Remove duplicated device type from sec_pmic_dev 2014-06-03 08:11:21 +01:00
si476x-cmd.c
si476x-i2c.c mfd: Use dev_get_platdata() 2013-07-31 13:01:29 +01:00
si476x-prop.c
sm501.c mfd: sm501: Make of_device_id array const 2014-06-03 08:11:25 +01:00
smsc-ece1099.c mfd: Delete non-required instances of include <linux/init.h> 2014-03-19 08:58:07 +00:00
ssbi.c mfd: ssbi: Mark match table const 2014-01-21 08:28:08 +00:00
sta2x11-mfd.c mfd: sta2x11-mfd: Use named constants for pci_power_t values 2014-01-21 08:29:00 +00:00
stmpe-i2c.c mfd: stmpe: Probe properly from the Device Tree 2014-05-09 10:51:09 +01:00
stmpe-spi.c
stmpe.c mfd: stmpe: root out static GPIO and IRQ assignments 2014-05-23 09:41:01 +01:00
stmpe.h mfd: stmpe: mask off unused blocks properly 2014-05-09 10:51:06 +01:00
stw481x.c mfd: stw481x: Check the return value of devm_regmap_init_i2c 2014-03-19 08:58:17 +00:00
sun6i-prcm.c mfd: Add support for sun6i PRCM (Power/Reset/Clock Management) unit 2014-06-03 08:11:40 +01:00
syscon.c mfd: syscon: Allow property as NULL in syscon_regmap_lookup_by_phandle 2014-06-03 08:11:24 +01:00
t7l66xb.c mfd: Use dev_get_platdata() 2013-07-31 13:01:29 +01:00
tc3589x.c mfd: tc3589x: Reform device tree probing 2014-03-19 08:58:05 +00:00
tc6387xb.c mfd: toshiba: Constify struct mfd_cell where possible 2014-01-06 09:13:26 +00:00
tc6393xb.c mfd: Use dev_get_platdata() 2013-07-31 13:01:29 +01:00
ti_am335x_tscadc.c mfd: ti_am335x_tscadc: Use devm_ioremap_resource() 2014-03-19 08:58:13 +00:00
timberdale.c mfd: timberdale: Use pci_enable_msix_exact() instead of pci_enable_msix() 2014-03-19 08:58:34 +00:00
timberdale.h
tmio_core.c
tps6105x.c mfd: Use dev_get_platdata() 2013-07-31 13:01:29 +01:00
tps6507x.c mfd: tps6507x: Make of_device_id array const 2014-06-03 08:11:27 +01:00
tps6586x.c mfd: tps6586x: Make of_device_id array const 2014-06-03 08:11:28 +01:00
tps65010.c mfd: tps65010: Use devm_*() functions 2013-08-20 08:51:48 +01:00
tps65090.c mfd: tps65090: Stop caching most registers 2014-04-23 12:32:19 +01:00
tps65217.c mfd: tps65217: Naturalise cross-architecture discrepancies 2014-02-19 13:30:30 +00:00
tps65218.c mfd: tps65218: Add driver for the TPS65218 PMIC 2014-03-19 08:58:06 +00:00
tps65910.c mfd: tps65910: Make of_device_id array const 2014-06-03 08:11:26 +01:00
tps65911-comparator.c
tps65912-core.c mfd: Delete non-required instances of include <linux/init.h> 2014-03-19 08:58:07 +00:00
tps65912-i2c.c mfd: tps65912: Convert to managed resources for allocating memory 2013-06-13 12:11:39 +02:00
tps65912-irq.c mfd: Delete non-required instances of include <linux/init.h> 2014-03-19 08:58:07 +00:00
tps65912-spi.c mfd: tps65912: Convert to managed resources for allocating memory 2013-06-13 12:11:39 +02:00
tps80031.c mfd: ti: Constify struct mfd_cell where possible 2014-01-06 09:13:29 +00:00
twl-core.c Immutable branch between MFD and Extcon due for v3.16 merge-window. 2014-06-03 08:08:40 +01:00
twl-core.h
twl4030-audio.c mfd: Use dev_get_platdata() 2013-07-31 13:01:29 +01:00
twl4030-irq.c mfd: Delete non-required instances of include <linux/init.h> 2014-03-19 08:58:07 +00:00
twl4030-power.c mfd: twl4030-power: Staticize local functions 2013-08-01 09:55:33 +01:00
twl6030-irq.c mfd: Delete non-required instances of include <linux/init.h> 2014-03-19 08:58:07 +00:00
twl6040.c mfd: twl6040: Correct HPPLL configuration for 19.2 and 38.4 MHz mclk 2014-06-03 08:11:28 +01:00
ucb1x00-assabet.c
ucb1x00-core.c mfd: ucb1x00-core: Use SIMPLE_DEV_PM_OPS macro 2014-03-19 08:58:33 +00:00
ucb1x00-ts.c
ucb1400_core.c mfd: Use dev_get_platdata() 2013-07-31 13:01:29 +01:00
vexpress-config.c mfd: vexpress: Staticize vexpress_config_bridges 2014-03-19 08:58:38 +00:00
vexpress-sysreg.c mfd: vexpress-sysreg: Initialize 'site' variable 2014-03-19 08:58:15 +00:00
viperboard.c mfd: Constify struct mfd_cell where possible 2014-01-06 09:13:29 +00:00
vx855.c mfd: Remove DEFINE_PCI_DEVICE_TABLE macro 2014-01-21 08:27:45 +00:00
wl1273-core.c mfd: wl1273: Use devm_*() functions 2013-08-20 08:51:58 +01:00
wm831x-auxadc.c
wm831x-core.c mfd: wolfson: Constify struct mfd_cell where possible 2014-01-06 09:13:25 +00:00
wm831x-i2c.c mfd: wm831x: Use PM ops for shutdown 2014-01-21 08:27:51 +00:00
wm831x-irq.c mfd: Use dev_get_platdata() 2013-07-31 13:01:29 +01:00
wm831x-otp.c
wm831x-spi.c mfd: wm831x: Use PM ops for shutdown 2014-01-21 08:27:51 +00:00
wm5102-tables.c == Changes to existing drivers == 2014-04-07 10:24:18 -07:00
wm5110-tables.c mfd: wm5110: Add missing isolation control register 2014-06-03 08:11:14 +01:00
wm8350-core.c mfd: Delete non-required instances of include <linux/init.h> 2014-03-19 08:58:07 +00:00
wm8350-gpio.c
wm8350-i2c.c mfd: Use dev_get_platdata() 2013-07-31 13:01:29 +01:00
wm8350-irq.c mfd: Delete non-required instances of include <linux/init.h> 2014-03-19 08:58:07 +00:00
wm8350-regmap.c
wm8400-core.c mfd: wm8400-core: Make mfd_cell array const 2014-06-03 08:11:34 +01:00
wm8994-core.c mfd: wm8994-core: Naturalise cross-architecture discrepancies 2014-02-19 13:30:27 +00:00
wm8994-irq.c mfd: Use dev_get_platdata() 2013-07-31 13:01:29 +01:00
wm8994-regmap.c
wm8994.h
wm8997-tables.c mfd: wm8997: Add registers for high power mode 2014-06-03 08:11:44 +01:00