diff options
Diffstat (limited to 'drivers/usb/cdns3/cdns3-imx.c')
| -rw-r--r-- | drivers/usb/cdns3/cdns3-imx.c | 24 | 
1 files changed, 12 insertions, 12 deletions
| diff --git a/drivers/usb/cdns3/cdns3-imx.c b/drivers/usb/cdns3/cdns3-imx.c index 22a56c4dce67..8f88eec0b0ea 100644 --- a/drivers/usb/cdns3/cdns3-imx.c +++ b/drivers/usb/cdns3/cdns3-imx.c @@ -185,7 +185,11 @@ static int cdns_imx_probe(struct platform_device *pdev)  	}  	data->num_clks = ARRAY_SIZE(imx_cdns3_core_clks); -	data->clks = (struct clk_bulk_data *)imx_cdns3_core_clks; +	data->clks = devm_kmemdup(dev, imx_cdns3_core_clks, +				sizeof(imx_cdns3_core_clks), GFP_KERNEL); +	if (!data->clks) +		return -ENOMEM; +  	ret = devm_clk_bulk_get(dev, data->num_clks, data->clks);  	if (ret)  		return ret; @@ -214,20 +218,16 @@ err:  	return ret;  } -static int cdns_imx_remove_core(struct device *dev, void *data) -{ -	struct platform_device *pdev = to_platform_device(dev); - -	platform_device_unregister(pdev); - -	return 0; -} -  static int cdns_imx_remove(struct platform_device *pdev)  {  	struct device *dev = &pdev->dev; +	struct cdns_imx *data = dev_get_drvdata(dev); -	device_for_each_child(dev, NULL, cdns_imx_remove_core); +	pm_runtime_get_sync(dev); +	of_platform_depopulate(dev); +	clk_bulk_disable_unprepare(data->num_clks, data->clks); +	pm_runtime_disable(dev); +	pm_runtime_put_noidle(dev);  	platform_set_drvdata(pdev, NULL);  	return 0; @@ -250,7 +250,7 @@ static void cdns3_set_wakeup(struct cdns_imx *data, bool enable)  static int cdns_imx_platform_suspend(struct device *dev,  		bool suspend, bool wakeup)  { -	struct cdns3 *cdns = dev_get_drvdata(dev); +	struct cdns *cdns = dev_get_drvdata(dev);  	struct device *parent = dev->parent;  	struct cdns_imx *data = dev_get_drvdata(parent);  	void __iomem *otg_regs = (void __iomem *)(cdns->otg_regs); | 
