devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 0/8] Add tsd,mule-i2c-mux support
@ 2024-07-08 16:12 Farouk Bouabid
  2024-07-08 16:12 ` [PATCH v5 1/8] dt-bindings: i2c: add support for tsd,mule-i2c-mux Farouk Bouabid
                   ` (7 more replies)
  0 siblings, 8 replies; 14+ messages in thread
From: Farouk Bouabid @ 2024-07-08 16:12 UTC (permalink / raw)
  To: Andi Shyti, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Farouk Bouabid, Quentin Schulz, Peter Rosin, Jean Delvare,
	Guenter Roeck, Heiko Stuebner
  Cc: linux-i2c, devicetree, linux-kernel, linux-hwmon,
	linux-arm-kernel, linux-rockchip

Theobroma Systems Mule is an MCU that emulates a set of I2C devices which
are reachable through an I2C-mux.

The devices on the mux can be selected by writing the appropriate
device number to an I2C config register (0xff) that is not used by
amc6821 logic. This required us to add a new compatible to the amc6821
driver, from which, the new platform device "tsd,mule-i2c-mux" is probed.

The selected device on the mux can be accessed for reading and writing
at I2C address 0x6f.

      +--------+----------------+------------------------------+
      |  Mule                                                  |
 0x18 |        +------------------+                            |
--------+----->|    amc6821       |                            |
      | |      +------------------+                            |
      | +----->| tsd,mule-i2c-mux |---+                        |
      |        +------------------+   |                        |
      |                               V__          +---------+ |
      |                              |   \-------->| isl1208 | |
      |                              |   |         +---------+ |
 0x6f |                              | M |-------->| dev #1  | |
------------------------------------>| U |         +---------+ |
      |                              | X |-------->| dev #2  | |
      |                              |   |         +---------+ |
      |                              |   /-------->| dev #3  | |
      |                              |__/          +---------+ |
      +--------------------------------------------------------+

This patch-series adds support for the tsd,mule-i2c multiplexer
as part of rk3399-puma, px30-ringneck, rk3588-tiger and rk3588-jaguar
boards.

this patch-series depends on https://lore.kernel.org/lkml/20240705213547.1155690-1-linux@roeck-us.net/
to add regmap support to amc6821.

Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>

Changes in v5:
- Drop the mfd implementation of v4
- Add more dev_probe_err callbacks to tsd,mule-i2c-mux
- Instantiate tsd,mule-i2c-mux as a platform device from amc6821 driver
- add "Theobroma Systems" when describing mule.

- Link to v4: https://lore.kernel.org/lkml/20240618-dev-mule-i2c-mux-v4-0-5462d28354c8@cherry.de/

Changes in v4:
- Drop the previously added i2c adapter quirks
- Add platform driver probe to amc6821.
- Change mule-i2c-mux driver to a platform driver
- Add dev_probe_err in mule-i2c-mux driver
- Add support for tsd,mule in simple-mfd-i2c
- Add tsd,mule mfd to supported dts

- Link to v3: https://lore.kernel.org/r/20240611-dev-mule-i2c-mux-v3-0-08d26a28e001@cherry.de

Changes in v3:
- Change "i2c" in comments/commit-logs to "I2C"
- Fix long line-length
- Warn when "share_addr_with_children" is set and the Mux is not an I2C device
- Fix/stop propagating "I2C_AQ_SKIP_ADDR_CHECK" flag if "share_addr_with_children"
  is not set.
- Fix "old_fw" variable is used to indicate the reversed meaning.

- Link to v2: https://lore.kernel.org/r/20240506-dev-mule-i2c-mux-v2-0-a91c954f65d7@cherry.de

Changes in v2:
- Add i2c-adapter quirks to skip checking for conflict between the mux core
  and a child device address.
- Rename dt-binding to "tsd,mule-i2c-mux.yaml"
- Add Mule description to kconfig
- Fix indentation
- Move device table after probe

- Link to v1: https://lore.kernel.org/r/20240426-dev-mule-i2c-mux-v1-0-045a482f6ffb@theobroma-systems.com

---
Farouk Bouabid (8):
      dt-bindings: i2c: add support for tsd,mule-i2c-mux
      i2c: muxes: add support for tsd,mule-i2c multiplexer
      dt-bindings: i2c: add support for tsd,mule
      hwmon: (amc6821) add support for tsd,mule
      arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-jaguar
      arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3399-puma
      arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-tiger
      arm64: dts: rockchip: add tsd,mule-i2c-mux on px30-ringneck

 .../devicetree/bindings/i2c/tsd,mule-i2c-mux.yaml  |  69 +++++++++
 .../devicetree/bindings/i2c/tsd,mule.yaml          |  63 +++++++++
 arch/arm64/boot/dts/rockchip/px30-ringneck.dtsi    |  24 +++-
 arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi      |  24 +++-
 arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts     |  25 +++-
 arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi     |  23 ++-
 drivers/hwmon/amc6821.c                            |  25 +++-
 drivers/i2c/muxes/Kconfig                          |  16 +++
 drivers/i2c/muxes/Makefile                         |   1 +
 drivers/i2c/muxes/i2c-mux-mule.c                   | 155 +++++++++++++++++++++
 10 files changed, 401 insertions(+), 24 deletions(-)
---
base-commit: 97c57cb030b79def7b664c253e0c4f0702b9e758
change-id: 20240404-dev-mule-i2c-mux-9103cde07021

Best regards,
-- 
Farouk Bouabid <farouk.bouabid@cherry.de>


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v5 1/8] dt-bindings: i2c: add support for tsd,mule-i2c-mux
  2024-07-08 16:12 [PATCH v5 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
@ 2024-07-08 16:12 ` Farouk Bouabid
  2024-07-08 22:56   ` Rob Herring
  2024-07-08 16:12 ` [PATCH v5 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer Farouk Bouabid
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 14+ messages in thread
From: Farouk Bouabid @ 2024-07-08 16:12 UTC (permalink / raw)
  To: Andi Shyti, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Farouk Bouabid, Quentin Schulz, Peter Rosin, Jean Delvare,
	Guenter Roeck, Heiko Stuebner
  Cc: linux-i2c, devicetree, linux-kernel, linux-hwmon,
	linux-arm-kernel, linux-rockchip

Theobroma Systems Mule is an MCU that emulates a set of I2C devices,
among which devices that are reachable through an I2C-mux. The devices
on the mux can be selected by writing the appropriate device number to
an I2C config register.

Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>
---
 .../devicetree/bindings/i2c/tsd,mule-i2c-mux.yaml  | 69 ++++++++++++++++++++++
 1 file changed, 69 insertions(+)

diff --git a/Documentation/devicetree/bindings/i2c/tsd,mule-i2c-mux.yaml b/Documentation/devicetree/bindings/i2c/tsd,mule-i2c-mux.yaml
new file mode 100644
index 000000000000..28139b676661
--- /dev/null
+++ b/Documentation/devicetree/bindings/i2c/tsd,mule-i2c-mux.yaml
@@ -0,0 +1,69 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/i2c/tsd,mule-i2c-mux.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Theobroma Systems Mule I2C multiplexer
+
+maintainers:
+  - Farouk Bouabid <farouk.bouabid@cherry.de>
+  - Quentin Schulz <quentin.schulz@cherry.de>
+
+description: |
+  Theobroma Systems Mule is an MCU that emulates a set of I2C devices, among
+  which devices that are reachable through an I2C-mux. The devices on the mux
+  can be selected by writing the appropriate device number to an I2C config
+  register.
+
+
+      +--------------------------------------------------+
+      | Mule                                             |
+  0x18|    +---------------+                             |
+  -------->|Config register|----+                        |
+      |    +---------------+    |                        |
+      |                         V_                       |
+      |                        |  \          +--------+  |
+      |                        |   \-------->| dev #0 |  |
+      |                        |   |         +--------+  |
+  0x6f|                        | M |-------->| dev #1 |  |
+  ---------------------------->| U |         +--------+  |
+      |                        | X |-------->| dev #2 |  |
+      |                        |   |         +--------+  |
+      |                        |   /-------->| dev #3 |  |
+      |                        |__/          +--------+  |
+      +--------------------------------------------------+
+
+
+allOf:
+  - $ref: /schemas/i2c/i2c-mux.yaml#
+
+properties:
+  compatible:
+    const: tsd,mule-i2c-mux
+
+required:
+  - compatible
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    i2c-mux {
+        compatible = "tsd,mule-i2c-mux";
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        i2c@0 {
+            reg = <0x0>;
+            #address-cells = <1>;
+            #size-cells = <0>;
+
+            rtc@6f {
+                compatible = "isil,isl1208";
+                reg = <0x6f>;
+            };
+        };
+    };
+...
+

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v5 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer
  2024-07-08 16:12 [PATCH v5 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
  2024-07-08 16:12 ` [PATCH v5 1/8] dt-bindings: i2c: add support for tsd,mule-i2c-mux Farouk Bouabid
@ 2024-07-08 16:12 ` Farouk Bouabid
  2024-07-08 16:12 ` [PATCH v5 3/8] dt-bindings: i2c: add support for tsd,mule Farouk Bouabid
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 14+ messages in thread
From: Farouk Bouabid @ 2024-07-08 16:12 UTC (permalink / raw)
  To: Andi Shyti, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Farouk Bouabid, Quentin Schulz, Peter Rosin, Jean Delvare,
	Guenter Roeck, Heiko Stuebner
  Cc: linux-i2c, devicetree, linux-kernel, linux-hwmon,
	linux-arm-kernel, linux-rockchip

Theobroma Systems Mule is an MCU that emulates a set of I2C devices,
among which an amc6821 and devices that are reachable through an I2C-mux.
The devices on the mux can be selected by writing the appropriate device
number to an I2C config register (amc6821 reg 0xff).

This driver is expected to be probed as a platform device with amc6821
as its parent i2c device.

Add support for the mule-i2c-mux platform driver. The amc6821 driver
support for the mux will be added in a later commit.

Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>
---
 drivers/i2c/muxes/Kconfig        |  16 ++++
 drivers/i2c/muxes/Makefile       |   1 +
 drivers/i2c/muxes/i2c-mux-mule.c | 155 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 172 insertions(+)

diff --git a/drivers/i2c/muxes/Kconfig b/drivers/i2c/muxes/Kconfig
index db1b9057612a..6d2f66810cdc 100644
--- a/drivers/i2c/muxes/Kconfig
+++ b/drivers/i2c/muxes/Kconfig
@@ -119,4 +119,20 @@ config I2C_MUX_MLXCPLD
 	  This driver can also be built as a module.  If so, the module
 	  will be called i2c-mux-mlxcpld.
 
+config I2C_MUX_MULE
+	tristate "Theobroma Systems Mule I2C device multiplexer"
+	depends on OF && SENSORS_AMC6821
+	help
+	  Mule is an MCU that emulates a set of I2C devices, among which
+	  devices that are reachable through an I2C-mux. The devices on the mux
+	  can be selected by writing the appropriate device number to an I2C
+	  configuration register.
+
+	  If you say yes to this option, support will be included for a
+	  Theobroma Systems Mule I2C multiplexer. This driver provides access to
+	  I2C devices connected on this mux.
+
+	  This driver can also be built as a module.  If so, the module
+	  will be called i2c-mux-mule.
+
 endmenu
diff --git a/drivers/i2c/muxes/Makefile b/drivers/i2c/muxes/Makefile
index 6d9d865e8518..4b24f49515a7 100644
--- a/drivers/i2c/muxes/Makefile
+++ b/drivers/i2c/muxes/Makefile
@@ -10,6 +10,7 @@ obj-$(CONFIG_I2C_MUX_GPIO)	+= i2c-mux-gpio.o
 obj-$(CONFIG_I2C_MUX_GPMUX)	+= i2c-mux-gpmux.o
 obj-$(CONFIG_I2C_MUX_LTC4306)	+= i2c-mux-ltc4306.o
 obj-$(CONFIG_I2C_MUX_MLXCPLD)	+= i2c-mux-mlxcpld.o
+obj-$(CONFIG_I2C_MUX_MULE)	+= i2c-mux-mule.o
 obj-$(CONFIG_I2C_MUX_PCA9541)	+= i2c-mux-pca9541.o
 obj-$(CONFIG_I2C_MUX_PCA954x)	+= i2c-mux-pca954x.o
 obj-$(CONFIG_I2C_MUX_PINCTRL)	+= i2c-mux-pinctrl.o
diff --git a/drivers/i2c/muxes/i2c-mux-mule.c b/drivers/i2c/muxes/i2c-mux-mule.c
new file mode 100644
index 000000000000..062596869651
--- /dev/null
+++ b/drivers/i2c/muxes/i2c-mux-mule.c
@@ -0,0 +1,155 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Theobroma Systems Mule I2C device multiplexer
+ *
+ * Copyright (C) 2024 Theobroma Systems Design und Consulting GmbH
+ */
+
+#include <linux/i2c-mux.h>
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+#include <linux/property.h>
+#include <linux/regmap.h>
+
+#define MUX_CONFIG_REG  0xff
+#define MUX_DEFAULT_DEV 0x0
+
+struct mule_i2c_reg_mux {
+	struct regmap *regmap;
+};
+
+static inline int __mux_select(struct regmap *regmap, u32 dev)
+{
+	return regmap_write(regmap, MUX_CONFIG_REG, dev);
+}
+
+static int mux_select(struct i2c_mux_core *muxc, u32 dev)
+{
+	struct mule_i2c_reg_mux *mux = muxc->priv;
+
+	return __mux_select(mux->regmap, dev);
+}
+
+static int mux_deselect(struct i2c_mux_core *muxc, u32 dev)
+{
+	return mux_select(muxc, MUX_DEFAULT_DEV);
+}
+
+static void mux_remove(void *data)
+{
+	struct i2c_mux_core *muxc = data;
+
+	i2c_mux_del_adapters(muxc);
+
+	mux_deselect(muxc, MUX_DEFAULT_DEV);
+}
+
+static int mule_i2c_mux_probe(struct platform_device *pdev)
+{
+	struct device *mux_dev = &pdev->dev;
+	struct mule_i2c_reg_mux *priv;
+	struct i2c_client *client;
+	struct i2c_mux_core *muxc;
+	struct device_node *dev;
+	unsigned int readback;
+	int ndev, ret;
+	bool old_fw;
+
+	/* Count devices on the mux */
+	ndev = of_get_child_count(mux_dev->of_node);
+	dev_dbg(mux_dev, "%d devices on the mux\n", ndev);
+
+	client = to_i2c_client(mux_dev->parent);
+
+	muxc = i2c_mux_alloc(client->adapter, mux_dev, ndev, sizeof(*priv),
+			     I2C_MUX_LOCKED, mux_select, mux_deselect);
+	if (!muxc)
+		return dev_err_probe(mux_dev, -ENOMEM,
+				     "Failed to allocate mux struct\n");
+
+	priv = i2c_mux_priv(muxc);
+
+	priv->regmap = dev_get_regmap(mux_dev->parent, NULL);
+	if (IS_ERR(priv->regmap))
+		return dev_err_probe(mux_dev, PTR_ERR(priv->regmap),
+				     "No parent i2c register map\n");
+
+	platform_set_drvdata(pdev, muxc);
+
+	/*
+	 * MUX_DEFAULT_DEV is guaranteed to exist on all old and new mule fw.
+	 * mule fw without mux support will accept write ops to the
+	 * config register, but readback returns 0xff (register not updated).
+	 */
+	ret = mux_select(muxc, MUX_DEFAULT_DEV);
+	if (ret)
+		return dev_err_probe(mux_dev, ret,
+				     "Failed to write config register\n");
+
+	ret = regmap_read(priv->regmap, MUX_CONFIG_REG, &readback);
+	if (ret)
+		return dev_err_probe(mux_dev, ret,
+				     "Failed to read config register\n");
+
+	old_fw = (readback != MUX_DEFAULT_DEV);
+
+	ret = devm_add_action_or_reset(mux_dev, mux_remove, muxc);
+	if (ret)
+		return dev_err_probe(mux_dev, ret,
+				     "Failed to register mux remove\n");
+
+	/* Create device adapters */
+	for_each_child_of_node(mux_dev->of_node, dev) {
+		u32 reg;
+
+		ret = of_property_read_u32(dev, "reg", &reg);
+		if (ret)
+			return dev_err_probe(mux_dev, ret,
+					     "No reg property found for %s\n",
+					     of_node_full_name(dev));
+
+		if (old_fw && reg != 0) {
+			dev_warn(mux_dev,
+				 "Mux is not supported, please update Mule FW\n");
+			continue;
+		}
+
+		ret = mux_select(muxc, reg);
+		if (ret) {
+			dev_warn(mux_dev,
+				 "Device %d not supported, please update Mule FW\n", reg);
+			continue;
+		}
+
+		ret = i2c_mux_add_adapter(muxc, 0, reg);
+		if (ret)
+			return dev_err_probe(mux_dev, ret,
+					     "Failed to add i2c mux adapter %d\n", reg);
+	}
+
+	mux_deselect(muxc, MUX_DEFAULT_DEV);
+
+	return 0;
+}
+
+static const struct of_device_id mule_i2c_mux_of_match[] = {
+	{.compatible = "tsd,mule-i2c-mux",},
+	{},
+};
+MODULE_DEVICE_TABLE(of, mule_i2c_mux_of_match);
+
+static struct platform_driver mule_i2c_mux_driver = {
+	.driver		= {
+		.name	= "mule-i2c-mux",
+		.of_match_table = mule_i2c_mux_of_match,
+	},
+	.probe		= mule_i2c_mux_probe,
+};
+
+module_platform_driver(mule_i2c_mux_driver);
+
+MODULE_AUTHOR("Farouk Bouabid <farouk.bouabid@cherry.de>");
+MODULE_DESCRIPTION("I2C mux driver for Theobroma Systems Mule");
+MODULE_LICENSE("GPL");

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v5 3/8] dt-bindings: i2c: add support for tsd,mule
  2024-07-08 16:12 [PATCH v5 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
  2024-07-08 16:12 ` [PATCH v5 1/8] dt-bindings: i2c: add support for tsd,mule-i2c-mux Farouk Bouabid
  2024-07-08 16:12 ` [PATCH v5 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer Farouk Bouabid
@ 2024-07-08 16:12 ` Farouk Bouabid
  2024-07-08 17:17   ` Rob Herring (Arm)
  2024-07-08 23:03   ` Rob Herring
  2024-07-08 16:12 ` [PATCH v5 4/8] hwmon: (amc6821) " Farouk Bouabid
                   ` (4 subsequent siblings)
  7 siblings, 2 replies; 14+ messages in thread
From: Farouk Bouabid @ 2024-07-08 16:12 UTC (permalink / raw)
  To: Andi Shyti, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Farouk Bouabid, Quentin Schulz, Peter Rosin, Jean Delvare,
	Guenter Roeck, Heiko Stuebner
  Cc: linux-i2c, devicetree, linux-kernel, linux-hwmon,
	linux-arm-kernel, linux-rockchip

Theobroma Systems Mule is an MCU that emulates a set of I2C devices,
among which is an amc6821 and other devices that are reachable through
an I2C-mux. The devices on the mux can be selected by writing the
appropriate device number to an I2C config register (amc6821: reg 0xff)

Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>
---
 .../devicetree/bindings/i2c/tsd,mule.yaml          | 63 ++++++++++++++++++++++
 1 file changed, 63 insertions(+)

diff --git a/Documentation/devicetree/bindings/i2c/tsd,mule.yaml b/Documentation/devicetree/bindings/i2c/tsd,mule.yaml
new file mode 100644
index 000000000000..dbbabba8dd6f
--- /dev/null
+++ b/Documentation/devicetree/bindings/i2c/tsd,mule.yaml
@@ -0,0 +1,63 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/i2c/tsd,mule.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Theobroma Systems Mule I2C device
+
+maintainers:
+  - Farouk Bouabid <farouk.bouabid@cherry.de>
+  - Quentin Schulz <quentin.schulz@cherry.de>
+
+description: |
+  Theobroma Systems Mule is an MCU that emulates a set of I2C devices, among
+  which is an amc6821 and other devices that are reachable through an I2C-mux.
+  The devices on the mux can be selected by writing the appropriate device
+  number to an I2C config register (amc6821: reg 0xff)
+
+additionalProperties: true
+
+properties:
+  compatible:
+    contains:
+      enum:
+        - tsd,mule
+        - ti,amc6821
+
+  reg:
+    maxItems: 1
+
+required:
+  - compatible
+  - reg
+
+examples:
+  - |
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        fan@18 {
+            compatible = "tsd,mule", "ti,amc6821";
+            reg = <0x18>;
+
+            i2c-mux {
+                compatible = "tsd,mule-i2c-mux";
+                #address-cells = <1>;
+                #size-cells = <0>;
+
+                i2c@0 {
+                    reg = <0x0>;
+                    #address-cells = <1>;
+                    #size-cells = <0>;
+
+                    rtc@6f {
+                        compatible = "isil,isl1208";
+                        reg = <0x6f>;
+                    };
+                };
+            };
+        };
+    };
+...

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v5 4/8] hwmon: (amc6821) add support for tsd,mule
  2024-07-08 16:12 [PATCH v5 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
                   ` (2 preceding siblings ...)
  2024-07-08 16:12 ` [PATCH v5 3/8] dt-bindings: i2c: add support for tsd,mule Farouk Bouabid
@ 2024-07-08 16:12 ` Farouk Bouabid
  2024-07-08 21:45   ` Guenter Roeck
  2024-07-08 16:12 ` [PATCH v5 5/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-jaguar Farouk Bouabid
                   ` (3 subsequent siblings)
  7 siblings, 1 reply; 14+ messages in thread
From: Farouk Bouabid @ 2024-07-08 16:12 UTC (permalink / raw)
  To: Andi Shyti, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Farouk Bouabid, Quentin Schulz, Peter Rosin, Jean Delvare,
	Guenter Roeck, Heiko Stuebner
  Cc: linux-i2c, devicetree, linux-kernel, linux-hwmon,
	linux-arm-kernel, linux-rockchip

Theobroma Systems Mule is an MCU that emulates a set of I2C devices,
among which is an amc6821 and other devices that are reachable through
an I2C-mux.

The devices on the mux can be selected by writing the appropriate device
number to an I2C config register (amc6821: reg 0xff)

Implement "tsd,mule" compatible to instantiate the I2C-mux platform device
when probing the amc6821.

Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>
---
 drivers/hwmon/amc6821.c | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/drivers/hwmon/amc6821.c b/drivers/hwmon/amc6821.c
index 0661cc6a6f8e..93c3b79b5f13 100644
--- a/drivers/hwmon/amc6821.c
+++ b/drivers/hwmon/amc6821.c
@@ -22,6 +22,7 @@
 #include <linux/minmax.h>
 #include <linux/module.h>
 #include <linux/mutex.h>
+#include <linux/of_platform.h>
 #include <linux/regmap.h>
 #include <linux/slab.h>
 
@@ -895,8 +896,17 @@ static const struct regmap_config amc6821_regmap_config = {
 	.cache_type = REGCACHE_MAPLE,
 };
 
+static const struct regmap_config amc6821_mule_regmap_config = {
+	.reg_bits = 8,
+	.val_bits = 8,
+	.max_register = 0xff,
+	.volatile_reg = amc6821_volatile_reg,
+	.cache_type = REGCACHE_MAPLE,
+};
+
 static int amc6821_probe(struct i2c_client *client)
 {
+	const struct regmap_config *config;
 	struct device *dev = &client->dev;
 	struct amc6821_data *data;
 	struct device *hwmon_dev;
@@ -907,7 +917,10 @@ static int amc6821_probe(struct i2c_client *client)
 	if (!data)
 		return -ENOMEM;
 
-	regmap = devm_regmap_init_i2c(client, &amc6821_regmap_config);
+	config = of_device_is_compatible(dev->of_node, "tsd,mule") ?
+		&amc6821_mule_regmap_config : &amc6821_regmap_config;
+
+	regmap = devm_regmap_init_i2c(client, config);
 	if (IS_ERR(regmap))
 		return dev_err_probe(dev, PTR_ERR(regmap),
 				     "Failed to initialize regmap\n");
@@ -917,6 +930,13 @@ static int amc6821_probe(struct i2c_client *client)
 	if (err)
 		return err;
 
+	if (of_device_is_compatible(dev->of_node, "tsd,mule")) {
+		err = devm_of_platform_populate(dev);
+		if (err)
+			return dev_err_probe(dev, err,
+				     "Failed to create sub-devices\n");
+	}
+
 	hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name,
 							 data, &amc6821_chip_info,
 							 amc6821_groups);
@@ -934,6 +954,9 @@ static const struct of_device_id __maybe_unused amc6821_of_match[] = {
 	{
 		.compatible = "ti,amc6821",
 	},
+	{
+		.compatible = "tsd,mule",
+	},
 	{ }
 };
 

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v5 5/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-jaguar
  2024-07-08 16:12 [PATCH v5 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
                   ` (3 preceding siblings ...)
  2024-07-08 16:12 ` [PATCH v5 4/8] hwmon: (amc6821) " Farouk Bouabid
@ 2024-07-08 16:12 ` Farouk Bouabid
  2024-07-08 16:12 ` [PATCH v5 6/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3399-puma Farouk Bouabid
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 14+ messages in thread
From: Farouk Bouabid @ 2024-07-08 16:12 UTC (permalink / raw)
  To: Andi Shyti, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Farouk Bouabid, Quentin Schulz, Peter Rosin, Jean Delvare,
	Guenter Roeck, Heiko Stuebner
  Cc: linux-i2c, devicetree, linux-kernel, linux-hwmon,
	linux-arm-kernel, linux-rockchip

Add the tsd,mule-i2c-mux alongside with the amc6821 (tsd,mule) and isl1208
as a default device on the mux.

Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>
---
 arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts b/arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts
index 31d2f8994f85..56f87a603581 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts
@@ -32,6 +32,7 @@ button-bios-disable {
 
 	aliases {
 		ethernet0 = &gmac0;
+		i2c10 = &i2c10;
 		mmc0 = &sdhci;
 		mmc1 = &sdmmc;
 		rtc0 = &rtc_twi;
@@ -276,8 +277,25 @@ &i2c0 {
 	status = "okay";
 
 	fan@18 {
-		compatible = "ti,amc6821";
+		compatible = "tsd,mule", "ti,amc6821";
 		reg = <0x18>;
+
+		i2c-mux {
+			compatible = "tsd,mule-i2c-mux";
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			i2c10: i2c@0 {
+				reg = <0x0>;
+				#address-cells = <1>;
+				#size-cells = <0>;
+
+				rtc_twi: rtc@6f {
+					compatible = "isil,isl1208";
+					reg = <0x6f>;
+				};
+			};
+		};
 	};
 
 	vdd_npu_s0: regulator@42 {
@@ -313,11 +331,6 @@ regulator-state-mem {
 			regulator-off-in-suspend;
 		};
 	};
-
-	rtc_twi: rtc@6f {
-		compatible = "isil,isl1208";
-		reg = <0x6f>;
-	};
 };
 
 &i2c1 {

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v5 6/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3399-puma
  2024-07-08 16:12 [PATCH v5 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
                   ` (4 preceding siblings ...)
  2024-07-08 16:12 ` [PATCH v5 5/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-jaguar Farouk Bouabid
@ 2024-07-08 16:12 ` Farouk Bouabid
  2024-07-08 16:12 ` [PATCH v5 7/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-tiger Farouk Bouabid
  2024-07-08 16:12 ` [PATCH v5 8/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on px30-ringneck Farouk Bouabid
  7 siblings, 0 replies; 14+ messages in thread
From: Farouk Bouabid @ 2024-07-08 16:12 UTC (permalink / raw)
  To: Andi Shyti, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Farouk Bouabid, Quentin Schulz, Peter Rosin, Jean Delvare,
	Guenter Roeck, Heiko Stuebner
  Cc: linux-i2c, devicetree, linux-kernel, linux-hwmon,
	linux-arm-kernel, linux-rockchip

Add the tsd,mule-i2c-mux alongside with the amc6821 (tsd,mule) and isl1208
as a default device on the mux.

Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>
---
 arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi
index ccbe3a7a1d2c..72a0bca57385 100644
--- a/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi
@@ -10,6 +10,7 @@
 / {
 	aliases {
 		ethernet0 = &gmac;
+		i2c10 = &i2c10;
 		mmc0 = &sdhci;
 	};
 
@@ -378,14 +379,25 @@ &i2c7 {
 	clock-frequency = <400000>;
 
 	fan: fan@18 {
-		compatible = "ti,amc6821";
+		compatible = "tsd,mule", "ti,amc6821";
 		reg = <0x18>;
-		#cooling-cells = <2>;
-	};
 
-	rtc_twi: rtc@6f {
-		compatible = "isil,isl1208";
-		reg = <0x6f>;
+		i2c-mux {
+			compatible = "tsd,mule-i2c-mux";
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			i2c10: i2c@0 {
+				reg = <0x0>;
+				#address-cells = <1>;
+				#size-cells = <0>;
+
+				rtc_twi: rtc@6f {
+					compatible = "isil,isl1208";
+					reg = <0x6f>;
+				};
+			};
+		};
 	};
 };
 

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v5 7/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-tiger
  2024-07-08 16:12 [PATCH v5 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
                   ` (5 preceding siblings ...)
  2024-07-08 16:12 ` [PATCH v5 6/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3399-puma Farouk Bouabid
@ 2024-07-08 16:12 ` Farouk Bouabid
  2024-07-08 16:12 ` [PATCH v5 8/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on px30-ringneck Farouk Bouabid
  7 siblings, 0 replies; 14+ messages in thread
From: Farouk Bouabid @ 2024-07-08 16:12 UTC (permalink / raw)
  To: Andi Shyti, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Farouk Bouabid, Quentin Schulz, Peter Rosin, Jean Delvare,
	Guenter Roeck, Heiko Stuebner
  Cc: linux-i2c, devicetree, linux-kernel, linux-hwmon,
	linux-arm-kernel, linux-rockchip

Add the tsd,mule-i2c-mux alongside with the amc6821 (tsd,mule) and isl1208
as a default device on the mux.

Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>
---
 arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi | 23 ++++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi
index 615094bb8ba3..a02f1178c60c 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi
@@ -12,6 +12,7 @@ / {
 	compatible = "tsd,rk3588-tiger", "rockchip,rk3588";
 
 	aliases {
+		i2c10 = &i2c10;
 		mmc0 = &sdhci;
 		rtc0 = &rtc_twi;
 	};
@@ -224,13 +225,25 @@ &i2c6 {
 	status = "okay";
 
 	fan@18 {
-		compatible = "ti,amc6821";
+		compatible = "tsd,mule", "ti,amc6821";
 		reg = <0x18>;
-	};
 
-	rtc_twi: rtc@6f {
-		compatible = "isil,isl1208";
-		reg = <0x6f>;
+		i2c-mux {
+			compatible = "tsd,mule-i2c-mux";
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			i2c10: i2c@0 {
+				reg = <0x0>;
+				#address-cells = <1>;
+				#size-cells = <0>;
+
+				rtc_twi: rtc@6f {
+					compatible = "isil,isl1208";
+					reg = <0x6f>;
+				};
+			};
+		};
 	};
 };
 

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v5 8/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on px30-ringneck
  2024-07-08 16:12 [PATCH v5 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
                   ` (6 preceding siblings ...)
  2024-07-08 16:12 ` [PATCH v5 7/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-tiger Farouk Bouabid
@ 2024-07-08 16:12 ` Farouk Bouabid
  7 siblings, 0 replies; 14+ messages in thread
From: Farouk Bouabid @ 2024-07-08 16:12 UTC (permalink / raw)
  To: Andi Shyti, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Farouk Bouabid, Quentin Schulz, Peter Rosin, Jean Delvare,
	Guenter Roeck, Heiko Stuebner
  Cc: linux-i2c, devicetree, linux-kernel, linux-hwmon,
	linux-arm-kernel, linux-rockchip

Add the tsd,mule-i2c-mux alongside with the amc6821 (tsd,mule) and isl1208
as a default device on the mux.

Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>
---
 arch/arm64/boot/dts/rockchip/px30-ringneck.dtsi | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/arch/arm64/boot/dts/rockchip/px30-ringneck.dtsi b/arch/arm64/boot/dts/rockchip/px30-ringneck.dtsi
index bb1aea82e666..a683ed3e2fce 100644
--- a/arch/arm64/boot/dts/rockchip/px30-ringneck.dtsi
+++ b/arch/arm64/boot/dts/rockchip/px30-ringneck.dtsi
@@ -9,6 +9,7 @@
 
 / {
 	aliases {
+		i2c10 = &i2c10;
 		mmc0 = &emmc;
 		mmc1 = &sdio;
 		rtc0 = &rtc_twi;
@@ -292,14 +293,25 @@ &i2c1 {
 	clock-frequency = <400000>;
 
 	fan: fan@18 {
-		compatible = "ti,amc6821";
+		compatible = "tsd,mule", "ti,amc6821";
 		reg = <0x18>;
-		#cooling-cells = <2>;
-	};
 
-	rtc_twi: rtc@6f {
-		compatible = "isil,isl1208";
-		reg = <0x6f>;
+		i2c-mux {
+			compatible = "tsd,mule-i2c-mux";
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			i2c10: i2c@0 {
+				reg = <0x0>;
+				#address-cells = <1>;
+				#size-cells = <0>;
+
+				rtc_twi: rtc@6f {
+					compatible = "isil,isl1208";
+					reg = <0x6f>;
+				};
+			};
+		};
 	};
 };
 

-- 
2.34.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH v5 3/8] dt-bindings: i2c: add support for tsd,mule
  2024-07-08 16:12 ` [PATCH v5 3/8] dt-bindings: i2c: add support for tsd,mule Farouk Bouabid
@ 2024-07-08 17:17   ` Rob Herring (Arm)
  2024-07-08 22:45     ` Rob Herring
  2024-07-08 23:03   ` Rob Herring
  1 sibling, 1 reply; 14+ messages in thread
From: Rob Herring (Arm) @ 2024-07-08 17:17 UTC (permalink / raw)
  To: Farouk Bouabid
  Cc: linux-i2c, devicetree, Conor Dooley, Andi Shyti, Jean Delvare,
	linux-hwmon, linux-rockchip, Quentin Schulz, Peter Rosin,
	Guenter Roeck, linux-arm-kernel, Krzysztof Kozlowski,
	Heiko Stuebner, linux-kernel


On Mon, 08 Jul 2024 18:12:14 +0200, Farouk Bouabid wrote:
> Theobroma Systems Mule is an MCU that emulates a set of I2C devices,
> among which is an amc6821 and other devices that are reachable through
> an I2C-mux. The devices on the mux can be selected by writing the
> appropriate device number to an I2C config register (amc6821: reg 0xff)
> 
> Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>
> ---
>  .../devicetree/bindings/i2c/tsd,mule.yaml          | 63 ++++++++++++++++++++++
>  1 file changed, 63 insertions(+)
> 

My bot found errors running 'make dt_binding_check' on your patch:

yamllint warnings/errors:

dtschema/dtc warnings/errors:
Documentation/devicetree/bindings/i2c/tsd,mule.example.dtb: /example-0/i2c/fan@18/i2c-mux: failed to match any schema with compatible: ['tsd,mule-i2c-mux']

doc reference errors (make refcheckdocs):

See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20240708-dev-mule-i2c-mux-v5-3-71446d3f0b8d@cherry.de

The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.

If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:

pip3 install dtschema --upgrade

Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v5 4/8] hwmon: (amc6821) add support for tsd,mule
  2024-07-08 16:12 ` [PATCH v5 4/8] hwmon: (amc6821) " Farouk Bouabid
@ 2024-07-08 21:45   ` Guenter Roeck
  0 siblings, 0 replies; 14+ messages in thread
From: Guenter Roeck @ 2024-07-08 21:45 UTC (permalink / raw)
  To: Farouk Bouabid, Andi Shyti, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Quentin Schulz, Peter Rosin, Jean Delvare,
	Heiko Stuebner
  Cc: linux-i2c, devicetree, linux-kernel, linux-hwmon,
	linux-arm-kernel, linux-rockchip

On 7/8/24 09:12, Farouk Bouabid wrote:
> Theobroma Systems Mule is an MCU that emulates a set of I2C devices,
> among which is an amc6821 and other devices that are reachable through
> an I2C-mux.
> 
> The devices on the mux can be selected by writing the appropriate device
> number to an I2C config register (amc6821: reg 0xff)
> 
> Implement "tsd,mule" compatible to instantiate the I2C-mux platform device
> when probing the amc6821.
> 
> Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>
> ---
>   drivers/hwmon/amc6821.c | 25 ++++++++++++++++++++++++-
>   1 file changed, 24 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/hwmon/amc6821.c b/drivers/hwmon/amc6821.c
> index 0661cc6a6f8e..93c3b79b5f13 100644
> --- a/drivers/hwmon/amc6821.c
> +++ b/drivers/hwmon/amc6821.c
> @@ -22,6 +22,7 @@
>   #include <linux/minmax.h>
>   #include <linux/module.h>
>   #include <linux/mutex.h>
> +#include <linux/of_platform.h>
>   #include <linux/regmap.h>
>   #include <linux/slab.h>
>   
> @@ -895,8 +896,17 @@ static const struct regmap_config amc6821_regmap_config = {
>   	.cache_type = REGCACHE_MAPLE,
>   };
>   
> +static const struct regmap_config amc6821_mule_regmap_config = {
> +	.reg_bits = 8,
> +	.val_bits = 8,
> +	.max_register = 0xff,

Unnecessary since the maximum possible register address is 0xff.

> +	.volatile_reg = amc6821_volatile_reg,
> +	.cache_type = REGCACHE_MAPLE,
> +};
> +

Anyway, don't bother. Just drop max_register from amc6821_regmap_config.

Thanks,
Guenter

>   static int amc6821_probe(struct i2c_client *client)
>   {
> +	const struct regmap_config *config;
>   	struct device *dev = &client->dev;
>   	struct amc6821_data *data;
>   	struct device *hwmon_dev;
> @@ -907,7 +917,10 @@ static int amc6821_probe(struct i2c_client *client)
>   	if (!data)
>   		return -ENOMEM;
>   
> -	regmap = devm_regmap_init_i2c(client, &amc6821_regmap_config);
> +	config = of_device_is_compatible(dev->of_node, "tsd,mule") ?
> +		&amc6821_mule_regmap_config : &amc6821_regmap_config;
> +
> +	regmap = devm_regmap_init_i2c(client, config);
>   	if (IS_ERR(regmap))
>   		return dev_err_probe(dev, PTR_ERR(regmap),
>   				     "Failed to initialize regmap\n");
> @@ -917,6 +930,13 @@ static int amc6821_probe(struct i2c_client *client)
>   	if (err)
>   		return err;
>   
> +	if (of_device_is_compatible(dev->of_node, "tsd,mule")) {
> +		err = devm_of_platform_populate(dev);
> +		if (err)
> +			return dev_err_probe(dev, err,
> +				     "Failed to create sub-devices\n");
> +	}
> +
>   	hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name,
>   							 data, &amc6821_chip_info,
>   							 amc6821_groups);
> @@ -934,6 +954,9 @@ static const struct of_device_id __maybe_unused amc6821_of_match[] = {
>   	{
>   		.compatible = "ti,amc6821",
>   	},
> +	{
> +		.compatible = "tsd,mule",
> +	},
>   	{ }
>   };
>   
> 


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v5 3/8] dt-bindings: i2c: add support for tsd,mule
  2024-07-08 17:17   ` Rob Herring (Arm)
@ 2024-07-08 22:45     ` Rob Herring
  0 siblings, 0 replies; 14+ messages in thread
From: Rob Herring @ 2024-07-08 22:45 UTC (permalink / raw)
  To: Farouk Bouabid
  Cc: linux-i2c, devicetree, Conor Dooley, Andi Shyti, Jean Delvare,
	linux-hwmon, linux-rockchip, Quentin Schulz, Peter Rosin,
	Guenter Roeck, linux-arm-kernel, Krzysztof Kozlowski,
	Heiko Stuebner, linux-kernel

On Mon, Jul 08, 2024 at 11:17:45AM -0600, Rob Herring (Arm) wrote:
> 
> On Mon, 08 Jul 2024 18:12:14 +0200, Farouk Bouabid wrote:
> > Theobroma Systems Mule is an MCU that emulates a set of I2C devices,
> > among which is an amc6821 and other devices that are reachable through
> > an I2C-mux. The devices on the mux can be selected by writing the
> > appropriate device number to an I2C config register (amc6821: reg 0xff)
> > 
> > Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>
> > ---
> >  .../devicetree/bindings/i2c/tsd,mule.yaml          | 63 ++++++++++++++++++++++
> >  1 file changed, 63 insertions(+)
> > 
> 
> My bot found errors running 'make dt_binding_check' on your patch:
> 
> yamllint warnings/errors:
> 
> dtschema/dtc warnings/errors:
> Documentation/devicetree/bindings/i2c/tsd,mule.example.dtb: /example-0/i2c/fan@18/i2c-mux: failed to match any schema with compatible: ['tsd,mule-i2c-mux']

This can be ignored. Looks like things went sideways here because patch 
1 subject is a substring of patch 3 and then it got marked as 
Superseded.

Rob

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v5 1/8] dt-bindings: i2c: add support for tsd,mule-i2c-mux
  2024-07-08 16:12 ` [PATCH v5 1/8] dt-bindings: i2c: add support for tsd,mule-i2c-mux Farouk Bouabid
@ 2024-07-08 22:56   ` Rob Herring
  0 siblings, 0 replies; 14+ messages in thread
From: Rob Herring @ 2024-07-08 22:56 UTC (permalink / raw)
  To: Farouk Bouabid
  Cc: Andi Shyti, Krzysztof Kozlowski, Conor Dooley, Quentin Schulz,
	Peter Rosin, Jean Delvare, Guenter Roeck, Heiko Stuebner,
	linux-i2c, devicetree, linux-kernel, linux-hwmon,
	linux-arm-kernel, linux-rockchip

On Mon, Jul 08, 2024 at 06:12:12PM +0200, Farouk Bouabid wrote:
> Theobroma Systems Mule is an MCU that emulates a set of I2C devices,
> among which devices that are reachable through an I2C-mux. The devices
> on the mux can be selected by writing the appropriate device number to
> an I2C config register.
> 
> Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>
> ---
>  .../devicetree/bindings/i2c/tsd,mule-i2c-mux.yaml  | 69 ++++++++++++++++++++++
>  1 file changed, 69 insertions(+)

Reviewed-by: Rob Herring (Arm) <robh@kernel.org>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v5 3/8] dt-bindings: i2c: add support for tsd,mule
  2024-07-08 16:12 ` [PATCH v5 3/8] dt-bindings: i2c: add support for tsd,mule Farouk Bouabid
  2024-07-08 17:17   ` Rob Herring (Arm)
@ 2024-07-08 23:03   ` Rob Herring
  1 sibling, 0 replies; 14+ messages in thread
From: Rob Herring @ 2024-07-08 23:03 UTC (permalink / raw)
  To: Farouk Bouabid
  Cc: Andi Shyti, Krzysztof Kozlowski, Conor Dooley, Quentin Schulz,
	Peter Rosin, Jean Delvare, Guenter Roeck, Heiko Stuebner,
	linux-i2c, devicetree, linux-kernel, linux-hwmon,
	linux-arm-kernel, linux-rockchip

On Mon, Jul 08, 2024 at 06:12:14PM +0200, Farouk Bouabid wrote:
> Theobroma Systems Mule is an MCU that emulates a set of I2C devices,
> among which is an amc6821 and other devices that are reachable through
> an I2C-mux. The devices on the mux can be selected by writing the
> appropriate device number to an I2C config register (amc6821: reg 0xff)
> 
> Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>
> ---
>  .../devicetree/bindings/i2c/tsd,mule.yaml          | 63 ++++++++++++++++++++++
>  1 file changed, 63 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/i2c/tsd,mule.yaml b/Documentation/devicetree/bindings/i2c/tsd,mule.yaml
> new file mode 100644
> index 000000000000..dbbabba8dd6f
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/i2c/tsd,mule.yaml
> @@ -0,0 +1,63 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/i2c/tsd,mule.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Theobroma Systems Mule I2C device
> +
> +maintainers:
> +  - Farouk Bouabid <farouk.bouabid@cherry.de>
> +  - Quentin Schulz <quentin.schulz@cherry.de>
> +
> +description: |
> +  Theobroma Systems Mule is an MCU that emulates a set of I2C devices, among
> +  which is an amc6821 and other devices that are reachable through an I2C-mux.
> +  The devices on the mux can be selected by writing the appropriate device
> +  number to an I2C config register (amc6821: reg 0xff)
> +
> +additionalProperties: true

Must be false.

> +
> +properties:
> +  compatible:
> +    contains:

No, must define the entries and the order.

> +      enum:
> +        - tsd,mule
> +        - ti,amc6821

Need to drop this from trivial-devices.yaml. We don't define the same 
compatible in 2 places.

As the original device was ti,amc6821 and this is a superset, the 
binding should first document ti,amc6821 meaning that should be the 
filename, title, etc. And then describe the Mule additions. (I mean how 
the binding should read, not patch structure. 1 patch for this is fine.)

> +
> +  reg:
> +    maxItems: 1

To fix the additionalProperties failure you will see, you need to add:

     i2c-mux:
       type: object

> +
> +required:
> +  - compatible
> +  - reg
> +
> +examples:
> +  - |
> +    i2c {
> +        #address-cells = <1>;
> +        #size-cells = <0>;
> +
> +        fan@18 {
> +            compatible = "tsd,mule", "ti,amc6821";
> +            reg = <0x18>;
> +
> +            i2c-mux {
> +                compatible = "tsd,mule-i2c-mux";
> +                #address-cells = <1>;
> +                #size-cells = <0>;
> +
> +                i2c@0 {
> +                    reg = <0x0>;
> +                    #address-cells = <1>;
> +                    #size-cells = <0>;
> +
> +                    rtc@6f {
> +                        compatible = "isil,isl1208";
> +                        reg = <0x6f>;
> +                    };
> +                };
> +            };
> +        };
> +    };
> +...
> 
> -- 
> 2.34.1
> 

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2024-07-08 23:03 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-08 16:12 [PATCH v5 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
2024-07-08 16:12 ` [PATCH v5 1/8] dt-bindings: i2c: add support for tsd,mule-i2c-mux Farouk Bouabid
2024-07-08 22:56   ` Rob Herring
2024-07-08 16:12 ` [PATCH v5 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer Farouk Bouabid
2024-07-08 16:12 ` [PATCH v5 3/8] dt-bindings: i2c: add support for tsd,mule Farouk Bouabid
2024-07-08 17:17   ` Rob Herring (Arm)
2024-07-08 22:45     ` Rob Herring
2024-07-08 23:03   ` Rob Herring
2024-07-08 16:12 ` [PATCH v5 4/8] hwmon: (amc6821) " Farouk Bouabid
2024-07-08 21:45   ` Guenter Roeck
2024-07-08 16:12 ` [PATCH v5 5/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-jaguar Farouk Bouabid
2024-07-08 16:12 ` [PATCH v5 6/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3399-puma Farouk Bouabid
2024-07-08 16:12 ` [PATCH v5 7/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-tiger Farouk Bouabid
2024-07-08 16:12 ` [PATCH v5 8/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on px30-ringneck Farouk Bouabid

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).