Thread (10 messages) 10 messages, 2 authors, 2016-02-29

Re: [PATCH v3 1/2] gpio: designware: switch device node to fwnode

From: Andy Shevchenko <hidden>
Date: 2016-02-24 13:46:25
Also in: linux-acpi, lkml

On Wed, Feb 24, 2016 at 2:33 PM, qiujiang [off-list ref] 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 <redacted>
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?
-       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?
quoted hunk ↗ jump to hunk
@@ -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;

-       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?
-       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.
-               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?
-               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;

-- 
With Best Regards,
Andy Shevchenko
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help