Message ID | 1377859713-13460-2-git-send-email-george.cherian@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi > Remove the request_irq and use devm_request_threaded_irq > also cleanup free_irq. devm_* takes care of that. > > Signed-off-by: George Cherian <george.cherian@ti.com> > --- > arch/arm/boot/dts/dra7-evm.dts | 2 +- > drivers/gpio/gpio-pcf857x.c | 28 ++++++++++++++++++++++++---- > 2 files changed, 25 insertions(+), 5 deletions(-) > > diff --git a/arch/arm/boot/dts/dra7-evm.dts b/arch/arm/boot/dts/dra7-evm.dts > index 8b0738a..39b44bc 100644 > --- a/arch/arm/boot/dts/dra7-evm.dts > +++ b/arch/arm/boot/dts/dra7-evm.dts > @@ -65,7 +65,7 @@ > n_latch = <0x1408>; > gpio-controller; > #gpio-cells = <2>; > - interrupt-parent = <&pcf_20>; > + interrupt-parent = <&gpio20>; > interrupts = <14 2>; > interrupt-controller; > #interrupt-cells = <2>; I'm not sure detail, but does above "exchange interrupt-parent" and "using devm_request_threaded_irq()" have any relationship ? Separate patch seems nice ? Best regards --- Kuninori Morimoto -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 9/2/2013 6:50 AM, Kuninori Morimoto wrote: > Hi > >> Remove the request_irq and use devm_request_threaded_irq >> also cleanup free_irq. devm_* takes care of that. >> >> Signed-off-by: George Cherian <george.cherian@ti.com> >> --- >> arch/arm/boot/dts/dra7-evm.dts | 2 +- >> drivers/gpio/gpio-pcf857x.c | 28 ++++++++++++++++++++++++---- >> 2 files changed, 25 insertions(+), 5 deletions(-) >> >> diff --git a/arch/arm/boot/dts/dra7-evm.dts b/arch/arm/boot/dts/dra7-evm.dts >> index 8b0738a..39b44bc 100644 >> --- a/arch/arm/boot/dts/dra7-evm.dts >> +++ b/arch/arm/boot/dts/dra7-evm.dts >> @@ -65,7 +65,7 @@ >> n_latch = <0x1408>; >> gpio-controller; >> #gpio-cells = <2>; >> - interrupt-parent = <&pcf_20>; >> + interrupt-parent = <&gpio20>; >> interrupts = <14 2>; >> interrupt-controller; >> #interrupt-cells = <2>; > I'm not sure detail, > but does above "exchange interrupt-parent" and "using devm_request_threaded_irq()" > have any relationship ? Exactly. will resend this change alone. > Separate patch seems nice ? okay > Best regards > --- > Kuninori Morimoto
diff --git a/arch/arm/boot/dts/dra7-evm.dts b/arch/arm/boot/dts/dra7-evm.dts index 8b0738a..39b44bc 100644 --- a/arch/arm/boot/dts/dra7-evm.dts +++ b/arch/arm/boot/dts/dra7-evm.dts @@ -65,7 +65,7 @@ n_latch = <0x1408>; gpio-controller; #gpio-cells = <2>; - interrupt-parent = <&pcf_20>; + interrupt-parent = <&gpio20>; interrupts = <14 2>; interrupt-controller; #interrupt-cells = <2>; diff --git a/drivers/gpio/gpio-pcf857x.c b/drivers/gpio/gpio-pcf857x.c index 947cff4..4d0d28c 100644 --- a/drivers/gpio/gpio-pcf857x.c +++ b/drivers/gpio/gpio-pcf857x.c @@ -191,6 +191,25 @@ static int pcf857x_to_irq(struct gpio_chip *chip, unsigned offset) return irq_create_mapping(gpio->irq_domain, offset); } +static irqreturn_t pcf857x_irq(int irq, void *data) +{ + struct pcf857x *gpio = data; + unsigned long change, i, status, flags; + + status = gpio->read(gpio->client); + + spin_lock_irqsave(&gpio->slock, flags); + + change = gpio->status ^ status; + for_each_set_bit(i, &change, gpio->chip.ngpio) + generic_handle_irq(irq_find_mapping(gpio->irq_domain, i)); + gpio->status = status; + + spin_unlock_irqrestore(&gpio->slock, flags); + + return IRQ_HANDLED; +} + static void pcf857x_irq_demux_work(struct work_struct *work) { struct pcf857x *gpio = container_of(work, @@ -241,8 +260,6 @@ static void pcf857x_irq_domain_cleanup(struct pcf857x *gpio) if (gpio->irq_domain) irq_domain_remove(gpio->irq_domain); - if (gpio->irq) - free_irq(gpio->irq, gpio); } static int pcf857x_irq_domain_init(struct pcf857x *gpio, @@ -258,8 +275,11 @@ static int pcf857x_irq_domain_init(struct pcf857x *gpio, goto fail; /* enable real irq */ - status = request_irq(client->irq, pcf857x_irq_demux, 0, - dev_name(&client->dev), gpio); + status = devm_request_threaded_irq(&client->dev, client->irq, + NULL, pcf857x_irq, IRQF_ONESHOT | + IRQF_TRIGGER_FALLING, + dev_name(&client->dev), gpio); + if (status) goto fail;
Remove the request_irq and use devm_request_threaded_irq also cleanup free_irq. devm_* takes care of that. Signed-off-by: George Cherian <george.cherian@ti.com> --- arch/arm/boot/dts/dra7-evm.dts | 2 +- drivers/gpio/gpio-pcf857x.c | 28 ++++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-)