static void mcsdl_reboot_mcs(void) { //-------------------------------------------- // Tkey module reset //-------------------------------------------- gpio_tlmm_config(GPIO_CFG(GPIO_I2C0_SCL, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_16MA),GPIO_CFG_ENABLE); gpio_tlmm_config(GPIO_CFG(GPIO_I2C0_SDA, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_16MA),GPIO_CFG_ENABLE); MCSDL_RESETB_SET_LOW(); MCSDL_RESETB_SET_OUTPUT(); mcsdl_vdd_off(); gpio_set_value(GPIO_I2C0_SCL, 0); // TOUCH SCL DIS gpio_set_value(GPIO_I2C0_SDA, 0); // TOUCH SDA DIS msleep(300); gpio_tlmm_config(GPIO_CFG(GPIO_I2C0_SCL, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_UP, GPIO_CFG_16MA),GPIO_CFG_ENABLE); gpio_tlmm_config(GPIO_CFG(GPIO_I2C0_SDA, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_UP, GPIO_CFG_16MA),GPIO_CFG_ENABLE); MCSDL_RESETB_SET_INPUT(); MCSDL_RESETB_SET_HIGH(); gpio_set_value(GPIO_I2C0_SCL, 1); // TOUCH SCL EN gpio_set_value(GPIO_I2C0_SDA, 1); // TOUCH SDA EN mcsdl_vdd_on(); msleep(300); /* MCSDL_VDD_SET_LOW(); //MCSDL_CE_SET_LOW(); //MCSDL_CE_SET_OUTPUT(); MCSDL_GPIO_SDA_SET_HIGH(); MCSDL_GPIO_SDA_SET_OUTPUT(); MCSDL_GPIO_SCL_SET_HIGH(); MCSDL_GPIO_SCL_SET_OUTPUT(); //MCSDL_SET_HW_I2C(); MCSDL_RESETB_SET_LOW(); MCSDL_RESETB_SET_OUTPUT(); mcsdl_delay(MCSDL_DELAY_25MS); // Delay for Stable VDD MCSDL_RESETB_SET_INPUT(); MCSDL_VDD_SET_HIGH(); MCSDL_RESETB_SET_HIGH(); //MCSDL_CE_SET_HIGH(); mcsdl_delay(MCSDL_DELAY_30MS); // Delay '25 msec' */ }
static void mcsdl_reboot_mcs(void) { //-------------------------------------------- // Tkey module reset //-------------------------------------------- #if 0 //-------------------------------------------- // Tkey module reset //-------------------------------------------- //gpio_tlmm_config(GPIO_CFG(GPIO_I2C0_SCL, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_16MA),GPIO_CFG_ENABLE); //gpio_tlmm_config(GPIO_CFG(GPIO_I2C0_SDA, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_16MA),GPIO_CFG_ENABLE); MCSDL_RESETB_SET_LOW(); MCSDL_RESETB_SET_OUTPUT(0); mcsdl_vdd_off(); gpio_set_value(GPIO_TSP_SCL, 0); // TOUCH SCL DIS gpio_set_value(GPIO_TSP_SDA, 0); // TOUCH SDA DIS msleep(300); //gpio_tlmm_config(GPIO_CFG(GPIO_I2C0_SCL, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_UP, GPIO_CFG_16MA),GPIO_CFG_ENABLE); //gpio_tlmm_config(GPIO_CFG(GPIO_I2C0_SDA, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_UP, GPIO_CFG_16MA),GPIO_CFG_ENABLE); MCSDL_RESETB_SET_INPUT(); MCSDL_RESETB_SET_HIGH(); gpio_set_value(GPIO_TSP_SCL, 1); // TOUCH SCL EN gpio_set_value(GPIO_TSP_SDA, 1); // TOUCH SDA EN mcsdl_vdd_on(); msleep(300); //#else MCSDL_VDD_SET_LOW(); msleep(100); //MCSDL_CE_SET_LOW(); //MCSDL_CE_SET_OUTPUT(); MCSDL_GPIO_SDA_SET_HIGH(); MCSDL_GPIO_SDA_SET_OUTPUT(1); MCSDL_GPIO_SCL_SET_HIGH(); MCSDL_GPIO_SCL_SET_OUTPUT(1); //MCSDL_SET_HW_I2C(); MCSDL_RESETB_SET_LOW(); MCSDL_RESETB_SET_OUTPUT(0); //1->0 mcsdl_delay(MCSDL_DELAY_25MS); // Delay for Stable VDD MCSDL_RESETB_SET_INPUT(); MCSDL_VDD_SET_HIGH(); msleep(25); MCSDL_RESETB_SET_HIGH(); //MCSDL_CE_SET_HIGH(); printk("TSP firmware download complete and chip RESET! /n"); mcsdl_delay(MCSDL_DELAY_60MS); // Delay '25 msec' mcsdl_delay(MCSDL_DELAY_40MS); // Delay '25 msec' #endif MCSDL_VDD_SET_LOW(); MCSDL_CE_SET_LOW(); MCSDL_CE_SET_OUTPUT(); MCSDL_GPIO_SDA_SET_HIGH(); MCSDL_GPIO_SDA_SET_OUTPUT(1); MCSDL_GPIO_SCL_SET_HIGH(); MCSDL_GPIO_SCL_SET_OUTPUT(1); MCSDL_SET_HW_I2C(); MCSDL_RESETB_SET_LOW(); MCSDL_RESETB_SET_OUTPUT(0); mcsdl_delay(MCSDL_DELAY_25MS); // Delay for Stable VDD MCSDL_RESETB_SET_INPUT(); MCSDL_VDD_SET_HIGH(); MCSDL_CE_SET_HIGH(); mcsdl_delay(MCSDL_DELAY_30MS); // Delay '25 msec' }
int firm_update( void ) { int ret = 0; int cnt = 0; struct vreg *vreg_touch; printk(KERN_INFO "[TSP] %s, %d\n", __func__, __LINE__); printk("[TSP] disable_irq : %d\n", __LINE__ ); firmware_ret_val = -1; vreg_touch = vreg_get(NULL, "ldo6"); if (ts_global->use_irq) { printk("[TSP] disable_irq : %d\n", __LINE__ ); disable_irq(ts_global->client->irq); } ret = vreg_disable(vreg_touch); if (ret) { printk(KERN_ERR "%s: vreg enable failed (%d)\n", __func__, ret); ret=-EIO; } printk("[F/W D/L] Entry gpio_tlmm_config\n"); gpio_configure( TSP_SCL, GPIOF_DRIVE_OUTPUT ); gpio_configure( TSP_SDA, GPIOF_DRIVE_OUTPUT ); gpio_configure( TSP_INT, GPIOF_INPUT ); gpio_set_value( TSP_SCL , 0 ); gpio_set_value( TSP_SDA , 0 ); gpio_set_value( TSP_INT , 0 ); gpio_set_value( VTOUCH_EN , 0 ); //I2C Pullup for (cnt=0; cnt <5 ; cnt++){ mdelay(200); printk("[F/W D/L] Entry mcsdl_download_binary_data, try=%d\n", cnt ); ret = mcsdl_download_binary_data( HW_ver ); mdelay(200); if(ret > 0) { ret = read_ver(); if ( ret> 0) { firmware_ret_val = 1; printk("[TSP] Firmware update success! HW rev 0x%02x., SW rev 0x%02x.]\n", HW_ver, SW_ver); break; } } else { printk("[TSP] Firmware update failed.. RESET!, try=%d\n", cnt); mcsdl_vdd_off(); mdelay(500); mcsdl_vdd_on(); mdelay(200); if ( cnt >= 4 ) { printk("[TSP] Firmware update failed.. RESET!, try=%d\n", cnt); printk("[TSP] check i2c lines.\n"); firmware_ret_val = 0; break; } } } gpio_set_value( TSP_SCL , 1 ); gpio_set_value( TSP_SDA , 1 ); gpio_set_value( TSP_INT , 1 ); gpio_set_value( VTOUCH_EN , 1 ); //I2C Pullup msleep(10); if (ts_global->use_irq) { enable_irq(ts_global->client->irq); } return 0; }