devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v7 0/8] Add tsd,mule-i2c-mux support
@ 2024-09-02 16:38 Farouk Bouabid
  2024-09-02 16:38 ` [PATCH v7 1/8] dt-bindings: i2c: add support for tsd,mule-i2c-mux Farouk Bouabid
                   ` (7 more replies)
  0 siblings, 8 replies; 17+ messages in thread
From: Farouk Bouabid @ 2024-09-02 16:38 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, Wolfram Sang

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.

Please merge patch 1 before patch 3
Please merge patches 2, 3 and 4 (and 1) before patches 5, 6, 7, 8

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

Changes in v7:
- Merged __mux_select and mux_select functions in patch 2
- Removed unnecessary prints after mux_alloc and add_adapter calls in patch 2
- Added Guenter's Reviewed-by tag
- Added Rob's Reviewed-by tag
- Added Wolfram's Reviewed/Acked-by tags
- Link to v6: https://lore.kernel.org/r/20240725-dev-mule-i2c-mux-v6-0-f9f6d7b60fb2@cherry.de

Changes in v6:
- Move ti,amc6821 from trivial-devices into its own dt-bindings
- Use same regmap config structure for both tsd,mule and ti,amc6821
- Remove max_register from regmap config structure for amc6821

- Link to v5: https://lore.kernel.org/r/20240708-dev-mule-i2c-mux-v5-0-71446d3f0b8d@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: hwmon: add support for ti,amc6821
      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/hwmon/ti,amc6821.yaml      |  86 ++++++++++++
 .../devicetree/bindings/i2c/tsd,mule-i2c-mux.yaml  |  69 ++++++++++
 .../devicetree/bindings/trivial-devices.yaml       |   2 -
 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                            |  12 +-
 drivers/i2c/muxes/Kconfig                          |  16 +++
 drivers/i2c/muxes/Makefile                         |   1 +
 drivers/i2c/muxes/i2c-mux-mule.c                   | 148 +++++++++++++++++++++
 11 files changed, 404 insertions(+), 26 deletions(-)
---
base-commit: 67784a74e258a467225f0e68335df77acd67b7ab
change-id: 20240404-dev-mule-i2c-mux-9103cde07021

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


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

* [PATCH v7 1/8] dt-bindings: i2c: add support for tsd,mule-i2c-mux
  2024-09-02 16:38 [PATCH v7 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
@ 2024-09-02 16:38 ` Farouk Bouabid
  2024-09-02 16:38 ` [PATCH v7 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer Farouk Bouabid
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 17+ messages in thread
From: Farouk Bouabid @ 2024-09-02 16:38 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, Wolfram Sang

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.

Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Acked-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
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] 17+ messages in thread

* [PATCH v7 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer
  2024-09-02 16:38 [PATCH v7 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
  2024-09-02 16:38 ` [PATCH v7 1/8] dt-bindings: i2c: add support for tsd,mule-i2c-mux Farouk Bouabid
@ 2024-09-02 16:38 ` Farouk Bouabid
  2024-09-03 15:13   ` Andi Shyti
  2024-09-02 16:38 ` [PATCH v7 3/8] dt-bindings: hwmon: add support for ti,amc6821 Farouk Bouabid
                   ` (5 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Farouk Bouabid @ 2024-09-02 16:38 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, Wolfram Sang

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.

Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
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 | 148 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 165 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..e4e8992d4a09
--- /dev/null
+++ b/drivers/i2c/muxes/i2c-mux-mule.c
@@ -0,0 +1,148 @@
+// 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 int mux_select(struct i2c_mux_core *muxc, u32 dev)
+{
+	struct mule_i2c_reg_mux *mux = muxc->priv;
+
+	return regmap_write(mux->regmap, MUX_CONFIG_REG, 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 -ENOMEM;
+
+	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 ret;
+	}
+
+	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] 17+ messages in thread

* [PATCH v7 3/8] dt-bindings: hwmon: add support for ti,amc6821
  2024-09-02 16:38 [PATCH v7 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
  2024-09-02 16:38 ` [PATCH v7 1/8] dt-bindings: i2c: add support for tsd,mule-i2c-mux Farouk Bouabid
  2024-09-02 16:38 ` [PATCH v7 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer Farouk Bouabid
@ 2024-09-02 16:38 ` Farouk Bouabid
  2024-09-02 16:38 ` [PATCH v7 4/8] hwmon: (amc6821) add support for tsd,mule Farouk Bouabid
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 17+ messages in thread
From: Farouk Bouabid @ 2024-09-02 16:38 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 dt-bindings for amc6821 intelligent temperature monitor and
pulse-width modulation (PWM) fan controller.

Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>
---

Notes:
    Merge after patch 1

 .../devicetree/bindings/hwmon/ti,amc6821.yaml      | 86 ++++++++++++++++++++++
 .../devicetree/bindings/trivial-devices.yaml       |  2 -
 2 files changed, 86 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/hwmon/ti,amc6821.yaml b/Documentation/devicetree/bindings/hwmon/ti,amc6821.yaml
new file mode 100644
index 000000000000..5d33f1a23d03
--- /dev/null
+++ b/Documentation/devicetree/bindings/hwmon/ti,amc6821.yaml
@@ -0,0 +1,86 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/hwmon/ti,amc6821.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: AMC6821 Intelligent Temperature Monitor and PWM Fan Controller
+
+maintainers:
+  - Farouk Bouabid <farouk.bouabid@cherry.de>
+  - Quentin Schulz <quentin.schulz@cherry.de>
+
+description:
+  Intelligent temperature monitor and pulse-width modulation (PWM) fan
+  controller.
+
+properties:
+  compatible:
+    oneOf:
+      - items:
+          - const: tsd,mule
+          - const: ti,amc6821
+      - const: ti,amc6821
+
+  reg:
+    maxItems: 1
+
+  i2c-mux:
+    type: object
+
+required:
+  - compatible
+  - reg
+
+if:
+  properties:
+    compatible:
+      contains:
+        const: tsd,mule
+
+then:
+  required:
+    - i2c-mux
+
+additionalProperties: false
+
+examples:
+  - |
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        fan@18 {
+            compatible = "ti,amc6821";
+            reg = <0x18>;
+        };
+    };
+
+  - |
+    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>;
+                    };
+                };
+            };
+        };
+    };
+...
diff --git a/Documentation/devicetree/bindings/trivial-devices.yaml b/Documentation/devicetree/bindings/trivial-devices.yaml
index 7913ca9b6b54..8ba53cc2672b 100644
--- a/Documentation/devicetree/bindings/trivial-devices.yaml
+++ b/Documentation/devicetree/bindings/trivial-devices.yaml
@@ -370,8 +370,6 @@ properties:
           - swir,mangoh-iotport-spi
             # Ambient Light Sensor with SMBUS/Two Wire Serial Interface
           - taos,tsl2550
-            # Temperature Monitoring and Fan Control
-          - ti,amc6821
             # Temperature and humidity sensor with i2c interface
           - ti,hdc1000
             # Temperature and humidity sensor with i2c interface

-- 
2.34.1


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

* [PATCH v7 4/8] hwmon: (amc6821) add support for tsd,mule
  2024-09-02 16:38 [PATCH v7 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
                   ` (2 preceding siblings ...)
  2024-09-02 16:38 ` [PATCH v7 3/8] dt-bindings: hwmon: add support for ti,amc6821 Farouk Bouabid
@ 2024-09-02 16:38 ` Farouk Bouabid
  2024-09-02 16:38 ` [PATCH v7 5/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-jaguar Farouk Bouabid
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 17+ messages in thread
From: Farouk Bouabid @ 2024-09-02 16:38 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.

Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>
---
 drivers/hwmon/amc6821.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/hwmon/amc6821.c b/drivers/hwmon/amc6821.c
index ec94392fcb65..a3fdbcf01ecd 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>
 
@@ -897,7 +898,6 @@ static bool amc6821_volatile_reg(struct device *dev, unsigned int reg)
 static const struct regmap_config amc6821_regmap_config = {
 	.reg_bits = 8,
 	.val_bits = 8,
-	.max_register = AMC6821_REG_CONF3,
 	.volatile_reg = amc6821_volatile_reg,
 	.cache_type = REGCACHE_MAPLE,
 };
@@ -924,6 +924,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);
@@ -941,6 +948,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] 17+ messages in thread

* [PATCH v7 5/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-jaguar
  2024-09-02 16:38 [PATCH v7 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
                   ` (3 preceding siblings ...)
  2024-09-02 16:38 ` [PATCH v7 4/8] hwmon: (amc6821) add support for tsd,mule Farouk Bouabid
@ 2024-09-02 16:38 ` Farouk Bouabid
  2024-09-02 16:38 ` [PATCH v7 6/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3399-puma Farouk Bouabid
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 17+ messages in thread
From: Farouk Bouabid @ 2024-09-02 16:38 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>
---

Notes:
    Merge after patches 1,2,3,4

 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] 17+ messages in thread

* [PATCH v7 6/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3399-puma
  2024-09-02 16:38 [PATCH v7 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
                   ` (4 preceding siblings ...)
  2024-09-02 16:38 ` [PATCH v7 5/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-jaguar Farouk Bouabid
@ 2024-09-02 16:38 ` Farouk Bouabid
  2024-09-02 16:38 ` [PATCH v7 7/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-tiger Farouk Bouabid
  2024-09-02 16:38 ` [PATCH v7 8/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on px30-ringneck Farouk Bouabid
  7 siblings, 0 replies; 17+ messages in thread
From: Farouk Bouabid @ 2024-09-02 16:38 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>
---

Notes:
    Merge after patches 1,2,3,4

 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] 17+ messages in thread

* [PATCH v7 7/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-tiger
  2024-09-02 16:38 [PATCH v7 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
                   ` (5 preceding siblings ...)
  2024-09-02 16:38 ` [PATCH v7 6/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3399-puma Farouk Bouabid
@ 2024-09-02 16:38 ` Farouk Bouabid
  2024-09-02 16:38 ` [PATCH v7 8/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on px30-ringneck Farouk Bouabid
  7 siblings, 0 replies; 17+ messages in thread
From: Farouk Bouabid @ 2024-09-02 16:38 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>
---

Notes:
    Merge after patches 1,2,3,4

 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] 17+ messages in thread

* [PATCH v7 8/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on px30-ringneck
  2024-09-02 16:38 [PATCH v7 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
                   ` (6 preceding siblings ...)
  2024-09-02 16:38 ` [PATCH v7 7/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-tiger Farouk Bouabid
@ 2024-09-02 16:38 ` Farouk Bouabid
  7 siblings, 0 replies; 17+ messages in thread
From: Farouk Bouabid @ 2024-09-02 16:38 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>
---

Notes:
    Merge after patches 1,2,3,4

 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] 17+ messages in thread

* Re: [PATCH v7 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer
  2024-09-02 16:38 ` [PATCH v7 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer Farouk Bouabid
@ 2024-09-03 15:13   ` Andi Shyti
  2024-09-03 15:44     ` Peter Rosin
                       ` (2 more replies)
  0 siblings, 3 replies; 17+ messages in thread
From: Andi Shyti @ 2024-09-03 15:13 UTC (permalink / raw)
  To: Farouk Bouabid
  Cc: Rob Herring, 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, Wolfram Sang

Hi Farouk,

Before jumping into the review, who is going to take this and the
previous patch?

Peter shall I take it?

Now to the review :-)

On Mon, Sep 02, 2024 at 06:38:15PM GMT, Farouk Bouabid wrote:
> 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

Along the driver I expressed some concern about the prefixes.

You should avoid prefixes such as mux_* or MUX_* because they
don't belong to your driver. You should always use your driver's
name:

 1. mule_*
 2. mule_mux_*
 3. mule_i2c_mux_*

You have used the 3rd, I'd rather prefer the 1st. Because when
you are in i2c/muxex/ it's implied that you are an i2c mux
device. But it's a matter of personal taste.

Other than this, there is still, one major error down below.

> support for the mux will be added in a later commit.
> 
> Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
> Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>

...

> +#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

Please define these as MULE_I2C_MUX_*

> +
> +struct mule_i2c_reg_mux {
> +	struct regmap *regmap;
> +};
> +
> +static int mux_select(struct i2c_mux_core *muxc, u32 dev)
> +{
> +	struct mule_i2c_reg_mux *mux = muxc->priv;
> +
> +	return regmap_write(mux->regmap, MUX_CONFIG_REG, 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)

Please call these mule_i2c_mux_*(), the mux_ prefix doesn't
belong to this driver.

> +{
> +	struct i2c_mux_core *muxc = data;
> +
> +	i2c_mux_del_adapters(muxc);
> +
> +	mux_deselect(muxc, MUX_DEFAULT_DEV);
> +}

...

> +	/* 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 ret;

do we need to delete the adapters we added in previous cycles?

> +	}
> +
> +	mux_deselect(muxc, MUX_DEFAULT_DEV);
> +
> +	return 0;
> +}
> +
> +static const struct of_device_id mule_i2c_mux_of_match[] = {
> +	{.compatible = "tsd,mule-i2c-mux",},

if you are going to resend, can you leave one space after the
'{' and before the '}'

> +	{},
> +};
> +MODULE_DEVICE_TABLE(of, mule_i2c_mux_of_match);
> +
> +static struct platform_driver mule_i2c_mux_driver = {
> +	.driver		= {

I don't see the need for this '\t' here, the alignment is too
far. It just looks bad. Your choice, though.

Thanks,
Andi

> +		.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	[flat|nested] 17+ messages in thread

* Re: [PATCH v7 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer
  2024-09-03 15:13   ` Andi Shyti
@ 2024-09-03 15:44     ` Peter Rosin
  2024-09-04  8:35     ` Farouk Bouabid
  2024-09-04 10:23     ` Farouk Bouabid
  2 siblings, 0 replies; 17+ messages in thread
From: Peter Rosin @ 2024-09-03 15:44 UTC (permalink / raw)
  To: Andi Shyti, Farouk Bouabid
  Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Quentin Schulz,
	Jean Delvare, Guenter Roeck, Heiko Stuebner, linux-i2c,
	devicetree, linux-kernel, linux-hwmon, linux-arm-kernel,
	linux-rockchip, Wolfram Sang

Hi!

2024-09-03 at 17:13, Andi Shyti wrote:
> Hi Farouk,
> 
> Before jumping into the review, who is going to take this and the
> previous patch?
> 
> Peter shall I take it?

Please do. Thanks, and as always, sorry for my low bandwidth...

> 
> Now to the review :-)
> 
> On Mon, Sep 02, 2024 at 06:38:15PM GMT, Farouk Bouabid wrote:
>> 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
> 
> Along the driver I expressed some concern about the prefixes.
> 
> You should avoid prefixes such as mux_* or MUX_* because they
> don't belong to your driver. You should always use your driver's
> name:
> 
>  1. mule_*
>  2. mule_mux_*
>  3. mule_i2c_mux_*
> 
> You have used the 3rd, I'd rather prefer the 1st. Because when
> you are in i2c/muxex/ it's implied that you are an i2c mux
> device. But it's a matter of personal taste.
> 
> Other than this, there is still, one major error down below.
> 
>> support for the mux will be added in a later commit.
>>
>> Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
>> Signed-off-by: Farouk Bouabid <farouk.bouabid@cherry.de>
> 
> ...
> 
>> +#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
> 
> Please define these as MULE_I2C_MUX_*
> 
>> +
>> +struct mule_i2c_reg_mux {
>> +	struct regmap *regmap;
>> +};
>> +
>> +static int mux_select(struct i2c_mux_core *muxc, u32 dev)
>> +{
>> +	struct mule_i2c_reg_mux *mux = muxc->priv;
>> +
>> +	return regmap_write(mux->regmap, MUX_CONFIG_REG, 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)
> 
> Please call these mule_i2c_mux_*(), the mux_ prefix doesn't
> belong to this driver.
> 
>> +{
>> +	struct i2c_mux_core *muxc = data;
>> +
>> +	i2c_mux_del_adapters(muxc);
>> +
>> +	mux_deselect(muxc, MUX_DEFAULT_DEV);
>> +}
> 
> ...
> 
>> +	/* 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 ret;
> 
> do we need to delete the adapters we added in previous cycles?

Yes, nicely spotted. A call to i2c_mux_del_adapters(muxc) is needed
on failure if any i2c_mux_add_adapter() call has succeeded (but it's
safe to call it on any i2c_mux_add_adapter() failure).

Cheers,
Peter

> 
>> +	}
>> +
>> +	mux_deselect(muxc, MUX_DEFAULT_DEV);
>> +
>> +	return 0;
>> +}
>> +
>> +static const struct of_device_id mule_i2c_mux_of_match[] = {
>> +	{.compatible = "tsd,mule-i2c-mux",},
> 
> if you are going to resend, can you leave one space after the
> '{' and before the '}'
> 
>> +	{},
>> +};
>> +MODULE_DEVICE_TABLE(of, mule_i2c_mux_of_match);
>> +
>> +static struct platform_driver mule_i2c_mux_driver = {
>> +	.driver		= {
> 
> I don't see the need for this '\t' here, the alignment is too
> far. It just looks bad. Your choice, though.
> 
> Thanks,
> Andi
> 
>> +		.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	[flat|nested] 17+ messages in thread

* Re: [PATCH v7 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer
  2024-09-03 15:13   ` Andi Shyti
  2024-09-03 15:44     ` Peter Rosin
@ 2024-09-04  8:35     ` Farouk Bouabid
  2024-09-04  8:59       ` Peter Rosin
  2024-09-04 10:23     ` Farouk Bouabid
  2 siblings, 1 reply; 17+ messages in thread
From: Farouk Bouabid @ 2024-09-04  8:35 UTC (permalink / raw)
  To: Andi Shyti
  Cc: Rob Herring, 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, Wolfram Sang

Hi Andi,

On 03.09.24 17:13, Andi Shyti wrote:

[...]

>> +	/* 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 ret;
> do we need to delete the adapters we added in previous cycles?
>

We calldevm_action_or_reset() before the loop to add adapter-removal to 
the error path. I think that does the job

for us or am I missing something ?


Thanks,

Farouk


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

* Re: [PATCH v7 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer
  2024-09-04  8:35     ` Farouk Bouabid
@ 2024-09-04  8:59       ` Peter Rosin
  2024-09-05 20:20         ` Andi Shyti
  0 siblings, 1 reply; 17+ messages in thread
From: Peter Rosin @ 2024-09-04  8:59 UTC (permalink / raw)
  To: Farouk Bouabid, Andi Shyti
  Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Quentin Schulz,
	Jean Delvare, Guenter Roeck, Heiko Stuebner, linux-i2c,
	devicetree, linux-kernel, linux-hwmon, linux-arm-kernel,
	linux-rockchip, Wolfram Sang

Hi!

2024-09-04 at 10:35, Farouk Bouabid wrote:
> Hi Andi,
> 
> On 03.09.24 17:13, Andi Shyti wrote:
> 
> [...]
> 
>>> +        ret = i2c_mux_add_adapter(muxc, 0, reg);
>>> +        if (ret)
>>> +            return ret;
>> do we need to delete the adapters we added in previous cycles?
>>
> 
> We calldevm_action_or_reset() before the loop to add adapter-removal to the error path. I think that does the job
> 
> for us or am I missing something ?

I missed that too, but it LGTM. It's safe to call i2c_mux_del_adapters() as
soon the mux core has been allocated, so there is no risk it is called too
early or something. With that said, I agree with Andi on the naming and the
nitpicks.

Cheers,
Peter

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

* Re: [PATCH v7 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer
  2024-09-03 15:13   ` Andi Shyti
  2024-09-03 15:44     ` Peter Rosin
  2024-09-04  8:35     ` Farouk Bouabid
@ 2024-09-04 10:23     ` Farouk Bouabid
  2024-09-05 20:33       ` Andi Shyti
  2 siblings, 1 reply; 17+ messages in thread
From: Farouk Bouabid @ 2024-09-04 10:23 UTC (permalink / raw)
  To: Andi Shyti
  Cc: Rob Herring, 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, Wolfram Sang

Hi Andi,

On 03.09.24 17:13, Andi Shyti wrote:
>> 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
> Along the driver I expressed some concern about the prefixes.
>
> You should avoid prefixes such as mux_* or MUX_* because they
> don't belong to your driver. You should always use your driver's
> name:
>
>   1. mule_*
>   2. mule_mux_*
>   3. mule_i2c_mux_*
>
> You have used the 3rd, I'd rather prefer the 1st. Because when
> you are in i2c/muxex/ it's implied that you are an i2c mux
> device. But it's a matter of personal taste.
>

Are you here referring to the commit log, module name or function 
prefixes ? (because  later you suggested that we use "mule_i2c_mux_*" 
for functions)

"Mule" is a chip that requires multiple drivers that will be added later 
on, and I suppose we don't want conflict with other module names ?


Thanks,

Farouk


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

* Re: [PATCH v7 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer
  2024-09-04  8:59       ` Peter Rosin
@ 2024-09-05 20:20         ` Andi Shyti
  2024-09-06  9:32           ` Farouk Bouabid
  0 siblings, 1 reply; 17+ messages in thread
From: Andi Shyti @ 2024-09-05 20:20 UTC (permalink / raw)
  To: Peter Rosin
  Cc: Farouk Bouabid, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Quentin Schulz, Jean Delvare, Guenter Roeck, Heiko Stuebner,
	linux-i2c, devicetree, linux-kernel, linux-hwmon,
	linux-arm-kernel, linux-rockchip, Wolfram Sang

Hi,

On Wed, Sep 04, 2024 at 10:59:47AM GMT, Peter Rosin wrote:
> 2024-09-04 at 10:35, Farouk Bouabid wrote:
> > On 03.09.24 17:13, Andi Shyti wrote:
> > 
> > [...]
> > 
> >>> +        ret = i2c_mux_add_adapter(muxc, 0, reg);
> >>> +        if (ret)
> >>> +            return ret;
> >> do we need to delete the adapters we added in previous cycles?
> >>
> > 
> > We calldevm_action_or_reset() before the loop to add adapter-removal to the error path. I think that does the job
> > 
> > for us or am I missing something ?
> 
> I missed that too, but it LGTM. It's safe to call i2c_mux_del_adapters() as
> soon the mux core has been allocated, so there is no risk it is called too
> early or something.

Just a question, still: is it the same calling
i2c_mux_add_adapter() and calling mux_remove()?

Thanks,
Andi

> With that said, I agree with Andi on the naming and the
> nitpicks.
> 
> Cheers,
> Peter

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

* Re: [PATCH v7 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer
  2024-09-04 10:23     ` Farouk Bouabid
@ 2024-09-05 20:33       ` Andi Shyti
  0 siblings, 0 replies; 17+ messages in thread
From: Andi Shyti @ 2024-09-05 20:33 UTC (permalink / raw)
  To: Farouk Bouabid
  Cc: Rob Herring, 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, Wolfram Sang

Hi Farouk,

On Wed, Sep 04, 2024 at 12:23:56PM GMT, Farouk Bouabid wrote:
> On 03.09.24 17:13, Andi Shyti wrote:
> > > 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
> > Along the driver I expressed some concern about the prefixes.
> > 
> > You should avoid prefixes such as mux_* or MUX_* because they
> > don't belong to your driver. You should always use your driver's
> > name:
> > 
> >   1. mule_*
> >   2. mule_mux_*
> >   3. mule_i2c_mux_*
> > 
> > You have used the 3rd, I'd rather prefer the 1st. Because when
> > you are in i2c/muxex/ it's implied that you are an i2c mux
> > device. But it's a matter of personal taste.
> > 
> 
> Are you here referring to the commit log, module name or function prefixes ?
> (because  later you suggested that we use "mule_i2c_mux_*" for functions)

I made a general comment that applies to all the functions,
defines, and global variables you've made here.

My suggestion to use mule_i2c_mux_* is based on the fact that
it's the most commonly used prefix in your code, but you don't
necessarily need to use it. That's why I listed a few options.

> "Mule" is a chip that requires multiple drivers that will be added later on,
> and I suppose we don't want conflict with other module names ?

It's an unwritten rule that you should avoid using overly generic
terms as prefixes in your driver, like "smbus_read()" or
"i2c_read()". Instead, you should incorporate to the prefix the
chip identifier as named by the vendor. If this device is called
'Theobroma Systems Mule,' you should stick to that naming as much
as possible.

Using the correct prefix might seem like overkill, but it's
essential for debugging, grepping, and avoiding conflicts in
cases where other developers haven’t used unique identifiers in
their modules.

Lastly, if you're working within the i2c/muxes directory, you can
omit the 'mux' prefix. It’s already clear that you're working
with an I2C mux device.

Thanks,
Andi

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

* Re: [PATCH v7 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer
  2024-09-05 20:20         ` Andi Shyti
@ 2024-09-06  9:32           ` Farouk Bouabid
  0 siblings, 0 replies; 17+ messages in thread
From: Farouk Bouabid @ 2024-09-06  9:32 UTC (permalink / raw)
  To: Andi Shyti, Peter Rosin
  Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Quentin Schulz,
	Jean Delvare, Guenter Roeck, Heiko Stuebner, linux-i2c,
	devicetree, linux-kernel, linux-hwmon, linux-arm-kernel,
	linux-rockchip, Wolfram Sang

Hi Andi,

On 05.09.24 22:20, Andi Shyti wrote:
> Hi,
>
> On Wed, Sep 04, 2024 at 10:59:47AM GMT, Peter Rosin wrote:
>> 2024-09-04 at 10:35, Farouk Bouabid wrote:
>>> On 03.09.24 17:13, Andi Shyti wrote:
>>>
>>> [...]
>>>
>>>>> +        ret = i2c_mux_add_adapter(muxc, 0, reg);
>>>>> +        if (ret)
>>>>> +            return ret;
>>>> do we need to delete the adapters we added in previous cycles?
>>>>
>>> We calldevm_action_or_reset() before the loop to add adapter-removal to the error path. I think that does the job
>>>
>>> for us or am I missing something ?
>> I missed that too, but it LGTM. It's safe to call i2c_mux_del_adapters() as
>> soon the mux core has been allocated, so there is no risk it is called too
>> early or something.
> Just a question, still: is it the same calling
> i2c_mux_add_adapter() and calling mux_remove()?
>

We are basically wrapping i2c_mux_adapters_del() by mux_remove() 
(implemented in our driver) which is registered it as 
devm_add_action_or_reset and would be called for a non-0 return of the 
probe.  i2c_mux_adapters_del() will then remove added adapters (do 
nothing if none is added).


Thanks,

Farouk


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

end of thread, other threads:[~2024-09-06  9:33 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-02 16:38 [PATCH v7 0/8] Add tsd,mule-i2c-mux support Farouk Bouabid
2024-09-02 16:38 ` [PATCH v7 1/8] dt-bindings: i2c: add support for tsd,mule-i2c-mux Farouk Bouabid
2024-09-02 16:38 ` [PATCH v7 2/8] i2c: muxes: add support for tsd,mule-i2c multiplexer Farouk Bouabid
2024-09-03 15:13   ` Andi Shyti
2024-09-03 15:44     ` Peter Rosin
2024-09-04  8:35     ` Farouk Bouabid
2024-09-04  8:59       ` Peter Rosin
2024-09-05 20:20         ` Andi Shyti
2024-09-06  9:32           ` Farouk Bouabid
2024-09-04 10:23     ` Farouk Bouabid
2024-09-05 20:33       ` Andi Shyti
2024-09-02 16:38 ` [PATCH v7 3/8] dt-bindings: hwmon: add support for ti,amc6821 Farouk Bouabid
2024-09-02 16:38 ` [PATCH v7 4/8] hwmon: (amc6821) add support for tsd,mule Farouk Bouabid
2024-09-02 16:38 ` [PATCH v7 5/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-jaguar Farouk Bouabid
2024-09-02 16:38 ` [PATCH v7 6/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3399-puma Farouk Bouabid
2024-09-02 16:38 ` [PATCH v7 7/8] arm64: dts: rockchip: add tsd,mule-i2c-mux on rk3588-tiger Farouk Bouabid
2024-09-02 16:38 ` [PATCH v7 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).