drm/panel: ilitek-ili9881c: Add configuration for 5" Raspberry Pi 720x1280

Add configuration for the 5" Raspberry Pi 720x1280 DSI panel
based on ili9881. This uses 10px longer horizontal sync pulse
and 10px shorter HBP to avoid very short hsync pulse.

Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Link: https://lore.kernel.org/r/20250904205743.186177-2-marek.vasut+renesas@mailbox.org
This commit is contained in:
Marek Vasut 2025-09-04 22:56:57 +02:00 committed by Neil Armstrong
parent 86769c7df4
commit 97f0d2ed0c

View File

@ -1224,6 +1224,194 @@ static const struct ili9881c_instr am8001280g_init[] = {
ILI9881C_COMMAND_INSTR(MIPI_DCS_WRITE_POWER_SAVE, 0x00),
};
static const struct ili9881c_instr rpi_5inch_init[] = {
ILI9881C_SWITCH_PAGE_INSTR(3),
ILI9881C_COMMAND_INSTR(0x01, 0x00),
ILI9881C_COMMAND_INSTR(0x02, 0x00),
ILI9881C_COMMAND_INSTR(0x03, 0x73),
ILI9881C_COMMAND_INSTR(0x04, 0x73),
ILI9881C_COMMAND_INSTR(0x05, 0x00),
ILI9881C_COMMAND_INSTR(0x06, 0x06),
ILI9881C_COMMAND_INSTR(0x07, 0x02),
ILI9881C_COMMAND_INSTR(0x08, 0x00),
ILI9881C_COMMAND_INSTR(0x09, 0x01),
ILI9881C_COMMAND_INSTR(0x0a, 0x01),
ILI9881C_COMMAND_INSTR(0x0b, 0x01),
ILI9881C_COMMAND_INSTR(0x0c, 0x01),
ILI9881C_COMMAND_INSTR(0x0d, 0x01),
ILI9881C_COMMAND_INSTR(0x0e, 0x01),
ILI9881C_COMMAND_INSTR(0x0f, 0x01),
ILI9881C_COMMAND_INSTR(0x10, 0x01),
ILI9881C_COMMAND_INSTR(0x11, 0x00),
ILI9881C_COMMAND_INSTR(0x12, 0x00),
ILI9881C_COMMAND_INSTR(0x13, 0x01),
ILI9881C_COMMAND_INSTR(0x14, 0x00),
ILI9881C_COMMAND_INSTR(0x15, 0x00),
ILI9881C_COMMAND_INSTR(0x16, 0x00),
ILI9881C_COMMAND_INSTR(0x17, 0x00),
ILI9881C_COMMAND_INSTR(0x18, 0x00),
ILI9881C_COMMAND_INSTR(0x19, 0x00),
ILI9881C_COMMAND_INSTR(0x1a, 0x00),
ILI9881C_COMMAND_INSTR(0x1b, 0x00),
ILI9881C_COMMAND_INSTR(0x1c, 0x00),
ILI9881C_COMMAND_INSTR(0x1d, 0x00),
ILI9881C_COMMAND_INSTR(0x1e, 0xc0),
ILI9881C_COMMAND_INSTR(0x1f, 0x80),
ILI9881C_COMMAND_INSTR(0x20, 0x04),
ILI9881C_COMMAND_INSTR(0x21, 0x03),
ILI9881C_COMMAND_INSTR(0x22, 0x00),
ILI9881C_COMMAND_INSTR(0x23, 0x00),
ILI9881C_COMMAND_INSTR(0x24, 0x00),
ILI9881C_COMMAND_INSTR(0x25, 0x00),
ILI9881C_COMMAND_INSTR(0x26, 0x00),
ILI9881C_COMMAND_INSTR(0x27, 0x00),
ILI9881C_COMMAND_INSTR(0x28, 0x33),
ILI9881C_COMMAND_INSTR(0x29, 0x03),
ILI9881C_COMMAND_INSTR(0x2a, 0x00),
ILI9881C_COMMAND_INSTR(0x2b, 0x00),
ILI9881C_COMMAND_INSTR(0x2c, 0x00),
ILI9881C_COMMAND_INSTR(0x2d, 0x00),
ILI9881C_COMMAND_INSTR(0x2e, 0x00),
ILI9881C_COMMAND_INSTR(0x2f, 0x00),
ILI9881C_COMMAND_INSTR(0x30, 0x00),
ILI9881C_COMMAND_INSTR(0x31, 0x00),
ILI9881C_COMMAND_INSTR(0x32, 0x00),
ILI9881C_COMMAND_INSTR(0x33, 0x00),
ILI9881C_COMMAND_INSTR(0x34, 0x03),
ILI9881C_COMMAND_INSTR(0x35, 0x00),
ILI9881C_COMMAND_INSTR(0x36, 0x03),
ILI9881C_COMMAND_INSTR(0x37, 0x00),
ILI9881C_COMMAND_INSTR(0x38, 0x00),
ILI9881C_COMMAND_INSTR(0x39, 0x00),
ILI9881C_COMMAND_INSTR(0x3a, 0x00),
ILI9881C_COMMAND_INSTR(0x3b, 0x00),
ILI9881C_COMMAND_INSTR(0x3c, 0x00),
ILI9881C_COMMAND_INSTR(0x3d, 0x00),
ILI9881C_COMMAND_INSTR(0x3e, 0x00),
ILI9881C_COMMAND_INSTR(0x3f, 0x00),
ILI9881C_COMMAND_INSTR(0x40, 0x00),
ILI9881C_COMMAND_INSTR(0x41, 0x00),
ILI9881C_COMMAND_INSTR(0x42, 0x00),
ILI9881C_COMMAND_INSTR(0x43, 0x00),
ILI9881C_COMMAND_INSTR(0x44, 0x00),
ILI9881C_COMMAND_INSTR(0x50, 0x01),
ILI9881C_COMMAND_INSTR(0x51, 0x23),
ILI9881C_COMMAND_INSTR(0x52, 0x45),
ILI9881C_COMMAND_INSTR(0x53, 0x67),
ILI9881C_COMMAND_INSTR(0x54, 0x89),
ILI9881C_COMMAND_INSTR(0x55, 0xab),
ILI9881C_COMMAND_INSTR(0x56, 0x01),
ILI9881C_COMMAND_INSTR(0x57, 0x23),
ILI9881C_COMMAND_INSTR(0x58, 0x45),
ILI9881C_COMMAND_INSTR(0x59, 0x67),
ILI9881C_COMMAND_INSTR(0x5a, 0x89),
ILI9881C_COMMAND_INSTR(0x5b, 0xab),
ILI9881C_COMMAND_INSTR(0x5c, 0xcd),
ILI9881C_COMMAND_INSTR(0x5d, 0xef),
ILI9881C_COMMAND_INSTR(0x5e, 0x10),
ILI9881C_COMMAND_INSTR(0x5f, 0x09),
ILI9881C_COMMAND_INSTR(0x60, 0x08),
ILI9881C_COMMAND_INSTR(0x61, 0x0f),
ILI9881C_COMMAND_INSTR(0x62, 0x0e),
ILI9881C_COMMAND_INSTR(0x63, 0x0d),
ILI9881C_COMMAND_INSTR(0x64, 0x0c),
ILI9881C_COMMAND_INSTR(0x65, 0x02),
ILI9881C_COMMAND_INSTR(0x66, 0x02),
ILI9881C_COMMAND_INSTR(0x67, 0x02),
ILI9881C_COMMAND_INSTR(0x68, 0x02),
ILI9881C_COMMAND_INSTR(0x69, 0x02),
ILI9881C_COMMAND_INSTR(0x6a, 0x02),
ILI9881C_COMMAND_INSTR(0x6b, 0x02),
ILI9881C_COMMAND_INSTR(0x6c, 0x02),
ILI9881C_COMMAND_INSTR(0x6d, 0x02),
ILI9881C_COMMAND_INSTR(0x6e, 0x02),
ILI9881C_COMMAND_INSTR(0x6f, 0x02),
ILI9881C_COMMAND_INSTR(0x70, 0x02),
ILI9881C_COMMAND_INSTR(0x71, 0x06),
ILI9881C_COMMAND_INSTR(0x72, 0x07),
ILI9881C_COMMAND_INSTR(0x73, 0x02),
ILI9881C_COMMAND_INSTR(0x74, 0x02),
ILI9881C_COMMAND_INSTR(0x75, 0x06),
ILI9881C_COMMAND_INSTR(0x76, 0x07),
ILI9881C_COMMAND_INSTR(0x77, 0x0e),
ILI9881C_COMMAND_INSTR(0x78, 0x0f),
ILI9881C_COMMAND_INSTR(0x79, 0x0c),
ILI9881C_COMMAND_INSTR(0x7a, 0x0d),
ILI9881C_COMMAND_INSTR(0x7b, 0x02),
ILI9881C_COMMAND_INSTR(0x7c, 0x02),
ILI9881C_COMMAND_INSTR(0x7d, 0x02),
ILI9881C_COMMAND_INSTR(0x7e, 0x02),
ILI9881C_COMMAND_INSTR(0x7f, 0x02),
ILI9881C_COMMAND_INSTR(0x80, 0x02),
ILI9881C_COMMAND_INSTR(0x81, 0x02),
ILI9881C_COMMAND_INSTR(0x82, 0x02),
ILI9881C_COMMAND_INSTR(0x83, 0x02),
ILI9881C_COMMAND_INSTR(0x84, 0x02),
ILI9881C_COMMAND_INSTR(0x85, 0x02),
ILI9881C_COMMAND_INSTR(0x86, 0x02),
ILI9881C_COMMAND_INSTR(0x87, 0x09),
ILI9881C_COMMAND_INSTR(0x88, 0x08),
ILI9881C_COMMAND_INSTR(0x89, 0x02),
ILI9881C_COMMAND_INSTR(0x8a, 0x02),
ILI9881C_SWITCH_PAGE_INSTR(4),
ILI9881C_COMMAND_INSTR(0x6c, 0x15),
ILI9881C_COMMAND_INSTR(0x6e, 0x2a),
ILI9881C_COMMAND_INSTR(0x6f, 0x57),
ILI9881C_COMMAND_INSTR(0x3a, 0xa4),
ILI9881C_COMMAND_INSTR(0x8d, 0x1a),
ILI9881C_COMMAND_INSTR(0x87, 0xba),
ILI9881C_COMMAND_INSTR(0x26, 0x76),
ILI9881C_COMMAND_INSTR(0xb2, 0xd1),
ILI9881C_SWITCH_PAGE_INSTR(1),
ILI9881C_COMMAND_INSTR(0x22, 0x0a),
ILI9881C_COMMAND_INSTR(0x31, 0x00),
ILI9881C_COMMAND_INSTR(0x53, 0x35),
ILI9881C_COMMAND_INSTR(0x55, 0x50),
ILI9881C_COMMAND_INSTR(0x50, 0xaf),
ILI9881C_COMMAND_INSTR(0x51, 0xaf),
ILI9881C_COMMAND_INSTR(0x60, 0x14),
ILI9881C_COMMAND_INSTR(0xa0, 0x08),
ILI9881C_COMMAND_INSTR(0xa1, 0x1d),
ILI9881C_COMMAND_INSTR(0xa2, 0x2c),
ILI9881C_COMMAND_INSTR(0xa3, 0x14),
ILI9881C_COMMAND_INSTR(0xa4, 0x19),
ILI9881C_COMMAND_INSTR(0xa5, 0x2e),
ILI9881C_COMMAND_INSTR(0xa6, 0x22),
ILI9881C_COMMAND_INSTR(0xa7, 0x23),
ILI9881C_COMMAND_INSTR(0xa8, 0x97),
ILI9881C_COMMAND_INSTR(0xa9, 0x1e),
ILI9881C_COMMAND_INSTR(0xaa, 0x29),
ILI9881C_COMMAND_INSTR(0xab, 0x7b),
ILI9881C_COMMAND_INSTR(0xac, 0x18),
ILI9881C_COMMAND_INSTR(0xad, 0x17),
ILI9881C_COMMAND_INSTR(0xae, 0x4b),
ILI9881C_COMMAND_INSTR(0xaf, 0x1f),
ILI9881C_COMMAND_INSTR(0xb0, 0x27),
ILI9881C_COMMAND_INSTR(0xb1, 0x52),
ILI9881C_COMMAND_INSTR(0xb2, 0x63),
ILI9881C_COMMAND_INSTR(0xb3, 0x39),
ILI9881C_COMMAND_INSTR(0xc0, 0x08),
ILI9881C_COMMAND_INSTR(0xc1, 0x1d),
ILI9881C_COMMAND_INSTR(0xc2, 0x2c),
ILI9881C_COMMAND_INSTR(0xc3, 0x14),
ILI9881C_COMMAND_INSTR(0xc4, 0x19),
ILI9881C_COMMAND_INSTR(0xc5, 0x2e),
ILI9881C_COMMAND_INSTR(0xc6, 0x22),
ILI9881C_COMMAND_INSTR(0xc7, 0x23),
ILI9881C_COMMAND_INSTR(0xc8, 0x97),
ILI9881C_COMMAND_INSTR(0xc9, 0x1e),
ILI9881C_COMMAND_INSTR(0xca, 0x29),
ILI9881C_COMMAND_INSTR(0xcb, 0x7b),
ILI9881C_COMMAND_INSTR(0xcc, 0x18),
ILI9881C_COMMAND_INSTR(0xcd, 0x17),
ILI9881C_COMMAND_INSTR(0xce, 0x4b),
ILI9881C_COMMAND_INSTR(0xcf, 0x1f),
ILI9881C_COMMAND_INSTR(0xd0, 0x27),
ILI9881C_COMMAND_INSTR(0xd1, 0x52),
ILI9881C_COMMAND_INSTR(0xd2, 0x63),
ILI9881C_COMMAND_INSTR(0xd3, 0x39),
};
static const struct ili9881c_instr rpi_7inch_init[] = {
ILI9881C_SWITCH_PAGE_INSTR(3),
ILI9881C_COMMAND_INSTR(0x01, 0x00),
@ -1806,6 +1994,23 @@ static const struct drm_display_mode am8001280g_default_mode = {
.height_mm = 151,
};
static const struct drm_display_mode rpi_5inch_default_mode = {
.clock = 83333,
.hdisplay = 720,
.hsync_start = 720 + 110,
.hsync_end = 720 + 110 + 12,
.htotal = 720 + 110 + 12 + 95,
.vdisplay = 1280,
.vsync_start = 1280 + 100,
.vsync_end = 1280 + 100 + 2,
.vtotal = 1280 + 100 + 2 + 100,
.width_mm = 62,
.height_mm = 110,
};
static const struct drm_display_mode rpi_7inch_default_mode = {
.clock = 83330,
@ -2000,6 +2205,14 @@ static const struct ili9881c_desc am8001280g_desc = {
MIPI_DSI_CLOCK_NON_CONTINUOUS | MIPI_DSI_MODE_LPM,
};
static const struct ili9881c_desc rpi_5inch_desc = {
.init = rpi_5inch_init,
.init_length = ARRAY_SIZE(rpi_5inch_init),
.mode = &rpi_5inch_default_mode,
.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_LPM,
.lanes = 2,
};
static const struct ili9881c_desc rpi_7inch_desc = {
.init = rpi_7inch_init,
.init_length = ARRAY_SIZE(rpi_7inch_init),
@ -2025,6 +2238,7 @@ static const struct of_device_id ili9881c_of_match[] = {
{ .compatible = "tdo,tl050hdv35", .data = &tl050hdv35_desc },
{ .compatible = "wanchanglong,w552946aba", .data = &w552946aba_desc },
{ .compatible = "ampire,am8001280g", .data = &am8001280g_desc },
{ .compatible = "raspberrypi,dsi-5inch", &rpi_5inch_desc },
{ .compatible = "raspberrypi,dsi-7inch", &rpi_7inch_desc },
{ }
};