]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/mfd/syscon.c
mfd: syscon: Add a DT property to set value width
[karo-tx-linux.git] / drivers / mfd / syscon.c
index 176bf0fa2685e70749f42bad44931b8489e0d681..b7aabeefab07a2b44ab96b3e371de3d731c0b9cf 100644 (file)
@@ -47,6 +47,7 @@ static struct syscon *of_syscon_register(struct device_node *np)
        struct syscon *syscon;
        struct regmap *regmap;
        void __iomem *base;
+       u32 reg_io_width;
        int ret;
        struct regmap_config syscon_config = syscon_regmap_config;
 
@@ -69,6 +70,18 @@ static struct syscon *of_syscon_register(struct device_node *np)
         else if (of_property_read_bool(np, "little-endian"))
                syscon_config.val_format_endian = REGMAP_ENDIAN_LITTLE;
 
+       /*
+        * search for reg-io-width property in DT. If it is not provided,
+        * default to 4 bytes. regmap_init_mmio will return an error if values
+        * are invalid so there is no need to check them here.
+        */
+       ret = of_property_read_u32(np, "reg-io-width", &reg_io_width);
+       if (ret)
+               reg_io_width = 4;
+
+       syscon_config.reg_stride = reg_io_width;
+       syscon_config.val_bits = reg_io_width * 8;
+
        regmap = regmap_init_mmio(NULL, base, &syscon_config);
        if (IS_ERR(regmap)) {
                pr_err("regmap init failed\n");