aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
authorHeikki Krogerus <heikki.krogerus@linux.intel.com>2016-11-03 10:21:26 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2016-11-09 18:30:29 -0500
commit1571875beecd5de9657f73931449bda1b1329b6f (patch)
tree741b15df356c818ca8f2e75cc2565c94d2ee6b33 /drivers/acpi
parentb60e4ea4a400bde8a4811f94b84a9bb65f81b677 (diff)
ACPI / platform: Add support for build-in properties
We have a couple of drivers, acpi_apd.c and acpi_lpss.c, that need to pass extra build-in properties to the devices they create. Previously the drivers added those properties to the struct device which is member of the struct acpi_device, but that does not work. Those properties need to be assigned to the struct device of the platform device instead in order for them to become available to the drivers. To fix this, this patch changes acpi_create_platform_device function to take struct property_entry pointer as parameter. Fixes: 20a875e2e86e (serial: 8250_dw: Add quirk for APM X-Gene SoC) Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Tested-by: Yazen Ghannam <yazen.ghannam@amd.com> Tested-by: Jérôme de Bretagne <jerome.debretagne@gmail.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/acpi_apd.c10
-rw-r--r--drivers/acpi/acpi_lpss.c10
-rw-r--r--drivers/acpi/acpi_platform.c5
-rw-r--r--drivers/acpi/dptf/int340x_thermal.c4
-rw-r--r--drivers/acpi/scan.c2
5 files changed, 11 insertions, 20 deletions
diff --git a/drivers/acpi/acpi_apd.c b/drivers/acpi/acpi_apd.c
index 5f112d811e42..5959ed996a75 100644
--- a/drivers/acpi/acpi_apd.c
+++ b/drivers/acpi/acpi_apd.c
@@ -117,7 +117,7 @@ static int acpi_apd_create_device(struct acpi_device *adev,
117 int ret; 117 int ret;
118 118
119 if (!dev_desc) { 119 if (!dev_desc) {
120 pdev = acpi_create_platform_device(adev); 120 pdev = acpi_create_platform_device(adev, NULL);
121 return IS_ERR_OR_NULL(pdev) ? PTR_ERR(pdev) : 1; 121 return IS_ERR_OR_NULL(pdev) ? PTR_ERR(pdev) : 1;
122 } 122 }
123 123
@@ -134,14 +134,8 @@ static int acpi_apd_create_device(struct acpi_device *adev,
134 goto err_out; 134 goto err_out;
135 } 135 }
136 136
137 if (dev_desc->properties) {
138 ret = device_add_properties(&adev->dev, dev_desc->properties);
139 if (ret)
140 goto err_out;
141 }
142
143 adev->driver_data = pdata; 137 adev->driver_data = pdata;
144 pdev = acpi_create_platform_device(adev); 138 pdev = acpi_create_platform_device(adev, dev_desc->properties);
145 if (!IS_ERR_OR_NULL(pdev)) 139 if (!IS_ERR_OR_NULL(pdev))
146 return 1; 140 return 1;
147 141
diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
index 552010288135..373657f7e35a 100644
--- a/drivers/acpi/acpi_lpss.c
+++ b/drivers/acpi/acpi_lpss.c
@@ -395,7 +395,7 @@ static int acpi_lpss_create_device(struct acpi_device *adev,
395 395
396 dev_desc = (const struct lpss_device_desc *)id->driver_data; 396 dev_desc = (const struct lpss_device_desc *)id->driver_data;
397 if (!dev_desc) { 397 if (!dev_desc) {
398 pdev = acpi_create_platform_device(adev); 398 pdev = acpi_create_platform_device(adev, NULL);
399 return IS_ERR_OR_NULL(pdev) ? PTR_ERR(pdev) : 1; 399 return IS_ERR_OR_NULL(pdev) ? PTR_ERR(pdev) : 1;
400 } 400 }
401 pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); 401 pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
@@ -451,14 +451,8 @@ static int acpi_lpss_create_device(struct acpi_device *adev,
451 goto err_out; 451 goto err_out;
452 } 452 }
453 453
454 if (dev_desc->properties) {
455 ret = device_add_properties(&adev->dev, dev_desc->properties);
456 if (ret)
457 goto err_out;
458 }
459
460 adev->driver_data = pdata; 454 adev->driver_data = pdata;
461 pdev = acpi_create_platform_device(adev); 455 pdev = acpi_create_platform_device(adev, dev_desc->properties);
462 if (!IS_ERR_OR_NULL(pdev)) { 456 if (!IS_ERR_OR_NULL(pdev)) {
463 return 1; 457 return 1;
464 } 458 }
diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c
index 159f7f19abce..56e70da83c6c 100644
--- a/drivers/acpi/acpi_platform.c
+++ b/drivers/acpi/acpi_platform.c
@@ -33,6 +33,7 @@ static const struct acpi_device_id forbidden_id_list[] = {
33/** 33/**
34 * acpi_create_platform_device - Create platform device for ACPI device node 34 * acpi_create_platform_device - Create platform device for ACPI device node
35 * @adev: ACPI device node to create a platform device for. 35 * @adev: ACPI device node to create a platform device for.
36 * @properties: Optional collection of build-in properties.
36 * 37 *
37 * Check if the given @adev can be represented as a platform device and, if 38 * Check if the given @adev can be represented as a platform device and, if
38 * that's the case, create and register a platform device, populate its common 39 * that's the case, create and register a platform device, populate its common
@@ -40,7 +41,8 @@ static const struct acpi_device_id forbidden_id_list[] = {
40 * 41 *
41 * Name of the platform device will be the same as @adev's. 42 * Name of the platform device will be the same as @adev's.
42 */ 43 */
43struct platform_device *acpi_create_platform_device(struct acpi_device *adev) 44struct platform_device *acpi_create_platform_device(struct acpi_device *adev,
45 struct property_entry *properties)
44{ 46{
45 struct platform_device *pdev = NULL; 47 struct platform_device *pdev = NULL;
46 struct platform_device_info pdevinfo; 48 struct platform_device_info pdevinfo;
@@ -88,6 +90,7 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev)
88 pdevinfo.res = resources; 90 pdevinfo.res = resources;
89 pdevinfo.num_res = count; 91 pdevinfo.num_res = count;
90 pdevinfo.fwnode = acpi_fwnode_handle(adev); 92 pdevinfo.fwnode = acpi_fwnode_handle(adev);
93 pdevinfo.properties = properties;
91 94
92 if (acpi_dma_supported(adev)) 95 if (acpi_dma_supported(adev))
93 pdevinfo.dma_mask = DMA_BIT_MASK(32); 96 pdevinfo.dma_mask = DMA_BIT_MASK(32);
diff --git a/drivers/acpi/dptf/int340x_thermal.c b/drivers/acpi/dptf/int340x_thermal.c
index 33505c651f62..86364097e236 100644
--- a/drivers/acpi/dptf/int340x_thermal.c
+++ b/drivers/acpi/dptf/int340x_thermal.c
@@ -34,11 +34,11 @@ static int int340x_thermal_handler_attach(struct acpi_device *adev,
34 const struct acpi_device_id *id) 34 const struct acpi_device_id *id)
35{ 35{
36 if (IS_ENABLED(CONFIG_INT340X_THERMAL)) 36 if (IS_ENABLED(CONFIG_INT340X_THERMAL))
37 acpi_create_platform_device(adev); 37 acpi_create_platform_device(adev, NULL);
38 /* Intel SoC DTS thermal driver needs INT3401 to set IRQ descriptor */ 38 /* Intel SoC DTS thermal driver needs INT3401 to set IRQ descriptor */
39 else if (IS_ENABLED(CONFIG_INTEL_SOC_DTS_THERMAL) && 39 else if (IS_ENABLED(CONFIG_INTEL_SOC_DTS_THERMAL) &&
40 id->driver_data == INT3401_DEVICE) 40 id->driver_data == INT3401_DEVICE)
41 acpi_create_platform_device(adev); 41 acpi_create_platform_device(adev, NULL);
42 return 1; 42 return 1;
43} 43}
44 44
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index ad9fc84a8601..3d31ae3a482d 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -1734,7 +1734,7 @@ static void acpi_default_enumeration(struct acpi_device *device)
1734 &is_spi_i2c_slave); 1734 &is_spi_i2c_slave);
1735 acpi_dev_free_resource_list(&resource_list); 1735 acpi_dev_free_resource_list(&resource_list);
1736 if (!is_spi_i2c_slave) { 1736 if (!is_spi_i2c_slave) {
1737 acpi_create_platform_device(device); 1737 acpi_create_platform_device(device, NULL);
1738 acpi_device_set_enumerated(device); 1738 acpi_device_set_enumerated(device);
1739 } else { 1739 } else {
1740 blocking_notifier_call_chain(&acpi_reconfig_chain, 1740 blocking_notifier_call_chain(&acpi_reconfig_chain,