#ifndef BUILD_LK #include #endif #include "lcm_drv.h" #ifdef BUILD_LK #include #else #include #include "../../../../misc/mediatek/auxadc/mt_auxadc.h" #endif // --------------------------------------------------------------------------- // Local Constantsq // --------------------------------------------------------------------------- #define AUXADC_LCM_VOLTAGE_CHANNEL 1 #define FRAME_WIDTH (540) #define FRAME_HEIGHT (960) #define REGFLAG_DELAY 0XFFE #define REGFLAG_END_OF_TABLE 0xFFF // END OF REGISTERS MARKER // --------------------------------------------------------------------------- // Local Variables // --------------------------------------------------------------------------- static LCM_UTIL_FUNCS lcm_util; //static int g_which_lcm = -1; extern int IMM_GetOneChannelValue(int dwChannel, int data[4], int* rawdata); //static unsigned int lcm_compare_id(void); #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)) // --------------------------------------------------------------------------- // 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) static struct LCM_setting_table { unsigned cmd; unsigned char count; unsigned char para_list[128]; }; static struct LCM_setting_table lcm_initialization_setting[] = { #if 0 /* Note : Data ID will depends on the following rule. count of parameters > 1 => Data ID = 0x39 count of parameters = 1 => Data ID = 0x15 count of parameters = 0 => Data ID = 0x05 Structure Format : {DCS command, count of parameters, {parameter list}} {REGFLAG_DELAY, milliseconds of time, {}}, ... Setting ending by predefined flag {REGFLAG_END_OF_TABLE, 0x00, {}} */ /* SET PASSWORD//10//F2//58 */ { 0xB9, 03, {0xFF, 0x83, 0x89} }, /* SET POWER HI */ { 0xB1, 20, {0x7F, 0x10, 0x10, 0x32, 0x32, 0x50, 0x10, 0xF2, 0x58, 0x80, 0x20, 0x20, 0xF8, 0xAA, 0xAA, 0xA0, 0x00, 0x80, 0x30, 0x00} }, { 0xB2, 10, {0x80, 0x50, 0x05, 0x07, 0x40, 0x38, 0x11, 0x64, 0x5D, 0x09} }, /* SET CYC HI */ { 0xB4, 11, {0x70, 0x70, 0x70, 0x70, 0x00, 0x00, 0x10, 0x76, 0x10, 0x76, 0xB0} }, /* SET GAMMA */ { 0xD3, 35, {0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x32, 0x10, 0x00, 0x00, 0x00, 0x03, 0xC6, 0x03, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x35, 0x33, 0x04, 0x04, 0x37, 0x00, 0x00, 0x00, 0x05, 0x08, 0x00, 0x00, 0x0A, 0x00, 0x01} }, { 0xD5, 38, {0x18, 0x18, 0x18, 0x18, 0x19, 0x19, 0x18, 0x18, 0x20, 0x21, 0x24, 0x25, 0x18, 0x18, 0x18, 0x18, 0x00, 0x01, 0x04, 0x05, 0x02, 0x03, 0x06, 0x07, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18} }, { 0xD6, 38, {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x19, 0x19, 0x25, 0x24, 0x21, 0x20, 0x18, 0x18, 0x18, 0x18, 0x07, 0x06, 0x03, 0x02, 0x05, 0x04, 0x01, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18} }, { 0xCC, 01, {0x02} }, { 0xC7, 04, {0x00, 0x80, 0x00, 0xC0} }, { 0xD2, 01, {0x33} }, { 0xE0, 42, {0x00, 0x0F, 0x16, 0x35, 0x3B, 0x3F, 0x21, 0x43, 0x07, 0x0B, 0x0D, 0x18, 0x0E, 0x10, 0x12, 0x11, 0x13, 0x06, 0x10, 0x13, 0x18, 0x00, 0x0F, 0x15, 0x35, 0x3B, 0x3F, 0x21, 0x42, 0x07, 0x0B, 0x0D, 0x18, 0x0D, 0x11, 0x13, 0x11, 0x12, 0x07, 0x11, 0x12, 0x17} }, { 0xB6, 03, {0x88, 0x88, 0x00} }, { 0x35, 01, {0x00} }, { 0x11, 00, {} }, /* DISPLAY ON */ { 0x29, 00, {} }, /* stop loop */ { REGFLAG_END_OF_TABLE, 0, {0x00} } #else {0xB9,3,{0xFF,0x83,0x89}}, {0xB1,16,{0x7F,0x10,0x10,0x32,0x92,0x90,0x10,0xFA,0x58,0x80,0x20,0x20,0xF8,0xAA,0xAA,0xA3,0x00,0x80,0x30,0x00}}, {0xB2,10,{0x80,0x50,0x0A,0x06,0x40,0x38,0x11,0x64,0x55,0x09}}, {0xB4,11,{0x02,0x70,0x02,0x70,0x00,0x00,0x10,0x76,0x10,0x76,0x90}}, {0xD3,35,{0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x32,0x10,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x17,0x00,0x09,0x09,0x13,0x00,0x00,0x00,0x0C,0x08,0x00,0x00,0x0A,0x00,0x01}}, {0xD5,38,{0x18,0x18,0x18,0x18,0x18,0x18,0x01,0x00,0x03,0x02,0x19,0x19,0x19,0x19,0x21,0x20,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18}}, {0xD6,38,{0x18,0x18,0x18,0x18,0x18,0x18,0x02,0x03,0x00,0x01,0x19,0x19,0x18,0x18,0x20,0x21,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18}}, {0xC0,4,{0x30,0x15,0x00,0x03}}, {0xC7,4,{0x00,0x80,0x00,0xC0}}, {0xD2,1,{0x22}}, {0xCC,1,{0x02}}, {0xE0,42,{0x00,0x02,0x05,0x0F,0x10,0x1F,0x17,0x31,0x06,0x08,0x0A,0x14,0x10,0x15,0x17,0x16,0x16,0x09,0x13,0x14,0x17,0x00,0x02,0x05,0x0F,0x10,0x1F,0x17,0x31,0x06,0x08,0x0A,0x14,0x10,0x15,0x17,0x16,0x16,0x09,0x13,0x14,0x17}}, {REGFLAG_DELAY, 5, {}}, {0xB6,2,{0x48,0x48}}, {0xCD,1,{0x5A}}, {0x11,1,{0x00}}, {REGFLAG_DELAY, 120,{}}, {0x29,1,{0x00}}, {REGFLAG_DELAY, 50,{}}, {0x35,1,{0x00}}, {REGFLAG_DELAY, 100, {}}, { REGFLAG_END_OF_TABLE, 0, {0x00} } #endif }; static struct LCM_setting_table lcm_sleep_in_setting[] = { // Display off sequence // Sleep Mode On { 0x10, 0, {} }, { REGFLAG_DELAY, 120, {} }, { REGFLAG_END_OF_TABLE, 0x00, {} } }; //static struct LCM_setting_table lcm_backlight_level_setting[] = { //{0x51, 1, {0xFF}}, //{REGFLAG_END_OF_TABLE, 0x00, {}} //}; 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); } } } static void init_lcm_registers(void) { #if 1 push_table(lcm_initialization_setting, sizeof(lcm_initialization_setting) / sizeof(struct LCM_setting_table), 1); #else unsigned int data_array[6]; data_array[0] = 0x00053902; data_array[1] = 0x040698ff; data_array[2] = 0x00000001; dsi_set_cmdq(data_array, 3, 1); MDELAY(20); data_array[0] = 0x00023902; data_array[1] = 0x00001008; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000121; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000130; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000231; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000760; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000061; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000862; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000063; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00001440; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00003341; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000242; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000943; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000644; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00007850; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00007851; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000052; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00006353; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00005057; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000000a0; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000009a1; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000ea2; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000013a3; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000ca4; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00001aa5; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000aa6; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000aa7; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000001a8; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000008a9; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000007aa; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000005ab; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000010ac; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000032ad; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00002fae; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000000af; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000000c0; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000002c1; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000012c2; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000cc3; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000008c4; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000015c5; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000008c6; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000006c7; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000007c8; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000009c9; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000006ca; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000005cb; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000acc; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000025cd; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00001fce; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000000cf; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00053902; data_array[1] = 0x040698ff; data_array[2] = 0x00000006; dsi_set_cmdq(data_array, 3, 1); MDELAY(20); data_array[0] = 0x00023902; data_array[1] = 0x00002100; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000601; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000002; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000003; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000104; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000105; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00008006; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000207; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000508; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000009; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000000a; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000000b; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000010c; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000010d; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000000e; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000000f; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000f010; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000f411; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000012; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000013; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000014; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000c015; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000816; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000017; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000018; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000019; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000001a; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000001b; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000001c; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000001d; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000220; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00001321; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00004522; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00006723; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00000124; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00002325; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00004526; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00006727; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00001330; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00002231; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00002232; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00002233; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00002234; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000bb35; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000aa36; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000dd37; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000cc38; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00006639; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000773a; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000223b; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000223c; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000223d; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000223e; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x0000223f; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00002240; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00001052; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00001053; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00053902; data_array[1] = 0x040698ff; data_array[2] = 0x00000007; dsi_set_cmdq(data_array, 3, 1); MDELAY(20); data_array[0] = 0x00023902; data_array[1] = 0x00002217; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00007702; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x000079e1; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00023902; data_array[1] = 0x00001006; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00053902; data_array[1] = 0x040698ff; data_array[2] = 0x00000000; dsi_set_cmdq(data_array, 3, 1); MDELAY(20); data_array[0] = 0x00023902; data_array[1] = 0x00000021; dsi_set_cmdq(data_array, 2, 1); data_array[0] = 0x00110500; dsi_set_cmdq(data_array, 1, 1); MDELAY(120); data_array[0] = 0x00290500; dsi_set_cmdq(data_array, 1, 1); MDELAY(20); #endif } // --------------------------------------------------------------------------- // LCM Driver Implementations // --------------------------------------------------------------------------- static void lcm_set_util_funcs(const LCM_UTIL_FUNCS * util) { memcpy(&lcm_util, util, sizeof(LCM_UTIL_FUNCS)); } static int adc_read_vol(void) { int adc[1]; int data[4] ={0,0,0,0}; int sum = 0; int adc_vol=0; int num = 0; int ret =0; for(num=0;num<10;num++) { ret = IMM_GetOneChannelValue(AUXADC_LCM_VOLTAGE_CHANNEL, data, adc); sum+=(data[0]*100+data[1]); } adc_vol = sum/10; #if defined(BUILD_LK) printf("lfz st7701s test adc_vol is %d\n",adc_vol); #else printk("lfz st7701s test adc_vol is %d\n",adc_vol); #endif /* if(adc_vol < 30) { printf("lfz st7701s_fwvga_dsi_vdo_jh_hsd_4502 \n"); return 0; } else if((adc_vol >= 30) && (adc_vol < 50)) { printf("lfz st7701s_fwvga_dsi_vdo_zgd_hsd_h4504 \n"); return 1; } else if((adc_vol >= 50) && (adc_vol < 100)) { printf("lfz st7701s_fwvga_dsi_vdo_gt_cmi_h4504 \n"); return 2; } else if((adc_vol >= 100) && (adc_vol < 130)) { printk("lfz st7701s_fwvga_dsi_vdo_hy_cpt_h4504 \n"); return 3; } */ if(adc_vol < 60) { printf("lfz st7701s_fwvga_dsi_vdo_jh_hsd_4502 \n");//38 return 0; } else { printf("lfz st7701s_fwvga_dsi_vdo_xinqi_hsd_4502 \n");//115 return 1; } } static void lcm_get_params(LCM_PARAMS * params) { memset(params, 0, sizeof(LCM_PARAMS)); params->type = LCM_TYPE_DSI; params->physical_width = 61; params->physical_height = 109; params->width = FRAME_WIDTH; params->height= FRAME_HEIGHT; // enable tearing-free //params->dbi.te_mode = LCM_DBI_TE_MODE_VSYNC_ONLY; //params->dbi.te_edge_polarity = LCM_POLARITY_RISING; params->dsi.mode = SYNC_EVENT_VDO_MODE;//BURST_VDO_MODE; SYNC_PULSE_VDO_MODE SYNC_EVENT_VDO_MODE // DSI /* Command mode setting */ params->dsi.LANE_NUM = LCM_TWO_LANE; //The following defined the fomat for data coming from LCD engine. 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; params->dsi.packet_size=248; params->dsi.ssc_disable = 1; params->dsi.cont_clock= 0; params->dsi.clk_lp_per_line_enable = 1; // Video mode setting params->dsi.intermediat_buffer_num = 0;//because DSI/DPI HW design change, this parameters should be 0 when video mode in MT658X; or memory leakage params->dsi.PS=LCM_PACKED_PS_24BIT_RGB888; params->dsi.word_count=FRAME_WIDTH*3; //DSI CMD mode need set these two bellow params, different to 6577 params->dsi.vertical_active_line = FRAME_HEIGHT; params->dsi.vertical_sync_active = 2; params->dsi.vertical_backporch = 5; params->dsi.vertical_frontporch = 9; params->dsi.vertical_active_line = FRAME_HEIGHT; params->dsi.horizontal_sync_active = 40; params->dsi.horizontal_backporch = 41; params->dsi.horizontal_frontporch = 50; params->dsi.horizontal_active_pixel = FRAME_WIDTH; params->dsi.esd_check_enable = 1; params->dsi.customization_esd_check_enable = 1; #if 1 params->dsi.lcm_esd_check_table[0].cmd = 0x0A; params->dsi.lcm_esd_check_table[0].count = 1; params->dsi.lcm_esd_check_table[0].para_list[0] = 0x1C; #else params->dsi.lcm_esd_check_table[0].cmd = 0x0a; params->dsi.lcm_esd_check_table[0].count = 1; params->dsi.lcm_esd_check_table[0].para_list[0] = 0x1c; params->dsi.lcm_esd_check_table[1].cmd = 0x09; params->dsi.lcm_esd_check_table[1].count = 4; //3 params->dsi.lcm_esd_check_table[1].para_list[0] = 0x80; params->dsi.lcm_esd_check_table[1].para_list[1] = 0x73; params->dsi.lcm_esd_check_table[1].para_list[2] = 0x04; params->dsi.lcm_esd_check_table[1].para_list[3] = 0x00; //00 #endif params->dsi.PLL_CLOCK = 208;//220;//dsi clock customization: should config clock value directly } static void lcm_suspend(void) { // lcm_compare_id(); // printk("lcm_suspend g_which_lcm=%d\n", g_which_lcm); push_table(lcm_sleep_in_setting, sizeof(lcm_sleep_in_setting) / sizeof(struct LCM_setting_table), 1); // SET_RESET_PIN(1); // MDELAY(10); // SET_RESET_PIN(0); } #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] = 0x002c3909; dsi_set_cmdq(data_array, 1, 0); } #endif extern void DSI_clk_HS_mode(char enter); static unsigned int lcm_compare_id(void) { return 1; #if 0 unsigned int id=0,id1=0,id2=0; unsigned char buffer[5]; unsigned int array[3]; int id_adc = 0; u8 hw_id = 0; SET_RESET_PIN(1); //NOTE:should reset LCM firstly MDELAY(10); SET_RESET_PIN(0); MDELAY(50); SET_RESET_PIN(1); MDELAY(120); #ifdef BUILD_LK DSI_clk_HS_mode(0); #endif // array[0]=0x00063902; // array[1]=0x000177FF; // array[2]=0x00001000; // dsi_set_cmdq(array, 3, 1); // MDELAY(10); array[0] = 0x00053700;// set return byte number // array[0] = 0x00013700; dsi_set_cmdq(array, 1, 1); read_reg_v2(0xA1, buffer, 5); // read_reg_v2(0xDA, &buffer, 1); // id = buffer[0]; id = buffer[0]<<8 |buffer[1]; id1 = buffer[2]<<8 |buffer[3]; id2 = buffer[4]; id_adc = adc_read_vol(); mt_set_gpio_mode(GPIO_DISP_ID0_PIN, GPIO_MODE_00); mt_set_gpio_dir(GPIO_DISP_ID0_PIN, GPIO_DIR_IN); hw_id = mt_get_gpio_in(GPIO_DISP_ID0_PIN); printf("yxch longli read id pin value = %d\n",hw_id); #if defined(BUILD_LK) printf("lfz lk -- st7701s_fwvga_dsi_vdo_xinqi_hsd_4502 id_adc==1 0x%x , 0x%x , 0x%x \n",id,id1,id2); #else printk("lfz kernel -- st7701s_fwvga_dsi_vdo_xinqi_hsd_4502 id_adc==1 0x%x , 0x%x , 0x%x \n",buffer[0],buffer[1],id); #endif return ((id == 0x8802) && (hw_id == 1))?1:0; #endif } static void lcm_init(void) { SET_RESET_PIN(1); MDELAY(10); SET_RESET_PIN(0); MDELAY(50); SET_RESET_PIN(1); MDELAY(100); init_lcm_registers(); } static void lcm_resume(void) { //printk("lcm_resume g_which_lcm=%d\n", g_which_lcm); lcm_init(); // push_table(lcm_sleep_out_setting, sizeof(lcm_sleep_out_setting) / sizeof(struct LCM_setting_table), 1); } // Get LCM Driver Hooks // --------------------------------------------------------------------------- LCM_DRIVER hx8389c_dsi_vdo_lcm_drv = { .name = "hx8389c_dsi_vdo", .set_util_funcs = lcm_set_util_funcs, .get_params = lcm_get_params, .init = lcm_init, .suspend = lcm_suspend, .resume = lcm_resume, .compare_id = lcm_compare_id, #if (LCM_DSI_CMD_MODE) .set_backlight = lcm_setbacklight, .update = lcm_update, #endif };