Hi Mika,

 /*
@@ -469,8 +472,11 @@ static int hisi_lpc_acpi_probe(struct device *hostdev)
        struct acpi_device *child;
        int size, ret, count = 0, cell_num = 0;

-       list_for_each_entry(child, &adev->children, node)
+       list_for_each_entry(child, &adev->children, node) {
+               if (acpi_is_pnp_device(child))
+                       continue;
                cell_num++;
+       }

        /* allocate the mfd cell and companion ACPI info, one per child */
        size = sizeof(*mfd_cells) + sizeof(*hisi_lpc_mfd_cells);
@@ -492,6 +498,9 @@ static int hisi_lpc_acpi_probe(struct device *hostdev)
                        .pnpid = pnpid,
                };

+               if (acpi_is_pnp_device(child))
+                       continue;
+
                /*
                 * For any instances of this host controller (Hip06 and Hip07
                 * are the only chipsets), we would not have multiple slaves
@@ -523,6 +532,33 @@ static int hisi_lpc_acpi_probe(struct device *hostdev)
                return ret;
        }

+       list_for_each_entry(child, &adev->children, node) {
+               struct pnp_resource *pnp_res;
+               struct pnp_dev *pnp_dev;
+               int rc;
+
+               if (!acpi_is_pnp_device(child))
+                       continue;
+
+               pnp_dev = child->driver_data;

...or better yet a PNP helper function that makes this more
understandable.

Sure, but I would not say the helper function would do the same, due to to (ab)use of driver_data element. As I mentioned in patch 1/2, I couldn't see a current method for the acpi_device to reference the PNP device.


+
+               /*
+                * Prior to adding the device, we need to translate the
+                * resources to logical PIO addresses.
+                */
+               list_for_each_entry(pnp_res, &pnp_dev->resources, list) {
+                       struct resource *res = &pnp_res->res;
+
+                       if (res->flags | IORESOURCE_IO)

I think you should use

        if (resource_type(res) == IORESOURCE_IO)

instead.

Yes, since I don't know the difference between logical OR and logical AND :)


+                               hisi_lpc_acpi_xlat_io_res(child, adev, res);
+               }
+               rc = pnp_add_device(pnp_dev);
+               if (rc) {
+                       put_device(&pnp_dev->dev);
+                       return rc;
+               }
+       }
+

Cheers,
John

        return 0;
 }

--
1.9.1

.



Reply via email to