int esc6270_boot_on(struct modem_ctl *mc) { struct link_device *ld = get_current_link(mc->iod); #if defined(CONFIG_LINK_DEVICE_DPRAM) /* clear intr */ struct dpram_link_device *dpld = to_dpram_link_device(ld); u16 recv_msg = dpld->recv_intr(dpld); pr_info("[MODEM_IF:ESC] dpram intr: %x\n", recv_msg); #elif defined(CONFIG_LINK_DEVICE_PLD) struct pld_link_device *pld = to_pld_link_device(ld); #endif pr_info("[MODEM_IF:ESC] <%s>\n", __func__); /* Need to init uart byt gpio_flm_uart_sel GPIO */ if (!mc->gpio_cp_reset || !mc->gpio_flm_uart_sel) { pr_err("[MODEM_IF:ESC] no gpio data\n"); return -ENXIO; } gpio_set_value(mc->gpio_flm_uart_sel, 1); /* Send reset command if ESC6270 is still alive. */ if (gpio_get_value(mc->gpio_phone_active)) { pr_info("[MODEM_IF:ESC] <%s> ESC is alive !\n", __func__); #if defined(CONFIG_LINK_DEVICE_DPRAM) dpld->send_intr(dpld, 0xabcf); #elif defined(CONFIG_LINK_DEVICE_PLD) pld->send_intr(pld, 0xabcf); #endif } pr_info(" - ESC_PHONE_ON : %d, ESC_RESET_N : %d\n", gpio_get_value(mc->gpio_cp_on), gpio_get_value(mc->gpio_cp_reset)); gpio_set_value(mc->gpio_cp_on, 0); gpio_direction_output(mc->gpio_cp_reset, 0); msleep(100); gpio_direction_output(mc->gpio_cp_on, 1); msleep(44); pr_info(" - ESC_PHONE_ON : %d, ESC_RESET_N : %d\n", gpio_get_value(mc->gpio_cp_on), gpio_get_value(mc->gpio_cp_reset)); gpio_direction_input(mc->gpio_cp_reset); msleep(600); gpio_direction_output(mc->gpio_cp_on, 0); msleep(20); pr_info(" - ESC_PHONE_ON : %d, ESC_RESET_N : %d\n", gpio_get_value(mc->gpio_cp_on), gpio_get_value(mc->gpio_cp_reset)); #if defined(CONFIG_LINK_DEVICE_PLD) gpio_direction_output(mc->gpio_fpga_cs_n, 1); #endif mc->iod->modem_state_changed(mc->iod, STATE_BOOTING); ld->mode = LINK_MODE_BOOT; return 0; }
static int mdm6600_boot_on(struct modem_ctl *mc) { struct regulator *regulator; struct link_device *ld = get_current_link(mc->iod); struct pld_link_device *dpld = to_pld_link_device(ld); pr_info("[MSM] <%s>\n", __func__); dpld->recv_intr(dpld); if (!mc->gpio_flm_uart_sel) { pr_err("[MSM] no gpio data\n"); return -ENXIO; } #if defined(CONFIG_MACH_M0_DUOSCTC) || defined(CONFIG_MACH_T0_CHN_CTC) mdm6600_vbus_on(); #elif defined(CONFIG_MACH_M0_GRANDECTC) if (system_rev >= 14) mdm6600_vbus_on(); #endif pr_info("[MSM] <%s> %s\n", __func__, "USB_BOOT_EN initializing"); if (system_rev < 11) { gpio_direction_output(GPIO_USB_BOOT_EN, 0); s3c_gpio_setpull(GPIO_USB_BOOT_EN, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_USB_BOOT_EN, 0); gpio_direction_output(GPIO_BOOT_SW_SEL, 0); s3c_gpio_setpull(GPIO_BOOT_SW_SEL, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_BOOT_SW_SEL, 0); msleep(100); gpio_direction_output(GPIO_USB_BOOT_EN, 1); gpio_set_value(GPIO_USB_BOOT_EN, 1); pr_info("[MSM] <%s> USB_BOOT_EN:[%d]\n", __func__, gpio_get_value(GPIO_USB_BOOT_EN)); gpio_direction_output(GPIO_BOOT_SW_SEL, 1); gpio_set_value(GPIO_BOOT_SW_SEL, 1); pr_info("[MSM] <%s> BOOT_SW_SEL : [%d]\n", __func__, gpio_get_value(GPIO_BOOT_SW_SEL)); } else if (system_rev == 11) { gpio_direction_output(GPIO_USB_BOOT_EN, 0); s3c_gpio_setpull(GPIO_USB_BOOT_EN, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_USB_BOOT_EN, 0); gpio_direction_output(GPIO_USB_BOOT_EN_REV06, 0); s3c_gpio_setpull(GPIO_USB_BOOT_EN_REV06, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_USB_BOOT_EN_REV06, 0); msleep(100); gpio_direction_output(GPIO_USB_BOOT_EN, 1); gpio_set_value(GPIO_USB_BOOT_EN, 1); pr_info("[MSM] <%s> USB_BOOT_EN:[%d]\n", __func__, gpio_get_value(GPIO_USB_BOOT_EN)); gpio_direction_output(GPIO_USB_BOOT_EN_REV06, 1); gpio_set_value(GPIO_USB_BOOT_EN_REV06, 1); pr_info("[MSM(%d)] <%s> USB_BOOT_EN:[%d]\n", system_rev, __func__, gpio_get_value(GPIO_USB_BOOT_EN_REV06)); gpio_direction_output(GPIO_BOOT_SW_SEL, 0); s3c_gpio_setpull(GPIO_BOOT_SW_SEL, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_BOOT_SW_SEL, 0); gpio_direction_output(GPIO_BOOT_SW_SEL_REV06, 0); s3c_gpio_setpull(GPIO_BOOT_SW_SEL_REV06, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_BOOT_SW_SEL_REV06, 0); msleep(100); gpio_direction_output(GPIO_BOOT_SW_SEL, 1); gpio_set_value(GPIO_BOOT_SW_SEL, 1); pr_info("[MSM] <%s> BOOT_SW_SEL : [%d]\n", __func__, gpio_get_value(GPIO_BOOT_SW_SEL)); gpio_direction_output(GPIO_BOOT_SW_SEL_REV06, 1); gpio_set_value(GPIO_BOOT_SW_SEL_REV06, 1); pr_info("[MSM(%d)] <%s> BOOT_SW_SEL : [%d]\n", system_rev, __func__, gpio_get_value(GPIO_BOOT_SW_SEL_REV06)); } else { /* system_rev>11 */ gpio_direction_output(GPIO_USB_BOOT_EN_REV06, 0); s3c_gpio_setpull(GPIO_USB_BOOT_EN_REV06, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_USB_BOOT_EN_REV06, 0); gpio_direction_output(GPIO_BOOT_SW_SEL_REV06, 0); s3c_gpio_setpull(GPIO_BOOT_SW_SEL_REV06, S3C_GPIO_PULL_NONE); gpio_set_value(GPIO_BOOT_SW_SEL_REV06, 0); msleep(100); gpio_direction_output(GPIO_USB_BOOT_EN_REV06, 1); gpio_set_value(GPIO_USB_BOOT_EN_REV06, 1); pr_info("[MSM] <%s> USB_BOOT_EN:[%d]\n", __func__, gpio_get_value(GPIO_USB_BOOT_EN_REV06)); gpio_direction_output(GPIO_BOOT_SW_SEL_REV06, 1); gpio_set_value(GPIO_BOOT_SW_SEL_REV06, 1); pr_info("[MSM] <%s> BOOT_SW_SEL : [%d]\n", __func__, gpio_get_value(GPIO_BOOT_SW_SEL_REV06)); } mc->iod->modem_state_changed(mc->iod, STATE_BOOTING); return 0; }