| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057 |
- #ifdef BUILD_LK
- #include <platform/mt_gpio.h>
- #include <platform/mt_i2c.h>
- #include <platform/mt_pmic.h>
- #include <string.h>
- #else
- #include <linux/string.h>
- #include <linux/wait.h>
- #include <linux/platform_device.h>
- #include <linux/gpio.h>
- #include <linux/pinctrl/consumer.h>
- #include <linux/of_gpio.h>
- #include <asm-generic/gpio.h>
- #include <linux/kernel.h>
- #include <linux/mm.h>
- #include <linux/mm_types.h>
- #include <linux/module.h>
- #include <linux/types.h>
- #include <linux/slab.h>
- #include <linux/vmalloc.h>
- #ifdef CONFIG_OF
- #include <linux/of.h>
- #include <linux/of_irq.h>
- #include <linux/of_address.h>
- #include <linux/of_device.h>
- #include <linux/regulator/consumer.h>
- #include <linux/clk.h>
- #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
- };
|