regmap: mmio: Add regmap_mmio_regbits_check.
authorXiubo Li <Li.Xiubo@freescale.com>
Fri, 28 Mar 2014 05:12:56 +0000 (13:12 +0800)
committerMark Brown <broonie@linaro.org>
Fri, 28 Mar 2014 11:12:05 +0000 (11:12 +0000)
Fix the support for 1/2/8 bytes wide register address checking.

Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
drivers/base/regmap/regmap-mmio.c

index ed080a47b1f8e76d18e80b5b4eeeb2956e568bf3..de45a1e1548fa31894c2afd3af1b658869939afe 100644 (file)
@@ -47,6 +47,21 @@ static inline void regmap_mmio_regsize_check(size_t reg_size)
        }
 }
 
+static int regmap_mmio_regbits_check(size_t reg_bits)
+{
+       switch (reg_bits) {
+       case 8:
+       case 16:
+       case 32:
+#ifdef CONFIG_64BIT
+       case 64:
+#endif
+               return 0;
+       default:
+               return -EINVAL;
+       }
+}
+
 static inline void regmap_mmio_count_check(size_t count)
 {
        BUG_ON(count % 2 != 0);
@@ -191,8 +206,9 @@ static struct regmap_mmio_context *regmap_mmio_gen_context(struct device *dev,
        int min_stride;
        int ret;
 
-       if (config->reg_bits != 32)
-               return ERR_PTR(-EINVAL);
+       ret = regmap_mmio_regbits_check(config->reg_bits);
+       if (ret)
+               return ERR_PTR(ret);
 
        if (config->pad_bits)
                return ERR_PTR(-EINVAL);