bus: hisi_lpc: Use platform_device_register_full()
authorJohn Garry <john.garry@huawei.com>
Mon, 5 Sep 2022 08:23:06 +0000 (16:23 +0800)
committerWei Xu <xuwei5@hisilicon.com>
Thu, 8 Sep 2022 02:27:29 +0000 (02:27 +0000)
The code to create the child platform device is essentially the same as
what platform_device_register_full() does, so change over to use
that same function to reduce duplication.

Signed-off-by: John Garry <john.garry@huawei.com>
Suggested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Wei Xu <xuwei5@hisilicon.com>
drivers/bus/hisi_lpc.c

index 74f4448bff9db82d28821d9f40a45b3ca549d353..5b65a48f17e7cec90823b682ca2313dafbd917c7 100644 (file)
@@ -472,9 +472,7 @@ static int hisi_lpc_acpi_clear_enumerated(struct acpi_device *adev, void *not_us
 
 struct hisi_lpc_acpi_cell {
        const char *hid;
-       const char *name;
-       void *pdata;
-       size_t pdata_size;
+       const struct platform_device_info *pdevinfo;
 };
 
 static void hisi_lpc_acpi_remove(struct device *hostdev)
@@ -505,28 +503,45 @@ static int hisi_lpc_acpi_add_child(struct acpi_device *child, void *data)
                /* ipmi */
                {
                        .hid = "IPI0001",
-                       .name = "hisi-lpc-ipmi",
+                       .pdevinfo = (struct platform_device_info []) {
+                               {
+                                       .parent = hostdev,
+                                       .fwnode = acpi_fwnode_handle(child),
+                                       .name = "hisi-lpc-ipmi",
+                                       .id = PLATFORM_DEVID_AUTO,
+                                       .res = res,
+                                       .num_res = num_res,
+                               },
+                       },
                },
                /* 8250-compatible uart */
                {
                        .hid = "HISI1031",
-                       .name = "serial8250",
-                       .pdata = (struct plat_serial8250_port []) {
+                       .pdevinfo = (struct platform_device_info []) {
                                {
-                                       .iobase = res->start,
-                                       .uartclk = 1843200,
-                                       .iotype = UPIO_PORT,
-                                       .flags = UPF_BOOT_AUTOCONF,
+                                       .parent = hostdev,
+                                       .fwnode = acpi_fwnode_handle(child),
+                                       .name = "serial8250",
+                                       .id = PLATFORM_DEVID_AUTO,
+                                       .res = res,
+                                       .num_res = num_res,
+                                       .data = (struct plat_serial8250_port []) {
+                                               {
+                                                       .iobase = res->start,
+                                                       .uartclk = 1843200,
+                                                       .iotype = UPIO_PORT,
+                                                       .flags = UPF_BOOT_AUTOCONF,
+                                               },
+                                               {}
+                                       },
+                                       .size_data =  2 * sizeof(struct plat_serial8250_port),
                                },
-                               {}
                        },
-                       .pdata_size = 2 *
-                               sizeof(struct plat_serial8250_port),
                },
                {}
        };
 
-       for (; cell && cell->name; cell++) {
+       for (; cell && cell->hid; cell++) {
                if (!strcmp(cell->hid, hid)) {
                        found = true;
                        break;
@@ -540,31 +555,12 @@ static int hisi_lpc_acpi_add_child(struct acpi_device *child, void *data)
                return 0;
        }
 
-       pdev = platform_device_alloc(cell->name, PLATFORM_DEVID_AUTO);
-       if (!pdev)
-               return -ENOMEM;
-
-       pdev->dev.parent = hostdev;
-       ACPI_COMPANION_SET(&pdev->dev, child);
-
-       ret = platform_device_add_resources(pdev, res, num_res);
-       if (ret)
-               goto fail;
-
-       ret = platform_device_add_data(pdev, cell->pdata, cell->pdata_size);
-       if (ret)
-               goto fail;
-
-       ret = platform_device_add(pdev);
-       if (ret)
-               goto fail;
+       pdev = platform_device_register_full(cell->pdevinfo);
+       if (IS_ERR(pdev))
+               return PTR_ERR(pdev);
 
        acpi_device_set_enumerated(child);
        return 0;
-
-fail:
-       platform_device_put(pdev);
-       return ret;
 }
 
 /*