* [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain
@ 2021-03-08 19:31 Andy Shevchenko
2021-03-08 19:31 ` [PATCH v4 2/2] gpiolib: Fold conditionals into simple ternary operator Andy Shevchenko
2021-03-08 19:36 ` [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain Rafael J. Wysocki
0 siblings, 2 replies; 6+ messages in thread
From: Andy Shevchenko @ 2021-03-08 19:31 UTC (permalink / raw)
To: linux-gpio, linux-kernel
Cc: Linus Walleij, Bartosz Golaszewski, linux-acpi,
Rafael J. Wysocki, Andy Shevchenko
When IRQ domain is created for an ACPI case, the name of it becomes unknown-%d
since for now it utilizes of_node member only and doesn't consider fwnode case.
Convert IRQ domain creation code to utilize fwnode instead.
Before/After the change on Intel Galileo Gen 2 with two GPIO (IRQ) controllers:
unknown-1 ==> \_SB.PCI0.GIP0.GPO
unknown-2 ==> \_SB.NIO3
Due to the nature of this change we may also deduplicate the WARN():s
because in either case (DT or ACPI) the fwnode will be set correctly
and %pfw is an equivalent to what the current code prints as a prefix.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
v4: added a paragraph about WARN changes, split out ops optimizations (Rafael)
drivers/gpio/gpiolib.c | 15 ++++-----------
1 file changed, 4 insertions(+), 11 deletions(-)
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 1853075df741..afee48e7dd41 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -1456,9 +1456,9 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
struct lock_class_key *lock_key,
struct lock_class_key *request_key)
{
+ struct fwnode_handle *fwnode = dev_fwnode(&gc->gpiodev->dev);
struct irq_chip *irqchip = gc->irq.chip;
const struct irq_domain_ops *ops = NULL;
- struct device_node *np;
unsigned int type;
unsigned int i;
@@ -1470,7 +1470,6 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
return -EINVAL;
}
- np = gc->gpiodev->dev.of_node;
type = gc->irq.default_type;
/*
@@ -1478,16 +1477,10 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
* used to configure the interrupts, as you may end up with
* conflicting triggers. Tell the user, and reset to NONE.
*/
- if (WARN(np && type != IRQ_TYPE_NONE,
- "%s: Ignoring %u default trigger\n", np->full_name, type))
+ if (WARN(fwnode && type != IRQ_TYPE_NONE,
+ "%pfw: Ignoring %u default trigger\n", fwnode, type))
type = IRQ_TYPE_NONE;
- if (has_acpi_companion(gc->parent) && type != IRQ_TYPE_NONE) {
- acpi_handle_warn(ACPI_HANDLE(gc->parent),
- "Ignoring %u default trigger\n", type);
- type = IRQ_TYPE_NONE;
- }
-
if (gc->to_irq)
chip_warn(gc, "to_irq is redefined in %s and you shouldn't rely on it\n", __func__);
@@ -1508,7 +1501,7 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
if (!ops)
ops = &gpiochip_domain_ops;
- gc->irq.domain = irq_domain_add_simple(np,
+ gc->irq.domain = irq_domain_create_simple(fwnode,
gc->ngpio,
gc->irq.first,
ops, gc);
--
2.30.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v4 2/2] gpiolib: Fold conditionals into simple ternary operator
2021-03-08 19:31 [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain Andy Shevchenko
@ 2021-03-08 19:31 ` Andy Shevchenko
2021-03-08 19:43 ` Rafael J. Wysocki
2021-03-08 19:36 ` [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain Rafael J. Wysocki
1 sibling, 1 reply; 6+ messages in thread
From: Andy Shevchenko @ 2021-03-08 19:31 UTC (permalink / raw)
To: linux-gpio, linux-kernel
Cc: Linus Walleij, Bartosz Golaszewski, linux-acpi,
Rafael J. Wysocki, Andy Shevchenko
It's quite spread code to initialize IRQ domain options.
Let's fold it into a simple oneliner.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
v4: new patch (see changelog of previous one)
drivers/gpio/gpiolib.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index afee48e7dd41..8c5ce377accc 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -1458,7 +1458,7 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
{
struct fwnode_handle *fwnode = dev_fwnode(&gc->gpiodev->dev);
struct irq_chip *irqchip = gc->irq.chip;
- const struct irq_domain_ops *ops = NULL;
+ const struct irq_domain_ops *ops;
unsigned int type;
unsigned int i;
@@ -1496,11 +1496,7 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
return ret;
} else {
/* Some drivers provide custom irqdomain ops */
- if (gc->irq.domain_ops)
- ops = gc->irq.domain_ops;
-
- if (!ops)
- ops = &gpiochip_domain_ops;
+ ops = gc->irq.domain_ops ?: &gpiochip_domain_ops;
gc->irq.domain = irq_domain_create_simple(fwnode,
gc->ngpio,
gc->irq.first,
--
2.30.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain
2021-03-08 19:31 [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain Andy Shevchenko
2021-03-08 19:31 ` [PATCH v4 2/2] gpiolib: Fold conditionals into simple ternary operator Andy Shevchenko
@ 2021-03-08 19:36 ` Rafael J. Wysocki
1 sibling, 0 replies; 6+ messages in thread
From: Rafael J. Wysocki @ 2021-03-08 19:36 UTC (permalink / raw)
To: Andy Shevchenko
Cc: open list:GPIO SUBSYSTEM, Linux Kernel Mailing List,
Linus Walleij, Bartosz Golaszewski, ACPI Devel Maling List,
Rafael J. Wysocki
On Mon, Mar 8, 2021 at 8:33 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> When IRQ domain is created for an ACPI case, the name of it becomes unknown-%d
> since for now it utilizes of_node member only and doesn't consider fwnode case.
> Convert IRQ domain creation code to utilize fwnode instead.
>
> Before/After the change on Intel Galileo Gen 2 with two GPIO (IRQ) controllers:
>
> unknown-1 ==> \_SB.PCI0.GIP0.GPO
> unknown-2 ==> \_SB.NIO3
>
> Due to the nature of this change we may also deduplicate the WARN():s
> because in either case (DT or ACPI) the fwnode will be set correctly
> and %pfw is an equivalent to what the current code prints as a prefix.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
> v4: added a paragraph about WARN changes, split out ops optimizations (Rafael)
Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> drivers/gpio/gpiolib.c | 15 ++++-----------
> 1 file changed, 4 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
> index 1853075df741..afee48e7dd41 100644
> --- a/drivers/gpio/gpiolib.c
> +++ b/drivers/gpio/gpiolib.c
> @@ -1456,9 +1456,9 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
> struct lock_class_key *lock_key,
> struct lock_class_key *request_key)
> {
> + struct fwnode_handle *fwnode = dev_fwnode(&gc->gpiodev->dev);
> struct irq_chip *irqchip = gc->irq.chip;
> const struct irq_domain_ops *ops = NULL;
> - struct device_node *np;
> unsigned int type;
> unsigned int i;
>
> @@ -1470,7 +1470,6 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
> return -EINVAL;
> }
>
> - np = gc->gpiodev->dev.of_node;
> type = gc->irq.default_type;
>
> /*
> @@ -1478,16 +1477,10 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
> * used to configure the interrupts, as you may end up with
> * conflicting triggers. Tell the user, and reset to NONE.
> */
> - if (WARN(np && type != IRQ_TYPE_NONE,
> - "%s: Ignoring %u default trigger\n", np->full_name, type))
> + if (WARN(fwnode && type != IRQ_TYPE_NONE,
> + "%pfw: Ignoring %u default trigger\n", fwnode, type))
> type = IRQ_TYPE_NONE;
>
> - if (has_acpi_companion(gc->parent) && type != IRQ_TYPE_NONE) {
> - acpi_handle_warn(ACPI_HANDLE(gc->parent),
> - "Ignoring %u default trigger\n", type);
> - type = IRQ_TYPE_NONE;
> - }
> -
> if (gc->to_irq)
> chip_warn(gc, "to_irq is redefined in %s and you shouldn't rely on it\n", __func__);
>
> @@ -1508,7 +1501,7 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
>
> if (!ops)
> ops = &gpiochip_domain_ops;
> - gc->irq.domain = irq_domain_add_simple(np,
> + gc->irq.domain = irq_domain_create_simple(fwnode,
> gc->ngpio,
> gc->irq.first,
> ops, gc);
> --
> 2.30.1
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v4 2/2] gpiolib: Fold conditionals into simple ternary operator
2021-03-08 19:31 ` [PATCH v4 2/2] gpiolib: Fold conditionals into simple ternary operator Andy Shevchenko
@ 2021-03-08 19:43 ` Rafael J. Wysocki
2021-03-08 19:46 ` Andy Shevchenko
0 siblings, 1 reply; 6+ messages in thread
From: Rafael J. Wysocki @ 2021-03-08 19:43 UTC (permalink / raw)
To: Andy Shevchenko
Cc: open list:GPIO SUBSYSTEM, Linux Kernel Mailing List,
Linus Walleij, Bartosz Golaszewski, ACPI Devel Maling List,
Rafael J. Wysocki
On Mon, Mar 8, 2021 at 8:33 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> It's quite spread code to initialize IRQ domain options.
> Let's fold it into a simple oneliner.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
> v4: new patch (see changelog of previous one)
> drivers/gpio/gpiolib.c | 8 ++------
> 1 file changed, 2 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
> index afee48e7dd41..8c5ce377accc 100644
> --- a/drivers/gpio/gpiolib.c
> +++ b/drivers/gpio/gpiolib.c
> @@ -1458,7 +1458,7 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
> {
> struct fwnode_handle *fwnode = dev_fwnode(&gc->gpiodev->dev);
> struct irq_chip *irqchip = gc->irq.chip;
> - const struct irq_domain_ops *ops = NULL;
> + const struct irq_domain_ops *ops;
It looks like the ops local var is redundant.
> unsigned int type;
> unsigned int i;
>
> @@ -1496,11 +1496,7 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
> return ret;
> } else {
> /* Some drivers provide custom irqdomain ops */
> - if (gc->irq.domain_ops)
> - ops = gc->irq.domain_ops;
> -
> - if (!ops)
> - ops = &gpiochip_domain_ops;
> + ops = gc->irq.domain_ops ?: &gpiochip_domain_ops;
> gc->irq.domain = irq_domain_create_simple(fwnode,
> gc->ngpio,
> gc->irq.first,
Because this can be
gc->irq.domain = irq_domain_add_simple(np,
gc->ngpio,
gc->irq.first,
gc->irq.domain_ops ?: &gpiochip_domain_ops,
gc);
(modulo white space / formatting) and this is the only place where ops
is used in this function.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v4 2/2] gpiolib: Fold conditionals into simple ternary operator
2021-03-08 19:43 ` Rafael J. Wysocki
@ 2021-03-08 19:46 ` Andy Shevchenko
2021-03-08 19:52 ` Andy Shevchenko
0 siblings, 1 reply; 6+ messages in thread
From: Andy Shevchenko @ 2021-03-08 19:46 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: open list:GPIO SUBSYSTEM, Linux Kernel Mailing List,
Linus Walleij, Bartosz Golaszewski, ACPI Devel Maling List,
Rafael J. Wysocki
On Mon, Mar 08, 2021 at 08:43:19PM +0100, Rafael J. Wysocki wrote:
> On Mon, Mar 8, 2021 at 8:33 PM Andy Shevchenko
> <andriy.shevchenko@linux.intel.com> wrote:
...
> It looks like the ops local var is redundant.
>
> > unsigned int type;
> > unsigned int i;
> >
> > @@ -1496,11 +1496,7 @@ static int gpiochip_add_irqchip(struct gpio_chip *gc,
> > return ret;
> > } else {
> > /* Some drivers provide custom irqdomain ops */
> > - if (gc->irq.domain_ops)
> > - ops = gc->irq.domain_ops;
> > -
> > - if (!ops)
> > - ops = &gpiochip_domain_ops;
> > + ops = gc->irq.domain_ops ?: &gpiochip_domain_ops;
> > gc->irq.domain = irq_domain_create_simple(fwnode,
> > gc->ngpio,
> > gc->irq.first,
>
> Because this can be
>
> gc->irq.domain = irq_domain_add_simple(np,
> gc->ngpio,
> gc->irq.first,
> gc->irq.domain_ops ?: &gpiochip_domain_ops,
> gc);
>
> (modulo white space / formatting) and this is the only place where ops
> is used in this function.
I just sent v5 without this, sorry :-)
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v4 2/2] gpiolib: Fold conditionals into simple ternary operator
2021-03-08 19:46 ` Andy Shevchenko
@ 2021-03-08 19:52 ` Andy Shevchenko
0 siblings, 0 replies; 6+ messages in thread
From: Andy Shevchenko @ 2021-03-08 19:52 UTC (permalink / raw)
To: Rafael J. Wysocki
Cc: open list:GPIO SUBSYSTEM, Linux Kernel Mailing List,
Linus Walleij, Bartosz Golaszewski, ACPI Devel Maling List,
Rafael J. Wysocki
On Mon, Mar 08, 2021 at 09:46:52PM +0200, Andy Shevchenko wrote:
> On Mon, Mar 08, 2021 at 08:43:19PM +0100, Rafael J. Wysocki wrote:
> I just sent v5 without this, sorry :-)
I will do it in v6.
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-03-08 19:53 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-08 19:31 [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain Andy Shevchenko
2021-03-08 19:31 ` [PATCH v4 2/2] gpiolib: Fold conditionals into simple ternary operator Andy Shevchenko
2021-03-08 19:43 ` Rafael J. Wysocki
2021-03-08 19:46 ` Andy Shevchenko
2021-03-08 19:52 ` Andy Shevchenko
2021-03-08 19:36 ` [PATCH v4 1/2] gpiolib: Reuse device's fwnode to create IRQ domain Rafael J. Wysocki
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).