diff options
author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2013-01-29 13:59:00 +0100 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2013-01-29 13:59:00 +0100 |
commit | 8b4e2fa4ff72ba2c9f01af8def15d4c4eeeeed64 (patch) | |
tree | a2ebfb0b6aebb2fe07821fe862a79709be3ebc17 /drivers/acpi/acpi_platform.c | |
parent | 64e94e7e0ffb20ee11a596aa04fcdeefb33e000d (diff) | |
parent | e375325ce55eb841ccda54a4472cf3b0139ea5f2 (diff) | |
download | op-kernel-dev-8b4e2fa4ff72ba2c9f01af8def15d4c4eeeeed64.zip op-kernel-dev-8b4e2fa4ff72ba2c9f01af8def15d4c4eeeeed64.tar.gz |
Merge branch 'acpi-lpss' into acpi-cleanup
The following commits depend on the 'acpi-lpss' material.
Diffstat (limited to 'drivers/acpi/acpi_platform.c')
-rw-r--r-- | drivers/acpi/acpi_platform.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c index db129b9..2d1fb4c 100644 --- a/drivers/acpi/acpi_platform.c +++ b/drivers/acpi/acpi_platform.c @@ -13,6 +13,7 @@ #include <linux/acpi.h> #include <linux/device.h> +#include <linux/err.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/platform_device.h> @@ -21,17 +22,34 @@ ACPI_MODULE_NAME("platform"); +static int acpi_create_platform_clks(struct acpi_device *adev) +{ + static struct platform_device *pdev; + + /* Create Lynxpoint LPSS clocks */ + if (!pdev && !strncmp(acpi_device_hid(adev), "INT33C", 6)) { + pdev = platform_device_register_simple("clk-lpt", -1, NULL, 0); + if (IS_ERR(pdev)) + return PTR_ERR(pdev); + } + + return 0; +} + /** * acpi_create_platform_device - Create platform device for ACPI device node * @adev: ACPI device node to create a platform device for. + * @flags: ACPI_PLATFORM_* flags that affect the creation of the platform + * devices. * * 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 * resources and returns a pointer to it. Otherwise, return %NULL. * - * The platform device's name will be taken from the @adev's _HID and _UID. + * Name of the platform device will be the same as @adev's. */ -struct platform_device *acpi_create_platform_device(struct acpi_device *adev) +struct platform_device *acpi_create_platform_device(struct acpi_device *adev, + unsigned long flags) { struct platform_device *pdev = NULL; struct acpi_device *acpi_parent; @@ -41,6 +59,11 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev) struct resource *resources; int count; + if ((flags & ACPI_PLATFORM_CLK) && acpi_create_platform_clks(adev)) { + dev_err(&adev->dev, "failed to create clocks\n"); + return NULL; + } + /* If the ACPI node already has a physical device attached, skip it. */ if (adev->physical_node_count) return NULL; |