#ifdef BUILD_LK #include #include #include #include #else #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef CONFIG_OF #include #include #include #include #include #include #endif #endif #include "lcm_drv.h" /*#include "ddp_irq.h"*/ // --------------------------------------------------------------------------- // Local Constants // --------------------------------------------------------------------------- #define FRAME_WIDTH (800) #define FRAME_HEIGHT (1280) // --------------------------------------------------------------------------- // Local Variables // --------------------------------------------------------------------------- static LCM_UTIL_FUNCS lcm_util = {0}; #define SET_RESET_PIN(v) (lcm_util.set_reset_pin((v))) #define UDELAY(n) (lcm_util.udelay(n)) #define MDELAY(n) (lcm_util.mdelay(n)) #ifdef GPIO_LCM_PWR #define GPIO_LCD_PWR_EN GPIO_LCM_PWR #else #define GPIO_LCD_PWR_EN GPIO158 #endif #ifdef GPIO_LCM_RST #define GPIO_LCD_RST GPIO_LCM_RST #else #define GPIO_LCD_RST GPIO45 #endif #ifdef GPIO_LCM_BL_EN #define GPIO_LCD_BL_EN GPIO_LCM_BL_EN #else #define GPIO_LCD_BL_EN 0xFFFFFFFF #endif //#define GPIO_LCD_PWR_EN GPIO_LCM_PWR_EN // --------------------------------------------------------------------------- // Local Functions // --------------------------------------------------------------------------- #define dsi_set_cmdq_V2(cmd, count, ppara, force_update) lcm_util.dsi_set_cmdq_V2(cmd, count, ppara, force_update) #define dsi_set_cmdq(pdata, queue_size, force_update) lcm_util.dsi_set_cmdq(pdata, queue_size, force_update) #define wrtie_cmd(cmd) lcm_util.dsi_write_cmd(cmd) #define write_regs(addr, pdata, byte_nums) lcm_util.dsi_write_regs(addr, pdata, byte_nums) #define read_reg(cmd) lcm_util.dsi_dcs_read_lcm_reg(cmd) #define read_reg_v2(cmd, buffer, buffer_size) lcm_util.dsi_dcs_read_lcm_reg_v2(cmd, buffer, buffer_size) #define LCM_DSI_CMD_MODE 0 #define REGFLAG_DELAY 0XFFE #define REGFLAG_END_OF_TABLE 0xFFF // END OF REGISTERS MARKER struct LCM_setting_table { unsigned cmd; unsigned char count; unsigned char para_list[64]; }; #if 0 static void push_table(struct LCM_setting_table *table, unsigned int count, unsigned char force_update) { unsigned int i; for(i = 0; i < count; i++) { unsigned cmd; cmd = table[i].cmd; switch (cmd) { case REGFLAG_DELAY : MDELAY(table[i].count); break; case REGFLAG_END_OF_TABLE : break; default: dsi_set_cmdq_V2(cmd, table[i].count, table[i].para_list, force_update); } } } #endif // --------------------------------------------------------------------------- // LCM Driver Implementations // --------------------------------------------------------------------------- static void lcm_set_util_funcs(const LCM_UTIL_FUNCS *util) { memcpy(&lcm_util, util, sizeof(LCM_UTIL_FUNCS)); } static void lcm_get_params(LCM_PARAMS *params) { memset(params, 0, sizeof(LCM_PARAMS)); params->type = LCM_TYPE_DSI; params->width = FRAME_WIDTH; params->height = FRAME_HEIGHT; #if (LCM_DSI_CMD_MODE) params->dsi.mode = CMD_MODE; #else params->dsi.mode = BURST_VDO_MODE;//BURST_VDO_MODE; //SYNC_EVENT_VDO_MODE; //SYNC_PULSE_VDO_MODE; #endif // DSI /* Command mode setting */ // Three lane or Four lane params->dsi.LANE_NUM = LCM_FOUR_LANE;//LCM_TWO_LANE; //params->dsi.LANE_NUM = LCM_THREE_LANE; //params->dsi.LANE_NUM = LCM_TWO_LANE; //The following defined the fomat for data coming from LCD engine. #if 1 //params->dsi.data_format.color_order = LCM_COLOR_ORDER_RGB; //params->dsi.data_format.trans_seq = LCM_DSI_TRANS_SEQ_MSB_FIRST; //params->dsi.data_format.padding = LCM_DSI_PADDING_ON_LSB; params->dsi.data_format.format = LCM_DSI_FORMAT_RGB888; #endif // Highly depends on LCD driver capability. // Not support in MT6573 //params->dsi.packet_size=256; // Video mode setting //params->dsi.PS=LCM_PACKED_PS_24BIT_RGB888; // params->dsi.intermediat_buffer_num = 0; params->dsi.PS=LCM_PACKED_PS_24BIT_RGB888; //mask in mt8321 platform // params->dsi.word_count=FRAME_WIDTH*3; #if 1 params->dsi.vertical_sync_active = 5;//4// by eric.wang params->dsi.vertical_backporch = 3;//8 by eric.wang 23 params->dsi.vertical_frontporch = 8;//6 by eric.wang 12 params->dsi.vertical_active_line = FRAME_HEIGHT; params->dsi.horizontal_sync_active = 5;//4 params->dsi.horizontal_backporch = 59;//132 by eric.wangc 160 params->dsi.horizontal_frontporch = 16;//24 by eric.wang 160 params->dsi.horizontal_active_pixel = FRAME_WIDTH; #endif #if 0 params->dsi.vertical_sync_active = 5;//4// by eric.wang params->dsi.vertical_backporch = 12;//8 by eric.wang 23 params->dsi.vertical_frontporch = 12;//6 by eric.wang 12 params->dsi.vertical_active_line = FRAME_HEIGHT; params->dsi.horizontal_sync_active = 10;//4 params->dsi.horizontal_backporch = 59;//132 by eric.wangc 160 params->dsi.horizontal_frontporch = 32;//24 by eric.wang 160 params->dsi.horizontal_active_pixel = FRAME_WIDTH; #endif //params->dsi.horizontal_blanking_pixel = 60; // Bit rate calculation // Every lane speed //params->dsi.pll_div1=0; // div1=0,1,2,3;div1_real=1,2,4,4 //params->dsi.pll_div2=0; // div2=0,1,2,3;div1_real=1,2,4,4 //params->dsi.fbk_div =0x12; // fref=26MHz, fvco=fref*(fbk_div+1)*2/(div1_real*div2_real) //params->dsi.cont_clock = 0;//0 //params->dsi.ssc_disable = 1;//0 params->dsi.PLL_CLOCK =210;//210;// 220;//245 by eric.wang //params->dsi.clk_lp_per_line_enable = 1; //1 } static void lcm_set_gpio_output(unsigned int GPIO, unsigned int output) { #ifdef BUILD_LK mt_set_gpio_mode(GPIO, GPIO_MODE_00); mt_set_gpio_dir(GPIO, GPIO_DIR_OUT); mt_set_gpio_out(GPIO, (output>0)? GPIO_OUT_ONE: GPIO_OUT_ZERO); #else gpio_direction_output(GPIO, output); gpio_set_value(GPIO, output); #endif } static void lcm_initial_registers(void) { unsigned int data_array[16]; #ifdef BUILD_LK //printf("[IND][K] y_____0%s\n", __func__); #else //printk("[IND][K] y_____1%s\n", __func__); #endif /* data_array[0] = 0x10b21500; dsi_set_cmdq(&data_array, 1, 1); MDELAY(1); */ //======================================= data_array[0]= 0x00053902; data_array[1]= 0xA555AAFF; data_array[2]= 0x00000125; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00033902; data_array[1]= 0x000020FC; dsi_set_cmdq(data_array, 2, 1); MDELAY(2); data_array[0]= 0x00033902; data_array[1]= 0x000000FC; dsi_set_cmdq(data_array, 2, 1); MDELAY(2); data_array[0]= 0x00033902; data_array[1]= 0x000020FC; dsi_set_cmdq(data_array, 2, 1); MDELAY(2); data_array[0]= 0x00053902; data_array[1]= 0x2555AAFF; data_array[2]= 0x00000000; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00063902; data_array[1]= 0x52AA55F0; data_array[2]= 0x00000008; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00033902; data_array[1]= 0x000168B1; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00023902; data_array[1]= 0x000008B6; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00043902; data_array[1]= 0x080201B8; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x004444BB; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x000000BC; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00063902; data_array[1]= 0x106802BD; data_array[2]= 0x00000010; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00023902; data_array[1]= 0x000080C8; dsi_set_cmdq(data_array, 2, 1); //Page 1 Enable data_array[0]= 0x00063902; data_array[1]= 0x52AA55F0; data_array[2]= 0x00000108; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00033902; data_array[1]= 0x004F4FB3; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x001010B4; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x000505B5; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x003535B9; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x002525BA; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x000068BC; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x000068BD; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00023902; data_array[1]= 0x000033BE; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00023902; data_array[1]= 0x00000CC0; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00023902; data_array[1]= 0x000000CA; dsi_set_cmdq(data_array, 2, 1); //PAGE 2 data_array[0]= 0x00063902; data_array[1]= 0x52AA55F0; data_array[2]= 0x00000208; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00023902; data_array[1]= 0x000001EE; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00113902; data_array[1]= 0x000000B0; data_array[2]= 0x002A000F; data_array[3]= 0x00540040; data_array[4]= 0x00930076; data_array[5]= 0x000000C5; dsi_set_cmdq(data_array, 6, 1); data_array[0]= 0x00113902; data_array[1]= 0x01F000B1; data_array[2]= 0x01660132; data_array[3]= 0x02FF01BB; data_array[4]= 0x02420201; data_array[5]= 0x00000085; dsi_set_cmdq(data_array, 6, 1); data_array[0]= 0x00113902; data_array[1]= 0x02AF02B2; data_array[2]= 0x030503E0; data_array[3]= 0x03540335; data_array[4]= 0x03A00384; data_array[5]= 0x000000C4; dsi_set_cmdq(data_array, 6, 1); data_array[0]= 0x00053902; data_array[1]= 0x03F203B3; data_array[2]= 0x000000FF; dsi_set_cmdq(data_array, 3, 1); //PAGE 3 data_array[0]= 0x00063902; data_array[1]= 0x52AA55F0; data_array[2]= 0x00000308; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00033902; data_array[1]= 0x000000B0; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x000000B1; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00063902; data_array[1]= 0x170008B2; data_array[2]= 0x00000000; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00063902; data_array[1]= 0x000005B6; data_array[2]= 0x00000000; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00063902; data_array[1]= 0xA00053BA; data_array[2]= 0x00000000; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00063902; data_array[1]= 0xA00053BB; data_array[2]= 0x00000000; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00053902; data_array[1]= 0x000000C0; data_array[2]= 0x00000000; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00053902; data_array[1]= 0x000000C1; data_array[2]= 0x00000000; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00023902; data_array[1]= 0x000060C4; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00023902; data_array[1]= 0x0000C0C5; dsi_set_cmdq(data_array, 2, 1); //PAGE 5 data_array[0]= 0x00063902; data_array[1]= 0x52AA55F0; data_array[2]= 0x00000508; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00033902; data_array[1]= 0x000617B0; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x000617B1; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x000617B2; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x000617B3; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x000617B4; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x000617B5; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00023902; data_array[1]= 0x00000CB8; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00023902; data_array[1]= 0x000000B9; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00023902; data_array[1]= 0x000000BA; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00023902; data_array[1]= 0x00000ABB; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00023902; data_array[1]= 0x000002BC; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00063902; data_array[1]= 0x010103BD; data_array[2]= 0x00000303; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00023902; data_array[1]= 0x000007C0; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00023902; data_array[1]= 0x0000A2C4; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x002003C8; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x002101C9; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00043902; data_array[1]= 0x010000CC; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00043902; data_array[1]= 0x010000CD; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00063902; data_array[1]= 0xFC0400D1; data_array[2]= 0x00001407; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00063902; data_array[1]= 0x000510D2; data_array[2]= 0x00001603; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00023902; data_array[1]= 0x000006E5; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00023902; data_array[1]= 0x000006E6; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00023902; data_array[1]= 0x000006E7; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00023902; data_array[1]= 0x000006E8; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00023902; data_array[1]= 0x000006E9; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00023902; data_array[1]= 0x000006EA; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00023902; data_array[1]= 0x000030ED; dsi_set_cmdq(data_array, 2, 1); //PAGE6 data_array[0]= 0x00063902; data_array[1]= 0x52AA55F0; data_array[2]= 0x00000608; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00033902; data_array[1]= 0x001117B0; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x001016B1; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x001812B2; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x001913B3; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x003100B4; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x003431B5; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x002934B6; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x00332AB7; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x002D2EB8; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x003408B9; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x000834BA; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x002E2DBB; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x002A34BC; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x003429BD; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x003134BE; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x000031BF; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x001319C0; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x001218C1; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x001610C2; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x001711C3; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x003434E5; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x001812C4; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x001913C5; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x001117C6; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x001016C7; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x003108C8; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x003431C9; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x002934CA; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x00332ACB; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x002E2DCC; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x003400CD; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x000034CE; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x002D2ECF; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x002A34D0; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x003429D1; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x003134D2; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x000831D3; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x001610D4; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x001711D5; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x001319D6; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x001218D7; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00033902; data_array[1]= 0x003434E6; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00063902; data_array[1]= 0x000000D8; data_array[2]= 0x00000000; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00063902; data_array[1]= 0x000000D9; data_array[2]= 0x00000000; dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00023902; data_array[1]= 0x000000E7; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00110500; //exit sleep mode dsi_set_cmdq(data_array, 1, 1); MDELAY(120); data_array[0] = 0x00290500; //exit sleep mode dsi_set_cmdq(data_array, 1, 1); MDELAY(120); data_array[0]= 0x00023902; data_array[1]= 0x00000035; dsi_set_cmdq(data_array, 2, 1); data_array[0]= 0x00063902; data_array[1]= 0x52AA55F0; data_array[2]= 0x00000108; dsi_set_cmdq(data_array, 3, 1); data_array[0] = 0x00110500; //exit sleep mode dsi_set_cmdq(data_array, 1, 1); MDELAY(200); data_array[0] = 0x00290500; //exit sleep mode dsi_set_cmdq(data_array, 1, 1); MDELAY(100); } static void lcm_init(void) { #ifdef BUILD_LK printf("[IND][K] Y___0%s\n", __func__); //lcd_bl_en(0); lcm_set_gpio_output(GPIO_LCD_RST, GPIO_OUT_ZERO); lcm_set_gpio_output(GPIO_LCD_PWR_EN, GPIO_OUT_ZERO); //lcm_set_gpio_output(GPIO_LCM_STB, GPIO_OUT_ZERO); MDELAY(90); lcm_set_gpio_output(GPIO_LCD_PWR_EN, GPIO_OUT_ONE); MDELAY(30); //lcm_set_gpio_output(GPIO_LCM_STB, GPIO_OUT_ONE); MDELAY(30); lcm_set_gpio_output(GPIO_LCD_RST, GPIO_OUT_ONE); MDELAY(10); lcm_set_gpio_output(GPIO_LCD_RST, GPIO_OUT_ZERO); MDELAY(10); lcm_set_gpio_output(GPIO_LCD_RST, GPIO_OUT_ONE); MDELAY(130);//Must > 5ms //lcd_bl_en(1); lcm_initial_registers(); MDELAY(400); //avdd_enable(1); //MDELAY(180); //lcd_bl_en(1); #endif } static void lcm_suspend(void) { #if 1 //nt35521 //unsigned int data_array[16]; #ifdef BUILD_LK //printf("[IND][K] y__________0%s\n", __func__); #else //printk("[IND][LK] y______1%s\n", __func__); #ifdef BUILD_UBOOT // do nothing in uboot return; #endif // data_array[0] = 0x00280500; //display off // dsi_set_cmdq(data_array, 1, 1); // data_array[0] = 0x00100500; // dsi_set_cmdq(data_array,1,1);//enter into sleep // MDELAY(5); // lcd_bl_en(0); //avdd_enable(0); lcm_set_gpio_output(GPIO_LCD_RST, 0); //lcm_set_gpio_output(GPIO_LCM_STB, 0); //by eric.wang MDELAY(200); lcm_set_gpio_output(GPIO_LCD_PWR_EN, 0); // DSI_clk_HS_mode(0); MDELAY(10); #endif #endif #if 0 //ek79007 #ifdef BUILD_LK printf("[LK/LCM] lcm_suspend() enter\n"); //lcm_set_gpio_output(GPIO_LCD_PWR_EN,GPIO_OUT_ZERO); //MDELAY(100); //VGP1 1.8V //upmu_set_rg_vgp1_vosel(0x0); //upmu_set_rg_vgp1_en(0x0); //MDELAY(50); //lcm standy lcm_set_gpio_output(GPIO_LCM_STB, GPIO_OUT_ZERO); printf("[LK/LCM] lcm_suspend() end\n"); #else printk("[Kernel/LCM] lcm_suspend() enter\n"); lcm_set_gpio_output(GPIO_LCD_BL_EN, GPIO_OUT_ZERO); //lcm_set_gpio_output(GPIO_DISP_PWM, GPIO_OUT_ZERO);//eric.wang MDELAY(10); //lcm standy lcm_set_gpio_output(GPIO_LCM_STB, GPIO_OUT_ZERO); MDELAY(10); lcm_set_gpio_output(GPIO_LCD_PWR_EN,GPIO_OUT_ZERO); MDELAY(10); lcm_set_gpio_output(GPIO_LCD_RST,GPIO_OUT_ZERO); //MDELAY(100); printk("[Kernel/LCM] lcm_suspend() end\n"); #endif #endif } static void lcm_resume(void) { #if 1 //nt35521 #ifdef BUILD_LK //printf("[IND][K] y_______0%s\n", __func__); #else printk("[IND][LK] y_______1%s\n", __func__); lcm_set_gpio_output(GPIO_LCD_RST, 0); lcm_set_gpio_output(GPIO_LCD_PWR_EN, 0); //avdd_enable(0); // lcm_set_gpio_output(GPIO_LCM_STB, 0);//by eric.wang MDELAY(90); lcm_set_gpio_output(GPIO_LCD_PWR_EN, 1); MDELAY(30); //lcm_set_gpio_output(GPIO_LCM_STB, 1);//by eric.wang MDELAY(30); lcm_set_gpio_output(GPIO_LCD_RST, 1); MDELAY(10); lcm_set_gpio_output(GPIO_LCD_RST, 0); MDELAY(10); lcm_set_gpio_output(GPIO_LCD_RST, 1); MDELAY(130);//Must > 5ms //lcd_bl_en(1); lcm_initial_registers(); MDELAY(400); #endif #endif #if 0 //ek79007 #ifdef BUILD_LK printf("[LK/LCM] lcm_resume() enter\n"); //lcm_set_gpio_output(GPIO_LCD_PWR_EN, GPIO_OUT_ZERO); //MDELAY(50); //VGP1 1.8V //upmu_set_rg_vgp1_vosel(0x3); //upmu_set_rg_vgp1_en(0x1); //MDELAY(10); //lcm_set_gpio_output(GPIO_LCD_PWR_EN, GPIO_OUT_ONE); //MDELAY(300); //lcm standy lcm_set_gpio_output(GPIO_LCM_STB, GPIO_OUT_ONE); printf("[LK/LCM] lcm_resume() end\n"); #else printk("[Kernel/LCM] lcm_resume() enter\n"); //hwPowerOn(MT6323_POWER_LDO_VGP3, VOL_1800, "LCM");//by eric.wang //lcm_set_gpio_output(GPIO_LCD_RST, GPIO_OUT_ONE); //MDELAY(20); lcm_set_gpio_output(GPIO_LCD_PWR_EN, GPIO_OUT_ONE); MDELAY(20); //lcm standy lcm_set_gpio_output(GPIO_LCM_STB, GPIO_OUT_ONE); MDELAY(5); lcm_set_gpio_output(GPIO_LCD_RST, GPIO_OUT_ZERO); MDELAY(20); lcm_set_gpio_output(GPIO_LCD_RST, GPIO_OUT_ONE); MDELAY(100); lcm_initial_registers(); //push_table(lcm_initialization_setting, sizeof(lcm_initialization_setting) / sizeof(struct LCM_setting_table), 1); MDELAY(100); lcm_set_gpio_output(GPIO_LCD_BL_EN, GPIO_OUT_ONE); printk("[Kernel/LCM] lcm_resume() end\n"); //MDELAY(10); #endif #endif } #if (LCM_DSI_CMD_MODE) static void lcm_update(unsigned int x, unsigned int y, unsigned int width, unsigned int height) { unsigned int x0 = x; unsigned int y0 = y; unsigned int x1 = x0 + width - 1; unsigned int y1 = y0 + height - 1; unsigned char x0_MSB = ((x0>>8)&0xFF); unsigned char x0_LSB = (x0&0xFF); unsigned char x1_MSB = ((x1>>8)&0xFF); unsigned char x1_LSB = (x1&0xFF); unsigned char y0_MSB = ((y0>>8)&0xFF); unsigned char y0_LSB = (y0&0xFF); unsigned char y1_MSB = ((y1>>8)&0xFF); unsigned char y1_LSB = (y1&0xFF); unsigned int data_array[16]; data_array[0]= 0x00053902; data_array[1]= (x1_MSB<<24)|(x0_LSB<<16)|(x0_MSB<<8)|0x2a; data_array[2]= (x1_LSB); dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00053902; data_array[1]= (y1_MSB<<24)|(y0_LSB<<16)|(y0_MSB<<8)|0x2b; data_array[2]= (y1_LSB); dsi_set_cmdq(data_array, 3, 1); data_array[0]= 0x00290508; //HW bug, so need send one HS packet dsi_set_cmdq(data_array, 1, 1); data_array[0]= 0x002c3909; dsi_set_cmdq(data_array, 1, 0); } #endif static void lcm_power(void){ lcm_set_gpio_output(GPIO_LCD_PWR_EN, GPIO_OUT_ZERO); MDELAY(10); lcm_set_gpio_output(GPIO_LCD_PWR_EN, GPIO_OUT_ONE); MDELAY(10); } static int lcm_get_gpio_input(unsigned int GPIO) { #ifdef BUILD_LK int status; mt_set_gpio_mode(GPIO, GPIO_MODE_00); mt_set_gpio_dir(GPIO, GPIO_DIR_IN); status=mt_get_gpio_in(GPIO); printf("es6311 star lcm: status=%d,by eric.wang\n",status); return status; #else //gpio_direction_output(GPIO, output); //gpio_set_value(GPIO, output); #endif } #define ID2 GPIO85 int lcm_compare_id(void){ int st; st=lcm_get_gpio_input(ID2); if(st==0) return 1; //star lcm id2 :0 else return 0; } LCM_DRIVER es6311_anx6585_zigzag_wxga_lcm_drv = { .name = "es6311_anx6585_zigzag_wxga", .set_util_funcs = lcm_set_util_funcs, .get_params = lcm_get_params, .init = lcm_init, .suspend = lcm_suspend, .resume = lcm_resume, .init_power = lcm_power, .compare_id = lcm_compare_id, #if (LCM_DSI_CMD_MODE) .update = lcm_update, #endif };