Somethings to consider:
16bit Register access, Backlight pin support and a different classname.
RM68120, along with the NT35516, are two popular panel drivers (for large displays) which use 16bits for registers, eg; MADCTRL = 0x3600 then 0x3601, thus require 16bit methods, which is unsupported. If this is added, then I can produce support for this.
All but one of my displays have a backlight PWM pin. How about adding a BL pin option next to Chip Select and co?
"ILI948x_t41_p lcd = ILI948x_t41_p(R61529, ...) ". IMO, I don't believe naming the class "ILI948x" whilst driving something entirely different is going to work; It doesn't look great. How about something ambiguous. eg; PARDRV8_t41 lcd = PARDRV8_t41(R61529, ...) ", 8 for 8bit registers, as things currently are, or 16 for 16bit regs'.
ILI9806G, 480x854
Be mindful that MADCTL is 0xB9, despite what the datasheet will tell you - not 0x36.
Code:
PROGMEM static const setting_table_t power_on_setting_table[] = {
{ILI9806_EXTCCSET,3, {0xFF, 0x98, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0},
{ILI9806_GIP1, 21, {0x03, 0x0F, 0x63, 0x69, 0x01, 0x01, 0x1B, 0x11, 0x70, 0x73, 0xFF, 0xFF, 0x08, 0x09, 0x05, 0x00, 0xEE, 0xE2, 0x01, 0x00, 0xC1}, 0}, // magic stuff happens here
{ILI9806_GIP2, 8, {0x01, 0x23, 0x45, 0x67, 0x01, 0x23, 0x45, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0},
{ILI9806_GIP3, 9, {0x00, 0x22, 0x27, 0x6A, 0xBC, 0xD8, 0x92, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0},
{ILI9806_VCCTRL1, 1, {0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // VCOM Control 1
{ILI9806_VOLTMSET,3, {0x7F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0},
{ILI9806_PCTRL1, 3, {0xE3, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Power Control 1
{ILI9806_LVGLVSET,1, {0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // LVGL Voltage Setting
{ILI9806_ENGSET, 6, {0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Engineering Setting
{ILI9806_DVDDVSET,1, {0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // DVDD Voltage Setting
{ILI9806_DINVCTRL,3, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Display Inversion Control
{ILI9806_PRSSET, 1, {ILI9806_R480x854, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Panel Resolution Selection Set 480x854 resolution
{ILI9806_FRCTRL1, 3, {0x00, 0x10, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Frame Rate Control 1
{ILI9806_PTCTRL1, 3, {0x29, 0x8A, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Panel Timing Control 1
{ILI9806_PTCTRL2, 4, {0x40, 0xD2, 0x50, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Panel Timing Control 2
{ILI9806_PCTRL2, 4, {0x17, 0X85, 0x85, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Power Control 2
{ILI9806_PGCTRL, 16, {0x00, 0x0C, 0x15, 0x0D, 0x0F, 0x0C, 0x07, 0x05, 0x07, 0x0B, 0x10, 0x10, 0x0D, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Positive Gamma Control
{ILI9806_NGCTRL, 16, {0x00, 0x0D, 0x15, 0x0E, 0x10, 0x0D, 0x08, 0x06, 0x07, 0x0C, 0x11, 0x11, 0x0E, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Negative Gamma Correction
{ILI9806_TREFLON, 1, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Tearing Effect Line ON
{ILI9806_MADCTL, 1, {ILI9806_IXFORMAT, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 30},
{ILI9806_VSCROLLS,1, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0},
{ILI9806_CASET, 1, {0x00, 0x00, 0x03, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0},
{ILI9806_PASET, 1, {0x00, 0x00, 0x01, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0},
{ILI9806_IPIXFOR, 1, {0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 30},
{ILI9806_SLPOUT, 0, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 120}, // Exit Sleep
{ILI9806_DISLYON, 0, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 50} // Display On
};
#define ILI9806_R480x864 0x80
#define ILI9806_R480x854 0x81
#define ILI9806_R480x640 0x82
#define ILI9806_R480x720 0x84
#define ILI9806_NOP 0x00 // No Op, also reset write state (acording to PDF)
#define ILI9806_SOFTRST 0x01 // Software reset
#define ILI9806_SLPOUT 0x11 // Sleep out (Exit sleep)
#define ILI9806_DISLYON 0x29 // Display ON
#define ILI9806_CASET 0x2A // Column Address Set
#define ILI9806_PASET 0x2B // Page Address Set
#define ILI9806_RAMWR 0x2C // Memory Write
#define ILI9806_RAMRD 0x2E // Memory Read
#define ILI9806_TREFLON 0x35 // Tearing Effect Line ON
#define ILI9806_VSCROLLS 0x37 // Vertical Scrolling Start Address
#define ILI9806_IPIXFOR 0x3A // Interface Pixel Format
#define ILI9806_FRCTRL1 0xB1 // Frame Rate Control 1
#define ILI9806_FRCTRL2 0xB2 // Frame Rate Control 2
#define ILI9806_DINVCTRL 0xB4 // Display Inversion Control
#define ILI9806_MADCTL 0xB9 // PANELCTRL. doesn't respond to 0x36 dispite pdf indicating so
#define ILI9806_GIP1 0xBC // GIP 1
#define ILI9806_GIP2 0xBD // GIP 2
#define ILI9806_GIP3 0xBE // GIP 3
#define ILI9806_PCTRL1 0xC0 // Power Control 1
#define ILI9806_PCTRL2 0xC1 // Power Control 2
#define ILI9806_VCCTRL1 0xC7 // VCOM Control 1
#define ILI9806_BLCTRL1 0xC8 // Backlight Control 2
#define ILI9806_ENGSET 0xDF // Engineering Setting
#define ILI9806_PGCTRL 0xE0 // Positive Gamma Control
#define ILI9806_NGCTRL 0xE1 // Negative Gamma Control
#define ILI9806_VOLTMSET 0xED // VGMP / VGMN / VGSP / VGSN Voltage Measurement Set
#define ILI9806_PTCTRL1 0xF1 // Panel Timing Control 1
#define ILI9806_PTCTRL2 0xF2 // Panel Timing Control 2
#define ILI9806_DVDDVSET 0xF3 // DVDD Voltage Setting
#define ILI9806_PRSSET 0xF7 // Panel Resolution Selection Set
#define ILI9806_LVGLVSET 0xFC // LVGL Voltage Setting
#define ILI9806_EXTCCSET 0xFF
#define MADCTL_RGB 0x00 // Red-Green-Blue pixel order
#define MADCTL_GS 0x01
#define MADCTL_SS 0x02
#define MADCTL_MH 0x04 // LCD refresh right to left
#define MADCTL_BGR 0x08 // Blue-Green-Red pixel order
#define MADCTL_ML 0x10 // LCD refresh Bottom to top
#define MADCTL_MV 0x20 // Row/Column exchange
#define MADCTL_MX 0x40 // Right to left
#define MADCTL_MY 0x80 // Bottom to top
S6D04D1, 432x240
Code:
PROGMEM static const setting_table_t power_on_setting_table[] = {
{S6D04D1_PWRCTL, 7, {0x80, 0x00, 0x00, 0x0B, 0x33, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0},
{S6D04D1_VCMCTL, 5, {0x6E, 0x6E, 0x7F, 0x7F, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0},
{S6D04D1_SRCCTL, 5, {0x12, 0x00, 0x03, 0xF0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0},
{S6D04D1_SLPOUT, 0, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 120},
{S6D04D1_MADCTL, 1, {0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0},
{S6D04D1_COLMOD, 1, {0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 30},
{S6D04D1_DISCTL, 11, {0x14, 0x14, 0x03, 0x03, 0x04, 0x03, 0x04, 0x10, 0x04, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00}, 0},
{S6D04D1_GATECTL, 2, {0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0},
{S6D04D1_WRDISBV, 1, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, //BRIGHTNESS
{S6D04D1_WRCABCMB, 1, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0},
{S6D04D1_MIECTL1, 3, {0x80, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0},
{S6D04D1_BCMODE, 1, {0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0},
{S6D04D1_MIECTL2, 3, {0x20, 0x01, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0},
{S6D04D1_MIDCTL3, 2, {0x7C, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0},
{S6D04D1_DISPON, 0, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 50},
};
#define S6D04D1_PWRCTL 0xF3
#define S6D04D1_VCMCTL 0xF4
#define S6D04D1_SRCCTL 0xF5
#define S6D04D1_SLPOUT 0x11
#define S6D04D1_MADCTL 0x36
#define S6D04D1_COLMOD 0x3A
#define S6D04D1_DISCTL 0xF2
#define S6D04D1_IFCTL 0xF6
#define S6D04D1_GATECTL 0xFD
#define S6D04D1_CASET 0x2A
#define S6D04D1_PASET 0x2B
#define S6D04D1_RAMWR 0x2C
#define S6D04D1_RAMRD 0x2E
#define S6D04D1_DISPON 0x29
#define S6D04D1_DISPOFF 0x28
#define S6D04D1_SLPIN 0x10
#define S6D04D1_RPGAMCTL 0xF7
#define S6D04D1_WRDISBV 0x51
#define S6D04D1_WRCABCMB 0x5E
#define S6D04D1_MIECTL1 0xCA
#define S6D04D1_BCMODE 0xCB
#define S6D04D1_MIECTL2 0xCC
#define S6D04D1_MIDCTL3 0xCD
#define S6D04D1_RNGAMCTL 0xF8
#define S6D04D1_GPGAMCTL 0xF9
#define S6D04D1_GNGAMCTL 0xFA
#define S6D04D1_BPGAMCTL 0xFB
#define S6D04D1_BNGAMCTL 0xFC
#define S6D04D1_DCON 0xD9
#define S6D04D1_WRPWD 0xF0
#define S6D04D1_EDSTEST 0xFF
#define S6D04D1_TEON 0x35
#define S6D04D1_MDDICTL1 0xE0
#define S6D04D1_WRCTRLD 0x53
#define S6D04D1_WRCABC 0x55
Currently working on this:
LG4572B, 480x800, may also work on the LG4573.
Code:
PROGMEM static const setting_table_t power_on_setting_table[] = {
{0xC0, 2, {0x01, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Internal Oscillator Setting
{0x20, 0, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Display Inversion Off
{0x36, 1, {0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Memory Access Control
{0x3a, 1, {0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Interface Pixel Format
{0x35, 1, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Tearing Effect Line On
{0xb1, 3, {0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // RGB Interface Setting
{0xb2, 2, {0x00, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Panel Characteristics Setting
{0xb3, 1, {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Panel Drive Setting
{0xb4, 1, {0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Display Mode Control
{0xb5, 5, {0x10, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Display Control 1
{0xb6, 6, {0x0b, 0x0f, 0x3c, 0x13, 0x13, 0xe8, 0x00, 0x00, 0x00, 0x00}, 0}, // Display Control 2
{0xb7, 5, {0x46, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Display Control 3
{0xc0, 2, {0x01, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 0}, // Internal Oscillator Setting
{0xc3, 5, {0x07, 0x03, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00}, 40}, // Power Control 3
{0xc4, 6, {0x12, 0x24, 0x12, 0x12, 0x02, 0x6b, 0x00, 0x00, 0x00, 0x00}, 20}, // Power Control 4
{0xc5, 1, {0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 10}, // Power Control 5
{0xc6, 2, {0x41, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 10}, // Power Control 6
{0xd0, 9, {0x01, 0x26, 0x71, 0x16, 0x04, 0x03, 0x51, 0x15, 0x04, 0x00}, 0}, // Set Positive Gamma Curve for Red
{0xd1, 9, {0x01, 0x26, 0x71, 0x16, 0x04, 0x03, 0x51, 0x15, 0x04, 0x00}, 0}, // Set Negative Gamma Curve for Red
{0xd2, 9, {0x01, 0x26, 0x71, 0x16, 0x04, 0x03, 0x51, 0x15, 0x04, 0x00}, 0}, // Set Positive Gamma Curve for Green
{0xd3, 9, {0x01, 0x26, 0x71, 0x16, 0x04, 0x03, 0x51, 0x15, 0x04, 0x00}, 0}, // Set Negative Gamma Curve for Green
{0xd4, 9, {0x01, 0x26, 0x71, 0x16, 0x04, 0x03, 0x51, 0x15, 0x04, 0x00}, 0}, // Set Positive Gamma Curve for Blue
{0xd5, 9, {0x01, 0x26, 0x71, 0x16, 0x04, 0x03, 0x51, 0x15, 0x04, 0x00}, 0}, // Set Negative Gamma Curve for Blue
{0x11, 0, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 100},
{0x29, 0, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 10}
};