diff options
Diffstat (limited to 'drivers/usb/cdns3/cdns3-imx.c')
| -rw-r--r-- | drivers/usb/cdns3/cdns3-imx.c | 22 | 
1 files changed, 11 insertions, 11 deletions
| diff --git a/drivers/usb/cdns3/cdns3-imx.c b/drivers/usb/cdns3/cdns3-imx.c index d9fb68766a15..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; | 
