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_select_isp_mode(UINT8 ucMode) { int i; UINT8 enteringCodeMassErase[16] = { 0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1 }; UINT8 enteringCodeSerialWrite[16] = { 0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1 }; UINT8 enteringCodeSerialRead[16] = { 0,1,1,0,1,0,1,0,1,1,0,0,1,0,0,1 }; UINT8 enteringCodeNextChipBypass[16] = { 1,1,0,1,1,0,0,1,0,0,1,0,1,1,0,1 }; UINT8 *pCode; //------------------------------------ // Entering ISP mode : Part 1 //------------------------------------ if( ucMode == ISP_MODE_ERASE_FLASH ) pCode = enteringCodeMassErase; else if( ucMode == ISP_MODE_SERIAL_WRITE ) pCode = enteringCodeSerialWrite; else if( ucMode == ISP_MODE_SERIAL_READ ) pCode = enteringCodeSerialRead; else if( ucMode == ISP_MODE_NEXT_CHIP_BYPASS ) pCode = enteringCodeNextChipBypass; for(i=0; i<16; i++){ if( pCode[i] == 1 ) MCSDL_RESETB_SET_HIGH(); else MCSDL_RESETB_SET_LOW(); mcsdl_delay(MCSDL_DELAY_3US); MCSDL_GPIO_SCL_SET_HIGH(); mcsdl_delay(MCSDL_DELAY_3US); MCSDL_GPIO_SCL_SET_LOW(); mcsdl_delay(MCSDL_DELAY_3US); } MCSDL_RESETB_SET_HIGH(); // High //--------------------------------------------------- // Entering ISP mode : Part 2 - Only Mass Erase //--------------------------------------------------- if( ucMode == ISP_MODE_ERASE_FLASH ){ mcsdl_delay(MCSDL_DELAY_7US); for(i=0; i<4; i++){ if( i==2 ) mcsdl_delay(MCSDL_DELAY_25MS); else if( i==3 ) mcsdl_delay(MCSDL_DELAY_150US); MCSDL_GPIO_SCL_SET_HIGH(); mcsdl_delay(MCSDL_DELAY_3US); MCSDL_GPIO_SCL_SET_LOW(); mcsdl_delay(MCSDL_DELAY_7US); } } }
static void mcsdl_unselect_isp_mode(void) { int i; MCSDL_RESETB_SET_LOW(); mcsdl_delay(MCSDL_DELAY_3US); for (i = 0; i < 10; i++) { MCSDL_GPIO_SCL_SET_HIGH(); mcsdl_delay(MCSDL_DELAY_3US); MCSDL_GPIO_SCL_SET_LOW(); mcsdl_delay(MCSDL_DELAY_3US); } }
void mcsdl_set_ready(void) { //-------------------------------------------- // Tkey module reset //-------------------------------------------- MCSDL_VDD_SET_LOW(); // power //MCSDL_CE_SET_LOW(); //MCSDL_CE_SET_OUTPUT(); //MCSDL_SET_GPIO_I2C(); mcsdl_set_gpio_i2c(); if (gpio_request(GPIO_TOUCH_I2C_SDA,"I2C3_SDA") != 0) { printk("TSP firm download, Could not request GPIO %d", GPIO_TOUCH_I2C_SDA); return -EIO; } if (gpio_request(GPIO_TOUCH_I2C_SCL,"I2C3_SCL") != 0) { printk("TSP firm download, Could not request GPIO %d", GPIO_TOUCH_I2C_SCL); return -EIO; } MCSDL_GPIO_SDA_SET_LOW(); MCSDL_GPIO_SDA_SET_OUTPUT(); MCSDL_GPIO_SCL_SET_LOW(); MCSDL_GPIO_SCL_SET_OUTPUT(); MCSDL_RESETB_SET_LOW(); MCSDL_RESETB_SET_OUTPUT(); mcsdl_delay(MCSDL_DELAY_25MS); // Delay for Stable VDD MCSDL_VDD_SET_HIGH(); //MCSDL_CE_SET_HIGH(); MCSDL_GPIO_SDA_SET_HIGH(); mcsdl_delay(MCSDL_DELAY_10MS); //mcsdl_delay(MCSDL_DELAY_40MS); // Delay '30 msec' }
static void mcsdl_unselect_isp_mode(void) { int i; MCSDL_GPIO_SDA_SET_HIGH(); MCSDL_GPIO_SDA_SET_OUTPUT(); MCSDL_RESETB_SET_LOW(); mcsdl_mcs7000_delay(MCSDL_DELAY_3US); for(i=0; i<9; i++){ MCSDL_GPIO_SCL_SET_HIGH(); mcsdl_mcs7000_delay(MCSDL_DELAY_5US); MCSDL_GPIO_SCL_SET_LOW(); mcsdl_mcs7000_delay(MCSDL_DELAY_5US); } mcsdl_mcs7000_delay(MCSDL_DELAY_500US); }
static void mcsdl_reboot_mcs(void) { //-------------------------------------------- // Tkey module reset //-------------------------------------------- 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(); gpio_free(GPIO_TOUCH_I2C_SDA); gpio_free(GPIO_TOUCH_I2C_SCL); mdelay(500); mcsdl_set_hw_i2c(); MCSDL_RESETB_SET_LOW(); MCSDL_RESETB_SET_OUTPUT(); mdelay(500); //mcsdl_delay(MCSDL_DELAY_60MS); // Delay for Stable VDD MCSDL_RESETB_SET_INPUT(); MCSDL_VDD_SET_HIGH(); MCSDL_RESETB_SET_HIGH(); //MCSDL_CE_SET_HIGH(); mdelay(500); //mcsdl_delay(MCSDL_DELAY_60MS); // Delay '25 msec' }
static void mcsdl_set_ready(void) { //-------------------------------------------- // Tkey module reset //-------------------------------------------- MCSDL_VDD_SET_LOW(); // power //MCSDL_CE_SET_LOW(); MCSDL_CE_SET_OUTPUT(); MCSDL_SET_GPIO_I2C(); //MCSDL_GPIO_SDA_SET_LOW(); //bomi MCSDL_GPIO_SDA_SET_OUTPUT(); MCSDL_GPIO_SDA_SET_LOW(); //MCSDL_GPIO_SCL_SET_LOW(); //bomi MCSDL_GPIO_SCL_SET_OUTPUT(); MCSDL_GPIO_SCL_SET_LOW(); //MCSDL_RESETB_SET_LOW(); //bomi MCSDL_RESETB_SET_OUTPUT(); MCSDL_RESETB_SET_LOW(); /* */ mcsdl_delay(MCSDL_DELAY_25MS); // Delay for Stable VDD mcsdl_delay(MCSDL_DELAY_25MS); // Delay for Stable VDD MCSDL_VDD_SET_HIGH(); MCSDL_CE_SET_HIGH(); MCSDL_GPIO_SCL_SET_LOW(); MCSDL_GPIO_SDA_SET_HIGH(); mcsdl_delay(MCSDL_DELAY_40MS); // Delay '30 msec' }
static void mcsdl_set_ready(void) { //-------------------------------------------- // Tkey module reset //-------------------------------------------- MCSDL_VDD_SET_LOW(); // power //MCSDL_CE_SET_LOW(); MCSDL_CE_SET_OUTPUT(); MCSDL_SET_GPIO_I2C(); //MCSDL_GPIO_SDA_SET_LOW(); //bomi MCSDL_GPIO_SDA_SET_OUTPUT(); MCSDL_GPIO_SDA_SET_LOW(); //MCSDL_GPIO_SCL_SET_LOW(); //bomi MCSDL_GPIO_SCL_SET_OUTPUT(); MCSDL_GPIO_SCL_SET_LOW(); //MCSDL_RESETB_SET_LOW(); //bomi MCSDL_RESETB_SET_OUTPUT(); MCSDL_RESETB_SET_LOW(); /* LGE_CHANGE_S: E0 [email protected] [2011-11-09] : TD1416085584 : After sleeping on and off while sensing a touchscreen, Touchscreen doesn't work*/ mcsdl_delay(MCSDL_DELAY_25MS); // Delay for Stable VDD mcsdl_delay(MCSDL_DELAY_25MS); // Delay for Stable VDD MCSDL_VDD_SET_HIGH(); MCSDL_CE_SET_HIGH(); MCSDL_GPIO_SCL_SET_LOW(); MCSDL_GPIO_SDA_SET_HIGH(); mcsdl_delay(MCSDL_DELAY_40MS); // Delay '30 msec' }
void MFS_reboot(void) { MCSDL_VDD_SET_LOW(); MCSDL_GPIO_SDA_SET_HIGH(); MCSDL_GPIO_SDA_SET_OUTPUT(1); MCSDL_GPIO_SCL_SET_HIGH(); MCSDL_GPIO_SCL_SET_OUTPUT(1); MCSDL_RESETB_SET_LOW(); MCSDL_RESETB_SET_OUTPUT(1); MFS_ms_delay(25); MCSDL_VDD_SET_HIGH(); MCSDL_RESETB_SET_HIGH(); MCSDL_RESETB_SET_INPUT(); MCSDL_GPIO_SCL_SET_INPUT(); MCSDL_GPIO_SDA_SET_INPUT(); MFS_ms_delay(25); }
static void mcsdl_set_ready(void) { //-------------------------------------------- // Tkey module reset //-------------------------------------------- MCSDL_VDD_SET_LOW(); #if 0 MCSDL_CE_SET_LOW(); MCSDL_CE_SET_OUTPUT(); #else MCSDL_CE_SET_OUTPUT(); MCSDL_CE_SET_LOW(); #endif MCSDL_SET_GPIO_I2C(); MCSDL_GPIO_SDA_SET_LOW(); MCSDL_GPIO_SDA_SET_OUTPUT(); MCSDL_GPIO_SCL_SET_LOW(); MCSDL_GPIO_SCL_SET_OUTPUT(); MCSDL_RESETB_SET_LOW(); MCSDL_RESETB_SET_OUTPUT(); mcsdl_delay(MCSDL_DELAY_25MS); // Delay for Stable VDD MCSDL_VDD_SET_HIGH(); MCSDL_CE_SET_HIGH(); MCSDL_GPIO_SDA_SET_HIGH(); mcsdl_delay(MCSDL_DELAY_30MS); // Delay '30 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' }
static int mcsdl_download(const UINT8 *pBianry, const UINT16 unLength, INT8 IdxNum ) { int nRet; //--------------------------------- // Check Binary Size //--------------------------------- if( unLength >= MELFAS_FIRMWARE_MAX_SIZE ){ nRet = MCSDL_RET_PROGRAM_SIZE_IS_WRONG; goto MCSDL_DOWNLOAD_FINISH; } #if MELFAS_ENABLE_DBG_PROGRESS_PRINT printk(" - Starting download...\n"); #endif //--------------------------------- // Make it ready //--------------------------------- #if MELFAS_ENABLE_DBG_PROGRESS_PRINT printk(" > Ready\n"); #endif mcsdl_set_ready(); // mcsdl_delay(MCSDL_DELAY_1MS); //--------------------------------- // Erase Flash //--------------------------------- #if MELFAS_ENABLE_DBG_PROGRESS_PRINT printk(" > Erase\n"); #endif nRet = mcsdl_erase_flash(IdxNum); if( nRet != MCSDL_RET_SUCCESS ) goto MCSDL_DOWNLOAD_FINISH; // mcsdl_delay(MCSDL_DELAY_1MS); //--------------------------------- // Program Flash //--------------------------------- #if MELFAS_ENABLE_DBG_PROGRESS_PRINT printk(" > Program "); #endif nRet = mcsdl_program_flash( (UINT8*)pBianry, (UINT16)unLength, IdxNum ); if( nRet != MCSDL_RET_SUCCESS ) goto MCSDL_DOWNLOAD_FINISH; //--------------------------------- // Verify flash //--------------------------------- /*if (IdxNum == 0)*/ { #if MELFAS_ENABLE_DBG_PROGRESS_PRINT printk(" > Verify=== \n"); #endif nRet = mcsdl_verify_flash( (UINT8*)pBianry, (UINT16)unLength, IdxNum ); if( nRet != MCSDL_RET_SUCCESS ) goto MCSDL_DOWNLOAD_FINISH; } nRet = MCSDL_RET_SUCCESS; MCSDL_DOWNLOAD_FINISH : #if MELFAS_ENABLE_DBG_PRINT mcsdl_print_result( nRet ); // Show result #endif #if MELFAS_ENABLE_DBG_PROGRESS_PRINT printk(" > Rebooting\n"); printk(" - Fin.\n\n"); printk(" - IdxNum =[%d] \n",IdxNum); #endif if(IdxNum == 0) mcsdl_reboot_mcs(); else { MCSDL_RESETB_SET_LOW(); MCSDL_RESETB_SET_OUTPUT(1); mcsdl_delay(MCSDL_DELAY_25MS); // Delay for Stable VDD MCSDL_RESETB_SET_INPUT(); MCSDL_VDD_SET_HIGH(); msleep(25); } return nRet; }
static void mcsdl_select_isp_mode(UINT8 ucMode) { int i; UINT8 enteringCodeMassErase[3] = { 1, 1, 1 }; UINT8 enteringCodeSerialWrite[3] = { 0, 0, 1 }; UINT8 enteringCodeSerialRead[3] = { 0, 1, 0 }; UINT8 *pCode; //------------------------------------ // Entering ISP mode : Part 1 //------------------------------------ for(i=0; i<4; i++){ MCSDL_RESETB_SET_LOW(); mcsdl_mcs7000_delay(MCSDL_DELAY_3US); MCSDL_GPIO_SCL_SET_HIGH(); mcsdl_mcs7000_delay(MCSDL_DELAY_3US); MCSDL_GPIO_SCL_SET_LOW(); mcsdl_mcs7000_delay(MCSDL_DELAY_3US); MCSDL_RESETB_SET_HIGH(); mcsdl_mcs7000_delay(MCSDL_DELAY_3US); MCSDL_GPIO_SCL_SET_HIGH(); mcsdl_mcs7000_delay(MCSDL_DELAY_3US); MCSDL_GPIO_SCL_SET_LOW(); mcsdl_mcs7000_delay(MCSDL_DELAY_3US); } MCSDL_RESETB_SET_HIGH(); mcsdl_mcs7000_delay(MCSDL_DELAY_3US); MCSDL_GPIO_SCL_SET_HIGH(); mcsdl_mcs7000_delay(MCSDL_DELAY_3US); MCSDL_GPIO_SCL_SET_LOW(); mcsdl_mcs7000_delay(MCSDL_DELAY_3US); //------------------------------------ // Entering ISP mode : Part 2 //------------------------------------ if( ucMode == ISP_MODE_ERASE_FLASH ) pCode = enteringCodeMassErase; else if( ucMode == ISP_MODE_SERIAL_WRITE ) pCode = enteringCodeSerialWrite; else if( ucMode == ISP_MODE_SERIAL_READ ) pCode = enteringCodeSerialRead; for(i=0; i<3; i++){ if( pCode[i] == 1 ) MCSDL_RESETB_SET_HIGH(); else MCSDL_RESETB_SET_LOW(); mcsdl_mcs7000_delay(MCSDL_DELAY_3US); MCSDL_GPIO_SCL_SET_HIGH(); mcsdl_mcs7000_delay(MCSDL_DELAY_3US); MCSDL_GPIO_SCL_SET_LOW(); mcsdl_mcs7000_delay(MCSDL_DELAY_3US); } MCSDL_RESETB_SET_HIGH(); mcsdl_mcs7000_delay(MCSDL_DELAY_3US); // High //--------------------------------------------------- // Entering ISP mode : Part 3 - Only Mass Erase //--------------------------------------------------- if( ucMode == ISP_MODE_ERASE_FLASH ){ for(i=0; i<6; i++){ if( i==3 ) mcsdl_mcs7000_delay(MCSDL_DELAY_25MS); else if( i==4 ) mcsdl_mcs7000_delay(MCSDL_DELAY_150US); MCSDL_GPIO_SCL_SET_HIGH(); mcsdl_mcs7000_delay(MCSDL_DELAY_5US); MCSDL_GPIO_SCL_SET_LOW(); mcsdl_mcs7000_delay(MCSDL_DELAY_5US); } } }
static void mcsdl_select_isp_mode(UINT8 ucMode) { int i; UINT8 enteringCodeMassErase[16] = { 0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1 }; UINT8 enteringCodeSerialWrite[16] = { 0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1 }; UINT8 enteringCodeSerialRead[16] = { 0,1,1,0,1,0,1,0,1,1,0,0,1,0,0,1 }; UINT8 enteringCodeNextChipBypass[16] = { 1,1,0,1,1,0,0,1,0,0,1,0,1,1,0,1 }; UINT8 *pCode; //------------------------------------ // Entering ISP mode : Part 1 //------------------------------------ if (ucMode == ISP_MODE_ERASE_FLASH) pCode = enteringCodeMassErase; else if (ucMode == ISP_MODE_SERIAL_WRITE) pCode = enteringCodeSerialWrite; else if (ucMode == ISP_MODE_SERIAL_READ) pCode = enteringCodeSerialRead; else if (ucMode == ISP_MODE_NEXT_CHIP_BYPASS) pCode = enteringCodeNextChipBypass; MCSDL_RESETB_SET_LOW(); MCSDL_GPIO_SCL_SET_LOW(); MCSDL_GPIO_SDA_SET_HIGH(); for (i = 0; i < 16; i++) { if (pCode[i] == 1) { MCSDL_RESETB_SET_HIGH(); } else { MCSDL_RESETB_SET_LOW(); } //start add delay for INT mcsdl_delay(MCSDL_DELAY_3US); //end delay for INT MCSDL_GPIO_SCL_SET_HIGH(); mcsdl_delay(MCSDL_DELAY_3US); MCSDL_GPIO_SCL_SET_LOW(); mcsdl_delay(MCSDL_DELAY_3US); } MCSDL_RESETB_SET_LOW(); //--------------------------------------------------- // Entering ISP mode : Part 2 - Only Mass Erase //--------------------------------------------------- mcsdl_delay(MCSDL_DELAY_7US); MCSDL_GPIO_SCL_SET_LOW(); MCSDL_GPIO_SDA_SET_HIGH(); if( ucMode == ISP_MODE_ERASE_FLASH ){ mcsdl_delay(MCSDL_DELAY_7US); //5us for(i=0; i<4; i++){ if( i==2 ) mcsdl_delay(MCSDL_DELAY_25MS); //20ms else if( i==3 ) mcsdl_delay(MCSDL_DELAY_150US); //102us MCSDL_GPIO_SCL_SET_HIGH(); mcsdl_delay(MCSDL_DELAY_3US); // melfas assume 3us in code is 1us in document MCSDL_GPIO_SCL_SET_LOW(); mcsdl_delay(MCSDL_DELAY_7US); } } MCSDL_GPIO_SDA_SET_LOW(); }
static void mcsdl_select_isp_mode(UINT8 ucMode) { int i; UINT8 enteringCodeMassErase[16] = { 0,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1 }; UINT8 enteringCodeSerialWrite[16] = { 0,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1 }; UINT8 enteringCodeSerialRead[16] = { 0,1,1,0,1,0,1,0,1,1,0,0,1,0,0,1 }; UINT8 enteringCodeNextChipBypass[16] = { 1,1,0,1,1,0,0,1,0,0,1,0,1,1,0,1 }; UINT8 *pCode = 0; //------------------------------------ // Entering ISP mode : Part 1 //------------------------------------ if (ucMode == ISP_MODE_ERASE_FLASH) pCode = enteringCodeMassErase; else if (ucMode == ISP_MODE_SERIAL_WRITE) pCode = enteringCodeSerialWrite; else if (ucMode == ISP_MODE_SERIAL_READ) pCode = enteringCodeSerialRead; else if (ucMode == ISP_MODE_NEXT_CHIP_BYPASS) pCode = enteringCodeNextChipBypass; //----------------------------------------------------- //@@@ [WONJINHAN : [email protected] - 2011.11.08] //printk("%d \n", ucMode); MCSDL_RESETB_SET_LOW(); MCSDL_GPIO_SCL_SET_LOW(); MCSDL_GPIO_SDA_SET_HIGH(); for (i = 0; i < 16; i++) { if (pCode[i] == 1) MCSDL_RESETB_SET_HIGH(); else MCSDL_RESETB_SET_LOW(); //start add delay for INT mcsdl_delay(MCSDL_DELAY_3US); //end delay for INT MCSDL_GPIO_SCL_SET_HIGH(); mcsdl_delay(MCSDL_DELAY_3US); MCSDL_GPIO_SCL_SET_LOW(); mcsdl_delay(MCSDL_DELAY_3US); } MCSDL_RESETB_SET_LOW(); //--------------------------------------------------- // Entering ISP mode : Part 2 - Only Mass Erase //--------------------------------------------------- mcsdl_delay(MCSDL_DELAY_7US); MCSDL_GPIO_SCL_SET_LOW(); MCSDL_GPIO_SDA_SET_HIGH(); if( ucMode == ISP_MODE_ERASE_FLASH ){ mcsdl_delay(MCSDL_DELAY_7US); for(i=0; i<4; i++){ if( i==2 ) mcsdl_delay(MCSDL_DELAY_25MS); else if( i==3 ) mcsdl_delay(MCSDL_DELAY_150US); MCSDL_GPIO_SCL_SET_HIGH(); mcsdl_delay(MCSDL_DELAY_3US); MCSDL_GPIO_SCL_SET_LOW(); mcsdl_delay(MCSDL_DELAY_7US); } } MCSDL_GPIO_SDA_SET_LOW(); }