Message ID | 20240426-dev-mule-i2c-mux-v1-0-045a482f6ffb@theobroma-systems.com (mailing list archive) |
---|---|
Headers | show |
Series | Add Mule I2C multiplexer support | expand |
On Fri, 26 Apr 2024 18:49:31 +0200, Farouk Bouabid wrote: > Mule is an mcu that emulates a set of i2c devices which are reacheable > through an i2c-mux. > > The emulated devices share a single i2c address with the mux itself where > the requested register is what determines which logic is executed (mux or > device): > > 1- The devices on the mux can be selected (mux function) by writing the > appropriate device number to an i2c config register (0xff) that is not > used by any device logic. > > 2- Any access to a register other than the config register will be > handled by the previously selected device. > > +-------------------------------------------------------+ > | Mule | > | +---------------+ | > ----+-(1)->|Config register|-----+ | > | | +---------------+ | | > | | V_ | > | | | \ +--------+ | > | | | \-------->| dev #0 | | > | | | | +--------+ | > | | | M |-------->| dev #1 | | > | +-----------(2)------------->| U | +--------+ | > | | X |-------->| dev #2 | | > | | | +--------+ | > | | /-------->| dev #3 | | > | |__/ +--------+ | > +-------------------------------------------------------+ > > The current i2c-mux implementation does not allow the mux to share the i2c > address of a child device. As a workaround, when creating each i2c child > adapter we do not assign the parent adapter to avoid the address-match with > the mux. > > This patch-series adds support for this multiplexer. Mule is integrated > as part of rk3399-puma, px30-ringneck, rk3588-tiger and rk3588-jaguar > boards. > > Signed-off-by: Farouk Bouabid <farouk.bouabid@theobroma-systems.com> > --- > Farouk Bouabid (7): > i2c: mux: add the ability to share mux-address with child nodes > dt-bindings: i2c: mux: mule: add dt-bindings for mule i2c multiplexer > i2c: muxes: add support for mule i2c multiplexer > arm64: dts: rockchip: add mule i2c mux (0x18) on rk3399-puma > arm64: dts: rockchip: add mule i2c mux (0x18) on rk3588-tiger > arm64: dts: rockchip: add mule i2c mux (0x18) on px30-ringneck > arm64: dts: rockchip: add mule i2c mux (0x18) on rk3588-jaguar > > .../devicetree/bindings/i2c/i2c-mux-mule.yaml | 80 +++++++++++ > arch/arm64/boot/dts/rockchip/px30-ringneck.dtsi | 20 ++- > arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi | 20 ++- > arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts | 19 ++- > arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi | 19 ++- > drivers/i2c/i2c-mux.c | 10 +- > drivers/i2c/muxes/Kconfig | 11 ++ > drivers/i2c/muxes/Makefile | 1 + > drivers/i2c/muxes/i2c-mux-mule.c | 157 +++++++++++++++++++++ > include/linux/i2c-mux.h | 1 + > 10 files changed, 327 insertions(+), 11 deletions(-) > --- > base-commit: c85af715cac0a951eea97393378e84bb49384734 > change-id: 20240404-dev-mule-i2c-mux-9103cde07021 > > Best regards, > -- > Farouk Bouabid <farouk.bouabid@theobroma-systems.com> > > > My bot found new DTB warnings on the .dts files added or changed in this series. Some warnings may be from an existing SoC .dtsi. Or perhaps the warnings are fixed by another series. Ultimately, it is up to the platform maintainer whether these warnings are acceptable or not. No need to reply unless the platform maintainer has comments. If you already ran DT checks and didn't see these error(s), then make sure dt-schema is up to date: pip3 install dtschema --upgrade New warnings running 'make CHECK_DTBS=y rockchip/rk3588-jaguar.dtb' for 20240426-dev-mule-i2c-mux-v1-0-045a482f6ffb@theobroma-systems.com: arch/arm64/boot/dts/rockchip/rk3588-jaguar.dtb: fan@18: '#cooling-cells' does not match any of the regexes: 'pinctrl-[0-9]+' from schema $id: http://devicetree.org/schemas/trivial-devices.yaml#
Mule is an mcu that emulates a set of i2c devices which are reacheable through an i2c-mux. The emulated devices share a single i2c address with the mux itself where the requested register is what determines which logic is executed (mux or device): 1- The devices on the mux can be selected (mux function) by writing the appropriate device number to an i2c config register (0xff) that is not used by any device logic. 2- Any access to a register other than the config register will be handled by the previously selected device. +-------------------------------------------------------+ | Mule | | +---------------+ | ----+-(1)->|Config register|-----+ | | | +---------------+ | | | | V_ | | | | \ +--------+ | | | | \-------->| dev #0 | | | | | | +--------+ | | | | M |-------->| dev #1 | | | +-----------(2)------------->| U | +--------+ | | | X |-------->| dev #2 | | | | | +--------+ | | | /-------->| dev #3 | | | |__/ +--------+ | +-------------------------------------------------------+ The current i2c-mux implementation does not allow the mux to share the i2c address of a child device. As a workaround, when creating each i2c child adapter we do not assign the parent adapter to avoid the address-match with the mux. This patch-series adds support for this multiplexer. Mule is integrated as part of rk3399-puma, px30-ringneck, rk3588-tiger and rk3588-jaguar boards. Signed-off-by: Farouk Bouabid <farouk.bouabid@theobroma-systems.com> --- Farouk Bouabid (7): i2c: mux: add the ability to share mux-address with child nodes dt-bindings: i2c: mux: mule: add dt-bindings for mule i2c multiplexer i2c: muxes: add support for mule i2c multiplexer arm64: dts: rockchip: add mule i2c mux (0x18) on rk3399-puma arm64: dts: rockchip: add mule i2c mux (0x18) on rk3588-tiger arm64: dts: rockchip: add mule i2c mux (0x18) on px30-ringneck arm64: dts: rockchip: add mule i2c mux (0x18) on rk3588-jaguar .../devicetree/bindings/i2c/i2c-mux-mule.yaml | 80 +++++++++++ arch/arm64/boot/dts/rockchip/px30-ringneck.dtsi | 20 ++- arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi | 20 ++- arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts | 19 ++- arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi | 19 ++- drivers/i2c/i2c-mux.c | 10 +- drivers/i2c/muxes/Kconfig | 11 ++ drivers/i2c/muxes/Makefile | 1 + drivers/i2c/muxes/i2c-mux-mule.c | 157 +++++++++++++++++++++ include/linux/i2c-mux.h | 1 + 10 files changed, 327 insertions(+), 11 deletions(-) --- base-commit: c85af715cac0a951eea97393378e84bb49384734 change-id: 20240404-dev-mule-i2c-mux-9103cde07021 Best regards,