diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-10-09 14:58:15 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-10-09 14:58:15 -0400 |
| commit | ea584595fc85e65796335033dfca25ed655cd0ed (patch) | |
| tree | 79d444c507472f6c66d887ad332e7c1784eeb4de /include/linux | |
| parent | 782d59c5dfc5ac39ac8cfb4c6dd40597938dde9c (diff) | |
| parent | a092e19b688be88f7329bd05f90cb92ebe1a4f5b (diff) | |
Merge tag 'gpio-v3.18-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio
Pull GPIO changes from Linus Walleij:
"This is the bulk of GPIO changes for the v3.18 development cycle:
- Increase the default ARCH_NR_GPIO from 256 to 512. This was done
to avoid having a custom <asm/gpio.h> header for the x86
architecture - GPIO is custom and complicated enough as it is
already! We want to move to a radix to store the descriptors going
forward, and finally get rid of this fixed array size altogether.
- Endgame patching of the gpio_remove() semantics initiated by
Abdoulaye Berthe. It is not accepted by the system that the
removal of a GPIO chip fails during eg reboot or shutdown, and
therefore the return value has now painfully been refactored away.
For special cases like GPIO expanders on a hot-pluggable bus like
USB, we may later add some gpiochip_try_remove() call, but for the
cases we have now, return values are moot.
- Some incremental refactoring of the gpiolib core and ACPI GPIO
library for more descriptor usage.
- Refactor the chained IRQ handler set-up method to handle also
threaded, nested interrupts and set up the parent IRQ correctly.
Switch STMPE and TC3589x drivers to use this registration method.
- Add a .irq_not_threaded flag to the struct gpio_chip, so that also
GPIO expanders that block but are still not using threaded IRQ
handlers.
- New drivers for the ARM64 X-Gene SoC GPIO controller.
- The syscon GPIO driver has been improved to handle the "DSP GPIO"
found on the TI Keystone 2 SoC:s.
- ADNP driver switched to use gpiolib irqchip helpers.
- Refactor the DWAPB driver to support being instantiated from and
MFD cell (platform device).
- Incremental feature improvement in the Zynq, MCP23S08, DWAPB, OMAP,
Xilinx and Crystalcove drivers.
- Various minor fixes"
* tag 'gpio-v3.18-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio: (52 commits)
gpio: pch: Build context save/restore only for PM
pinctrl: abx500: get rid of unused variable
gpio: ks8695: fix 'else should follow close brace '}''
gpio: stmpe: add verbose debug code
gpio: stmpe: fix up interrupt enable logic
gpio: staticize xway_stp_init()
gpio: handle also nested irqchips in the chained handler set-up
gpio: set parent irq on chained handlers
gpiolib: irqchip: use irq_find_mapping while removing irqchip
gpio: crystalcove: support virtual GPIO
pinctrl: bcm281xx: make Kconfig dependency more strict
gpio: kona: enable only on BCM_MOBILE or for compile testing
gpio, bcm-kona, LLVMLinux: Remove use of __initconst
gpio: Fix ngpio in gpio-xilinx driver
gpio: dwapb: fix pointer to integer cast
gpio: xgene: Remove unneeded #ifdef CONFIG_OF guard
gpio: xgene: Remove unneeded forward declation for struct xgene_gpio
gpio: xgene: Fix missing spin_lock_init()
gpio: ks8695: fix switch case indentation
gpiolib: add irq_not_threaded flag to gpio_chip
...
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/gpio/driver.h | 8 | ||||
| -rw-r--r-- | include/linux/platform_data/gpio-dwapb.h | 32 | ||||
| -rw-r--r-- | include/linux/spi/mcp23s08.h | 18 |
3 files changed, 56 insertions, 2 deletions
diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h index c5e41da20112..249db3057e4d 100644 --- a/include/linux/gpio/driver.h +++ b/include/linux/gpio/driver.h | |||
| @@ -56,6 +56,8 @@ struct seq_file; | |||
| 56 | * as the chip access may sleep when e.g. reading out the IRQ status | 56 | * as the chip access may sleep when e.g. reading out the IRQ status |
| 57 | * registers. | 57 | * registers. |
| 58 | * @exported: flags if the gpiochip is exported for use from sysfs. Private. | 58 | * @exported: flags if the gpiochip is exported for use from sysfs. Private. |
| 59 | * @irq_not_threaded: flag must be set if @can_sleep is set but the | ||
| 60 | * IRQs don't need to be threaded | ||
| 59 | * | 61 | * |
| 60 | * A gpio_chip can help platforms abstract various sources of GPIOs so | 62 | * A gpio_chip can help platforms abstract various sources of GPIOs so |
| 61 | * they can all be accessed through a common programing interface. | 63 | * they can all be accessed through a common programing interface. |
| @@ -101,6 +103,7 @@ struct gpio_chip { | |||
| 101 | struct gpio_desc *desc; | 103 | struct gpio_desc *desc; |
| 102 | const char *const *names; | 104 | const char *const *names; |
| 103 | bool can_sleep; | 105 | bool can_sleep; |
| 106 | bool irq_not_threaded; | ||
| 104 | bool exported; | 107 | bool exported; |
| 105 | 108 | ||
| 106 | #ifdef CONFIG_GPIOLIB_IRQCHIP | 109 | #ifdef CONFIG_GPIOLIB_IRQCHIP |
| @@ -141,7 +144,7 @@ extern const char *gpiochip_is_requested(struct gpio_chip *chip, | |||
| 141 | 144 | ||
| 142 | /* add/remove chips */ | 145 | /* add/remove chips */ |
| 143 | extern int gpiochip_add(struct gpio_chip *chip); | 146 | extern int gpiochip_add(struct gpio_chip *chip); |
| 144 | extern int gpiochip_remove(struct gpio_chip *chip); | 147 | extern void gpiochip_remove(struct gpio_chip *chip); |
| 145 | extern struct gpio_chip *gpiochip_find(void *data, | 148 | extern struct gpio_chip *gpiochip_find(void *data, |
| 146 | int (*match)(struct gpio_chip *chip, void *data)); | 149 | int (*match)(struct gpio_chip *chip, void *data)); |
| 147 | 150 | ||
| @@ -166,7 +169,8 @@ int gpiochip_irqchip_add(struct gpio_chip *gpiochip, | |||
| 166 | 169 | ||
| 167 | #endif /* CONFIG_GPIOLIB_IRQCHIP */ | 170 | #endif /* CONFIG_GPIOLIB_IRQCHIP */ |
| 168 | 171 | ||
| 169 | int gpiochip_request_own_desc(struct gpio_desc *desc, const char *label); | 172 | struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *chip, u16 hwnum, |
| 173 | const char *label); | ||
| 170 | void gpiochip_free_own_desc(struct gpio_desc *desc); | 174 | void gpiochip_free_own_desc(struct gpio_desc *desc); |
| 171 | 175 | ||
| 172 | #else /* CONFIG_GPIOLIB */ | 176 | #else /* CONFIG_GPIOLIB */ |
diff --git a/include/linux/platform_data/gpio-dwapb.h b/include/linux/platform_data/gpio-dwapb.h new file mode 100644 index 000000000000..28702c849af1 --- /dev/null +++ b/include/linux/platform_data/gpio-dwapb.h | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | /* | ||
| 2 | * Copyright(c) 2014 Intel Corporation. | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify it | ||
| 5 | * under the terms and conditions of the GNU General Public License, | ||
| 6 | * version 2, as published by the Free Software Foundation. | ||
| 7 | * | ||
| 8 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
| 9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 11 | * more details. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef GPIO_DW_APB_H | ||
| 15 | #define GPIO_DW_APB_H | ||
| 16 | |||
| 17 | struct dwapb_port_property { | ||
| 18 | struct device_node *node; | ||
| 19 | const char *name; | ||
| 20 | unsigned int idx; | ||
| 21 | unsigned int ngpio; | ||
| 22 | unsigned int gpio_base; | ||
| 23 | unsigned int irq; | ||
| 24 | bool irq_shared; | ||
| 25 | }; | ||
| 26 | |||
| 27 | struct dwapb_platform_data { | ||
| 28 | struct dwapb_port_property *properties; | ||
| 29 | unsigned int nports; | ||
| 30 | }; | ||
| 31 | |||
| 32 | #endif | ||
diff --git a/include/linux/spi/mcp23s08.h b/include/linux/spi/mcp23s08.h index 2d676d5aaa89..aa07d7b32568 100644 --- a/include/linux/spi/mcp23s08.h +++ b/include/linux/spi/mcp23s08.h | |||
| @@ -22,4 +22,22 @@ struct mcp23s08_platform_data { | |||
| 22 | * base to base+15 (or base+31 for s17 variant). | 22 | * base to base+15 (or base+31 for s17 variant). |
| 23 | */ | 23 | */ |
| 24 | unsigned base; | 24 | unsigned base; |
| 25 | /* Marks the device as a interrupt controller. | ||
| 26 | * NOTE: The interrupt functionality is only supported for i2c | ||
| 27 | * versions of the chips. The spi chips can also do the interrupts, | ||
| 28 | * but this is not supported by the linux driver yet. | ||
| 29 | */ | ||
| 30 | bool irq_controller; | ||
| 31 | |||
| 32 | /* Sets the mirror flag in the IOCON register. Devices | ||
| 33 | * with two interrupt outputs (these are the devices ending with 17 and | ||
| 34 | * those that have 16 IOs) have two IO banks: IO 0-7 form bank 1 and | ||
| 35 | * IO 8-15 are bank 2. These chips have two different interrupt outputs: | ||
| 36 | * One for bank 1 and another for bank 2. If irq-mirror is set, both | ||
| 37 | * interrupts are generated regardless of the bank that an input change | ||
| 38 | * occurred on. If it is not set, the interrupt are only generated for | ||
| 39 | * the bank they belong to. | ||
| 40 | * On devices with only one interrupt output this property is useless. | ||
| 41 | */ | ||
| 42 | bool mirror; | ||
| 25 | }; | 43 | }; |
