static int ehci_msm2_runtime_resume(struct device *dev) { struct usb_hcd *hcd = dev_get_drvdata(dev); struct msm_hcd *mhcd = hcd_to_mhcd(hcd); dev_dbg(dev, "EHCI runtime resume\n"); return msm_ehci_resume(mhcd); }
static int __devexit ehci_msm2_remove(struct platform_device *pdev) { struct usb_hcd *hcd = platform_get_drvdata(pdev); struct msm_hcd *mhcd = hcd_to_mhcd(hcd); msm_ehci_resume(mhcd); if (pdev->dev.power.power_state.event != PM_EVENT_INVALID) pm_runtime_disable(&pdev->dev); device_init_wakeup(&pdev->dev, 0); pm_runtime_set_suspended(&pdev->dev); if (mhcd->pmic_gpio_dp_irq) { if (mhcd->pmic_gpio_dp_irq_enabled) disable_irq_wake(mhcd->pmic_gpio_dp_irq); free_irq(mhcd->pmic_gpio_dp_irq, mhcd); } if (mhcd->async_irq) { if (mhcd->async_irq_enabled) disable_irq_wake(mhcd->async_irq); free_irq(mhcd->async_irq, mhcd); } if (mhcd->wakeup_irq) { if (mhcd->wakeup_irq_enabled) disable_irq_wake(mhcd->wakeup_irq); free_irq(mhcd->wakeup_irq, mhcd); } if(mhcd->resume_gpio) gpio_free(mhcd->resume_gpio); usb_remove_hcd(hcd); if (!IS_ERR(mhcd->xo_clk)) { clk_disable_unprepare(mhcd->xo_clk); clk_put(mhcd->xo_clk); } else { msm_xo_put(mhcd->xo_handle); } msm_ehci_vbus_power(mhcd, 0); msm_ehci_init_vbus(mhcd, 0); msm_ehci_ldo_enable(mhcd, 0); msm_ehci_ldo_init(mhcd, 0); msm_ehci_init_vddcx(mhcd, 0); msm_ehci_init_clocks(mhcd, 0); wake_lock_destroy(&mhcd->wlock); iounmap(hcd->regs); usb_put_hcd(hcd); return 0; }
static int ehci_msm2_pm_resume(struct device *dev) { int ret; struct usb_hcd *hcd = dev_get_drvdata(dev); struct msm_hcd *mhcd = hcd_to_mhcd(hcd); dev_dbg(dev, "ehci-msm2 PM resume\n"); if (device_may_wakeup(dev)) disable_irq_wake(hcd->irq); ret = msm_ehci_resume(mhcd); if (ret) return ret; /* Bring the device to full powered state upon system resume */ pm_runtime_disable(dev); pm_runtime_set_active(dev); pm_runtime_enable(dev); return 0; }