diff options
Diffstat (limited to 'target/mips/mikrotik-rb4xx/patches/4.1.10/0029-gpio-add-gpio-latch-driver.patch')
-rw-r--r-- | target/mips/mikrotik-rb4xx/patches/4.1.10/0029-gpio-add-gpio-latch-driver.patch | 1261 |
1 files changed, 0 insertions, 1261 deletions
diff --git a/target/mips/mikrotik-rb4xx/patches/4.1.10/0029-gpio-add-gpio-latch-driver.patch b/target/mips/mikrotik-rb4xx/patches/4.1.10/0029-gpio-add-gpio-latch-driver.patch deleted file mode 100644 index ade756fa9..000000000 --- a/target/mips/mikrotik-rb4xx/patches/4.1.10/0029-gpio-add-gpio-latch-driver.patch +++ /dev/null @@ -1,1261 +0,0 @@ -diff -Nur linux-4.1.6.orig/drivers/gpio/gpio-latch.c linux-4.1.6/drivers/gpio/gpio-latch.c ---- linux-4.1.6.orig/drivers/gpio/gpio-latch.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.1.6/drivers/gpio/gpio-latch.c 2015-09-16 00:47:41.982063655 +0200 -@@ -0,0 +1,220 @@ -+/* -+ * GPIO latch driver -+ * -+ * Copyright (C) 2014 Gabor Juhos <juhosg@openwrt.org> -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 as published -+ * by the Free Software Foundation. -+ */ -+ -+#include <linux/kernel.h> -+#include <linux/init.h> -+#include <linux/module.h> -+#include <linux/types.h> -+#include <linux/gpio.h> -+#include <linux/slab.h> -+#include <linux/platform_device.h> -+ -+#include <linux/platform_data/gpio-latch.h> -+ -+struct gpio_latch_chip { -+ struct gpio_chip gc; -+ -+ struct mutex mutex; -+ struct mutex latch_mutex; -+ bool latch_enabled; -+ int le_gpio; -+ bool le_active_low; -+ int *gpios; -+}; -+ -+static inline struct gpio_latch_chip *to_gpio_latch_chip(struct gpio_chip *gc) -+{ -+ return container_of(gc, struct gpio_latch_chip, gc); -+} -+ -+static void gpio_latch_lock(struct gpio_latch_chip *glc, bool enable) -+{ -+ mutex_lock(&glc->mutex); -+ -+ if (enable) -+ glc->latch_enabled = true; -+ -+ if (glc->latch_enabled) -+ mutex_lock(&glc->latch_mutex); -+} -+ -+static void gpio_latch_unlock(struct gpio_latch_chip *glc, bool disable) -+{ -+ if (glc->latch_enabled) -+ mutex_unlock(&glc->latch_mutex); -+ -+ if (disable) -+ glc->latch_enabled = true; -+ -+ mutex_unlock(&glc->mutex); -+} -+ -+static int -+gpio_latch_get(struct gpio_chip *gc, unsigned offset) -+{ -+ struct gpio_latch_chip *glc = to_gpio_latch_chip(gc); -+ int ret; -+ -+ gpio_latch_lock(glc, false); -+ ret = gpio_get_value(glc->gpios[offset]); -+ gpio_latch_unlock(glc, false); -+ -+ return ret; -+} -+ -+static void -+gpio_latch_set(struct gpio_chip *gc, unsigned offset, int value) -+{ -+ struct gpio_latch_chip *glc = to_gpio_latch_chip(gc); -+ bool enable_latch = false; -+ bool disable_latch = false; -+ int gpio; -+ -+ gpio = glc->gpios[offset]; -+ -+ if (gpio == glc->le_gpio) { -+ enable_latch = value ^ glc->le_active_low; -+ disable_latch = !enable_latch; -+ } -+ -+ gpio_latch_lock(glc, enable_latch); -+ gpio_set_value(gpio, value); -+ gpio_latch_unlock(glc, disable_latch); -+} -+ -+static int -+gpio_latch_direction_input(struct gpio_chip *gc, unsigned offset) -+{ -+ struct gpio_latch_chip *glc = to_gpio_latch_chip(gc); -+ int ret; -+ -+ gpio_latch_lock(glc, false); -+ ret = gpio_direction_input(glc->gpios[offset]); -+ gpio_latch_unlock(glc, false); -+ -+ return ret; -+} -+ -+static int -+gpio_latch_direction_output(struct gpio_chip *gc, unsigned offset, int value) -+{ -+ struct gpio_latch_chip *glc = to_gpio_latch_chip(gc); -+ bool enable_latch = false; -+ bool disable_latch = false; -+ int gpio; -+ int ret; -+ -+ gpio = glc->gpios[offset]; -+ -+ if (gpio == glc->le_gpio) { -+ enable_latch = value ^ glc->le_active_low; -+ disable_latch = !enable_latch; -+ } -+ -+ gpio_latch_lock(glc, enable_latch); -+ ret = gpio_direction_output(gpio, value); -+ gpio_latch_unlock(glc, disable_latch); -+ -+ return ret; -+} -+ -+static int gpio_latch_probe(struct platform_device *pdev) -+{ -+ struct gpio_latch_chip *glc; -+ struct gpio_latch_platform_data *pdata; -+ struct gpio_chip *gc; -+ int size; -+ int ret; -+ int i; -+ -+ pdata = dev_get_platdata(&pdev->dev); -+ if (!pdata) -+ return -EINVAL; -+ -+ if (pdata->le_gpio_index >= pdata->num_gpios || -+ !pdata->num_gpios || -+ !pdata->gpios) -+ return -EINVAL; -+ -+ for (i = 0; i < pdata->num_gpios; i++) { -+ int gpio = pdata->gpios[i]; -+ -+ ret = devm_gpio_request(&pdev->dev, gpio, -+ GPIO_LATCH_DRIVER_NAME); -+ if (ret) -+ return ret; -+ } -+ -+ glc = devm_kzalloc(&pdev->dev, sizeof(*glc), GFP_KERNEL); -+ if (!glc) -+ return -ENOMEM; -+ -+ mutex_init(&glc->mutex); -+ mutex_init(&glc->latch_mutex); -+ -+ size = pdata->num_gpios * sizeof(glc->gpios[0]); -+ glc->gpios = devm_kzalloc(&pdev->dev, size , GFP_KERNEL); -+ if (!glc->gpios) -+ return -ENOMEM; -+ -+ memcpy(glc->gpios, pdata->gpios, size); -+ -+ glc->le_gpio = glc->gpios[pdata->le_gpio_index]; -+ glc->le_active_low = pdata->le_active_low; -+ -+ gc = &glc->gc; -+ -+ gc->label = GPIO_LATCH_DRIVER_NAME; -+ gc->base = pdata->base; -+ gc->can_sleep = true; -+ gc->ngpio = pdata->num_gpios; -+ gc->get = gpio_latch_get; -+ gc->set = gpio_latch_set; -+ gc->direction_input = gpio_latch_direction_input, -+ gc->direction_output = gpio_latch_direction_output; -+ -+ platform_set_drvdata(pdev, glc); -+ -+ ret = gpiochip_add(&glc->gc); -+ if (ret) -+ return ret; -+ -+ return 0; -+} -+ -+static int gpio_latch_remove(struct platform_device *pdev) -+{ -+ struct gpio_latch_chip *glc = platform_get_drvdata(pdev); -+ -+ gpiochip_remove(&glc->gc); -+ return 0; -+} -+ -+ -+static struct platform_driver gpio_latch_driver = { -+ .probe = gpio_latch_probe, -+ .remove = gpio_latch_remove, -+ .driver = { -+ .name = GPIO_LATCH_DRIVER_NAME, -+ .owner = THIS_MODULE, -+ }, -+}; -+ -+static int __init gpio_latch_init(void) -+{ -+ return platform_driver_register(&gpio_latch_driver); -+} -+ -+postcore_initcall(gpio_latch_init); -+ -+MODULE_DESCRIPTION("GPIO latch driver"); -+MODULE_AUTHOR("Gabor Juhos <juhosg@openwrt.org>"); -+MODULE_LICENSE("GPL v2"); -+MODULE_ALIAS("platform:" GPIO_LATCH_DRIVER_NAME); -diff -Nur linux-4.1.6.orig/drivers/gpio/Kconfig linux-4.1.6/drivers/gpio/Kconfig ---- linux-4.1.6.orig/drivers/gpio/Kconfig 2015-08-17 05:52:51.000000000 +0200 -+++ linux-4.1.6/drivers/gpio/Kconfig 2015-09-16 00:47:15.279630571 +0200 -@@ -988,4 +988,9 @@ - - endmenu - -+config GPIO_LATCH -+ tristate "GPIO latch driver" -+ help -+ Say yes here to enable a GPIO latch driver. -+ - endif -diff -Nur linux-4.1.6.orig/drivers/gpio/Kconfig.orig linux-4.1.6/drivers/gpio/Kconfig.orig ---- linux-4.1.6.orig/drivers/gpio/Kconfig.orig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.1.6/drivers/gpio/Kconfig.orig 2015-08-17 05:52:51.000000000 +0200 -@@ -0,0 +1,991 @@ -+# -+# GPIO infrastructure and drivers -+# -+ -+config ARCH_HAVE_CUSTOM_GPIO_H -+ bool -+ help -+ Selecting this config option from the architecture Kconfig allows -+ the architecture to provide a custom asm/gpio.h implementation -+ overriding the default implementations. New uses of this are -+ strongly discouraged. -+ -+config ARCH_WANT_OPTIONAL_GPIOLIB -+ bool -+ help -+ Select this config option from the architecture Kconfig, if -+ it is possible to use gpiolib on the architecture, but let the -+ user decide whether to actually build it or not. -+ Select this instead of ARCH_REQUIRE_GPIOLIB, if your architecture does -+ not depend on GPIOs being available, but rather let the user -+ decide whether he needs it or not. -+ -+config ARCH_REQUIRE_GPIOLIB -+ bool -+ select GPIOLIB -+ help -+ Platforms select gpiolib if they use this infrastructure -+ for all their GPIOs, usually starting with ones integrated -+ into SOC processors. -+ Selecting this from the architecture code will cause the gpiolib -+ code to always get built in. -+ -+ -+menuconfig GPIOLIB -+ bool "GPIO Support" -+ depends on ARCH_WANT_OPTIONAL_GPIOLIB || ARCH_REQUIRE_GPIOLIB -+ help -+ This enables GPIO support through the generic GPIO library. -+ You only need to enable this, if you also want to enable -+ one or more of the GPIO drivers below. -+ -+ If unsure, say N. -+ -+if GPIOLIB -+ -+config GPIO_DEVRES -+ def_bool y -+ depends on HAS_IOMEM -+ -+config OF_GPIO -+ def_bool y -+ depends on OF -+ -+config GPIO_ACPI -+ def_bool y -+ depends on ACPI -+ -+config GPIOLIB_IRQCHIP -+ select IRQ_DOMAIN -+ bool -+ -+config DEBUG_GPIO -+ bool "Debug GPIO calls" -+ depends on DEBUG_KERNEL -+ help -+ Say Y here to add some extra checks and diagnostics to GPIO calls. -+ These checks help ensure that GPIOs have been properly initialized -+ before they are used, and that sleeping calls are not made from -+ non-sleeping contexts. They can make bitbanged serial protocols -+ slower. The diagnostics help catch the type of setup errors -+ that are most common when setting up new platforms or boards. -+ -+config GPIO_SYSFS -+ bool "/sys/class/gpio/... (sysfs interface)" -+ depends on SYSFS -+ help -+ Say Y here to add a sysfs interface for GPIOs. -+ -+ This is mostly useful to work around omissions in a system's -+ kernel support. Those are common in custom and semicustom -+ hardware assembled using standard kernels with a minimum of -+ custom patches. In those cases, userspace code may import -+ a given GPIO from the kernel, if no kernel driver requested it. -+ -+ Kernel drivers may also request that a particular GPIO be -+ exported to userspace; this can be useful when debugging. -+ -+config GPIO_GENERIC -+ tristate -+ -+# put drivers in the right section, in alphabetical order -+ -+# This symbol is selected by both I2C and SPI expanders -+config GPIO_MAX730X -+ tristate -+ -+menu "Memory mapped GPIO drivers" -+ -+config GPIO_74XX_MMIO -+ tristate "GPIO driver for 74xx-ICs with MMIO access" -+ depends on OF_GPIO -+ select GPIO_GENERIC -+ help -+ Say yes here to support GPIO functionality for 74xx-compatible ICs -+ with MMIO access. Compatible models include: -+ 1 bit: 741G125 (Input), 741G74 (Output) -+ 2 bits: 742G125 (Input), 7474 (Output) -+ 4 bits: 74125 (Input), 74175 (Output) -+ 6 bits: 74365 (Input), 74174 (Output) -+ 8 bits: 74244 (Input), 74273 (Output) -+ 16 bits: 741624 (Input), 7416374 (Output) -+ -+config GPIO_ALTERA -+ tristate "Altera GPIO" -+ depends on OF_GPIO -+ select GPIO_GENERIC -+ select GPIOLIB_IRQCHIP -+ help -+ Say Y or M here to build support for the Altera PIO device. -+ -+ If driver is built as a module it will be called gpio-altera. -+ -+config GPIO_BCM_KONA -+ bool "Broadcom Kona GPIO" -+ depends on OF_GPIO && (ARCH_BCM_MOBILE || COMPILE_TEST) -+ help -+ Turn on GPIO support for Broadcom "Kona" chips. -+ -+config GPIO_CLPS711X -+ tristate "CLPS711X GPIO support" -+ depends on ARCH_CLPS711X || COMPILE_TEST -+ select GPIO_GENERIC -+ help -+ Say yes here to support GPIO on CLPS711X SoCs. -+ -+config GPIO_DAVINCI -+ bool "TI Davinci/Keystone GPIO support" -+ default y if ARCH_DAVINCI -+ depends on ARM && (ARCH_DAVINCI || ARCH_KEYSTONE) -+ help -+ Say yes here to enable GPIO support for TI Davinci/Keystone SoCs. -+ -+config GPIO_DWAPB -+ tristate "Synopsys DesignWare APB GPIO driver" -+ select GPIO_GENERIC -+ select GENERIC_IRQ_CHIP -+ help -+ Say Y or M here to build support for the Synopsys DesignWare APB -+ GPIO block. -+ -+config GPIO_EM -+ tristate "Emma Mobile GPIO" -+ depends on ARM && OF_GPIO -+ help -+ Say yes here to support GPIO on Renesas Emma Mobile SoCs. -+ -+config GPIO_EP93XX -+ def_bool y -+ depends on ARCH_EP93XX -+ select GPIO_GENERIC -+ -+config GPIO_F7188X -+ tristate "F71869, F71869A, F71882FG and F71889F GPIO support" -+ depends on X86 -+ help -+ This option enables support for GPIOs found on Fintek Super-I/O -+ chips F71869, F71869A, F71882FG and F71889F. -+ -+ To compile this driver as a module, choose M here: the module will -+ be called f7188x-gpio. -+ -+config GPIO_GE_FPGA -+ bool "GE FPGA based GPIO" -+ depends on GE_FPGA -+ select GPIO_GENERIC -+ help -+ Support for common GPIO functionality provided on some GE Single Board -+ Computers. -+ -+ This driver provides basic support (configure as input or output, read -+ and write pin state) for GPIO implemented in a number of GE single -+ board computers. -+ -+config GPIO_GENERIC_PLATFORM -+ tristate "Generic memory-mapped GPIO controller support (MMIO platform device)" -+ select GPIO_GENERIC -+ help -+ Say yes here to support basic platform_device memory-mapped GPIO controllers. -+ -+config GPIO_GRGPIO -+ tristate "Aeroflex Gaisler GRGPIO support" -+ depends on OF -+ select GPIO_GENERIC -+ select IRQ_DOMAIN -+ help -+ Select this to support Aeroflex Gaisler GRGPIO cores from the GRLIB -+ VHDL IP core library. -+ -+config GPIO_ICH -+ tristate "Intel ICH GPIO" -+ depends on PCI && X86 -+ select MFD_CORE -+ select LPC_ICH -+ help -+ Say yes here to support the GPIO functionality of a number of Intel -+ ICH-based chipsets. Currently supported devices: ICH6, ICH7, ICH8 -+ ICH9, ICH10, Series 5/3400 (eg Ibex Peak), Series 6/C200 (eg -+ Cougar Point), NM10 (Tiger Point), and 3100 (Whitmore Lake). -+ -+ If unsure, say N. -+ -+config GPIO_IOP -+ tristate "Intel IOP GPIO" -+ depends on ARM && (ARCH_IOP32X || ARCH_IOP33X) -+ help -+ Say yes here to support the GPIO functionality of a number of Intel -+ IOP32X or IOP33X. -+ -+ If unsure, say N. -+ -+config GPIO_IT8761E -+ tristate "IT8761E GPIO support" -+ depends on X86 # unconditional access to IO space. -+ help -+ Say yes here to support GPIO functionality of IT8761E super I/O chip. -+ -+config GPIO_LOONGSON -+ bool "Loongson-2/3 GPIO support" -+ depends on CPU_LOONGSON2 || CPU_LOONGSON3 -+ help -+ driver for GPIO functionality on Loongson-2F/3A/3B processors. -+ -+config GPIO_LYNXPOINT -+ tristate "Intel Lynxpoint GPIO support" -+ depends on ACPI && X86 -+ select GPIOLIB_IRQCHIP -+ help -+ driver for GPIO functionality on Intel Lynxpoint PCH chipset -+ Requires ACPI device enumeration code to set up a platform device. -+ -+config GPIO_MB86S7X -+ bool "GPIO support for Fujitsu MB86S7x Platforms" -+ depends on ARCH_MB86S7X -+ help -+ Say yes here to support the GPIO controller in Fujitsu MB86S70 SoCs. -+ -+config GPIO_MM_LANTIQ -+ bool "Lantiq Memory mapped GPIOs" -+ depends on LANTIQ && SOC_XWAY -+ help -+ This enables support for memory mapped GPIOs on the External Bus Unit -+ (EBU) found on Lantiq SoCs. The gpios are output only as they are -+ created by attaching a 16bit latch to the bus. -+ -+config GPIO_MOXART -+ bool "MOXART GPIO support" -+ depends on ARCH_MOXART -+ select GPIO_GENERIC -+ help -+ Select this option to enable GPIO driver for -+ MOXA ART SoC devices. -+ -+config GPIO_MPC5200 -+ def_bool y -+ depends on PPC_MPC52xx -+ -+config GPIO_MPC8XXX -+ bool "MPC512x/MPC8xxx GPIO support" -+ depends on PPC_MPC512x || PPC_MPC831x || PPC_MPC834x || PPC_MPC837x || \ -+ FSL_SOC_BOOKE || PPC_86xx -+ help -+ Say Y here if you're going to use hardware that connects to the -+ MPC512x/831x/834x/837x/8572/8610 GPIOs. -+ -+config GPIO_MSM_V2 -+ tristate "Qualcomm MSM GPIO v2" -+ depends on GPIOLIB && OF && ARCH_QCOM -+ help -+ Say yes here to support the GPIO interface on ARM v7 based -+ Qualcomm MSM chips. Most of the pins on the MSM can be -+ selected for GPIO, and are controlled by this driver. -+ -+config GPIO_MVEBU -+ def_bool y -+ depends on PLAT_ORION -+ depends on OF -+ select GPIO_GENERIC -+ select GENERIC_IRQ_CHIP -+ -+config GPIO_MXC -+ def_bool y -+ depends on ARCH_MXC -+ select GPIO_GENERIC -+ select GENERIC_IRQ_CHIP -+ -+config GPIO_MXS -+ def_bool y -+ depends on ARCH_MXS -+ select GPIO_GENERIC -+ select GENERIC_IRQ_CHIP -+ -+config GPIO_OCTEON -+ tristate "Cavium OCTEON GPIO" -+ depends on GPIOLIB && CAVIUM_OCTEON_SOC -+ default y -+ help -+ Say yes here to support the on-chip GPIO lines on the OCTEON -+ family of SOCs. -+ -+config GPIO_OMAP -+ bool "TI OMAP GPIO support" if COMPILE_TEST && !ARCH_OMAP2PLUS -+ default y if ARCH_OMAP -+ depends on ARM -+ select GENERIC_IRQ_CHIP -+ select GPIOLIB_IRQCHIP -+ help -+ Say yes here to enable GPIO support for TI OMAP SoCs. -+ -+config GPIO_PL061 -+ bool "PrimeCell PL061 GPIO support" -+ depends on ARM_AMBA -+ select IRQ_DOMAIN -+ select GPIOLIB_IRQCHIP -+ help -+ Say yes here to support the PrimeCell PL061 GPIO device -+ -+config GPIO_PXA -+ bool "PXA GPIO support" -+ depends on ARCH_PXA || ARCH_MMP -+ help -+ Say yes here to support the PXA GPIO device -+ -+config GPIO_RCAR -+ tristate "Renesas R-Car GPIO" -+ depends on ARM && (ARCH_SHMOBILE || COMPILE_TEST) -+ select GPIOLIB_IRQCHIP -+ help -+ Say yes here to support GPIO on Renesas R-Car SoCs. -+ -+config GPIO_SAMSUNG -+ bool -+ depends on PLAT_SAMSUNG -+ help -+ Legacy GPIO support. Use only for platforms without support for -+ pinctrl. -+ -+config GPIO_SCH -+ tristate "Intel SCH/TunnelCreek/Centerton/Quark X1000 GPIO" -+ depends on PCI && X86 -+ select MFD_CORE -+ select LPC_SCH -+ help -+ Say yes here to support GPIO interface on Intel Poulsbo SCH, -+ Intel Tunnel Creek processor, Intel Centerton processor or -+ Intel Quark X1000 SoC. -+ -+ The Intel SCH contains a total of 14 GPIO pins. Ten GPIOs are -+ powered by the core power rail and are turned off during sleep -+ modes (S3 and higher). The remaining four GPIOs are powered by -+ the Intel SCH suspend power supply. These GPIOs remain -+ active during S3. The suspend powered GPIOs can be used to wake the -+ system from the Suspend-to-RAM state. -+ -+ The Intel Tunnel Creek processor has 5 GPIOs powered by the -+ core power rail and 9 from suspend power supply. -+ -+ The Intel Centerton processor has a total of 30 GPIO pins. -+ Twenty-one are powered by the core power rail and 9 from the -+ suspend power supply. -+ -+ The Intel Quark X1000 SoC has 2 GPIOs powered by the core -+ power well and 6 from the suspend power well. -+ -+config GPIO_SCH311X -+ tristate "SMSC SCH311x SuperI/O GPIO" -+ help -+ Driver to enable the GPIOs found on SMSC SMSC SCH3112, SCH3114 and -+ SCH3116 "Super I/O" chipsets. -+ -+ To compile this driver as a module, choose M here: the module will -+ be called gpio-sch311x. -+ -+config GPIO_SPEAR_SPICS -+ bool "ST SPEAr13xx SPI Chip Select as GPIO support" -+ depends on PLAT_SPEAR -+ select GENERIC_IRQ_CHIP -+ help -+ Say yes here to support ST SPEAr SPI Chip Select as GPIO device -+ -+config GPIO_STA2X11 -+ bool "STA2x11/ConneXt GPIO support" -+ depends on MFD_STA2X11 -+ select GENERIC_IRQ_CHIP -+ help -+ Say yes here to support the STA2x11/ConneXt GPIO device. -+ The GPIO module has 128 GPIO pins with alternate functions. -+ -+config GPIO_STP_XWAY -+ bool "XWAY STP GPIOs" -+ depends on SOC_XWAY -+ help -+ This enables support for the Serial To Parallel (STP) unit found on -+ XWAY SoC. The STP allows the SoC to drive a shift registers cascade, -+ that can be up to 24 bit. This peripheral is aimed at driving leds. -+ Some of the gpios/leds can be auto updated by the soc with dsl and -+ phy status. -+ -+config GPIO_SYSCON -+ tristate "GPIO based on SYSCON" -+ depends on MFD_SYSCON && OF -+ help -+ Say yes here to support GPIO functionality though SYSCON driver. -+ -+config GPIO_TB10X -+ bool -+ select GENERIC_IRQ_CHIP -+ select OF_GPIO -+ -+config GPIO_TS5500 -+ tristate "TS-5500 DIO blocks and compatibles" -+ depends on TS5500 || COMPILE_TEST -+ help -+ This driver supports Digital I/O exposed by pin blocks found on some -+ Technologic Systems platforms. It includes, but is not limited to, 3 -+ blocks of the TS-5500: DIO1, DIO2 and the LCD port, and the TS-5600 -+ LCD port. -+ -+config GPIO_TZ1090 -+ bool "Toumaz Xenif TZ1090 GPIO support" -+ depends on SOC_TZ1090 -+ select GENERIC_IRQ_CHIP -+ default y -+ help -+ Say yes here to support Toumaz Xenif TZ1090 GPIOs. -+ -+config GPIO_TZ1090_PDC -+ bool "Toumaz Xenif TZ1090 PDC GPIO support" -+ depends on SOC_TZ1090 -+ default y -+ help -+ Say yes here to support Toumaz Xenif TZ1090 PDC GPIOs. -+ -+config GPIO_VF610 -+ def_bool y -+ depends on ARCH_MXC && SOC_VF610 -+ select GPIOLIB_IRQCHIP -+ help -+ Say yes here to support Vybrid vf610 GPIOs. -+ -+config GPIO_VR41XX -+ tristate "NEC VR4100 series General-purpose I/O Uint support" -+ depends on CPU_VR41XX -+ help -+ Say yes here to support the NEC VR4100 series General-purpose I/O Uint -+ -+config GPIO_VX855 -+ tristate "VIA VX855/VX875 GPIO" -+ depends on PCI -+ select MFD_CORE -+ select MFD_VX855 -+ help -+ Support access to the VX855/VX875 GPIO lines through the gpio library. -+ -+ This driver provides common support for accessing the device, -+ additional drivers must be enabled in order to use the -+ functionality of the device. -+ -+config GPIO_XGENE -+ bool "APM X-Gene GPIO controller support" -+ depends on ARM64 && OF_GPIO -+ help -+ This driver is to support the GPIO block within the APM X-Gene SoC -+ platform's generic flash controller. The GPIO pins are muxed with -+ the generic flash controller's address and data pins. Say yes -+ here to enable the GFC GPIO functionality. -+ -+config GPIO_XGENE_SB -+ tristate "APM X-Gene GPIO standby controller support" -+ depends on ARCH_XGENE && OF_GPIO -+ select GPIO_GENERIC -+ help -+ This driver supports the GPIO block within the APM X-Gene -+ Standby Domain. Say yes here to enable the GPIO functionality. -+ -+config GPIO_XILINX -+ tristate "Xilinx GPIO support" -+ depends on OF_GPIO && (PPC || MICROBLAZE || ARCH_ZYNQ || X86) -+ help -+ Say yes here to support the Xilinx FPGA GPIO device -+ -+config GPIO_XTENSA -+ bool "Xtensa GPIO32 support" -+ depends on XTENSA -+ depends on HAVE_XTENSA_GPIO32 -+ depends on !SMP -+ help -+ Say yes here to support the Xtensa internal GPIO32 IMPWIRE (input) -+ and EXPSTATE (output) ports -+ -+config GPIO_ZEVIO -+ bool "LSI ZEVIO SoC memory mapped GPIOs" -+ depends on ARM && OF_GPIO -+ help -+ Say yes here to support the GPIO controller in LSI ZEVIO SoCs. -+ -+config GPIO_ZYNQ -+ tristate "Xilinx Zynq GPIO support" -+ depends on ARCH_ZYNQ -+ select GPIOLIB_IRQCHIP -+ help -+ Say yes here to support Xilinx Zynq GPIO controller. -+ -+endmenu -+ -+menu "I2C GPIO expanders" -+ depends on I2C -+ -+config GPIO_ADP5588 -+ tristate "ADP5588 I2C GPIO expander" -+ depends on I2C -+ help -+ This option enables support for 18 GPIOs found -+ on Analog Devices ADP5588 GPIO Expanders. -+ -+config GPIO_ADP5588_IRQ -+ bool "Interrupt controller support for ADP5588" -+ depends on GPIO_ADP5588=y -+ help -+ Say yes here to enable the adp5588 to be used as an interrupt -+ controller. It requires the driver to be built in the kernel. -+ -+config GPIO_ADNP -+ tristate "Avionic Design N-bit GPIO expander" -+ depends on I2C && OF_GPIO -+ select GPIOLIB_IRQCHIP -+ help -+ This option enables support for N GPIOs found on Avionic Design -+ I2C GPIO expanders. The register space will be extended by powers -+ of two, so the controller will need to accommodate for that. For -+ example: if a controller provides 48 pins, 6 registers will be -+ enough to represent all pins, but the driver will assume a -+ register layout for 64 pins (8 registers). -+ -+config GPIO_MAX7300 -+ tristate "Maxim MAX7300 GPIO expander" -+ depends on I2C -+ select GPIO_MAX730X -+ help -+ GPIO driver for Maxim MAX7300 I2C-based GPIO expander. -+ -+config GPIO_MAX732X -+ tristate "MAX7319, MAX7320-7327 I2C Port Expanders" -+ depends on I2C -+ help -+ Say yes here to support the MAX7319, MAX7320-7327 series of I2C -+ Port Expanders. Each IO port on these chips has a fixed role of -+ Input (designated by 'I'), Push-Pull Output ('O'), or Open-Drain -+ Input and Output (designed by 'P'). The combinations are listed -+ below: -+ -+ 8 bits: max7319 (8I), max7320 (8O), max7321 (8P), -+ max7322 (4I4O), max7323 (4P4O) -+ -+ 16 bits: max7324 (8I8O), max7325 (8P8O), -+ max7326 (4I12O), max7327 (4P12O) -+ -+ Board setup code must specify the model to use, and the start -+ number for these GPIOs. -+ -+config GPIO_MAX732X_IRQ -+ bool "Interrupt controller support for MAX732x" -+ depends on GPIO_MAX732X=y -+ select GPIOLIB_IRQCHIP -+ help -+ Say yes here to enable the max732x to be used as an interrupt -+ controller. It requires the driver to be built in the kernel. -+ -+config GPIO_MC9S08DZ60 -+ bool "MX35 3DS BOARD MC9S08DZ60 GPIO functions" -+ depends on I2C=y && MACH_MX35_3DS -+ help -+ Select this to enable the MC9S08DZ60 GPIO driver -+ -+config GPIO_PCA953X -+ tristate "PCA95[357]x, PCA9698, TCA64xx, and MAX7310 I/O ports" -+ depends on I2C -+ help -+ Say yes here to provide access to several register-oriented -+ SMBus I/O expanders, made mostly by NXP or TI. Compatible -+ models include: -+ -+ 4 bits: pca9536, pca9537 -+ -+ 8 bits: max7310, max7315, pca6107, pca9534, pca9538, pca9554, -+ pca9556, pca9557, pca9574, tca6408, xra1202 -+ -+ 16 bits: max7312, max7313, pca9535, pca9539, pca9555, pca9575, -+ tca6416 -+ -+ 24 bits: tca6424 -+ -+ 40 bits: pca9505, pca9698 -+ -+config GPIO_PCA953X_IRQ -+ bool "Interrupt controller support for PCA953x" -+ depends on GPIO_PCA953X=y -+ select GPIOLIB_IRQCHIP -+ help -+ Say yes here to enable the pca953x to be used as an interrupt -+ controller. It requires the driver to be built in the kernel. -+ -+config GPIO_PCF857X -+ tristate "PCF857x, PCA{85,96}7x, and MAX732[89] I2C GPIO expanders" -+ depends on I2C -+ select GPIOLIB_IRQCHIP -+ select IRQ_DOMAIN -+ help -+ Say yes here to provide access to most "quasi-bidirectional" I2C -+ GPIO expanders used for additional digital outputs or inputs. -+ Most of these parts are from NXP, though TI is a second source for -+ some of them. Compatible models include: -+ -+ 8 bits: pcf8574, pcf8574a, pca8574, pca8574a, -+ pca9670, pca9672, pca9674, pca9674a, -+ max7328, max7329 -+ -+ 16 bits: pcf8575, pcf8575c, pca8575, -+ pca9671, pca9673, pca9675 -+ -+ Your board setup code will need to declare the expanders in -+ use, and assign numbers to the GPIOs they expose. Those GPIOs -+ can then be used from drivers and other kernel code, just like -+ other GPIOs, but only accessible from task contexts. -+ -+ This driver provides an in-kernel interface to those GPIOs using -+ platform-neutral GPIO calls. -+ -+config GPIO_SX150X -+ bool "Semtech SX150x I2C GPIO expander" -+ depends on I2C=y -+ select GPIOLIB_IRQCHIP -+ default n -+ help -+ Say yes here to provide support for Semtech SX150-series I2C -+ GPIO expanders. Compatible models include: -+ -+ 8 bits: sx1508q -+ 16 bits: sx1509q -+ -+endmenu -+ -+menu "MFD GPIO expanders" -+ -+config GPIO_ADP5520 -+ tristate "GPIO Support for ADP5520 PMIC" -+ depends on PMIC_ADP5520 -+ help -+ This option enables support for on-chip GPIO found -+ on Analog Devices ADP5520 PMICs. -+ -+config GPIO_ARIZONA -+ tristate "Wolfson Microelectronics Arizona class devices" -+ depends on MFD_ARIZONA -+ help -+ Support for GPIOs on Wolfson Arizona class devices. -+ -+config GPIO_CRYSTAL_COVE -+ tristate "GPIO support for Crystal Cove PMIC" -+ depends on INTEL_SOC_PMIC -+ select GPIOLIB_IRQCHIP -+ help -+ Support for GPIO pins on Crystal Cove PMIC. -+ -+ Say Yes if you have a Intel SoC based tablet with Crystal Cove PMIC -+ inside. -+ -+ This driver can also be built as a module. If so, the module will be -+ called gpio-crystalcove. -+ -+config GPIO_CS5535 -+ tristate "AMD CS5535/CS5536 GPIO support" -+ depends on MFD_CS5535 -+ help -+ The AMD CS5535 and CS5536 southbridges support 28 GPIO pins that -+ can be used for quite a number of things. The CS5535/6 is found on -+ AMD Geode and Lemote Yeeloong devices. -+ -+ If unsure, say N. -+ -+config GPIO_DA9052 -+ tristate "Dialog DA9052 GPIO" -+ depends on PMIC_DA9052 -+ help -+ Say yes here to enable the GPIO driver for the DA9052 chip. -+ -+config GPIO_DA9055 -+ tristate "Dialog Semiconductor DA9055 GPIO" -+ depends on MFD_DA9055 -+ help -+ Say yes here to enable the GPIO driver for the DA9055 chip. -+ -+ The Dialog DA9055 PMIC chip has 3 GPIO pins that can be -+ be controller by this driver. -+ -+ If driver is built as a module it will be called gpio-da9055. -+ -+config GPIO_DLN2 -+ tristate "Diolan DLN2 GPIO support" -+ depends on MFD_DLN2 -+ select GPIOLIB_IRQCHIP -+ -+ help -+ Select this option to enable GPIO driver for the Diolan DLN2 -+ board. -+ -+ This driver can also be built as a module. If so, the module -+ will be called gpio-dln2. -+ -+config GPIO_JANZ_TTL -+ tristate "Janz VMOD-TTL Digital IO Module" -+ depends on MFD_JANZ_CMODIO -+ help -+ This enables support for the Janz VMOD-TTL Digital IO module. -+ This driver provides support for driving the pins in output -+ mode only. Input mode is not supported. -+ -+config GPIO_KEMPLD -+ tristate "Kontron ETX / COMexpress GPIO" -+ depends on MFD_KEMPLD -+ help -+ This enables support for the PLD GPIO interface on some Kontron ETX -+ and COMexpress (ETXexpress) modules. -+ -+ This driver can also be built as a module. If so, the module will be -+ called gpio-kempld. -+ -+config GPIO_LP3943 -+ tristate "TI/National Semiconductor LP3943 GPIO expander" -+ depends on MFD_LP3943 -+ help -+ GPIO driver for LP3943 MFD. -+ LP3943 can be used as a GPIO expander which provides up to 16 GPIOs. -+ Open drain outputs are required for this usage. -+ -+config GPIO_MSIC -+ bool "Intel MSIC mixed signal gpio support" -+ depends on MFD_INTEL_MSIC -+ help -+ Enable support for GPIO on intel MSIC controllers found in -+ intel MID devices -+ -+config GPIO_PALMAS -+ bool "TI PALMAS series PMICs GPIO" -+ depends on MFD_PALMAS -+ help -+ Select this option to enable GPIO driver for the TI PALMAS -+ series chip family. -+ -+config GPIO_RC5T583 -+ bool "RICOH RC5T583 GPIO" -+ depends on MFD_RC5T583 -+ help -+ Select this option to enable GPIO driver for the Ricoh RC5T583 -+ chip family. -+ This driver provides the support for driving/reading the gpio pins -+ of RC5T583 device through standard gpio library. -+ -+config GPIO_STMPE -+ bool "STMPE GPIOs" -+ depends on MFD_STMPE -+ depends on OF_GPIO -+ select GPIOLIB_IRQCHIP -+ help -+ This enables support for the GPIOs found on the STMPE I/O -+ Expanders. -+ -+config GPIO_TC3589X -+ bool "TC3589X GPIOs" -+ depends on MFD_TC3589X -+ depends on OF_GPIO -+ select GPIOLIB_IRQCHIP -+ help -+ This enables support for the GPIOs found on the TC3589X -+ I/O Expander. -+ -+config GPIO_TIMBERDALE -+ bool "Support for timberdale GPIO IP" -+ depends on MFD_TIMBERDALE -+ ---help--- -+ Add support for the GPIO IP in the timberdale FPGA. -+ -+config GPIO_TPS6586X -+ bool "TPS6586X GPIO" -+ depends on MFD_TPS6586X -+ help -+ Select this option to enable GPIO driver for the TPS6586X -+ chip family. -+ -+config GPIO_TPS65910 -+ bool "TPS65910 GPIO" -+ depends on MFD_TPS65910 -+ help -+ Select this option to enable GPIO driver for the TPS65910 -+ chip family. -+ -+config GPIO_TPS65912 -+ tristate "TI TPS65912 GPIO" -+ depends on (MFD_TPS65912_I2C || MFD_TPS65912_SPI) -+ help -+ This driver supports TPS65912 gpio chip -+ -+config GPIO_TWL4030 -+ tristate "TWL4030, TWL5030, and TPS659x0 GPIOs" -+ depends on TWL4030_CORE -+ help -+ Say yes here to access the GPIO signals of various multi-function -+ power management chips from Texas Instruments. -+ -+config GPIO_TWL6040 -+ tristate "TWL6040 GPO" -+ depends on TWL6040_CORE -+ help -+ Say yes here to access the GPO signals of twl6040 -+ audio chip from Texas Instruments. -+ -+config GPIO_UCB1400 -+ tristate "Philips UCB1400 GPIO" -+ depends on UCB1400_CORE -+ help -+ This enables support for the Philips UCB1400 GPIO pins. -+ The UCB1400 is an AC97 audio codec. -+ -+config GPIO_WM831X -+ tristate "WM831x GPIOs" -+ depends on MFD_WM831X -+ help -+ Say yes here to access the GPIO signals of WM831x power management -+ chips from Wolfson Microelectronics. -+ -+config GPIO_WM8350 -+ tristate "WM8350 GPIOs" -+ depends on MFD_WM8350 -+ help -+ Say yes here to access the GPIO signals of WM8350 power management -+ chips from Wolfson Microelectronics. -+ -+config GPIO_WM8994 -+ tristate "WM8994 GPIOs" -+ depends on MFD_WM8994 -+ help -+ Say yes here to access the GPIO signals of WM8994 audio hub -+ CODECs from Wolfson Microelectronics. -+ -+endmenu -+ -+menu "PCI GPIO expanders" -+ depends on PCI -+ -+config GPIO_AMD8111 -+ tristate "AMD 8111 GPIO driver" -+ depends on PCI -+ help -+ The AMD 8111 south bridge contains 32 GPIO pins which can be used. -+ -+ Note, that usually system firmware/ACPI handles GPIO pins on their -+ own and users might easily break their systems with uncarefull usage -+ of this driver! -+ -+ If unsure, say N -+ -+config GPIO_BT8XX -+ tristate "BT8XX GPIO abuser" -+ depends on PCI && VIDEO_BT848=n -+ help -+ The BT8xx frame grabber chip has 24 GPIO pins that can be abused -+ as a cheap PCI GPIO card. -+ -+ This chip can be found on Miro, Hauppauge and STB TV-cards. -+ -+ The card needs to be physically altered for using it as a -+ GPIO card. For more information on how to build a GPIO card -+ from a BT8xx TV card, see the documentation file at -+ Documentation/bt8xxgpio.txt -+ -+ If unsure, say N. -+ -+config GPIO_INTEL_MID -+ bool "Intel Mid GPIO support" -+ depends on PCI && X86 -+ select GPIOLIB_IRQCHIP -+ help -+ Say Y here to support Intel Mid GPIO. -+ -+config GPIO_ML_IOH -+ tristate "OKI SEMICONDUCTOR ML7213 IOH GPIO support" -+ depends on PCI -+ select GENERIC_IRQ_CHIP -+ help -+ ML7213 is companion chip for Intel Atom E6xx series. -+ This driver can be used for OKI SEMICONDUCTOR ML7213 IOH(Input/Output -+ Hub) which is for IVI(In-Vehicle Infotainment) use. -+ This driver can access the IOH's GPIO device. -+ -+config GPIO_PCH -+ tristate "Intel EG20T PCH/LAPIS Semiconductor IOH(ML7223/ML7831) GPIO" -+ depends on PCI && (X86_32 || COMPILE_TEST) -+ select GENERIC_IRQ_CHIP -+ help -+ This driver is for PCH(Platform controller Hub) GPIO of Intel Topcliff -+ which is an IOH(Input/Output Hub) for x86 embedded processor. -+ This driver can access PCH GPIO device. -+ -+ This driver also can be used for LAPIS Semiconductor IOH(Input/ -+ Output Hub), ML7223 and ML7831. -+ ML7223 IOH is for MP(Media Phone) use. -+ ML7831 IOH is for general purpose use. -+ ML7223/ML7831 is companion chip for Intel Atom E6xx series. -+ ML7223/ML7831 is completely compatible for Intel EG20T PCH. -+ -+config GPIO_RDC321X -+ tristate "RDC R-321x GPIO support" -+ depends on PCI -+ select MFD_CORE -+ select MFD_RDC321X -+ help -+ Support for the RDC R321x SoC GPIOs over southbridge -+ PCI configuration space. -+ -+config GPIO_SODAVILLE -+ bool "Intel Sodaville GPIO support" -+ depends on X86 && PCI && OF -+ select GPIO_GENERIC -+ select GENERIC_IRQ_CHIP -+ help -+ Say Y here to support Intel Sodaville GPIO. -+ -+endmenu -+ -+menu "SPI GPIO expanders" -+ depends on SPI_MASTER -+ -+config GPIO_74X164 -+ tristate "74x164 serial-in/parallel-out 8-bits shift register" -+ depends on SPI_MASTER && OF -+ help -+ Driver for 74x164 compatible serial-in/parallel-out 8-outputs -+ shift registers. This driver can be used to provide access -+ to more gpio outputs. -+ -+config GPIO_MAX7301 -+ tristate "Maxim MAX7301 GPIO expander" -+ depends on SPI_MASTER -+ select GPIO_MAX730X -+ help -+ GPIO driver for Maxim MAX7301 SPI-based GPIO expander. -+ -+config GPIO_MCP23S08 -+ tristate "Microchip MCP23xxx I/O expander" -+ depends on (SPI_MASTER && !I2C) || I2C -+ help -+ SPI/I2C driver for Microchip MCP23S08/MCP23S17/MCP23008/MCP23017 -+ I/O expanders. -+ This provides a GPIO interface supporting inputs and outputs. -+ The I2C versions of the chips can be used as interrupt-controller. -+ -+config GPIO_MC33880 -+ tristate "Freescale MC33880 high-side/low-side switch" -+ depends on SPI_MASTER -+ help -+ SPI driver for Freescale MC33880 high-side/low-side switch. -+ This provides GPIO interface supporting inputs and outputs. -+ -+endmenu -+ -+menu "USB GPIO expanders" -+ depends on USB -+ -+config GPIO_VIPERBOARD -+ tristate "Viperboard GPIO a & b support" -+ depends on MFD_VIPERBOARD && USB -+ help -+ Say yes here to access the GPIO signals of Nano River -+ Technologies Viperboard. There are two GPIO chips on the -+ board: gpioa and gpiob. -+ See viperboard API specification and Nano -+ River Tech's viperboard.h for detailed meaning -+ of the module parameters. -+ -+endmenu -+ -+endif -diff -Nur linux-4.1.6.orig/drivers/gpio/Makefile linux-4.1.6/drivers/gpio/Makefile ---- linux-4.1.6.orig/drivers/gpio/Makefile 2015-08-17 05:52:51.000000000 +0200 -+++ linux-4.1.6/drivers/gpio/Makefile 2015-09-16 00:47:15.279630571 +0200 -@@ -42,6 +42,7 @@ - obj-$(CONFIG_GPIO_KEMPLD) += gpio-kempld.o - obj-$(CONFIG_ARCH_KS8695) += gpio-ks8695.o - obj-$(CONFIG_GPIO_INTEL_MID) += gpio-intel-mid.o -+obj-$(CONFIG_GPIO_LATCH) += gpio-latch.o - obj-$(CONFIG_GPIO_LOONGSON) += gpio-loongson.o - obj-$(CONFIG_GPIO_LP3943) += gpio-lp3943.o - obj-$(CONFIG_ARCH_LPC32XX) += gpio-lpc32xx.o -diff -Nur linux-4.1.6.orig/include/linux/platform_data/gpio-latch.h linux-4.1.6/include/linux/platform_data/gpio-latch.h ---- linux-4.1.6.orig/include/linux/platform_data/gpio-latch.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-4.1.6/include/linux/platform_data/gpio-latch.h 2015-09-16 00:48:10.204407551 +0200 -@@ -0,0 +1,14 @@ -+#ifndef _GPIO_LATCH_H_ -+#define _GPIO_LATCH_H_ -+ -+#define GPIO_LATCH_DRIVER_NAME "gpio-latch" -+ -+struct gpio_latch_platform_data { -+ int base; -+ int num_gpios; -+ int *gpios; -+ int le_gpio_index; -+ bool le_active_low; -+}; -+ -+#endif /* _GPIO_LATCH_H_ */ |