diff options
Diffstat (limited to 'drivers/staging/fieldbus')
-rw-r--r-- | drivers/staging/fieldbus/anybuss/Kconfig | 1 | ||||
-rw-r--r-- | drivers/staging/fieldbus/anybuss/arcx-anybus.c | 44 | ||||
-rw-r--r-- | drivers/staging/fieldbus/dev_core.c | 6 |
3 files changed, 17 insertions, 34 deletions
diff --git a/drivers/staging/fieldbus/anybuss/Kconfig b/drivers/staging/fieldbus/anybuss/Kconfig index 8bc3d9a87743..635a0a7b7dd2 100644 --- a/drivers/staging/fieldbus/anybuss/Kconfig +++ b/drivers/staging/fieldbus/anybuss/Kconfig @@ -14,6 +14,7 @@ if HMS_ANYBUSS_BUS config ARCX_ANYBUS_CONTROLLER tristate "Arcx Anybus-S Controller" depends on OF && GPIOLIB && HAS_IOMEM && REGULATOR + select REGMAP_MMIO help Select this to get support for the Arcx Anybus controller. It connects to the SoC via a parallel memory bus, and 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 * diff --git a/drivers/staging/fieldbus/dev_core.c b/drivers/staging/fieldbus/dev_core.c index 60b85140675a..f6f5b92ba914 100644 --- a/drivers/staging/fieldbus/dev_core.c +++ b/drivers/staging/fieldbus/dev_core.c @@ -211,16 +211,16 @@ static ssize_t fieldbus_write(struct file *filp, const char __user *buf, return fbdev->write_area(fbdev, buf, size, offset); } -static unsigned int fieldbus_poll(struct file *filp, poll_table *wait) +static __poll_t fieldbus_poll(struct file *filp, poll_table *wait) { struct fb_open_file *of = filp->private_data; struct fieldbus_dev *fbdev = of->fbdev; - unsigned int mask = POLLIN | POLLRDNORM | POLLOUT | POLLWRNORM; + __poll_t mask = EPOLLIN | EPOLLRDNORM | EPOLLOUT | EPOLLWRNORM; poll_wait(filp, &fbdev->dc_wq, wait); /* data changed ? */ if (fbdev->dc_event != of->dc_event) - mask |= POLLPRI | POLLERR; + mask |= EPOLLPRI | EPOLLERR; return mask; } |