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 | |
| 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')
| -rw-r--r-- | include/asm-generic/gpio.h | 2 | ||||
| -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 | 
4 files changed, 57 insertions, 3 deletions
diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h index c1d4105e1c1d..383ade1a211b 100644 --- a/include/asm-generic/gpio.h +++ b/include/asm-generic/gpio.h @@ -27,7 +27,7 @@   */  #ifndef ARCH_NR_GPIOS -#define ARCH_NR_GPIOS		256 +#define ARCH_NR_GPIOS		512  #endif  /* 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;   *	as the chip access may sleep when e.g. reading out the IRQ status   *	registers.   * @exported: flags if the gpiochip is exported for use from sysfs. Private. + * @irq_not_threaded: flag must be set if @can_sleep is set but the + *	IRQs don't need to be threaded   *   * A gpio_chip can help platforms abstract various sources of GPIOs so   * they can all be accessed through a common programing interface. @@ -101,6 +103,7 @@ struct gpio_chip {  	struct gpio_desc	*desc;  	const char		*const *names;  	bool			can_sleep; +	bool			irq_not_threaded;  	bool			exported;  #ifdef CONFIG_GPIOLIB_IRQCHIP @@ -141,7 +144,7 @@ extern const char *gpiochip_is_requested(struct gpio_chip *chip,  /* add/remove chips */  extern int gpiochip_add(struct gpio_chip *chip); -extern int gpiochip_remove(struct gpio_chip *chip); +extern void gpiochip_remove(struct gpio_chip *chip);  extern struct gpio_chip *gpiochip_find(void *data,  			      int (*match)(struct gpio_chip *chip, void *data)); @@ -166,7 +169,8 @@ int gpiochip_irqchip_add(struct gpio_chip *gpiochip,  #endif /* CONFIG_GPIOLIB_IRQCHIP */ -int gpiochip_request_own_desc(struct gpio_desc *desc, const char *label); +struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *chip, u16 hwnum, +					    const char *label);  void gpiochip_free_own_desc(struct gpio_desc *desc);  #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 @@ +/* + * Copyright(c) 2014 Intel Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for + * more details. + */ + +#ifndef GPIO_DW_APB_H +#define GPIO_DW_APB_H + +struct dwapb_port_property { +	struct device_node *node; +	const char	*name; +	unsigned int	idx; +	unsigned int	ngpio; +	unsigned int	gpio_base; +	unsigned int	irq; +	bool		irq_shared; +}; + +struct dwapb_platform_data { +	struct dwapb_port_property *properties; +	unsigned int nports; +}; + +#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 {  	 * base to base+15 (or base+31 for s17 variant).  	 */  	unsigned	base; +	/* Marks the device as a interrupt controller. +	 * NOTE: The interrupt functionality is only supported for i2c +	 * versions of the chips. The spi chips can also do the interrupts, +	 * but this is not supported by the linux driver yet. +	 */ +	bool		irq_controller; + +	/* Sets the mirror flag in the IOCON register. Devices +	 * with two interrupt outputs (these are the devices ending with 17 and +	 * those that have 16 IOs) have two IO banks: IO 0-7 form bank 1 and +	 * IO 8-15 are bank 2. These chips have two different interrupt outputs: +	 * One for bank 1 and another for bank 2. If irq-mirror is set, both +	 * interrupts are generated regardless of the bank that an input change +	 * occurred on. If it is not set, the interrupt are only generated for +	 * the bank they belong to. +	 * On devices with only one interrupt output this property is useless. +	 */ +	bool		mirror;  };  | 
