大家谁有LG4572 MIPI的LCM驱动(最好MTK)
已经调试ok了
驱动能否贴出来,谢谢!
- #include <linux/string.h>
- #ifdef BUILD_UBOOT
- #include <asm/arch/mt6577_gpio.h>
- #else
- #include <mach/mt6577_gpio.h>
- #endif
-
- #include "lcm_drv.h"
- // ---------------------------------------------------------------------------
- // Local Constants
- // ---------------------------------------------------------------------------
- #define FRAME_WIDTH (480)
- #define FRAME_HEIGHT (800)
-
- // ---------------------------------------------------------------------------
- // 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))
- // ---------------------------------------------------------------------------
- // Local Functions
- // ---------------------------------------------------------------------------
- #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 lcm_util.dsi_read_reg()
-
- #define LCM_DSI_CMD_MODE
- #define write_1byte(x) data_array[0] = (x<<16) | 0x00000500;\
- dsi_set_cmdq(&data_array, 1, 1);\
- MDELAY(3);
- #define write_2byte(x1,x2) data_array[0] = (x2<<24) |(x1<<16) |0x00001500;\
- dsi_set_cmdq(&data_array, 1, 1);\
- MDELAY(3);
- #define write_nbyte(n) data_array[0] = (n<<16) | 0x00003902;
- #define get_4byte(x1,x2,x3,x4) ((x4<<24) |(x3<<16) |(x2<<8) |(x1) )
- #if BUILD_UBOOT
- void mt65xx_disp_fill_rect(int left, int top,
- int right, int bottom,
- int color);
- #endif
- static void lcm_update(unsigned int x, unsigned int y,
- unsigned int width, unsigned int height);
- static void init_lcm_registers(void)
- {
- unsigned int data_array[16];
- write_1byte(0x20);
- write_2byte(0x35,0x00);//01
- write_nbyte(3);
- data_array[1]=get_4byte(0x44,0x00,0x10,00);
- dsi_set_cmdq(&data_array, 2, 1);
- MDELAY(10);
- write_2byte(0x36,0x00);
- write_2byte(0x3a,0x77);
-
- write_nbyte(4);
- data_array[1]=get_4byte(0xb1,0x06,0x43,0x0a);
- dsi_set_cmdq(&data_array, 2, 1);
- MDELAY(3);
- write_nbyte(3);
- data_array[1]=get_4byte(0xb2,0x00,0xc8,00);
- dsi_set_cmdq(&data_array, 2, 1);
- MDELAY(10);
- write_2byte(0xb3,0x00);
-
- write_2byte(0xb4,0x04);
-
- write_nbyte(6);
- data_array[1]=get_4byte(0xb5,0x42,0x10,0x10);
- data_array[2]=get_4byte(0x00,0x20,0x00,00);
- dsi_set_cmdq(&data_array, 3, 1);
- MDELAY(3);
-
- write_nbyte(7);
- data_array[1]=get_4byte(0xb6,0x0b,0x0f,0x3c);
- data_array[2]=get_4byte(0x13,0x13,0xe8,00);
- dsi_set_cmdq(&data_array, 3, 1);
- MDELAY(3);
- write_nbyte(6);
- data_array[1]=get_4byte(0xb7,0x46,0x06,0x0c);
- data_array[2]=get_4byte(0x00,0x00,0x00,00);
- dsi_set_cmdq(&data_array, 3, 1);
- MDELAY(3);
-
- write_nbyte(3);
- data_array[1]=get_4byte(0xc0,0x01,0x15,00);
- dsi_set_cmdq(&data_array, 2, 1);
- MDELAY(10);
- write_nbyte(6);
- data_array[1]=get_4byte(0xc3,0x07,0x03,0x04);
- data_array[2]=get_4byte(0x04,0x04,0x00,00);
- dsi_set_cmdq(&data_array, 3, 1);
- MDELAY(3);
- write_nbyte(7);
- data_array[1]=get_4byte(0xc4,0x12,0x24,0x13);
- data_array[2]=get_4byte(0x13,0x02,0x49,00);
- dsi_set_cmdq(&data_array, 3, 1);
- MDELAY(3);
- write_2byte(0xc5,0x67);
- write_nbyte(3);
- data_array[1]=get_4byte(0xc6,0x41,0x63,00);
- dsi_set_cmdq(&data_array, 2, 1);
- MDELAY(10);
- write_nbyte(10);
- data_array[1]=get_4byte(0xd0,0x00,0x07,0x60);
- data_array[2]=get_4byte(0x25,0x07,0x02,0x50);
- data_array[3]=get_4byte(0x26,0x05,0x00,0x00);
- dsi_set_cmdq(&data_array, 4, 1);
- MDELAY(10);
- write_nbyte(10);
- data_array[1]=get_4byte(0xd1,0x00,0x07,0x60);
- data_array[2]=get_4byte(0x25,0x07,0x02,0x50);
- data_array[3]=get_4byte(0x26,0x05,0x00,0x00);
- dsi_set_cmdq(&data_array, 4, 1);
- MDELAY(10);
- write_nbyte(10);
- data_array[1]=get_4byte(0xd2,0x00,0x07,0x60);
- data_array[2]=get_4byte(0x25,0x07,0x02,0x50);
- data_array[3]=get_4byte(0x26,0x05,0x00,0x00);
- dsi_set_cmdq(&data_array, 4, 1);
- MDELAY(10);
- write_nbyte(10);
- data_array[1]=get_4byte(0xd3,0x00,0x07,0x60);
- data_array[2]=get_4byte(0x25,0x07,0x02,0x50);
- data_array[3]=get_4byte(0x26,0x05,0x00,0x00);
- dsi_set_cmdq(&data_array, 4, 1);
- MDELAY(10);
- write_nbyte(10);
- data_array[1]=get_4byte(0xd4,0x00,0x07,0x60);
- data_array[2]=get_4byte(0x25,0x07,0x02,0x50);
- data_array[3]=get_4byte(0x26,0x05,0x00,0x00);
- dsi_set_cmdq(&data_array, 4, 1);
- MDELAY(10);
- write_nbyte(10);
- data_array[1]=get_4byte(0xd5,0x00,0x07,0x60);
- data_array[2]=get_4byte(0x25,0x07,0x02,0x50);
- data_array[3]=get_4byte(0x26,0x05,0x00,0x00);
- dsi_set_cmdq(&data_array, 4, 1);
- MDELAY(10);
- data_array[0] = 0x00110500; // Sleep Out
- dsi_set_cmdq(&data_array, 1, 1);
-
- MDELAY(200);
- data_array[0] = 0x00290500; // Display On
- dsi_set_cmdq(&data_array, 1, 1);
- MDELAY(20);
- }
- // ---------------------------------------------------------------------------
- // 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;
- #if defined(LCM_DSI_CMD_MODE)
- params->dsi.mode = CMD_MODE;
- #else
- params->dsi.mode = SYNC_EVENT_VDO_MODE;
- #endif
- //params->ctrl = LCM_CTRL_NONE;
- params->width = FRAME_WIDTH;
- params->height = FRAME_HEIGHT;
-
- // enable tearing-free
- params->dbi.te_mode = LCM_DBI_TE_MODE_VSYNC_ONLY; //add
- //params->dbi.te_mode = LCM_DBI_TE_MODE_DISABLED;
- params->dbi.te_edge_polarity = LCM_POLARITY_RISING;
-
- // 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;
- // Highly depends on LCD driver capability.
- params->dsi.packet_size=256;
-
- params->dsi.PS=LCM_PACKED_PS_24BIT_RGB888;
- // params->dsi.word_count=480*3;
-
- params->dsi.vertical_sync_active=2;
- params->dsi.vertical_backporch=2;
- params->dsi.vertical_frontporch=2;
- params->dsi.vertical_active_line=800;
- params->dsi.horizontal_sync_active=10;
- params->dsi.horizontal_backporch=20;
- params->dsi.horizontal_frontporch=40;
- params->dsi.horizontal_active_pixel=480;
- params->dsi.intermediat_buffer_num=2;
- params->dsi.pll_div1=29;
- params->dsi.pll_div2=1;
- }
- static void lcm_init(void) {
- // SET_RESET_PIN(1);
- // MDELAY(5);
- SET_RESET_PIN(0);
- MDELAY(10);
- SET_RESET_PIN(1);
- MDELAY(100);
- init_lcm_registers();
- }
- #ifdef BUILD_UBOOT
- void mt65xx_disp_update(unsigned int x, unsigned int y, unsigned int width, unsigned int height);
- #else
- unsigned int DISP_UpdateScreen(unsigned int x, unsigned int y, unsigned int width, unsigned int height);
- #endif
- static void lcm_suspend(void)
- {
- unsigned int data_array[16];
- data_array[0]=0x00280500; // Display Off
- dsi_set_cmdq(&data_array, 1, 1);
- MDELAY(10);
- data_array[0] = 0x00100500; // Sleep In
- dsi_set_cmdq(&data_array, 1, 1);
- MDELAY(100);
- }
- static void lcm_resume(void)
- {
- unsigned int data_array[16];
- data_array[0] = 0x00110500; // Sleep Out
- dsi_set_cmdq(&data_array, 1, 1);
- MDELAY(50);
- data_array[0] = 0x00290500; // Display On
- dsi_set_cmdq(&data_array, 1, 1);
- //MDELAY(150);
- MDELAY(3);
- }
- 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);
- data_array[3]= 0x00053902;
- data_array[4]= (y1_MSB<<24)|(y0_LSB<<16)|(y0_MSB<<8)|0x2b;
- data_array[5]= (y1_LSB);
- data_array[6]= 0x002c3909;
- dsi_set_cmdq(&data_array, 7, 0);
- }
- #define LINGLONG_LG_MODULE_ADC_MAX 2600
- #define LINGLONG_LG_MODULE_ADC_MIN 2200
- extern int IMM_GetOneChannelValue(int dwChannel, int deCount);
- LCM_DRIVER lg4572_lcm_drv =
- {
- .name = "lg4572",
- .set_util_funcs = lcm_set_util_funcs,
- .get_params = lcm_get_params,
- .init = lcm_init,
- .suspend = lcm_suspend,
- .resume = lcm_resume,
- #if defined(LCM_DSI_CMD_MODE)
- .update = lcm_update,
- #endif
- };
不错,大家一起来表扬
哥们,能共享下LG4572规格书不?不胜感激额!
有LG4573的初始化代码吗?
void LCD_Init(void)
{
unsigned char i;
SPI_CS=0;
SPI_RES=1;
Delay(50);
SPI_RES=0;
Delay(800);
SPI_RES=1;
Delay(800);
SPI_WriteComm(0xC0 );
SPI_WriteData(0x01);
SPI_WriteData(0x18);
SPI_WriteComm(0x20);
SPI_WriteComm(0x29);
SPI_WriteComm(0x3A);
SPI_WriteData(0x77);
SPI_WriteComm(0xB1);
SPI_WriteData(0x06 );
SPI_WriteData(0x1E);
SPI_WriteData(0x0C);
SPI_WriteComm(0xB2 );
SPI_WriteData(0x00);
SPI_WriteData(0xC8);
SPI_WriteComm (0xB3 );
SPI_WriteData(0x00);
SPI_WriteComm(0xB4 );
SPI_WriteData(0x04);
SPI_WriteComm(0xB5 );
SPI_WriteData(0x20);
SPI_WriteData(0x30);
SPI_WriteData(0x30);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteComm(0xB6 );
SPI_WriteData(0x0b);
SPI_WriteData(0x0f);
SPI_WriteData(0x3C);
SPI_WriteData(0x13);
SPI_WriteData(0x13);
SPI_WriteData(0xe8);
SPI_WriteComm(0xB7 );
SPI_WriteData(0x46);
SPI_WriteData(0x06);
SPI_WriteData(0x0C);
SPI_WriteData(0x00);
SPI_WriteData(0x00);
SPI_WriteComm(0xC3 );
SPI_WriteData(0x07);
SPI_WriteData(0x03);
SPI_WriteData(0x04);
SPI_WriteData(0x04);
SPI_WriteData(0x04);
SPI_WriteComm(0xC4 );
SPI_WriteData(0x12);
SPI_WriteData(0x23);
SPI_WriteData(0x12);
SPI_WriteData(0x12);
SPI_WriteData(0x01);
SPI_WriteData(0x6D);
SPI_WriteComm(0xC5);
SPI_WriteData(0x70);
SPI_WriteComm(0xC6 );
SPI_WriteData(0x44);
SPI_WriteData(0x63);
SPI_WriteData(0x03);
SPI_WriteComm(0xD0 );
SPI_WriteData(0x21);
SPI_WriteData(0x43);
SPI_WriteData (0x44);
SPI_WriteData(0x25);
SPI_WriteData(0x05);
SPI_WriteData(0x01);
SPI_WriteData(0x61);
SPI_WriteData(0x16);
SPI_WriteData(0x02);
SPI_WriteComm(0xD1 );
SPI_WriteData(0x21);
SPI_WriteData(0x43);
SPI_WriteData (0x44);
SPI_WriteData(0x25);
SPI_WriteData(0x05);
SPI_WriteData(0x01);
SPI_WriteData(0x61);
SPI_WriteData(0x16);
SPI_WriteData(0x02);
SPI_WriteComm(0xD2 );
SPI_WriteData(0x21);
SPI_WriteData(0x43);
SPI_WriteData (0x44);
SPI_WriteData(0x25);
SPI_WriteData(0x05);
SPI_WriteData(0x01);
SPI_WriteData(0x61);
SPI_WriteData(0x16);
SPI_WriteData(0x02);
SPI_WriteComm(0xD3 );
SPI_WriteData(0x21);
SPI_WriteData(0x43);
SPI_WriteData (0x44);
SPI_WriteData(0x25);
SPI_WriteData(0x05);
SPI_WriteData(0x01);
SPI_WriteData(0x61);
SPI_WriteData(0x16);
SPI_WriteData(0x02);
SPI_WriteComm(0xD4 );
SPI_WriteData(0x21);
SPI_WriteData(0x43);
SPI_WriteData (0x44);
SPI_WriteData(0x25);
SPI_WriteData(0x05);
SPI_WriteData(0x01);
SPI_WriteData(0x61);
SPI_WriteData(0x16);
SPI_WriteData(0x02);
SPI_WriteComm(0xD5 );
SPI_WriteData(0x21);
SPI_WriteData(0x43);
SPI_WriteData (0x44);
SPI_WriteData(0x25);
SPI_WriteData(0x05);
SPI_WriteData(0x01);
SPI_WriteData(0x61);
SPI_WriteData(0x16);
SPI_WriteData(0x02);
SPI_WriteComm(0x11 );
Delay(200);
SPI_WriteComm(0x29 );
}
LG4573的,,你可以试试
能否加一下你的微信
