[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20240426-dev-mule-i2c-mux-v1-0-045a482f6ffb@theobroma-systems.com>
Date: Fri, 26 Apr 2024 18:49:31 +0200
From: Farouk Bouabid <farouk.bouabid@...obroma-systems.com>
To: Wolfram Sang <wsa+renesas@...g-engineering.com>,
Peter Rosin <peda@...ntia.se>, Andi Shyti <andi.shyti@...nel.org>,
Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@...aro.org>,
Conor Dooley <conor+dt@...nel.org>,
Quentin Schulz <quentin.schulz@...obroma-systems.com>,
Heiko Stuebner <heiko@...ech.de>
Cc: linux-i2c@...r.kernel.org, linux-kernel@...r.kernel.org,
devicetree@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
linux-rockchip@...ts.infradead.org,
Farouk Bouabid <farouk.bouabid@...obroma-systems.com>
Subject: [PATCH 0/7] Add Mule I2C multiplexer support
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@...obroma-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@...obroma-systems.com>
Powered by blists - more mailing lists