summaryrefslogtreecommitdiff
path: root/drivers/acpi/acpi_platform.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-02-11 12:21:27 (GMT)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-02-11 12:21:27 (GMT)
commit17b1639b30e080dc577cbffe7a08d063708ec789 (patch)
tree3185a9a556b032504e753a536e693a5edfc413c3 /drivers/acpi/acpi_platform.c
parenta9834cb205bf0d2b52da7f603f43b62a09f503b7 (diff)
parente375325ce55eb841ccda54a4472cf3b0139ea5f2 (diff)
downloadlinux-fsl-qoriq-17b1639b30e080dc577cbffe7a08d063708ec789.tar.xz
Merge branch 'acpi-lpss'
* acpi-lpss: ACPI / platform: create LPSS clocks if Lynxpoint devices are found during scan clk: x86: add support for Lynxpoint LPSS clocks x86: add support for Intel Low Power Subsystem ACPI / platform: fix comment about the platform device name ACPI: add support for CSRT table
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;