summaryrefslogtreecommitdiff
path: root/arch/arm/mach-iop32x/n2100.c
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2019-06-01 00:37:56 +0200
committerWolfram Sang <wsa@the-dreams.de>2019-06-12 13:20:23 +0200
commitfdb7e884ad617f8aa69abdd7f39e3fdac85e081e (patch)
tree8040de47cccdb9797aa15272df7d0afde3431307 /arch/arm/mach-iop32x/n2100.c
parented7357c9f9b6a560992446c37260be25e514c4ab (diff)
downloadlinux-next-fdb7e884ad617f8aa69abdd7f39e3fdac85e081e.tar.gz
i2c: iop: Use GPIO descriptors
The IOP3xx has some elaborate code to directly slam the GPIO lines multiplexed with I2C down low before enablement, apparently a workaround for a hardware bug found in the early chips. After consulting the developer documentation for IOP80321 and IOP80331 I can clearly see that this may be useful for IOP80321 family (mach-iop32x) but it is highly dubious for any 80331 series or later chip: in these chips the lines are not multiplexed for UARTs. We convert the code to pass optional GPIO descriptors and register these only on the 80321-based boards where it makes sense, optionally obtain them in the driver and use the gpiod_set_raw_value() to ascertain the line gets driven low when needed. The GPIO driver does not give the GPIO chip a reasonable label so the patch also adds that so that these machine descriptor tables can be used. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Acked-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Diffstat (limited to 'arch/arm/mach-iop32x/n2100.c')
-rw-r--r--arch/arm/mach-iop32x/n2100.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/arm/mach-iop32x/n2100.c b/arch/arm/mach-iop32x/n2100.c
index 23e8c93515d4..c780b6e82ad9 100644
--- a/arch/arm/mach-iop32x/n2100.c
+++ b/arch/arm/mach-iop32x/n2100.c
@@ -31,6 +31,7 @@
#include <linux/reboot.h>
#include <linux/io.h>
#include <linux/gpio.h>
+#include <linux/gpio/machine.h>
#include <mach/hardware.h>
#include <asm/irq.h>
#include <asm/mach/arch.h>
@@ -345,6 +346,7 @@ device_initcall(n2100_request_gpios);
static void __init n2100_init_machine(void)
{
register_iop32x_gpio();
+ gpiod_add_lookup_table(&iop3xx_i2c0_gpio_lookup);
platform_device_register(&iop3xx_i2c0_device);
platform_device_register(&n2100_flash_device);
platform_device_register(&n2100_serial_device);