Some Realtek RTL930x switches bit-bang several I2C buses on SoC GPIOs with a single SCL line and one SDA line per bus. The MokerLink POE-10G07110GSM, for example, has its fan controller, its PoE controllers and its SFP+ cage on SDA GPIOs 9, 10 and 11, all clocked by GPIO 8. i2c-gpio cannot describe this: every bus would request the same SCL GPIO.
This series adds a binding and a small driver that requests SCL once and registers one i2c-algo-bit adapter per SDA line, serializing the transfers so that only one bus clocks SCL at a time. The SoC's own I2C master (i2c-rtl9300) is wired to the same pins, but it moves at most 16 bytes per transfer, and the PoE controllers on this board only accept their 25 KiB firmware as one continuous write: sent in 16-byte writes, they NAK the second one. Tested on the MokerLink POE-10G07110GSM. Ross Cawston (2): dt-bindings: i2c: add GPIO buses sharing one SCL line i2c: add driver for GPIO buses sharing one SCL line .../bindings/i2c/i2c-gpio-shared-scl.yaml | 94 +++++++ MAINTAINERS | 7 + drivers/i2c/busses/Kconfig | 12 + drivers/i2c/busses/Makefile | 1 + drivers/i2c/busses/i2c-gpio-shared-scl.c | 229 ++++++++++++++++++ 5 files changed, 343 insertions(+) create mode 100644 Documentation/devicetree/bindings/i2c/i2c-gpio-shared-scl.yaml create mode 100644 drivers/i2c/busses/i2c-gpio-shared-scl.c -- 2.55.0.windows.5

