Commit e2450d32 authored by Cong Yang's avatar Cong Yang Committed by Douglas Anderson
Browse files

drm/panel: ili9882t: Break out as separate driver



The Starry ILI9882t-based panel should never have been part of the boe
tv101wum driver, it is clearly based on the Ilitek ILI9882t display
controller and if you look at the custom command sequences for the
panel these clearly contain the signature Ilitek page switch (0xff)
commands. The hardware has nothing in common with the other panels
supported by this driver.

Break this out into a separate driver and config symbol instead.

If the placement here is out of convenience for using similar code,
we should consider creating a helper library instead.

Co-developed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Reviewed-by: default avatarDouglas Anderson <dianders@chromium.org>
Signed-off-by: default avatarCong Yang <yangcong5@huaqin.corp-partner.google.com>
Signed-off-by: default avatarDouglas Anderson <dianders@chromium.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20231013091844.804310-2-yangcong5@huaqin.corp-partner.google.com
parent 6c73f1db
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -203,6 +203,15 @@ config DRM_PANEL_ILITEK_ILI9881C
	  Say Y if you want to enable support for panels based on the
	  Ilitek ILI9881c controller.

config DRM_PANEL_ILITEK_ILI9882T
	tristate "Ilitek ILI9882t-based panels"
	depends on OF
	depends on DRM_MIPI_DSI
	depends on BACKLIGHT_CLASS_DEVICE
	help
	  Say Y if you want to enable support for panels based on the
	  Ilitek ILI9882t controller.

config DRM_PANEL_INNOLUX_EJ030NA
        tristate "Innolux EJ030NA 320x480 LCD panel"
        depends on OF && SPI
+1 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ obj-$(CONFIG_DRM_PANEL_HIMAX_HX8394) += panel-himax-hx8394.o
obj-$(CONFIG_DRM_PANEL_ILITEK_IL9322) += panel-ilitek-ili9322.o
obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9341) += panel-ilitek-ili9341.o
obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9881C) += panel-ilitek-ili9881c.o
obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9882T) += panel-ilitek-ili9882t.o
obj-$(CONFIG_DRM_PANEL_INNOLUX_EJ030NA) += panel-innolux-ej030na.o
obj-$(CONFIG_DRM_PANEL_INNOLUX_P079ZCA) += panel-innolux-p079zca.o
obj-$(CONFIG_DRM_PANEL_JADARD_JD9365DA_H3) += panel-jadard-jd9365da-h3.o
+0 −371
Original line number Diff line number Diff line
@@ -1370,346 +1370,6 @@ static const struct panel_init_cmd starry_himax83102_j02_init_cmd[] = {
	{},
};

static const struct panel_init_cmd starry_ili9882t_init_cmd[] = {
	_INIT_DELAY_CMD(5),
	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x01),
	_INIT_DCS_CMD(0x00, 0x42),
	_INIT_DCS_CMD(0x01, 0x11),
	_INIT_DCS_CMD(0x02, 0x00),
	_INIT_DCS_CMD(0x03, 0x00),

	_INIT_DCS_CMD(0x04, 0x01),
	_INIT_DCS_CMD(0x05, 0x11),
	_INIT_DCS_CMD(0x06, 0x00),
	_INIT_DCS_CMD(0x07, 0x00),

	_INIT_DCS_CMD(0x08, 0x80),
	_INIT_DCS_CMD(0x09, 0x81),
	_INIT_DCS_CMD(0x0A, 0x71),
	_INIT_DCS_CMD(0x0B, 0x00),

	_INIT_DCS_CMD(0x0C, 0x00),
	_INIT_DCS_CMD(0x0E, 0x1A),

	_INIT_DCS_CMD(0x24, 0x00),
	_INIT_DCS_CMD(0x25, 0x00),
	_INIT_DCS_CMD(0x26, 0x00),
	_INIT_DCS_CMD(0x27, 0x00),

	_INIT_DCS_CMD(0x2C, 0xD4),
	_INIT_DCS_CMD(0xB9, 0x40),

	_INIT_DCS_CMD(0xB0, 0x11),

	_INIT_DCS_CMD(0xE6, 0x32),
	_INIT_DCS_CMD(0xD1, 0x30),

	_INIT_DCS_CMD(0xD6, 0x55),

	_INIT_DCS_CMD(0xD0, 0x01),
	_INIT_DCS_CMD(0xE3, 0x93),
	_INIT_DCS_CMD(0xE4, 0x00),
	_INIT_DCS_CMD(0xE5, 0x80),

	_INIT_DCS_CMD(0x31, 0x07),
	_INIT_DCS_CMD(0x32, 0x07),
	_INIT_DCS_CMD(0x33, 0x07),
	_INIT_DCS_CMD(0x34, 0x07),
	_INIT_DCS_CMD(0x35, 0x07),
	_INIT_DCS_CMD(0x36, 0x01),
	_INIT_DCS_CMD(0x37, 0x00),
	_INIT_DCS_CMD(0x38, 0x28),
	_INIT_DCS_CMD(0x39, 0x29),
	_INIT_DCS_CMD(0x3A, 0x11),
	_INIT_DCS_CMD(0x3B, 0x13),
	_INIT_DCS_CMD(0x3C, 0x15),
	_INIT_DCS_CMD(0x3D, 0x17),
	_INIT_DCS_CMD(0x3E, 0x09),
	_INIT_DCS_CMD(0x3F, 0x0D),
	_INIT_DCS_CMD(0x40, 0x02),
	_INIT_DCS_CMD(0x41, 0x02),
	_INIT_DCS_CMD(0x42, 0x02),
	_INIT_DCS_CMD(0x43, 0x02),
	_INIT_DCS_CMD(0x44, 0x02),
	_INIT_DCS_CMD(0x45, 0x02),
	_INIT_DCS_CMD(0x46, 0x02),

	_INIT_DCS_CMD(0x47, 0x07),
	_INIT_DCS_CMD(0x48, 0x07),
	_INIT_DCS_CMD(0x49, 0x07),
	_INIT_DCS_CMD(0x4A, 0x07),
	_INIT_DCS_CMD(0x4B, 0x07),
	_INIT_DCS_CMD(0x4C, 0x01),
	_INIT_DCS_CMD(0x4D, 0x00),
	_INIT_DCS_CMD(0x4E, 0x28),
	_INIT_DCS_CMD(0x4F, 0x29),
	_INIT_DCS_CMD(0x50, 0x10),
	_INIT_DCS_CMD(0x51, 0x12),
	_INIT_DCS_CMD(0x52, 0x14),
	_INIT_DCS_CMD(0x53, 0x16),
	_INIT_DCS_CMD(0x54, 0x08),
	_INIT_DCS_CMD(0x55, 0x0C),
	_INIT_DCS_CMD(0x56, 0x02),
	_INIT_DCS_CMD(0x57, 0x02),
	_INIT_DCS_CMD(0x58, 0x02),
	_INIT_DCS_CMD(0x59, 0x02),
	_INIT_DCS_CMD(0x5A, 0x02),
	_INIT_DCS_CMD(0x5B, 0x02),
	_INIT_DCS_CMD(0x5C, 0x02),

	_INIT_DCS_CMD(0x61, 0x07),
	_INIT_DCS_CMD(0x62, 0x07),
	_INIT_DCS_CMD(0x63, 0x07),
	_INIT_DCS_CMD(0x64, 0x07),
	_INIT_DCS_CMD(0x65, 0x07),
	_INIT_DCS_CMD(0x66, 0x01),
	_INIT_DCS_CMD(0x67, 0x00),
	_INIT_DCS_CMD(0x68, 0x28),
	_INIT_DCS_CMD(0x69, 0x29),
	_INIT_DCS_CMD(0x6A, 0x16),
	_INIT_DCS_CMD(0x6B, 0x14),
	_INIT_DCS_CMD(0x6C, 0x12),
	_INIT_DCS_CMD(0x6D, 0x10),
	_INIT_DCS_CMD(0x6E, 0x0C),
	_INIT_DCS_CMD(0x6F, 0x08),
	_INIT_DCS_CMD(0x70, 0x02),
	_INIT_DCS_CMD(0x71, 0x02),
	_INIT_DCS_CMD(0x72, 0x02),
	_INIT_DCS_CMD(0x73, 0x02),
	_INIT_DCS_CMD(0x74, 0x02),
	_INIT_DCS_CMD(0x75, 0x02),
	_INIT_DCS_CMD(0x76, 0x02),

	_INIT_DCS_CMD(0x77, 0x07),
	_INIT_DCS_CMD(0x78, 0x07),
	_INIT_DCS_CMD(0x79, 0x07),
	_INIT_DCS_CMD(0x7A, 0x07),
	_INIT_DCS_CMD(0x7B, 0x07),
	_INIT_DCS_CMD(0x7C, 0x01),
	_INIT_DCS_CMD(0x7D, 0x00),
	_INIT_DCS_CMD(0x7E, 0x28),
	_INIT_DCS_CMD(0x7F, 0x29),
	_INIT_DCS_CMD(0x80, 0x17),
	_INIT_DCS_CMD(0x81, 0x15),
	_INIT_DCS_CMD(0x82, 0x13),
	_INIT_DCS_CMD(0x83, 0x11),
	_INIT_DCS_CMD(0x84, 0x0D),
	_INIT_DCS_CMD(0x85, 0x09),
	_INIT_DCS_CMD(0x86, 0x02),
	_INIT_DCS_CMD(0x87, 0x07),
	_INIT_DCS_CMD(0x88, 0x07),
	_INIT_DCS_CMD(0x89, 0x07),
	_INIT_DCS_CMD(0x8A, 0x07),
	_INIT_DCS_CMD(0x8B, 0x07),
	_INIT_DCS_CMD(0x8C, 0x07),

	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x02),
	_INIT_DCS_CMD(0x29, 0x3A),
	_INIT_DCS_CMD(0x2A, 0x3B),

	_INIT_DCS_CMD(0x06, 0x01),
	_INIT_DCS_CMD(0x07, 0x01),
	_INIT_DCS_CMD(0x08, 0x0C),
	_INIT_DCS_CMD(0x09, 0x44),

	_INIT_DCS_CMD(0x3C, 0x0A),
	_INIT_DCS_CMD(0x39, 0x11),
	_INIT_DCS_CMD(0x3D, 0x00),
	_INIT_DCS_CMD(0x3A, 0x0C),
	_INIT_DCS_CMD(0x3B, 0x44),

	_INIT_DCS_CMD(0x53, 0x1F),
	_INIT_DCS_CMD(0x5E, 0x40),
	_INIT_DCS_CMD(0x84, 0x00),

	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x03),
	_INIT_DCS_CMD(0x20, 0x01),
	_INIT_DCS_CMD(0x21, 0x3C),
	_INIT_DCS_CMD(0x22, 0xFA),

	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x0A),
	_INIT_DCS_CMD(0xE0, 0x01),
	_INIT_DCS_CMD(0xE2, 0x01),
	_INIT_DCS_CMD(0xE5, 0x91),
	_INIT_DCS_CMD(0xE6, 0x3C),
	_INIT_DCS_CMD(0xE7, 0x00),
	_INIT_DCS_CMD(0xE8, 0xFA),

	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x12),
	_INIT_DCS_CMD(0x87, 0x2C),

	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x05),
	_INIT_DCS_CMD(0x73, 0xE5),
	_INIT_DCS_CMD(0x7F, 0x6B),
	_INIT_DCS_CMD(0x6D, 0xA4),
	_INIT_DCS_CMD(0x79, 0x54),
	_INIT_DCS_CMD(0x69, 0x97),
	_INIT_DCS_CMD(0x6A, 0x97),
	_INIT_DCS_CMD(0xA5, 0x3F),
	_INIT_DCS_CMD(0x61, 0xDA),
	_INIT_DCS_CMD(0xA7, 0xF1),
	_INIT_DCS_CMD(0x5F, 0x01),
	_INIT_DCS_CMD(0x62, 0x3F),
	_INIT_DCS_CMD(0x1D, 0x90),
	_INIT_DCS_CMD(0x86, 0x87),

	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x06),
	_INIT_DCS_CMD(0xC0, 0x80),
	_INIT_DCS_CMD(0xC1, 0x07),
	_INIT_DCS_CMD(0xCA, 0x58),
	_INIT_DCS_CMD(0xCB, 0x02),
	_INIT_DCS_CMD(0xCE, 0x58),
	_INIT_DCS_CMD(0xCF, 0x02),
	_INIT_DCS_CMD(0x67, 0x60),
	_INIT_DCS_CMD(0x10, 0x00),
	_INIT_DCS_CMD(0x92, 0x22),
	_INIT_DCS_CMD(0xD3, 0x08),
	_INIT_DCS_CMD(0xD6, 0x55),
	_INIT_DCS_CMD(0xDC, 0x38),

	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x08),
	_INIT_DCS_CMD(0xE0, 0x00, 0x10, 0x2A, 0x4D, 0x61, 0x56, 0x6A, 0x6E, 0x79, 0x76, 0x8F, 0x95, 0x98, 0xAE, 0xAA, 0xB2, 0xBB, 0xCE, 0xC6, 0xBD, 0xD5, 0xE2, 0xE8),
	_INIT_DCS_CMD(0xE1, 0x00, 0x10, 0x2A, 0x4D, 0x61, 0x56, 0x6A, 0x6E, 0x79, 0x76, 0x8F, 0x95, 0x98, 0xAE, 0xAA, 0xB2, 0xBB, 0xCE, 0xC6, 0xBD, 0xD5, 0xE2, 0xE8),

	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x04),
	_INIT_DCS_CMD(0xBA, 0x81),

	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x0C),
	_INIT_DCS_CMD(0x00, 0x02),
	_INIT_DCS_CMD(0x01, 0x00),
	_INIT_DCS_CMD(0x02, 0x03),
	_INIT_DCS_CMD(0x03, 0x01),
	_INIT_DCS_CMD(0x04, 0x03),
	_INIT_DCS_CMD(0x05, 0x02),
	_INIT_DCS_CMD(0x06, 0x04),
	_INIT_DCS_CMD(0x07, 0x03),
	_INIT_DCS_CMD(0x08, 0x03),
	_INIT_DCS_CMD(0x09, 0x04),
	_INIT_DCS_CMD(0x0A, 0x04),
	_INIT_DCS_CMD(0x0B, 0x05),
	_INIT_DCS_CMD(0x0C, 0x04),
	_INIT_DCS_CMD(0x0D, 0x06),
	_INIT_DCS_CMD(0x0E, 0x05),
	_INIT_DCS_CMD(0x0F, 0x07),
	_INIT_DCS_CMD(0x10, 0x04),
	_INIT_DCS_CMD(0x11, 0x08),
	_INIT_DCS_CMD(0x12, 0x05),
	_INIT_DCS_CMD(0x13, 0x09),
	_INIT_DCS_CMD(0x14, 0x05),
	_INIT_DCS_CMD(0x15, 0x0A),
	_INIT_DCS_CMD(0x16, 0x06),
	_INIT_DCS_CMD(0x17, 0x0B),
	_INIT_DCS_CMD(0x18, 0x05),
	_INIT_DCS_CMD(0x19, 0x0C),
	_INIT_DCS_CMD(0x1A, 0x06),
	_INIT_DCS_CMD(0x1B, 0x0D),
	_INIT_DCS_CMD(0x1C, 0x06),
	_INIT_DCS_CMD(0x1D, 0x0E),
	_INIT_DCS_CMD(0x1E, 0x07),
	_INIT_DCS_CMD(0x1F, 0x0F),
	_INIT_DCS_CMD(0x20, 0x06),
	_INIT_DCS_CMD(0x21, 0x10),
	_INIT_DCS_CMD(0x22, 0x07),
	_INIT_DCS_CMD(0x23, 0x11),
	_INIT_DCS_CMD(0x24, 0x07),
	_INIT_DCS_CMD(0x25, 0x12),
	_INIT_DCS_CMD(0x26, 0x08),
	_INIT_DCS_CMD(0x27, 0x13),
	_INIT_DCS_CMD(0x28, 0x07),
	_INIT_DCS_CMD(0x29, 0x14),
	_INIT_DCS_CMD(0x2A, 0x08),
	_INIT_DCS_CMD(0x2B, 0x15),
	_INIT_DCS_CMD(0x2C, 0x08),
	_INIT_DCS_CMD(0x2D, 0x16),
	_INIT_DCS_CMD(0x2E, 0x09),
	_INIT_DCS_CMD(0x2F, 0x17),
	_INIT_DCS_CMD(0x30, 0x08),
	_INIT_DCS_CMD(0x31, 0x18),
	_INIT_DCS_CMD(0x32, 0x09),
	_INIT_DCS_CMD(0x33, 0x19),
	_INIT_DCS_CMD(0x34, 0x09),
	_INIT_DCS_CMD(0x35, 0x1A),
	_INIT_DCS_CMD(0x36, 0x0A),
	_INIT_DCS_CMD(0x37, 0x1B),
	_INIT_DCS_CMD(0x38, 0x0A),
	_INIT_DCS_CMD(0x39, 0x1C),
	_INIT_DCS_CMD(0x3A, 0x0A),
	_INIT_DCS_CMD(0x3B, 0x1D),
	_INIT_DCS_CMD(0x3C, 0x0A),
	_INIT_DCS_CMD(0x3D, 0x1E),
	_INIT_DCS_CMD(0x3E, 0x0A),
	_INIT_DCS_CMD(0x3F, 0x1F),

	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x04),
	_INIT_DCS_CMD(0xBA, 0x01),

	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x0E),
	_INIT_DCS_CMD(0x02, 0x0C),
	_INIT_DCS_CMD(0x20, 0x10),
	_INIT_DCS_CMD(0x25, 0x16),
	_INIT_DCS_CMD(0x26, 0xE0),
	_INIT_DCS_CMD(0x27, 0x00),
	_INIT_DCS_CMD(0x29, 0x71),
	_INIT_DCS_CMD(0x2A, 0x46),
	_INIT_DCS_CMD(0x2B, 0x1F),
	_INIT_DCS_CMD(0x2D, 0xC7),
	_INIT_DCS_CMD(0x31, 0x02),
	_INIT_DCS_CMD(0x32, 0xDF),
	_INIT_DCS_CMD(0x33, 0x5A),
	_INIT_DCS_CMD(0x34, 0xC0),
	_INIT_DCS_CMD(0x35, 0x5A),
	_INIT_DCS_CMD(0x36, 0xC0),
	_INIT_DCS_CMD(0x38, 0x65),
	_INIT_DCS_CMD(0x80, 0x3E),
	_INIT_DCS_CMD(0x81, 0xA0),
	_INIT_DCS_CMD(0xB0, 0x01),
	_INIT_DCS_CMD(0xB1, 0xCC),
	_INIT_DCS_CMD(0xC0, 0x12),
	_INIT_DCS_CMD(0xC2, 0xCC),
	_INIT_DCS_CMD(0xC3, 0xCC),
	_INIT_DCS_CMD(0xC4, 0xCC),
	_INIT_DCS_CMD(0xC5, 0xCC),
	_INIT_DCS_CMD(0xC6, 0xCC),
	_INIT_DCS_CMD(0xC7, 0xCC),
	_INIT_DCS_CMD(0xC8, 0xCC),
	_INIT_DCS_CMD(0xC9, 0xCC),
	_INIT_DCS_CMD(0x30, 0x00),
	_INIT_DCS_CMD(0x00, 0x81),
	_INIT_DCS_CMD(0x08, 0x02),
	_INIT_DCS_CMD(0x09, 0x00),
	_INIT_DCS_CMD(0x07, 0x21),
	_INIT_DCS_CMD(0x04, 0x10),

	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x1E),
	_INIT_DCS_CMD(0x60, 0x00),
	_INIT_DCS_CMD(0x64, 0x00),
	_INIT_DCS_CMD(0x6D, 0x00),

	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x0B),
	_INIT_DCS_CMD(0xA6, 0x44),
	_INIT_DCS_CMD(0xA7, 0xB6),
	_INIT_DCS_CMD(0xA8, 0x03),
	_INIT_DCS_CMD(0xA9, 0x03),
	_INIT_DCS_CMD(0xAA, 0x51),
	_INIT_DCS_CMD(0xAB, 0x51),
	_INIT_DCS_CMD(0xAC, 0x04),
	_INIT_DCS_CMD(0xBD, 0x92),
	_INIT_DCS_CMD(0xBE, 0xA1),

	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x05),
	_INIT_DCS_CMD(0x86, 0x87),

	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x06),
	_INIT_DCS_CMD(0x92, 0x22),

	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x00),
	_INIT_DCS_CMD(0x11),
	_INIT_DELAY_CMD(120),
	_INIT_DCS_CMD(0x29),
	_INIT_DELAY_CMD(20),
	{},
};

static inline struct boe_panel *to_boe_panel(struct drm_panel *panel)
{
	return container_of(panel, struct boe_panel, base);
@@ -2135,34 +1795,6 @@ static const struct panel_desc starry_himax83102_j02_desc = {
	.lp11_before_reset = true,
};

static const struct drm_display_mode starry_ili9882t_default_mode = {
	.clock = 165280,
	.hdisplay = 1200,
	.hsync_start = 1200 + 72,
	.hsync_end = 1200 + 72 + 30,
	.htotal = 1200 + 72 + 30 + 72,
	.vdisplay = 1920,
	.vsync_start = 1920 + 68,
	.vsync_end = 1920 + 68 + 2,
	.vtotal = 1920 + 68 + 2 + 10,
	.type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
};

static const struct panel_desc starry_ili9882t_desc = {
	.modes = &starry_ili9882t_default_mode,
	.bpc = 8,
	.size = {
		.width_mm = 141,
		.height_mm = 226,
	},
	.lanes = 4,
	.format = MIPI_DSI_FMT_RGB888,
	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
		      MIPI_DSI_MODE_LPM,
	.init_cmds = starry_ili9882t_init_cmd,
	.lp11_before_reset = true,
};

static int boe_panel_get_modes(struct drm_panel *panel,
			       struct drm_connector *connector)
{
@@ -2339,9 +1971,6 @@ static const struct of_device_id boe_of_match[] = {
	{ .compatible = "starry,himax83102-j02",
	  .data = &starry_himax83102_j02_desc
	},
	{ .compatible = "starry,ili9882t",
	  .data = &starry_ili9882t_desc
	},
	{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, boe_of_match);
+759 −0

File added.

Preview size limit exceeded, changes collapsed.