int cm_do_md_go(void) { int ret = -1; if (is_hold_rst) { is_hold_rst=0; unsigned int retry = 100; EMD_MSG_INF("chr","cm_do_md_go:1\n"); EMD_MSG_INF("chr","cm_do_md_go2:GPIO_EXT_MD_RST(out)=%d,GPIO_EXT_MD_WD(in)=%d\n",mt_get_gpio_out(GPIO_EXT_MD_RST),mt_get_gpio_in(GPIO_EXT_MD_WD)); cm_relese_rst_signal(); EMD_MSG_INF("chr","cm_do_md_go3:GPIO_EXT_MD_RST(out)=%d,GPIO_EXT_MD_WD(in)=%d\n",mt_get_gpio_out(GPIO_EXT_MD_RST),mt_get_gpio_in(GPIO_EXT_MD_WD)); // Check WDT pin to high while(retry>0){ retry--; if(mt_get_gpio_in(GPIO_EXT_MD_WD)==0) { msleep(10); } else { ret=100-retry; break; } } atomic_set(&traffic_on, 1); msleep(1000); // for use AP_WK_MD as EXT_MD_META, give 6261 bootloader sometime to read boot mode atomic_set(&allow_wk_md, 1); cm_hold_wakeup_md_signal(); EMD_MSG_INF("chr","cm_do_md_go4:GPIO_EXT_MD_RST(out)=%d,GPIO_EXT_MD_WD(in)=%d\n",mt_get_gpio_out(GPIO_EXT_MD_RST),mt_get_gpio_in(GPIO_EXT_MD_WD)); msleep(POWER_ON_HOLD_TIME); mt_set_gpio_out(GPIO_EXT_MD_PWR_KEY, 0); } 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, 1); cm_enable_ext_md_wdt_irq(); cm_enable_ext_md_wakeup_irq(); cm_enable_ext_md_exp_irq(); //msleep(50); // WDT IRQ is level triggered now, no need this debounce ignore_wdt_interrupt = 0; return ret; }
int cm_do_md_go(void) { int ret = -1; if (is_hold_rst) { is_hold_rst=0; unsigned int retry = 100; EMD_MSG_INF("chr","cm_do_md_go:1\n"); EMD_MSG_INF("chr","cm_do_md_go2:GPIO_EXT_MD_RST(out)=%d,GPIO_EXT_MD_WD(in)=%d\n",mt_get_gpio_out(GPIO_EXT_MD_RST),mt_get_gpio_in(GPIO_EXT_MD_WD)); cm_relese_rst_signal(); atomic_set(&traffic_on, 1); EMD_MSG_INF("chr","cm_do_md_go3:GPIO_EXT_MD_RST(out)=%d,GPIO_EXT_MD_WD(in)=%d\n",mt_get_gpio_out(GPIO_EXT_MD_RST),mt_get_gpio_in(GPIO_EXT_MD_WD)); // Check WDT pin to high while(retry>0){ retry--; if(mt_get_gpio_in(GPIO_EXT_MD_WD)==0) { msleep(10); } else { ret=100-retry; break; } } EMD_MSG_INF("chr","cm_do_md_go4:GPIO_EXT_MD_RST(out)=%d,GPIO_EXT_MD_WD(in)=%d\n",mt_get_gpio_out(GPIO_EXT_MD_RST),mt_get_gpio_in(GPIO_EXT_MD_WD)); msleep(POWER_ON_HOLD_TIME); mt_set_gpio_out(GPIO_EXT_MD_PWR_KEY, 0); } 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, 1); cm_enable_ext_md_wdt_irq(); cm_enable_ext_md_wakeup_irq(); cm_enable_ext_md_exp_irq(); msleep(50); ignore_wdt_interrupt = 0; return ret; }
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; }