usb: phy: tegra: Use devm_otg_ulpi_create()
authorDmitry Osipenko <digetx@gmail.com>
Mon, 6 Jan 2020 01:34:07 +0000 (04:34 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Jan 2020 15:21:58 +0000 (16:21 +0100)
The resource-managed variant removes the necessity for the driver to care
about freeing ULPI resources.

Suggested-by: Thierry Reding <thierry.reding@gmail.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20200106013416.9604-12-digetx@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/phy/phy-tegra-usb.c

index 5b9f031619c561d7503030845efe298340ec77e6..9adbcdf8d3a18b4c752eae1dfbb33f65e9e9c87a 100644 (file)
@@ -1100,6 +1100,7 @@ static int tegra_usb_phy_probe(struct platform_device *pdev)
        enum usb_phy_interface phy_type;
        struct reset_control *reset;
        struct resource *res;
+       struct usb_phy *phy;
        int err;
 
        tegra_phy = devm_kzalloc(&pdev->dev, sizeof(*tegra_phy), GFP_KERNEL);
@@ -1200,12 +1201,14 @@ static int tegra_usb_phy_probe(struct platform_device *pdev)
                        return err;
                }
 
-               tegra_phy->ulpi = otg_ulpi_create(&ulpi_viewport_access_ops, 0);
-               if (!tegra_phy->ulpi) {
+               phy = devm_otg_ulpi_create(&pdev->dev,
+                                          &ulpi_viewport_access_ops, 0);
+               if (!phy) {
                        dev_err(&pdev->dev, "Failed to create ULPI OTG\n");
                        return -ENOMEM;
                }
 
+               tegra_phy->ulpi = phy;
                tegra_phy->ulpi->io_priv = tegra_phy->regs + ULPI_VIEWPORT;
                break;
 
@@ -1224,17 +1227,9 @@ static int tegra_usb_phy_probe(struct platform_device *pdev)
 
        err = usb_add_phy_dev(&tegra_phy->u_phy);
        if (err)
-               goto free_ulpi;
+               return err;
 
        return 0;
-
-free_ulpi:
-       if (tegra_phy->ulpi) {
-               kfree(tegra_phy->ulpi->otg);
-               kfree(tegra_phy->ulpi);
-       }
-
-       return err;
 }
 
 static int tegra_usb_phy_remove(struct platform_device *pdev)
@@ -1243,11 +1238,6 @@ static int tegra_usb_phy_remove(struct platform_device *pdev)
 
        usb_remove_phy(&tegra_phy->u_phy);
 
-       if (tegra_phy->ulpi) {
-               kfree(tegra_phy->ulpi->otg);
-               kfree(tegra_phy->ulpi);
-       }
-
        return 0;
 }