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, ®map_cfg); + return devm_regmap_init_mmio(dev, base, &arcx_regmap_cfg); } static struct anybuss_host *