Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3022f4de authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

Merge branch 'acpi-platform' into acpi-lpss

parents ed3a872e 8ce62f85
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -305,12 +305,14 @@ static int acpi_lpss_create_device(struct acpi_device *adev,
	struct lpss_private_data *pdata;
	struct resource_list_entry *rentry;
	struct list_head resource_list;
	struct platform_device *pdev;
	int ret;

	dev_desc = (struct lpss_device_desc *)id->driver_data;
	if (!dev_desc)
		return acpi_create_platform_device(adev, id);

	if (!dev_desc) {
		pdev = acpi_create_platform_device(adev);
		return IS_ERR_OR_NULL(pdev) ? PTR_ERR(pdev) : 1;
	}
	pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
	if (!pdata)
		return -ENOMEM;
@@ -360,10 +362,13 @@ static int acpi_lpss_create_device(struct acpi_device *adev,
		dev_desc->setup(pdata);

	adev->driver_data = pdata;
	ret = acpi_create_platform_device(adev, id);
	if (ret > 0)
		return ret;
	pdev = acpi_create_platform_device(adev);
	if (!IS_ERR_OR_NULL(pdev)) {
		device_enable_async_suspend(&pdev->dev);
		return 1;
	}

	ret = PTR_ERR(pdev);
	adev->driver_data = NULL;

 err_out:
+18 −11
Original line number Diff line number Diff line
@@ -32,6 +32,10 @@ static const struct acpi_device_id acpi_platform_device_ids[] = {
	{ "ACPI0003" },
	{ "VPC2004" },
	{ "BCM4752" },
	{ "LNV4752" },
	{ "BCM2E1A" },
	{ "BCM2E39" },
	{ "BCM2E3D" },

	/* Intel Smart Sound Technology */
	{ "INT33C8" },
@@ -43,7 +47,6 @@ static const struct acpi_device_id acpi_platform_device_ids[] = {
/**
 * acpi_create_platform_device - Create platform device for ACPI device node
 * @adev: ACPI device node to create a platform device for.
 * @id: ACPI device ID used to match @adev.
 *
 * Check if the given @adev can be represented as a platform device and, if
 * that's the case, create and register a platform device, populate its common
@@ -51,8 +54,7 @@ static const struct acpi_device_id acpi_platform_device_ids[] = {
 *
 * Name of the platform device will be the same as @adev's.
 */
int acpi_create_platform_device(struct acpi_device *adev,
				const struct acpi_device_id *id)
struct platform_device *acpi_create_platform_device(struct acpi_device *adev)
{
	struct platform_device *pdev = NULL;
	struct acpi_device *acpi_parent;
@@ -64,19 +66,19 @@ int acpi_create_platform_device(struct acpi_device *adev,

	/* If the ACPI node already has a physical device attached, skip it. */
	if (adev->physical_node_count)
		return 0;
		return NULL;

	INIT_LIST_HEAD(&resource_list);
	count = acpi_dev_get_resources(adev, &resource_list, NULL, NULL);
	if (count < 0) {
		return 0;
		return NULL;
	} else if (count > 0) {
		resources = kmalloc(count * sizeof(struct resource),
				    GFP_KERNEL);
		if (!resources) {
			dev_err(&adev->dev, "No memory for resources\n");
			acpi_dev_free_resource_list(&resource_list);
			return -ENOMEM;
			return ERR_PTR(-ENOMEM);
		}
		count = 0;
		list_for_each_entry(rentry, &resource_list, node)
@@ -113,22 +115,27 @@ int acpi_create_platform_device(struct acpi_device *adev,
	pdevinfo.num_res = count;
	pdevinfo.acpi_node.companion = adev;
	pdev = platform_device_register_full(&pdevinfo);
	if (IS_ERR(pdev)) {
	if (IS_ERR(pdev))
		dev_err(&adev->dev, "platform device creation failed: %ld\n",
			PTR_ERR(pdev));
		pdev = NULL;
	} else {
	else
		dev_dbg(&adev->dev, "created platform device %s\n",
			dev_name(&pdev->dev));
	}

	kfree(resources);
	return pdev;
}

static int acpi_platform_attach(struct acpi_device *adev,
				const struct acpi_device_id *id)
{
	acpi_create_platform_device(adev);
	return 1;
}

static struct acpi_scan_handler platform_handler = {
	.ids = acpi_platform_device_ids,
	.attach = acpi_create_platform_device,
	.attach = acpi_platform_attach,
};

void __init acpi_platform_init(void)
+1 −2
Original line number Diff line number Diff line
@@ -180,8 +180,7 @@ static inline void suspend_nvs_restore(void) {}
  -------------------------------------------------------------------------- */
struct platform_device;

int acpi_create_platform_device(struct acpi_device *adev,
				const struct acpi_device_id *id);
struct platform_device *acpi_create_platform_device(struct acpi_device *adev);

/*--------------------------------------------------------------------------
					Video