void set_hsic_lpa_states(int states) { int val = gpio_get_value(umts_modem_data.gpio_cp_reset); struct modemlink_pm_data *pm_data = &umts_link_pm_data; mif_trace("\n"); if (val) { switch (states) { case STATE_HSIC_LPA_ENTER: mif_info("lpa_enter\n"); /* gpio_link_active == gpio_host_active in C1 */ gpio_set_value(umts_modem_data.gpio_host_active, 0); mif_info("> H-ACT %d\n", 0); if (pm_data->hub_standby && pm_data->hub_pm_data) pm_data->hub_standby(pm_data->hub_pm_data); break; case STATE_HSIC_LPA_WAKE: mif_info("lpa_wake\n"); if (!modem_using_hub() && active_ctl.gpio_initialized) set_slave_wake(); break; case STATE_HSIC_LPA_PHY_INIT: mif_info("lpa_phy_init\n"); if (!modem_using_hub() && active_ctl.gpio_initialized) set_slave_wake(); break; } } }
static int host_port_enable(int port, int enable) { int err; static int pre_state = -1; mif_info("port(%d) control(%d -> %d) by <%pf>\n", port, pre_state, enable, __builtin_return_address(0)); if (!enable && !pre_state) { mif_info("hub state not changed. Skip state change !!!\n"); return 0; } pre_state = enable; if (enable) { if (modem_using_hub()) { err = usbhub_set_mode(usbhub_ctl, USB3503_MODE_HUB); if (err < 0) { mif_err("ERR: hub on fail\n"); goto exit; } } err = s5p_ehci_port_control(&s5p_device_ehci, port, 1); if (err < 0) { mif_err("ERR: port(%d) enable fail\n", port); goto exit; } } else { if (modem_using_hub()) { err = usbhub_set_mode(usbhub_ctl, USB3503_MODE_STANDBY); if (err < 0) { mif_err("ERR: hub off fail\n"); goto exit; } } err = s5p_ehci_port_control(&s5p_device_ehci, port, 0); if (err < 0) { mif_err("ERR: port(%d) enable fail\n", port); goto exit; } } mif_info("> H-ACT %d\n", enable); err = gpio_direction_output(umts_modem_data.gpio_host_active, enable); mif_info("active state err(%d), en(%d), level(%d)\n", err, enable, gpio_get_value(umts_modem_data.gpio_host_active)); exit: return err; }
static void s5p_wait_for_cp_resume(struct platform_device *pdev, struct usb_hcd *hcd) { struct ehci_hcd *ehci = hcd_to_ehci(hcd); struct s5p_ehci_platdata *pdata = pdev->dev.platform_data; u32 __iomem *portsc ; u32 val32, retry_cnt = 0; #if !defined(CONFIG_MDM_HSIC_PM) /* when use usb3503 hub, need not wait cp resume */ if (modem_using_hub()) return; #endif portsc = &ehci->regs->port_status[CP_PORT-1]; #if !defined(CONFIG_MDM_HSIC_PM) if (pdata && pdata->noti_host_states) pdata->noti_host_states(pdev, S5P_HOST_ON); #endif do { msleep(10); val32 = ehci_readl(ehci, portsc); } while (++retry_cnt < RETRY_CNT_LIMIT && !(val32 & PORT_CONNECT)); if (retry_cnt >= RETRY_CNT_LIMIT) dev_info(&pdev->dev, "%s: retry_cnt = %d, portsc = 0x%x\n", __func__, retry_cnt, val32); #if defined(CONFIG_UMTS_MODEM_XMM6262) if (pdata->get_cp_active_state && !pdata->get_cp_active_state()) { s5p_ehci_port_control(pdev, CP_PORT, 0); pr_err("mif: force port%d off by cp reset\n", CP_PORT); } #endif }
static int host_port_enable(int port, int enable) { int err; mif_info("port(%d) control(%d)\n", port, enable); if (enable) { if (modem_using_hub()) { err = usbhub_set_mode(usbhub_ctl, USB3503_MODE_HUB); if (err < 0) { mif_err("ERR: hub on fail\n"); goto exit; } } err = s5p_ehci_port_control(&s5p_device_ehci, port, 1); if (err < 0) { mif_err("ERR: port(%d) enable fail\n", port); goto exit; } } else { if (modem_using_hub()) { err = usbhub_set_mode(usbhub_ctl, USB3503_MODE_STANDBY); if (err < 0) { mif_err("ERR: hub off fail\n"); goto exit; } } err = s5p_ehci_port_control(&s5p_device_ehci, port, 0); if (err < 0) { mif_err("ERR: port(%d) enable fail\n", port); goto exit; } } err = gpio_direction_output(umts_modem_data.gpio_host_active, enable); mif_info("active state err(%d), en(%d), level(%d)\n", err, enable, gpio_get_value(umts_modem_data.gpio_host_active)); exit: return err; }
void set_host_states(struct platform_device *pdev, int type) { if (modem_using_hub()) return; if (active_ctl.gpio_initialized) { mif_err("%s: > H-ACT %d\n", pdev->name, type); gpio_direction_output(umts_link_pm_data.gpio_link_active, type); } else { active_ctl.gpio_request_host_active = 1; } }