linux-omap.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jon Hunter <jon-hunter@ti.com>
To: Stephen Warren <swarren@wwwdotorg.org>
Cc: Linus Walleij <linus.walleij@linaro.org>,
	Javier Martinez Canillas <martinez.javier@gmail.com>,
	Grant Likely <grant.likely@secretlab.ca>,
	Alexandre Courbot <acourbot@nvidia.com>,
	Stephen Warren <swarren@nvidia.com>,
	Kevin Hilman <khilman@deeprootsystems.com>,
	"devicetree-discuss@lists.ozlabs.org"
	<devicetree-discuss@lists.ozlabs.org>,
	"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH 3/5] gpio/omap: Add DT support to GPIO driver
Date: Mon, 15 Apr 2013 16:40:22 -0500	[thread overview]
Message-ID: <516C73C6.5050409@ti.com> (raw)
In-Reply-To: <516C31C3.9040505@wwwdotorg.org>


On 04/15/2013 11:58 AM, Stephen Warren wrote:
> On 04/14/2013 02:53 PM, Linus Walleij wrote:
>> On Sun, Apr 14, 2013 at 3:35 AM, Javier Martinez Canillas
>> <martinez.javier@gmail.com> wrote:
>>
>>> Is the following inlined patch [1] what you were thinking that would
>>> be the right approach?
>>
>> This looks sort of OK, but I'm still struggling with the question of
>> what we could do to help other implementations facing the same issue.
>>
>> This is a pretty hard design pattern to properly replicate in every such
>> driver is it not?
> 
> Well, instead of adding .request_irq() to the irqchip, and then making
> each driver call gpio_request() from the implementation, perhaps you
> could add a .irq_to_gpio() to the irqchip, have the IRQ core call that,
> and if it gets back a non-error response, the IRQ core could call
> gpio_request(). That means that the change to each GPIO+IRQ driver is
> simply to implement a standalone data transformation function
> .irq_to_gpio().

I am still concerned about the case where a driver may have already
called gpio_request() and then calls request_irq(). I think that the
solution needs to handle cases where the driver may or may not call
gpio_request() to allocate the gpio.

Although it could be argued that this is problem is not DT specific,
it does become a bigger problem to handle in the case of DT. Therefore,
I am wondering if we should just focus on the DT case for now. 

> Now, this does re-introduce irq_to_gpio() in some way, but with the
> following advantages:
> 
> 1) The implementation is per-controller, not a single global function,
> so isn't introducing any kind of centralized mapping scheme again.
> 
> 2) This irq-chip-specific .irq_to_gpio() would only be implemented for
> IRQ+GPIO chips that actually have a 1:1 mapping between GPIOs and IRQs.
> Its potential existence doesn't imply that all IRQ chips need implement
> this; it would be very specifically be for this one particular case.
> 
> So, I think it's reasonable to introduce this.

How about using the gpio irq domain xlate function?

Typically, in DT land a device using a gpio as an interrupt source
will have something like the following ...

eth@0 {
	compatible = "ks8851";
	...
	interrupt-parent = <&gpio2>;
	interrupts = <2 8>; /* gpio line 34, low triggered */
};

... or ...

mmc {
	label = "pandaboard::status2";
 	gpios = <&gpio1 8 0>;
	...
};

Both these devices are using a gpio as an interrupt source, but the mmc
driver is requesting the gpio directly. In the first case the xlate
function for the gpio irq domain will be called where as it is not used
in the 2nd case. Therefore, we could add a custom xlate function. For
example ...

diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
index 53bb8d5..caaeab2 100644
--- a/drivers/gpio/gpio-omap.c
+++ b/drivers/gpio/gpio-omap.c
@@ -1085,6 +1085,33 @@ static void omap_gpio_chip_init(struct gpio_bank *bank)
        irq_set_handler_data(bank->irq, bank);
 }
 
+
+int omap_irq_domain_xlate(struct irq_domain *d, struct device_node *ctrlr,
+                         const u32 *intspec, unsigned int intsize,
+                         unsigned long *out_hwirq, unsigned int *out_type)
+{
+       struct gpio_bank *bank;
+       int irq;
+
+       if (WARN_ON(intsize < 1))
+               return -EINVAL;
+
+       irq = irq_find_mapping(d, intspec[0]);
+       bank = irq_get_chip_data(irq);
+       if (!bank)
+               return -ENODEV;
+
+       gpio_request_one(irq_to_gpio(bank, intspec[0]), GPIOF_IN, ctrlr->name);
+
+       *out_hwirq = intspec[0];
+       *out_type = (intsize > 1) ? intspec[1] : IRQ_TYPE_NONE;
+       return 0;
+}
+
+static const struct irq_domain_ops omap_irq_domain_ops = {
+       .xlate = omap_irq_domain_xlate,
+};
+
 static const struct of_device_id omap_gpio_match[];
 static void omap_gpio_setup_context(struct gpio_bank *p);
 
@@ -1135,7 +1162,7 @@ static int omap_gpio_probe(struct platform_device *pdev)
 
 
        bank->domain = irq_domain_add_linear(node, bank->width,
-                                            &irq_domain_simple_ops, NULL);
+                                            &omap_irq_domain_ops, NULL);
        if (!bank->domain)
                return -ENODEV;
 
Cheers
Jon
 

  reply	other threads:[~2013-04-15 21:40 UTC|newest]

Thread overview: 95+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-15 16:04 [PATCH 0/5] gpio/omap: Cleanup and adaptation to Device Tree Benoit Cousson
2012-02-15 16:04 ` [PATCH 1/5] gpio/omap: Remove bank->id information and misc cleanup Benoit Cousson
2012-02-16  5:53   ` DebBarma, Tarun Kanti
2012-02-16  9:33     ` Cousson, Benoit
2012-02-15 16:04 ` [PATCH 2/5] gpio/omap: Use devm_ API and add request_mem_region Benoit Cousson
2012-02-16  5:41   ` DebBarma, Tarun Kanti
2012-02-16  6:35     ` Grant Likely
2012-02-16  7:11       ` DebBarma, Tarun Kanti
2012-02-16  6:37     ` Shubhrajyoti
2012-02-16  8:56       ` Cousson, Benoit
2012-02-15 16:04 ` [PATCH 3/5] gpio/omap: Add DT support to GPIO driver Benoit Cousson
2012-02-22 14:23   ` Rob Herring
2012-02-22 14:31     ` Cousson, Benoit
2012-02-22 17:23       ` Rob Herring
2012-02-22 18:29         ` Stephen Warren
2012-02-24 15:30           ` Cousson, Benoit
2013-02-26 10:01             ` Javier Martinez Canillas
2013-02-26 16:33               ` Stephen Warren
2013-02-26 22:40               ` Jon Hunter
2013-02-26 22:44                 ` Stephen Warren
2013-02-26 23:01                   ` Jon Hunter
2013-02-26 23:06                     ` Stephen Warren
2013-02-26 23:45                       ` Jon Hunter
2013-02-27  0:13                         ` Stephen Warren
2013-02-27  1:07                           ` Jon Hunter
2013-02-27  3:57                             ` Javier Martinez Canillas
2013-02-27 17:50                               ` Stephen Warren
2013-02-27 20:05                                 ` Javier Martinez Canillas
2013-02-27 23:16                               ` Jon Hunter
2013-02-28 12:17                                 ` Javier Martinez Canillas
2013-02-28 20:49                                   ` Jon Hunter
     [not found]                     ` <512D3EC2.6050408-l0cyMroinI0@public.gmane.org>
2013-03-02 20:05                       ` Grant Likely
2013-03-07 23:14                         ` Jon Hunter
2013-03-15 11:21                           ` Javier Martinez Canillas
2013-03-22  8:10                             ` Linus Walleij
2013-03-22 15:33                               ` Stephen Warren
2013-03-22 22:52                                 ` Jon Hunter
2013-03-27 13:52                                   ` Linus Walleij
2013-03-27 16:09                                     ` Stephen Warren
2013-03-27 20:55                                       ` Linus Walleij
2013-03-29 17:01                                         ` Stephen Warren
2013-04-10 18:12                                           ` Linus Walleij
2013-04-10 20:29                                             ` Stephen Warren
2013-04-10 21:28                                               ` Linus Walleij
2013-04-11 20:30                                                 ` Stephen Warren
2013-04-11 22:16                                                   ` Linus Walleij
2013-04-11 22:47                                                     ` Stephen Warren
2013-04-14  1:35                                                       ` Javier Martinez Canillas
2013-04-14 20:53                                                         ` Linus Walleij
2013-04-15 11:25                                                           ` Javier Martinez Canillas
2013-04-15 16:58                                                           ` Stephen Warren
     [not found]                                                             ` <516C73C6.5050409@ti.co m>
2013-04-15 21:40                                                             ` Jon Hunter [this message]
2013-04-15 21:44                                                               ` Jon Hunter
2013-04-15 22:16                                                               ` Stephen Warren
2013-04-15 23:04                                                                 ` Jon Hunter
2013-04-16 18:40                                                                   ` Stephen Warren
2013-04-16 19:27                                                                     ` Jon Hunter
2013-04-16 21:57                                                                       ` Jon Hunter
2013-04-16 22:11                                                                       ` Stephen Warren
2013-04-16 23:14                                                                         ` Jon Hunter
2013-04-17  0:41                                                                           ` Javier Martinez Canillas
2013-04-17  2:00                                                                             ` Jon Hunter
2013-04-17  7:55                                                                               ` Javier Martinez Canillas
     [not found]                                                                                 ` <CAAwP0s2M2pnSydyDvh_rejFO=w8bCo4WE5PkxrYuk0HQDixc-Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-04-17 13:25                                                                                   ` Jon Hunter
2013-04-17 13:42                                                                                     ` Javier Martinez Canillas
     [not found]                                                                                       ` <CAAwP0s2DsJAWuXWvPAkzCT0T0AG_OvMEw2sADW6LqSi1Ofd_Zw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-04-17 13:52                                                                                         ` Jon Hunter
2013-04-17 14:21                                                                                           ` Javier Martinez Canillas
2013-04-17 16:18                                                                                           ` Javier Martinez Canillas
2013-04-26  7:31                                                                             ` Linus Walleij
2013-04-26 21:31                                                                               ` Jon Hunter
2013-06-11 21:25                                                                                 ` Grant Likely
2013-06-12  9:43                                                                                   ` Linus Walleij
2013-04-17 15:41                                                                           ` Stephen Warren
2013-04-26  7:27                                                                             ` Linus Walleij
2013-04-26 21:25                                                                               ` Jon Hunter
     [not found]                                                                                 ` <517AF0C1.60009-l0cyMroinI0@public.gmane.org>
2013-05-03 14:35                                                                                   ` Linus Walleij
2013-04-26  7:11                                                               ` Linus Walleij
2013-04-26  6:59                                                             ` Linus Walleij
2013-04-15 16:53                                                         ` Stephen Warren
2013-04-15 20:00                                                           ` Jon Hunter
2013-04-11 22:49                                                     ` Javier Martinez Canillas
2013-04-11 22:51                                                     ` Stephen Warren
2013-04-10 21:44                                               ` Arnd Bergmann
2013-02-27  3:33                 ` Javier Martinez Canillas
2013-02-27 17:47                   ` Stephen Warren
2013-02-27 20:00                     ` Javier Martinez Canillas
2013-02-26 23:08               ` Jon Hunter
2013-02-27  3:47                 ` Javier Martinez Canillas
2013-02-27 20:13                   ` Jon Hunter
2013-02-27 23:41   ` Linus Walleij
2013-02-28 13:04     ` Benoit Cousson
2013-03-01  0:09       ` Linus Walleij
2013-03-01  0:42         ` Jon Hunter
2012-02-15 16:04 ` [PATCH 4/5] arm/dts: OMAP4: Add gpio nodes Benoit Cousson
2012-02-15 16:04 ` [PATCH 5/5] arm/dts: OMAP3: " Benoit Cousson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=516C73C6.5050409@ti.com \
    --to=jon-hunter@ti.com \
    --cc=acourbot@nvidia.com \
    --cc=devicetree-discuss@lists.ozlabs.org \
    --cc=grant.likely@secretlab.ca \
    --cc=khilman@deeprootsystems.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=martinez.javier@gmail.com \
    --cc=swarren@nvidia.com \
    --cc=swarren@wwwdotorg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).