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
Unified · Split
| @@ -122,7 +122,7 @@ static int acpi_apd_create_device(struct acpi_device *adev, · 121 unmodified lines | ||
| 122 | 122 | int ret; |
| 123 | 123 | |
| 124 | 124 | if (!dev_desc) { |
| 125 | − pdev = acpi_create_platform_device(adev); | |
| 125 | + pdev = acpi_create_platform_device(adev, NULL); | |
| 126 | 126 | return IS_ERR_OR_NULL(pdev) ? PTR_ERR(pdev) : 1; |
| 127 | 127 | } |
| 128 | 128 | |
| @@ -139,14 +139,8 @@ static int acpi_apd_create_device(struct acpi_device *adev, · 10 unmodified lines | ||
| 139 | 139 | goto err_out; |
| 140 | 140 | } |
| 141 | 141 | |
| 142 | − if (dev_desc->properties) { | |
| 143 | − ret = device_add_properties(&adev->dev, dev_desc->properties); | |
| 144 | − if (ret) | |
| 145 | − goto err_out; | |
| 146 | − } | |
| 147 | − | |
| 148 | 142 | adev->driver_data = pdata; |
| 149 | − pdev = acpi_create_platform_device(adev); | |
| 143 | + pdev = acpi_create_platform_device(adev, dev_desc->properties); | |
| 150 | 144 | if (!IS_ERR_OR_NULL(pdev)) |
| 151 | 145 | return 1; |
| 152 | 146 | |
| @@ -395,7 +395,7 @@ static int acpi_lpss_create_device(struct acpi_device *adev, · 394 unmodified lines | ||
| 395 | 395 | |
| 396 | 396 | dev_desc = (const struct lpss_device_desc *)id->driver_data; |
| 397 | 397 | if (!dev_desc) { |
| 398 | − pdev = acpi_create_platform_device(adev); | |
| 398 | + pdev = acpi_create_platform_device(adev, NULL); | |
| 399 | 399 | return IS_ERR_OR_NULL(pdev) ? PTR_ERR(pdev) : 1; |
| 400 | 400 | } |
| 401 | 401 | pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); |
| @@ -451,14 +451,8 @@ static int acpi_lpss_create_device(struct acpi_device *adev, · 49 unmodified lines | ||
| 451 | 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 | 454 | adev->driver_data = pdata; |
| 461 | − pdev = acpi_create_platform_device(adev); | |
| 455 | + pdev = acpi_create_platform_device(adev, dev_desc->properties); | |
| 462 | 456 | if (!IS_ERR_OR_NULL(pdev)) { |
| 463 | 457 | return 1; |
| 464 | 458 | } |
| @@ -50,6 +50,7 @@ static void acpi_platform_fill_resource(struct acpi_device *adev, · 49 unmodified lines | ||
| 50 | 50 | /** |
| 51 | 51 | * acpi_create_platform_device - Create platform device for ACPI device node |
| 52 | 52 | * @adev: ACPI device node to create a platform device for. |
| 53 | + * @properties: Optional collection of build-in properties. | |
| 53 | 54 | * |
| 54 | 55 | * Check if the given @adev can be represented as a platform device and, if |
| 55 | 56 | * 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, · 1 unmodified line | ||
| 57 | 58 | * |
| 58 | 59 | * Name of the platform device will be the same as @adev's. |
| 59 | 60 | */ |
| 60 | −struct platform_device *acpi_create_platform_device(struct acpi_device *adev) | |
| 61 | +struct platform_device *acpi_create_platform_device(struct acpi_device *adev, | |
| 62 | + struct property_entry *properties) | |
| 61 | 63 | { |
| 62 | 64 | struct platform_device *pdev = NULL; |
| 63 | 65 | struct platform_device_info pdevinfo; |
| @@ -106,6 +108,7 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev) · 42 unmodified lines | ||
| 106 | 108 | pdevinfo.res = resources; |
| 107 | 109 | pdevinfo.num_res = count; |
| 108 | 110 | pdevinfo.fwnode = acpi_fwnode_handle(adev); |
| 111 | + pdevinfo.properties = properties; | |
| 109 | 112 | |
| 110 | 113 | if (acpi_dma_supported(adev)) |
| 111 | 114 | pdevinfo.dma_mask = DMA_BIT_MASK(32); |
| @@ -34,11 +34,11 @@ static int int340x_thermal_handler_attach(struct acpi_device *adev, · 33 unmodified lines | ||
| 34 | 34 | const struct acpi_device_id *id) |
| 35 | 35 | { |
| 36 | 36 | if (IS_ENABLED(CONFIG_INT340X_THERMAL)) |
| 37 | − acpi_create_platform_device(adev); | |
| 37 | + acpi_create_platform_device(adev, NULL); | |
| 38 | 38 | /* Intel SoC DTS thermal driver needs INT3401 to set IRQ descriptor */ |
| 39 | 39 | else if (IS_ENABLED(CONFIG_INTEL_SOC_DTS_THERMAL) && |
| 40 | 40 | id->driver_data == INT3401_DEVICE) |
| 41 | − acpi_create_platform_device(adev); | |
| 41 | + acpi_create_platform_device(adev, NULL); | |
| 42 | 42 | return 1; |
| 43 | 43 | } |
| 44 | 44 | |
| @@ -1734,7 +1734,7 @@ static void acpi_default_enumeration(struct acpi_device *device) · 1733 unmodified lines | ||
| 1734 | 1734 | &is_spi_i2c_slave); |
| 1735 | 1735 | acpi_dev_free_resource_list(&resource_list); |
| 1736 | 1736 | if (!is_spi_i2c_slave) { |
| 1737 | − acpi_create_platform_device(device); | |
| 1737 | + acpi_create_platform_device(device, NULL); | |
| 1738 | 1738 | acpi_device_set_enumerated(device); |
| 1739 | 1739 | } else { |
| 1740 | 1740 | blocking_notifier_call_chain(&acpi_reconfig_chain, |
| @@ -264,7 +264,7 @@ check_acpi_dev(acpi_handle handle, u32 lvl, void *context, void **rv) · 263 unmodified lines | ||
| 264 | 264 | return AE_OK; |
| 265 | 265 | |
| 266 | 266 | if (acpi_match_device_ids(dev, ids) == 0) |
| 267 | − if (acpi_create_platform_device(dev)) | |
| 267 | + if (acpi_create_platform_device(dev, NULL)) | |
| 268 | 268 | dev_info(&dev->dev, |
| 269 | 269 | "intel-hid: created platform device\n"); |
| 270 | 270 | |
| @@ -164,7 +164,7 @@ check_acpi_dev(acpi_handle handle, u32 lvl, void *context, void **rv) · 163 unmodified lines | ||
| 164 | 164 | return AE_OK; |
| 165 | 165 | |
| 166 | 166 | if (acpi_match_device_ids(dev, ids) == 0) |
| 167 | − if (acpi_create_platform_device(dev)) | |
| 167 | + if (acpi_create_platform_device(dev, NULL)) | |
| 168 | 168 | dev_info(&dev->dev, |
| 169 | 169 | "intel-vbtn: created platform device\n"); |
| 170 | 170 | |
| @@ -555,7 +555,8 @@ int acpi_device_uevent_modalias(struct device *, struct kobj_uevent_env *); · 554 unmodified lines | ||
| 555 | 555 | int acpi_device_modalias(struct device *, char *, int); |
| 556 | 556 | void acpi_walk_dep_device_list(acpi_handle handle); |
| 557 | 557 | |
| 558 | −struct platform_device *acpi_create_platform_device(struct acpi_device *); | |
| 558 | +struct platform_device *acpi_create_platform_device(struct acpi_device *, | |
| 559 | + struct property_entry *); | |
| 559 | 560 | #define ACPI_PTR(_ptr) (_ptr) |
| 560 | 561 | |
| 561 | 562 | static inline void acpi_device_set_enumerated(struct acpi_device *adev) |