static void mcsdl_write_bits(UINT32 wordData, int nBits)
{
    int i;

    MCSDL_GPIO_SCL_SET_LOW();
    MCSDL_GPIO_SDA_SET_LOW();

    for (i = 0; i < nBits; i++)
    {
        if (wordData & 0x80000000) {
            MCSDL_GPIO_SDA_SET_HIGH();
        }
        else                       {
            MCSDL_GPIO_SDA_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);

        wordData <<= 1;
    }
}
// Change it from static void to void by matthew.kim
void mcsdl_scl_toggle_twice(void)
{

    MCSDL_GPIO_SDA_SET_HIGH();
    MCSDL_GPIO_SDA_SET_OUTPUT(1);

    MCSDL_GPIO_SCL_SET_HIGH();
    mcsdl_delay(MCSDL_DELAY_20US);
    MCSDL_GPIO_SCL_SET_LOW();
    mcsdl_delay(MCSDL_DELAY_20US);

    MCSDL_GPIO_SCL_SET_HIGH();
    mcsdl_delay(MCSDL_DELAY_20US);
    MCSDL_GPIO_SCL_SET_LOW();
    mcsdl_delay(MCSDL_DELAY_20US);
}
Beispiel #3
0
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();

	MCSDL_RESETB_SET_LOW();
	MCSDL_RESETB_SET_OUTPUT();

	mcsdl_delay(MCSDL_DELAY_25MS);						// Delay for Stable VDD

	MCSDL_VDD_SET_HIGH();

	MCSDL_RESETB_SET_HIGH();
    MCSDL_RESETB_SET_INPUT();
    MCSDL_GPIO_SCL_SET_INPUT();
    MCSDL_GPIO_SDA_SET_INPUT();

    mcsdl_delay(MCSDL_DELAY_30MS); 						// Delay '25 msec'
}
static void mcsdl_read_32bits( UINT8 *pData )
{
    int i, j;
    MCSDL_GPIO_SCL_SET_LOW();
    MCSDL_GPIO_SDA_SET_LOW();
    MCSDL_GPIO_SDA_SET_INPUT();



    for (i=3; i>=0; i--) {

        pData[i] = 0;

        for (j=0; j<8; j++) {

            pData[i] <<= 1;

            MCSDL_GPIO_SCL_SET_LOW();
            mcsdl_delay(MCSDL_DELAY_1US);
            MCSDL_GPIO_SCL_SET_HIGH();
            mcsdl_delay(MCSDL_DELAY_1US);

            if (MCSDL_GPIO_SDA_IS_HIGH())
                pData[i] |= 0x01;
        }
    }

    MCSDL_GPIO_SDA_SET_LOW();
    MCSDL_GPIO_SDA_SET_OUTPUT(0);
}
static void mcsdl_reboot_mcs(void)
{
    MCSDL_VDD_SET_LOW();

    MCSDL_CE_SET_LOW();
    MCSDL_CE_SET_OUTPUT(0);

    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(0);

    mcsdl_delay(MCSDL_DELAY_25MS);                                          /* Delay for Stable VDD */

    MCSDL_VDD_SET_HIGH();
    /*MCSDL_CE_SET_HIGH();*/

    MCSDL_RESETB_SET_HIGH();
    MCSDL_RESETB_SET_INPUT();
    MCSDL_GPIO_SCL_SET_INPUT();
    MCSDL_GPIO_SDA_SET_INPUT();

    mcsdl_delay(MCSDL_DELAY_30MS);                                          /* Delay '25 msec' */
}
static void mcsdl_write_bits(UINT32 wordData, int nBits)
{
	int i;

    MCSDL_GPIO_SCL_SET_LOW();
    MCSDL_GPIO_SDA_SET_LOW();

    for (i = 0; i < nBits; i++)
    {
        if (wordData & 0x80000000) {
					MCSDL_GPIO_SDA_SET_HIGH();
				}
        else	{
					MCSDL_GPIO_SDA_SET_LOW();
				}

				/* LGE_CHANGE_S: E0 [email protected] [2011-11-09] */
				
        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);
				
				wordData <<= 1;
	}
}
Beispiel #7
0
/* function added for TSP fix*/
static void mcsdl_reboot_mcs(void)
{
    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_RESETB_SET_LOW();
    MCSDL_RESETB_SET_OUTPUT(1);

    mcsdl_delay(MCSDL_DELAY_400MS);      // Delay for Stable VDD

    MCSDL_VDD_SET_HIGH();
    //MCSDL_CE_SET_HIGH();

    MCSDL_RESETB_SET_HIGH();
    MCSDL_RESETB_SET_ALT();
    MCSDL_GPIO_SCL_SET_ALT();
    MCSDL_GPIO_SDA_SET_ALT();

    mcsdl_delay(MCSDL_DELAY_30MS);       // Delay '25 msec'
}
void mcsdl_delay_test(INT32 nCount)
{
    INT16 i;
    MELFAS_DISABLE_BASEBAND_ISR();                          /*Disable Baseband touch interrupt ISR*/
    MELFAS_DISABLE_WATCHDOG_TIMER_RESET();                  /* Disable Baseband watchdog timer*/

    /*--------------------------------
    //      Repeating 'nCount' times
    //--------------------------------*/
    /*MCSDL_SET_GPIO_I2C();*/
    MCSDL_GPIO_SCL_SET_OUTPUT(0);
    MCSDL_GPIO_SDA_SET_OUTPUT(0);
    MCSDL_RESETB_SET_OUTPUT(0);

    MCSDL_GPIO_SCL_SET_HIGH();

    for (i = 0; i < nCount; i++) {
#if 1
        MCSDL_GPIO_SCL_SET_LOW();
        mcsdl_delay(MCSDL_DELAY_20US);
        MCSDL_GPIO_SCL_SET_HIGH();
        mcsdl_delay(MCSDL_DELAY_100US);
#elif 0
        MCSDL_GPIO_SCL_SET_LOW();
        mcsdl_delay(MCSDL_DELAY_500US);
        MCSDL_GPIO_SCL_SET_HIGH();
        mcsdl_delay(MCSDL_DELAY_1MS);
#else
        MCSDL_GPIO_SCL_SET_LOW();
        mcsdl_delay(MCSDL_DELAY_25MS);
        TKEY_INTR_SET_LOW();
        mcsdl_delay(MCSDL_DELAY_45MS);
        TKEY_INTR_SET_HIGH();
#endif
    }

    MCSDL_GPIO_SCL_SET_HIGH();

    MELFAS_ROLLBACK_BASEBAND_ISR();                         /* Roll-back Baseband touch interrupt ISR.*/
    MELFAS_ROLLBACK_WATCHDOG_TIMER_RESET();                 /* Roll-back Baseband watchdog timer */
}
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);
    }
}
Beispiel #10
0
static void mcsdl_read_flash( UINT8 *pBuffer)
{
	int i;
    
    MCSDL_GPIO_SDA_SET_LOW();

	mcsdl_delay(MCSDL_DELAY_40US);

    for (i=0; i< 5; i++){
        MCSDL_GPIO_SCL_SET_HIGH();  mcsdl_delay(MCSDL_DELAY_10US);
        MCSDL_GPIO_SCL_SET_LOW();  mcsdl_delay(MCSDL_DELAY_10US);
        }

		mcsdl_read_32bits( pBuffer );
}
Beispiel #11
0
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'

}
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);
}
Beispiel #14
0
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);
		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();
}
Beispiel #15
0
static int mcsdl_program_flash( UINT8 *pDataOriginal, UINT16 unLength, INT8 IdxNum )
{
	int		i;

	UINT8	*pData;
	UINT8   ucLength;

	UINT16  addr;
	UINT32  header;

	addr   = 0;
	pData  = pDataOriginal;

    ucLength = MELFAS_TRANSFER_LENGTH;

//kang

    while ((addr*4) < (int)unLength)
    {
        if ((unLength - (addr*4)) < MELFAS_TRANSFER_LENGTH)
        {
            ucLength  = (UINT8)(unLength - (addr * 4));
        }

    	//--------------------------------------
    	//	Select ISP Mode
    	//--------------------------------------

		// start ADD DELAY
        mcsdl_delay(MCSDL_DELAY_40US);
		//end ADD DELAY
        if(IdxNum > 0)  {
		mcsdl_select_isp_mode(ISP_MODE_NEXT_CHIP_BYPASS);
		mcsdl_delay(MCSDL_DELAY_3US);

        }
    	mcsdl_select_isp_mode( ISP_MODE_SERIAL_WRITE );

    	//---------------------------------------------
    	//	Header
    	//	Address[13ibts] <<1
    	//---------------------------------------------
    	header = ((addr&0x1FFF) << 1) | 0x0 ;
 		header = header << 14;

    	 //Write 18bits
    	mcsdl_write_bits( header, 18 );
		//start ADD DELAY
        //mcsdl_delay(MCSDL_DELAY_5MS);
		//end ADD DELAY

    	//---------------------------------
    	//	Writing
    	//---------------------------------
    //		addr += (UINT16)ucLength;
            addr +=1;

		#if MELFAS_ENABLE_DBG_PROGRESS_PRINT
		printk("#");
		#endif


		mcsdl_program_flash_part(pData);

		pData  += ucLength;

    	//---------------------------------------------
    	//	Tail
    	//---------------------------------------------
        MCSDL_GPIO_SDA_SET_HIGH();
//kang
	    mcsdl_delay(MCSDL_DELAY_40US);

        for (i = 0; i < 6; i++)
        {
            if (i == 2)
            {
                mcsdl_delay(MCSDL_DELAY_20US);
            }
            else if (i == 3)
            {
                mcsdl_delay(MCSDL_DELAY_40US);
            }

            MCSDL_GPIO_SCL_SET_HIGH();  mcsdl_delay(MCSDL_DELAY_10US);
            MCSDL_GPIO_SCL_SET_LOW();   mcsdl_delay(MCSDL_DELAY_10US);
        }
        MCSDL_GPIO_SDA_SET_LOW();

    	mcsdl_unselect_isp_mode();
//start ADD DELAY
        mcsdl_delay(MCSDL_DELAY_300US);
//end ADD DELAY


	}

	return MCSDL_RET_SUCCESS;
}
Beispiel #16
0
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'
}
Beispiel #17
0
static int mcsdl_verify_flash( UINT8 *pDataOriginal, UINT16 unLength, INT8 IdxNum )
{
	int	  i, j;
	int	  nRet;

	UINT8 *pData;
	UINT8 ucLength;

	UINT16 addr;
	UINT32 wordData;

	addr  = 0;
	pData = (UINT8 *) pDataOriginal;

	ucLength  = MELFAS_TRANSFER_LENGTH;

    while(  (addr*4) < (int)unLength){

        if( ( unLength -  (addr*4) ) < MELFAS_TRANSFER_LENGTH ){
            ucLength = (UINT8)(unLength -  (addr*4) );
        }

		// start ADD DELAY        
        mcsdl_delay(MCSDL_DELAY_40US);

    	//--------------------------------------
    	//	Select ISP Mode
    	//--------------------------------------
        if(IdxNum > 0) {
		mcsdl_select_isp_mode(ISP_MODE_NEXT_CHIP_BYPASS);
		mcsdl_delay(MCSDL_DELAY_3US);		
        }
	
    	mcsdl_select_isp_mode(ISP_MODE_SERIAL_READ);


    	//---------------------------------------------
    	//	Header
    	//	Address[13ibts] <<1
    	//---------------------------------------------
    	wordData   = ( (addr&0x1FFF) << 1 ) | 0x0;
    	wordData <<= 14;

    	mcsdl_write_bits( wordData, 18 );

        addr+=1;

    		#if MELFAS_ENABLE_DBG_PROGRESS_PRINT
    		printk("#");
    		#endif

    		//--------------------
    		// Read flash
    		//--------------------
    		mcsdl_read_flash( ucVerifyBuffer);

//kang
            MCSDL_GPIO_SDA_SET_HIGH();

//            mcsdl_delay(MCSDL_DELAY_1MS);
            for(i=0; i<6; i++){

                if( i==2 ) mcsdl_delay(MCSDL_DELAY_3US);
                else if( i==3 ) mcsdl_delay(MCSDL_DELAY_40US);//(MCSDL_DELAY_1MS);
            
                MCSDL_GPIO_SCL_SET_HIGH();  mcsdl_delay(MCSDL_DELAY_10US);
                MCSDL_GPIO_SCL_SET_LOW();   mcsdl_delay(MCSDL_DELAY_10US);
            }
//kang

    		//--------------------
    		// Comparing
    		//--------------------


		if(IdxNum == 0)
		{
	    		for(j=0; j<(int)ucLength; j++){

	    			#if MELFAS_ENABLE_DBG_PROGRESS_PRINT
	    			printk(" %02X", ucVerifyBuffer[j] );
	                #endif

	    			if( ucVerifyBuffer[j] != pData[j] ){

	    				#if MELFAS_ENABLE_DBG_PROGRESS_PRINT
    				printk("\n [Error] Address : 0x%04X : 0x%02X - 0x%02X ucLength=[%d] \n", addr, pData[j], ucVerifyBuffer[j],j );
	                    #endif


    				nRet = MCSDL_RET_PROGRAM_VERIFY_FAILED;
    				goto MCSDL_VERIFY_FLASH_FINISH;

	    			}
	    		}
		}
		else // slave
		{
	    		for(j=0; j<(int)ucLength; j++){

	    			#if MELFAS_ENABLE_DBG_PROGRESS_PRINT
	    			printk(" %02X", ucVerifyBuffer[j] );
	                #endif

	    			if( (0xff-ucVerifyBuffer[j]) != pData[j] ){ 

	    				#if MELFAS_ENABLE_DBG_PROGRESS_PRINT
	    				printk("\n [Error] Address : 0x%04X : 0x%02X - 0x%02X\n", addr, pData[j], ucVerifyBuffer[j] );
	                    #endif


	    				nRet = MCSDL_RET_PROGRAM_VERIFY_FAILED;
	    				goto MCSDL_VERIFY_FLASH_FINISH;

	    			}
	    		}		
		}
    		pData += ucLength;

    		#if MELFAS_ENABLE_DBG_PROGRESS_PRINT
    		//printk("\n");
    		#endif
			 
			mcsdl_unselect_isp_mode();
    	}

	nRet = MCSDL_RET_SUCCESS;

MCSDL_VERIFY_FLASH_FINISH:

	#if MELFAS_ENABLE_DBG_PROGRESS_PRINT
	printk("\n");
	#endif

	mcsdl_unselect_isp_mode();

	return nRet;
}
Beispiel #18
0
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);
		}
	}
}