All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiang Qiu <qiujiang@huawei.com>
To: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Linus Walleij <linus.walleij@linaro.org>,
	Alexandre Courbot <gnurou@gmail.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-gpio@vger.kernel.org" <linux-gpio@vger.kernel.org>,
	"linux-acpi@vger.kernel.org" <linux-acpi@vger.kernel.org>,
	linuxarm@huawei.com, haifeng.wei@huawei.com,
	charles.chenxin@huawei.com
Subject: Re: [PATCH v3 1/2] gpio: designware: switch device node to fwnode
Date: Thu, 25 Feb 2016 19:58:16 +0800	[thread overview]
Message-ID: <56CEEC58.9050303@huawei.com> (raw)
In-Reply-To: <CAHp75Vd4dNJpuiMMizYbOpv+pZd30RcNA+kPoF6_4Vukk62iFw@mail.gmail.com>

在 2016/2/24 21:46, Andy Shevchenko 写道:
> On Wed, Feb 24, 2016 at 2:33 PM, qiujiang <qiujiang@huawei.com> wrote:
>> This patch switch device node to fwnode in dwapb_port_property,
>> so as to apply a unified data structure for DT and ACPI.
>>
>> This change also needs to be done in intel_quark_i2c_gpio driver,
>> since it depends on gpio-dwapb driver.
>>
>> Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
>> Signed-off-by: qiujiang <qiujiang@huawei.com>
> 
> Yes, something like this.
> Though I have questions:
>  - why do you use fwnode_*() instead of device_property_*() calls?
> What prevents us to move to device property API directly?
Yes, it looks more reasonable by using devce_property. Howerver,
device_get_child_node_count was used here to find each child node. This
API output the fwnode_handle for each child node directly, but device
property APIs need 'dev' data instead. Actually, the effects of fwnode_*()
and device_*() are the same. So, I used fwnode_*() APIs here.

If there is any other more way to traverse child nodes, let me know.
Thank you.
> 
>> -       gpio->domain = irq_domain_add_linear(node, ngpio,
>> -                                            &irq_generic_chip_ops, gpio);
>> +       gpio->domain = irq_domain_create_linear(fwnode, ngpio,
>> +                                                &irq_generic_chip_ops, gpio);
> 
> Are they equivalent?
Yes, they are equivalent.
> 
>> @@ -415,7 +415,7 @@ static int dwapb_gpio_add_port(struct dwapb_gpio *gpio,
>>         }
>>
>>  #ifdef CONFIG_OF_GPIO
>> -       port->gc.of_node = pp->node;
>> +       port->gc.of_node = to_of_node(pp->fwnode);
> 
> If fwnode is not OF one?
> Perhaps, something like ... = is_of_node() ? to_of_node() : NULL;
> 
The way you suggested is more resonable, I will fixed it in next version.
> 
>> -       node = dev->of_node;
>> -       if (!IS_ENABLED(CONFIG_OF_GPIO) || !node)
>> +       if (!IS_ENABLED(CONFIG_OF_GPIO) || !(dev->of_node))
>>                 return ERR_PTR(-ENODEV);
> 
> So, since you converted to fwnode, do you still need this check?
>
Although this patch coverted device node to fwnode, only DTs binding was
supported here, and patch2 support ACPI will remove this check.
>>
>> -       nports = of_get_child_count(node);
>> +       nports = device_get_child_node_count(dev);
>>         if (nports == 0)
>>                 return ERR_PTR(-ENODEV);
> 
> ...I think this one fail if it will not found any child.
This one fail? yes, it will return to failure.
I am not very clear here.
> 
>> -               if (of_property_read_u32(port_np, "reg", &pp->idx) ||
>> +               if (fwnode_property_read_u32(fwnode, "reg", &pp->idx) ||
> 
> device_property_*() ?
> 
>>                     pp->idx >= DWAPB_MAX_PORTS) {
>>                         dev_err(dev, "missing/invalid port index for %s\n",
>> -                               port_np->full_name);
>> +                               to_of_node(fwnode)->full_name);
> 
> If it's not OF?
This is checked above, and patch2 will remove it.
> 
>> -               if (of_property_read_u32(port_np, "snps,nr-gpios",
>> +               if (fwnode_property_read_u32(fwnode, "snps,nr-gpios",
> 
> Ditto.
> 
>>                                          &pp->ngpio)) {
>>                         dev_info(dev, "failed to get number of gpios for %s\n",
>> -                                port_np->full_name);
>> +                                to_of_node(fwnode)->full_name);
> 
> Ditto.
> 
>>                 if (pp->idx == 0 &&
>> -                   of_property_read_bool(port_np, "interrupt-controller")) {
>> -                       pp->irq = irq_of_parse_and_map(port_np, 0);
>> +                       of_property_read_bool(to_of_node(fwnode),
>> +                               "interrupt-controller")) {
> 
> device_property_*() ?
> 
>> +                       pp->irq = irq_of_parse_and_map(to_of_node(fwnode), 0);
>>                         if (!pp->irq) {
>>                                 dev_warn(dev, "no irq for bank %s\n",
>> -                                        port_np->full_name);
>> +                                        to_of_node(fwnode)->full_name);
>>                         }
>>                 }
>>
>>                 pp->irq_shared  = false;
>>                 pp->gpio_base   = -1;
>> -               pp->name        = port_np->full_name;
>> +               pp->name = to_of_node(fwnode)->full_name;
>>         }
>>
>>         return pdata;
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

WARNING: multiple messages have this Message-ID (diff)
From: Jiang Qiu <qiujiang@huawei.com>
To: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Linus Walleij <linus.walleij@linaro.org>,
	Alexandre Courbot <gnurou@gmail.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-gpio@vger.kernel.org" <linux-gpio@vger.kernel.org>,
	"linux-acpi@vger.kernel.org" <linux-acpi@vger.kernel.org>,
	<linuxarm@huawei.com>, <haifeng.wei@huawei.com>,
	<charles.chenxin@huawei.com>
Subject: Re: [PATCH v3 1/2] gpio: designware: switch device node to fwnode
Date: Thu, 25 Feb 2016 19:58:16 +0800	[thread overview]
Message-ID: <56CEEC58.9050303@huawei.com> (raw)
In-Reply-To: <CAHp75Vd4dNJpuiMMizYbOpv+pZd30RcNA+kPoF6_4Vukk62iFw@mail.gmail.com>

在 2016/2/24 21:46, Andy Shevchenko 写道:
> On Wed, Feb 24, 2016 at 2:33 PM, qiujiang <qiujiang@huawei.com> wrote:
>> This patch switch device node to fwnode in dwapb_port_property,
>> so as to apply a unified data structure for DT and ACPI.
>>
>> This change also needs to be done in intel_quark_i2c_gpio driver,
>> since it depends on gpio-dwapb driver.
>>
>> Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
>> Signed-off-by: qiujiang <qiujiang@huawei.com>
> 
> Yes, something like this.
> Though I have questions:
>  - why do you use fwnode_*() instead of device_property_*() calls?
> What prevents us to move to device property API directly?
Yes, it looks more reasonable by using devce_property. Howerver,
device_get_child_node_count was used here to find each child node. This
API output the fwnode_handle for each child node directly, but device
property APIs need 'dev' data instead. Actually, the effects of fwnode_*()
and device_*() are the same. So, I used fwnode_*() APIs here.

If there is any other more way to traverse child nodes, let me know.
Thank you.
> 
>> -       gpio->domain = irq_domain_add_linear(node, ngpio,
>> -                                            &irq_generic_chip_ops, gpio);
>> +       gpio->domain = irq_domain_create_linear(fwnode, ngpio,
>> +                                                &irq_generic_chip_ops, gpio);
> 
> Are they equivalent?
Yes, they are equivalent.
> 
>> @@ -415,7 +415,7 @@ static int dwapb_gpio_add_port(struct dwapb_gpio *gpio,
>>         }
>>
>>  #ifdef CONFIG_OF_GPIO
>> -       port->gc.of_node = pp->node;
>> +       port->gc.of_node = to_of_node(pp->fwnode);
> 
> If fwnode is not OF one?
> Perhaps, something like ... = is_of_node() ? to_of_node() : NULL;
> 
The way you suggested is more resonable, I will fixed it in next version.
> 
>> -       node = dev->of_node;
>> -       if (!IS_ENABLED(CONFIG_OF_GPIO) || !node)
>> +       if (!IS_ENABLED(CONFIG_OF_GPIO) || !(dev->of_node))
>>                 return ERR_PTR(-ENODEV);
> 
> So, since you converted to fwnode, do you still need this check?
>
Although this patch coverted device node to fwnode, only DTs binding was
supported here, and patch2 support ACPI will remove this check.
>>
>> -       nports = of_get_child_count(node);
>> +       nports = device_get_child_node_count(dev);
>>         if (nports == 0)
>>                 return ERR_PTR(-ENODEV);
> 
> ...I think this one fail if it will not found any child.
This one fail? yes, it will return to failure.
I am not very clear here.
> 
>> -               if (of_property_read_u32(port_np, "reg", &pp->idx) ||
>> +               if (fwnode_property_read_u32(fwnode, "reg", &pp->idx) ||
> 
> device_property_*() ?
> 
>>                     pp->idx >= DWAPB_MAX_PORTS) {
>>                         dev_err(dev, "missing/invalid port index for %s\n",
>> -                               port_np->full_name);
>> +                               to_of_node(fwnode)->full_name);
> 
> If it's not OF?
This is checked above, and patch2 will remove it.
> 
>> -               if (of_property_read_u32(port_np, "snps,nr-gpios",
>> +               if (fwnode_property_read_u32(fwnode, "snps,nr-gpios",
> 
> Ditto.
> 
>>                                          &pp->ngpio)) {
>>                         dev_info(dev, "failed to get number of gpios for %s\n",
>> -                                port_np->full_name);
>> +                                to_of_node(fwnode)->full_name);
> 
> Ditto.
> 
>>                 if (pp->idx == 0 &&
>> -                   of_property_read_bool(port_np, "interrupt-controller")) {
>> -                       pp->irq = irq_of_parse_and_map(port_np, 0);
>> +                       of_property_read_bool(to_of_node(fwnode),
>> +                               "interrupt-controller")) {
> 
> device_property_*() ?
> 
>> +                       pp->irq = irq_of_parse_and_map(to_of_node(fwnode), 0);
>>                         if (!pp->irq) {
>>                                 dev_warn(dev, "no irq for bank %s\n",
>> -                                        port_np->full_name);
>> +                                        to_of_node(fwnode)->full_name);
>>                         }
>>                 }
>>
>>                 pp->irq_shared  = false;
>>                 pp->gpio_base   = -1;
>> -               pp->name        = port_np->full_name;
>> +               pp->name = to_of_node(fwnode)->full_name;
>>         }
>>
>>         return pdata;
> 
> 

  reply	other threads:[~2016-02-25 11:58 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-24 12:33 [PATCH v3 0/2] gpio: designware: add gpio-signaled acpi events support for power button qiujiang
2016-02-24 12:33 ` qiujiang
2016-02-24 12:33 ` [PATCH v3 1/2] gpio: designware: switch device node to fwnode qiujiang
2016-02-24 12:33   ` qiujiang
2016-02-24 13:46   ` Andy Shevchenko
2016-02-25 11:58     ` Jiang Qiu [this message]
2016-02-25 11:58       ` Jiang Qiu
2016-02-25 13:43       ` Andy Shevchenko
2016-02-25 13:43         ` Andy Shevchenko
2016-02-27  7:15         ` Jiang Qiu
2016-02-27  7:15           ` Jiang Qiu
2016-02-29 10:46           ` Andy Shevchenko
2016-02-24 12:33 ` [PATCH v3 2/2] gpio: designware: add gpio-signaled acpi events support for power button qiujiang
2016-02-24 12:33   ` qiujiang
2016-02-24 13:49   ` Andy Shevchenko
2016-02-25 12:13     ` Jiang Qiu
2016-02-25 12:13       ` Jiang Qiu

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=56CEEC58.9050303@huawei.com \
    --to=qiujiang@huawei.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=charles.chenxin@huawei.com \
    --cc=gnurou@gmail.com \
    --cc=haifeng.wei@huawei.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=mika.westerberg@linux.intel.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.