diff options
author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-05-25 14:41:02 +0200 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-05-25 14:41:02 +0200 |
commit | 3022f4de491c096650d55ae9d562a9c811830724 (patch) | |
tree | 928514c1b7c423ed130af2214bed69008d14d3ee /drivers/acpi/acpi_platform.c | |
parent | ACPI / LPSS: support for fractional divider clock (diff) | |
parent | ACPI / platform / LPSS: Enable async suspend/resume of LPSS devices (diff) | |
download | linux-3022f4de491c096650d55ae9d562a9c811830724.tar.xz linux-3022f4de491c096650d55ae9d562a9c811830724.zip |
Merge branch 'acpi-platform' into acpi-lpss
Diffstat (limited to 'drivers/acpi/acpi_platform.c')
-rw-r--r-- | drivers/acpi/acpi_platform.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c index dbfe49e5fd63..9f7bcfdf18ef 100644 --- a/drivers/acpi/acpi_platform.c +++ b/drivers/acpi/acpi_platform.c @@ -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) |