static int s5p_ehci_runtime_resume(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct s5p_ehci_platdata *pdata = pdev->dev.platform_data; struct s5p_ehci_hcd *s5p_ehci = platform_get_drvdata(pdev); struct usb_hcd *hcd = s5p_ehci->hcd; struct ehci_hcd *ehci = hcd_to_ehci(hcd); int rc = 0; if (dev->power.is_suspended) return 0; #ifdef CONFIG_MDM_HSIC_PM request_active_lock_set(hsic_pm_dev); #endif /* platform device isn't suspended */ if (pdata && pdata->phy_resume) rc = pdata->phy_resume(pdev, S5P_USB_PHY_HOST); if (rc) { s5p_ehci_configurate(hcd); /* emptying the schedule aborts any urbs */ spin_lock_irq(&ehci->lock); if (ehci->reclaim) end_unlink_async(ehci); ehci_work(ehci); spin_unlock_irq(&ehci->lock); usb_root_hub_lost_power(hcd->self.root_hub); ehci_writel(ehci, FLAG_CF, &ehci->regs->configured_flag); ehci_writel(ehci, INTR_MASK, &ehci->regs->intr_enable); (void)ehci_readl(ehci, &ehci->regs->intr_enable); /* here we "know" root ports should always stay powered */ ehci_port_power(ehci, 1); hcd->state = HC_STATE_SUSPENDED; #ifdef CONFIG_MDM_HSIC_PM set_host_stat(hsic_pm_dev, POWER_ON); wait_dev_pwr_stat(hsic_pm_dev, POWER_ON); #endif #if defined(CONFIG_LINK_DEVICE_HSIC) || defined(CONFIG_LINK_DEVICE_USB) \ || defined(CONFIG_MDM_HSIC_PM) s5p_wait_for_cp_resume(pdev, hcd); #endif } return 0; }
static void mdm_status_fn(struct work_struct *work) { int value = gpio_get_value(mdm_drv->mdm2ap_status_gpio); pr_debug("%s: status:%d\n", __func__, value); if (mdm_drv->mdm_ready && mdm_drv->ops->status_cb) mdm_drv->ops->status_cb(mdm_drv, value); #ifdef CONFIG_MDM_HSIC_PM if (value) { request_boot_lock_release(rmnet_pm_dev); request_active_lock_set(rmnet_pm_dev); } #endif }
static void mdm_status_fn(struct work_struct *work) { struct mdm_ctrl *mdm = container_of(work, struct mdm_ctrl, mdm_status_work); struct device *dev = mdm->dev; int value = gpio_get_value(MDM_GPIO(mdm, MDM2AP_STATUS)); dev_info(dev, "%s: status:%d\n", __func__, value); #if defined(CONFIG_MDM_HSIC_PM) request_active_lock_set(rmnet_pm_dev); #endif /* Update gpio configuration to "running" config. */ mdm_update_gpio_configs(mdm, GPIO_UPDATE_RUNNING_CONFIG); }