int cm_enter_md_download_mode(void) { #ifdef CONFIG_MTK_DT_USB_SUPPORT #ifdef CONFIG_PM_RUNTIME /* make sure usb device tree is waked up so that usb is ready */ usb11_auto_resume(); #endif #endif EMD_MSG_INF("chr","cm_do_md_power_on:set GPIO_EXT_MD_DL_KEY(%d)\n",GPIO_EXT_MD_DL_KEY); // Press download key to let md can enter download mode mt_set_gpio_dir(GPIO_EXT_MD_DL_KEY, 1); #ifdef GPIO_EXT_USB_SW2 mt_set_gpio_out(GPIO_EXT_MD_DL_KEY, 0); EMD_MSG_INF("chr","cm_do_md_power_on:set evb GPIO_EXT_MD_DL_KEY=%d\n",mt_get_gpio_out(GPIO_EXT_MD_DL_KEY)); #else mt_set_gpio_out(GPIO_EXT_MD_DL_KEY, 1); EMD_MSG_INF("chr","cm_do_md_power_on:set phone GPIO_EXT_MD_DL_KEY=%d\n",mt_get_gpio_out(GPIO_EXT_MD_DL_KEY)); #endif mt_set_gpio_dir(GPIO_EXT_MD_WK_AP, 0); mt_set_gpio_pull_enable(GPIO_EXT_MD_WK_AP, 1); mt_set_gpio_pull_select(GPIO_EXT_MD_WK_AP, 0); // Press power key mt_set_gpio_dir(GPIO_EXT_MD_PWR_KEY, 1); mt_set_gpio_out(GPIO_EXT_MD_PWR_KEY, 1); msleep(POWER_ON_WAIT_RESET_TIME); ignore_wdt_interrupt = 1; cm_hold_rst_signal(); msleep(RESET_WAIT_RELEASE_TIME); cm_relese_rst_signal(); // Hold on msleep(POWER_ON_HOLD_TIME); cm_enable_ext_md_wdt_irq(); cm_enable_ext_md_wakeup_irq(); cm_enable_ext_md_exp_irq(); return 0; }
void cm_ext_md_rst(void) { cm_hold_rst_signal(); mt_set_gpio_out(GPIO_OTG_DRVVBUS_PIN, 0); // VBus EMD_VBUS_TMP_PIN }
int cm_do_md_power_on(int bootmode) { EMD_MSG_INF("chr","cm_do_md_power_on\n"); cm_disable_ext_md_wdt_irq(); cm_disable_ext_md_wakeup_irq(); cm_disable_ext_md_exp_irq(); // Release download key to let md can enter normal boot mt_set_gpio_dir(GPIO_EXT_MD_DL_KEY, 1); #ifdef GPIO_EXT_USB_SW2 mt_set_gpio_out(GPIO_EXT_MD_DL_KEY, 1); EMD_MSG_INF("chr","cm_do_md_power_on:set evb GPIO_EXT_MD_DL_KEY=%d\n",mt_get_gpio_out(GPIO_EXT_MD_DL_KEY)); #else mt_set_gpio_out(GPIO_EXT_MD_DL_KEY, 0); EMD_MSG_INF("chr","cm_do_md_power_on:set phone GPIO_EXT_MD_DL_KEY=%d\n",mt_get_gpio_out(GPIO_EXT_MD_DL_KEY)); #endif mt_set_gpio_dir(GPIO_EXT_MD_PWR_KEY, 1); mt_set_gpio_out(GPIO_EXT_MD_PWR_KEY, 1); msleep(POWER_ON_WAIT_RESET_TIME); ignore_wdt_interrupt = 1; cm_hold_rst_signal(); is_hold_rst = 1; EMD_MSG_INF("chr","cm_do_md_power_on:reset GPIO_EXT_MD_DL_KEY(%d),GPIO_EXT_MD_PWR_KEY(%d)\n",mt_get_gpio_out(GPIO_EXT_MD_DL_KEY),mt_get_gpio_out(GPIO_EXT_MD_PWR_KEY)); if(bootmode) { #ifndef GPIO_EXT_USB_SW2 mt_set_gpio_dir(GPIO_EXT_MD_META, 1); mt_set_gpio_out(GPIO_EXT_MD_META, 1); EMD_MSG_INF("chr","cm_do_md_power_on:meta mode,phone GPIO_EXT_MD_META(%d)\n",mt_get_gpio_out(GPIO_EXT_MD_META)); #else mt_set_gpio_pull_enable(GPIO_EXT_MD_DUMP, 1); mt_set_gpio_dir(GPIO_EXT_MD_DUMP, 1); mt_set_gpio_out(GPIO_EXT_MD_DUMP, 1); EMD_MSG_INF("chr","cm_do_md_power_on:meta mode,evb GPIO_EXT_MD_DUMP(%d)\n",mt_get_gpio_out(GPIO_EXT_MD_DUMP)); #endif } else { #ifndef GPIO_EXT_USB_SW2 mt_set_gpio_dir(GPIO_EXT_MD_META, 1); mt_set_gpio_out(GPIO_EXT_MD_META, 0); EMD_MSG_INF("chr","cm_do_md_power_on,phone GPIO_EXT_MD_META(%d)\n",mt_get_gpio_out(GPIO_EXT_MD_META)); #else mt_set_gpio_dir(GPIO_EXT_MD_DUMP, 1); mt_set_gpio_out(GPIO_EXT_MD_DUMP, 0); EMD_MSG_INF("chr","cm_do_md_power_on,evb GPIO_EXT_MD_DUMP(%d)\n",mt_get_gpio_out(GPIO_EXT_MD_DUMP)); #endif } mt_set_gpio_dir(GPIO_EXT_MD_WK_AP, 0); mt_set_gpio_pull_enable(GPIO_EXT_MD_WK_AP, 1); mt_set_gpio_pull_select(GPIO_EXT_MD_WK_AP, 0); mt_set_gpio_dir(GPIO_EXT_MD_EXP, 0); mt_set_gpio_pull_enable(GPIO_EXT_MD_EXP, 1); mt_set_gpio_pull_select(GPIO_EXT_MD_EXP, 1); mtk_uart_freeze_enable(uart_port,1); msleep(RESET_WAIT_RELEASE_TIME); //For low power, we switch UART GPIO when power off md, so restore here according to dws default setting. mt_set_gpio_mode(GPIO_UART_URXD1_PIN, 1); mt_set_gpio_mode(GPIO_UART_UTXD1_PIN, 1); mt_set_gpio_mode(GPIO_UART_URTS1_PIN, 1); mt_set_gpio_mode(GPIO_UART_UCTS1_PIN, 1); mt_set_gpio_dir(GPIO_UART_URXD1_PIN, 0); mt_set_gpio_pull_enable(GPIO_UART_URXD1_PIN, 1); mt_set_gpio_pull_select(GPIO_UART_URXD1_PIN, 1); mt_set_gpio_dir(GPIO_UART_UTXD1_PIN, 1); mt_set_gpio_out(GPIO_UART_UTXD1_PIN, 1); mt_set_gpio_dir(GPIO_UART_URTS1_PIN, 1); mt_set_gpio_out(GPIO_UART_URTS1_PIN, 1); mt_set_gpio_dir(GPIO_UART_UCTS1_PIN, 0); mt_set_gpio_pull_enable(GPIO_UART_UCTS1_PIN, 1); mt_set_gpio_pull_select(GPIO_UART_UCTS1_PIN, 1); EMD_MSG_INF("chr","uart gpio restore\n"); EMD_MSG_INF("chr","cm_do_md_power_on: GPIO_EXT_MD_EXP(%d),GPIO_EXT_MD_WD(%d),GPIO_EXT_MD_RST(%d),GPIO_EXT_MD_PWR_KEY(%d)\n", \ mt_get_gpio_in(GPIO_EXT_MD_EXP),mt_get_gpio_in(GPIO_EXT_MD_WD),mt_get_gpio_out(GPIO_EXT_MD_RST),mt_get_gpio_out(GPIO_EXT_MD_PWR_KEY)); return 0; }