On Tue, 18 Mar 2014, Linus Walleij wrote:
> This switches all GPIO and pin control drivers with irqchips
> that were using .startup() and .shutdown() callbacks to lock
> GPIO lines for IRQ usage over to using the .request_resources()
> and .release_resources() callbacks just introduced into the
> irqchip vtable.
>
> Cc: Thomas Gleixner <[email protected]>
> Cc: Jean-Jacques Hiblot <[email protected]>
> Signed-off-by: Linus Walleij <[email protected]>
> ---
> ChangeLog v1->v2:
> - Fix signedness of some callbacks.
> ---
> drivers/gpio/gpio-adnp.c | 15 +++++++--------
> drivers/gpio/gpio-bcm-kona.c | 14 +++++++-------
> drivers/gpio/gpio-dwapb.c | 16 ++++++++--------
> drivers/gpio/gpio-em.c | 14 +++++++-------
> drivers/gpio/gpio-intel-mid.c | 14 +++++++-------
> drivers/gpio/gpio-lynxpoint.c | 14 +++++++-------
> drivers/gpio/gpio-mcp23s08.c | 14 +++++++-------
> drivers/gpio/gpio-pl061.c | 14 +++++++-------
> drivers/pinctrl/pinctrl-adi2.c | 1 +
> drivers/pinctrl/pinctrl-baytrail.c | 14 +++++++-------
> drivers/pinctrl/pinctrl-msm.c | 11 +++++------
> drivers/pinctrl/pinctrl-nomadik.c | 25 +++++++++++++++++++++----
> drivers/pinctrl/sirf/pinctrl-sirf.c | 14 +++++++-------
> 13 files changed, 98 insertions(+), 82 deletions(-)
>
> diff --git a/drivers/gpio/gpio-adnp.c b/drivers/gpio/gpio-adnp.c
> index 6fc6206b38bd..b2239d678d01 100644
> --- a/drivers/gpio/gpio-adnp.c
> +++ b/drivers/gpio/gpio-adnp.c
> @@ -408,24 +408,23 @@ static void adnp_irq_bus_unlock(struct irq_data *data)
> mutex_unlock(&adnp->irq_lock);
> }
>
> -static unsigned int adnp_irq_startup(struct irq_data *data)
> +static int adnp_irq_reqres(struct irq_data *data)
> {
> struct adnp *adnp = irq_data_get_irq_chip_data(data);
>
> - if (gpio_lock_as_irq(&adnp->gpio, data->hwirq))
> + if (gpio_lock_as_irq(&adnp->gpio, data->hwirq)) {
So you need a per chip function because all chips have their own
private data struct in irq_chip_data. Sigh.
It'd be nice if we'd have gpio in the data, so you could have a
generic function which does the right thing.
In principle it'd be simple.
struct gpio *gpio = irq_data_get_irq_chip_data(data);
struct adnp *adnp = container_of(gpio, struct adnp, gpio);
Ditto for all other drivers. But that requires a major overhaul.
I wonder if it'd be worth to add another pointer to irq_data for such
purposes.
Thoughts?
Thanks,
tglx
--
To unsubscribe from this list: send the line "unsubscribe linux-gpio" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html