* [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* 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
* [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", ®);
+ 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* 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 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 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
* [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* 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
* [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