summaryrefslogtreecommitdiffstats
path: root/drivers/acpi/acpi_platform.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-01-29 13:59:00 +0100
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-01-29 13:59:00 +0100
commit8b4e2fa4ff72ba2c9f01af8def15d4c4eeeeed64 (patch)
treea2ebfb0b6aebb2fe07821fe862a79709be3ebc17 /drivers/acpi/acpi_platform.c
parent64e94e7e0ffb20ee11a596aa04fcdeefb33e000d (diff)
parente375325ce55eb841ccda54a4472cf3b0139ea5f2 (diff)
downloadop-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.c27
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;
OpenPOWER on IntegriCloud