Commit 86e4ee76 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'acpi-4.9-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull ACPI fix from Rafael Wysocki:
 "Fix a recent regression in the 8250_dw serial driver introduced by
  adding a quirk for the APM X-Gene SoC to it which uncovered an issue
  related to the handling of built-in device properties in the core ACPI
  device enumeration code (Heikki Krogerus)"

* tag 'acpi-4.9-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  ACPI / platform: Add support for build-in properties
parents b9f659b8 66f5854c
...@@ -122,7 +122,7 @@ static int acpi_apd_create_device(struct acpi_device *adev, ...@@ -122,7 +122,7 @@ static int acpi_apd_create_device(struct acpi_device *adev,
int ret; int ret;
if (!dev_desc) { if (!dev_desc) {
pdev = acpi_create_platform_device(adev); pdev = acpi_create_platform_device(adev, NULL);
return IS_ERR_OR_NULL(pdev) ? PTR_ERR(pdev) : 1; return IS_ERR_OR_NULL(pdev) ? PTR_ERR(pdev) : 1;
} }
...@@ -139,14 +139,8 @@ static int acpi_apd_create_device(struct acpi_device *adev, ...@@ -139,14 +139,8 @@ static int acpi_apd_create_device(struct acpi_device *adev,
goto err_out; goto err_out;
} }
if (dev_desc->properties) {
ret = device_add_properties(&adev->dev, dev_desc->properties);
if (ret)
goto err_out;
}
adev->driver_data = pdata; adev->driver_data = pdata;
pdev = acpi_create_platform_device(adev); pdev = acpi_create_platform_device(adev, dev_desc->properties);
if (!IS_ERR_OR_NULL(pdev)) if (!IS_ERR_OR_NULL(pdev))
return 1; return 1;
......
...@@ -395,7 +395,7 @@ static int acpi_lpss_create_device(struct acpi_device *adev, ...@@ -395,7 +395,7 @@ static int acpi_lpss_create_device(struct acpi_device *adev,
dev_desc = (const struct lpss_device_desc *)id->driver_data; dev_desc = (const struct lpss_device_desc *)id->driver_data;
if (!dev_desc) { if (!dev_desc) {
pdev = acpi_create_platform_device(adev); pdev = acpi_create_platform_device(adev, NULL);
return IS_ERR_OR_NULL(pdev) ? PTR_ERR(pdev) : 1; return IS_ERR_OR_NULL(pdev) ? PTR_ERR(pdev) : 1;
} }
pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
...@@ -451,14 +451,8 @@ static int acpi_lpss_create_device(struct acpi_device *adev, ...@@ -451,14 +451,8 @@ static int acpi_lpss_create_device(struct acpi_device *adev,
goto err_out; goto err_out;
} }
if (dev_desc->properties) {
ret = device_add_properties(&adev->dev, dev_desc->properties);
if (ret)
goto err_out;
}
adev->driver_data = pdata; adev->driver_data = pdata;
pdev = acpi_create_platform_device(adev); pdev = acpi_create_platform_device(adev, dev_desc->properties);
if (!IS_ERR_OR_NULL(pdev)) { if (!IS_ERR_OR_NULL(pdev)) {
return 1; return 1;
} }
......
...@@ -50,6 +50,7 @@ static void acpi_platform_fill_resource(struct acpi_device *adev, ...@@ -50,6 +50,7 @@ static void acpi_platform_fill_resource(struct acpi_device *adev,
/** /**
* acpi_create_platform_device - Create platform device for ACPI device node * acpi_create_platform_device - Create platform device for ACPI device node
* @adev: ACPI device node to create a platform device for. * @adev: ACPI device node to create a platform device for.
* @properties: Optional collection of build-in properties.
* *
* Check if the given @adev can be represented as a platform device and, if * 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 * that's the case, create and register a platform device, populate its common
...@@ -57,7 +58,8 @@ static void acpi_platform_fill_resource(struct acpi_device *adev, ...@@ -57,7 +58,8 @@ static void acpi_platform_fill_resource(struct acpi_device *adev,
* *
* Name of the platform device will be the same as @adev's. * 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,
struct property_entry *properties)
{ {
struct platform_device *pdev = NULL; struct platform_device *pdev = NULL;
struct platform_device_info pdevinfo; struct platform_device_info pdevinfo;
...@@ -106,6 +108,7 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev) ...@@ -106,6 +108,7 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev)
pdevinfo.res = resources; pdevinfo.res = resources;
pdevinfo.num_res = count; pdevinfo.num_res = count;
pdevinfo.fwnode = acpi_fwnode_handle(adev); pdevinfo.fwnode = acpi_fwnode_handle(adev);
pdevinfo.properties = properties;
if (acpi_dma_supported(adev)) if (acpi_dma_supported(adev))
pdevinfo.dma_mask = DMA_BIT_MASK(32); pdevinfo.dma_mask = DMA_BIT_MASK(32);
......
...@@ -34,11 +34,11 @@ static int int340x_thermal_handler_attach(struct acpi_device *adev, ...@@ -34,11 +34,11 @@ static int int340x_thermal_handler_attach(struct acpi_device *adev,
const struct acpi_device_id *id) const struct acpi_device_id *id)
{ {
if (IS_ENABLED(CONFIG_INT340X_THERMAL)) if (IS_ENABLED(CONFIG_INT340X_THERMAL))
acpi_create_platform_device(adev); acpi_create_platform_device(adev, NULL);
/* Intel SoC DTS thermal driver needs INT3401 to set IRQ descriptor */ /* Intel SoC DTS thermal driver needs INT3401 to set IRQ descriptor */
else if (IS_ENABLED(CONFIG_INTEL_SOC_DTS_THERMAL) && else if (IS_ENABLED(CONFIG_INTEL_SOC_DTS_THERMAL) &&
id->driver_data == INT3401_DEVICE) id->driver_data == INT3401_DEVICE)
acpi_create_platform_device(adev); acpi_create_platform_device(adev, NULL);
return 1; return 1;
} }
......
...@@ -1734,7 +1734,7 @@ static void acpi_default_enumeration(struct acpi_device *device) ...@@ -1734,7 +1734,7 @@ static void acpi_default_enumeration(struct acpi_device *device)
&is_spi_i2c_slave); &is_spi_i2c_slave);
acpi_dev_free_resource_list(&resource_list); acpi_dev_free_resource_list(&resource_list);
if (!is_spi_i2c_slave) { if (!is_spi_i2c_slave) {
acpi_create_platform_device(device); acpi_create_platform_device(device, NULL);
acpi_device_set_enumerated(device); acpi_device_set_enumerated(device);
} else { } else {
blocking_notifier_call_chain(&acpi_reconfig_chain, blocking_notifier_call_chain(&acpi_reconfig_chain,
......
...@@ -264,7 +264,7 @@ check_acpi_dev(acpi_handle handle, u32 lvl, void *context, void **rv) ...@@ -264,7 +264,7 @@ check_acpi_dev(acpi_handle handle, u32 lvl, void *context, void **rv)
return AE_OK; return AE_OK;
if (acpi_match_device_ids(dev, ids) == 0) if (acpi_match_device_ids(dev, ids) == 0)
if (acpi_create_platform_device(dev)) if (acpi_create_platform_device(dev, NULL))
dev_info(&dev->dev, dev_info(&dev->dev,
"intel-hid: created platform device\n"); "intel-hid: created platform device\n");
......
...@@ -164,7 +164,7 @@ check_acpi_dev(acpi_handle handle, u32 lvl, void *context, void **rv) ...@@ -164,7 +164,7 @@ check_acpi_dev(acpi_handle handle, u32 lvl, void *context, void **rv)
return AE_OK; return AE_OK;
if (acpi_match_device_ids(dev, ids) == 0) if (acpi_match_device_ids(dev, ids) == 0)
if (acpi_create_platform_device(dev)) if (acpi_create_platform_device(dev, NULL))
dev_info(&dev->dev, dev_info(&dev->dev,
"intel-vbtn: created platform device\n"); "intel-vbtn: created platform device\n");
......
...@@ -555,7 +555,8 @@ int acpi_device_uevent_modalias(struct device *, struct kobj_uevent_env *); ...@@ -555,7 +555,8 @@ int acpi_device_uevent_modalias(struct device *, struct kobj_uevent_env *);
int acpi_device_modalias(struct device *, char *, int); int acpi_device_modalias(struct device *, char *, int);
void acpi_walk_dep_device_list(acpi_handle handle); void acpi_walk_dep_device_list(acpi_handle handle);
struct platform_device *acpi_create_platform_device(struct acpi_device *); struct platform_device *acpi_create_platform_device(struct acpi_device *,
struct property_entry *);
#define ACPI_PTR(_ptr) (_ptr) #define ACPI_PTR(_ptr) (_ptr)
static inline void acpi_device_set_enumerated(struct acpi_device *adev) static inline void acpi_device_set_enumerated(struct acpi_device *adev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment