The arcx-anybus's registers are accessed via a memory-mapped
IO region. A regmap associated with this region is created
using custom reg_read() / reg_write() callbacks.

However, an abstraction which creates a memory-mapped IO
region backed regmap already exists: devm_regmap_init_mmio().

Replace the custom regmap with the existing kernel abstraction.
As a pleasant side-effect, sparse warnings now disappear.

Signed-off-by: Sven Van Asbroeck <thesve...@gmail.com>
---
 .../staging/fieldbus/anybuss/arcx-anybus.c    | 44 ++++++-------------
 1 file changed, 13 insertions(+), 31 deletions(-)

diff --git a/drivers/staging/fieldbus/anybuss/arcx-anybus.c 
b/drivers/staging/fieldbus/anybuss/arcx-anybus.c
index a167fb68e355..2ecffa42e561 100644
--- a/drivers/staging/fieldbus/anybuss/arcx-anybus.c
+++ b/drivers/staging/fieldbus/anybuss/arcx-anybus.c
@@ -111,49 +111,31 @@ static void export_reset_1(struct device *dev, bool 
assert)
  * at a time for now.
  */
 
-static int read_reg_bus(void *context, unsigned int reg,
-                       unsigned int *val)
-{
-       void __iomem *base = context;
-
-       *val = readb(base + reg);
-       return 0;
-}
-
-static int write_reg_bus(void *context, unsigned int reg,
-                        unsigned int val)
-{
-       void __iomem *base = context;
-
-       writeb(val, base + reg);
-       return 0;
-}
+static const struct regmap_config arcx_regmap_cfg = {
+       .reg_bits = 16,
+       .val_bits = 8,
+       .max_register = 0x7ff,
+       .use_single_read = true,
+       .use_single_write = true,
+       /*
+        * single-byte parallel bus accesses are atomic, so don't
+        * require any synchronization.
+        */
+       .disable_locking = true,
+};
 
 static struct regmap *create_parallel_regmap(struct platform_device *pdev,
                                             int idx)
 {
-       struct regmap_config regmap_cfg = {
-               .reg_bits = 11,
-               .val_bits = 8,
-               /*
-                * single-byte parallel bus accesses are atomic, so don't
-                * require any synchronization.
-                */
-               .disable_locking = true,
-               .reg_read = read_reg_bus,
-               .reg_write = write_reg_bus,
-       };
        struct resource *res;
        void __iomem *base;
        struct device *dev = &pdev->dev;
 
        res = platform_get_resource(pdev, IORESOURCE_MEM, idx + 1);
-       if (resource_size(res) < (1 << regmap_cfg.reg_bits))
-               return ERR_PTR(-EINVAL);
        base = devm_ioremap_resource(dev, res);
        if (IS_ERR(base))
                return ERR_CAST(base);
-       return devm_regmap_init(dev, NULL, base, &regmap_cfg);
+       return devm_regmap_init_mmio(dev, base, &arcx_regmap_cfg);
 }
 
 static struct anybuss_host *
-- 
2.17.1

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to