Эх сурвалжийг харах

usb: chipidea: imx: add usb as system wakeup source

Enable USB as system wakeup source, and each platform needs to implement
imx_usbmisc_set_wakeup in usbmisc_imx.c to support.

Signed-off-by: Peter Chen <peter.chen@freescale.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Peter Chen 10 жил өмнө
parent
commit
6d6531104d

+ 13 - 0
drivers/usb/chipidea/ci_hdrc_imx.c

@@ -199,6 +199,8 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
 		pm_runtime_enable(&pdev->dev);
 		pm_runtime_enable(&pdev->dev);
 	}
 	}
 
 
+	device_set_wakeup_capable(&pdev->dev, true);
+
 	return 0;
 	return 0;
 
 
 disable_device:
 disable_device:
@@ -270,12 +272,23 @@ clk_disable:
 #ifdef CONFIG_PM_SLEEP
 #ifdef CONFIG_PM_SLEEP
 static int ci_hdrc_imx_suspend(struct device *dev)
 static int ci_hdrc_imx_suspend(struct device *dev)
 {
 {
+	int ret;
+
 	struct ci_hdrc_imx_data *data = dev_get_drvdata(dev);
 	struct ci_hdrc_imx_data *data = dev_get_drvdata(dev);
 
 
 	if (data->in_lpm)
 	if (data->in_lpm)
 		/* The core's suspend doesn't run */
 		/* The core's suspend doesn't run */
 		return 0;
 		return 0;
 
 
+	if (device_may_wakeup(dev)) {
+		ret = imx_usbmisc_set_wakeup(data->usbmisc_data, true);
+		if (ret) {
+			dev_err(dev, "usbmisc set_wakeup failed, ret=%d\n",
+					ret);
+			return ret;
+		}
+	}
+
 	return imx_controller_suspend(dev);
 	return imx_controller_suspend(dev);
 }
 }