| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868 |
- #ifndef BUILD_LK
- #include <linux/string.h>
- #endif
- #include "lcm_drv.h"
- #ifdef BUILD_LK
- #include <platform/mt_gpio.h>
- #else
- #include <mt-plat/mt_gpio.h>
- #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
- };
|