.../bindings/i2c/i2c-hotplug-gpio.yaml | 65 +++++ drivers/i2c/Kconfig | 11 + drivers/i2c/Makefile | 1 + drivers/i2c/i2c-hotplug-gpio.c | 266 ++++++++++++++++++ 4 files changed, 343 insertions(+) create mode 100644 Documentation/devicetree/bindings/i2c/i2c-hotplug-gpio.yaml create mode 100644 drivers/i2c/i2c-hotplug-gpio.c
ASUS Transformers require this driver for proper work with their dock. Dock is controlled by EC and its presence is detected by a GPIO. The Transformers have a connector that's used for USB, charging or for attaching a keyboard (called a dock; it also has a battery and a touchpad). This connector probably (I don't have the means to verify that) has an I2C bus lines and a "detect" line (pulled low on the dock side) among the pins. I guess there is either no additional chip or a transparent bridge/buffer chip, but nothing that could be controlled by software. For DT this setup could be modelled like an I2C gate or a 2-port mux with enable joining two I2C buses (one "closer" to the CPU as a parent). In this case it's hard to tell the difference if this is real or virtual hardware. This patchset is a predecessor of a possible larger patchset which should bring support for a asus-ec, an i2c mfd device programmed by Asus for their Transformers tablet line. Similar approach is used in Microsoft Surface RT for attachable Type Cover. > What is this actually doing? Basically it duplicates the parent i2c bus once detection GPIO triggers and probes all hot-pluggable devices which are connected to it. Once GPIO triggers a detach signal all hot-pluggable devices are unprobed and bus removed. > Is the GPIO an irq line for signalling hoplugging and can be used by > any driver or just this one? It can be shared if necessary but usually all hot-pluggable devices are gathered in one container and are plugged simultaneously. --- Changes from v2: - expanded descryption of driver implementation commit - expanded descryption in patchset cover - no changes to code or yaml from v2 Changes from v1: - documentation changes: - dropped | from description - dropped nodename - unified use of quotes - used GPIO_ACTIVE_LOW define - used phandle instead of path --- Michał Mirosław (1): i2c: Add GPIO-based hotplug gate Svyatoslav Ryhel (1): dt-bindings: i2c: add binding for i2c-hotplug-gpio .../bindings/i2c/i2c-hotplug-gpio.yaml | 65 +++++ drivers/i2c/Kconfig | 11 + drivers/i2c/Makefile | 1 + drivers/i2c/i2c-hotplug-gpio.c | 266 ++++++++++++++++++ 4 files changed, 343 insertions(+) create mode 100644 Documentation/devicetree/bindings/i2c/i2c-hotplug-gpio.yaml create mode 100644 drivers/i2c/i2c-hotplug-gpio.c -- 2.39.2
Hi Svyatoslav, On Sat, Jul 29, 2023 at 07:08:55PM +0300, Svyatoslav Ryhel wrote: > ASUS Transformers require this driver for proper work with their dock. > Dock is controlled by EC and its presence is detected by a GPIO. > > The Transformers have a connector that's used for USB, charging or > for attaching a keyboard (called a dock; it also has a battery and > a touchpad). This connector probably (I don't have the means to verify > that) has an I2C bus lines and a "detect" line (pulled low on the dock > side) among the pins. I guess there is either no additional chip or > a transparent bridge/buffer chip, but nothing that could be controlled > by software. For DT this setup could be modelled like an I2C gate or > a 2-port mux with enable joining two I2C buses (one "closer" to the > CPU as a parent). > > In this case it's hard to tell the difference if this is real or virtual > hardware. How did you test this device? > This patchset is a predecessor of a possible larger patchset which > should bring support for a asus-ec, an i2c mfd device programmed by > Asus for their Transformers tablet line. Similar approach is used in > Microsoft Surface RT for attachable Type Cover. Would be nice to have a driver using this support in the series, otherwise it looks like thrown there without any use. Do you have any use of it already? Even in your private repository just to take a look. Thanks, Andi
нд, 30 лип. 2023 р. о 20:49 Andi Shyti <andi.shyti@kernel.org> пише: > > Hi Svyatoslav, > > On Sat, Jul 29, 2023 at 07:08:55PM +0300, Svyatoslav Ryhel wrote: > > ASUS Transformers require this driver for proper work with their dock. > > Dock is controlled by EC and its presence is detected by a GPIO. > > > > The Transformers have a connector that's used for USB, charging or > > for attaching a keyboard (called a dock; it also has a battery and > > a touchpad). This connector probably (I don't have the means to verify > > that) has an I2C bus lines and a "detect" line (pulled low on the dock > > side) among the pins. I guess there is either no additional chip or > > a transparent bridge/buffer chip, but nothing that could be controlled > > by software. For DT this setup could be modelled like an I2C gate or > > a 2-port mux with enable joining two I2C buses (one "closer" to the > > CPU as a parent). > > > > In this case it's hard to tell the difference if this is real or virtual > > hardware. > > How did you test this device? > Using devices, which relay on this patch, here is a list of those: - ASUS Eee Pad Transformer TF101 (mainlined) - ASUS Transformer Prime TF201 (mainlined) - ASUS Transformer Pad TF300T/TF300TG/TF300TL (mainlined) - ASUS Transformer Infinity TF700T (mainlined) - ASUS VivoTab RT TF600T (WIP) - ASUS Transformer Pad TF701T (mainlined) Non ASUS device is Microsoft Surface RT Tested by many owners and users for more than a year iirc. > > This patchset is a predecessor of a possible larger patchset which > > should bring support for a asus-ec, an i2c mfd device programmed by > > Asus for their Transformers tablet line. Similar approach is used in > > Microsoft Surface RT for attachable Type Cover. > > Would be nice to have a driver using this support in the series, > otherwise it looks like thrown there without any use. Do you have > any use of it already? Even in your private repository just to > take a look. > Bindings which call gpio hotplug i2c bus: ASUS TF https://github.com/clamor-s/linux/commit/360f62f706670ab13101ef15b7f2bc8880da7a48 ASUS TF600T/TF701T https://github.com/clamor-s/linux/blob/transformer/arch/arm/boot/dts/tegra30-asus-tf600t.dts#L1050-L1089 Surface RT https://github.com/grate-driver/linux/blob/master/arch/arm/boot/dts/tegra30-microsoft-surface-rt.dts#L35-L53 > Thanks, > Andi
© 2016 - 2026 Red Hat, Inc.