diff --git a/[refs] b/[refs] index d7096a694073..91c217957aa0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 206dcc2cfe15b6174f15293ae15a097ee03eb386 +refs/heads/master: 6e267da8f10b1a6551b6c4dee3779f6f56e2644d diff --git a/trunk/drivers/usb/renesas_usbhs/common.c b/trunk/drivers/usb/renesas_usbhs/common.c index 53be4443b5ed..db13cef9effe 100644 --- a/trunk/drivers/usb/renesas_usbhs/common.c +++ b/trunk/drivers/usb/renesas_usbhs/common.c @@ -148,7 +148,31 @@ static u32 usbhsc_default_pipe_type[] = { }; /* - * driver callback functions + * power control + */ +static void usbhsc_power_ctrl(struct usbhs_priv *priv, int enable) +{ + struct device *dev = usbhs_priv_to_dev(priv); + + if (enable) { + /* enable PM */ + pm_runtime_get_sync(dev); + + /* USB on */ + usbhs_sys_clock_ctrl(priv, enable); + usbhsc_bus_ctrl(priv, enable); + } else { + /* USB off */ + usbhsc_bus_ctrl(priv, enable); + usbhs_sys_clock_ctrl(priv, enable); + + /* disable PM */ + pm_runtime_put_sync(dev); + } +} + +/* + * notify hotplug */ static void usbhsc_notify_hotplug(struct work_struct *work) { @@ -178,12 +202,8 @@ static void usbhsc_notify_hotplug(struct work_struct *work) dev_dbg(&pdev->dev, "%s enable\n", __func__); - /* enable PM */ - pm_runtime_get_sync(&pdev->dev); - - /* USB on */ - usbhs_sys_clock_ctrl(priv, enable); - usbhsc_bus_ctrl(priv, enable); + /* power on */ + usbhsc_power_ctrl(priv, enable); /* module start */ usbhs_mod_call(priv, start, priv); @@ -194,12 +214,8 @@ static void usbhsc_notify_hotplug(struct work_struct *work) /* module stop */ usbhs_mod_call(priv, stop, priv); - /* USB off */ - usbhsc_bus_ctrl(priv, enable); - usbhs_sys_clock_ctrl(priv, enable); - - /* disable PM */ - pm_runtime_put_sync(&pdev->dev); + /* power off */ + usbhsc_power_ctrl(priv, enable); usbhs_mod_change(priv, -1);