* [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt
@ 2015-11-30 22:47 Christophe Ricard
2015-11-30 22:47 ` [PATCH v3 1/2] acpi: Rename acpi_gsi_get_irq_type to acpi_get_irq_type and export symbol Christophe Ricard
` (3 more replies)
0 siblings, 4 replies; 11+ messages in thread
From: Christophe Ricard @ 2015-11-30 22:47 UTC (permalink / raw)
To: rjw, lenb, linus.walleij, gnurou, andriy.shevchenko, mika.westerberg
Cc: linux-i2c, linux-gpio, linux-acpi, Christophe Ricard
Hi,
This serie only move from RFC to final. I am also adding gpio folks for potential
feedback.
ACPI probing method does not retrieve irq_type from a gpio interrupt declared
with GpioInt as it is done with devicetree probing. In other terms, irq_get_trigger_type
will always send back 0.
Those 2 patches propose a way to retrieve the correct interrupt polarity/type from a GpioInt
acpi declaration when using irq_get_trigger_type.
Best Regards
Christophe
Christophe Ricard (2):
acpi: Rename acpi_gsi_get_irq_type to acpi_get_irq_type and export
symbol
ACPI / gpio: Add irq_type when a gpio is used as an interrupt
drivers/acpi/gsi.c | 21 +--------------------
drivers/acpi/utils.c | 21 +++++++++++++++++++++
drivers/gpio/gpiolib-acpi.c | 5 ++++-
include/linux/acpi.h | 2 ++
4 files changed, 28 insertions(+), 21 deletions(-)
--
2.1.4
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v3 1/2] acpi: Rename acpi_gsi_get_irq_type to acpi_get_irq_type and export symbol
2015-11-30 22:47 [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt Christophe Ricard
@ 2015-11-30 22:47 ` Christophe Ricard
2015-11-30 22:47 ` [PATCH v3 2/2] ACPI / gpio: Add irq_type when a gpio is used as an interrupt Christophe Ricard
` (2 subsequent siblings)
3 siblings, 0 replies; 11+ messages in thread
From: Christophe Ricard @ 2015-11-30 22:47 UTC (permalink / raw)
To: rjw, lenb, linus.walleij, gnurou, andriy.shevchenko, mika.westerberg
Cc: linux-i2c, linux-gpio, linux-acpi, Christophe Ricard
acpi_gsi_get_irq_type could be use out of gsi purpose.
Rename and make it available as a utility function.
Signed-off-by: Christophe Ricard <christophe-h.ricard@st.com>
---
drivers/acpi/gsi.c | 21 +--------------------
drivers/acpi/utils.c | 21 +++++++++++++++++++++
include/linux/acpi.h | 2 ++
3 files changed, 24 insertions(+), 20 deletions(-)
diff --git a/drivers/acpi/gsi.c b/drivers/acpi/gsi.c
index fa4585a..2828351 100644
--- a/drivers/acpi/gsi.c
+++ b/drivers/acpi/gsi.c
@@ -17,25 +17,6 @@ enum acpi_irq_model_id acpi_irq_model;
static struct fwnode_handle *acpi_gsi_domain_id;
-static unsigned int acpi_gsi_get_irq_type(int trigger, int polarity)
-{
- switch (polarity) {
- case ACPI_ACTIVE_LOW:
- return trigger == ACPI_EDGE_SENSITIVE ?
- IRQ_TYPE_EDGE_FALLING :
- IRQ_TYPE_LEVEL_LOW;
- case ACPI_ACTIVE_HIGH:
- return trigger == ACPI_EDGE_SENSITIVE ?
- IRQ_TYPE_EDGE_RISING :
- IRQ_TYPE_LEVEL_HIGH;
- case ACPI_ACTIVE_BOTH:
- if (trigger == ACPI_EDGE_SENSITIVE)
- return IRQ_TYPE_EDGE_BOTH;
- default:
- return IRQ_TYPE_NONE;
- }
-}
-
/**
* acpi_gsi_to_irq() - Retrieve the linux irq number for a given GSI
* @gsi: GSI IRQ number to map
@@ -82,7 +63,7 @@ int acpi_register_gsi(struct device *dev, u32 gsi, int trigger,
fwspec.fwnode = acpi_gsi_domain_id;
fwspec.param[0] = gsi;
- fwspec.param[1] = acpi_gsi_get_irq_type(trigger, polarity);
+ fwspec.param[1] = acpi_get_irq_type(trigger, polarity);
fwspec.param_count = 2;
return irq_create_fwspec_mapping(&fwspec);
diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c
index 475c907..715b24b 100644
--- a/drivers/acpi/utils.c
+++ b/drivers/acpi/utils.c
@@ -33,6 +33,27 @@
#define _COMPONENT ACPI_BUS_COMPONENT
ACPI_MODULE_NAME("utils");
+unsigned int acpi_get_irq_type(int trigger, int polarity)
+{
+ switch (polarity) {
+ case ACPI_ACTIVE_LOW:
+ return trigger == ACPI_EDGE_SENSITIVE ?
+ IRQ_TYPE_EDGE_FALLING :
+ IRQ_TYPE_LEVEL_LOW;
+ case ACPI_ACTIVE_HIGH:
+ return trigger == ACPI_EDGE_SENSITIVE ?
+ IRQ_TYPE_EDGE_RISING :
+ IRQ_TYPE_LEVEL_HIGH;
+ case ACPI_ACTIVE_BOTH:
+ if (trigger == ACPI_EDGE_SENSITIVE)
+ return IRQ_TYPE_EDGE_BOTH;
+ default:
+ return IRQ_TYPE_NONE;
+ }
+}
+EXPORT_SYMBOL_GPL(acpi_get_irq_type);
+
+
/* --------------------------------------------------------------------------
Object Evaluation Helpers
-------------------------------------------------------------------------- */
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index d863e12..b0c5a11 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -204,6 +204,8 @@ int acpi_isa_irq_to_gsi (unsigned isa_irq, u32 *gsi);
void acpi_set_irq_model(enum acpi_irq_model_id model,
struct fwnode_handle *fwnode);
+unsigned int acpi_get_irq_type(int trigger, int polarity);
+
#ifdef CONFIG_X86_IO_APIC
extern int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity);
#else
--
2.1.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 2/2] ACPI / gpio: Add irq_type when a gpio is used as an interrupt
2015-11-30 22:47 [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt Christophe Ricard
2015-11-30 22:47 ` [PATCH v3 1/2] acpi: Rename acpi_gsi_get_irq_type to acpi_get_irq_type and export symbol Christophe Ricard
@ 2015-11-30 22:47 ` Christophe Ricard
2015-12-10 17:00 ` Linus Walleij
2015-12-01 1:03 ` [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt Wolfram Sang
2015-12-01 11:21 ` Mika Westerberg
3 siblings, 1 reply; 11+ messages in thread
From: Christophe Ricard @ 2015-11-30 22:47 UTC (permalink / raw)
To: rjw, lenb, linus.walleij, gnurou, andriy.shevchenko, mika.westerberg
Cc: linux-i2c, linux-gpio, linux-acpi, Christophe Ricard
When a gpio is used as an interrupt, the irq_type was not available for
device driver. It is not align with devicetree probing.
Signed-off-by: Christophe Ricard <christophe-h.ricard@st.com>
---
drivers/gpio/gpiolib-acpi.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c
index bbcac3a..cff8736 100644
--- a/drivers/gpio/gpiolib-acpi.c
+++ b/drivers/gpio/gpiolib-acpi.c
@@ -416,9 +416,12 @@ static int acpi_find_gpio(struct acpi_resource *ares, void *data)
* GpioIo is used then the only way to set the flag is
* to use _DSD "gpios" property.
*/
- if (lookup->info.gpioint)
+ if (lookup->info.gpioint) {
lookup->info.active_low =
agpio->polarity == ACPI_ACTIVE_LOW;
+ irq_set_irq_type(gpiod_to_irq(lookup->desc),
+ acpi_get_irq_type(agpio->triggering, agpio->polarity));
+ }
}
return 1;
--
2.1.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt
2015-11-30 22:47 [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt Christophe Ricard
2015-11-30 22:47 ` [PATCH v3 1/2] acpi: Rename acpi_gsi_get_irq_type to acpi_get_irq_type and export symbol Christophe Ricard
2015-11-30 22:47 ` [PATCH v3 2/2] ACPI / gpio: Add irq_type when a gpio is used as an interrupt Christophe Ricard
@ 2015-12-01 1:03 ` Wolfram Sang
2015-12-01 7:03 ` Christophe Ricard
2015-12-01 11:21 ` Mika Westerberg
3 siblings, 1 reply; 11+ messages in thread
From: Wolfram Sang @ 2015-12-01 1:03 UTC (permalink / raw)
To: Christophe Ricard
Cc: rjw, lenb, linus.walleij, gnurou, andriy.shevchenko,
mika.westerberg, linux-i2c, linux-gpio, linux-acpi,
Christophe Ricard
[-- Attachment #1: Type: text/plain, Size: 129 bytes --]
> This serie only move from RFC to final. I am also adding gpio folks for potential
> feedback.
Why is this relevant for I2C?
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt
2015-12-01 1:03 ` [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt Wolfram Sang
@ 2015-12-01 7:03 ` Christophe Ricard
0 siblings, 0 replies; 11+ messages in thread
From: Christophe Ricard @ 2015-12-01 7:03 UTC (permalink / raw)
To: Wolfram Sang
Cc: rjw, lenb, linus.walleij, gnurou, andriy.shevchenko,
mika.westerberg, linux-i2c, linux-gpio, linux-acpi,
Christophe Ricard
Hi Wolfram,
This is correct that this serie does not impact i2c core at all.
Best Regards
Christophe
On 01/12/2015 02:03, Wolfram Sang wrote:
>> This serie only move from RFC to final. I am also adding gpio folks for potential
>> feedback.
> Why is this relevant for I2C?
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt
2015-11-30 22:47 [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt Christophe Ricard
` (2 preceding siblings ...)
2015-12-01 1:03 ` [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt Wolfram Sang
@ 2015-12-01 11:21 ` Mika Westerberg
[not found] ` <CALD+uuxJw5tQ2XY99nHigXdNkcXGnng+r9NZ8H9TqUF9GbgW=A@mail.gmail.com>
3 siblings, 1 reply; 11+ messages in thread
From: Mika Westerberg @ 2015-12-01 11:21 UTC (permalink / raw)
To: Christophe Ricard
Cc: rjw, lenb, linus.walleij, gnurou, andriy.shevchenko, linux-i2c,
linux-gpio, linux-acpi, Christophe Ricard
On Mon, Nov 30, 2015 at 11:47:51PM +0100, Christophe Ricard wrote:
> ACPI probing method does not retrieve irq_type from a gpio interrupt declared
> with GpioInt as it is done with devicetree probing. In other terms, irq_get_trigger_type
> will always send back 0.
Is this real problem you are solving here?
Also where does the device tree version set triggering flags for a GPIO
irq?
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt
[not found] ` <CALD+uuxJw5tQ2XY99nHigXdNkcXGnng+r9NZ8H9TqUF9GbgW=A@mail.gmail.com>
@ 2015-12-01 13:03 ` Mika Westerberg
2015-12-04 23:36 ` Christophe Ricard
0 siblings, 1 reply; 11+ messages in thread
From: Mika Westerberg @ 2015-12-01 13:03 UTC (permalink / raw)
To: Christophe Ricard
Cc: rjw, Len Brown, Linus Walleij, Alexandre Courbot,
andriy.shevchenko, linux-i2c, linux-gpio, linux-acpi,
Christophe Ricard
On Tue, Dec 01, 2015 at 01:25:50PM +0100, Christophe Ricard wrote:
> For example during an i2c_device_probe where an i2c slave device
> describe in devicetree has an interrupts property.
> i2c_device_probe (drivers/i2c/i2c-core.c), retrieves irq property from
> of_irq_get which will looks for an "interrupts" property in
> of_irq_parse_of (drivers/of/irq.c).
> of_irq_get will then call irq_create_mapping (kernel/irq/irqdomain.c)
> which will set the irq_type retrieved during the interrupts node
> parsing.
Found it now thanks.
> This will allow from an i2c slave drivers to configure an interrupt
> handler matching the exact devicetree data for the interrupts property
> of the i2c slave node.
Makes sense.
> Now for the same kind of i2c driver using acpi description, the GpioInt
> polarity/type is at the moment never kept in the irq property.
> It is possible to check that following about the same path...
> i2c_device_probe (drivers/i2c/i2c-core.c), retrieves irq property from
> acpi_dev_gpio_irq_get but does not save the irq_type.
> This would allow not to have to use an additional gpio field and all
> the configuration step to configure the gpio interrupt correctly in a
> device driver and taking a real benefit of the GpioInt acpi keyword
> compare to GpioIo keyword.
> Most the of the drivers based on acpi description retrieve gpio number
> to assign an interrupt and a fix polarity. I believe my patchset
> proposal would improve this and allow to
> be much closer with devicetree.
> Do you see any issue with this ?
No, but I wonder if it would be better to do this in acpi_dev_gpio_irq_get()
instead of acpi_find_gpio() which gets called everytime a GPIO is looked up?
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt
2015-12-01 13:03 ` Mika Westerberg
@ 2015-12-04 23:36 ` Christophe Ricard
2015-12-07 10:52 ` Mika Westerberg
0 siblings, 1 reply; 11+ messages in thread
From: Christophe Ricard @ 2015-12-04 23:36 UTC (permalink / raw)
To: Mika Westerberg
Cc: rjw, Len Brown, Linus Walleij, Alexandre Courbot,
andriy.shevchenko, linux-i2c, linux-gpio, linux-acpi,
Christophe Ricard
Hi Mika,
On 01/12/2015 14:03, Mika Westerberg wrote:
[...]
>> Now for the same kind of i2c driver using acpi description, the GpioInt
>> polarity/type is at the moment never kept in the irq property.
>> It is possible to check that following about the same path...
>> i2c_device_probe (drivers/i2c/i2c-core.c), retrieves irq property from
>> acpi_dev_gpio_irq_get but does not save the irq_type.
>> This would allow not to have to use an additional gpio field and all
>> the configuration step to configure the gpio interrupt correctly in a
>> device driver and taking a real benefit of the GpioInt acpi keyword
>> compare to GpioIo keyword.
>> Most the of the drivers based on acpi description retrieve gpio number
>> to assign an interrupt and a fix polarity. I believe my patchset
>> proposal would improve this and allow to
>> be much closer with devicetree.
>> Do you see any issue with this ?
> No, but I wonder if it would be better to do this in acpi_dev_gpio_irq_get()
> instead of acpi_find_gpio() which gets called everytime a GPIO is looked up?
I believe, setting the irq type requires triggering and polarity data
stored into a struct acpi_resource_gpio.
acpi_dev_gpio_irq_get call acpi_get_gpiod_by_index which run acpi_find_gpio.
Actually acpi_dev_gpio_irq_get is called everytime an i2c device slave
is probed, acpi_find_gpio will get called to "register" gpios.
If done correctly, i think this will be done only once...
The only improvement i may see would be to add an extra field in the
acpi_gpio_info structure in drivers/gpio/gpiolib.h (for example int
irq_type).
And call irq_set_irq_type in acpi_dev_gpio_irq_get if the gpio is an
interrupt.
I guess the current proposal and this one are equivalent...
What do you think ?
Best Regards
Christophe
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt
2015-12-04 23:36 ` Christophe Ricard
@ 2015-12-07 10:52 ` Mika Westerberg
2015-12-07 10:53 ` Christophe Henri RICARD
0 siblings, 1 reply; 11+ messages in thread
From: Mika Westerberg @ 2015-12-07 10:52 UTC (permalink / raw)
To: Christophe Ricard
Cc: rjw, Len Brown, Linus Walleij, Alexandre Courbot,
andriy.shevchenko, linux-i2c, linux-gpio, linux-acpi,
Christophe Ricard
On Sat, Dec 05, 2015 at 12:36:19AM +0100, Christophe Ricard wrote:
> >No, but I wonder if it would be better to do this in acpi_dev_gpio_irq_get()
> >instead of acpi_find_gpio() which gets called everytime a GPIO is looked up?
> I believe, setting the irq type requires triggering and polarity data stored
> into a struct acpi_resource_gpio.
>
> acpi_dev_gpio_irq_get call acpi_get_gpiod_by_index which run acpi_find_gpio.
>
> Actually acpi_dev_gpio_irq_get is called everytime an i2c device slave is
> probed, acpi_find_gpio will get called to "register" gpios.
> If done correctly, i think this will be done only once...
>
> The only improvement i may see would be to add an extra field in the
> acpi_gpio_info structure in drivers/gpio/gpiolib.h (for example int
> irq_type).
> And call irq_set_irq_type in acpi_dev_gpio_irq_get if the gpio is an
> interrupt.
>
> I guess the current proposal and this one are equivalent...
>
> What do you think ?
Actually I think it may be useful to add triggering flags to
acpi_gpio_info.
^ permalink raw reply [flat|nested] 11+ messages in thread
* RE: [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt
2015-12-07 10:52 ` Mika Westerberg
@ 2015-12-07 10:53 ` Christophe Henri RICARD
0 siblings, 0 replies; 11+ messages in thread
From: Christophe Henri RICARD @ 2015-12-07 10:53 UTC (permalink / raw)
To: Mika Westerberg, Christophe Ricard
Cc: rjw, Len Brown, Linus Walleij, Alexandre Courbot,
andriy.shevchenko, linux-i2c, linux-gpio, linux-acpi
Hi Mika,
Ok, i will send a RFC serie tonight. I have also noticed the spi core set the irq field to -1 in acpi. This will be fixed in this serie.
Best Regards
Christophe
-----Original Message-----
From: Mika Westerberg [mailto:mika.westerberg@linux.intel.com]
Sent: lundi 7 décembre 2015 11:52
To: Christophe Ricard
Cc: rjw@rjwysocki.net; Len Brown; Linus Walleij; Alexandre Courbot; andriy.shevchenko@linux.intel.com; linux-i2c@vger.kernel.org; linux-gpio@vger.kernel.org; linux-acpi@vger.kernel.org; Christophe Henri RICARD
Subject: Re: [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt
On Sat, Dec 05, 2015 at 12:36:19AM +0100, Christophe Ricard wrote:
> >No, but I wonder if it would be better to do this in
> >acpi_dev_gpio_irq_get() instead of acpi_find_gpio() which gets called everytime a GPIO is looked up?
> I believe, setting the irq type requires triggering and polarity data
> stored into a struct acpi_resource_gpio.
>
> acpi_dev_gpio_irq_get call acpi_get_gpiod_by_index which run acpi_find_gpio.
>
> Actually acpi_dev_gpio_irq_get is called everytime an i2c device slave
> is probed, acpi_find_gpio will get called to "register" gpios.
> If done correctly, i think this will be done only once...
>
> The only improvement i may see would be to add an extra field in the
> acpi_gpio_info structure in drivers/gpio/gpiolib.h (for example int
> irq_type).
> And call irq_set_irq_type in acpi_dev_gpio_irq_get if the gpio is an
> interrupt.
>
> I guess the current proposal and this one are equivalent...
>
> What do you think ?
Actually I think it may be useful to add triggering flags to acpi_gpio_info.
--
To unsubscribe from this list: send the line "unsubscribe linux-gpio" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3 2/2] ACPI / gpio: Add irq_type when a gpio is used as an interrupt
2015-11-30 22:47 ` [PATCH v3 2/2] ACPI / gpio: Add irq_type when a gpio is used as an interrupt Christophe Ricard
@ 2015-12-10 17:00 ` Linus Walleij
0 siblings, 0 replies; 11+ messages in thread
From: Linus Walleij @ 2015-12-10 17:00 UTC (permalink / raw)
To: Christophe Ricard
Cc: Rafael J. Wysocki, Len Brown, Alexandre Courbot, Andy Shevchenko,
Mika Westerberg, linux-i2c, linux-gpio, ACPI Devel Maling List,
Christophe Ricard
On Mon, Nov 30, 2015 at 11:47 PM, Christophe Ricard
<christophe.ricard@gmail.com> wrote:
> When a gpio is used as an interrupt, the irq_type was not available for
> device driver. It is not align with devicetree probing.
>
> Signed-off-by: Christophe Ricard <christophe-h.ricard@st.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Rafael you can merge this into the ACPI tree.
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2015-12-10 17:00 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-30 22:47 [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt Christophe Ricard
2015-11-30 22:47 ` [PATCH v3 1/2] acpi: Rename acpi_gsi_get_irq_type to acpi_get_irq_type and export symbol Christophe Ricard
2015-11-30 22:47 ` [PATCH v3 2/2] ACPI / gpio: Add irq_type when a gpio is used as an interrupt Christophe Ricard
2015-12-10 17:00 ` Linus Walleij
2015-12-01 1:03 ` [PATCH v3 0/2] ACPI: Add irq_type to gpio interrupt Wolfram Sang
2015-12-01 7:03 ` Christophe Ricard
2015-12-01 11:21 ` Mika Westerberg
[not found] ` <CALD+uuxJw5tQ2XY99nHigXdNkcXGnng+r9NZ8H9TqUF9GbgW=A@mail.gmail.com>
2015-12-01 13:03 ` Mika Westerberg
2015-12-04 23:36 ` Christophe Ricard
2015-12-07 10:52 ` Mika Westerberg
2015-12-07 10:53 ` Christophe Henri RICARD
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.