diff options
Diffstat (limited to 'drivers/usb/dwc2/platform.c')
| -rw-r--r-- | drivers/usb/dwc2/platform.c | 22 | 
1 files changed, 15 insertions, 7 deletions
diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c index 5aee284018c0..0a806f80217e 100644 --- a/drivers/usb/dwc2/platform.c +++ b/drivers/usb/dwc2/platform.c @@ -203,6 +203,11 @@ int dwc2_lowlevel_hw_disable(struct dwc2_hsotg *hsotg)  	return ret;  } +static void dwc2_reset_control_assert(void *data) +{ +	reset_control_assert(data); +} +  static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg)  {  	int i, ret; @@ -213,6 +218,10 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg)  				     "error getting reset control\n");  	reset_control_deassert(hsotg->reset); +	ret = devm_add_action_or_reset(hsotg->dev, dwc2_reset_control_assert, +				       hsotg->reset); +	if (ret) +		return ret;  	hsotg->reset_ecc = devm_reset_control_get_optional(hsotg->dev, "dwc2-ecc");  	if (IS_ERR(hsotg->reset_ecc)) @@ -220,6 +229,10 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg)  				     "error getting reset control for ecc\n");  	reset_control_deassert(hsotg->reset_ecc); +	ret = devm_add_action_or_reset(hsotg->dev, dwc2_reset_control_assert, +				       hsotg->reset_ecc); +	if (ret) +		return ret;  	/*  	 * Attempt to find a generic PHY, then look for an old style @@ -288,7 +301,7 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg)   * stops device processing. Any resources used on behalf of this device are   * freed.   */ -static int dwc2_driver_remove(struct platform_device *dev) +static void dwc2_driver_remove(struct platform_device *dev)  {  	struct dwc2_hsotg *hsotg = platform_get_drvdata(dev);  	struct dwc2_gregs_backup *gr; @@ -338,11 +351,6 @@ static int dwc2_driver_remove(struct platform_device *dev)  	if (hsotg->ll_hw_enabled)  		dwc2_lowlevel_hw_disable(hsotg); - -	reset_control_assert(hsotg->reset); -	reset_control_assert(hsotg->reset_ecc); - -	return 0;  }  /** @@ -746,7 +754,7 @@ static struct platform_driver dwc2_platform_driver = {  		.pm = &dwc2_dev_pm_ops,  	},  	.probe = dwc2_driver_probe, -	.remove = dwc2_driver_remove, +	.remove_new = dwc2_driver_remove,  	.shutdown = dwc2_driver_shutdown,  };  |