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
...
This commit is contained in:
@@ -27,7 +27,7 @@
|
||||
*/
|
||||
|
||||
#ifndef ARCH_NR_GPIOS
|
||||
#define ARCH_NR_GPIOS 256
|
||||
#define ARCH_NR_GPIOS 512
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
@@ -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 */
|
||||
|
||||
32
include/linux/platform_data/gpio-dwapb.h
Normal file
32
include/linux/platform_data/gpio-dwapb.h
Normal file
@@ -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
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user