Commit 4678a2d3 authored by John Garry's avatar John Garry Committed by Wei Xu
Browse files

bus: hisi_lpc: Use platform_device_register_full()



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: default avatarJohn Garry <john.garry@huawei.com>
Suggested-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: default avatarWei Xu <xuwei5@hisilicon.com>
parent e8cd6506
Loading
Loading
Loading
Loading
+32 −36
Original line number Diff line number Diff line
@@ -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,13 +503,29 @@ static int hisi_lpc_acpi_add_child(struct acpi_device *child, void *data)
		/* ipmi */
		{
			.hid = "IPI0001",
			.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",
			.pdevinfo = (struct platform_device_info []) {
				{
					.parent = hostdev,
					.fwnode = acpi_fwnode_handle(child),
					.name = "serial8250",
			.pdata = (struct plat_serial8250_port []) {
					.id = PLATFORM_DEVID_AUTO,
					.res = res,
					.num_res = num_res,
					.data = (struct plat_serial8250_port []) {
						{
							.iobase = res->start,
							.uartclk = 1843200,
@@ -520,13 +534,14 @@ static int hisi_lpc_acpi_add_child(struct acpi_device *child, void *data)
						},
						{}
					},
			.pdata_size = 2 *
				sizeof(struct plat_serial8250_port),
					.size_data =  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;
}

/*