What platform_device_add_properties() does is it allocates
dynamically a software node that will contain the device
properties supplied to it, and then couples that node with
the device. If the properties are constant, the node can be
constant as well.

Signed-off-by: Heikki Krogerus <[email protected]>
---
 drivers/usb/dwc3/dwc3-qcom.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/dwc3/dwc3-qcom.c b/drivers/usb/dwc3/dwc3-qcom.c
index d803ee98c628e..d857d6c160a66 100644
--- a/drivers/usb/dwc3/dwc3-qcom.c
+++ b/drivers/usb/dwc3/dwc3-qcom.c
@@ -567,6 +567,10 @@ static const struct property_entry 
dwc3_qcom_acpi_properties[] = {
        {}
 };
 
+static const struct software_node dwc3_qcom_swnode = {
+       .properties = dwc3_qcom_acpi_properties,
+};
+
 static int dwc3_qcom_acpi_register_core(struct platform_device *pdev)
 {
        struct dwc3_qcom        *qcom = platform_get_drvdata(pdev);
@@ -613,16 +617,17 @@ static int dwc3_qcom_acpi_register_core(struct 
platform_device *pdev)
                goto out;
        }
 
-       ret = platform_device_add_properties(qcom->dwc3,
-                                            dwc3_qcom_acpi_properties);
+       ret = device_add_software_node(&qcom->dwc3->dev, dwc3_qcom_swnode);
        if (ret < 0) {
                dev_err(&pdev->dev, "failed to add properties\n");
                goto out;
        }
 
        ret = platform_device_add(qcom->dwc3);
-       if (ret)
+       if (ret) {
                dev_err(&pdev->dev, "failed to add device\n");
+               device_remove_software_node(&qcom->dwc3->dev);
+       }
 
 out:
        kfree(child_res);
@@ -837,6 +842,7 @@ static int dwc3_qcom_remove(struct platform_device *pdev)
        struct device *dev = &pdev->dev;
        int i;
 
+       device_remove_software_node(&qcom->dwc3->dev);
        of_platform_depopulate(dev);
 
        for (i = qcom->num_clocks - 1; i >= 0; i--) {
-- 
2.30.0

Reply via email to