]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
hwmon: (amc6821) add support for tsd,mule
authorFarouk Bouabid <farouk.bouabid@cherry.de>
Fri, 6 Sep 2024 15:54:15 +0000 (17:54 +0200)
committerGuenter Roeck <linux@roeck-us.net>
Sun, 10 Nov 2024 22:48:06 +0000 (14:48 -0800)
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>
Message-ID: <20240906-dev-mule-i2c-mux-v8-4-dbd28a150e41@cherry.de>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/amc6821.c

index e86027f850c90cebb90ca59f0b05821839afdb3b..1e3c6acd89740f281f90d149838ddd6d2048bce4 100644 (file)
@@ -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>
 
@@ -893,7 +894,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,
 };
@@ -920,6 +920,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);
@@ -937,6 +944,9 @@ static const struct of_device_id __maybe_unused amc6821_of_match[] = {
        {
                .compatible = "ti,amc6821",
        },
+       {
+               .compatible = "tsd,mule",
+       },
        { }
 };