Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 61 additions & 22 deletions components/display/screen/controller_driver/nt35510/nt35510.c
Original file line number Diff line number Diff line change
Expand Up @@ -252,22 +252,33 @@ esp_err_t lcd_nt35510_draw_bitmap(uint16_t x, uint16_t y, uint16_t w, uint16_t h
}

static void lcd_nt35510_init_reg(void)
{
LCD_WRITE_CMD(0x0100); // Software Reset
{
// Software Reset
LCD_WRITE_CMD(0x0100);
vTaskDelay(10 / portTICK_RATE_MS);

// Partial mode on
LCD_WRITE_CMD(0x1200);

// Enable manufacturer command set, select page 1
LCD_WRITE_REG(0xf000, 0x0055);
LCD_WRITE_REG(0xf001, 0x00aa);
LCD_WRITE_REG(0xf002, 0x0052);
LCD_WRITE_REG(0xf003, 0x0008);
LCD_WRITE_REG(0xf004, 0x0001);

// VGML and VGSP voltages (regulator output voltage VGMP/VGSP for positive gamma divider)
LCD_WRITE_REG(0xbc01, 0x0086);
LCD_WRITE_REG(0xbc02, 0x006a);

// VGML and VGSP voltages (regulator output voltage VGMP/VGSP for negative gamma divider)
LCD_WRITE_REG(0xbd01, 0x0086);
LCD_WRITE_REG(0xbd02, 0x006a);

// VCOM Offset Voltage
LCD_WRITE_REG(0xbe01, 0x0067);

// Gamma 2.2 Correction for Red (Positive)
LCD_WRITE_REG(0xd100, 0x0000);
LCD_WRITE_REG(0xd101, 0x005d);
LCD_WRITE_REG(0xd102, 0x0000);
Expand Down Expand Up @@ -321,6 +332,7 @@ static void lcd_nt35510_init_reg(void)
LCD_WRITE_REG(0xd132, 0x0003);
LCD_WRITE_REG(0xd133, 0x00cc);

// Gamma 2.2 Correction for Green (Positive)
LCD_WRITE_REG(0xd200, 0x0000);
LCD_WRITE_REG(0xd201, 0x005d);
LCD_WRITE_REG(0xd202, 0x0000);
Expand Down Expand Up @@ -374,6 +386,7 @@ static void lcd_nt35510_init_reg(void)
LCD_WRITE_REG(0xd232, 0x0003);
LCD_WRITE_REG(0xd233, 0x00cc);

// Gamma 2.2 Correction for Blue (Positive)
LCD_WRITE_REG(0xd300, 0x0000);
LCD_WRITE_REG(0xd301, 0x005d);
LCD_WRITE_REG(0xd302, 0x0000);
Expand Down Expand Up @@ -427,6 +440,7 @@ static void lcd_nt35510_init_reg(void)
LCD_WRITE_REG(0xd332, 0x0003);
LCD_WRITE_REG(0xd333, 0x00cc);

// Gamma 2.2 Correction for Red (Negative)
LCD_WRITE_REG(0xd400, 0x0000);
LCD_WRITE_REG(0xd401, 0x005d);
LCD_WRITE_REG(0xd402, 0x0000);
Expand Down Expand Up @@ -480,6 +494,7 @@ static void lcd_nt35510_init_reg(void)
LCD_WRITE_REG(0xd432, 0x0003);
LCD_WRITE_REG(0xd433, 0x00cc);

// Gamma 2.2 Correction for Green (Negative)
LCD_WRITE_REG(0xd500, 0x0000);
LCD_WRITE_REG(0xd501, 0x005d);
LCD_WRITE_REG(0xd502, 0x0000);
Expand Down Expand Up @@ -533,6 +548,7 @@ static void lcd_nt35510_init_reg(void)
LCD_WRITE_REG(0xd532, 0x0003);
LCD_WRITE_REG(0xd533, 0x00cc);

// Gamma 2.2 Correction for Blue (Negative)
LCD_WRITE_REG(0xd600, 0x0000);
LCD_WRITE_REG(0xd601, 0x005d);
LCD_WRITE_REG(0xd602, 0x0000);
Expand Down Expand Up @@ -586,54 +602,77 @@ static void lcd_nt35510_init_reg(void)
LCD_WRITE_REG(0xd632, 0x0003);
LCD_WRITE_REG(0xd633, 0x00cc);

// BT5 Power Control for VGLX
LCD_WRITE_REG(0xba00, 0x0024);
LCD_WRITE_REG(0xba01, 0x0024);
LCD_WRITE_REG(0xba02, 0x0024);

// BT4 Power Control for VGH
LCD_WRITE_REG(0xb900, 0x0024);
LCD_WRITE_REG(0xb901, 0x0024);
LCD_WRITE_REG(0xb902, 0x0024);

// Enable manufacturer command set, select page 0
LCD_WRITE_REG(0xf000, 0x0055);
LCD_WRITE_REG(0xf001, 0x00aa);
LCD_WRITE_REG(0xf002, 0x0052);
LCD_WRITE_REG(0xf003, 0x0008);
LCD_WRITE_REG(0xf004, 0x0000);

// Display Option Control
LCD_WRITE_REG(0xb100, 0x00cc);
LCD_WRITE_REG(0xB500, 0x0050);

LCD_WRITE_REG(0xbc00, 0x0005);
LCD_WRITE_REG(0xbc01, 0x0005);
LCD_WRITE_REG(0xbc02, 0x0005);

LCD_WRITE_REG(0xb800, 0x0001);
LCD_WRITE_REG(0xb801, 0x0003);
LCD_WRITE_REG(0xb802, 0x0003);
LCD_WRITE_REG(0xb803, 0x0003);

LCD_WRITE_REG(0xbd02, 0x0007);
LCD_WRITE_REG(0xbd03, 0x0031);
LCD_WRITE_REG(0xbe02, 0x0007);
LCD_WRITE_REG(0xbe03, 0x0031);
LCD_WRITE_REG(0xbf02, 0x0007);
LCD_WRITE_REG(0xbf03, 0x0031);

// Display Resolution Control
LCD_WRITE_REG(0xB500, 0x0050); // 480RGB X 800

// Inversion Driving Control
// 000: Column inversion
// 001: 1-dot inversion
// 010: 2-dot inversion
// 011: 3-dot inversion
// 100: 4-dot inversion
// 101: Zigzag inversion
LCD_WRITE_REG(0xbc00, 0x0005); // Normal mode
LCD_WRITE_REG(0xbc01, 0x0005); // Idle mode
LCD_WRITE_REG(0xbc02, 0x0005); // Partial mode

// EQ Control Function for Source Driver
LCD_WRITE_REG(0xb800, 0x0001); // EQ mode 1
LCD_WRITE_REG(0xb801, 0x0003); // Normal mode, 0.5us per step = 1.5 us
LCD_WRITE_REG(0xb802, 0x0003); // Idle mode, 0.5us per step = 1.5 us
LCD_WRITE_REG(0xb803, 0x0003); // Partial mode, 0.5us per step = 1.5 us

// Display Timing Control
LCD_WRITE_REG(0xbd02, 0x0007); // Normal mode
LCD_WRITE_REG(0xbd03, 0x0031); // Normal mode
LCD_WRITE_REG(0xbe02, 0x0007); // Idle mode
LCD_WRITE_REG(0xbe03, 0x0031); // Idle mode
LCD_WRITE_REG(0xbf02, 0x0007); // Parial mode
LCD_WRITE_REG(0xbf03, 0x0031); // Parial mode

// Undocumented registers
LCD_WRITE_REG(0xff00, 0x00aa);
LCD_WRITE_REG(0xff01, 0x0055);
LCD_WRITE_REG(0xff02, 0x0025);
LCD_WRITE_REG(0xff03, 0x0001);

// Undocumented registers
LCD_WRITE_REG(0xf304, 0x0011);
LCD_WRITE_REG(0xf306, 0x0010);
LCD_WRITE_REG(0xf308, 0x0000);

LCD_WRITE_REG(0x3500, 0x0000);
LCD_WRITE_REG(0x3A00, 0x0005);
//Display On
// Tearing effect line on
LCD_WRITE_REG(0x3500, 0x0000); // Only v-blanking information

// Interface Pixel Format
LCD_WRITE_REG(0x3A00, 0x0005); // I80 16-bit per pixel

// Display On
LCD_WRITE_CMD(0x2900);

// Out sleep
LCD_WRITE_CMD(0x1100);

// Write continue
LCD_WRITE_CMD(0x2C00);
}