Merge branch 'parisc-4.5-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller...
[deliverable/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");
This page took 0.025175 seconds and 5 git commands to generate.