[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4fb5db50911170345m687ea1fcmff1444250d341240@mail.gmail.com>
Date: Tue, 17 Nov 2009 17:15:49 +0530
From: Janakiram Sistla <janakiram.sistla@...il.com>
To: Rodolfo Giometti <giometti@...ux.it>
Cc: linux-kernel@...r.kernel.org,
Haavard Skinnemoen <hskinnemoen@...el.com>,
raffaele.recalcati@...cino.it
Subject: Re: [PATCH] gpio: show IRQ settings even if GPIO direction is
"output"
On Tue, Nov 17, 2009 at 5:01 PM, Rodolfo Giometti <giometti@...ux.it> wrote:
> Some architectures (as PXA 27x for example) may define GPIO IRQ lines
> as outputs since internal circuitry supports such configuration.
>
> This patch simply detects if a GPIO is a IRQ line or not just looking
> for IRQ line number, "desc" and "desc->action" fields.
>
> Signed-off-by: Rodolfo Giometti <giometti@...ux.it>
> Cc: raffaele.recalcati@...cino.it
> ---
> drivers/gpio/gpiolib.c | 82 ++++++++++++++++++++++++------------------------
> 1 files changed, 41 insertions(+), 41 deletions(-)
>
> diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
> index 50de0f5..298b66f 100644
> --- a/drivers/gpio/gpiolib.c
> +++ b/drivers/gpio/gpiolib.c
> @@ -1381,6 +1381,8 @@ static void gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip)
> unsigned gpio = chip->base;
> struct gpio_desc *gdesc = &gpio_desc[gpio];
> int is_out;
> + int irq;
> + struct irq_desc *desc;
>
> for (i = 0; i < chip->ngpio; i++, gpio++, gdesc++) {
> if (!test_bit(FLAG_REQUESTED, &gdesc->flags))
> @@ -1394,48 +1396,46 @@ static void gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip)
> ? (chip->get(chip, i) ? "hi" : "lo")
> : "? ");
>
> - if (!is_out) {
> - int irq = gpio_to_irq(gpio);
> - struct irq_desc *desc = irq_to_desc(irq);
> -
> - /* This races with request_irq(), set_irq_type(),
> - * and set_irq_wake() ... but those are "rare".
> - *
> - * More significantly, trigger type flags aren't
> - * currently maintained by genirq.
> - */
> - if (irq >= 0 && desc->action) {
> - char *trigger;
> -
> - switch (desc->status & IRQ_TYPE_SENSE_MASK) {
> - case IRQ_TYPE_NONE:
> - trigger = "(default)";
> - break;
> - case IRQ_TYPE_EDGE_FALLING:
> - trigger = "edge-falling";
> - break;
> - case IRQ_TYPE_EDGE_RISING:
> - trigger = "edge-rising";
> - break;
> - case IRQ_TYPE_EDGE_BOTH:
> - trigger = "edge-both";
> - break;
> - case IRQ_TYPE_LEVEL_HIGH:
> - trigger = "level-high";
> - break;
> - case IRQ_TYPE_LEVEL_LOW:
> - trigger = "level-low";
> - break;
> - default:
> - trigger = "?trigger?";
> - break;
> - }
> -
> - seq_printf(s, " irq-%d %s%s",
> - irq, trigger,
> - (desc->status & IRQ_WAKEUP)
> - ? " wakeup" : "");
> + irq = gpio_to_irq(gpio);
> + desc = irq_to_desc(irq);
> +
> + /* This races with request_irq(), set_irq_type(),
> + * and set_irq_wake() ... but those are "rare".
> + *
> + * More significantly, trigger type flags aren't
> + * currently maintained by genirq.
> + */
> + if (irq >= 0 && desc && desc->action) {
> + char *trigger;
> +
> + switch (desc->status & IRQ_TYPE_SENSE_MASK) {
> + case IRQ_TYPE_NONE:
> + trigger = "(default)";
> + break;
> + case IRQ_TYPE_EDGE_FALLING:
> + trigger = "edge-falling";
> + break;
> + case IRQ_TYPE_EDGE_RISING:
> + trigger = "edge-rising";
> + break;
> + case IRQ_TYPE_EDGE_BOTH:
> + trigger = "edge-both";
> + break;
> + case IRQ_TYPE_LEVEL_HIGH:
> + trigger = "level-high";
> + break;
> + case IRQ_TYPE_LEVEL_LOW:
> + trigger = "level-low";
> + break;
> + default:
> + trigger = "?trigger?";
> + break;
> }
> +
> + seq_printf(s, " irq-%d %s%s",
> + irq, trigger,
> + (desc->status & IRQ_WAKEUP)
> + ? " wakeup" : "");
> }
>
> seq_printf(s, "\n");
> --
> 1.6.3.3
Is there any valid test scenario that makes use of this
patch???Detecting GPIO if it is IRQ in kernel what is the advantage?
Regards,
Ram.
Powered by blists - more mailing lists