1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261 |
- 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_ */
|