www.pudn.com > lcd.rar > lcd.c


  /*--------janing xu updataed on 09/11/2007 -----*/ 
/*--- Please choose LCM firstly ---*/ 
 
//#define   LCM_XINSHENHUI_HX8306A_176x220 
#define  LCM_LEAD_R61503_176x220 
//#define  LCM_LEAD_ILI9221_176x220 
//#define  LCM_LEAD_L1E2_176x220 
 
/*--- Please choose LCM firstly ---*/ 
/*---------------------------------------*/ 
 
#include "drv_comm.h" 
#include "reg_base.h" 
#include "lcd_sw_inc.h" 
#include "lcd_sw.h" 
#include "lcd_hw.h" 
/*Serial interface*/ 
#include "lcd_if.h" 
#include "lcd_sw_rnd.h" 
 
#ifndef __CUST_NEW__ 
extern void GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada); 
extern void GPIO_WriteIO(char data, char port); 
#endif /* __CUST_NEW__ */ 
 
volatile kal_uint32 g_iFactor = 50; 
  
void LCD_Init_HX8306A(kal_uint32 bkground, void **buf_addr); 
 
kal_bool  lcd_assert_fail = KAL_FALSE; 
 
kal_uint8 lcd_check = 0; 
kal_uint8 lcd_reg_index = 0; 
 
const lcd_data_struct lcd_check_reg = { 
{ 
	      {0x0001,0x011B}, {0x0002,0x0700}, {0x0003,0x1230}, {0x0007,0x0037}, {0x0009,0x0000}, 
	      {0x000B,0x0000}, {0x000C,0x0003}, {0x0010,0x4140}, {0x0011,0x0000}, {0x0012,0x0013}, 
	      {0x0013,0x3611}, {0x0040,0x0000}, {0x0041,0x00EF}, {0x0042,0xDB00}, {0x0043,0xDB00},  
	      {0x0047,0x0000}, {0x0008,0x0202}, {0x0004,0x0000}, {0x0005,0x0000}, {0x0023,0x0000}, 
	      {0x0024,0x0000}, {0x0053,0x0000} 
	}       
}; 
 
 
/* default value for Himax HX8306A */ 
kal_uint16 lcd_power_ctrl_shadow1, lcd_power_ctrl_shadow3, lcd_power_ctrl_shadow4; 
 
#ifdef DUAL_LCD 
 
	#ifndef COLOR_SUBLCD 
		const kal_uint8 SubLCDSetArray[]= 
		{ 
			0x01,	// 0000 0001 
			0x02,	// 0000 0010 
			0x04,	// 0000 0100 
			0x08,	// 0000 1000 
			0x10,	// 0001 0000 
			0x20,	// 0010 0000 
			0x40,	// 0100 0000 
			0x80	// 1000 0000 
		}; 
 
		const kal_uint8 SubLCDReSetArray[]= 
		{ 
			0xFE,	// 1111 1110 
			0xFD,	// 1111 1101 
			0xFB,	// 1111 1011 
			0xF7,	// 1111 0111 
			0xEF,	// 1110 1111 
			0xDF,	// 1101 1111 
			0xBF,	// 1011 1111 
			0x7F	// 0111 1111 
		}; 
	#endif 
#endif 
 
void LCD_Delay(kal_uint32 delay_count) 
{ 
	volatile kal_uint32 delay; 
	for (delay = 0; delay < delay_count * g_iFactor; delay++); 
} 
 
void DELAY_1ms(kal_uint8 nSec) 
{ 
         volatile kal_uint16 delay; 
         volatile kal_uint16 loop; 
 
         for(delay=0;delay> 10) & 0x000000ff); 
    read_data2 = ((read_data>> 1) & 0x000000ff); 
    return_data=(read_data1<<8)|read_data2; 
    while (LCD_IS_RUNNING); 
 
    return return_data;	 
#elif (defined(LCD_8BIT_MODE)) 
    kal_uint16 return_data; 
    kal_uint8 iDataH, iDataL; 
 
    while (LCD_IS_RUNNING); 
    LCD_CtrlWrite_HX8306A_ESD(addr); 
    iDataH = *(volatile kal_uint8 *) MAIN_LCD_DATA_ADDR; 
    iDataL = *(volatile kal_uint8 *) MAIN_LCD_DATA_ADDR; 
    return_data = (iDataH << 8) | iDataL; 
    while (LCD_IS_RUNNING); 
 
    return return_data;	 
#endif 
*/ 
} 
 
void LCD_set_reg(kal_uint16 reg_index, kal_uint16 reg_data) 
{  LCD_CtrlWrite_HX8306A(0); 
    LCD_CtrlWrite_HX8306A(reg_index); 
    LCD_DataWrite_HX8306A((reg_data&0xFF00)>>8); 
    LCD_DataWrite_HX8306A(reg_data&0xFF); 
} 
 
void LCD_EnterSleep_HX8306A(void) 
{ 
 
	lcd_power_ctrl_shadow1 |= 0x02; 
	lcd_power_ctrl_shadow3 &= ~0x10; 
	lcd_power_ctrl_shadow4 &= ~0x2000; 
#ifdef LCM_LEAD_R61503_176x220 
    { 
	// Display off 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x07); 
	LCD_DataWrite_HX8306A(0x00); 
	LCD_DataWrite_HX8306A(0x02); 
 
	DELAY_1ms(4); 
 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x12); 
	LCD_DataWrite_HX8306A(0x01); 
	LCD_DataWrite_HX8306A(0x12);    
	DELAY_1ms(5); 
 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x07); 
	LCD_DataWrite_HX8306A(0x00); 
	LCD_DataWrite_HX8306A(0x00); 
 
	// Power off 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x10); 
	LCD_DataWrite_HX8306A(0x01); 
	LCD_DataWrite_HX8306A(0x80); 
 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x11); 
	LCD_DataWrite_HX8306A(0x00); 
	LCD_DataWrite_HX8306A(0x61); 
 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x12); 
	LCD_DataWrite_HX8306A(0x00); 
	LCD_DataWrite_HX8306A(0x00);    
 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x13); 
	LCD_DataWrite_HX8306A(0x00); 
	LCD_DataWrite_HX8306A(0x00); 
	DELAY_1ms(4); 
 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x10); 
	LCD_DataWrite_HX8306A(0x00); 
	LCD_DataWrite_HX8306A(0x00); 
	 
	// Sleep set 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x10); 
	LCD_DataWrite_HX8306A(0x00); 
	LCD_DataWrite_HX8306A(0x02); 
    } 
 
#elif defined(LCM_LEAD_ILI9221_176x220) 
      { 
        LCD_CtrlWrite_HX8306A(0x00); 
        LCD_CtrlWrite_HX8306A(0x07); 				 
        LCD_DataWrite_HX8306A(0x00); 
	 LCD_DataWrite_HX8306A(0x00); 
        DELAY_1ms(2); 
	 LCD_CtrlWrite_HX8306A(0x00); 
        LCD_CtrlWrite_HX8306A(0x10); 				 
        LCD_DataWrite_HX8306A(0x00); 
	 LCD_DataWrite_HX8306A(0x02); //SLP=1 
      } 
#elif defined(LCM_LEAD_L1E2_176x220) 
      { 
        LCD_CtrlWrite_HX8306A(0x11); // janing xu  LEAD L1E2 
      } 
#elif defined(LCM_XINSHENHUI_HX8306A_176x220)  // PXC3100 
     { 
	//Display Off  Function 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x07); 
	LCD_DataWrite_HX8306A(0x01); 
	LCD_DataWrite_HX8306A(0x26); 
	DELAY_1ms(10);//delayX1ms(50); 
	 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x07); 
	LCD_DataWrite_HX8306A(0x01); 
	LCD_DataWrite_HX8306A(0x25); 
	 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x07); 
	LCD_DataWrite_HX8306A(0x01); 
	LCD_DataWrite_HX8306A(0x05); 
	DELAY_1ms(10);//delayX1ms(50); 
 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x10); 
	LCD_DataWrite_HX8306A(0x40); 
	LCD_DataWrite_HX8306A(0x42);  // SLP=1, 
      } 
#endif 
 
} 
 
 
 
void LCD_Partial_On_HX8306A(kal_uint16 start_page,kal_uint16 end_page) 
{ 
} 
 
void LCD_Partial_Off_HX8306A(void) 
{ 
} 
 
kal_uint8 LCD_Partial_line_HX8306A(void) 
{ 
	return 1;		/* partial display in 1 line alignment */ 
} 
 
void LCD_blockClear_HX8306A(kal_uint16 x1, kal_uint16 y1, kal_uint16 x2, kal_uint16 y2, kal_uint16 data) 
{ 
	kal_uint16 LCD_x; 
	kal_uint16 LCD_y; 
	kal_uint8 r_color, g_color, b_color; 
/* 
	x1 -= (x1 & 0x03); 
	x2 += (3 - (x2 & 0x03)); 
 
	r_color = (data & 0xF800) >> 10;	// transfer to RGB666 
	g_color = (data >> 5) & 0x3F; 
	b_color = (data & 0x1F) << 1; 
*/	 
#ifdef LCM_LEAD_R61503_176x220 
    { 
       LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x50); 
	LCD_DataWrite_HX8306A(0x00); 
	LCD_DataWrite_HX8306A(x1 & 0xFF); 
 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x51); 
	LCD_DataWrite_HX8306A(0x00); 
	LCD_DataWrite_HX8306A(x2 & 0xFF); 
 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x52); 
	LCD_DataWrite_HX8306A(0x00); 
	LCD_DataWrite_HX8306A(y1 & 0xFF); 
 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x53); 
	LCD_DataWrite_HX8306A(0x00); 
	LCD_DataWrite_HX8306A(y2 & 0xFF); 
 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x20); 
	LCD_DataWrite_HX8306A(0x00); 
	LCD_DataWrite_HX8306A(x1 & 0xFF); 
 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x21); 
	LCD_DataWrite_HX8306A(0x00); 
	LCD_DataWrite_HX8306A(x2 & 0xFF); 
 
	LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x22); 
     } /*--end LCM_LEAD_R61503_176x220 --*/ 
 
#elif defined(LCM_LEAD_ILI9221_176x220) 
      { 
	  LCD_CtrlWrite_HX8306A(0x00); 
	  LCD_CtrlWrite_HX8306A(0x44);   
	  LCD_DataWrite_HX8306A((x2&0xFF)); 
	  LCD_DataWrite_HX8306A((x1&0xFF));	 
	  
	  LCD_CtrlWrite_HX8306A(0x00); 
	  LCD_CtrlWrite_HX8306A(0x45);   
	  LCD_DataWrite_HX8306A((y2&0xFF)); 
	  LCD_DataWrite_HX8306A((y1&0xFF));	 
 
	  LCD_CtrlWrite_HX8306A(0x00); 
	  LCD_CtrlWrite_HX8306A(0x21); 
	  LCD_DataWrite_HX8306A(y1 & 0xFF); 
	  LCD_DataWrite_HX8306A(x1 & 0xFF); 
	   
         LCD_CtrlWrite_HX8306A(0x00);  
         LCD_CtrlWrite_HX8306A(0x22);       
	} /* -- end LCM_LEAD_ILI9221_176x220--*/ 
 
   #elif defined(LCM_XINSHENHUI_HX8306A_176x220) 
      { 
         SET_LCD_CMD_PARAMETER(0,LCD_CMD, 0); 
	  SET_LCD_CMD_PARAMETER(1,LCD_CMD, 0x44 ); 
	  SET_LCD_CMD_PARAMETER(2,LCD_DATA, (x2 & 0x00FF)); 
	  SET_LCD_CMD_PARAMETER(3,LCD_DATA, (x1 & 0x00FF)); 
	  SET_LCD_CMD_PARAMETER(4,LCD_CMD, 0); 
	  SET_LCD_CMD_PARAMETER(5,LCD_CMD,0x45); 
	  SET_LCD_CMD_PARAMETER(6,LCD_DATA, (y2 & 0x00FF)); 
	  SET_LCD_CMD_PARAMETER(7,LCD_DATA, (y1 & 0x00FF)); 
	  SET_LCD_CMD_PARAMETER(8,LCD_CMD, 0); 
	  SET_LCD_CMD_PARAMETER(9,LCD_CMD, 0x21); 
	  SET_LCD_CMD_PARAMETER(10,LCD_DATA, (y1 & 0x00FF)); 
	  SET_LCD_CMD_PARAMETER(11,LCD_DATA, (x1 & 0x00FF)); 
	  SET_LCD_CMD_PARAMETER(12,LCD_CMD, 0);							 
	  SET_LCD_CMD_PARAMETER(13,LCD_CMD,0x22);							 
    	  SET_LCD_ROI_CTRL_NUMBER_OF_CMD(14); 
      }/* -- end LCM_XINSHENHUI_HX8306A_176x220--*/ 
	   
#elif defined(LCM_LEAD_L1E2_176x220) 
          { 
            SET_LCD_CMD_PARAMETER(0,LCD_CMD, 0x2A); 
			 
	     SET_LCD_CMD_PARAMETER(1,LCD_DATA, ((x1>>8)&0xFF)); 
	     SET_LCD_CMD_PARAMETER(2,LCD_DATA, (x1 & 0x00FF)); 
	     SET_LCD_CMD_PARAMETER(3,LCD_DATA, ((x2>>8)&0xFF)); 
	     SET_LCD_CMD_PARAMETER(4,LCD_DATA, (x2 & 0x00FF)); 
		  
            SET_LCD_CMD_PARAMETER(5,LCD_CMD, 0x2B); 
			 
	     SET_LCD_CMD_PARAMETER(6,LCD_DATA, ((y1>>8)&0xFF)); 
	     SET_LCD_CMD_PARAMETER(7,LCD_DATA, (y1 & 0x00FF)); 
	     SET_LCD_CMD_PARAMETER(8,LCD_DATA, ((y2>>8)&0xFF)); 
	     SET_LCD_CMD_PARAMETER(9,LCD_DATA, (y2 & 0x00FF));	 
		  
	     SET_LCD_CMD_PARAMETER(10,LCD_CMD, 0x2C); 
 
           }	   
#endif 
 
 
	for (LCD_y = y1; LCD_y <= y2; LCD_y++) 
	{ 
		for (LCD_x = x1; LCD_x <= x2; LCD_x++)  
		{ 
		#if (defined(LCD_8BIT_MODE)) 
			*((volatile unsigned char *) LCD_HX8306A_DATA_ADDR) = (kal_uint8)(data >> 8); 
			*((volatile unsigned char *) LCD_HX8306A_DATA_ADDR) = (kal_uint8)(data & 0x00FF); 
		#elif (defined(LCD_16BIT_MODE)) 
			*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR) = data; 
		#elif (defined(LCD_18BIT_MODE)) 
			*((volatile unsigned int *) LCD_HX8306A_DATA_ADDR)=(r_color<<12)|(g_color<<6)|b_color; 
		#elif (defined(LCD_9BIT_MODE)) 
			*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR)=(r_color<<6)|(g_color>>3); 
			*((volatile unsigned short *) LCD_HX8306A_DATA_ADDR)=((g_color&0x07)<<6)|b_color; 
		#endif 
		} 
 
        } 
 
}	 
 
 
void LCD_ClearAll_HX8306A(kal_uint16 data) 
{ 
   LCD_blockClear_HX8306A(0, 0, LCD_WIDTH - 1, LCD_HEIGHT - 1, data); 
} 
 
void LCD_Init_HX8306A(kal_uint32 bkground, void **buf_addr) 
{ 
	CLEAR_LCD_CTRL_RESET_PIN; 
	DELAY_1ms(3);//Delayms(10); 
	SET_LCD_CTRL_RESET_PIN;	 
	DELAY_1ms(3);//Delayms(10); 
	 
    lcd_check = 0; 
#ifdef LCM_LEAD_L1E2_176x220 
         { 
	       LCD_CtrlWrite_HX8306A(0x11);  
		DELAY_1ms(20);  //Delay(120); 
		 	 
		 LCD_CtrlWrite_HX8306A(0xc5); 	 		 	 
		 LCD_DataWrite_HX8306A(0x53);  
		 LCD_DataWrite_HX8306A(0x0c); 
		 	 
		 LCD_CtrlWrite_HX8306A(0xe7); 	 		 	 
		 LCD_DataWrite_HX8306A(0x7e);   
      ///////////GAMMA SET//////////// 
		    
	      LCD_CtrlWrite_HX8306A(0xAA);               
	      LCD_CtrlWrite_HX8306A(0xC0); 
		  
	      LCD_DataWrite_HX8306A(0x0C);  
		 
	      LCD_CtrlWrite_HX8306A(0xE6); 
	      LCD_DataWrite_HX8306A(0x01);  
		  
	      LCD_CtrlWrite_HX8306A(0xE2); 
	      LCD_DataWrite_HX8306A(0x17);  
		  
		  LCD_DataWrite_HX8306A(0x0F);  
		  LCD_DataWrite_HX8306A(0x0D); 
 		  LCD_DataWrite_HX8306A(0x0D);  
		  LCD_DataWrite_HX8306A(0x09);  
		  LCD_DataWrite_HX8306A(0x0B);  
		  LCD_DataWrite_HX8306A(0x0A);  
		  LCD_DataWrite_HX8306A(0x0E);  
		  LCD_DataWrite_HX8306A(0x09);  
		  LCD_DataWrite_HX8306A(0x17);  
		  LCD_DataWrite_HX8306A(0x0E);  
		  LCD_DataWrite_HX8306A(0x0B);  
		  LCD_DataWrite_HX8306A(0x06);  
                LCD_DataWrite_HX8306A(0x06);  
		  LCD_DataWrite_HX8306A(0x16);  
		  LCD_DataWrite_HX8306A(0x6E);  
		  LCD_DataWrite_HX8306A(0x74);  
		  
                LCD_CtrlWrite_HX8306A(0xE3); 
			    
	         LCD_DataWrite_HX8306A(0x15);  
		  LCD_DataWrite_HX8306A(0x11);  
		  LCD_DataWrite_HX8306A(0x13); 
 		  LCD_DataWrite_HX8306A(0x17);  
		  LCD_DataWrite_HX8306A(0x14);  
		  LCD_DataWrite_HX8306A(0x13);  
		  LCD_DataWrite_HX8306A(0x0F);  
		  LCD_DataWrite_HX8306A(0x10);  
		  LCD_DataWrite_HX8306A(0x09);  
		  LCD_DataWrite_HX8306A(0x03);  
		  LCD_DataWrite_HX8306A(0x12);  
		  LCD_DataWrite_HX8306A(0x0F);  
		  LCD_DataWrite_HX8306A(0x0B);  
                LCD_DataWrite_HX8306A(0x0A);  
		  LCD_DataWrite_HX8306A(0x03);  
		  LCD_DataWrite_HX8306A(0x49);  
		  LCD_DataWrite_HX8306A(0x4F);  
		  
                LCD_CtrlWrite_HX8306A(0x35); 
			    
                LCD_DataWrite_HX8306A(0x01);  
			    
      ///////////DISPLAY SET////////////     	 
		  LCD_CtrlWrite_HX8306A(0x3A);	   
	         LCD_DataWrite_HX8306A(0x05); //8BIT,2-transferR-G-B         
	         LCD_CtrlWrite_HX8306A(0x29); 
                LCD_CtrlWrite_HX8306A(0x13);   // Normal Display Mode On  janing xu 
		}           
#elif defined LCM_LEAD_R61503_176x220 
{ 
#if  1 
	LCD_set_reg(0x0000,0x0001); 
 	DELAY_1ms(5);//LCD_Delay(20); 
 
	LCD_set_reg(0x0007,0x0000);  
	DELAY_1ms(5); 
	 
	LCD_set_reg(0x0012,0x0000); 
 	DELAY_1ms(3); 
	 
	LCD_set_reg(0x00A4,0x0001);  
	DELAY_1ms(6); 
	 
	LCD_set_reg(0x0070,0x1b00); 
	LCD_set_reg(0x0008,0x0202); 
 
/*************     Gamma    ***************** */ 
	LCD_set_reg(0x0030,0x0601);  
	LCD_set_reg(0x0031,0x0507); 
	LCD_set_reg(0x0032,0x0006); 
	LCD_set_reg(0x0033,0x0701); 
	LCD_set_reg(0x0034,0x0105); 
	LCD_set_reg(0x0035,0x0004); 
	LCD_set_reg(0x0036,0x0605); 
	LCD_set_reg(0x0037,0x0002); 
	LCD_set_reg(0x0038,0x1c00); 
	LCD_set_reg(0x0039,0x0500); 
	LCD_set_reg(0x003a,0x0100); 
	DELAY_1ms(1); 
/*************     Gamma   End ***************** */ 
       LCD_set_reg(0x0014,0x8000); 
	DELAY_1ms(7);//LCD_Delay(30); 
	 
	LCD_set_reg(0x0001,0x0100); 
	LCD_set_reg(0x0002,0x0400); 
	LCD_set_reg(0x0003,0x1030);  //HWM=1  0x1030 //ss.pan 2007.11.27 modify 
	 
	LCD_set_reg(0x0070,0x1b00); 
	LCD_set_reg(0x0071,0x0001); 
	LCD_set_reg(0x0090,0x0000); 
	LCD_set_reg(0x0091,0x0000); 
	LCD_set_reg(0x0092,0x0001); 
	LCD_set_reg(0x0098,0x0002); 
	LCD_set_reg(0x0099,0x060e); 
	LCD_set_reg(0x009a,0x060e); 
	 
	LCD_set_reg(0x0050,0x0000); 
	LCD_set_reg(0x0051,0x00af); 
	LCD_set_reg(0x0052,0x0000); 
	LCD_set_reg(0x0053,0x00db); 
	LCD_set_reg(0x0020,0x0000); 
	LCD_set_reg(0x0021,0x0000); 
	 
	LCD_set_reg(0x0007,0x0001); 
	LCD_set_reg(0x0018,0x0001); 
	LCD_set_reg(0x0010,0x11b0); 
	LCD_set_reg(0x0011,0x0001); 
	DELAY_1ms(7); 
	 
	LCD_set_reg(0x0012,0x1111); 
	DELAY_1ms(5); 
	 
	LCD_set_reg(0x0013,0x830c); 
	LCD_set_reg(0x0012,0x1131); 
	LCD_set_reg(0x0007, 0x0001); 
	DELAY_1ms(5); 
	 
	LCD_set_reg(0x0007,0x0021); 
	DELAY_1ms(5); 
	LCD_set_reg(0x0007,0x0233); 
	#else  //lead对初始化代码作了更新 
	LCD_set_reg(0x0000,0x0000);   
LCD_set_reg(0x0000,0x0000);   
LCD_set_reg(0x0000,0x0000);   
LCD_set_reg(0x0000,0x0000);   
LCD_set_reg(0x0000,0x0000);   
LCD_set_reg(0x00A4,0x0001);   
kal_sleep_task(5);            
LCD_set_reg(0x0007,0x0001);   
LCD_set_reg(0x0018,0x0001);   
LCD_set_reg(0x0010,0x11B0);   
LCD_set_reg(0x0011,0x0110);   
LCD_set_reg(0x0012,0x0036);   
LCD_set_reg(0x0013,0x850C);   
LCD_set_reg(0x0012,0x0036);   
LCD_set_reg(0x0014,0x8000);   
LCD_set_reg(0x0001,0x0100);   
LCD_set_reg(0x0002,0x0700);   
LCD_set_reg(0x0003,0x1030); //cancel high speed transfer   
LCD_set_reg(0x0008,0x0808);   
LCD_set_reg(0x0009,0x0000);   
LCD_set_reg(0x000C,0x0000);   
LCD_set_reg(0x000F,0x0000);   
LCD_set_reg(0x0020,0x0000);   
LCD_set_reg(0x0021,0x0000);   
LCD_set_reg(0x0030,0x0305);   
LCD_set_reg(0x0031,0x0002);   
LCD_set_reg(0x0032,0x0100);   
LCD_set_reg(0x0033,0x0102);   
LCD_set_reg(0x0034,0x0706);   
LCD_set_reg(0x0035,0x0606);   
LCD_set_reg(0x0036,0x0304);   
LCD_set_reg(0x0037,0x0200);   
LCD_set_reg(0x0038,0x0000);   
LCD_set_reg(0x0039,0x001F);   
LCD_set_reg(0x003A,0x0000);   
LCD_set_reg(0x0020,0x0000);   
LCD_set_reg(0x0021,0x0000);   
LCD_set_reg(0x0050,0x0000);   
LCD_set_reg(0x0051,0x00AF);   
LCD_set_reg(0x0052,0x0000);   
LCD_set_reg(0x0053,0x00DB);   
LCD_set_reg(0x0070,0x1B00);   
LCD_set_reg(0x0071,0x0001);   
LCD_set_reg(0x007A,0x0000);   
LCD_set_reg(0x0085,0x0000);   
LCD_set_reg(0x0090,0x0008);   
LCD_set_reg(0x0091,0x0100);   
LCD_set_reg(0x0092,0x0001);   
LCD_set_reg(0x0007,0x0001);   
kal_sleep_task(15);           
LCD_set_reg(0x0007,0x0021);   
kal_sleep_task(15);           
LCD_set_reg(0x0012,0x1138);   
kal_sleep_task(15);           
LCD_set_reg(0x0007,0x0233);   
 
	#endif 
	}  /*--end LCM_LEAD_R61503_176x220 --*/ 
 
#elif defined(LCM_LEAD_ILI9221_176x220) 
{ 
        LCD_CtrlWrite_HX8306A(0x00); // start internal OSC 
        LCD_CtrlWrite_HX8306A(0x00); 				 
        LCD_DataWrite_HX8306A(0x00); 
	 LCD_DataWrite_HX8306A(0x01); 
 
        LCD_CtrlWrite_HX8306A(0x00); // set the display line number and display direction 
        LCD_CtrlWrite_HX8306A(0x01); 				 
        LCD_DataWrite_HX8306A(0x01); 
	 LCD_DataWrite_HX8306A(0x1B); 
	  
        LCD_CtrlWrite_HX8306A(0x00);  //SET 1 Line inversion 
        LCD_CtrlWrite_HX8306A(0x02); 				 
        LCD_DataWrite_HX8306A(0x05); 
	 LCD_DataWrite_HX8306A(0x00); 
 
        LCD_CtrlWrite_HX8306A(0x00); //set gram write direction and BGR=1; 
        LCD_CtrlWrite_HX8306A(0x03); 				 
        LCD_DataWrite_HX8306A(0x10); 
	 LCD_DataWrite_HX8306A(0x30);	  
 
        LCD_CtrlWrite_HX8306A(0x00); //set mask bit 
        LCD_CtrlWrite_HX8306A(0x04); 				 
        LCD_DataWrite_HX8306A(0x00); 
	 LCD_DataWrite_HX8306A(0x00);	  
 
        LCD_CtrlWrite_HX8306A(0x00); //set mask bit 
        LCD_CtrlWrite_HX8306A(0x05); 				 
        LCD_DataWrite_HX8306A(0x00); 
	 LCD_DataWrite_HX8306A(0x00);	  
	  
        LCD_CtrlWrite_HX8306A(0x00); //display off 
        LCD_CtrlWrite_HX8306A(0x07); 				 
        LCD_DataWrite_HX8306A(0x00); 
	 LCD_DataWrite_HX8306A(0x00);	  
	  
        LCD_CtrlWrite_HX8306A(0x00); //set the back porch and Front porch  
        LCD_CtrlWrite_HX8306A(0x08); 				 
        LCD_DataWrite_HX8306A(0x02); 
	 LCD_DataWrite_HX8306A(0x02);	  
 
        LCD_CtrlWrite_HX8306A(0x00); //display control 3 
        LCD_CtrlWrite_HX8306A(0x09); 				 
        LCD_DataWrite_HX8306A(0x00); 
	 LCD_DataWrite_HX8306A(0x00);	 	  
 
        LCD_CtrlWrite_HX8306A(0x00); //set clocks number per line 
        LCD_CtrlWrite_HX8306A(0x0B); 				 
        LCD_DataWrite_HX8306A(0x00); 
	 LCD_DataWrite_HX8306A(0x00);	  
	  
        LCD_CtrlWrite_HX8306A(0x00); //CPU INTERFACE 
        LCD_CtrlWrite_HX8306A(0x0C); 				 
        LCD_DataWrite_HX8306A(0x00); 
	 LCD_DataWrite_HX8306A(0x00);	  
         
//POWER SET  
        LCD_CtrlWrite_HX8306A(0x00); //SET vgh/vgl,turn off the charge-bump circuit 
        LCD_CtrlWrite_HX8306A(0x10); 				 
        LCD_DataWrite_HX8306A(0x00); 
	 LCD_DataWrite_HX8306A(0x00);	  
               DELAY_1ms(3);  // Delayms(10); 
 
        LCD_CtrlWrite_HX8306A(0x00); //SET the frequency of charge-pump circuit and reference voltage  
        LCD_CtrlWrite_HX8306A(0x11); 				 
        LCD_DataWrite_HX8306A(0x00); 
	 LCD_DataWrite_HX8306A(0x00);	  
 
        LCD_CtrlWrite_HX8306A(0x00);//SET REFERENCE VOLTAGE OF GAMMA CIRCUIT 
        LCD_CtrlWrite_HX8306A(0x12); 				 
        LCD_DataWrite_HX8306A(0x00); 
	 LCD_DataWrite_HX8306A(0x00);	  
              DELAY_1ms(9);  //  Delayms(40); 
 
        LCD_CtrlWrite_HX8306A(0x00);//SET VCOMH/VCOML 
        LCD_CtrlWrite_HX8306A(0x13); 				 
        LCD_DataWrite_HX8306A(0x00); 
	 LCD_DataWrite_HX8306A(0x00);	 
             DELAY_1ms(9);  //  Delayms(40); 
 
        LCD_CtrlWrite_HX8306A(0x00);//SET VCOMH/VCOML 
        LCD_CtrlWrite_HX8306A(0x56); 				 
        LCD_DataWrite_HX8306A(0x08); 
	 LCD_DataWrite_HX8306A(0x0F);	 
             DELAY_1ms(9);  // Delayms(40); 
              
        LCD_CtrlWrite_HX8306A(0x00);//SET vgh/vgl,turn off the charge-bump circuit 
        LCD_CtrlWrite_HX8306A(0x10); 				 
        LCD_DataWrite_HX8306A(0x42); 
	 LCD_DataWrite_HX8306A(0x40);	 
             DELAY_1ms(9);  // Delayms(10); 
 
        LCD_CtrlWrite_HX8306A(0x00);//SET the frequency of charge-pump circuit and reference voltage  
        LCD_CtrlWrite_HX8306A(0x11); 				 
        LCD_DataWrite_HX8306A(0x00); 
	 LCD_DataWrite_HX8306A(0x00);	 
 
        LCD_CtrlWrite_HX8306A(0x00);//SET REFERENCE VOLTAGE OF GAMMA CIRCUIT 
        LCD_CtrlWrite_HX8306A(0x12); 				 
        LCD_DataWrite_HX8306A(0x00); 
	 LCD_DataWrite_HX8306A(0x14);	 
              DELAY_1ms(9);  //Delayms(40); 
 
        LCD_CtrlWrite_HX8306A(0x00);//SET VCOMH/VCOML 
        LCD_CtrlWrite_HX8306A(0x13); 				 
        LCD_DataWrite_HX8306A(0x13); 
	 LCD_DataWrite_HX8306A(0x19);	 
             DELAY_1ms(9);  // Delayms(40); 
              
        LCD_CtrlWrite_HX8306A(0x00);//SET VCOMH/VCOML 
        LCD_CtrlWrite_HX8306A(0x13); 				 
        LCD_DataWrite_HX8306A(0x33); 
	 LCD_DataWrite_HX8306A(0x19);	 
           DELAY_1ms(9);  // Delayms(40); 
            
//GAMMA 2.2 CURVE 
        LCD_CtrlWrite_HX8306A(0x00);// start internal OSC 
        LCD_CtrlWrite_HX8306A(0x30); 				 
        LCD_DataWrite_HX8306A(0x03); 
	 LCD_DataWrite_HX8306A(0x02);	 
 
        LCD_CtrlWrite_HX8306A(0x00);// set the display line number and display direction 
        LCD_CtrlWrite_HX8306A(0x31); 				 
        LCD_DataWrite_HX8306A(0x04); 
	 LCD_DataWrite_HX8306A(0x07);	 
	  
        LCD_CtrlWrite_HX8306A(0x00);//SET 1 Line inversion 
        LCD_CtrlWrite_HX8306A(0x32); 				 
        LCD_DataWrite_HX8306A(0x03); 
	 LCD_DataWrite_HX8306A(0x04);	 
 
        LCD_CtrlWrite_HX8306A(0x00);//set gram write direction and BGR=1; 
        LCD_CtrlWrite_HX8306A(0x33); 				 
        LCD_DataWrite_HX8306A(0x02); 
	 LCD_DataWrite_HX8306A(0x03);	 
	  
        LCD_CtrlWrite_HX8306A(0x00); 
        LCD_CtrlWrite_HX8306A(0x34); 				 
        LCD_DataWrite_HX8306A(0x07); 
	 LCD_DataWrite_HX8306A(0x06);	 
	  
        LCD_CtrlWrite_HX8306A(0x00); 
        LCD_CtrlWrite_HX8306A(0x35); 				 
        LCD_DataWrite_HX8306A(0x04); 
	 LCD_DataWrite_HX8306A(0x07);	 
		    
        LCD_CtrlWrite_HX8306A(0x00); 
        LCD_CtrlWrite_HX8306A(0x36); 				 
        LCD_DataWrite_HX8306A(0x07); 
	 LCD_DataWrite_HX8306A(0x06);	 
		    
        LCD_CtrlWrite_HX8306A(0x00); 
        LCD_CtrlWrite_HX8306A(0x37); 				 
        LCD_DataWrite_HX8306A(0x00); 
	 LCD_DataWrite_HX8306A(0x00);	 
		    
        LCD_CtrlWrite_HX8306A(0x00); 
        LCD_CtrlWrite_HX8306A(0x38); 				 
        LCD_DataWrite_HX8306A(0x0C); 
	 LCD_DataWrite_HX8306A(0x06);	 
		    
        LCD_CtrlWrite_HX8306A(0x00); 
        LCD_CtrlWrite_HX8306A(0x39); 				 
        LCD_DataWrite_HX8306A(0x0F); 
	 LCD_DataWrite_HX8306A(0x00);	 
		  
//DISPLAY ON	 
 
       LCD_CtrlWrite_HX8306A(0x00); 
       LCD_CtrlWrite_HX8306A(0x40);   
       LCD_DataWrite_HX8306A(0x00); 
	LCD_DataWrite_HX8306A(0x00);	 
	   
       LCD_CtrlWrite_HX8306A(0x00); 
	LCD_CtrlWrite_HX8306A(0x41);   
       LCD_DataWrite_HX8306A(0x00); 
	LCD_DataWrite_HX8306A(0x00);	 
 
        LCD_CtrlWrite_HX8306A(0x00); 
        LCD_CtrlWrite_HX8306A(0x07); 				 
        LCD_DataWrite_HX8306A(0x00); 
	 LCD_DataWrite_HX8306A(0x37);	 
	} /* -- end LCM_LEAD_ILI9221_176x220--*/ 
 
#elif defined(LCM_XINSHENHUI_HX8306A_176x220) 
      { 
       LCD_set_reg(0x0007,0x0040);//turn off power,display off 
	LCD_set_reg(0x0012,0x0000);//power control 3 
	LCD_set_reg(0x0013,0x0000);//power control 4 
	LCD_Delay(10); 
	LCD_set_reg(0x0001,0x011b); 
	LCD_set_reg(0x0002,0x0700); 
	LCD_set_reg(0x0003,0x1030);//bgr=1  janing xu 
	LCD_set_reg(0x0004,0x0000); 
	LCD_set_reg(0x0005,0x0000); 
	LCD_set_reg(0x000b,0x4000); 
	/*********power setting*********/ 
	LCD_set_reg(0x0011,0x0000); 
	LCD_set_reg(0x0012,0x0008); 
	LCD_set_reg(0x0013,0x1014);//VCOMH 
	LCD_set_reg(0x0010,0x4040); 
	LCD_Delay(10); 
	LCD_set_reg(0x0012,0x0018); 
	LCD_Delay(10); 
	LCD_set_reg(0x0013,0x3014);//VCOMH 
	LCD_Delay(10); 
	/********Gamma Adjustment*********/ 
	LCD_set_reg(0x0030,0x0000); 
	LCD_set_reg(0x0031,0x0207); 
	LCD_set_reg(0x0032,0x0000); 
	LCD_set_reg(0x0033,0x0401); 
	LCD_set_reg(0x0034,0x0707); 
	LCD_set_reg(0x0035,0x0005); 
	LCD_set_reg(0x0036,0x0707); 
	LCD_set_reg(0x0037,0x0000); 
	LCD_set_reg(0x0038,0x0000); 
	LCD_set_reg(0x0039,0x0000); 
	//////////////////////////////////// 
	LCD_set_reg(0x0040,0x0000); 
	LCD_set_reg(0x0041,0xef00); 
	LCD_set_reg(0x0042,0x00db); 
	LCD_set_reg(0x0043,0xdb00); 
	LCD_set_reg(0x0044,0xaf00); 
	LCD_set_reg(0x0045,0xdb00); 
	///////////////////////////////////// 
	LCD_set_reg(0x0007,0x0141); 
	LCD_Delay(10); 
	LCD_set_reg(0x0007,0x0161); 
	LCD_Delay(10); 
	LCD_set_reg(0x0007,0x0163); 
	LCD_Delay(10); 
	LCD_set_reg(0x0007,0x0f77); 
	LCD_Delay(10); 
	LCD_set_reg(0x0008,0x0202); 
      }/* -- end LCM_XINSHENHUI_HX8306A_176x220--*/ 
	   
#endif 
 
/* 
//janing xu debug 
{    // Italy National Flag 
	#include 	"Device.h"    
      extern const char gpio_led_mainbl_en_pin; 
      extern void PWM_level(kal_uint8 level); 
 
 
        GPIO_WriteIO(1, gpio_led_mainbl_en_pin);      
        PWM_level(LED_LIGHT_LEVEL4); 
 
         LCD_blockClear_HX8306A(0,0,43,159,0x07E0); 
	  LCD_blockClear_HX8306A(44,0,83,159,0xFFFF);	  
	  LCD_blockClear_HX8306A(84,0,127,159,0xF800);		  
kal_sleep_task(600); 
 
} 
*/ 
	LCD_ClearAll_HX8306A(bkground); 
	lcd_power_ctrl_shadow1=0x0144;//0x0004;//0x2140; 
	lcd_power_ctrl_shadow3=0x0014;//0x0012; 
	lcd_power_ctrl_shadow4=0x2a15;//0x300E; 
	lcd_power_ctrl_shadow1=0x2464; 
	lcd_power_ctrl_shadow3=0x0012; 
	lcd_power_ctrl_shadow4=0x2a15; 
	DELAY_1ms(5);//Delayms(0x80000);  
} 
 
void LCD_ReInit(void) 
{ 
	LCD_Init_HX8306A(0,NULL); 
} 
 
void LCD_ExitSleep_HX8306A(void) 
{ 
	//lcd_power_ctrl_shadow1 &= ~0x2; 
	//lcd_power_ctrl_shadow3 |= 0x10; 
	//lcd_power_ctrl_shadow4 |= 0x2000; 
 
	 LCD_Init_HX8306A(0,0);  // janing xu 
} 
 
 
void LCD_PWRON_HX8306A(kal_bool on) 
{ 
} 
 
void LCD_SetContrast_HX8306A(kal_uint8 level) 
{ 
} 
    
void LCD_ON_HX8306A(kal_bool on) 
{ 
} 
 
void LCD_BlockWrite_HX8306A(kal_uint16 startx,kal_uint16 starty,kal_uint16 endx,kal_uint16 endy) 
{ 
	 kal_uint16 roi_offset_x,roi_offset_y; 
	kal_uint16 roi_width,roi_height,start_x,end_x; 
 
	while (LCD_IS_RUNNING); 
 
    	lcd_assert_fail = KAL_TRUE; 
 
/*----ALL  DMA MODE----*/		 
#ifdef LCM_LEAD_R61503_176x220 
          { 
        	  SET_LCD_CMD_PARAMETER(0,LCD_CMD, 0); 
		      SET_LCD_CMD_PARAMETER(1,LCD_CMD, (0x50 & 0xFF)); 
		      SET_LCD_CMD_PARAMETER(2,LCD_DATA,0); 
		      SET_LCD_CMD_PARAMETER(3,LCD_DATA, (startx & 0xFF)); 
 
		      SET_LCD_CMD_PARAMETER(4,LCD_CMD, 0); 
		      SET_LCD_CMD_PARAMETER(5,LCD_CMD, (0x51 & 0xFF)); 
		      SET_LCD_CMD_PARAMETER(6,LCD_DATA,0); 
		      SET_LCD_CMD_PARAMETER(7,LCD_DATA, (endx & 0xFF)); 
			   
		      SET_LCD_CMD_PARAMETER(8,LCD_CMD, 0); 
		      SET_LCD_CMD_PARAMETER(9,LCD_CMD, (0x52 & 0xFF)); 
		      SET_LCD_CMD_PARAMETER(10,LCD_DATA,0); 
		      SET_LCD_CMD_PARAMETER(11,LCD_DATA, (starty & 0xFF)); 
 
		      SET_LCD_CMD_PARAMETER(12,LCD_CMD, 0); 
		      SET_LCD_CMD_PARAMETER(13,LCD_CMD, (0x53 & 0xFF)); 
		      SET_LCD_CMD_PARAMETER(14,LCD_DATA,0); 
		      SET_LCD_CMD_PARAMETER(15,LCD_DATA, (endy & 0xFF)); 
 
		      SET_LCD_CMD_PARAMETER(16,LCD_CMD, 0); 
		      SET_LCD_CMD_PARAMETER(17,LCD_CMD, (0x20&0xFF)); 
		      SET_LCD_CMD_PARAMETER(18,LCD_DATA,0); 
		      SET_LCD_CMD_PARAMETER(19,LCD_DATA,(startx&0xFF)); 
 
		      SET_LCD_CMD_PARAMETER(20,LCD_CMD,0); 
		      SET_LCD_CMD_PARAMETER(21,LCD_CMD, (0x21&0xFF)); 
		      SET_LCD_CMD_PARAMETER(22,LCD_DATA,0); 
		      SET_LCD_CMD_PARAMETER(23,LCD_DATA,(starty&0xFF)); 
			   
		      SET_LCD_CMD_PARAMETER(24,LCD_CMD,0); 
		      SET_LCD_CMD_PARAMETER(25,LCD_CMD, (0x22&0xFF)); 
	   		  SET_LCD_ROI_CTRL_NUMBER_OF_CMD(26); 
			   
	          ENABLE_LCD_TRANSFER_COMPLETE_INT; 
	          ENABLE_LCD_ROI_CTRL_CMD_FIRST; 
		while (LCD_IS_RUNNING){};//ss.pan 2007.11.27 add 
              START_LCD_TRANSFER; 
         } /*--end LCM_LEAD_R61503_176x220 --*/ 
 
#elif defined(LCM_LEAD_ILI9221_176x220) 
       { 
      	      SET_LCD_CMD_PARAMETER(0,LCD_CMD, 0); 
		      SET_LCD_CMD_PARAMETER(1,LCD_CMD, (0x44&0xFF)); 
		      SET_LCD_CMD_PARAMETER(2,LCD_DATA, (endx&0xFF)); 
		      SET_LCD_CMD_PARAMETER(3,LCD_DATA, (startx&0xFF)); 
 
      	             SET_LCD_CMD_PARAMETER(4,LCD_CMD, 0); 
		      SET_LCD_CMD_PARAMETER(5,LCD_CMD, (0x45&0xFF)); 
		      SET_LCD_CMD_PARAMETER(6,LCD_DATA, (endy&0xFF)); 
		      SET_LCD_CMD_PARAMETER(7,LCD_DATA, (starty&0xFF));			   
 
      	             SET_LCD_CMD_PARAMETER(8,LCD_CMD, 0); 
		      SET_LCD_CMD_PARAMETER(9,LCD_CMD, (0x21&0xFF)); 
		      SET_LCD_CMD_PARAMETER(10,LCD_DATA, (starty&0xFF)); 
		      SET_LCD_CMD_PARAMETER(11,LCD_DATA, (startx&0xFF)); 
 
      	             SET_LCD_CMD_PARAMETER(12,LCD_CMD, 0); 
		      SET_LCD_CMD_PARAMETER(13,LCD_CMD, (0x22&0xFF)); 
			    
	            SET_LCD_ROI_CTRL_NUMBER_OF_CMD(14); 
		 
	            ENABLE_LCD_TRANSFER_COMPLETE_INT; 
	            ENABLE_LCD_ROI_CTRL_CMD_FIRST; 
	            START_LCD_TRANSFER;   
             }/* -- end LCM_LEAD_ILI9221_176x220--*/ 
#elif defined(LCM_XINSHENHUI_HX8306A_176x220) 
        { 
                     SET_LCD_CMD_PARAMETER(0,LCD_CMD, 0); 
			SET_LCD_CMD_PARAMETER(1,LCD_CMD, 0x44 ); 
		       SET_LCD_CMD_PARAMETER(2,LCD_DATA, (endx & 0x00FF)); 
		       SET_LCD_CMD_PARAMETER(3,LCD_DATA, (startx & 0x00FF)); 
			SET_LCD_CMD_PARAMETER(4,LCD_CMD, 0); 
			SET_LCD_CMD_PARAMETER(5,LCD_CMD,0x45); 
			SET_LCD_CMD_PARAMETER(6,LCD_DATA, (endy & 0x00FF)); 
			SET_LCD_CMD_PARAMETER(7,LCD_DATA, (starty & 0x00FF)); 
			SET_LCD_CMD_PARAMETER(8,LCD_CMD, 0); 
			SET_LCD_CMD_PARAMETER(9,LCD_CMD, 0x21); 
			SET_LCD_CMD_PARAMETER(10,LCD_DATA, (starty & 0x00FF)); 
			SET_LCD_CMD_PARAMETER(11,LCD_DATA, (startx & 0x00FF)); 
			SET_LCD_CMD_PARAMETER(12,LCD_CMD, 0);							 
			SET_LCD_CMD_PARAMETER(13,LCD_CMD,0x22);							 
    			SET_LCD_ROI_CTRL_NUMBER_OF_CMD(14); 
 
	              ENABLE_LCD_TRANSFER_COMPLETE_INT; 
	              ENABLE_LCD_ROI_CTRL_CMD_FIRST; 
	              START_LCD_TRANSFER;  
        }/* -- end LCM_XINSHENHUI_HX8306A_176x220--*/ 
#elif defined(LCM_LEAD_L1E2_176x220) 
          { 
            SET_LCD_CMD_PARAMETER(0,LCD_CMD, 0x2A); 
			 
	     SET_LCD_CMD_PARAMETER(1,LCD_DATA, ((startx>>8)&0xFF)); 
	     SET_LCD_CMD_PARAMETER(2,LCD_DATA, (startx & 0x00FF)); 
	     SET_LCD_CMD_PARAMETER(3,LCD_DATA, ((endx>>8)&0xFF)); 
	     SET_LCD_CMD_PARAMETER(4,LCD_DATA, (endx & 0x00FF)); 
		  
            SET_LCD_CMD_PARAMETER(5,LCD_CMD, 0x2B); 
			 
	     SET_LCD_CMD_PARAMETER(6,LCD_DATA, ((starty>>8)&0xFF)); 
	     SET_LCD_CMD_PARAMETER(7,LCD_DATA, (starty & 0x00FF)); 
	     SET_LCD_CMD_PARAMETER(8,LCD_DATA, ((endy>>8)&0xFF)); 
	     SET_LCD_CMD_PARAMETER(9,LCD_DATA, (endy & 0x00FF));	 
		  
	     SET_LCD_CMD_PARAMETER(10,LCD_CMD, 0x2C); 
		  
	      SET_LCD_ROI_CTRL_NUMBER_OF_CMD(11); 
	      ENABLE_LCD_TRANSFER_COMPLETE_INT; 
	      ENABLE_LCD_ROI_CTRL_CMD_FIRST; 
	      START_LCD_TRANSFER;  
           } 
 
#endif  /*----Above of all  DMA MODE----*/		 
     lcd_assert_fail = KAL_FALSE; 
} 
 
void LCD_Size_HX8306A(kal_uint16 *out_LCD_width, kal_uint16 *out_LCD_height) 
{ 
   	*out_LCD_width = LCD_WIDTH; 
   	*out_LCD_height = LCD_HEIGHT; 
} 
 
/*Engineering mode*/ 
kal_uint8 LCD_GetParm_HX8306A(lcd_func_type type) 
{ 
    switch(type) { 
    case lcd_Bais_func: 
        return 1; 
 
    case lcd_Contrast_func: 
        return 1; 
 
    case lcd_LineRate_func: 
        return 4; 
 
    case lcd_Temperature_Compensation_func: 
        return 4; 
 
    default: 
        ASSERT(0); 
   } 
 
   return 100; 
} 
 
void LCD_SetBias_HX8306A(kal_uint8 *bias) 
{ 
} 
 
void LCD_Contrast_HX8306A(kal_uint8 *contrast) 
{ 
} 
 
void LCD_LineRate_HX8306A(kal_uint8 *linerate) 
{ 
} 
 
void LCD_Temp_Compensate_HX8306A(kal_uint8 *compensate) 
{ 
} 
 
kal_bool LCD_ESD_check_HX8306A() 
{ 
    volatile  kal_uint16 data_value = 0; 
    kal_uint16 data_addr = 0; 
	kal_uint8 i, reg_start_idx, reg_end_idx; 
	 
	if (lcd_reg_index > 2) { 
        lcd_reg_index = 0; 
	} 
    
	while (LCD_IS_RUNNING);    
 
    if (lcd_reg_index == 0) { 
      reg_start_idx = 0; 
      reg_end_idx = 7; 
   }else if (lcd_reg_index == 1) { 
      reg_start_idx = 8; 
      reg_end_idx = 14; 
   }else{ 
      reg_start_idx = 15; 
      reg_end_idx = N_lcd_reg - 1; 
   }    
 
    for (i = reg_start_idx; i <= reg_end_idx; i++) { 
        if (lcd_check == 1) { 
            data_addr = lcd_check_reg.reg[i].addr; 
            data_value = readreg_HX8306A(data_addr);	    
            kal_prompt_trace(MOD_ENG, "--read %x as %x", data_addr, data_value); 
            if (data_value != lcd_check_reg.reg[i].para) { 
                kal_prompt_trace(MOD_ENG, "ESD FAIL read %x as %x", data_addr, data_value); 
                return KAL_FALSE; 
            } 
	    } 
    } 
 
    lcd_reg_index++; 
    while (LCD_IS_RUNNING); 
    
    return KAL_TRUE; 
} 
 
/*===================The above is LCD dependent==========*/ 
#if ( (defined(MT6205B)) || (defined(MT6218)) ) 
void LCD_memcpy(void *dst /*s1*/, const void *src /*s2*/, kal_uint16 size) 
{ 
   #ifdef LCD_DMAENABLE 
      kal_uint32 srcaddr=(kal_uint32)src; 
      kal_uint32 dstaddr=(kal_uint32)dst; 
      kal_uint16 size_MSB = (kal_uint16)(size >> 9); 
      kal_uint16 size_LSB = (kal_uint16)(size & 0x01ff); 
 
      ASSERT(lcd_assert_fail==KAL_FALSE); 
      lcd_assert_fail = KAL_TRUE; 
      ASSERT(DRV_Reg(LCD_REFR)==0x00); 
      if(size_MSB) 
      { 
         DRV_WriteReg(LCD_MSBSRC,(kal_uint16)(srcaddr >> 16)); 
         DRV_WriteReg(LCD_LSBSRC,(kal_uint16)srcaddr); 
 
         DRV_WriteReg(LCD_REFR,0x0000); 
         DRV_WriteReg(LCD_MSBDST,(kal_uint16)(dstaddr >> 16)); 
         DRV_WriteReg(LCD_LSBDST,(kal_uint16)(dstaddr)); 
 
         DRV_WriteReg(LCD_CADDRSET,512); 
         DRV_WriteReg(LCD_PADDRSET,size_MSB); 
         DRV_WriteReg(LCD_CHOP,0); 
 
         DRV_WriteReg(LCD_PCON,LCD_PCON_DINC); 
 
         DRV_WriteReg(LCD_START,LCD_START_BIT); 
         while(DRV_Reg(LCD_GSTA)&LCD_GSTA_PRUN); 
         DRV_WriteReg(LCD_START,LCD_STOP_BIT); 
      } 
 
      if (size_LSB) 
      { 
         srcaddr = (srcaddr + size - size_LSB); 
         dstaddr = (dstaddr + size - size_LSB); 
 
         DRV_WriteReg(LCD_MSBSRC,(kal_uint16)(srcaddr >> 16)); 
         DRV_WriteReg(LCD_LSBSRC,(kal_uint16)srcaddr); 
 
         DRV_WriteReg(LCD_REFR,0x0000); 
         DRV_WriteReg(LCD_MSBDST,(kal_uint16)(dstaddr >> 16)); 
         DRV_WriteReg(LCD_LSBDST,(kal_uint16)(dstaddr)); 
 
         DRV_WriteReg(LCD_CADDRSET,size_LSB); 
         DRV_WriteReg(LCD_PADDRSET,1); 
         DRV_WriteReg(LCD_CHOP,0); 
 
         DRV_WriteReg(LCD_PCON,LCD_PCON_DINC); 
 
         DRV_WriteReg(LCD_START,LCD_START_BIT); 
         while(DRV_Reg(LCD_GSTA)&LCD_GSTA_PRUN); 
         DRV_WriteReg(LCD_START,LCD_STOP_BIT); 
      } 
 
      lcd_assert_fail = KAL_FALSE; 
   #else /*!LCD_DMAENABLE*/ 
      kal_mem_cpy(dst,src,size); 
   #endif   /*LCD_DMAENABLE*/ 
} 
#else /*!(MT6205B,MT6218)*/ 
void LCD_memcpy(void *dst /*s1*/, const void *src /*s2*/, kal_uint16 size) 
{ 
   kal_mem_cpy(dst,src,size); 
} 
#endif   /*(MT6205B,MT6218)*/ 
 
LCD_Funcs LCD_func_HX8306A = { 
   LCD_Init_HX8306A, 
   LCD_PWRON_HX8306A, 
   LCD_SetContrast_HX8306A, 
   LCD_ON_HX8306A, 
   LCD_BlockWrite_HX8306A, 
   LCD_Size_HX8306A, 
   LCD_EnterSleep_HX8306A, 
   LCD_ExitSleep_HX8306A, 
   LCD_Partial_On_HX8306A, 
   LCD_Partial_Off_HX8306A, 
   LCD_Partial_line_HX8306A, 
   /*Engineering mode*/ 
   LCD_GetParm_HX8306A, 
   LCD_SetBias_HX8306A, 
   LCD_Contrast_HX8306A, 
   LCD_LineRate_HX8306A, 
   LCD_Temp_Compensate_HX8306A 
   #ifdef __LCD_ESD_RECOVERY__    
   ,LCD_ESD_check_HX8306A 
   #endif  
}; 
 
void LCD_FunConfig(void) 
{ 
    MainLCD = &LCD_func_HX8306A; 
}