Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / Atom feed
From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: Arnd Bergmann <arnd@arndb.de>, Tim Harvey <tharvey@gateworks.com>,
	Krzysztof Halasa <khalasa@piap.pl>,
	Olof Johansson <olof@lixom.net>, Imre Kaloz <kaloz@openwrt.org>,
	arm-soc <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH 14/17 v1] gpio: ixp4xx: Add OF probing support
Date: Wed, 6 Feb 2019 17:13:09 +0100
Message-ID: <CAMpxmJU+fmum=AP1_n0W4SaD0HuLPP67qTPO_n9WU-vWeNuSSw@mail.gmail.com> (raw)
In-Reply-To: <20190203214205.13594-15-linus.walleij@linaro.org>

niedz., 3 lut 2019 o 22:42 Linus Walleij <linus.walleij@linaro.org> napisał(a):
>
> This adds device tree probe and registration support for
> the IXP4xx GPIO driver.
>

What is the reason for not merging it with the patch adding the driver?

> Cc: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
> ---
> Bartosz: looking for your ACK on this, it'd be good if
> the other GPIO maintainer is aligned with my ideas here.
> I intend to merge this through the ARM SoC tree.
> ---
>  drivers/gpio/gpio-ixp4xx.c | 84 ++++++++++++++++++++++++++------------
>  1 file changed, 57 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/gpio/gpio-ixp4xx.c b/drivers/gpio/gpio-ixp4xx.c
> index 44c24948379d..38a77c8e0c9c 100644
> --- a/drivers/gpio/gpio-ixp4xx.c
> +++ b/drivers/gpio/gpio-ixp4xx.c
> @@ -11,6 +11,7 @@
>  #include <linux/irq.h>
>  #include <linux/irqdomain.h>
>  #include <linux/irqchip.h>
> +#include <linux/of_irq.h>
>  #include <linux/platform_device.h>
>  #include <linux/bitops.h>
>  /* Include that go away with DT transition */
> @@ -305,6 +306,7 @@ static int ixp4xx_gpio_probe(struct platform_device *pdev)
>  {
>         unsigned long flags;
>         struct device *dev = &pdev->dev;
> +       struct device_node *np = dev->of_node;
>         struct irq_domain *parent;
>         struct resource *res;
>         struct ixp4xx_gpio *g;
> @@ -381,11 +383,27 @@ static int ixp4xx_gpio_probe(struct platform_device *pdev)
>          * from IRQCHIP_DECLARE(), then use of_node_to_fwnode() to get
>          * the fwnode. For now we need this boardfile style code.
>          */

Is this comment still valid after this patch?  Or is this maybe
incomplete DT support (probing only)? If so it need clarifying.

> -       parent = ixp4xx_get_irq_domain();
> -       g->fwnode = irq_domain_alloc_fwnode(g->base);
> -       if (!g->fwnode) {
> -               dev_err(dev, "no domain base\n");
> -               return -ENODEV;
> +       if (np) {
> +               struct device_node *irq_parent;
> +
> +               irq_parent = of_irq_find_parent(np);
> +               if (!irq_parent) {
> +                       dev_err(dev, "no IRQ parent node\n");
> +                       return -ENODEV;
> +               }
> +               parent = irq_find_host(irq_parent);
> +               if (!parent) {
> +                       dev_err(dev, "no IRQ parent domain\n");
> +                       return -ENODEV;
> +               }
> +               g->fwnode = of_node_to_fwnode(np);
> +       } else {
> +               parent = ixp4xx_get_irq_domain();
> +               g->fwnode = irq_domain_alloc_fwnode(g->base);
> +               if (!g->fwnode) {
> +                       dev_err(dev, "no domain base\n");
> +                       return -ENODEV;
> +               }
>         }
>         g->domain = irq_domain_create_hierarchy(parent,
>                                                 IRQ_DOMAIN_FLAG_HIERARCHY,
> @@ -403,28 +421,31 @@ static int ixp4xx_gpio_probe(struct platform_device *pdev)
>          * After adding OF support, this is no longer needed: irqs
>          * will be allocated for the respective fwnodes.
>          */

Same with the comment here.

> -       for (i = 0; i < ARRAY_SIZE(ixp4xx_gpiomap); i++) {
> -               const struct ixp4xx_gpio_map *map = &ixp4xx_gpiomap[i];
> -               struct irq_fwspec fwspec;
> -
> -               fwspec.fwnode = g->fwnode;
> -               /* This is the hwirq for the GPIO line side of things */
> -               fwspec.param[0] = map->gpio_offset;
> -               fwspec.param[1] = IRQ_TYPE_EDGE_RISING;
> -               fwspec.param_count = 2;
> -               ret = __irq_domain_alloc_irqs(g->domain,
> -                                             -1, /* just pick something */
> -                                             1,
> -                                             NUMA_NO_NODE,
> -                                             &fwspec,
> -                                             false,
> -                                             NULL);
> -               if (ret < 0) {
> -                       irq_domain_free_fwnode(g->fwnode);
> -                       dev_err(dev,
> -                               "can not allocate irq for GPIO line %d parent hwirq %d in hierarchy domain: %d\n",
> -                               map->gpio_offset, map->parent_hwirq, ret);
> -                       return ret;
> +       if (!np) {
> +               for (i = 0; i < ARRAY_SIZE(ixp4xx_gpiomap); i++) {
> +                       const struct ixp4xx_gpio_map *map = &ixp4xx_gpiomap[i];
> +                       struct irq_fwspec fwspec;
> +
> +                       fwspec.fwnode = g->fwnode;
> +                       /* This is the hwirq for the GPIO line side of things */
> +                       fwspec.param[0] = map->gpio_offset;
> +                       fwspec.param[1] = IRQ_TYPE_EDGE_RISING;
> +                       fwspec.param_count = 2;
> +                       ret = __irq_domain_alloc_irqs(g->domain,
> +                                                     -1, /* just pick something */
> +                                                     1,
> +                                                     NUMA_NO_NODE,
> +                                                     &fwspec,
> +                                                     false,
> +                                                     NULL);
> +                       if (ret < 0) {
> +                               irq_domain_free_fwnode(g->fwnode);
> +                               dev_err(dev,
> +                                       "can not allocate irq for GPIO line %d parent hwirq %d in hierarchy domain: %d\n",
> +                                       map->gpio_offset, map->parent_hwirq,
> +                                       ret);
> +                               return ret;
> +                       }
>                 }
>         }
>
> @@ -434,9 +455,18 @@ static int ixp4xx_gpio_probe(struct platform_device *pdev)
>         return 0;
>  }
>
> +static const struct of_device_id ixp4xx_gpio_of_match[] = {
> +       {
> +               .compatible = "intel,ixp4xx-gpio",
> +       },
> +       {},
> +};
> +
> +
>  static struct platform_driver ixp4xx_gpio_driver = {
>         .driver = {
>                 .name           = "ixp4xx-gpio",
> +               .of_match_table = of_match_ptr(ixp4xx_gpio_of_match),
>         },
>         .probe = ixp4xx_gpio_probe,
>  };
> --
> 2.20.1
>

Bart

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply index

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-03 21:41 [PATCH 00/17 v1] ARM: ixp4xx: Modernize and DT support Linus Walleij
2019-02-03 21:41 ` [PATCH 01/17 v1] ARM: ixp4xx: Convert to MULTI_IRQ_HANDLER Linus Walleij
2019-02-03 21:41 ` [PATCH 02/17 v1] ARM: ixp4xx: Pass IRQ resource to beeper Linus Walleij
2019-02-03 21:41 ` [PATCH 03/17 v1] ARM: ixp4xx: Convert to SPARSE_IRQ Linus Walleij
2019-02-03 21:41 ` [PATCH 04/17 v1] irqchip: Add driver for IXP4xx Linus Walleij
2019-02-11 15:30   ` Marc Zyngier
2019-02-11 20:58     ` Linus Walleij
2019-02-11 22:11       ` Marc Zyngier
2019-02-18  7:06         ` khalasa
2019-02-18  7:16           ` Linus Walleij
2019-02-18  7:35             ` khalasa
2019-02-18  9:40             ` Arnd Bergmann
2019-02-18 12:03               ` khalasa
2019-02-18 12:44                 ` Arnd Bergmann
2019-02-19  6:51                   ` khalasa
2019-02-19  9:46                     ` Arnd Bergmann
2019-02-20  7:35                       ` khalasa
2019-02-18  9:18         ` Arnd Bergmann
2019-02-03 21:41 ` [PATCH 05/17 v1] gpio: ixp4xx: Add driver for the IXP4xx GPIO Linus Walleij
2019-02-06 16:03   ` Bartosz Golaszewski
2019-02-21  8:50     ` Linus Walleij
2019-02-03 21:41 ` [PATCH 06/17 v1] ARM: ixp4xx: Switch to use new IRQ+GPIO drivers Linus Walleij
2019-02-03 21:41 ` [PATCH 07/17 v1] clocksource/drivers/ixp4xx: Add driver Linus Walleij
2019-02-03 21:41 ` [PATCH 08/17 v1] ARM: ixp4xx: Switch to use new timer driver Linus Walleij
2019-02-03 21:41 ` [PATCH 09/17 v1] irqchip: ixp4xx: Add DT bindings Linus Walleij
2019-02-18 21:25   ` Rob Herring
2019-02-03 21:41 ` [PATCH 10/17 v1] irqchip: ixp4xx: Add OF initialization support Linus Walleij
2019-02-03 21:41 ` [PATCH 11/17 v1] clocksource/drivers/ixp4xx: Add DT bindings Linus Walleij
2019-02-18 21:26   ` Rob Herring
2019-02-18 22:10     ` Daniel Lezcano
2019-02-03 21:42 ` [PATCH 12/17 v1] clocksource/drivers/ixp4xx: Add OF initialization support Linus Walleij
2019-02-11 11:26   ` Daniel Lezcano
2019-02-03 21:42 ` [PATCH 13/17 v1] gpio: ixp4xx: Add DT bindings Linus Walleij
2019-02-06 16:05   ` Bartosz Golaszewski
2019-02-18 21:27   ` Rob Herring
2019-02-03 21:42 ` [PATCH 14/17 v1] gpio: ixp4xx: Add OF probing support Linus Walleij
2019-02-06 16:13   ` Bartosz Golaszewski [this message]
2019-02-21  8:55     ` Linus Walleij
2019-02-03 21:42 ` [PATCH 15/17 v1] ARM: ixp4xx: Add DT bindings Linus Walleij
2019-02-04 15:16   ` Rob Herring
2019-02-08 19:37     ` Linus Walleij
2019-02-03 21:42 ` [PATCH 16/17 v1] ARM: ixp4xx: Add device tree boot support Linus Walleij
2019-02-03 21:42 ` [PATCH 17/17 v1] RFC: ARM: dts: Add some initial IXP4xx device trees Linus Walleij

Reply instructions:

You may reply publically 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='CAMpxmJU+fmum=AP1_n0W4SaD0HuLPP67qTPO_n9WU-vWeNuSSw@mail.gmail.com' \
    --to=bgolaszewski@baylibre.com \
    --cc=arnd@arndb.de \
    --cc=kaloz@openwrt.org \
    --cc=khalasa@piap.pl \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=olof@lixom.net \
    --cc=tharvey@gateworks.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

Linux-ARM-Kernel Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-arm-kernel/0 linux-arm-kernel/git/0.git
	git clone --mirror https://lore.kernel.org/linux-arm-kernel/1 linux-arm-kernel/git/1.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-arm-kernel linux-arm-kernel/ https://lore.kernel.org/linux-arm-kernel \
		linux-arm-kernel@lists.infradead.org infradead-linux-arm-kernel@archiver.kernel.org
	public-inbox-index linux-arm-kernel


Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.infradead.lists.linux-arm-kernel


AGPL code for this site: git clone https://public-inbox.org/ public-inbox