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;
}