Re: [RFC PATCH 2/2] HISI LPC: Add PNP device support

From: John Garry
Date: Fri Apr 20 2018 - 09:36:48 EST


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

.