Files
TAIXIN/sdk/lib/bus/spi/lcd/st7701s_mipi.c

658 lines
8.9 KiB
C

#include "lib/lcd/lcd.h"
#if LCD_ST7701S_MIPI_EN
#define CMD(x) {LCD_CMD,x}
#define DAT(x) {LCD_DAT,x}
#define DLY(x) {DELAY_MS,x}
#define END {LCD_TAB_END,LCD_TAB_END}
#define BOE397_IPS 1
const uint8_t st7701s_register_init_tab[][2] = {
#if BOE397_IPS
CMD (0xFF),
DAT (0x77),
DAT (0x01),
DAT (0x00),
DAT (0x00),
DAT (0x13),
CMD (0xEF),
DAT (0x08),
CMD (0xFF),
DAT (0x77),
DAT (0x01),
DAT (0x00),
DAT (0x00),
DAT (0x10),
CMD (0xC0),
DAT (0x63),
DAT (0x00),
CMD (0xC1),
DAT (0x09),
DAT (0x02),
CMD (0xC2),
DAT (0x07),
DAT (0x02),
CMD (0xCC),
DAT (0x18),
CMD (0xB0),
DAT (0x00),
DAT (0x12),
DAT (0x19),
DAT (0x0D),
DAT (0x12),
DAT (0x0A),
DAT (0x07),
DAT (0x0B),
DAT (0x08),
DAT (0x23),
DAT (0x06),
DAT (0x14),
DAT (0x13),
DAT (0x25),
DAT (0x2B),
DAT (0x1F),
CMD (0xB1),
DAT (0x00),
DAT (0x0A),
DAT (0x13),
DAT (0x0D),
DAT (0x10),
DAT (0x03),
DAT (0x04),
DAT (0x07),
DAT (0x09),
DAT (0x1F),
DAT (0x04),
DAT (0x11),
DAT (0x0E),
DAT (0x23),
DAT (0x2A),
DAT (0x1F),
CMD (0xFF),
DAT (0x77),
DAT (0x01),
DAT (0x00),
DAT (0x00),
DAT (0x11),
CMD (0xB0),
DAT (0x4D),
CMD (0xB1),
DAT (0x55),
CMD (0xB2),
DAT (0x87),
CMD (0xB3),
DAT (0x80),
CMD (0xB5),
DAT (0x4F),
CMD (0xB7),
DAT (0x85),
CMD (0xB8),
DAT (0x23),
CMD (0xB9),
DAT (0x22),
DAT (0x13),
CMD (0xBB),
DAT (0x03),
CMD (0xBC),
DAT (0x10),
CMD (0xC0),
DAT (0x89),
CMD (0xC1),
DAT (0x78),
CMD (0xC2),
DAT (0x78),
CMD (0xEF),
DAT (0x08),
DAT (0x08),
DAT (0x08),
DAT (0x4C),
DAT (0x3F),
DAT (0x54),
CMD (0xD0),
DAT (0x88),
CMD (0xE0),
DAT (0x00),
DAT (0x00),
DAT (0x02),
CMD (0xE1),
DAT (0x04),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x05),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x10),
DAT (0x10),
CMD (0xE2),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
CMD (0xE3),
DAT (0x00),
DAT (0x00),
DAT (0x33),
DAT (0x00),
CMD (0xE4),
DAT (0x22),
DAT (0x00),
CMD (0xE5),
DAT (0x03),
DAT (0x34),
DAT (0xAF),
DAT (0xB3),
DAT (0x05),
DAT (0x34),
DAT (0xAF),
DAT (0xB3),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
CMD (0xE6),
DAT (0x00),
DAT (0x00),
DAT (0x33),
DAT (0x00),
CMD (0xE7),
DAT (0x22),
DAT (0x00),
CMD (0xE8),
DAT (0x04),
DAT (0x34),
DAT (0xAF),
DAT (0xB3),
DAT (0x06),
DAT (0x34),
DAT (0xAF),
DAT (0xB3),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
DAT (0x00),
CMD (0xEB),
DAT (0x02),
DAT (0x00),
DAT (0x40),
DAT (0x40),
DAT (0x00),
DAT (0x00),
DAT (0x00),
CMD (0xEC),
DAT (0x00),
DAT (0x00),
CMD (0xED),
DAT (0xFA),
DAT (0x45),
DAT (0x0B),
DAT (0xFF),
DAT (0xFF),
DAT (0xFF),
DAT (0xFF),
DAT (0xFF),
DAT (0xFF),
DAT (0xFF),
DAT (0xFF),
DAT (0xFF),
DAT (0xFF),
DAT (0xB0),
DAT (0x54),
DAT (0xAF),
CMD (0xEF),
DAT (0x08),
DAT (0x08),
DAT (0x08),
DAT (0x45),
DAT (0x3F),
DAT (0x54),
CMD (0xFF),
DAT (0x77),
DAT (0x01),
DAT (0x00),
DAT (0x00),
DAT (0x13),
CMD (0xE6),
DAT (0x16),
DAT (0x7c),
CMD (0xe8),
DAT (0x00),
DAT (0x0E),
CMD (0xFF),
DAT (0x77),
DAT (0x01),
DAT (0x00),
DAT (0x00),
DAT (0x00),
CMD (0x11),
DLY (120),
CMD (0xFF),
DAT (0x77),
DAT (0x01),
DAT (0x00),
DAT (0x00),
DAT (0x13),
CMD (0xe8),
DAT (0x00),
DAT (0x0C),
DLY (10),
CMD (0xe8),
DAT (0x00),
DAT (0x00),
CMD (0xFF),
DAT (0x77),
DAT (0x01),
DAT (0x00),
DAT (0x00),
DAT (0x00),
CMD (0x35),
DAT (0x00),
#if 0 //test pattern
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x12),
CMD(0xD1),
DAT(0x81),
CMD(0xD2),
DAT(0x06),
#endif
CMD(0x36), // //U&D Y-DIR
DAT(0x00), //rotate 0: 0x00 : rotate 180 :0x10
CMD(0x3A),
DAT(0x77),
CMD (0x21),
DLY(100),
CMD (0x29),
DLY(200),
#else
CMD(0x01),
DLY(120),
CMD(0x11),
DLY(120),
//CMD(0xD3),
//DAT(0x07),
//DAT(0x00),
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x11),
CMD(0xD1),
DAT(0x11),
CMD(0x55),
DAT(0xb0), // 80 90 b0
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x10),
CMD(0xC0),
DAT(0x63),
DAT(0x00),
CMD(0xC1),
DAT(0x02), //vbp
DAT(0x0A), //vfp
CMD(0xC2),
DAT(0x37),
DAT(0x08),
CMD(0xC3),
DAT(0x00),
DAT(0x00),
DAT(0x08),
CMD(0xC7),//x-dir
DAT(0x04), // rotate 0 : 0x00 rotate 180 :0x04
CMD(0xCC),
DAT(0x38),
CMD(0xB0),
DAT(0x00),
DAT(0x11),
DAT(0x19),
DAT(0x0C),
DAT(0x10),
DAT(0x06),
DAT(0x07),
DAT(0x0A),
DAT(0x09),
DAT(0x22),
DAT(0x04),
DAT(0x10),
DAT(0x0E),
DAT(0x28),
DAT(0x30),
DAT(0x1C),
CMD(0xB1),
DAT(0x00),
DAT(0x12),
DAT(0x19),
DAT(0x0D),
DAT(0x10),
DAT(0x04),
DAT(0x06),
DAT(0x07),
DAT(0x08),
DAT(0x23),
DAT(0x04),
DAT(0x12),
DAT(0x11),
DAT(0x28),
DAT(0x30),
DAT(0x1C),
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x11), // enable bk fun of command 2 BK1
CMD(0xB0),
DAT(0x4D),
CMD(0xB1),
DAT(0x60), //0x56 0x4a 0x5b
CMD(0xB2),
DAT(0x07),
CMD(0xB3),
DAT(0x80),
CMD(0xB5),
DAT(0x47),
CMD(0xB7),
DAT(0x8A),
CMD(0xB8),
DAT(0x21),
CMD(0xC1),
DAT(0x78),
CMD(0xC2),
DAT(0x78),
CMD(0xD0),
DAT(0x88),
DLY(100),
CMD(0xE0),
DAT(0x00),
DAT(0x00),
DAT(0x02),
CMD(0xE1),
DAT(0x01),
DAT(0xA0),
DAT(0x03),
DAT(0xA0),
DAT(0x02),
DAT(0xA0),
DAT(0x04),
DAT(0xA0),
DAT(0x00),
DAT(0x44),
DAT(0x44),
CMD(0xE2),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
DAT(0x00),
CMD(0xE3),
DAT(0x00),
DAT(0x00),
DAT(0x33),
DAT(0x33),
CMD(0xE4),
DAT(0x44),
DAT(0x44),
CMD(0xE5),
DAT(0x01),
DAT(0x26),
DAT(0xA0),
DAT(0xA0),
DAT(0x03),
DAT(0x28),
DAT(0xA0),
DAT(0xA0),
DAT(0x05),
DAT(0x2A),
DAT(0xA0),
DAT(0xA0),
DAT(0x07),
DAT(0x2C),
DAT(0xA0),
DAT(0xA0),
CMD(0xE6),
DAT(0x00),
DAT(0x00),
DAT(0x33),
DAT(0x33),
CMD(0xE7),
DAT(0x44),
DAT(0x44),
CMD(0xE8),
DAT(0x02),
DAT(0x26),
DAT(0xA0),
DAT(0xA0),
DAT(0x04),
DAT(0x28),
DAT(0xA0),
DAT(0xA0),
DAT(0x06),
DAT(0x2A),
DAT(0xA0),
DAT(0xA0),
DAT(0x08),
DAT(0x2C),
DAT(0xA0),
DAT(0xA0),
CMD(0xEB),
DAT(0x00),
DAT(0x01),
DAT(0xE4),
DAT(0xE4),
DAT(0x44),
DAT(0x00),
DAT(0x40),
CMD(0xED),
DAT(0xFF),
DAT(0xF7),
DAT(0x65),
DAT(0x4F),
DAT(0x0B),
DAT(0xA1),
DAT(0xCF),
DAT(0xFF),
DAT(0xFF),
DAT(0xFC),
DAT(0x1A),
DAT(0xB0),
DAT(0xF4),
DAT(0x56),
DAT(0x7F),
DAT(0xFF),
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x00),
CMD(0x36), // //U&D Y-DIR
DAT(0x10), //rotate 0: 0x00 : rotate 180 :0x10
CMD(0x3A),
DAT(0x77),
#if 0 //test pattern
CMD(0xFF),
DAT(0x77),
DAT(0x01),
DAT(0x00),
DAT(0x00),
DAT(0x12),
CMD(0xD1),
DAT(0x81),
CMD(0xD2),
DAT(0x06),
#endif
CMD(0x29),
// DLY(120),
// CMD(0x23),
// DLY(120),
#endif
END
};
lcddev_t lcdstruct = {
.name = "st7701s_mipi",
.lcd_bus_type = LCD_BUS_MIPI,
.bus_width = LCD_BUS_WIDTH_24,
.color_mode = LCD_MODE_888,
//.red_width = LCD_BUS_WIDTH_6,
//.green_width = LCD_BUS_WIDTH_6,
//.blue_width = LCD_BUS_WIDTH_6,
.osd_scan_mode = LCD_ROTATE_270,
.scan_mode =LCD_ROTATE_270,// LCD_ROTATE_90,//rotate 90
.te_mode = 0xff,//te mode, 0xff:disable
.colrarray = 0,//0:_RGB_ 1:_RBG_,2:_GBR_,3:_GRB_,4:_BRG_,5:_BGR_
//f(wr) = source_clk/div/2
//f(wr) >= screen_w * screen_h * clk_per_pixel * 60
.pclk = DEFAULT_SYS_CLK/(DEFAULT_SYS_CLK/24000000),
.even_order = 0,
.odd_order = 0,
.lcd_data_mode = (0<<31)|//data inversion mode
(2<<24)|//data compress mode
(1<<20)|//fifo mode
(0<<17)|//output cycle 2 shift direction
(0<<12)|//output cycle 2 shift bit
(0<<11)|//output cycle 1 shift direction
(0<<6)| //output cycle 1 shift bit
(0<<5)| //output cycle 0 shift direction
(8<<0), //output cycle 0 shift bit
.screen_w = 480,
.screen_h = 800,
.video_x = 0,
.video_y = 0,
.video_w = 480,//480,
.video_h = 800,//800,
.osd_x = 0,
.osd_y = 0,
.osd_w = 480, // 0 : value will set to video_w , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.osd_h = 800, // 0 : value will set to video_h , use for 4:3 LCD +16:9 sensor show UPDOWN BLACK
.init_table = st7701s_register_init_tab,
.frame_table = NULL,
.clk_per_pixel = 2,
.lane_num = 2,
.pclk_inv = 1,
.vlw = 2,
.vbp = 2,
.vfp = 10,
.hlw = 2,
.hbp = 8,
.hfp = 96,
.de_inv = 0,
.hs_inv = 0,
.vs_inv = 0,
.de_en = 1,
.vs_en = 1,
.hs_en = 1,
.brightness = 1,
.saturation = 7,
.contrast = 7,
.contra_index = 8,
.gamma_red = 3,
.gamma_green=3,
.gamma_blue=3,
};
#endif