static void tpd_suspend(struct early_suspend *h) { int ret = 0; int iRetry = 5; const char data = 0x3; #ifdef CONFIG_TOUCHSCREEN_SWEEP2WAKE scr_suspended = true; printk("[SWEEP2WAKE]: power suspend\n"); if ((sweep2wake == 0 || sweep2wake == 3) && doubletap2wake == 0) { #endif if ( g_pts ){ CTP_DBG("TPD enter sleep\n"); if (atomic_read(&g_pts->isp_opened)){ CTP_DBG("isp is already opened."); return; } mt_eint_mask(CUST_EINT_TOUCH_PANEL_NUM); mutex_lock(&g_pts->mutex);//Unlock on resume #ifdef CONFIG_TOUCHSCREEN_FT5X05_DISABLE_KEY_WHEN_SLIDE fts_5x06_key_cancel(); #endif #ifdef CONFIG_TOUCHSCREEN_POWER_DOWN_WHEN_SLEEP mt_set_gpio_mode(GPIO_CTP_RST_PIN, GPIO_CTP_RST_PIN_M_GPIO); mt_set_gpio_dir(GPIO_CTP_RST_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_CTP_RST_PIN, GPIO_OUT_ZERO); msleep(2); #ifdef MT6577 hwPowerDown(MT65XX_POWER_LDO_VGP, "touch"); #else mt_set_gpio_mode(GPIO_CTP_EN_PIN, GPIO_CTP_EN_PIN_M_GPIO); mt_set_gpio_dir(GPIO_CTP_EN_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_CTP_EN_PIN, GPIO_OUT_ZERO); #endif #else //!CONFIG_TOUCHSCREEN_POWER_DOWN_WHEN_SLEEP //make sure the WakeUp is high before it enter sleep mode, //otherwise the touch can't be resumed. //mt_set_gpio_mode(GPIO_CTP_EN_PIN, GPIO_CTP_EN_PIN_M_GPIO); //mt_set_gpio_dir(GPIO_CTP_EN_PIN, GPIO_DIR_OUT); //mt_set_gpio_out(GPIO_CTP_EN_PIN, GPIO_OUT_ONE); //msleep(1); while (iRetry) { ret = i2c_smbus_write_i2c_block_data(g_pts->client, 0xA5, 1, &data); //TP enter sleep mode if ( ret < 0 ){ TPD_DMESG("Enter sleep mode is %d\n", ret); #ifdef MT6577 hwPowerDown(MT65XX_POWER_LDO_VGP, "touch"); #else mt_set_gpio_mode(GPIO_CTP_EN_PIN, GPIO_CTP_EN_PIN_M_GPIO); mt_set_gpio_dir(GPIO_CTP_EN_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_CTP_EN_PIN, GPIO_OUT_ZERO); #endif msleep(2); fts_5x06_hw_init(); }else{ break; } iRetry--; msleep(100); } #endif//CONFIG_TOUCHSCREEN_POWER_DOWN_WHEN_SLEEP #if 0//Android 4.0 don't need to report these up events. ft5x06_complete_unfinished_event(); #endif atomic_set( &g_pts->ts_sleepState, 1 ); } #ifdef CONFIG_TOUCHSCREEN_SWEEP2WAKE } else if ((sweep2wake > 0 && sweep2wake < 3) || doubletap2wake > 0) mt_eint_unmask(CUST_EINT_TOUCH_PANEL_NUM); #endif }
static void tpd_suspend(struct early_suspend *h) { int ret = 0; int iRetry = 5; const char data = 0x3; if ( g_pts ){ CTP_DBG("TPD enter sleep\n"); if (atomic_read(&g_pts->isp_opened)){ CTP_DBG("isp is already opened."); return; } mt65xx_eint_mask(CUST_EINT_TOUCH_PANEL_NUM); mutex_lock(&g_pts->mutex);//Unlock on resume #ifdef CONFIG_TOUCHSCREEN_FT5X05_DISABLE_KEY_WHEN_SLIDE fts_5x06_key_cancel(); #endif #ifdef CONFIG_TOUCHSCREEN_POWER_DOWN_WHEN_SLEEP mt_set_gpio_mode(GPIO_CTP_RST_PIN, GPIO_CTP_RST_PIN_M_GPIO); mt_set_gpio_dir(GPIO_CTP_RST_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_CTP_RST_PIN, GPIO_OUT_ZERO); msleep(2); #if 1 // def MT6577 hwPowerDown(MT65XX_POWER_LDO_VGP5, "touch"); #else mt_set_gpio_mode(GPIO_CTP_EN_PIN, GPIO_CTP_EN_PIN_M_GPIO); mt_set_gpio_dir(GPIO_CTP_EN_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_CTP_EN_PIN, GPIO_OUT_ZERO); #endif #else //!CONFIG_TOUCHSCREEN_POWER_DOWN_WHEN_SLEEP //make sure the WakeUp is high before it enter sleep mode, //otherwise the touch can't be resumed. //mt_set_gpio_mode(GPIO_CTP_EN_PIN, GPIO_CTP_EN_PIN_M_GPIO); //mt_set_gpio_dir(GPIO_CTP_EN_PIN, GPIO_DIR_OUT); //mt_set_gpio_out(GPIO_CTP_EN_PIN, GPIO_OUT_ONE); //msleep(1); while (iRetry) { ret = i2c_smbus_write_i2c_block_data(g_pts->client, 0xA5, 1, &data); //TP enter sleep mode if ( ret < 0 ){ TPD_DMESG("Enter sleep mode is %d\n", ret); #if 1 // def MT6577 hwPowerDown(MT65XX_POWER_LDO_VGP5, "touch"); #else mt_set_gpio_mode(GPIO_CTP_EN_PIN, GPIO_CTP_EN_PIN_M_GPIO); mt_set_gpio_dir(GPIO_CTP_EN_PIN, GPIO_DIR_OUT); mt_set_gpio_out(GPIO_CTP_EN_PIN, GPIO_OUT_ZERO); #endif msleep(2); fts_5x06_hw_init(); }else{ break; } iRetry--; msleep(100); } #endif//CONFIG_TOUCHSCREEN_POWER_DOWN_WHEN_SLEEP atomic_set( &g_pts->ts_sleepState, 1 ); } }