Commit 97f0d2ed authored by Marek Vasut's avatar Marek Vasut Committed by Neil Armstrong
Browse files

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: default avatarMarek Vasut <marek.vasut+renesas@mailbox.org>
Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: default avatarNeil Armstrong <neil.armstrong@linaro.org>
Link: https://lore.kernel.org/r/20250904205743.186177-2-marek.vasut+renesas@mailbox.org
parent 86769c7d
Loading
Loading
Loading
Loading
+214 −0
Original line number Diff line number Diff line
@@ -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 },
	{ }
};