All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Warren <swarren@wwwdotorg.org>
To: Jon Hunter <jon-hunter@ti.com>
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: Tue, 16 Apr 2013 12:40:05 -0600	[thread overview]
Message-ID: <516D9B05.1000501@wwwdotorg.org> (raw)
In-Reply-To: <516C8760.2050500@ti.com>

On 04/15/2013 05:04 PM, Jon Hunter wrote:
> 
> On 04/15/2013 05:16 PM, Stephen Warren wrote:
>> On 04/15/2013 03:40 PM, Jon Hunter wrote:
...
>>> mmc {
>>> 	label = "pandaboard::status2";
>>>  	gpios = <&gpio1 8 0>;
>>> 	...
>>> };
>>
>> But that's a gpio-leds instance, not an MMC controller... I really
>> really hope there's no DT node using "gpios" to mean "interrupts"... And
>> it wouldn't make any sense for an on-SoC device anyway.
> 
> Oops yes, I overlooked that. However, the omap mmc driver
> (drivers/mmc/host/omap_hsmmc.c) does call gpio_request() and
> request_threaded_irq() for the mmc card-detect interrupt. I believe
> tegra is doing the same ...
> 
> sdhci@78000000 {
> 	...
> 	cd-gpios = <&gpio 69 0>; /* gpio PI5 */
> 	...	
> };

Ah true. I guess at least all MMC drivers are likely hooking cd-gpios as
an interrupt, /and/ requesting it as a GPIO so that they can read the
current state when the GPIO goes off.

That tends to imply that no core code can possibly call gpio_request()
in response to request_irq(), since doing so likely will conflict with
quite a few drivers...

>>> 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
>>
>>> +int omap_irq_domain_xlate(struct irq_domain *d, struct device_node *ctrlr,
>> ...
>>> +       gpio_request_one(irq_to_gpio(bank, intspec[0]), GPIOF_IN, ctrlr->name);
>>
>> I guess that could work, but:
>>
>> a) It still means doing the gpio_request() in each driver instead of
>> centrally.
> 
> Right this is device specific, but it avoids exposing irq_to_gpio for a
> device. However, we could make this generic if we did expose irq_to_gpio
> for each device.
> 
>> b) This approach doesn't solve the issue where some client driver has
>> already requested the GPIO. This code would simply prevent that call
>> from succeeding, which would probably make the driver probe() error out,
>> which isn't any different to the equivalent proposed centralized
>> gpio_request() inside some request_irq() failing, and causing the
>> device's probe() to error out.
> 
> If some driver is calling gpio_request() directly, then they will most
> likely just call gpio_to_irq() when requesting the interrupt and so the
> xlate function would not be called in this case (mmc drivers are a good
> example). So I don't see that as being a problem. In fact that's the
> benefit of this approach as AFAICT it solves this problem.

Oh. That assumption seems very fragile. What about drivers that actually
do have platform data (or DT bindings) that provide both the IRQ and
GPIO IDs, and hence don't use gpio_to_irq()? That's entirely possible.

Given all this, I guess simply having each GPIO+IRQ driver's set_type
function simply do whatever is required in HW to set up that GPIO
actually does seem like the best idea. Admittedly that isn't
centralized, but I'm not sure now that any centralized implementation is
possible, without significant rework of a bunch of drivers. This is what
the Tegra GPIO driver already does, and I think one of the earlier
patches in this thread did exactly that for OMAP IRQs too right?

BTW, just so you know, I'm on vacation for 2 weeks starting Wed
afternoon, so replies will be non-existent or spotty during that time.

WARNING: multiple messages have this Message-ID (diff)
From: swarren@wwwdotorg.org (Stephen Warren)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 3/5] gpio/omap: Add DT support to GPIO driver
Date: Tue, 16 Apr 2013 12:40:05 -0600	[thread overview]
Message-ID: <516D9B05.1000501@wwwdotorg.org> (raw)
In-Reply-To: <516C8760.2050500@ti.com>

On 04/15/2013 05:04 PM, Jon Hunter wrote:
> 
> On 04/15/2013 05:16 PM, Stephen Warren wrote:
>> On 04/15/2013 03:40 PM, Jon Hunter wrote:
...
>>> mmc {
>>> 	label = "pandaboard::status2";
>>>  	gpios = <&gpio1 8 0>;
>>> 	...
>>> };
>>
>> But that's a gpio-leds instance, not an MMC controller... I really
>> really hope there's no DT node using "gpios" to mean "interrupts"... And
>> it wouldn't make any sense for an on-SoC device anyway.
> 
> Oops yes, I overlooked that. However, the omap mmc driver
> (drivers/mmc/host/omap_hsmmc.c) does call gpio_request() and
> request_threaded_irq() for the mmc card-detect interrupt. I believe
> tegra is doing the same ...
> 
> sdhci at 78000000 {
> 	...
> 	cd-gpios = <&gpio 69 0>; /* gpio PI5 */
> 	...	
> };

Ah true. I guess at least all MMC drivers are likely hooking cd-gpios as
an interrupt, /and/ requesting it as a GPIO so that they can read the
current state when the GPIO goes off.

That tends to imply that no core code can possibly call gpio_request()
in response to request_irq(), since doing so likely will conflict with
quite a few drivers...

>>> 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
>>
>>> +int omap_irq_domain_xlate(struct irq_domain *d, struct device_node *ctrlr,
>> ...
>>> +       gpio_request_one(irq_to_gpio(bank, intspec[0]), GPIOF_IN, ctrlr->name);
>>
>> I guess that could work, but:
>>
>> a) It still means doing the gpio_request() in each driver instead of
>> centrally.
> 
> Right this is device specific, but it avoids exposing irq_to_gpio for a
> device. However, we could make this generic if we did expose irq_to_gpio
> for each device.
> 
>> b) This approach doesn't solve the issue where some client driver has
>> already requested the GPIO. This code would simply prevent that call
>> from succeeding, which would probably make the driver probe() error out,
>> which isn't any different to the equivalent proposed centralized
>> gpio_request() inside some request_irq() failing, and causing the
>> device's probe() to error out.
> 
> If some driver is calling gpio_request() directly, then they will most
> likely just call gpio_to_irq() when requesting the interrupt and so the
> xlate function would not be called in this case (mmc drivers are a good
> example). So I don't see that as being a problem. In fact that's the
> benefit of this approach as AFAICT it solves this problem.

Oh. That assumption seems very fragile. What about drivers that actually
do have platform data (or DT bindings) that provide both the IRQ and
GPIO IDs, and hence don't use gpio_to_irq()? That's entirely possible.

Given all this, I guess simply having each GPIO+IRQ driver's set_type
function simply do whatever is required in HW to set up that GPIO
actually does seem like the best idea. Admittedly that isn't
centralized, but I'm not sure now that any centralized implementation is
possible, without significant rework of a bunch of drivers. This is what
the Tegra GPIO driver already does, and I think one of the earlier
patches in this thread did exactly that for OMAP IRQs too right?

BTW, just so you know, I'm on vacation for 2 weeks starting Wed
afternoon, so replies will be non-existent or spotty during that time.

  reply	other threads:[~2013-04-16 18:40 UTC|newest]

Thread overview: 190+ 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 ` Benoit Cousson
2012-02-15 16:04 ` [PATCH 1/5] gpio/omap: Remove bank->id information and misc cleanup Benoit Cousson
2012-02-15 16:04   ` Benoit Cousson
2012-02-16  5:53   ` DebBarma, Tarun Kanti
2012-02-16  5:53     ` DebBarma, Tarun Kanti
2012-02-16  9:33     ` Cousson, Benoit
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-15 16:04   ` Benoit Cousson
2012-02-16  5:41   ` DebBarma, Tarun Kanti
2012-02-16  5:41     ` DebBarma, Tarun Kanti
2012-02-16  6:35     ` Grant Likely
2012-02-16  6:35       ` Grant Likely
2012-02-16  7:11       ` DebBarma, Tarun Kanti
2012-02-16  7:11         ` DebBarma, Tarun Kanti
2012-02-16  6:37     ` Shubhrajyoti
2012-02-16  6:37       ` Shubhrajyoti
2012-02-16  8:56       ` Cousson, Benoit
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-15 16:04   ` Benoit Cousson
2012-02-22 14:23   ` Rob Herring
2012-02-22 14:23     ` Rob Herring
2012-02-22 14:31     ` Cousson, Benoit
2012-02-22 14:31       ` Cousson, Benoit
2012-02-22 17:23       ` Rob Herring
2012-02-22 17:23         ` Rob Herring
2012-02-22 18:29         ` Stephen Warren
2012-02-22 18:29           ` Stephen Warren
2012-02-24 15:30           ` Cousson, Benoit
2012-02-24 15:30             ` Cousson, Benoit
2013-02-26 10:01             ` Javier Martinez Canillas
2013-02-26 10:01               ` Javier Martinez Canillas
2013-02-26 16:33               ` Stephen Warren
2013-02-26 16:33                 ` Stephen Warren
2013-02-26 22:40               ` Jon Hunter
2013-02-26 22:40                 ` Jon Hunter
2013-02-26 22:44                 ` Stephen Warren
2013-02-26 22:44                   ` Stephen Warren
2013-02-26 23:01                   ` Jon Hunter
2013-02-26 23:01                     ` Jon Hunter
2013-02-26 23:06                     ` Stephen Warren
2013-02-26 23:06                       ` Stephen Warren
2013-02-26 23:45                       ` Jon Hunter
2013-02-26 23:45                         ` Jon Hunter
2013-02-27  0:13                         ` Stephen Warren
2013-02-27  0:13                           ` Stephen Warren
2013-02-27  1:07                           ` Jon Hunter
2013-02-27  1:07                             ` Jon Hunter
2013-02-27  3:57                             ` Javier Martinez Canillas
2013-02-27  3:57                               ` Javier Martinez Canillas
2013-02-27 17:50                               ` Stephen Warren
2013-02-27 17:50                                 ` Stephen Warren
2013-02-27 20:05                                 ` Javier Martinez Canillas
2013-02-27 20:05                                   ` Javier Martinez Canillas
2013-02-27 23:16                               ` Jon Hunter
2013-02-27 23:16                                 ` Jon Hunter
2013-02-28 12:17                                 ` Javier Martinez Canillas
2013-02-28 12:17                                   ` Javier Martinez Canillas
2013-02-28 20:49                                   ` Jon Hunter
2013-02-28 20:49                                     ` Jon Hunter
     [not found]                     ` <512D3EC2.6050408-l0cyMroinI0@public.gmane.org>
2013-03-02 20:05                       ` Grant Likely
2013-03-02 20:05                         ` Grant Likely
2013-03-07 23:14                         ` Jon Hunter
2013-03-07 23:14                           ` Jon Hunter
2013-03-15 11:21                           ` Javier Martinez Canillas
2013-03-15 11:21                             ` Javier Martinez Canillas
2013-03-22  8:10                             ` Linus Walleij
2013-03-22  8:10                               ` Linus Walleij
2013-03-22 15:33                               ` Stephen Warren
2013-03-22 15:33                                 ` Stephen Warren
2013-03-22 22:52                                 ` Jon Hunter
2013-03-22 22:52                                   ` Jon Hunter
2013-03-27 13:52                                   ` Linus Walleij
2013-03-27 13:52                                     ` Linus Walleij
2013-03-27 16:09                                     ` Stephen Warren
2013-03-27 16:09                                       ` Stephen Warren
2013-03-27 20:55                                       ` Linus Walleij
2013-03-27 20:55                                         ` Linus Walleij
2013-03-29 17:01                                         ` Stephen Warren
2013-03-29 17:01                                           ` Stephen Warren
2013-04-10 18:12                                           ` Linus Walleij
2013-04-10 18:12                                             ` Linus Walleij
2013-04-10 20:29                                             ` Stephen Warren
2013-04-10 20:29                                               ` Stephen Warren
2013-04-10 21:28                                               ` Linus Walleij
2013-04-10 21:28                                                 ` Linus Walleij
2013-04-11 20:30                                                 ` Stephen Warren
2013-04-11 20:30                                                   ` Stephen Warren
2013-04-11 22:16                                                   ` Linus Walleij
2013-04-11 22:16                                                     ` Linus Walleij
2013-04-11 22:47                                                     ` Stephen Warren
2013-04-11 22:47                                                       ` Stephen Warren
2013-04-14  1:35                                                       ` Javier Martinez Canillas
2013-04-14  1:35                                                         ` Javier Martinez Canillas
2013-04-14 20:53                                                         ` Linus Walleij
2013-04-14 20:53                                                           ` Linus Walleij
2013-04-15 11:25                                                           ` Javier Martinez Canillas
2013-04-15 11:25                                                             ` Javier Martinez Canillas
2013-04-15 16:58                                                           ` Stephen Warren
2013-04-15 16:58                                                             ` Stephen Warren
     [not found]                                                             ` <516C73C6.5050409@ti.co m>
2013-04-15 21:40                                                             ` Jon Hunter
2013-04-15 21:40                                                               ` Jon Hunter
2013-04-15 21:44                                                               ` Jon Hunter
2013-04-15 21:44                                                                 ` Jon Hunter
2013-04-15 22:16                                                               ` Stephen Warren
2013-04-15 22:16                                                                 ` Stephen Warren
2013-04-15 23:04                                                                 ` Jon Hunter
2013-04-15 23:04                                                                   ` Jon Hunter
2013-04-16 18:40                                                                   ` Stephen Warren [this message]
2013-04-16 18:40                                                                     ` Stephen Warren
2013-04-16 19:27                                                                     ` Jon Hunter
2013-04-16 19:27                                                                       ` Jon Hunter
2013-04-16 21:57                                                                       ` Jon Hunter
2013-04-16 21:57                                                                         ` Jon Hunter
2013-04-16 22:11                                                                       ` Stephen Warren
2013-04-16 22:11                                                                         ` Stephen Warren
2013-04-16 23:14                                                                         ` Jon Hunter
2013-04-16 23:14                                                                           ` Jon Hunter
2013-04-17  0:41                                                                           ` Javier Martinez Canillas
2013-04-17  0:41                                                                             ` Javier Martinez Canillas
2013-04-17  2:00                                                                             ` Jon Hunter
2013-04-17  2:00                                                                               ` Jon Hunter
2013-04-17  7:55                                                                               ` Javier Martinez Canillas
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:25                                                                                     ` Jon Hunter
2013-04-17 13:42                                                                                     ` Javier Martinez Canillas
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 13:52                                                                                           ` Jon Hunter
2013-04-17 14:21                                                                                           ` Javier Martinez Canillas
2013-04-17 14:21                                                                                             ` Javier Martinez Canillas
2013-04-17 16:18                                                                                           ` Javier Martinez Canillas
2013-04-17 16:18                                                                                             ` Javier Martinez Canillas
2013-04-26  7:31                                                                             ` Linus Walleij
2013-04-26  7:31                                                                               ` Linus Walleij
2013-04-26 21:31                                                                               ` Jon Hunter
2013-04-26 21:31                                                                                 ` Jon Hunter
2013-06-11 21:25                                                                                 ` Grant Likely
2013-06-11 21:25                                                                                   ` Grant Likely
2013-06-12  9:43                                                                                   ` Linus Walleij
2013-06-12  9:43                                                                                     ` Linus Walleij
2013-04-17 15:41                                                                           ` Stephen Warren
2013-04-17 15:41                                                                             ` Stephen Warren
2013-04-26  7:27                                                                             ` Linus Walleij
2013-04-26  7:27                                                                               ` Linus Walleij
2013-04-26 21:25                                                                               ` Jon Hunter
2013-04-26 21:25                                                                                 ` Jon Hunter
     [not found]                                                                                 ` <517AF0C1.60009-l0cyMroinI0@public.gmane.org>
2013-05-03 14:35                                                                                   ` Linus Walleij
2013-05-03 14:35                                                                                     ` Linus Walleij
2013-04-26  7:11                                                               ` Linus Walleij
2013-04-26  7:11                                                                 ` Linus Walleij
2013-04-26  6:59                                                             ` Linus Walleij
2013-04-26  6:59                                                               ` Linus Walleij
2013-04-15 16:53                                                         ` Stephen Warren
2013-04-15 16:53                                                           ` Stephen Warren
2013-04-15 20:00                                                           ` Jon Hunter
2013-04-15 20:00                                                             ` Jon Hunter
2013-04-11 22:49                                                     ` Javier Martinez Canillas
2013-04-11 22:49                                                       ` Javier Martinez Canillas
2013-04-11 22:51                                                     ` Stephen Warren
2013-04-11 22:51                                                       ` Stephen Warren
2013-04-10 21:44                                               ` Arnd Bergmann
2013-04-10 21:44                                                 ` Arnd Bergmann
2013-02-27  3:33                 ` Javier Martinez Canillas
2013-02-27  3:33                   ` Javier Martinez Canillas
2013-02-27 17:47                   ` Stephen Warren
2013-02-27 17:47                     ` Stephen Warren
2013-02-27 20:00                     ` Javier Martinez Canillas
2013-02-27 20:00                       ` Javier Martinez Canillas
2013-02-26 23:08               ` Jon Hunter
2013-02-26 23:08                 ` Jon Hunter
2013-02-27  3:47                 ` Javier Martinez Canillas
2013-02-27  3:47                   ` Javier Martinez Canillas
2013-02-27 20:13                   ` Jon Hunter
2013-02-27 20:13                     ` Jon Hunter
2013-02-27 23:41   ` Linus Walleij
2013-02-27 23:41     ` Linus Walleij
2013-02-28 13:04     ` Benoit Cousson
2013-02-28 13:04       ` Benoit Cousson
2013-03-01  0:09       ` Linus Walleij
2013-03-01  0:09         ` Linus Walleij
2013-03-01  0:42         ` Jon Hunter
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   ` Benoit Cousson
2012-02-15 16:04 ` [PATCH 5/5] arm/dts: OMAP3: " Benoit Cousson
2012-02-15 16:04   ` 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=516D9B05.1000501@wwwdotorg.org \
    --to=swarren@wwwdotorg.org \
    --cc=acourbot@nvidia.com \
    --cc=devicetree-discuss@lists.ozlabs.org \
    --cc=grant.likely@secretlab.ca \
    --cc=jon-hunter@ti.com \
    --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 \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.