diff options
author | Waldemar Brodkorb <wbx@openadk.org> | 2015-10-07 15:24:49 +0200 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2015-10-07 15:24:49 +0200 |
commit | 6d99c6b253a1816d3efc12578deb05222ff3f9f8 (patch) | |
tree | 57967ba66df449f46c8596ab51211814243eb596 /target/mips/mikrotik-rb4xx/patches/4.1.10/0029-gpio-add-gpio-latch-driver.patch | |
parent | b257e92d9739461ced004bc565ea7ee5a9738899 (diff) |
bump linux kernels
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, 1261 insertions, 0 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 new file mode 100644 index 000000000..ade756fa9 --- /dev/null +++ b/target/mips/mikrotik-rb4xx/patches/4.1.10/0029-gpio-add-gpio-latch-driver.patch @@ -0,0 +1,1261 @@ +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_ */ |