xref: /openbmc/linux/drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c (revision 7b7fd0ac7dc1ffcaf24d9bca0f051b0168e43cd4)
1a869b9dbSJitao Shi // SPDX-License-Identifier: GPL-2.0
2a869b9dbSJitao Shi /*
3a869b9dbSJitao Shi  * Copyright (c) 2018 MediaTek Inc.
4a869b9dbSJitao Shi  * Author: Jitao Shi <jitao.shi@mediatek.com>
5a869b9dbSJitao Shi  */
6a869b9dbSJitao Shi 
7a869b9dbSJitao Shi #include <linux/delay.h>
8a869b9dbSJitao Shi #include <linux/gpio/consumer.h>
9a869b9dbSJitao Shi #include <linux/module.h>
10a869b9dbSJitao Shi #include <linux/of.h>
11a869b9dbSJitao Shi #include <linux/regulator/consumer.h>
12a869b9dbSJitao Shi 
134a135d54SDerek Basehore #include <drm/drm_connector.h>
14a869b9dbSJitao Shi #include <drm/drm_crtc.h>
15a869b9dbSJitao Shi #include <drm/drm_mipi_dsi.h>
16a869b9dbSJitao Shi #include <drm/drm_panel.h>
17a869b9dbSJitao Shi 
18a869b9dbSJitao Shi #include <video/mipi_display.h>
19a869b9dbSJitao Shi 
20a869b9dbSJitao Shi struct panel_desc {
21a869b9dbSJitao Shi 	const struct drm_display_mode *modes;
22a869b9dbSJitao Shi 	unsigned int bpc;
23a869b9dbSJitao Shi 
24a869b9dbSJitao Shi 	/**
25a869b9dbSJitao Shi 	 * @width_mm: width of the panel's active display area
26a869b9dbSJitao Shi 	 * @height_mm: height of the panel's active display area
27a869b9dbSJitao Shi 	 */
28a869b9dbSJitao Shi 	struct {
29a869b9dbSJitao Shi 		unsigned int width_mm;
30a869b9dbSJitao Shi 		unsigned int height_mm;
31a869b9dbSJitao Shi 	} size;
32a869b9dbSJitao Shi 
33a869b9dbSJitao Shi 	unsigned long mode_flags;
34a869b9dbSJitao Shi 	enum mipi_dsi_pixel_format format;
35a869b9dbSJitao Shi 	const struct panel_init_cmd *init_cmds;
36a869b9dbSJitao Shi 	unsigned int lanes;
3744de19e3SJitao Shi 	bool discharge_on_disable;
38812562b8SShuijing Li 	bool lp11_before_reset;
39a869b9dbSJitao Shi };
40a869b9dbSJitao Shi 
41a869b9dbSJitao Shi struct boe_panel {
42a869b9dbSJitao Shi 	struct drm_panel base;
43a869b9dbSJitao Shi 	struct mipi_dsi_device *dsi;
44a869b9dbSJitao Shi 
45a869b9dbSJitao Shi 	const struct panel_desc *desc;
46a869b9dbSJitao Shi 
474a135d54SDerek Basehore 	enum drm_panel_orientation orientation;
4818c58153Syangcong 	struct regulator *pp3300;
49a869b9dbSJitao Shi 	struct regulator *pp1800;
50a869b9dbSJitao Shi 	struct regulator *avee;
51a869b9dbSJitao Shi 	struct regulator *avdd;
52a869b9dbSJitao Shi 	struct gpio_desc *enable_gpio;
53a869b9dbSJitao Shi 
54a869b9dbSJitao Shi 	bool prepared;
55a869b9dbSJitao Shi };
56a869b9dbSJitao Shi 
57a869b9dbSJitao Shi enum dsi_cmd_type {
58a869b9dbSJitao Shi 	INIT_DCS_CMD,
59a869b9dbSJitao Shi 	DELAY_CMD,
60a869b9dbSJitao Shi };
61a869b9dbSJitao Shi 
62a869b9dbSJitao Shi struct panel_init_cmd {
63a869b9dbSJitao Shi 	enum dsi_cmd_type type;
64a869b9dbSJitao Shi 	size_t len;
65a869b9dbSJitao Shi 	const char *data;
66a869b9dbSJitao Shi };
67a869b9dbSJitao Shi 
68a869b9dbSJitao Shi #define _INIT_DCS_CMD(...) { \
69a869b9dbSJitao Shi 	.type = INIT_DCS_CMD, \
70a869b9dbSJitao Shi 	.len = sizeof((char[]){__VA_ARGS__}), \
71a869b9dbSJitao Shi 	.data = (char[]){__VA_ARGS__} }
72a869b9dbSJitao Shi 
73a869b9dbSJitao Shi #define _INIT_DELAY_CMD(...) { \
74a869b9dbSJitao Shi 	.type = DELAY_CMD,\
75a869b9dbSJitao Shi 	.len = sizeof((char[]){__VA_ARGS__}), \
76a869b9dbSJitao Shi 	.data = (char[]){__VA_ARGS__} }
77a869b9dbSJitao Shi 
7893ee1a2cSyangcong static const struct panel_init_cmd boe_tv110c9m_init_cmd[] = {
7993ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x20),
8093ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
8193ee1a2cSyangcong 	_INIT_DCS_CMD(0x05, 0xD9),
8293ee1a2cSyangcong 	_INIT_DCS_CMD(0x07, 0x78),
8393ee1a2cSyangcong 	_INIT_DCS_CMD(0x08, 0x5A),
8493ee1a2cSyangcong 	_INIT_DCS_CMD(0x0D, 0x63),
8593ee1a2cSyangcong 	_INIT_DCS_CMD(0x0E, 0x91),
8693ee1a2cSyangcong 	_INIT_DCS_CMD(0x0F, 0x73),
8742c632b0Syangcong 	_INIT_DCS_CMD(0x95, 0xE6),
8842c632b0Syangcong 	_INIT_DCS_CMD(0x96, 0xF0),
89506d9d74Syangcong 	_INIT_DCS_CMD(0x30, 0x00),
9093ee1a2cSyangcong 	_INIT_DCS_CMD(0x6D, 0x66),
9193ee1a2cSyangcong 	_INIT_DCS_CMD(0x75, 0xA2),
9293ee1a2cSyangcong 	_INIT_DCS_CMD(0x77, 0x3B),
9393ee1a2cSyangcong 
9493ee1a2cSyangcong 	_INIT_DCS_CMD(0xB0, 0x00, 0x08, 0x00, 0x23, 0x00, 0x4D, 0x00, 0x6D, 0x00, 0x89, 0x00, 0xA1, 0x00, 0xB6, 0x00, 0xC9),
9593ee1a2cSyangcong 	_INIT_DCS_CMD(0xB1, 0x00, 0xDA, 0x01, 0x13, 0x01, 0x3C, 0x01, 0x7E, 0x01, 0xAB, 0x01, 0xF7, 0x02, 0x2F, 0x02, 0x31),
9693ee1a2cSyangcong 	_INIT_DCS_CMD(0xB2, 0x02, 0x67, 0x02, 0xA6, 0x02, 0xD1, 0x03, 0x08, 0x03, 0x2E, 0x03, 0x5B, 0x03, 0x6B, 0x03, 0x7B),
9793ee1a2cSyangcong 	_INIT_DCS_CMD(0xB3, 0x03, 0x8E, 0x03, 0xA2, 0x03, 0xB7, 0x03, 0xE7, 0x03, 0xFD, 0x03, 0xFF),
9893ee1a2cSyangcong 
9993ee1a2cSyangcong 	_INIT_DCS_CMD(0xB4, 0x00, 0x08, 0x00, 0x23, 0x00, 0x4D, 0x00, 0x6D, 0x00, 0x89, 0x00, 0xA1, 0x00, 0xB6, 0x00, 0xC9),
10093ee1a2cSyangcong 	_INIT_DCS_CMD(0xB5, 0x00, 0xDA, 0x01, 0x13, 0x01, 0x3C, 0x01, 0x7E, 0x01, 0xAB, 0x01, 0xF7, 0x02, 0x2F, 0x02, 0x31),
10193ee1a2cSyangcong 	_INIT_DCS_CMD(0xB6, 0x02, 0x67, 0x02, 0xA6, 0x02, 0xD1, 0x03, 0x08, 0x03, 0x2E, 0x03, 0x5B, 0x03, 0x6B, 0x03, 0x7B),
10293ee1a2cSyangcong 	_INIT_DCS_CMD(0xB7, 0x03, 0x8E, 0x03, 0xA2, 0x03, 0xB7, 0x03, 0xE7, 0x03, 0xFD, 0x03, 0xFF),
10393ee1a2cSyangcong 	_INIT_DCS_CMD(0xB8, 0x00, 0x08, 0x00, 0x23, 0x00, 0x4D, 0x00, 0x6D, 0x00, 0x89, 0x00, 0xA1, 0x00, 0xB6, 0x00, 0xC9),
10493ee1a2cSyangcong 	_INIT_DCS_CMD(0xB9, 0x00, 0xDA, 0x01, 0x13, 0x01, 0x3C, 0x01, 0x7E, 0x01, 0xAB, 0x01, 0xF7, 0x02, 0x2F, 0x02, 0x31),
10593ee1a2cSyangcong 	_INIT_DCS_CMD(0xBA, 0x02, 0x67, 0x02, 0xA6, 0x02, 0xD1, 0x03, 0x08, 0x03, 0x2E, 0x03, 0x5B, 0x03, 0x6B, 0x03, 0x7B),
10693ee1a2cSyangcong 	_INIT_DCS_CMD(0xBB, 0x03, 0x8E, 0x03, 0xA2, 0x03, 0xB7, 0x03, 0xE7, 0x03, 0xFD, 0x03, 0xFF),
10793ee1a2cSyangcong 
10893ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x21),
10993ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
11093ee1a2cSyangcong 
11193ee1a2cSyangcong 	_INIT_DCS_CMD(0xB0, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x45, 0x00, 0x65, 0x00, 0x81, 0x00, 0x99, 0x00, 0xAE, 0x00, 0xC1),
11293ee1a2cSyangcong 	_INIT_DCS_CMD(0xB1, 0x00, 0xD2, 0x01, 0x0B, 0x01, 0x34, 0x01, 0x76, 0x01, 0xA3, 0x01, 0xEF, 0x02, 0x27, 0x02, 0x29),
11393ee1a2cSyangcong 	_INIT_DCS_CMD(0xB2, 0x02, 0x5F, 0x02, 0x9E, 0x02, 0xC9, 0x03, 0x00, 0x03, 0x26, 0x03, 0x53, 0x03, 0x63, 0x03, 0x73),
11493ee1a2cSyangcong 
115506d9d74Syangcong 	_INIT_DCS_CMD(0xB3, 0x03, 0x86, 0x03, 0x9A, 0x03, 0xAF, 0x03, 0xDF, 0x03, 0xF5, 0x03, 0xE0),
11693ee1a2cSyangcong 	_INIT_DCS_CMD(0xB4, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x45, 0x00, 0x65, 0x00, 0x81, 0x00, 0x99, 0x00, 0xAE, 0x00, 0xC1),
11793ee1a2cSyangcong 	_INIT_DCS_CMD(0xB5, 0x00, 0xD2, 0x01, 0x0B, 0x01, 0x34, 0x01, 0x76, 0x01, 0xA3, 0x01, 0xEF, 0x02, 0x27, 0x02, 0x29),
11893ee1a2cSyangcong 	_INIT_DCS_CMD(0xB6, 0x02, 0x5F, 0x02, 0x9E, 0x02, 0xC9, 0x03, 0x00, 0x03, 0x26, 0x03, 0x53, 0x03, 0x63, 0x03, 0x73),
119506d9d74Syangcong 	_INIT_DCS_CMD(0xB7, 0x03, 0x86, 0x03, 0x9A, 0x03, 0xAF, 0x03, 0xDF, 0x03, 0xF5, 0x03, 0xE0),
12093ee1a2cSyangcong 
12193ee1a2cSyangcong 	_INIT_DCS_CMD(0xB8, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x45, 0x00, 0x65, 0x00, 0x81, 0x00, 0x99, 0x00, 0xAE, 0x00, 0xC1),
12293ee1a2cSyangcong 	_INIT_DCS_CMD(0xB9, 0x00, 0xD2, 0x01, 0x0B, 0x01, 0x34, 0x01, 0x76, 0x01, 0xA3, 0x01, 0xEF, 0x02, 0x27, 0x02, 0x29),
12393ee1a2cSyangcong 	_INIT_DCS_CMD(0xBA, 0x02, 0x5F, 0x02, 0x9E, 0x02, 0xC9, 0x03, 0x00, 0x03, 0x26, 0x03, 0x53, 0x03, 0x63, 0x03, 0x73),
12493ee1a2cSyangcong 
125506d9d74Syangcong 	_INIT_DCS_CMD(0xBB, 0x03, 0x86, 0x03, 0x9A, 0x03, 0xAF, 0x03, 0xDF, 0x03, 0xF5, 0x03, 0xE0),
12693ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x24),
12793ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
12893ee1a2cSyangcong 
12993ee1a2cSyangcong 	_INIT_DCS_CMD(0x00, 0x00),
13093ee1a2cSyangcong 	_INIT_DCS_CMD(0x01, 0x00),
13193ee1a2cSyangcong 
13293ee1a2cSyangcong 	_INIT_DCS_CMD(0x02, 0x1C),
13393ee1a2cSyangcong 	_INIT_DCS_CMD(0x03, 0x1C),
13493ee1a2cSyangcong 
13593ee1a2cSyangcong 	_INIT_DCS_CMD(0x04, 0x1D),
13693ee1a2cSyangcong 	_INIT_DCS_CMD(0x05, 0x1D),
13793ee1a2cSyangcong 
13893ee1a2cSyangcong 	_INIT_DCS_CMD(0x06, 0x04),
13993ee1a2cSyangcong 	_INIT_DCS_CMD(0x07, 0x04),
14093ee1a2cSyangcong 
14193ee1a2cSyangcong 	_INIT_DCS_CMD(0x08, 0x0F),
14293ee1a2cSyangcong 	_INIT_DCS_CMD(0x09, 0x0F),
14393ee1a2cSyangcong 
14493ee1a2cSyangcong 	_INIT_DCS_CMD(0x0A, 0x0E),
14593ee1a2cSyangcong 	_INIT_DCS_CMD(0x0B, 0x0E),
14693ee1a2cSyangcong 
14793ee1a2cSyangcong 	_INIT_DCS_CMD(0x0C, 0x0D),
14893ee1a2cSyangcong 	_INIT_DCS_CMD(0x0D, 0x0D),
14993ee1a2cSyangcong 
15093ee1a2cSyangcong 	_INIT_DCS_CMD(0x0E, 0x0C),
15193ee1a2cSyangcong 	_INIT_DCS_CMD(0x0F, 0x0C),
15293ee1a2cSyangcong 
15393ee1a2cSyangcong 	_INIT_DCS_CMD(0x10, 0x08),
15493ee1a2cSyangcong 	_INIT_DCS_CMD(0x11, 0x08),
15593ee1a2cSyangcong 
15693ee1a2cSyangcong 	_INIT_DCS_CMD(0x12, 0x00),
15793ee1a2cSyangcong 	_INIT_DCS_CMD(0x13, 0x00),
15893ee1a2cSyangcong 	_INIT_DCS_CMD(0x14, 0x00),
15993ee1a2cSyangcong 	_INIT_DCS_CMD(0x15, 0x00),
16093ee1a2cSyangcong 
16193ee1a2cSyangcong 	_INIT_DCS_CMD(0x16, 0x00),
16293ee1a2cSyangcong 	_INIT_DCS_CMD(0x17, 0x00),
16393ee1a2cSyangcong 
16493ee1a2cSyangcong 	_INIT_DCS_CMD(0x18, 0x1C),
16593ee1a2cSyangcong 	_INIT_DCS_CMD(0x19, 0x1C),
16693ee1a2cSyangcong 
16793ee1a2cSyangcong 	_INIT_DCS_CMD(0x1A, 0x1D),
16893ee1a2cSyangcong 	_INIT_DCS_CMD(0x1B, 0x1D),
16993ee1a2cSyangcong 
17093ee1a2cSyangcong 	_INIT_DCS_CMD(0x1C, 0x04),
17193ee1a2cSyangcong 	_INIT_DCS_CMD(0x1D, 0x04),
17293ee1a2cSyangcong 
17393ee1a2cSyangcong 	_INIT_DCS_CMD(0x1E, 0x0F),
17493ee1a2cSyangcong 	_INIT_DCS_CMD(0x1F, 0x0F),
17593ee1a2cSyangcong 
17693ee1a2cSyangcong 	_INIT_DCS_CMD(0x20, 0x0E),
17793ee1a2cSyangcong 	_INIT_DCS_CMD(0x21, 0x0E),
17893ee1a2cSyangcong 
17993ee1a2cSyangcong 	_INIT_DCS_CMD(0x22, 0x0D),
18093ee1a2cSyangcong 	_INIT_DCS_CMD(0x23, 0x0D),
18193ee1a2cSyangcong 
18293ee1a2cSyangcong 	_INIT_DCS_CMD(0x24, 0x0C),
18393ee1a2cSyangcong 	_INIT_DCS_CMD(0x25, 0x0C),
18493ee1a2cSyangcong 
18593ee1a2cSyangcong 	_INIT_DCS_CMD(0x26, 0x08),
18693ee1a2cSyangcong 	_INIT_DCS_CMD(0x27, 0x08),
18793ee1a2cSyangcong 
18893ee1a2cSyangcong 	_INIT_DCS_CMD(0x28, 0x00),
18993ee1a2cSyangcong 	_INIT_DCS_CMD(0x29, 0x00),
19093ee1a2cSyangcong 	_INIT_DCS_CMD(0x2A, 0x00),
19193ee1a2cSyangcong 	_INIT_DCS_CMD(0x2B, 0x00),
19293ee1a2cSyangcong 
19393ee1a2cSyangcong 	_INIT_DCS_CMD(0x2D, 0x20),
19493ee1a2cSyangcong 	_INIT_DCS_CMD(0x2F, 0x0A),
19593ee1a2cSyangcong 	_INIT_DCS_CMD(0x30, 0x44),
19693ee1a2cSyangcong 	_INIT_DCS_CMD(0x33, 0x0C),
19793ee1a2cSyangcong 	_INIT_DCS_CMD(0x34, 0x32),
19893ee1a2cSyangcong 
19993ee1a2cSyangcong 	_INIT_DCS_CMD(0x37, 0x44),
20093ee1a2cSyangcong 	_INIT_DCS_CMD(0x38, 0x40),
20193ee1a2cSyangcong 	_INIT_DCS_CMD(0x39, 0x00),
20293ee1a2cSyangcong 	_INIT_DCS_CMD(0x3A, 0x5D),
20393ee1a2cSyangcong 	_INIT_DCS_CMD(0x3B, 0x60),
20493ee1a2cSyangcong 	_INIT_DCS_CMD(0x3D, 0x42),
20593ee1a2cSyangcong 	_INIT_DCS_CMD(0x3F, 0x06),
20693ee1a2cSyangcong 	_INIT_DCS_CMD(0x43, 0x06),
20793ee1a2cSyangcong 	_INIT_DCS_CMD(0x47, 0x66),
20893ee1a2cSyangcong 	_INIT_DCS_CMD(0x4A, 0x5D),
20993ee1a2cSyangcong 	_INIT_DCS_CMD(0x4B, 0x60),
21093ee1a2cSyangcong 	_INIT_DCS_CMD(0x4C, 0x91),
21193ee1a2cSyangcong 	_INIT_DCS_CMD(0x4D, 0x21),
21293ee1a2cSyangcong 	_INIT_DCS_CMD(0x4E, 0x43),
21393ee1a2cSyangcong 	_INIT_DCS_CMD(0x51, 0x12),
21493ee1a2cSyangcong 	_INIT_DCS_CMD(0x52, 0x34),
21593ee1a2cSyangcong 	_INIT_DCS_CMD(0x55, 0x82, 0x02),
21693ee1a2cSyangcong 	_INIT_DCS_CMD(0x56, 0x04),
21793ee1a2cSyangcong 	_INIT_DCS_CMD(0x58, 0x21),
21893ee1a2cSyangcong 	_INIT_DCS_CMD(0x59, 0x30),
21993ee1a2cSyangcong 	_INIT_DCS_CMD(0x5A, 0x60),
22093ee1a2cSyangcong 	_INIT_DCS_CMD(0x5B, 0x50),
22193ee1a2cSyangcong 	_INIT_DCS_CMD(0x5E, 0x00, 0x06),
22293ee1a2cSyangcong 	_INIT_DCS_CMD(0x5F, 0x00),
22393ee1a2cSyangcong 	_INIT_DCS_CMD(0x65, 0x82),
22493ee1a2cSyangcong 	_INIT_DCS_CMD(0x7E, 0x20),
22593ee1a2cSyangcong 	_INIT_DCS_CMD(0x7F, 0x3C),
22693ee1a2cSyangcong 	_INIT_DCS_CMD(0x82, 0x04),
22793ee1a2cSyangcong 	_INIT_DCS_CMD(0x97, 0xC0),
22842c632b0Syangcong 
22993ee1a2cSyangcong 	_INIT_DCS_CMD(0xB6, 0x05, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00),
23093ee1a2cSyangcong 	_INIT_DCS_CMD(0x91, 0x44),
23193ee1a2cSyangcong 	_INIT_DCS_CMD(0x92, 0xA9),
23293ee1a2cSyangcong 	_INIT_DCS_CMD(0x93, 0x1A),
23393ee1a2cSyangcong 	_INIT_DCS_CMD(0x94, 0x96),
23493ee1a2cSyangcong 	_INIT_DCS_CMD(0xD7, 0x55),
23593ee1a2cSyangcong 	_INIT_DCS_CMD(0xDA, 0x0A),
23693ee1a2cSyangcong 	_INIT_DCS_CMD(0xDE, 0x08),
23793ee1a2cSyangcong 	_INIT_DCS_CMD(0xDB, 0x05),
23893ee1a2cSyangcong 	_INIT_DCS_CMD(0xDC, 0xA9),
23993ee1a2cSyangcong 	_INIT_DCS_CMD(0xDD, 0x22),
24093ee1a2cSyangcong 
24193ee1a2cSyangcong 	_INIT_DCS_CMD(0xDF, 0x05),
24293ee1a2cSyangcong 	_INIT_DCS_CMD(0xE0, 0xA9),
24393ee1a2cSyangcong 	_INIT_DCS_CMD(0xE1, 0x05),
24493ee1a2cSyangcong 	_INIT_DCS_CMD(0xE2, 0xA9),
24593ee1a2cSyangcong 	_INIT_DCS_CMD(0xE3, 0x05),
24693ee1a2cSyangcong 	_INIT_DCS_CMD(0xE4, 0xA9),
24793ee1a2cSyangcong 	_INIT_DCS_CMD(0xE5, 0x05),
24893ee1a2cSyangcong 	_INIT_DCS_CMD(0xE6, 0xA9),
24993ee1a2cSyangcong 	_INIT_DCS_CMD(0x5C, 0x00),
25093ee1a2cSyangcong 	_INIT_DCS_CMD(0x5D, 0x00),
25193ee1a2cSyangcong 	_INIT_DCS_CMD(0x8D, 0x00),
25293ee1a2cSyangcong 	_INIT_DCS_CMD(0x8E, 0x00),
25393ee1a2cSyangcong 	_INIT_DCS_CMD(0xB5, 0x90),
25493ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x25),
25593ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
25693ee1a2cSyangcong 	_INIT_DCS_CMD(0x05, 0x00),
25793ee1a2cSyangcong 	_INIT_DCS_CMD(0x19, 0x07),
25893ee1a2cSyangcong 	_INIT_DCS_CMD(0x1F, 0x60),
25993ee1a2cSyangcong 	_INIT_DCS_CMD(0x20, 0x50),
26093ee1a2cSyangcong 	_INIT_DCS_CMD(0x26, 0x60),
26193ee1a2cSyangcong 	_INIT_DCS_CMD(0x27, 0x50),
26293ee1a2cSyangcong 	_INIT_DCS_CMD(0x33, 0x60),
26393ee1a2cSyangcong 	_INIT_DCS_CMD(0x34, 0x50),
26493ee1a2cSyangcong 	_INIT_DCS_CMD(0x3F, 0xE0),
26593ee1a2cSyangcong 	_INIT_DCS_CMD(0x40, 0x00),
26693ee1a2cSyangcong 	_INIT_DCS_CMD(0x44, 0x00),
26793ee1a2cSyangcong 	_INIT_DCS_CMD(0x45, 0x40),
26893ee1a2cSyangcong 	_INIT_DCS_CMD(0x48, 0x60),
26993ee1a2cSyangcong 	_INIT_DCS_CMD(0x49, 0x50),
27093ee1a2cSyangcong 	_INIT_DCS_CMD(0x5B, 0x00),
27193ee1a2cSyangcong 	_INIT_DCS_CMD(0x5C, 0x00),
27293ee1a2cSyangcong 	_INIT_DCS_CMD(0x5D, 0x00),
27393ee1a2cSyangcong 	_INIT_DCS_CMD(0x5E, 0xD0),
27493ee1a2cSyangcong 	_INIT_DCS_CMD(0x61, 0x60),
27593ee1a2cSyangcong 	_INIT_DCS_CMD(0x62, 0x50),
27693ee1a2cSyangcong 	_INIT_DCS_CMD(0xF1, 0x10),
27793ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x2A),
27893ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
27993ee1a2cSyangcong 
28093ee1a2cSyangcong 	_INIT_DCS_CMD(0x64, 0x16),
28193ee1a2cSyangcong 	_INIT_DCS_CMD(0x67, 0x16),
28293ee1a2cSyangcong 	_INIT_DCS_CMD(0x6A, 0x16),
28393ee1a2cSyangcong 
28493ee1a2cSyangcong 	_INIT_DCS_CMD(0x70, 0x30),
28593ee1a2cSyangcong 
28693ee1a2cSyangcong 	_INIT_DCS_CMD(0xA2, 0xF3),
28793ee1a2cSyangcong 	_INIT_DCS_CMD(0xA3, 0xFF),
28893ee1a2cSyangcong 	_INIT_DCS_CMD(0xA4, 0xFF),
28993ee1a2cSyangcong 	_INIT_DCS_CMD(0xA5, 0xFF),
29093ee1a2cSyangcong 
29193ee1a2cSyangcong 	_INIT_DCS_CMD(0xD6, 0x08),
29293ee1a2cSyangcong 
29393ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x26),
29493ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
29593ee1a2cSyangcong 	_INIT_DCS_CMD(0x00, 0xA1),
29693ee1a2cSyangcong 
29793ee1a2cSyangcong 	_INIT_DCS_CMD(0x02, 0x31),
29893ee1a2cSyangcong 	_INIT_DCS_CMD(0x04, 0x28),
29993ee1a2cSyangcong 	_INIT_DCS_CMD(0x06, 0x30),
30093ee1a2cSyangcong 	_INIT_DCS_CMD(0x0C, 0x16),
30193ee1a2cSyangcong 	_INIT_DCS_CMD(0x0D, 0x0D),
30293ee1a2cSyangcong 	_INIT_DCS_CMD(0x0F, 0x00),
30393ee1a2cSyangcong 	_INIT_DCS_CMD(0x11, 0x00),
30493ee1a2cSyangcong 	_INIT_DCS_CMD(0x12, 0x50),
30593ee1a2cSyangcong 	_INIT_DCS_CMD(0x13, 0x56),
30693ee1a2cSyangcong 	_INIT_DCS_CMD(0x14, 0x57),
30793ee1a2cSyangcong 	_INIT_DCS_CMD(0x15, 0x00),
30893ee1a2cSyangcong 	_INIT_DCS_CMD(0x16, 0x10),
30993ee1a2cSyangcong 	_INIT_DCS_CMD(0x17, 0xA0),
31093ee1a2cSyangcong 	_INIT_DCS_CMD(0x18, 0x86),
31193ee1a2cSyangcong 	_INIT_DCS_CMD(0x19, 0x0D),
31293ee1a2cSyangcong 	_INIT_DCS_CMD(0x1A, 0x7F),
31393ee1a2cSyangcong 	_INIT_DCS_CMD(0x1B, 0x0C),
31493ee1a2cSyangcong 	_INIT_DCS_CMD(0x1C, 0xBF),
31593ee1a2cSyangcong 	_INIT_DCS_CMD(0x22, 0x00),
31693ee1a2cSyangcong 	_INIT_DCS_CMD(0x23, 0x00),
31793ee1a2cSyangcong 	_INIT_DCS_CMD(0x2A, 0x0D),
31893ee1a2cSyangcong 	_INIT_DCS_CMD(0x2B, 0x7F),
31993ee1a2cSyangcong 
32093ee1a2cSyangcong 	_INIT_DCS_CMD(0x1D, 0x00),
32193ee1a2cSyangcong 	_INIT_DCS_CMD(0x1E, 0x65),
32293ee1a2cSyangcong 	_INIT_DCS_CMD(0x1F, 0x65),
32393ee1a2cSyangcong 	_INIT_DCS_CMD(0x24, 0x00),
32493ee1a2cSyangcong 	_INIT_DCS_CMD(0x25, 0x65),
32593ee1a2cSyangcong 	_INIT_DCS_CMD(0x2F, 0x05),
32693ee1a2cSyangcong 	_INIT_DCS_CMD(0x30, 0x65),
32793ee1a2cSyangcong 	_INIT_DCS_CMD(0x31, 0x05),
32893ee1a2cSyangcong 	_INIT_DCS_CMD(0x32, 0x7D),
32993ee1a2cSyangcong 	_INIT_DCS_CMD(0x39, 0x00),
33093ee1a2cSyangcong 	_INIT_DCS_CMD(0x3A, 0x65),
33193ee1a2cSyangcong 	_INIT_DCS_CMD(0x20, 0x01),
33293ee1a2cSyangcong 	_INIT_DCS_CMD(0x33, 0x11),
33393ee1a2cSyangcong 	_INIT_DCS_CMD(0x34, 0x78),
33493ee1a2cSyangcong 	_INIT_DCS_CMD(0x35, 0x16),
33593ee1a2cSyangcong 	_INIT_DCS_CMD(0xC8, 0x04),
33642c632b0Syangcong 	_INIT_DCS_CMD(0xC9, 0x9E),
33793ee1a2cSyangcong 	_INIT_DCS_CMD(0xCA, 0x4E),
33893ee1a2cSyangcong 	_INIT_DCS_CMD(0xCB, 0x00),
33993ee1a2cSyangcong 
34042c632b0Syangcong 	_INIT_DCS_CMD(0xA9, 0x49),
34142c632b0Syangcong 	_INIT_DCS_CMD(0xAA, 0x4B),
34242c632b0Syangcong 	_INIT_DCS_CMD(0xAB, 0x48),
34342c632b0Syangcong 	_INIT_DCS_CMD(0xAC, 0x43),
34442c632b0Syangcong 	_INIT_DCS_CMD(0xAD, 0x40),
34542c632b0Syangcong 	_INIT_DCS_CMD(0xAE, 0x50),
34642c632b0Syangcong 	_INIT_DCS_CMD(0xAF, 0x44),
34742c632b0Syangcong 	_INIT_DCS_CMD(0xB0, 0x54),
34842c632b0Syangcong 	_INIT_DCS_CMD(0xB1, 0x4E),
34942c632b0Syangcong 	_INIT_DCS_CMD(0xB2, 0x4D),
35042c632b0Syangcong 	_INIT_DCS_CMD(0xB3, 0x4C),
35142c632b0Syangcong 	_INIT_DCS_CMD(0xB4, 0x41),
35242c632b0Syangcong 	_INIT_DCS_CMD(0xB5, 0x47),
35342c632b0Syangcong 	_INIT_DCS_CMD(0xB6, 0x53),
35442c632b0Syangcong 	_INIT_DCS_CMD(0xB7, 0x3E),
35542c632b0Syangcong 	_INIT_DCS_CMD(0xB8, 0x51),
35642c632b0Syangcong 	_INIT_DCS_CMD(0xB9, 0x3C),
35742c632b0Syangcong 	_INIT_DCS_CMD(0xBA, 0x3B),
35842c632b0Syangcong 	_INIT_DCS_CMD(0xBB, 0x46),
35942c632b0Syangcong 	_INIT_DCS_CMD(0xBC, 0x45),
36042c632b0Syangcong 	_INIT_DCS_CMD(0xBD, 0x55),
36142c632b0Syangcong 	_INIT_DCS_CMD(0xBE, 0x3D),
36242c632b0Syangcong 	_INIT_DCS_CMD(0xBF, 0x3F),
36342c632b0Syangcong 	_INIT_DCS_CMD(0xC0, 0x52),
36442c632b0Syangcong 	_INIT_DCS_CMD(0xC1, 0x4A),
36542c632b0Syangcong 	_INIT_DCS_CMD(0xC2, 0x39),
36642c632b0Syangcong 	_INIT_DCS_CMD(0xC3, 0x4F),
36742c632b0Syangcong 	_INIT_DCS_CMD(0xC4, 0x3A),
36842c632b0Syangcong 	_INIT_DCS_CMD(0xC5, 0x42),
36993ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x27),
37093ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
37193ee1a2cSyangcong 
37293ee1a2cSyangcong 	_INIT_DCS_CMD(0x56, 0x06),
37393ee1a2cSyangcong 	_INIT_DCS_CMD(0x58, 0x80),
37493ee1a2cSyangcong 	_INIT_DCS_CMD(0x59, 0x75),
37593ee1a2cSyangcong 	_INIT_DCS_CMD(0x5A, 0x00),
37693ee1a2cSyangcong 	_INIT_DCS_CMD(0x5B, 0x02),
37793ee1a2cSyangcong 	_INIT_DCS_CMD(0x5C, 0x00),
37893ee1a2cSyangcong 	_INIT_DCS_CMD(0x5D, 0x00),
37993ee1a2cSyangcong 	_INIT_DCS_CMD(0x5E, 0x20),
38093ee1a2cSyangcong 	_INIT_DCS_CMD(0x5F, 0x10),
38193ee1a2cSyangcong 	_INIT_DCS_CMD(0x60, 0x00),
38293ee1a2cSyangcong 	_INIT_DCS_CMD(0x61, 0x2E),
38393ee1a2cSyangcong 	_INIT_DCS_CMD(0x62, 0x00),
38493ee1a2cSyangcong 	_INIT_DCS_CMD(0x63, 0x01),
38593ee1a2cSyangcong 	_INIT_DCS_CMD(0x64, 0x43),
38693ee1a2cSyangcong 	_INIT_DCS_CMD(0x65, 0x2D),
38793ee1a2cSyangcong 	_INIT_DCS_CMD(0x66, 0x00),
38893ee1a2cSyangcong 	_INIT_DCS_CMD(0x67, 0x01),
38993ee1a2cSyangcong 	_INIT_DCS_CMD(0x68, 0x44),
39093ee1a2cSyangcong 
39193ee1a2cSyangcong 	_INIT_DCS_CMD(0x00, 0x00),
39293ee1a2cSyangcong 	_INIT_DCS_CMD(0x78, 0x00),
39393ee1a2cSyangcong 	_INIT_DCS_CMD(0xC3, 0x00),
39493ee1a2cSyangcong 
39593ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x2A),
39693ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
39793ee1a2cSyangcong 
39893ee1a2cSyangcong 	_INIT_DCS_CMD(0x22, 0x2F),
39993ee1a2cSyangcong 	_INIT_DCS_CMD(0x23, 0x08),
40093ee1a2cSyangcong 
40193ee1a2cSyangcong 	_INIT_DCS_CMD(0x24, 0x00),
40293ee1a2cSyangcong 	_INIT_DCS_CMD(0x25, 0x65),
40393ee1a2cSyangcong 	_INIT_DCS_CMD(0x26, 0xF8),
40493ee1a2cSyangcong 	_INIT_DCS_CMD(0x27, 0x00),
40593ee1a2cSyangcong 	_INIT_DCS_CMD(0x28, 0x1A),
40693ee1a2cSyangcong 	_INIT_DCS_CMD(0x29, 0x00),
40793ee1a2cSyangcong 	_INIT_DCS_CMD(0x2A, 0x1A),
40893ee1a2cSyangcong 	_INIT_DCS_CMD(0x2B, 0x00),
40993ee1a2cSyangcong 	_INIT_DCS_CMD(0x2D, 0x1A),
41093ee1a2cSyangcong 
41193ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x23),
41293ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
41393ee1a2cSyangcong 
41493ee1a2cSyangcong 	_INIT_DCS_CMD(0x00, 0x80),
41593ee1a2cSyangcong 	_INIT_DCS_CMD(0x07, 0x00),
41693ee1a2cSyangcong 
41793ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0xE0),
41893ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
41993ee1a2cSyangcong 	_INIT_DCS_CMD(0x14, 0x60),
42093ee1a2cSyangcong 	_INIT_DCS_CMD(0x16, 0xC0),
42193ee1a2cSyangcong 
42293ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0xF0),
42393ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
42493ee1a2cSyangcong 	_INIT_DCS_CMD(0x3A, 0x08),
42593ee1a2cSyangcong 
42693ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x10),
42793ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
42893ee1a2cSyangcong 	_INIT_DCS_CMD(0xB9, 0x01),
42993ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x20),
43093ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
43193ee1a2cSyangcong 	_INIT_DCS_CMD(0x18, 0x40),
43293ee1a2cSyangcong 
43393ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x10),
43493ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
43593ee1a2cSyangcong 	_INIT_DCS_CMD(0xB9, 0x02),
43693ee1a2cSyangcong 	_INIT_DCS_CMD(0x35, 0x00),
43793ee1a2cSyangcong 	_INIT_DCS_CMD(0x51, 0x00, 0xFF),
43893ee1a2cSyangcong 	_INIT_DCS_CMD(0x53, 0x24),
43993ee1a2cSyangcong 	_INIT_DCS_CMD(0x55, 0x00),
44093ee1a2cSyangcong 	_INIT_DCS_CMD(0xBB, 0x13),
44193ee1a2cSyangcong 	_INIT_DCS_CMD(0x3B, 0x03, 0x96, 0x1A, 0x04, 0x04),
44293ee1a2cSyangcong 	_INIT_DELAY_CMD(100),
44393ee1a2cSyangcong 	_INIT_DCS_CMD(0x11),
44493ee1a2cSyangcong 	_INIT_DELAY_CMD(200),
44593ee1a2cSyangcong 	_INIT_DCS_CMD(0x29),
44693ee1a2cSyangcong 	_INIT_DELAY_CMD(100),
44793ee1a2cSyangcong 	{},
44893ee1a2cSyangcong };
44993ee1a2cSyangcong 
45042c632b0Syangcong static const struct panel_init_cmd inx_hj110iz_init_cmd[] = {
45193ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x20),
45293ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
45393ee1a2cSyangcong 	_INIT_DCS_CMD(0x05, 0xD1),
454519ce291SCong Yang 	_INIT_DCS_CMD(0x06, 0xC0),
455519ce291SCong Yang 	_INIT_DCS_CMD(0x07, 0x87),
45693ee1a2cSyangcong 	_INIT_DCS_CMD(0x08, 0x4B),
457519ce291SCong Yang 
458519ce291SCong Yang 	_INIT_DCS_CMD(0x0D, 0x63),
45993ee1a2cSyangcong 	_INIT_DCS_CMD(0x0E, 0x91),
46093ee1a2cSyangcong 	_INIT_DCS_CMD(0x0F, 0x69),
461519ce291SCong Yang 	_INIT_DCS_CMD(0x94, 0x00),
46242c632b0Syangcong 	_INIT_DCS_CMD(0x95, 0xF5),
46342c632b0Syangcong 	_INIT_DCS_CMD(0x96, 0xF5),
46442c632b0Syangcong 	_INIT_DCS_CMD(0x9D, 0x00),
46542c632b0Syangcong 	_INIT_DCS_CMD(0x9E, 0x00),
46693ee1a2cSyangcong 	_INIT_DCS_CMD(0x69, 0x98),
46793ee1a2cSyangcong 	_INIT_DCS_CMD(0x75, 0xA2),
46893ee1a2cSyangcong 	_INIT_DCS_CMD(0x77, 0xB3),
469519ce291SCong Yang 
470519ce291SCong Yang 	_INIT_DCS_CMD(0x58, 0x43),
47193ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x24),
47293ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
47393ee1a2cSyangcong 	_INIT_DCS_CMD(0x91, 0x44),
474519ce291SCong Yang 	_INIT_DCS_CMD(0x92, 0x4C),
475519ce291SCong Yang 	_INIT_DCS_CMD(0x94, 0x86),
47693ee1a2cSyangcong 	_INIT_DCS_CMD(0x60, 0x96),
47793ee1a2cSyangcong 	_INIT_DCS_CMD(0x61, 0xD0),
47893ee1a2cSyangcong 	_INIT_DCS_CMD(0x63, 0x70),
479519ce291SCong Yang 	_INIT_DCS_CMD(0xC2, 0xCA),
480519ce291SCong Yang 
48193ee1a2cSyangcong 	_INIT_DCS_CMD(0x00, 0x03),
48293ee1a2cSyangcong 	_INIT_DCS_CMD(0x01, 0x03),
48393ee1a2cSyangcong 	_INIT_DCS_CMD(0x02, 0x03),
484519ce291SCong Yang 	_INIT_DCS_CMD(0x03, 0x29),
485519ce291SCong Yang 	_INIT_DCS_CMD(0x04, 0x22),
486519ce291SCong Yang 	_INIT_DCS_CMD(0x05, 0x22),
487519ce291SCong Yang 	_INIT_DCS_CMD(0x06, 0x0B),
488519ce291SCong Yang 	_INIT_DCS_CMD(0x07, 0x1D),
489519ce291SCong Yang 	_INIT_DCS_CMD(0x08, 0x1C),
490519ce291SCong Yang 	_INIT_DCS_CMD(0x09, 0x05),
491519ce291SCong Yang 	_INIT_DCS_CMD(0x0A, 0x08),
492519ce291SCong Yang 	_INIT_DCS_CMD(0x0B, 0x09),
493519ce291SCong Yang 	_INIT_DCS_CMD(0x0C, 0x0A),
494519ce291SCong Yang 	_INIT_DCS_CMD(0x0D, 0x0C),
495519ce291SCong Yang 	_INIT_DCS_CMD(0x0E, 0x0D),
496519ce291SCong Yang 	_INIT_DCS_CMD(0x0F, 0x0E),
497519ce291SCong Yang 	_INIT_DCS_CMD(0x10, 0x0F),
498519ce291SCong Yang 	_INIT_DCS_CMD(0x11, 0x10),
499519ce291SCong Yang 	_INIT_DCS_CMD(0x12, 0x11),
50093ee1a2cSyangcong 	_INIT_DCS_CMD(0x13, 0x04),
501519ce291SCong Yang 	_INIT_DCS_CMD(0x14, 0x00),
50293ee1a2cSyangcong 	_INIT_DCS_CMD(0x15, 0x03),
50393ee1a2cSyangcong 	_INIT_DCS_CMD(0x16, 0x03),
50493ee1a2cSyangcong 	_INIT_DCS_CMD(0x17, 0x03),
50593ee1a2cSyangcong 	_INIT_DCS_CMD(0x18, 0x03),
506519ce291SCong Yang 	_INIT_DCS_CMD(0x19, 0x29),
507519ce291SCong Yang 	_INIT_DCS_CMD(0x1A, 0x22),
508519ce291SCong Yang 	_INIT_DCS_CMD(0x1B, 0x22),
509519ce291SCong Yang 	_INIT_DCS_CMD(0x1C, 0x0B),
510519ce291SCong Yang 	_INIT_DCS_CMD(0x1D, 0x1D),
511519ce291SCong Yang 	_INIT_DCS_CMD(0x1E, 0x1C),
512519ce291SCong Yang 	_INIT_DCS_CMD(0x1F, 0x05),
513519ce291SCong Yang 	_INIT_DCS_CMD(0x20, 0x08),
514519ce291SCong Yang 	_INIT_DCS_CMD(0x21, 0x09),
515519ce291SCong Yang 	_INIT_DCS_CMD(0x22, 0x0A),
516519ce291SCong Yang 	_INIT_DCS_CMD(0x23, 0x0C),
517519ce291SCong Yang 	_INIT_DCS_CMD(0x24, 0x0D),
518519ce291SCong Yang 	_INIT_DCS_CMD(0x25, 0x0E),
519519ce291SCong Yang 	_INIT_DCS_CMD(0x26, 0x0F),
520519ce291SCong Yang 	_INIT_DCS_CMD(0x27, 0x10),
521519ce291SCong Yang 	_INIT_DCS_CMD(0x28, 0x11),
52293ee1a2cSyangcong 	_INIT_DCS_CMD(0x29, 0x04),
523519ce291SCong Yang 	_INIT_DCS_CMD(0x2A, 0x00),
52493ee1a2cSyangcong 	_INIT_DCS_CMD(0x2B, 0x03),
52593ee1a2cSyangcong 
526519ce291SCong Yang 	_INIT_DCS_CMD(0x2F, 0x0A),
527519ce291SCong Yang 	_INIT_DCS_CMD(0x30, 0x35),
528519ce291SCong Yang 	_INIT_DCS_CMD(0x37, 0xA7),
52993ee1a2cSyangcong 	_INIT_DCS_CMD(0x39, 0x00),
530519ce291SCong Yang 	_INIT_DCS_CMD(0x3A, 0x46),
531519ce291SCong Yang 	_INIT_DCS_CMD(0x3B, 0x32),
532519ce291SCong Yang 	_INIT_DCS_CMD(0x3D, 0x12),
533519ce291SCong Yang 
534519ce291SCong Yang 	_INIT_DCS_CMD(0x3F, 0x33),
535519ce291SCong Yang 	_INIT_DCS_CMD(0x40, 0x31),
536519ce291SCong Yang 	_INIT_DCS_CMD(0x41, 0x40),
537519ce291SCong Yang 	_INIT_DCS_CMD(0x42, 0x42),
538519ce291SCong Yang 	_INIT_DCS_CMD(0x47, 0x77),
539519ce291SCong Yang 	_INIT_DCS_CMD(0x48, 0x77),
540519ce291SCong Yang 	_INIT_DCS_CMD(0x4A, 0x45),
541519ce291SCong Yang 	_INIT_DCS_CMD(0x4B, 0x45),
542519ce291SCong Yang 	_INIT_DCS_CMD(0x4C, 0x14),
54393ee1a2cSyangcong 
54493ee1a2cSyangcong 	_INIT_DCS_CMD(0x4D, 0x21),
54593ee1a2cSyangcong 	_INIT_DCS_CMD(0x4E, 0x43),
54693ee1a2cSyangcong 	_INIT_DCS_CMD(0x4F, 0x65),
547519ce291SCong Yang 	_INIT_DCS_CMD(0x55, 0x06),
548519ce291SCong Yang 	_INIT_DCS_CMD(0x56, 0x06),
54993ee1a2cSyangcong 	_INIT_DCS_CMD(0x58, 0x21),
550519ce291SCong Yang 	_INIT_DCS_CMD(0x59, 0x70),
551519ce291SCong Yang 	_INIT_DCS_CMD(0x5A, 0x46),
552519ce291SCong Yang 	_INIT_DCS_CMD(0x5B, 0x32),
553519ce291SCong Yang 	_INIT_DCS_CMD(0x5C, 0x88),
554519ce291SCong Yang 	_INIT_DCS_CMD(0x5E, 0x00, 0x00),
55593ee1a2cSyangcong 	_INIT_DCS_CMD(0x5F, 0x00),
55693ee1a2cSyangcong 
557519ce291SCong Yang 	_INIT_DCS_CMD(0x7A, 0xFF),
558519ce291SCong Yang 	_INIT_DCS_CMD(0x7B, 0xFF),
55993ee1a2cSyangcong 	_INIT_DCS_CMD(0x7C, 0x00),
56093ee1a2cSyangcong 	_INIT_DCS_CMD(0x7D, 0x00),
56193ee1a2cSyangcong 	_INIT_DCS_CMD(0x7E, 0x20),
56293ee1a2cSyangcong 	_INIT_DCS_CMD(0x7F, 0x3C),
56393ee1a2cSyangcong 	_INIT_DCS_CMD(0x80, 0x00),
56493ee1a2cSyangcong 	_INIT_DCS_CMD(0x81, 0x00),
56593ee1a2cSyangcong 	_INIT_DCS_CMD(0x82, 0x08),
56693ee1a2cSyangcong 	_INIT_DCS_CMD(0x97, 0x02),
56793ee1a2cSyangcong 	_INIT_DCS_CMD(0xC5, 0x10),
568519ce291SCong Yang 
569519ce291SCong Yang 	_INIT_DCS_CMD(0xD7, 0x55),
570519ce291SCong Yang 	_INIT_DCS_CMD(0xD8, 0x55),
571519ce291SCong Yang 	_INIT_DCS_CMD(0xD9, 0x23),
57293ee1a2cSyangcong 	_INIT_DCS_CMD(0xDA, 0x05),
57393ee1a2cSyangcong 	_INIT_DCS_CMD(0xDB, 0x01),
574519ce291SCong Yang 	_INIT_DCS_CMD(0xDC, 0x65),
57593ee1a2cSyangcong 	_INIT_DCS_CMD(0xDD, 0x55),
57693ee1a2cSyangcong 	_INIT_DCS_CMD(0xDE, 0x27),
57793ee1a2cSyangcong 	_INIT_DCS_CMD(0xDF, 0x01),
578519ce291SCong Yang 	_INIT_DCS_CMD(0xE0, 0x65),
57993ee1a2cSyangcong 	_INIT_DCS_CMD(0xE1, 0x01),
580519ce291SCong Yang 	_INIT_DCS_CMD(0xE2, 0x65),
58193ee1a2cSyangcong 	_INIT_DCS_CMD(0xE3, 0x01),
582519ce291SCong Yang 	_INIT_DCS_CMD(0xE4, 0x65),
58393ee1a2cSyangcong 	_INIT_DCS_CMD(0xE5, 0x01),
584519ce291SCong Yang 	_INIT_DCS_CMD(0xE6, 0x65),
58593ee1a2cSyangcong 	_INIT_DCS_CMD(0xE7, 0x00),
58693ee1a2cSyangcong 	_INIT_DCS_CMD(0xE8, 0x00),
58793ee1a2cSyangcong 	_INIT_DCS_CMD(0xE9, 0x01),
588519ce291SCong Yang 	_INIT_DCS_CMD(0xEA, 0x65),
58993ee1a2cSyangcong 	_INIT_DCS_CMD(0xEB, 0x01),
590519ce291SCong Yang 	_INIT_DCS_CMD(0xEE, 0x65),
59193ee1a2cSyangcong 	_INIT_DCS_CMD(0xEF, 0x01),
592519ce291SCong Yang 	_INIT_DCS_CMD(0xF0, 0x65),
59342c632b0Syangcong 	_INIT_DCS_CMD(0xB6, 0x05, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00),
594519ce291SCong Yang 
59593ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x25),
596519ce291SCong Yang 
59793ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
59893ee1a2cSyangcong 	_INIT_DCS_CMD(0x05, 0x00),
59993ee1a2cSyangcong 	_INIT_DCS_CMD(0xF1, 0x10),
600519ce291SCong Yang 
60193ee1a2cSyangcong 	_INIT_DCS_CMD(0x1E, 0x00),
602519ce291SCong Yang 	_INIT_DCS_CMD(0x1F, 0x46),
603519ce291SCong Yang 	_INIT_DCS_CMD(0x20, 0x32),
604519ce291SCong Yang 
60593ee1a2cSyangcong 	_INIT_DCS_CMD(0x25, 0x00),
606519ce291SCong Yang 	_INIT_DCS_CMD(0x26, 0x46),
607519ce291SCong Yang 	_INIT_DCS_CMD(0x27, 0x32),
608519ce291SCong Yang 
60993ee1a2cSyangcong 	_INIT_DCS_CMD(0x3F, 0x80),
61093ee1a2cSyangcong 	_INIT_DCS_CMD(0x40, 0x00),
61193ee1a2cSyangcong 	_INIT_DCS_CMD(0x43, 0x00),
61293ee1a2cSyangcong 
613519ce291SCong Yang 	_INIT_DCS_CMD(0x44, 0x46),
614519ce291SCong Yang 	_INIT_DCS_CMD(0x45, 0x46),
61593ee1a2cSyangcong 
616519ce291SCong Yang 	_INIT_DCS_CMD(0x48, 0x46),
617519ce291SCong Yang 	_INIT_DCS_CMD(0x49, 0x32),
618519ce291SCong Yang 
61993ee1a2cSyangcong 	_INIT_DCS_CMD(0x5B, 0x80),
620519ce291SCong Yang 
62193ee1a2cSyangcong 	_INIT_DCS_CMD(0x5C, 0x00),
622519ce291SCong Yang 	_INIT_DCS_CMD(0x5D, 0x46),
623519ce291SCong Yang 	_INIT_DCS_CMD(0x5E, 0x32),
624519ce291SCong Yang 
625519ce291SCong Yang 	_INIT_DCS_CMD(0x5F, 0x46),
626519ce291SCong Yang 	_INIT_DCS_CMD(0x60, 0x32),
627519ce291SCong Yang 
628519ce291SCong Yang 	_INIT_DCS_CMD(0x61, 0x46),
629519ce291SCong Yang 	_INIT_DCS_CMD(0x62, 0x32),
630519ce291SCong Yang 	_INIT_DCS_CMD(0x68, 0x0C),
631519ce291SCong Yang 
632519ce291SCong Yang 	_INIT_DCS_CMD(0x6C, 0x0D),
633519ce291SCong Yang 	_INIT_DCS_CMD(0x6E, 0x0D),
634519ce291SCong Yang 	_INIT_DCS_CMD(0x78, 0x00),
635519ce291SCong Yang 	_INIT_DCS_CMD(0x79, 0xC5),
636519ce291SCong Yang 	_INIT_DCS_CMD(0x7A, 0x0C),
637519ce291SCong Yang 	_INIT_DCS_CMD(0x7B, 0xB0),
638519ce291SCong Yang 
63993ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x26),
64093ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
64193ee1a2cSyangcong 
64293ee1a2cSyangcong 	_INIT_DCS_CMD(0x00, 0xA1),
64393ee1a2cSyangcong 	_INIT_DCS_CMD(0x02, 0x31),
644519ce291SCong Yang 	_INIT_DCS_CMD(0x0A, 0xF4),
645519ce291SCong Yang 	_INIT_DCS_CMD(0x04, 0x50),
64693ee1a2cSyangcong 	_INIT_DCS_CMD(0x06, 0x30),
64793ee1a2cSyangcong 	_INIT_DCS_CMD(0x0C, 0x16),
64893ee1a2cSyangcong 	_INIT_DCS_CMD(0x0D, 0x0D),
64993ee1a2cSyangcong 	_INIT_DCS_CMD(0x0F, 0x00),
65093ee1a2cSyangcong 	_INIT_DCS_CMD(0x11, 0x00),
65193ee1a2cSyangcong 	_INIT_DCS_CMD(0x12, 0x50),
652519ce291SCong Yang 	_INIT_DCS_CMD(0x13, 0x40),
653519ce291SCong Yang 	_INIT_DCS_CMD(0x14, 0x58),
65493ee1a2cSyangcong 	_INIT_DCS_CMD(0x15, 0x00),
65593ee1a2cSyangcong 	_INIT_DCS_CMD(0x16, 0x10),
65693ee1a2cSyangcong 	_INIT_DCS_CMD(0x17, 0xA0),
65793ee1a2cSyangcong 	_INIT_DCS_CMD(0x18, 0x86),
65893ee1a2cSyangcong 	_INIT_DCS_CMD(0x22, 0x00),
65993ee1a2cSyangcong 	_INIT_DCS_CMD(0x23, 0x00),
660519ce291SCong Yang 
661519ce291SCong Yang 	_INIT_DCS_CMD(0x19, 0x0E),
662519ce291SCong Yang 	_INIT_DCS_CMD(0x1A, 0x31),
663519ce291SCong Yang 	_INIT_DCS_CMD(0x1B, 0x0D),
664519ce291SCong Yang 	_INIT_DCS_CMD(0x1C, 0x29),
665519ce291SCong Yang 	_INIT_DCS_CMD(0x2A, 0x0E),
666519ce291SCong Yang 	_INIT_DCS_CMD(0x2B, 0x31),
66793ee1a2cSyangcong 
66893ee1a2cSyangcong 	_INIT_DCS_CMD(0x1D, 0x00),
669519ce291SCong Yang 	_INIT_DCS_CMD(0x1E, 0x62),
670519ce291SCong Yang 	_INIT_DCS_CMD(0x1F, 0x62),
67193ee1a2cSyangcong 
672519ce291SCong Yang 	_INIT_DCS_CMD(0x2F, 0x06),
673519ce291SCong Yang 	_INIT_DCS_CMD(0x30, 0x62),
674519ce291SCong Yang 	_INIT_DCS_CMD(0x31, 0x06),
675519ce291SCong Yang 	_INIT_DCS_CMD(0x32, 0x7F),
676519ce291SCong Yang 	_INIT_DCS_CMD(0x33, 0x11),
677519ce291SCong Yang 	_INIT_DCS_CMD(0x34, 0x89),
678519ce291SCong Yang 	_INIT_DCS_CMD(0x35, 0x67),
67993ee1a2cSyangcong 
680519ce291SCong Yang 	_INIT_DCS_CMD(0x39, 0x0B),
681519ce291SCong Yang 	_INIT_DCS_CMD(0x3A, 0x62),
68293ee1a2cSyangcong 	_INIT_DCS_CMD(0x3B, 0x06),
68393ee1a2cSyangcong 
68493ee1a2cSyangcong 	_INIT_DCS_CMD(0xC8, 0x04),
685519ce291SCong Yang 	_INIT_DCS_CMD(0xC9, 0x89),
68693ee1a2cSyangcong 	_INIT_DCS_CMD(0xCA, 0x4E),
68793ee1a2cSyangcong 	_INIT_DCS_CMD(0xCB, 0x00),
688519ce291SCong Yang 	_INIT_DCS_CMD(0xA9, 0x3F),
689519ce291SCong Yang 	_INIT_DCS_CMD(0xAA, 0x3E),
690519ce291SCong Yang 	_INIT_DCS_CMD(0xAB, 0x3D),
691519ce291SCong Yang 	_INIT_DCS_CMD(0xAC, 0x3C),
692519ce291SCong Yang 	_INIT_DCS_CMD(0xAD, 0x3B),
693519ce291SCong Yang 	_INIT_DCS_CMD(0xAE, 0x3A),
694519ce291SCong Yang 	_INIT_DCS_CMD(0xAF, 0x39),
695519ce291SCong Yang 	_INIT_DCS_CMD(0xB0, 0x38),
69693ee1a2cSyangcong 
69793ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x27),
69893ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
699519ce291SCong Yang 
700519ce291SCong Yang 	_INIT_DCS_CMD(0xD0, 0x11),
701519ce291SCong Yang 	_INIT_DCS_CMD(0xD1, 0x54),
702519ce291SCong Yang 	_INIT_DCS_CMD(0xDE, 0x43),
703519ce291SCong Yang 	_INIT_DCS_CMD(0xDF, 0x02),
704519ce291SCong Yang 
70593ee1a2cSyangcong 	_INIT_DCS_CMD(0xC0, 0x18),
70693ee1a2cSyangcong 	_INIT_DCS_CMD(0xC1, 0x00),
70793ee1a2cSyangcong 	_INIT_DCS_CMD(0xC2, 0x00),
708519ce291SCong Yang 	_INIT_DCS_CMD(0x00, 0x00),
709519ce291SCong Yang 	_INIT_DCS_CMD(0xC3, 0x00),
71093ee1a2cSyangcong 	_INIT_DCS_CMD(0x56, 0x06),
711519ce291SCong Yang 
71293ee1a2cSyangcong 	_INIT_DCS_CMD(0x58, 0x80),
713519ce291SCong Yang 	_INIT_DCS_CMD(0x59, 0x78),
71493ee1a2cSyangcong 	_INIT_DCS_CMD(0x5A, 0x00),
715519ce291SCong Yang 	_INIT_DCS_CMD(0x5B, 0x18),
71693ee1a2cSyangcong 	_INIT_DCS_CMD(0x5C, 0x00),
717519ce291SCong Yang 	_INIT_DCS_CMD(0x5D, 0x01),
71893ee1a2cSyangcong 	_INIT_DCS_CMD(0x5E, 0x20),
71993ee1a2cSyangcong 	_INIT_DCS_CMD(0x5F, 0x10),
72093ee1a2cSyangcong 	_INIT_DCS_CMD(0x60, 0x00),
721519ce291SCong Yang 	_INIT_DCS_CMD(0x61, 0x1C),
72293ee1a2cSyangcong 	_INIT_DCS_CMD(0x62, 0x00),
72393ee1a2cSyangcong 	_INIT_DCS_CMD(0x63, 0x01),
724519ce291SCong Yang 	_INIT_DCS_CMD(0x64, 0x44),
725519ce291SCong Yang 	_INIT_DCS_CMD(0x65, 0x1B),
72693ee1a2cSyangcong 	_INIT_DCS_CMD(0x66, 0x00),
72793ee1a2cSyangcong 	_INIT_DCS_CMD(0x67, 0x01),
728519ce291SCong Yang 	_INIT_DCS_CMD(0x68, 0x44),
729519ce291SCong Yang 
73093ee1a2cSyangcong 	_INIT_DCS_CMD(0x98, 0x01),
73193ee1a2cSyangcong 	_INIT_DCS_CMD(0xB4, 0x03),
732519ce291SCong Yang 	_INIT_DCS_CMD(0x9B, 0xBE),
733519ce291SCong Yang 
734519ce291SCong Yang 	_INIT_DCS_CMD(0xAB, 0x14),
735519ce291SCong Yang 	_INIT_DCS_CMD(0xBC, 0x08),
73693ee1a2cSyangcong 	_INIT_DCS_CMD(0xBD, 0x28),
73793ee1a2cSyangcong 
73893ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x2A),
73993ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
74093ee1a2cSyangcong 	_INIT_DCS_CMD(0x22, 0x2F),
74193ee1a2cSyangcong 	_INIT_DCS_CMD(0x23, 0x08),
74293ee1a2cSyangcong 
74393ee1a2cSyangcong 	_INIT_DCS_CMD(0x24, 0x00),
744519ce291SCong Yang 	_INIT_DCS_CMD(0x25, 0x62),
74593ee1a2cSyangcong 	_INIT_DCS_CMD(0x26, 0xF8),
74693ee1a2cSyangcong 	_INIT_DCS_CMD(0x27, 0x00),
74793ee1a2cSyangcong 	_INIT_DCS_CMD(0x28, 0x1A),
74893ee1a2cSyangcong 	_INIT_DCS_CMD(0x29, 0x00),
74993ee1a2cSyangcong 	_INIT_DCS_CMD(0x2A, 0x1A),
75093ee1a2cSyangcong 	_INIT_DCS_CMD(0x2B, 0x00),
75193ee1a2cSyangcong 	_INIT_DCS_CMD(0x2D, 0x1A),
75293ee1a2cSyangcong 
75393ee1a2cSyangcong 	_INIT_DCS_CMD(0x64, 0x96),
754519ce291SCong Yang 	_INIT_DCS_CMD(0x65, 0x10),
75593ee1a2cSyangcong 	_INIT_DCS_CMD(0x66, 0x00),
756519ce291SCong Yang 	_INIT_DCS_CMD(0x67, 0x96),
757519ce291SCong Yang 	_INIT_DCS_CMD(0x68, 0x10),
758519ce291SCong Yang 	_INIT_DCS_CMD(0x69, 0x00),
75993ee1a2cSyangcong 	_INIT_DCS_CMD(0x6A, 0x96),
760519ce291SCong Yang 	_INIT_DCS_CMD(0x6B, 0x10),
76193ee1a2cSyangcong 	_INIT_DCS_CMD(0x6C, 0x00),
76293ee1a2cSyangcong 	_INIT_DCS_CMD(0x70, 0x92),
763519ce291SCong Yang 	_INIT_DCS_CMD(0x71, 0x10),
76493ee1a2cSyangcong 	_INIT_DCS_CMD(0x72, 0x00),
765519ce291SCong Yang 	_INIT_DCS_CMD(0x79, 0x96),
766519ce291SCong Yang 	_INIT_DCS_CMD(0x7A, 0x10),
767519ce291SCong Yang 	_INIT_DCS_CMD(0x88, 0x96),
768519ce291SCong Yang 	_INIT_DCS_CMD(0x89, 0x10),
769519ce291SCong Yang 
770519ce291SCong Yang 	_INIT_DCS_CMD(0xA2, 0x3F),
77193ee1a2cSyangcong 	_INIT_DCS_CMD(0xA3, 0x30),
77293ee1a2cSyangcong 	_INIT_DCS_CMD(0xA4, 0xC0),
773519ce291SCong Yang 	_INIT_DCS_CMD(0xA5, 0x03),
774519ce291SCong Yang 
77593ee1a2cSyangcong 	_INIT_DCS_CMD(0xE8, 0x00),
776519ce291SCong Yang 
77742c632b0Syangcong 	_INIT_DCS_CMD(0x97, 0x3C),
77842c632b0Syangcong 	_INIT_DCS_CMD(0x98, 0x02),
77942c632b0Syangcong 	_INIT_DCS_CMD(0x99, 0x95),
78042c632b0Syangcong 	_INIT_DCS_CMD(0x9A, 0x06),
78142c632b0Syangcong 	_INIT_DCS_CMD(0x9B, 0x00),
78242c632b0Syangcong 	_INIT_DCS_CMD(0x9C, 0x0B),
78342c632b0Syangcong 	_INIT_DCS_CMD(0x9D, 0x0A),
78442c632b0Syangcong 	_INIT_DCS_CMD(0x9E, 0x90),
785519ce291SCong Yang 
786519ce291SCong Yang 	_INIT_DCS_CMD(0xFF, 0x25),
787519ce291SCong Yang 	_INIT_DCS_CMD(0x13, 0x02),
788519ce291SCong Yang 	_INIT_DCS_CMD(0x14, 0xD7),
789519ce291SCong Yang 	_INIT_DCS_CMD(0xDB, 0x02),
790519ce291SCong Yang 	_INIT_DCS_CMD(0xDC, 0xD7),
791519ce291SCong Yang 	_INIT_DCS_CMD(0x17, 0xCF),
792519ce291SCong Yang 	_INIT_DCS_CMD(0x19, 0x0F),
793519ce291SCong Yang 	_INIT_DCS_CMD(0x1B, 0x5B),
794519ce291SCong Yang 
795519ce291SCong Yang 	_INIT_DCS_CMD(0xFF, 0x20),
796519ce291SCong Yang 
797519ce291SCong Yang 	_INIT_DCS_CMD(0xB0, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x24, 0x00, 0x38, 0x00, 0x4C, 0x00, 0x5E, 0x00, 0x6F, 0x00, 0x7E),
798519ce291SCong Yang 	_INIT_DCS_CMD(0xB1, 0x00, 0x8C, 0x00, 0xBE, 0x00, 0xE5, 0x01, 0x27, 0x01, 0x58, 0x01, 0xA8, 0x01, 0xE8, 0x01, 0xEA),
799519ce291SCong Yang 	_INIT_DCS_CMD(0xB2, 0x02, 0x28, 0x02, 0x71, 0x02, 0x9E, 0x02, 0xDA, 0x03, 0x00, 0x03, 0x31, 0x03, 0x40, 0x03, 0x51),
800519ce291SCong Yang 	_INIT_DCS_CMD(0xB3, 0x03, 0x62, 0x03, 0x75, 0x03, 0x89, 0x03, 0x9C, 0x03, 0xAA, 0x03, 0xB2),
801519ce291SCong Yang 
802519ce291SCong Yang 	_INIT_DCS_CMD(0xB4, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x27, 0x00, 0x3D, 0x00, 0x52, 0x00, 0x64, 0x00, 0x75, 0x00, 0x84),
803519ce291SCong Yang 	_INIT_DCS_CMD(0xB5, 0x00, 0x93, 0x00, 0xC5, 0x00, 0xEC, 0x01, 0x2C, 0x01, 0x5D, 0x01, 0xAC, 0x01, 0xEC, 0x01, 0xEE),
804519ce291SCong Yang 	_INIT_DCS_CMD(0xB6, 0x02, 0x2B, 0x02, 0x73, 0x02, 0xA0, 0x02, 0xDB, 0x03, 0x01, 0x03, 0x31, 0x03, 0x41, 0x03, 0x51),
805519ce291SCong Yang 	_INIT_DCS_CMD(0xB7, 0x03, 0x63, 0x03, 0x75, 0x03, 0x89, 0x03, 0x9C, 0x03, 0xAA, 0x03, 0xB2),
806519ce291SCong Yang 
807519ce291SCong Yang 	_INIT_DCS_CMD(0xB8, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x2A, 0x00, 0x40, 0x00, 0x56, 0x00, 0x68, 0x00, 0x7A, 0x00, 0x89),
808519ce291SCong Yang 	_INIT_DCS_CMD(0xB9, 0x00, 0x98, 0x00, 0xC9, 0x00, 0xF1, 0x01, 0x30, 0x01, 0x61, 0x01, 0xB0, 0x01, 0xEF, 0x01, 0xF1),
809519ce291SCong Yang 	_INIT_DCS_CMD(0xBA, 0x02, 0x2E, 0x02, 0x76, 0x02, 0xA3, 0x02, 0xDD, 0x03, 0x02, 0x03, 0x32, 0x03, 0x42, 0x03, 0x53),
810519ce291SCong Yang 	_INIT_DCS_CMD(0xBB, 0x03, 0x66, 0x03, 0x75, 0x03, 0x89, 0x03, 0x9C, 0x03, 0xAA, 0x03, 0xB2),
811519ce291SCong Yang 
812519ce291SCong Yang 	_INIT_DCS_CMD(0xFF, 0x21),
813519ce291SCong Yang 	_INIT_DCS_CMD(0xB0, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x24, 0x00, 0x38, 0x00, 0x4C, 0x00, 0x5E, 0x00, 0x6F, 0x00, 0x7E),
814519ce291SCong Yang 	_INIT_DCS_CMD(0xB1, 0x00, 0x8C, 0x00, 0xBE, 0x00, 0xE5, 0x01, 0x27, 0x01, 0x58, 0x01, 0xA8, 0x01, 0xE8, 0x01, 0xEA),
815519ce291SCong Yang 	_INIT_DCS_CMD(0xB2, 0x02, 0x28, 0x02, 0x71, 0x02, 0x9E, 0x02, 0xDA, 0x03, 0x00, 0x03, 0x31, 0x03, 0x40, 0x03, 0x51),
816519ce291SCong Yang 	_INIT_DCS_CMD(0xB3, 0x03, 0x62, 0x03, 0x77, 0x03, 0x90, 0x03, 0xAC, 0x03, 0xCA, 0x03, 0xDA),
817519ce291SCong Yang 
818519ce291SCong Yang 	_INIT_DCS_CMD(0xB4, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x27, 0x00, 0x3D, 0x00, 0x52, 0x00, 0x64, 0x00, 0x75, 0x00, 0x84),
819519ce291SCong Yang 	_INIT_DCS_CMD(0xB5, 0x00, 0x93, 0x00, 0xC5, 0x00, 0xEC, 0x01, 0x2C, 0x01, 0x5D, 0x01, 0xAC, 0x01, 0xEC, 0x01, 0xEE),
820519ce291SCong Yang 	_INIT_DCS_CMD(0xB6, 0x02, 0x2B, 0x02, 0x73, 0x02, 0xA0, 0x02, 0xDB, 0x03, 0x01, 0x03, 0x31, 0x03, 0x41, 0x03, 0x51),
821519ce291SCong Yang 	_INIT_DCS_CMD(0xB7, 0x03, 0x63, 0x03, 0x77, 0x03, 0x90, 0x03, 0xAC, 0x03, 0xCA, 0x03, 0xDA),
822519ce291SCong Yang 
823519ce291SCong Yang 	_INIT_DCS_CMD(0xB8, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x2A, 0x00, 0x40, 0x00, 0x56, 0x00, 0x68, 0x00, 0x7A, 0x00, 0x89),
824519ce291SCong Yang 	_INIT_DCS_CMD(0xB9, 0x00, 0x98, 0x00, 0xC9, 0x00, 0xF1, 0x01, 0x30, 0x01, 0x61, 0x01, 0xB0, 0x01, 0xEF, 0x01, 0xF1),
825519ce291SCong Yang 	_INIT_DCS_CMD(0xBA, 0x02, 0x2E, 0x02, 0x76, 0x02, 0xA3, 0x02, 0xDD, 0x03, 0x02, 0x03, 0x32, 0x03, 0x42, 0x03, 0x53),
826519ce291SCong Yang 	_INIT_DCS_CMD(0xBB, 0x03, 0x66, 0x03, 0x77, 0x03, 0x90, 0x03, 0xAC, 0x03, 0xCA, 0x03, 0xDA),
827519ce291SCong Yang 
82893ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0xF0),
82993ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
83093ee1a2cSyangcong 	_INIT_DCS_CMD(0x3A, 0x08),
831519ce291SCong Yang 
83293ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x10),
83393ee1a2cSyangcong 	_INIT_DCS_CMD(0xB9, 0x01),
834519ce291SCong Yang 
83593ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x20),
836519ce291SCong Yang 
83793ee1a2cSyangcong 	_INIT_DCS_CMD(0x18, 0x40),
83893ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x10),
839519ce291SCong Yang 
84093ee1a2cSyangcong 	_INIT_DCS_CMD(0xB9, 0x02),
84193ee1a2cSyangcong 	_INIT_DCS_CMD(0xFF, 0x10),
842519ce291SCong Yang 
84393ee1a2cSyangcong 	_INIT_DCS_CMD(0xFB, 0x01),
844519ce291SCong Yang 	_INIT_DCS_CMD(0xB0, 0x01),
84593ee1a2cSyangcong 	_INIT_DCS_CMD(0x35, 0x00),
846519ce291SCong Yang 	_INIT_DCS_CMD(0x3B, 0x03, 0xAE, 0x1A, 0x04, 0x04),
84793ee1a2cSyangcong 	_INIT_DELAY_CMD(100),
84893ee1a2cSyangcong 	_INIT_DCS_CMD(0x11),
84993ee1a2cSyangcong 	_INIT_DELAY_CMD(200),
85093ee1a2cSyangcong 	_INIT_DCS_CMD(0x29),
85193ee1a2cSyangcong 	_INIT_DELAY_CMD(100),
85293ee1a2cSyangcong 	{},
85393ee1a2cSyangcong };
85493ee1a2cSyangcong 
855a869b9dbSJitao Shi static const struct panel_init_cmd boe_init_cmd[] = {
856a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB0, 0x05),
857a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB1, 0xE5),
858a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB3, 0x52),
859a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB0, 0x00),
860a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB3, 0x88),
861a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB0, 0x04),
862a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB8, 0x00),
863a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB0, 0x00),
864a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB6, 0x03),
865a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBA, 0x8B),
866a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBF, 0x1A),
867a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC0, 0x0F),
868a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC2, 0x0C),
869a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC3, 0x02),
870a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC4, 0x0C),
871a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC5, 0x02),
872a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB0, 0x01),
873a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xE0, 0x26),
874a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xE1, 0x26),
875a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xDC, 0x00),
876a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xDD, 0x00),
877a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCC, 0x26),
878a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCD, 0x26),
879a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC8, 0x00),
880a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC9, 0x00),
881a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD2, 0x03),
882a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD3, 0x03),
883a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xE6, 0x04),
884a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xE7, 0x04),
885a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC4, 0x09),
886a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC5, 0x09),
887a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD8, 0x0A),
888a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD9, 0x0A),
889a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC2, 0x0B),
890a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC3, 0x0B),
891a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD6, 0x0C),
892a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD7, 0x0C),
893a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC0, 0x05),
894a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC1, 0x05),
895a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD4, 0x06),
896a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD5, 0x06),
897a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCA, 0x07),
898a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCB, 0x07),
899a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xDE, 0x08),
900a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xDF, 0x08),
901a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB0, 0x02),
902a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC0, 0x00),
903a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC1, 0x0D),
904a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC2, 0x17),
905a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC3, 0x26),
906a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC4, 0x31),
907a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC5, 0x1C),
908a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC6, 0x2C),
909a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC7, 0x33),
910a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC8, 0x31),
911a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC9, 0x37),
912a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCA, 0x37),
913a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCB, 0x37),
914a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCC, 0x39),
915a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCD, 0x2E),
916a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCE, 0x2F),
917a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCF, 0x2F),
918a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD0, 0x07),
919a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD2, 0x00),
920a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD3, 0x0D),
921a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD4, 0x17),
922a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD5, 0x26),
923a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD6, 0x31),
924a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD7, 0x3F),
925a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD8, 0x3F),
926a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD9, 0x3F),
927a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xDA, 0x3F),
928a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xDB, 0x37),
929a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xDC, 0x37),
930a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xDD, 0x37),
931a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xDE, 0x39),
932a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xDF, 0x2E),
933a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xE0, 0x2F),
934a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xE1, 0x2F),
935a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xE2, 0x07),
936a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB0, 0x03),
937a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC8, 0x0B),
938a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC9, 0x07),
939a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC3, 0x00),
940a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xE7, 0x00),
941a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC5, 0x2A),
942a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xDE, 0x2A),
943a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCA, 0x43),
944a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC9, 0x07),
945a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xE4, 0xC0),
946a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xE5, 0x0D),
947a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCB, 0x00),
948a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB0, 0x06),
949a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB8, 0xA5),
950a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC0, 0xA5),
951a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC7, 0x0F),
952a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xD5, 0x32),
953a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB8, 0x00),
954a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC0, 0x00),
955a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBC, 0x00),
956a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB0, 0x07),
957a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB1, 0x00),
958a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB2, 0x02),
959a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB3, 0x0F),
960a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB4, 0x25),
961a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB5, 0x39),
962a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB6, 0x4E),
963a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB7, 0x72),
964a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB8, 0x97),
965a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB9, 0xDC),
966a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBA, 0x22),
967a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBB, 0xA4),
968a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBC, 0x2B),
969a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBD, 0x2F),
970a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBE, 0xA9),
971a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBF, 0x25),
972a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC0, 0x61),
973a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC1, 0x97),
974a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC2, 0xB2),
975a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC3, 0xCD),
976a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC4, 0xD9),
977a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC5, 0xE7),
978a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC6, 0xF4),
979a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC7, 0xFA),
980a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC8, 0xFC),
981a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC9, 0x00),
982a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCA, 0x00),
983a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCB, 0x16),
984a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCC, 0xAF),
985a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCD, 0xFF),
986a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCE, 0xFF),
987a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB0, 0x08),
988a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB1, 0x04),
989a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB2, 0x05),
990a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB3, 0x11),
991a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB4, 0x24),
992a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB5, 0x39),
993a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB6, 0x4F),
994a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB7, 0x72),
995a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB8, 0x98),
996a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB9, 0xDC),
997a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBA, 0x23),
998a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBB, 0xA6),
999a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBC, 0x2C),
1000a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBD, 0x30),
1001a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBE, 0xAA),
1002a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBF, 0x26),
1003a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC0, 0x62),
1004a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC1, 0x9B),
1005a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC2, 0xB5),
1006a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC3, 0xCF),
1007a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC4, 0xDB),
1008a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC5, 0xE8),
1009a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC6, 0xF5),
1010a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC7, 0xFA),
1011a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC8, 0xFC),
1012a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC9, 0x00),
1013a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCA, 0x00),
1014a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCB, 0x16),
1015a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCC, 0xAF),
1016a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCD, 0xFF),
1017a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCE, 0xFF),
1018a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB0, 0x09),
1019a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB1, 0x04),
1020a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB2, 0x02),
1021a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB3, 0x16),
1022a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB4, 0x24),
1023a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB5, 0x3B),
1024a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB6, 0x4F),
1025a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB7, 0x73),
1026a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB8, 0x99),
1027a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB9, 0xE0),
1028a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBA, 0x26),
1029a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBB, 0xAD),
1030a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBC, 0x36),
1031a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBD, 0x3A),
1032a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBE, 0xAE),
1033a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBF, 0x2A),
1034a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC0, 0x66),
1035a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC1, 0x9E),
1036a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC2, 0xB8),
1037a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC3, 0xD1),
1038a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC4, 0xDD),
1039a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC5, 0xE9),
1040a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC6, 0xF6),
1041a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC7, 0xFA),
1042a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC8, 0xFC),
1043a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC9, 0x00),
1044a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCA, 0x00),
1045a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCB, 0x16),
1046a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCC, 0xAF),
1047a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCD, 0xFF),
1048a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCE, 0xFF),
1049a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB0, 0x0A),
1050a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB1, 0x00),
1051a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB2, 0x02),
1052a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB3, 0x0F),
1053a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB4, 0x25),
1054a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB5, 0x39),
1055a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB6, 0x4E),
1056a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB7, 0x72),
1057a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB8, 0x97),
1058a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB9, 0xDC),
1059a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBA, 0x22),
1060a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBB, 0xA4),
1061a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBC, 0x2B),
1062a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBD, 0x2F),
1063a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBE, 0xA9),
1064a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBF, 0x25),
1065a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC0, 0x61),
1066a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC1, 0x97),
1067a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC2, 0xB2),
1068a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC3, 0xCD),
1069a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC4, 0xD9),
1070a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC5, 0xE7),
1071a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC6, 0xF4),
1072a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC7, 0xFA),
1073a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC8, 0xFC),
1074a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC9, 0x00),
1075a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCA, 0x00),
1076a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCB, 0x16),
1077a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCC, 0xAF),
1078a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCD, 0xFF),
1079a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCE, 0xFF),
1080a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB0, 0x0B),
1081a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB1, 0x04),
1082a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB2, 0x05),
1083a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB3, 0x11),
1084a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB4, 0x24),
1085a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB5, 0x39),
1086a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB6, 0x4F),
1087a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB7, 0x72),
1088a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB8, 0x98),
1089a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB9, 0xDC),
1090a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBA, 0x23),
1091a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBB, 0xA6),
1092a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBC, 0x2C),
1093a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBD, 0x30),
1094a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBE, 0xAA),
1095a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBF, 0x26),
1096a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC0, 0x62),
1097a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC1, 0x9B),
1098a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC2, 0xB5),
1099a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC3, 0xCF),
1100a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC4, 0xDB),
1101a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC5, 0xE8),
1102a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC6, 0xF5),
1103a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC7, 0xFA),
1104a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC8, 0xFC),
1105a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC9, 0x00),
1106a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCA, 0x00),
1107a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCB, 0x16),
1108a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCC, 0xAF),
1109a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCD, 0xFF),
1110a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCE, 0xFF),
1111a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB0, 0x0C),
1112a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB1, 0x04),
1113a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB2, 0x02),
1114a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB3, 0x16),
1115a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB4, 0x24),
1116a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB5, 0x3B),
1117a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB6, 0x4F),
1118a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB7, 0x73),
1119a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB8, 0x99),
1120a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB9, 0xE0),
1121a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBA, 0x26),
1122a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBB, 0xAD),
1123a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBC, 0x36),
1124a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBD, 0x3A),
1125a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBE, 0xAE),
1126a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xBF, 0x2A),
1127a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC0, 0x66),
1128a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC1, 0x9E),
1129a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC2, 0xB8),
1130a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC3, 0xD1),
1131a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC4, 0xDD),
1132a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC5, 0xE9),
1133a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC6, 0xF6),
1134a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC7, 0xFA),
1135a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC8, 0xFC),
1136a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xC9, 0x00),
1137a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCA, 0x00),
1138a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCB, 0x16),
1139a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCC, 0xAF),
1140a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCD, 0xFF),
1141a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xCE, 0xFF),
1142a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB0, 0x00),
1143a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB3, 0x08),
1144a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB0, 0x04),
1145a869b9dbSJitao Shi 	_INIT_DCS_CMD(0xB8, 0x68),
1146a869b9dbSJitao Shi 	_INIT_DELAY_CMD(150),
1147a869b9dbSJitao Shi 	{},
1148a869b9dbSJitao Shi };
1149a869b9dbSJitao Shi 
115044de19e3SJitao Shi static const struct panel_init_cmd auo_kd101n80_45na_init_cmd[] = {
115144de19e3SJitao Shi 	_INIT_DELAY_CMD(24),
115244de19e3SJitao Shi 	_INIT_DCS_CMD(0x11),
115344de19e3SJitao Shi 	_INIT_DELAY_CMD(120),
115444de19e3SJitao Shi 	_INIT_DCS_CMD(0x29),
115544de19e3SJitao Shi 	_INIT_DELAY_CMD(120),
115644de19e3SJitao Shi 	{},
115744de19e3SJitao Shi };
115844de19e3SJitao Shi 
115956ad624bSJitao Shi static const struct panel_init_cmd auo_b101uan08_3_init_cmd[] = {
116056ad624bSJitao Shi 	_INIT_DELAY_CMD(24),
116156ad624bSJitao Shi 	_INIT_DCS_CMD(0xB0, 0x01),
116256ad624bSJitao Shi 	_INIT_DCS_CMD(0xC0, 0x48),
116356ad624bSJitao Shi 	_INIT_DCS_CMD(0xC1, 0x48),
116456ad624bSJitao Shi 	_INIT_DCS_CMD(0xC2, 0x47),
116556ad624bSJitao Shi 	_INIT_DCS_CMD(0xC3, 0x47),
116656ad624bSJitao Shi 	_INIT_DCS_CMD(0xC4, 0x46),
116756ad624bSJitao Shi 	_INIT_DCS_CMD(0xC5, 0x46),
116856ad624bSJitao Shi 	_INIT_DCS_CMD(0xC6, 0x45),
116956ad624bSJitao Shi 	_INIT_DCS_CMD(0xC7, 0x45),
117056ad624bSJitao Shi 	_INIT_DCS_CMD(0xC8, 0x64),
117156ad624bSJitao Shi 	_INIT_DCS_CMD(0xC9, 0x64),
117256ad624bSJitao Shi 	_INIT_DCS_CMD(0xCA, 0x4F),
117356ad624bSJitao Shi 	_INIT_DCS_CMD(0xCB, 0x4F),
117456ad624bSJitao Shi 	_INIT_DCS_CMD(0xCC, 0x40),
117556ad624bSJitao Shi 	_INIT_DCS_CMD(0xCD, 0x40),
117656ad624bSJitao Shi 	_INIT_DCS_CMD(0xCE, 0x66),
117756ad624bSJitao Shi 	_INIT_DCS_CMD(0xCF, 0x66),
117856ad624bSJitao Shi 	_INIT_DCS_CMD(0xD0, 0x4F),
117956ad624bSJitao Shi 	_INIT_DCS_CMD(0xD1, 0x4F),
118056ad624bSJitao Shi 	_INIT_DCS_CMD(0xD2, 0x41),
118156ad624bSJitao Shi 	_INIT_DCS_CMD(0xD3, 0x41),
118256ad624bSJitao Shi 	_INIT_DCS_CMD(0xD4, 0x48),
118356ad624bSJitao Shi 	_INIT_DCS_CMD(0xD5, 0x48),
118456ad624bSJitao Shi 	_INIT_DCS_CMD(0xD6, 0x47),
118556ad624bSJitao Shi 	_INIT_DCS_CMD(0xD7, 0x47),
118656ad624bSJitao Shi 	_INIT_DCS_CMD(0xD8, 0x46),
118756ad624bSJitao Shi 	_INIT_DCS_CMD(0xD9, 0x46),
118856ad624bSJitao Shi 	_INIT_DCS_CMD(0xDA, 0x45),
118956ad624bSJitao Shi 	_INIT_DCS_CMD(0xDB, 0x45),
119056ad624bSJitao Shi 	_INIT_DCS_CMD(0xDC, 0x64),
119156ad624bSJitao Shi 	_INIT_DCS_CMD(0xDD, 0x64),
119256ad624bSJitao Shi 	_INIT_DCS_CMD(0xDE, 0x4F),
119356ad624bSJitao Shi 	_INIT_DCS_CMD(0xDF, 0x4F),
119456ad624bSJitao Shi 	_INIT_DCS_CMD(0xE0, 0x40),
119556ad624bSJitao Shi 	_INIT_DCS_CMD(0xE1, 0x40),
119656ad624bSJitao Shi 	_INIT_DCS_CMD(0xE2, 0x66),
119756ad624bSJitao Shi 	_INIT_DCS_CMD(0xE3, 0x66),
119856ad624bSJitao Shi 	_INIT_DCS_CMD(0xE4, 0x4F),
119956ad624bSJitao Shi 	_INIT_DCS_CMD(0xE5, 0x4F),
120056ad624bSJitao Shi 	_INIT_DCS_CMD(0xE6, 0x41),
120156ad624bSJitao Shi 	_INIT_DCS_CMD(0xE7, 0x41),
120256ad624bSJitao Shi 	_INIT_DELAY_CMD(150),
120356ad624bSJitao Shi 	{},
120456ad624bSJitao Shi };
120556ad624bSJitao Shi 
12066069b66cSRuihai Zhou static const struct panel_init_cmd starry_qfh032011_53g_init_cmd[] = {
12076069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xB0, 0x01),
12086069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC3, 0x4F),
12096069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC4, 0x40),
12106069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC5, 0x40),
12116069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC6, 0x40),
12126069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC7, 0x40),
12136069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC8, 0x4D),
12146069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC9, 0x52),
12156069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xCA, 0x51),
12166069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xCD, 0x5D),
12176069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xCE, 0x5B),
12186069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xCF, 0x4B),
12196069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD0, 0x49),
12206069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD1, 0x47),
12216069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD2, 0x45),
12226069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD3, 0x41),
12236069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD7, 0x50),
12246069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD8, 0x40),
12256069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD9, 0x40),
12266069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xDA, 0x40),
12276069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xDB, 0x40),
12286069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xDC, 0x4E),
12296069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xDD, 0x52),
12306069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xDE, 0x51),
12316069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xE1, 0x5E),
12326069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xE2, 0x5C),
12336069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xE3, 0x4C),
12346069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xE4, 0x4A),
12356069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xE5, 0x48),
12366069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xE6, 0x46),
12376069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xE7, 0x42),
12386069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xB0, 0x03),
12396069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xBE, 0x03),
12406069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xCC, 0x44),
12416069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC8, 0x07),
12426069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC9, 0x05),
12436069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xCA, 0x42),
12446069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xCD, 0x3E),
12456069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xCF, 0x60),
12466069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD2, 0x04),
12476069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD3, 0x04),
12486069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD4, 0x01),
12496069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD5, 0x00),
12506069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD6, 0x03),
12516069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD7, 0x04),
12526069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD9, 0x01),
12536069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xDB, 0x01),
12546069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xE4, 0xF0),
12556069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xE5, 0x0A),
12566069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xB0, 0x00),
12576069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xCC, 0x08),
12586069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC2, 0x08),
12596069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC4, 0x10),
12606069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xB0, 0x02),
12616069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC0, 0x00),
12626069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC1, 0x0A),
12636069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC2, 0x20),
12646069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC3, 0x24),
12656069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC4, 0x23),
12666069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC5, 0x29),
12676069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC6, 0x23),
12686069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC7, 0x1C),
12696069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC8, 0x19),
12706069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xC9, 0x17),
12716069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xCA, 0x17),
12726069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xCB, 0x18),
12736069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xCC, 0x1A),
12746069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xCD, 0x1E),
12756069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xCE, 0x20),
12766069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xCF, 0x23),
12776069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD0, 0x07),
12786069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD1, 0x00),
12796069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD2, 0x00),
12806069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD3, 0x0A),
12816069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD4, 0x13),
12826069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD5, 0x1C),
12836069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD6, 0x1A),
12846069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD7, 0x13),
12856069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD8, 0x17),
12866069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xD9, 0x1C),
12876069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xDA, 0x19),
12886069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xDB, 0x17),
12896069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xDC, 0x17),
12906069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xDD, 0x18),
12916069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xDE, 0x1A),
12926069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xDF, 0x1E),
12936069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xE0, 0x20),
12946069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xE1, 0x23),
12956069b66cSRuihai Zhou 	_INIT_DCS_CMD(0xE2, 0x07),
12966069b66cSRuihai Zhou 	_INIT_DCS_CMD(0X11),
12976069b66cSRuihai Zhou 	_INIT_DELAY_CMD(120),
12986069b66cSRuihai Zhou 	_INIT_DCS_CMD(0X29),
12996069b66cSRuihai Zhou 	_INIT_DELAY_CMD(80),
13006069b66cSRuihai Zhou 	{},
13016069b66cSRuihai Zhou };
13026069b66cSRuihai Zhou 
13031bc2ef06SCong Yang static const struct panel_init_cmd starry_himax83102_j02_init_cmd[] = {
13041bc2ef06SCong Yang 	_INIT_DCS_CMD(0xB9, 0x83, 0x10, 0x21, 0x55, 0x00),
13051bc2ef06SCong Yang 	_INIT_DCS_CMD(0xB1, 0x2C, 0xB5, 0xB5, 0x31, 0xF1, 0x31, 0xD7, 0x2F, 0x36, 0x36, 0x36, 0x36, 0x1A, 0x8B, 0x11,
13061bc2ef06SCong Yang 		0x65, 0x00, 0x88, 0xFA, 0xFF, 0xFF, 0x8F, 0xFF, 0x08, 0x74, 0x33),
13071bc2ef06SCong Yang 	_INIT_DCS_CMD(0xB2, 0x00, 0x47, 0xB0, 0x80, 0x00, 0x12, 0x72, 0x3C, 0xA3, 0x03, 0x03, 0x00, 0x00, 0x88, 0xF5),
13081bc2ef06SCong Yang 	_INIT_DCS_CMD(0xB4, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x63, 0x5C, 0x63, 0x5C, 0x01, 0x9E),
13091bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE9, 0xCD),
13101bc2ef06SCong Yang 	_INIT_DCS_CMD(0xBA, 0x84),
13111bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE9, 0x3F),
13121bc2ef06SCong Yang 	_INIT_DCS_CMD(0xBC, 0x1B, 0x04),
13131bc2ef06SCong Yang 	_INIT_DCS_CMD(0xBE, 0x20),
13141bc2ef06SCong Yang 	_INIT_DCS_CMD(0xBF, 0xFC, 0xC4),
13151bc2ef06SCong Yang 	_INIT_DCS_CMD(0xC0, 0x36, 0x36, 0x22, 0x11, 0x22, 0xA0, 0x61, 0x08, 0xF5, 0x03),
13161bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE9, 0xCC),
13171bc2ef06SCong Yang 	_INIT_DCS_CMD(0xC7, 0x80),
13181bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE9, 0x3F),
13191bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE9, 0xC6),
13201bc2ef06SCong Yang 	_INIT_DCS_CMD(0xC8, 0x97),
13211bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE9, 0x3F),
13221bc2ef06SCong Yang 	_INIT_DCS_CMD(0xC9, 0x00, 0x1E, 0x13, 0x88, 0x01),
13231bc2ef06SCong Yang 	_INIT_DCS_CMD(0xCB, 0x08, 0x13, 0x07, 0x00, 0x0F, 0x33),
13241bc2ef06SCong Yang 	_INIT_DCS_CMD(0xCC, 0x02),
13251bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE9, 0xC4),
13261bc2ef06SCong Yang 	_INIT_DCS_CMD(0xD0, 0x03),
13271bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE9, 0x3F),
13281bc2ef06SCong Yang 	_INIT_DCS_CMD(0xD1, 0x37, 0x06, 0x00, 0x02, 0x04, 0x0C, 0xFF),
13291bc2ef06SCong Yang 	_INIT_DCS_CMD(0xD2, 0x1F, 0x11, 0x1F),
13301bc2ef06SCong Yang 	_INIT_DCS_CMD(0xD3, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x37, 0x47, 0x34, 0x3B, 0x12, 0x12, 0x03,
13311bc2ef06SCong Yang 		0x03, 0x32, 0x10, 0x10, 0x00, 0x10, 0x32, 0x10, 0x08, 0x00, 0x08, 0x32, 0x17, 0x94, 0x07, 0x94, 0x00, 0x00),
13321bc2ef06SCong Yang 	_INIT_DCS_CMD(0xD5, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x19, 0x19, 0x40, 0x40, 0x1A, 0x1A,
13331bc2ef06SCong Yang 		0x1B, 0x1B, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x20, 0x21, 0x28, 0x29, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18),
13341bc2ef06SCong Yang 	_INIT_DCS_CMD(0xD6, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x40, 0x40, 0x19, 0x19, 0x1A, 0x1A,
13351bc2ef06SCong Yang 		0x1B, 0x1B, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x29, 0x28, 0x21, 0x20, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18),
13361bc2ef06SCong Yang 	_INIT_DCS_CMD(0xD8, 0xAA, 0xBA, 0xEA, 0xAA, 0xAA, 0xA0, 0xAA, 0xBA, 0xEA, 0xAA, 0xAA, 0xA0, 0xAA, 0xBA, 0xEA, 0xAA,
13371bc2ef06SCong Yang 		0xAA, 0xA0, 0xAA, 0xBA, 0xEA, 0xAA, 0xAA, 0xA0, 0xAA, 0xBA, 0xEA, 0xAA, 0xAA, 0xA0, 0xAA, 0xBA, 0xEA, 0xAA, 0xAA, 0xA0),
13381bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE0, 0x00, 0x09, 0x14, 0x1E, 0x26, 0x48, 0x61, 0x67, 0x6C, 0x67, 0x7D, 0x7F, 0x80, 0x8B, 0x87, 0x8F, 0x98, 0xAB,
13391bc2ef06SCong Yang 		0xAB, 0x55, 0x5C, 0x68, 0x73, 0x00, 0x09, 0x14, 0x1E, 0x26, 0x48, 0x61, 0x67, 0x6C, 0x67, 0x7D, 0x7F, 0x80, 0x8B, 0x87, 0x8F, 0x98, 0xAB, 0xAB, 0x55, 0x5C, 0x68, 0x73),
13401bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE7, 0x0E, 0x10, 0x10, 0x21, 0x2B, 0x9A, 0x02, 0x54, 0x9A, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x12, 0x05, 0x02, 0x02, 0x10),
13411bc2ef06SCong Yang 	_INIT_DCS_CMD(0xBD, 0x01),
13421bc2ef06SCong Yang 	_INIT_DCS_CMD(0xB1, 0x01, 0xBF, 0x11),
13431bc2ef06SCong Yang 	_INIT_DCS_CMD(0xCB, 0x86),
13441bc2ef06SCong Yang 	_INIT_DCS_CMD(0xD2, 0x3C, 0xFA),
1345258dd5e6SRuihai Zhou 	_INIT_DCS_CMD(0xD3, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0C, 0x01),
13461bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE7, 0x02, 0x00, 0x28, 0x01, 0x7E, 0x0F, 0x7E, 0x10, 0xA0, 0x00, 0x00, 0x20, 0x40, 0x50, 0x40),
13471bc2ef06SCong Yang 	_INIT_DCS_CMD(0xBD, 0x02),
13481bc2ef06SCong Yang 	_INIT_DCS_CMD(0xD8, 0xFF, 0xFF, 0xBF, 0xFE, 0xAA, 0xA0, 0xFF, 0xFF, 0xBF, 0xFE, 0xAA, 0xA0),
13491bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE7, 0xFE, 0x04, 0xFE, 0x04, 0xFE, 0x04, 0x03, 0x03, 0x03, 0x26, 0x00, 0x26, 0x81, 0x02, 0x40, 0x00, 0x20, 0x9E, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00),
13501bc2ef06SCong Yang 	_INIT_DCS_CMD(0xBD, 0x03),
13511bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE9, 0xC6),
13521bc2ef06SCong Yang 	_INIT_DCS_CMD(0xB4, 0x03, 0xFF, 0xF8),
13531bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE9, 0x3F),
13541bc2ef06SCong Yang 	_INIT_DCS_CMD(0xD8, 0x00, 0x2A, 0xAA, 0xA8, 0x00, 0x00, 0x00, 0x2A, 0xAA, 0xA8, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x2A, 0xAA, 0xA8,
13551bc2ef06SCong Yang 		0x00, 0x00, 0x00, 0x2A, 0xAA, 0xA8, 0x00, 0x00),
13561bc2ef06SCong Yang 	_INIT_DCS_CMD(0xBD, 0x00),
13571bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE9, 0xC4),
13581bc2ef06SCong Yang 	_INIT_DCS_CMD(0xBA, 0x96),
13591bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE9, 0x3F),
13601bc2ef06SCong Yang 	_INIT_DCS_CMD(0xBD, 0x01),
13611bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE9, 0xC5),
13621bc2ef06SCong Yang 	_INIT_DCS_CMD(0xBA, 0x4F),
13631bc2ef06SCong Yang 	_INIT_DCS_CMD(0xE9, 0x3F),
13641bc2ef06SCong Yang 	_INIT_DCS_CMD(0xBD, 0x00),
13651bc2ef06SCong Yang 	_INIT_DCS_CMD(0x11),
13661bc2ef06SCong Yang 	_INIT_DELAY_CMD(120),
13671bc2ef06SCong Yang 	_INIT_DCS_CMD(0x29),
13681bc2ef06SCong Yang 	{},
13691bc2ef06SCong Yang };
13701bc2ef06SCong Yang 
13718716a647SCong Yang static const struct panel_init_cmd starry_ili9882t_init_cmd[] = {
13728716a647SCong Yang 	_INIT_DELAY_CMD(5),
13738716a647SCong Yang 	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x01),
13748716a647SCong Yang 	_INIT_DCS_CMD(0x00, 0x42),
13758716a647SCong Yang 	_INIT_DCS_CMD(0x01, 0x11),
13768716a647SCong Yang 	_INIT_DCS_CMD(0x02, 0x00),
13778716a647SCong Yang 	_INIT_DCS_CMD(0x03, 0x00),
13788716a647SCong Yang 
13798716a647SCong Yang 	_INIT_DCS_CMD(0x04, 0x01),
13808716a647SCong Yang 	_INIT_DCS_CMD(0x05, 0x11),
13818716a647SCong Yang 	_INIT_DCS_CMD(0x06, 0x00),
13828716a647SCong Yang 	_INIT_DCS_CMD(0x07, 0x00),
13838716a647SCong Yang 
13848716a647SCong Yang 	_INIT_DCS_CMD(0x08, 0x80),
13858716a647SCong Yang 	_INIT_DCS_CMD(0x09, 0x81),
13868716a647SCong Yang 	_INIT_DCS_CMD(0x0A, 0x71),
13878716a647SCong Yang 	_INIT_DCS_CMD(0x0B, 0x00),
13888716a647SCong Yang 
13898716a647SCong Yang 	_INIT_DCS_CMD(0x0C, 0x00),
13908716a647SCong Yang 	_INIT_DCS_CMD(0x0E, 0x1A),
13918716a647SCong Yang 
13928716a647SCong Yang 	_INIT_DCS_CMD(0x24, 0x00),
13938716a647SCong Yang 	_INIT_DCS_CMD(0x25, 0x00),
13948716a647SCong Yang 	_INIT_DCS_CMD(0x26, 0x00),
13958716a647SCong Yang 	_INIT_DCS_CMD(0x27, 0x00),
13968716a647SCong Yang 
13978716a647SCong Yang 	_INIT_DCS_CMD(0x2C, 0xD4),
13988716a647SCong Yang 	_INIT_DCS_CMD(0xB9, 0x40),
13998716a647SCong Yang 
14008716a647SCong Yang 	_INIT_DCS_CMD(0xB0, 0x11),
14018716a647SCong Yang 
14028716a647SCong Yang 	_INIT_DCS_CMD(0xE6, 0x32),
14038716a647SCong Yang 	_INIT_DCS_CMD(0xD1, 0x30),
14048716a647SCong Yang 
14058716a647SCong Yang 	_INIT_DCS_CMD(0xD6, 0x55),
14068716a647SCong Yang 
14078716a647SCong Yang 	_INIT_DCS_CMD(0xD0, 0x01),
14088716a647SCong Yang 	_INIT_DCS_CMD(0xE3, 0x93),
14098716a647SCong Yang 	_INIT_DCS_CMD(0xE4, 0x00),
14108716a647SCong Yang 	_INIT_DCS_CMD(0xE5, 0x80),
14118716a647SCong Yang 
14128716a647SCong Yang 	_INIT_DCS_CMD(0x31, 0x07),
14138716a647SCong Yang 	_INIT_DCS_CMD(0x32, 0x07),
14148716a647SCong Yang 	_INIT_DCS_CMD(0x33, 0x07),
14158716a647SCong Yang 	_INIT_DCS_CMD(0x34, 0x07),
14168716a647SCong Yang 	_INIT_DCS_CMD(0x35, 0x07),
14178716a647SCong Yang 	_INIT_DCS_CMD(0x36, 0x01),
14188716a647SCong Yang 	_INIT_DCS_CMD(0x37, 0x00),
14198716a647SCong Yang 	_INIT_DCS_CMD(0x38, 0x28),
14208716a647SCong Yang 	_INIT_DCS_CMD(0x39, 0x29),
14218716a647SCong Yang 	_INIT_DCS_CMD(0x3A, 0x11),
14228716a647SCong Yang 	_INIT_DCS_CMD(0x3B, 0x13),
14238716a647SCong Yang 	_INIT_DCS_CMD(0x3C, 0x15),
14248716a647SCong Yang 	_INIT_DCS_CMD(0x3D, 0x17),
14258716a647SCong Yang 	_INIT_DCS_CMD(0x3E, 0x09),
14268716a647SCong Yang 	_INIT_DCS_CMD(0x3F, 0x0D),
14278716a647SCong Yang 	_INIT_DCS_CMD(0x40, 0x02),
14288716a647SCong Yang 	_INIT_DCS_CMD(0x41, 0x02),
14298716a647SCong Yang 	_INIT_DCS_CMD(0x42, 0x02),
14308716a647SCong Yang 	_INIT_DCS_CMD(0x43, 0x02),
14318716a647SCong Yang 	_INIT_DCS_CMD(0x44, 0x02),
14328716a647SCong Yang 	_INIT_DCS_CMD(0x45, 0x02),
14338716a647SCong Yang 	_INIT_DCS_CMD(0x46, 0x02),
14348716a647SCong Yang 
14358716a647SCong Yang 	_INIT_DCS_CMD(0x47, 0x07),
14368716a647SCong Yang 	_INIT_DCS_CMD(0x48, 0x07),
14378716a647SCong Yang 	_INIT_DCS_CMD(0x49, 0x07),
14388716a647SCong Yang 	_INIT_DCS_CMD(0x4A, 0x07),
14398716a647SCong Yang 	_INIT_DCS_CMD(0x4B, 0x07),
14408716a647SCong Yang 	_INIT_DCS_CMD(0x4C, 0x01),
14418716a647SCong Yang 	_INIT_DCS_CMD(0x4D, 0x00),
14428716a647SCong Yang 	_INIT_DCS_CMD(0x4E, 0x28),
14438716a647SCong Yang 	_INIT_DCS_CMD(0x4F, 0x29),
14448716a647SCong Yang 	_INIT_DCS_CMD(0x50, 0x10),
14458716a647SCong Yang 	_INIT_DCS_CMD(0x51, 0x12),
14468716a647SCong Yang 	_INIT_DCS_CMD(0x52, 0x14),
14478716a647SCong Yang 	_INIT_DCS_CMD(0x53, 0x16),
14488716a647SCong Yang 	_INIT_DCS_CMD(0x54, 0x08),
14498716a647SCong Yang 	_INIT_DCS_CMD(0x55, 0x0C),
14508716a647SCong Yang 	_INIT_DCS_CMD(0x56, 0x02),
14518716a647SCong Yang 	_INIT_DCS_CMD(0x57, 0x02),
14528716a647SCong Yang 	_INIT_DCS_CMD(0x58, 0x02),
14538716a647SCong Yang 	_INIT_DCS_CMD(0x59, 0x02),
14548716a647SCong Yang 	_INIT_DCS_CMD(0x5A, 0x02),
14558716a647SCong Yang 	_INIT_DCS_CMD(0x5B, 0x02),
14568716a647SCong Yang 	_INIT_DCS_CMD(0x5C, 0x02),
14578716a647SCong Yang 
14588716a647SCong Yang 	_INIT_DCS_CMD(0x61, 0x07),
14598716a647SCong Yang 	_INIT_DCS_CMD(0x62, 0x07),
14608716a647SCong Yang 	_INIT_DCS_CMD(0x63, 0x07),
14618716a647SCong Yang 	_INIT_DCS_CMD(0x64, 0x07),
14628716a647SCong Yang 	_INIT_DCS_CMD(0x65, 0x07),
14638716a647SCong Yang 	_INIT_DCS_CMD(0x66, 0x01),
14648716a647SCong Yang 	_INIT_DCS_CMD(0x67, 0x00),
14658716a647SCong Yang 	_INIT_DCS_CMD(0x68, 0x28),
14668716a647SCong Yang 	_INIT_DCS_CMD(0x69, 0x29),
14678716a647SCong Yang 	_INIT_DCS_CMD(0x6A, 0x16),
14688716a647SCong Yang 	_INIT_DCS_CMD(0x6B, 0x14),
14698716a647SCong Yang 	_INIT_DCS_CMD(0x6C, 0x12),
14708716a647SCong Yang 	_INIT_DCS_CMD(0x6D, 0x10),
14718716a647SCong Yang 	_INIT_DCS_CMD(0x6E, 0x0C),
14728716a647SCong Yang 	_INIT_DCS_CMD(0x6F, 0x08),
14738716a647SCong Yang 	_INIT_DCS_CMD(0x70, 0x02),
14748716a647SCong Yang 	_INIT_DCS_CMD(0x71, 0x02),
14758716a647SCong Yang 	_INIT_DCS_CMD(0x72, 0x02),
14768716a647SCong Yang 	_INIT_DCS_CMD(0x73, 0x02),
14778716a647SCong Yang 	_INIT_DCS_CMD(0x74, 0x02),
14788716a647SCong Yang 	_INIT_DCS_CMD(0x75, 0x02),
14798716a647SCong Yang 	_INIT_DCS_CMD(0x76, 0x02),
14808716a647SCong Yang 
14818716a647SCong Yang 	_INIT_DCS_CMD(0x77, 0x07),
14828716a647SCong Yang 	_INIT_DCS_CMD(0x78, 0x07),
14838716a647SCong Yang 	_INIT_DCS_CMD(0x79, 0x07),
14848716a647SCong Yang 	_INIT_DCS_CMD(0x7A, 0x07),
14858716a647SCong Yang 	_INIT_DCS_CMD(0x7B, 0x07),
14868716a647SCong Yang 	_INIT_DCS_CMD(0x7C, 0x01),
14878716a647SCong Yang 	_INIT_DCS_CMD(0x7D, 0x00),
14888716a647SCong Yang 	_INIT_DCS_CMD(0x7E, 0x28),
14898716a647SCong Yang 	_INIT_DCS_CMD(0x7F, 0x29),
14908716a647SCong Yang 	_INIT_DCS_CMD(0x80, 0x17),
14918716a647SCong Yang 	_INIT_DCS_CMD(0x81, 0x15),
14928716a647SCong Yang 	_INIT_DCS_CMD(0x82, 0x13),
14938716a647SCong Yang 	_INIT_DCS_CMD(0x83, 0x11),
14948716a647SCong Yang 	_INIT_DCS_CMD(0x84, 0x0D),
14958716a647SCong Yang 	_INIT_DCS_CMD(0x85, 0x09),
14968716a647SCong Yang 	_INIT_DCS_CMD(0x86, 0x02),
14978716a647SCong Yang 	_INIT_DCS_CMD(0x87, 0x07),
14988716a647SCong Yang 	_INIT_DCS_CMD(0x88, 0x07),
14998716a647SCong Yang 	_INIT_DCS_CMD(0x89, 0x07),
15008716a647SCong Yang 	_INIT_DCS_CMD(0x8A, 0x07),
15018716a647SCong Yang 	_INIT_DCS_CMD(0x8B, 0x07),
15028716a647SCong Yang 	_INIT_DCS_CMD(0x8C, 0x07),
15038716a647SCong Yang 
15048716a647SCong Yang 	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x02),
15058716a647SCong Yang 	_INIT_DCS_CMD(0x29, 0x3A),
15068716a647SCong Yang 	_INIT_DCS_CMD(0x2A, 0x3B),
15078716a647SCong Yang 
15088716a647SCong Yang 	_INIT_DCS_CMD(0x06, 0x01),
15098716a647SCong Yang 	_INIT_DCS_CMD(0x07, 0x01),
15108716a647SCong Yang 	_INIT_DCS_CMD(0x08, 0x0C),
15118716a647SCong Yang 	_INIT_DCS_CMD(0x09, 0x44),
15128716a647SCong Yang 
15138716a647SCong Yang 	_INIT_DCS_CMD(0x3C, 0x0A),
15148716a647SCong Yang 	_INIT_DCS_CMD(0x39, 0x11),
15158716a647SCong Yang 	_INIT_DCS_CMD(0x3D, 0x00),
15168716a647SCong Yang 	_INIT_DCS_CMD(0x3A, 0x0C),
15178716a647SCong Yang 	_INIT_DCS_CMD(0x3B, 0x44),
15188716a647SCong Yang 
15198716a647SCong Yang 	_INIT_DCS_CMD(0x53, 0x1F),
15208716a647SCong Yang 	_INIT_DCS_CMD(0x5E, 0x40),
15218716a647SCong Yang 	_INIT_DCS_CMD(0x84, 0x00),
15228716a647SCong Yang 
15238716a647SCong Yang 	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x03),
15248716a647SCong Yang 	_INIT_DCS_CMD(0x20, 0x01),
15258716a647SCong Yang 	_INIT_DCS_CMD(0x21, 0x3C),
15268716a647SCong Yang 	_INIT_DCS_CMD(0x22, 0xFA),
15278716a647SCong Yang 
15288716a647SCong Yang 	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x0A),
15298716a647SCong Yang 	_INIT_DCS_CMD(0xE0, 0x01),
15308716a647SCong Yang 	_INIT_DCS_CMD(0xE2, 0x01),
15318716a647SCong Yang 	_INIT_DCS_CMD(0xE5, 0x91),
15328716a647SCong Yang 	_INIT_DCS_CMD(0xE6, 0x3C),
15338716a647SCong Yang 	_INIT_DCS_CMD(0xE7, 0x00),
15348716a647SCong Yang 	_INIT_DCS_CMD(0xE8, 0xFA),
15358716a647SCong Yang 
15368716a647SCong Yang 	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x12),
15378716a647SCong Yang 	_INIT_DCS_CMD(0x87, 0x2C),
15388716a647SCong Yang 
15398716a647SCong Yang 	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x05),
15408716a647SCong Yang 	_INIT_DCS_CMD(0x73, 0xE5),
15418716a647SCong Yang 	_INIT_DCS_CMD(0x7F, 0x6B),
15428716a647SCong Yang 	_INIT_DCS_CMD(0x6D, 0xA4),
15438716a647SCong Yang 	_INIT_DCS_CMD(0x79, 0x54),
15448716a647SCong Yang 	_INIT_DCS_CMD(0x69, 0x97),
15458716a647SCong Yang 	_INIT_DCS_CMD(0x6A, 0x97),
15468716a647SCong Yang 	_INIT_DCS_CMD(0xA5, 0x3F),
15478716a647SCong Yang 	_INIT_DCS_CMD(0x61, 0xDA),
15488716a647SCong Yang 	_INIT_DCS_CMD(0xA7, 0xF1),
15498716a647SCong Yang 	_INIT_DCS_CMD(0x5F, 0x01),
15508716a647SCong Yang 	_INIT_DCS_CMD(0x62, 0x3F),
15518716a647SCong Yang 	_INIT_DCS_CMD(0x1D, 0x90),
15528716a647SCong Yang 	_INIT_DCS_CMD(0x86, 0x87),
15538716a647SCong Yang 
15548716a647SCong Yang 	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x06),
15558716a647SCong Yang 	_INIT_DCS_CMD(0xC0, 0x80),
15568716a647SCong Yang 	_INIT_DCS_CMD(0xC1, 0x07),
15578716a647SCong Yang 	_INIT_DCS_CMD(0xCA, 0x58),
15588716a647SCong Yang 	_INIT_DCS_CMD(0xCB, 0x02),
15598716a647SCong Yang 	_INIT_DCS_CMD(0xCE, 0x58),
15608716a647SCong Yang 	_INIT_DCS_CMD(0xCF, 0x02),
15618716a647SCong Yang 	_INIT_DCS_CMD(0x67, 0x60),
15628716a647SCong Yang 	_INIT_DCS_CMD(0x10, 0x00),
15638716a647SCong Yang 	_INIT_DCS_CMD(0x92, 0x22),
15648716a647SCong Yang 	_INIT_DCS_CMD(0xD3, 0x08),
15658716a647SCong Yang 	_INIT_DCS_CMD(0xD6, 0x55),
15668716a647SCong Yang 	_INIT_DCS_CMD(0xDC, 0x38),
15678716a647SCong Yang 
15688716a647SCong Yang 	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x08),
15698716a647SCong Yang 	_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),
15708716a647SCong Yang 	_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),
15718716a647SCong Yang 
15728716a647SCong Yang 	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x04),
15738716a647SCong Yang 	_INIT_DCS_CMD(0xBA, 0x81),
15748716a647SCong Yang 
15758716a647SCong Yang 	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x0C),
15768716a647SCong Yang 	_INIT_DCS_CMD(0x00, 0x02),
15778716a647SCong Yang 	_INIT_DCS_CMD(0x01, 0x00),
15788716a647SCong Yang 	_INIT_DCS_CMD(0x02, 0x03),
15798716a647SCong Yang 	_INIT_DCS_CMD(0x03, 0x01),
15808716a647SCong Yang 	_INIT_DCS_CMD(0x04, 0x03),
15818716a647SCong Yang 	_INIT_DCS_CMD(0x05, 0x02),
15828716a647SCong Yang 	_INIT_DCS_CMD(0x06, 0x04),
15838716a647SCong Yang 	_INIT_DCS_CMD(0x07, 0x03),
15848716a647SCong Yang 	_INIT_DCS_CMD(0x08, 0x03),
15858716a647SCong Yang 	_INIT_DCS_CMD(0x09, 0x04),
15868716a647SCong Yang 	_INIT_DCS_CMD(0x0A, 0x04),
15878716a647SCong Yang 	_INIT_DCS_CMD(0x0B, 0x05),
15888716a647SCong Yang 	_INIT_DCS_CMD(0x0C, 0x04),
15898716a647SCong Yang 	_INIT_DCS_CMD(0x0D, 0x06),
15908716a647SCong Yang 	_INIT_DCS_CMD(0x0E, 0x05),
15918716a647SCong Yang 	_INIT_DCS_CMD(0x0F, 0x07),
15928716a647SCong Yang 	_INIT_DCS_CMD(0x10, 0x04),
15938716a647SCong Yang 	_INIT_DCS_CMD(0x11, 0x08),
15948716a647SCong Yang 	_INIT_DCS_CMD(0x12, 0x05),
15958716a647SCong Yang 	_INIT_DCS_CMD(0x13, 0x09),
15968716a647SCong Yang 	_INIT_DCS_CMD(0x14, 0x05),
15978716a647SCong Yang 	_INIT_DCS_CMD(0x15, 0x0A),
15988716a647SCong Yang 	_INIT_DCS_CMD(0x16, 0x06),
15998716a647SCong Yang 	_INIT_DCS_CMD(0x17, 0x0B),
16008716a647SCong Yang 	_INIT_DCS_CMD(0x18, 0x05),
16018716a647SCong Yang 	_INIT_DCS_CMD(0x19, 0x0C),
16028716a647SCong Yang 	_INIT_DCS_CMD(0x1A, 0x06),
16038716a647SCong Yang 	_INIT_DCS_CMD(0x1B, 0x0D),
16048716a647SCong Yang 	_INIT_DCS_CMD(0x1C, 0x06),
16058716a647SCong Yang 	_INIT_DCS_CMD(0x1D, 0x0E),
16068716a647SCong Yang 	_INIT_DCS_CMD(0x1E, 0x07),
16078716a647SCong Yang 	_INIT_DCS_CMD(0x1F, 0x0F),
16088716a647SCong Yang 	_INIT_DCS_CMD(0x20, 0x06),
16098716a647SCong Yang 	_INIT_DCS_CMD(0x21, 0x10),
16108716a647SCong Yang 	_INIT_DCS_CMD(0x22, 0x07),
16118716a647SCong Yang 	_INIT_DCS_CMD(0x23, 0x11),
16128716a647SCong Yang 	_INIT_DCS_CMD(0x24, 0x07),
16138716a647SCong Yang 	_INIT_DCS_CMD(0x25, 0x12),
16148716a647SCong Yang 	_INIT_DCS_CMD(0x26, 0x08),
16158716a647SCong Yang 	_INIT_DCS_CMD(0x27, 0x13),
16168716a647SCong Yang 	_INIT_DCS_CMD(0x28, 0x07),
16178716a647SCong Yang 	_INIT_DCS_CMD(0x29, 0x14),
16188716a647SCong Yang 	_INIT_DCS_CMD(0x2A, 0x08),
16198716a647SCong Yang 	_INIT_DCS_CMD(0x2B, 0x15),
16208716a647SCong Yang 	_INIT_DCS_CMD(0x2C, 0x08),
16218716a647SCong Yang 	_INIT_DCS_CMD(0x2D, 0x16),
16228716a647SCong Yang 	_INIT_DCS_CMD(0x2E, 0x09),
16238716a647SCong Yang 	_INIT_DCS_CMD(0x2F, 0x17),
16248716a647SCong Yang 	_INIT_DCS_CMD(0x30, 0x08),
16258716a647SCong Yang 	_INIT_DCS_CMD(0x31, 0x18),
16268716a647SCong Yang 	_INIT_DCS_CMD(0x32, 0x09),
16278716a647SCong Yang 	_INIT_DCS_CMD(0x33, 0x19),
16288716a647SCong Yang 	_INIT_DCS_CMD(0x34, 0x09),
16298716a647SCong Yang 	_INIT_DCS_CMD(0x35, 0x1A),
16308716a647SCong Yang 	_INIT_DCS_CMD(0x36, 0x0A),
16318716a647SCong Yang 	_INIT_DCS_CMD(0x37, 0x1B),
16328716a647SCong Yang 	_INIT_DCS_CMD(0x38, 0x0A),
16338716a647SCong Yang 	_INIT_DCS_CMD(0x39, 0x1C),
16348716a647SCong Yang 	_INIT_DCS_CMD(0x3A, 0x0A),
16358716a647SCong Yang 	_INIT_DCS_CMD(0x3B, 0x1D),
16368716a647SCong Yang 	_INIT_DCS_CMD(0x3C, 0x0A),
16378716a647SCong Yang 	_INIT_DCS_CMD(0x3D, 0x1E),
16388716a647SCong Yang 	_INIT_DCS_CMD(0x3E, 0x0A),
16398716a647SCong Yang 	_INIT_DCS_CMD(0x3F, 0x1F),
16408716a647SCong Yang 
16418716a647SCong Yang 	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x04),
16428716a647SCong Yang 	_INIT_DCS_CMD(0xBA, 0x01),
16438716a647SCong Yang 
16448716a647SCong Yang 	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x0E),
16458716a647SCong Yang 	_INIT_DCS_CMD(0x02, 0x0C),
16468716a647SCong Yang 	_INIT_DCS_CMD(0x20, 0x10),
16478716a647SCong Yang 	_INIT_DCS_CMD(0x25, 0x16),
16488716a647SCong Yang 	_INIT_DCS_CMD(0x26, 0xE0),
16498716a647SCong Yang 	_INIT_DCS_CMD(0x27, 0x00),
16508716a647SCong Yang 	_INIT_DCS_CMD(0x29, 0x71),
16518716a647SCong Yang 	_INIT_DCS_CMD(0x2A, 0x46),
16528716a647SCong Yang 	_INIT_DCS_CMD(0x2B, 0x1F),
16538716a647SCong Yang 	_INIT_DCS_CMD(0x2D, 0xC7),
16548716a647SCong Yang 	_INIT_DCS_CMD(0x31, 0x02),
16558716a647SCong Yang 	_INIT_DCS_CMD(0x32, 0xDF),
16568716a647SCong Yang 	_INIT_DCS_CMD(0x33, 0x5A),
16578716a647SCong Yang 	_INIT_DCS_CMD(0x34, 0xC0),
16588716a647SCong Yang 	_INIT_DCS_CMD(0x35, 0x5A),
16598716a647SCong Yang 	_INIT_DCS_CMD(0x36, 0xC0),
16608716a647SCong Yang 	_INIT_DCS_CMD(0x38, 0x65),
16618716a647SCong Yang 	_INIT_DCS_CMD(0x80, 0x3E),
16628716a647SCong Yang 	_INIT_DCS_CMD(0x81, 0xA0),
16638716a647SCong Yang 	_INIT_DCS_CMD(0xB0, 0x01),
16648716a647SCong Yang 	_INIT_DCS_CMD(0xB1, 0xCC),
16658716a647SCong Yang 	_INIT_DCS_CMD(0xC0, 0x12),
16668716a647SCong Yang 	_INIT_DCS_CMD(0xC2, 0xCC),
16678716a647SCong Yang 	_INIT_DCS_CMD(0xC3, 0xCC),
16688716a647SCong Yang 	_INIT_DCS_CMD(0xC4, 0xCC),
16698716a647SCong Yang 	_INIT_DCS_CMD(0xC5, 0xCC),
16708716a647SCong Yang 	_INIT_DCS_CMD(0xC6, 0xCC),
16718716a647SCong Yang 	_INIT_DCS_CMD(0xC7, 0xCC),
16728716a647SCong Yang 	_INIT_DCS_CMD(0xC8, 0xCC),
16738716a647SCong Yang 	_INIT_DCS_CMD(0xC9, 0xCC),
16748716a647SCong Yang 	_INIT_DCS_CMD(0x30, 0x00),
16758716a647SCong Yang 	_INIT_DCS_CMD(0x00, 0x81),
16768716a647SCong Yang 	_INIT_DCS_CMD(0x08, 0x02),
16778716a647SCong Yang 	_INIT_DCS_CMD(0x09, 0x00),
16788716a647SCong Yang 	_INIT_DCS_CMD(0x07, 0x21),
16798716a647SCong Yang 	_INIT_DCS_CMD(0x04, 0x10),
16808716a647SCong Yang 
16818716a647SCong Yang 	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x1E),
16828716a647SCong Yang 	_INIT_DCS_CMD(0x60, 0x00),
16838716a647SCong Yang 	_INIT_DCS_CMD(0x64, 0x00),
16848716a647SCong Yang 	_INIT_DCS_CMD(0x6D, 0x00),
16858716a647SCong Yang 
16868716a647SCong Yang 	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x0B),
16878716a647SCong Yang 	_INIT_DCS_CMD(0xA6, 0x44),
16888716a647SCong Yang 	_INIT_DCS_CMD(0xA7, 0xB6),
16898716a647SCong Yang 	_INIT_DCS_CMD(0xA8, 0x03),
16908716a647SCong Yang 	_INIT_DCS_CMD(0xA9, 0x03),
16918716a647SCong Yang 	_INIT_DCS_CMD(0xAA, 0x51),
16928716a647SCong Yang 	_INIT_DCS_CMD(0xAB, 0x51),
16938716a647SCong Yang 	_INIT_DCS_CMD(0xAC, 0x04),
16948716a647SCong Yang 	_INIT_DCS_CMD(0xBD, 0x92),
16958716a647SCong Yang 	_INIT_DCS_CMD(0xBE, 0xA1),
16968716a647SCong Yang 
16978716a647SCong Yang 	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x05),
16988716a647SCong Yang 	_INIT_DCS_CMD(0x86, 0x87),
16998716a647SCong Yang 
17008716a647SCong Yang 	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x06),
17018716a647SCong Yang 	_INIT_DCS_CMD(0x92, 0x22),
17028716a647SCong Yang 
17038716a647SCong Yang 	_INIT_DCS_CMD(0xFF, 0x98, 0x82, 0x00),
17048716a647SCong Yang 	_INIT_DCS_CMD(0x11),
17058716a647SCong Yang 	_INIT_DELAY_CMD(120),
17068716a647SCong Yang 	_INIT_DCS_CMD(0x29),
17078716a647SCong Yang 	_INIT_DELAY_CMD(20),
17088716a647SCong Yang 	{},
17098716a647SCong Yang };
17108716a647SCong Yang 
to_boe_panel(struct drm_panel * panel)1711a869b9dbSJitao Shi static inline struct boe_panel *to_boe_panel(struct drm_panel *panel)
1712a869b9dbSJitao Shi {
1713a869b9dbSJitao Shi 	return container_of(panel, struct boe_panel, base);
1714a869b9dbSJitao Shi }
1715a869b9dbSJitao Shi 
boe_panel_init_dcs_cmd(struct boe_panel * boe)1716a869b9dbSJitao Shi static int boe_panel_init_dcs_cmd(struct boe_panel *boe)
1717a869b9dbSJitao Shi {
1718a869b9dbSJitao Shi 	struct mipi_dsi_device *dsi = boe->dsi;
1719a869b9dbSJitao Shi 	struct drm_panel *panel = &boe->base;
1720a869b9dbSJitao Shi 	int i, err = 0;
1721a869b9dbSJitao Shi 
1722a869b9dbSJitao Shi 	if (boe->desc->init_cmds) {
1723a869b9dbSJitao Shi 		const struct panel_init_cmd *init_cmds = boe->desc->init_cmds;
1724a869b9dbSJitao Shi 
1725a869b9dbSJitao Shi 		for (i = 0; init_cmds[i].len != 0; i++) {
1726a869b9dbSJitao Shi 			const struct panel_init_cmd *cmd = &init_cmds[i];
1727a869b9dbSJitao Shi 
1728a869b9dbSJitao Shi 			switch (cmd->type) {
1729a869b9dbSJitao Shi 			case DELAY_CMD:
1730a869b9dbSJitao Shi 				msleep(cmd->data[0]);
1731a869b9dbSJitao Shi 				err = 0;
1732a869b9dbSJitao Shi 				break;
1733a869b9dbSJitao Shi 
1734a869b9dbSJitao Shi 			case INIT_DCS_CMD:
1735a869b9dbSJitao Shi 				err = mipi_dsi_dcs_write(dsi, cmd->data[0],
1736a869b9dbSJitao Shi 							 cmd->len <= 1 ? NULL :
1737a869b9dbSJitao Shi 							 &cmd->data[1],
1738a869b9dbSJitao Shi 							 cmd->len - 1);
1739a869b9dbSJitao Shi 				break;
1740a869b9dbSJitao Shi 
1741a869b9dbSJitao Shi 			default:
1742a869b9dbSJitao Shi 				err = -EINVAL;
1743a869b9dbSJitao Shi 			}
1744a869b9dbSJitao Shi 
1745a869b9dbSJitao Shi 			if (err < 0) {
1746a869b9dbSJitao Shi 				dev_err(panel->dev,
1747a869b9dbSJitao Shi 					"failed to write command %u\n", i);
1748a869b9dbSJitao Shi 				return err;
1749a869b9dbSJitao Shi 			}
1750a869b9dbSJitao Shi 		}
1751a869b9dbSJitao Shi 	}
1752a869b9dbSJitao Shi 	return 0;
1753a869b9dbSJitao Shi }
1754a869b9dbSJitao Shi 
boe_panel_enter_sleep_mode(struct boe_panel * boe)1755a869b9dbSJitao Shi static int boe_panel_enter_sleep_mode(struct boe_panel *boe)
1756a869b9dbSJitao Shi {
1757a869b9dbSJitao Shi 	struct mipi_dsi_device *dsi = boe->dsi;
1758a869b9dbSJitao Shi 	int ret;
1759a869b9dbSJitao Shi 
1760a869b9dbSJitao Shi 	dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;
1761a869b9dbSJitao Shi 
1762a869b9dbSJitao Shi 	ret = mipi_dsi_dcs_set_display_off(dsi);
1763a869b9dbSJitao Shi 	if (ret < 0)
1764a869b9dbSJitao Shi 		return ret;
1765a869b9dbSJitao Shi 
1766a869b9dbSJitao Shi 	ret = mipi_dsi_dcs_enter_sleep_mode(dsi);
1767a869b9dbSJitao Shi 	if (ret < 0)
1768a869b9dbSJitao Shi 		return ret;
1769a869b9dbSJitao Shi 
1770a869b9dbSJitao Shi 	return 0;
1771a869b9dbSJitao Shi }
1772a869b9dbSJitao Shi 
boe_panel_disable(struct drm_panel * panel)1773c913cd54SStephen Boyd static int boe_panel_disable(struct drm_panel *panel)
1774a869b9dbSJitao Shi {
1775a869b9dbSJitao Shi 	struct boe_panel *boe = to_boe_panel(panel);
1776a869b9dbSJitao Shi 	int ret;
1777a869b9dbSJitao Shi 
1778a869b9dbSJitao Shi 	ret = boe_panel_enter_sleep_mode(boe);
1779a869b9dbSJitao Shi 	if (ret < 0) {
1780a869b9dbSJitao Shi 		dev_err(panel->dev, "failed to set panel off: %d\n", ret);
1781a869b9dbSJitao Shi 		return ret;
1782a869b9dbSJitao Shi 	}
1783a869b9dbSJitao Shi 
1784a869b9dbSJitao Shi 	msleep(150);
178544de19e3SJitao Shi 
1786c913cd54SStephen Boyd 	return 0;
1787c913cd54SStephen Boyd }
1788c913cd54SStephen Boyd 
boe_panel_unprepare(struct drm_panel * panel)1789c913cd54SStephen Boyd static int boe_panel_unprepare(struct drm_panel *panel)
1790c913cd54SStephen Boyd {
1791c913cd54SStephen Boyd 	struct boe_panel *boe = to_boe_panel(panel);
1792c913cd54SStephen Boyd 
1793c913cd54SStephen Boyd 	if (!boe->prepared)
1794c913cd54SStephen Boyd 		return 0;
1795c913cd54SStephen Boyd 
179644de19e3SJitao Shi 	if (boe->desc->discharge_on_disable) {
179744de19e3SJitao Shi 		regulator_disable(boe->avee);
179844de19e3SJitao Shi 		regulator_disable(boe->avdd);
179944de19e3SJitao Shi 		usleep_range(5000, 7000);
180044de19e3SJitao Shi 		gpiod_set_value(boe->enable_gpio, 0);
180144de19e3SJitao Shi 		usleep_range(5000, 7000);
180244de19e3SJitao Shi 		regulator_disable(boe->pp1800);
180318c58153Syangcong 		regulator_disable(boe->pp3300);
180444de19e3SJitao Shi 	} else {
1805a869b9dbSJitao Shi 		gpiod_set_value(boe->enable_gpio, 0);
180693ee1a2cSyangcong 		usleep_range(1000, 2000);
1807a869b9dbSJitao Shi 		regulator_disable(boe->avee);
1808a869b9dbSJitao Shi 		regulator_disable(boe->avdd);
1809a869b9dbSJitao Shi 		usleep_range(5000, 7000);
1810a869b9dbSJitao Shi 		regulator_disable(boe->pp1800);
181118c58153Syangcong 		regulator_disable(boe->pp3300);
181244de19e3SJitao Shi 	}
1813a869b9dbSJitao Shi 
1814a869b9dbSJitao Shi 	boe->prepared = false;
1815a869b9dbSJitao Shi 
1816a869b9dbSJitao Shi 	return 0;
1817a869b9dbSJitao Shi }
1818a869b9dbSJitao Shi 
boe_panel_prepare(struct drm_panel * panel)1819a869b9dbSJitao Shi static int boe_panel_prepare(struct drm_panel *panel)
1820a869b9dbSJitao Shi {
1821a869b9dbSJitao Shi 	struct boe_panel *boe = to_boe_panel(panel);
1822a869b9dbSJitao Shi 	int ret;
1823a869b9dbSJitao Shi 
1824a869b9dbSJitao Shi 	if (boe->prepared)
1825a869b9dbSJitao Shi 		return 0;
1826a869b9dbSJitao Shi 
1827a869b9dbSJitao Shi 	gpiod_set_value(boe->enable_gpio, 0);
1828a869b9dbSJitao Shi 	usleep_range(1000, 1500);
1829a869b9dbSJitao Shi 
183018c58153Syangcong 	ret = regulator_enable(boe->pp3300);
183118c58153Syangcong 	if (ret < 0)
183218c58153Syangcong 		return ret;
183318c58153Syangcong 
1834a869b9dbSJitao Shi 	ret = regulator_enable(boe->pp1800);
1835a869b9dbSJitao Shi 	if (ret < 0)
1836a869b9dbSJitao Shi 		return ret;
1837a869b9dbSJitao Shi 
1838a869b9dbSJitao Shi 	usleep_range(3000, 5000);
1839a869b9dbSJitao Shi 
1840a869b9dbSJitao Shi 	ret = regulator_enable(boe->avdd);
1841a869b9dbSJitao Shi 	if (ret < 0)
1842a869b9dbSJitao Shi 		goto poweroff1v8;
1843a869b9dbSJitao Shi 	ret = regulator_enable(boe->avee);
1844a869b9dbSJitao Shi 	if (ret < 0)
1845a869b9dbSJitao Shi 		goto poweroffavdd;
1846a869b9dbSJitao Shi 
184793ee1a2cSyangcong 	usleep_range(10000, 11000);
1848a869b9dbSJitao Shi 
1849812562b8SShuijing Li 	if (boe->desc->lp11_before_reset) {
1850c9bec33bSDouglas Anderson 		ret = mipi_dsi_dcs_nop(boe->dsi);
1851c9bec33bSDouglas Anderson 		if (ret < 0) {
1852c9bec33bSDouglas Anderson 			dev_err(&boe->dsi->dev, "Failed to send NOP: %d\n", ret);
1853c9bec33bSDouglas Anderson 			goto poweroff;
1854c9bec33bSDouglas Anderson 		}
1855812562b8SShuijing Li 		usleep_range(1000, 2000);
1856812562b8SShuijing Li 	}
1857a869b9dbSJitao Shi 	gpiod_set_value(boe->enable_gpio, 1);
1858a869b9dbSJitao Shi 	usleep_range(1000, 2000);
1859a869b9dbSJitao Shi 	gpiod_set_value(boe->enable_gpio, 0);
1860a869b9dbSJitao Shi 	usleep_range(1000, 2000);
1861a869b9dbSJitao Shi 	gpiod_set_value(boe->enable_gpio, 1);
1862a869b9dbSJitao Shi 	usleep_range(6000, 10000);
1863a869b9dbSJitao Shi 
1864a869b9dbSJitao Shi 	ret = boe_panel_init_dcs_cmd(boe);
1865a869b9dbSJitao Shi 	if (ret < 0) {
1866a869b9dbSJitao Shi 		dev_err(panel->dev, "failed to init panel: %d\n", ret);
1867a869b9dbSJitao Shi 		goto poweroff;
1868a869b9dbSJitao Shi 	}
1869a869b9dbSJitao Shi 
1870a869b9dbSJitao Shi 	boe->prepared = true;
1871a869b9dbSJitao Shi 
1872a869b9dbSJitao Shi 	return 0;
1873a869b9dbSJitao Shi 
1874a869b9dbSJitao Shi poweroff:
187593296c25SDouglas Anderson 	gpiod_set_value(boe->enable_gpio, 0);
1876a869b9dbSJitao Shi 	regulator_disable(boe->avee);
1877a869b9dbSJitao Shi poweroffavdd:
1878a869b9dbSJitao Shi 	regulator_disable(boe->avdd);
1879a869b9dbSJitao Shi poweroff1v8:
1880a869b9dbSJitao Shi 	usleep_range(5000, 7000);
1881a869b9dbSJitao Shi 	regulator_disable(boe->pp1800);
1882a869b9dbSJitao Shi 
1883a869b9dbSJitao Shi 	return ret;
1884a869b9dbSJitao Shi }
1885a869b9dbSJitao Shi 
boe_panel_enable(struct drm_panel * panel)1886a869b9dbSJitao Shi static int boe_panel_enable(struct drm_panel *panel)
1887a869b9dbSJitao Shi {
1888a869b9dbSJitao Shi 	msleep(130);
1889a869b9dbSJitao Shi 	return 0;
1890a869b9dbSJitao Shi }
1891a869b9dbSJitao Shi 
189293ee1a2cSyangcong static const struct drm_display_mode boe_tv110c9m_default_mode = {
189393ee1a2cSyangcong 	.clock = 166594,
189493ee1a2cSyangcong 	.hdisplay = 1200,
189593ee1a2cSyangcong 	.hsync_start = 1200 + 40,
189693ee1a2cSyangcong 	.hsync_end = 1200 + 40 + 8,
189793ee1a2cSyangcong 	.htotal = 1200 + 40 + 8 + 28,
189893ee1a2cSyangcong 	.vdisplay = 2000,
189993ee1a2cSyangcong 	.vsync_start = 2000 + 26,
190093ee1a2cSyangcong 	.vsync_end = 2000 + 26 + 2,
190193ee1a2cSyangcong 	.vtotal = 2000 + 26 + 2 + 148,
190293ee1a2cSyangcong 	.type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
190393ee1a2cSyangcong };
190493ee1a2cSyangcong 
190593ee1a2cSyangcong static const struct panel_desc boe_tv110c9m_desc = {
190693ee1a2cSyangcong 	.modes = &boe_tv110c9m_default_mode,
190793ee1a2cSyangcong 	.bpc = 8,
190893ee1a2cSyangcong 	.size = {
190993ee1a2cSyangcong 		.width_mm = 143,
191093ee1a2cSyangcong 		.height_mm = 238,
191193ee1a2cSyangcong 	},
191293ee1a2cSyangcong 	.lanes = 4,
191393ee1a2cSyangcong 	.format = MIPI_DSI_FMT_RGB888,
191493ee1a2cSyangcong 	.mode_flags = MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_VIDEO
191593ee1a2cSyangcong 			| MIPI_DSI_MODE_VIDEO_HSE
191693ee1a2cSyangcong 			| MIPI_DSI_CLOCK_NON_CONTINUOUS
191793ee1a2cSyangcong 			| MIPI_DSI_MODE_VIDEO_BURST,
191893ee1a2cSyangcong 	.init_cmds = boe_tv110c9m_init_cmd,
191993ee1a2cSyangcong };
192093ee1a2cSyangcong 
192193ee1a2cSyangcong static const struct drm_display_mode inx_hj110iz_default_mode = {
1922519ce291SCong Yang 	.clock = 168432,
192393ee1a2cSyangcong 	.hdisplay = 1200,
192493ee1a2cSyangcong 	.hsync_start = 1200 + 40,
192593ee1a2cSyangcong 	.hsync_end = 1200 + 40 + 8,
192693ee1a2cSyangcong 	.htotal = 1200 + 40 + 8 + 28,
192793ee1a2cSyangcong 	.vdisplay = 2000,
192893ee1a2cSyangcong 	.vsync_start = 2000 + 26,
1929519ce291SCong Yang 	.vsync_end = 2000 + 26 + 2,
1930519ce291SCong Yang 	.vtotal = 2000 + 26 + 2 + 172,
193193ee1a2cSyangcong 	.type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
193293ee1a2cSyangcong };
193393ee1a2cSyangcong 
193493ee1a2cSyangcong static const struct panel_desc inx_hj110iz_desc = {
193593ee1a2cSyangcong 	.modes = &inx_hj110iz_default_mode,
193693ee1a2cSyangcong 	.bpc = 8,
193793ee1a2cSyangcong 	.size = {
193893ee1a2cSyangcong 		.width_mm = 143,
193993ee1a2cSyangcong 		.height_mm = 238,
194093ee1a2cSyangcong 	},
194193ee1a2cSyangcong 	.lanes = 4,
194293ee1a2cSyangcong 	.format = MIPI_DSI_FMT_RGB888,
194393ee1a2cSyangcong 	.mode_flags = MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_VIDEO
194493ee1a2cSyangcong 			| MIPI_DSI_MODE_VIDEO_HSE
194593ee1a2cSyangcong 			| MIPI_DSI_CLOCK_NON_CONTINUOUS
194693ee1a2cSyangcong 			| MIPI_DSI_MODE_VIDEO_BURST,
194742c632b0Syangcong 	.init_cmds = inx_hj110iz_init_cmd,
194893ee1a2cSyangcong };
194993ee1a2cSyangcong 
1950a869b9dbSJitao Shi static const struct drm_display_mode boe_tv101wum_nl6_default_mode = {
1951a869b9dbSJitao Shi 	.clock = 159425,
1952a869b9dbSJitao Shi 	.hdisplay = 1200,
1953a869b9dbSJitao Shi 	.hsync_start = 1200 + 100,
1954a869b9dbSJitao Shi 	.hsync_end = 1200 + 100 + 40,
1955a869b9dbSJitao Shi 	.htotal = 1200 + 100 + 40 + 24,
1956a869b9dbSJitao Shi 	.vdisplay = 1920,
1957a869b9dbSJitao Shi 	.vsync_start = 1920 + 10,
1958a869b9dbSJitao Shi 	.vsync_end = 1920 + 10 + 14,
1959a869b9dbSJitao Shi 	.vtotal = 1920 + 10 + 14 + 4,
1960a869b9dbSJitao Shi };
1961a869b9dbSJitao Shi 
1962a869b9dbSJitao Shi static const struct panel_desc boe_tv101wum_nl6_desc = {
1963a869b9dbSJitao Shi 	.modes = &boe_tv101wum_nl6_default_mode,
1964a869b9dbSJitao Shi 	.bpc = 8,
1965a869b9dbSJitao Shi 	.size = {
1966a869b9dbSJitao Shi 		.width_mm = 135,
1967a869b9dbSJitao Shi 		.height_mm = 216,
1968a869b9dbSJitao Shi 	},
1969a869b9dbSJitao Shi 	.lanes = 4,
1970a869b9dbSJitao Shi 	.format = MIPI_DSI_FMT_RGB888,
1971a869b9dbSJitao Shi 	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
1972a869b9dbSJitao Shi 		      MIPI_DSI_MODE_LPM,
1973a869b9dbSJitao Shi 	.init_cmds = boe_init_cmd,
197444de19e3SJitao Shi 	.discharge_on_disable = false,
197544de19e3SJitao Shi };
197644de19e3SJitao Shi 
197744de19e3SJitao Shi static const struct drm_display_mode auo_kd101n80_45na_default_mode = {
197844de19e3SJitao Shi 	.clock = 157000,
197944de19e3SJitao Shi 	.hdisplay = 1200,
1980d76acc9fSJitao Shi 	.hsync_start = 1200 + 60,
1981d76acc9fSJitao Shi 	.hsync_end = 1200 + 60 + 24,
1982d76acc9fSJitao Shi 	.htotal = 1200 + 60 + 24 + 56,
198344de19e3SJitao Shi 	.vdisplay = 1920,
198444de19e3SJitao Shi 	.vsync_start = 1920 + 16,
198544de19e3SJitao Shi 	.vsync_end = 1920 + 16 + 4,
198644de19e3SJitao Shi 	.vtotal = 1920 + 16 + 4 + 16,
198744de19e3SJitao Shi };
198844de19e3SJitao Shi 
198944de19e3SJitao Shi static const struct panel_desc auo_kd101n80_45na_desc = {
199044de19e3SJitao Shi 	.modes = &auo_kd101n80_45na_default_mode,
199144de19e3SJitao Shi 	.bpc = 8,
199244de19e3SJitao Shi 	.size = {
199344de19e3SJitao Shi 		.width_mm = 135,
199444de19e3SJitao Shi 		.height_mm = 216,
199544de19e3SJitao Shi 	},
199644de19e3SJitao Shi 	.lanes = 4,
199744de19e3SJitao Shi 	.format = MIPI_DSI_FMT_RGB888,
199844de19e3SJitao Shi 	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
199944de19e3SJitao Shi 		      MIPI_DSI_MODE_LPM,
200044de19e3SJitao Shi 	.init_cmds = auo_kd101n80_45na_init_cmd,
200144de19e3SJitao Shi 	.discharge_on_disable = true,
2002a869b9dbSJitao Shi };
2003a869b9dbSJitao Shi 
2004e6d020eeSJitao Shi static const struct drm_display_mode boe_tv101wum_n53_default_mode = {
2005e6d020eeSJitao Shi 	.clock = 159916,
2006e6d020eeSJitao Shi 	.hdisplay = 1200,
2007e6d020eeSJitao Shi 	.hsync_start = 1200 + 80,
2008e6d020eeSJitao Shi 	.hsync_end = 1200 + 80 + 24,
2009c6cccafaSNicolas Boichat 	.htotal = 1200 + 80 + 24 + 60,
2010e6d020eeSJitao Shi 	.vdisplay = 1920,
2011e6d020eeSJitao Shi 	.vsync_start = 1920 + 20,
2012e6d020eeSJitao Shi 	.vsync_end = 1920 + 20 + 4,
2013e6d020eeSJitao Shi 	.vtotal = 1920 + 20 + 4 + 10,
2014e6d020eeSJitao Shi 	.type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
2015e6d020eeSJitao Shi };
2016e6d020eeSJitao Shi 
2017e6d020eeSJitao Shi static const struct panel_desc boe_tv101wum_n53_desc = {
2018e6d020eeSJitao Shi 	.modes = &boe_tv101wum_n53_default_mode,
2019e6d020eeSJitao Shi 	.bpc = 8,
2020e6d020eeSJitao Shi 	.size = {
2021e6d020eeSJitao Shi 		.width_mm = 135,
2022e6d020eeSJitao Shi 		.height_mm = 216,
2023e6d020eeSJitao Shi 	},
2024e6d020eeSJitao Shi 	.lanes = 4,
2025e6d020eeSJitao Shi 	.format = MIPI_DSI_FMT_RGB888,
2026e6d020eeSJitao Shi 	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
2027e6d020eeSJitao Shi 		      MIPI_DSI_MODE_LPM,
2028e6d020eeSJitao Shi 	.init_cmds = boe_init_cmd,
2029e6d020eeSJitao Shi };
2030e6d020eeSJitao Shi 
203156ad624bSJitao Shi static const struct drm_display_mode auo_b101uan08_3_default_mode = {
203256ad624bSJitao Shi 	.clock = 159667,
203356ad624bSJitao Shi 	.hdisplay = 1200,
203456ad624bSJitao Shi 	.hsync_start = 1200 + 60,
203556ad624bSJitao Shi 	.hsync_end = 1200 + 60 + 4,
203656ad624bSJitao Shi 	.htotal = 1200 + 60 + 4 + 80,
203756ad624bSJitao Shi 	.vdisplay = 1920,
203856ad624bSJitao Shi 	.vsync_start = 1920 + 34,
203956ad624bSJitao Shi 	.vsync_end = 1920 + 34 + 2,
204056ad624bSJitao Shi 	.vtotal = 1920 + 34 + 2 + 24,
204156ad624bSJitao Shi 	.type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
204256ad624bSJitao Shi };
204356ad624bSJitao Shi 
204456ad624bSJitao Shi static const struct panel_desc auo_b101uan08_3_desc = {
204556ad624bSJitao Shi 	.modes = &auo_b101uan08_3_default_mode,
204656ad624bSJitao Shi 	.bpc = 8,
204756ad624bSJitao Shi 	.size = {
204856ad624bSJitao Shi 		.width_mm = 135,
204956ad624bSJitao Shi 		.height_mm = 216,
205056ad624bSJitao Shi 	},
205156ad624bSJitao Shi 	.lanes = 4,
205256ad624bSJitao Shi 	.format = MIPI_DSI_FMT_RGB888,
205356ad624bSJitao Shi 	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
205456ad624bSJitao Shi 		      MIPI_DSI_MODE_LPM,
205556ad624bSJitao Shi 	.init_cmds = auo_b101uan08_3_init_cmd,
205621bffb86SXuxin Xiong 	.lp11_before_reset = true,
205756ad624bSJitao Shi };
205856ad624bSJitao Shi 
2059963518c1SDavid Lu static const struct drm_display_mode boe_tv105wum_nw0_default_mode = {
206042470eecSDavid Lu 	.clock = 159916,
2061963518c1SDavid Lu 	.hdisplay = 1200,
2062963518c1SDavid Lu 	.hsync_start = 1200 + 80,
2063963518c1SDavid Lu 	.hsync_end = 1200 + 80 + 24,
2064963518c1SDavid Lu 	.htotal = 1200 + 80 + 24 + 60,
2065963518c1SDavid Lu 	.vdisplay = 1920,
206642470eecSDavid Lu 	.vsync_start = 1920 + 20,
206742470eecSDavid Lu 	.vsync_end = 1920 + 20 + 4,
206842470eecSDavid Lu 	.vtotal = 1920 + 20 + 4 + 10,
2069963518c1SDavid Lu 	.type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
2070963518c1SDavid Lu };
2071963518c1SDavid Lu 
2072963518c1SDavid Lu static const struct panel_desc boe_tv105wum_nw0_desc = {
2073963518c1SDavid Lu 	.modes = &boe_tv105wum_nw0_default_mode,
2074963518c1SDavid Lu 	.bpc = 8,
2075963518c1SDavid Lu 	.size = {
2076963518c1SDavid Lu 		.width_mm = 141,
2077963518c1SDavid Lu 		.height_mm = 226,
2078963518c1SDavid Lu 	},
2079963518c1SDavid Lu 	.lanes = 4,
2080963518c1SDavid Lu 	.format = MIPI_DSI_FMT_RGB888,
2081963518c1SDavid Lu 	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
2082963518c1SDavid Lu 		      MIPI_DSI_MODE_LPM,
2083963518c1SDavid Lu 	.init_cmds = boe_init_cmd,
2084812562b8SShuijing Li 	.lp11_before_reset = true,
2085963518c1SDavid Lu };
2086963518c1SDavid Lu 
20876069b66cSRuihai Zhou static const struct drm_display_mode starry_qfh032011_53g_default_mode = {
20886069b66cSRuihai Zhou 	.clock = 165731,
20896069b66cSRuihai Zhou 	.hdisplay = 1200,
20906069b66cSRuihai Zhou 	.hsync_start = 1200 + 100,
20916069b66cSRuihai Zhou 	.hsync_end = 1200 + 100 + 10,
20926069b66cSRuihai Zhou 	.htotal = 1200 + 100 + 10 + 100,
20936069b66cSRuihai Zhou 	.vdisplay = 1920,
20946069b66cSRuihai Zhou 	.vsync_start = 1920 + 14,
20956069b66cSRuihai Zhou 	.vsync_end = 1920 + 14 + 10,
20966069b66cSRuihai Zhou 	.vtotal = 1920 + 14 + 10 + 15,
20976069b66cSRuihai Zhou };
20986069b66cSRuihai Zhou 
20996069b66cSRuihai Zhou static const struct panel_desc starry_qfh032011_53g_desc = {
21006069b66cSRuihai Zhou 	.modes = &starry_qfh032011_53g_default_mode,
21016069b66cSRuihai Zhou 	.bpc = 8,
21026069b66cSRuihai Zhou 	.size = {
21036069b66cSRuihai Zhou 		.width_mm = 135,
21046069b66cSRuihai Zhou 		.height_mm = 216,
21056069b66cSRuihai Zhou 	},
21066069b66cSRuihai Zhou 	.lanes = 4,
21076069b66cSRuihai Zhou 	.format = MIPI_DSI_FMT_RGB888,
21086069b66cSRuihai Zhou 	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
21096069b66cSRuihai Zhou 		      MIPI_DSI_MODE_LPM,
21106069b66cSRuihai Zhou 	.init_cmds = starry_qfh032011_53g_init_cmd,
21117f4ea403Sxiazhengqiao 	.lp11_before_reset = true,
21126069b66cSRuihai Zhou };
21136069b66cSRuihai Zhou 
21141bc2ef06SCong Yang static const struct drm_display_mode starry_himax83102_j02_default_mode = {
2115*9dd05dacSCong Yang 	.clock = 162680,
21161bc2ef06SCong Yang 	.hdisplay = 1200,
2117*9dd05dacSCong Yang 	.hsync_start = 1200 + 60,
2118*9dd05dacSCong Yang 	.hsync_end = 1200 + 60 + 20,
2119*9dd05dacSCong Yang 	.htotal = 1200 + 60 + 20 + 40,
21201bc2ef06SCong Yang 	.vdisplay = 1920,
21211bc2ef06SCong Yang 	.vsync_start = 1920 + 116,
21221bc2ef06SCong Yang 	.vsync_end = 1920 + 116 + 8,
21231bc2ef06SCong Yang 	.vtotal = 1920 + 116 + 8 + 12,
21241bc2ef06SCong Yang 	.type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
21251bc2ef06SCong Yang };
21261bc2ef06SCong Yang 
21271bc2ef06SCong Yang static const struct panel_desc starry_himax83102_j02_desc = {
21281bc2ef06SCong Yang 	.modes = &starry_himax83102_j02_default_mode,
21291bc2ef06SCong Yang 	.bpc = 8,
21301bc2ef06SCong Yang 	.size = {
21311bc2ef06SCong Yang 		.width_mm = 141,
21321bc2ef06SCong Yang 		.height_mm = 226,
21331bc2ef06SCong Yang 	},
21341bc2ef06SCong Yang 	.lanes = 4,
21351bc2ef06SCong Yang 	.format = MIPI_DSI_FMT_RGB888,
21361bc2ef06SCong Yang 	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
21371bc2ef06SCong Yang 		      MIPI_DSI_MODE_LPM,
21381bc2ef06SCong Yang 	.init_cmds = starry_himax83102_j02_init_cmd,
21391bc2ef06SCong Yang 	.lp11_before_reset = true,
21401bc2ef06SCong Yang };
21411bc2ef06SCong Yang 
21428716a647SCong Yang static const struct drm_display_mode starry_ili9882t_default_mode = {
21438716a647SCong Yang 	.clock = 165280,
21448716a647SCong Yang 	.hdisplay = 1200,
214559bba51eSCong Yang 	.hsync_start = 1200 + 72,
214659bba51eSCong Yang 	.hsync_end = 1200 + 72 + 30,
214759bba51eSCong Yang 	.htotal = 1200 + 72 + 30 + 72,
21488716a647SCong Yang 	.vdisplay = 1920,
21498716a647SCong Yang 	.vsync_start = 1920 + 68,
21508716a647SCong Yang 	.vsync_end = 1920 + 68 + 2,
21518716a647SCong Yang 	.vtotal = 1920 + 68 + 2 + 10,
21528716a647SCong Yang 	.type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
21538716a647SCong Yang };
21548716a647SCong Yang 
21558716a647SCong Yang static const struct panel_desc starry_ili9882t_desc = {
21568716a647SCong Yang 	.modes = &starry_ili9882t_default_mode,
21578716a647SCong Yang 	.bpc = 8,
21588716a647SCong Yang 	.size = {
21598716a647SCong Yang 		.width_mm = 141,
21608716a647SCong Yang 		.height_mm = 226,
21618716a647SCong Yang 	},
21628716a647SCong Yang 	.lanes = 4,
21638716a647SCong Yang 	.format = MIPI_DSI_FMT_RGB888,
21648716a647SCong Yang 	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
21658716a647SCong Yang 		      MIPI_DSI_MODE_LPM,
21668716a647SCong Yang 	.init_cmds = starry_ili9882t_init_cmd,
21678716a647SCong Yang 	.lp11_before_reset = true,
21688716a647SCong Yang };
21698716a647SCong Yang 
boe_panel_get_modes(struct drm_panel * panel,struct drm_connector * connector)2170a869b9dbSJitao Shi static int boe_panel_get_modes(struct drm_panel *panel,
2171a869b9dbSJitao Shi 			       struct drm_connector *connector)
2172a869b9dbSJitao Shi {
2173a869b9dbSJitao Shi 	struct boe_panel *boe = to_boe_panel(panel);
2174a869b9dbSJitao Shi 	const struct drm_display_mode *m = boe->desc->modes;
2175a869b9dbSJitao Shi 	struct drm_display_mode *mode;
2176a869b9dbSJitao Shi 
2177a869b9dbSJitao Shi 	mode = drm_mode_duplicate(connector->dev, m);
2178a869b9dbSJitao Shi 	if (!mode) {
2179a869b9dbSJitao Shi 		dev_err(panel->dev, "failed to add mode %ux%u@%u\n",
21800425662fSVille Syrjälä 			m->hdisplay, m->vdisplay, drm_mode_vrefresh(m));
2181a869b9dbSJitao Shi 		return -ENOMEM;
2182a869b9dbSJitao Shi 	}
2183a869b9dbSJitao Shi 
2184a869b9dbSJitao Shi 	mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
2185a869b9dbSJitao Shi 	drm_mode_set_name(mode);
2186a869b9dbSJitao Shi 	drm_mode_probed_add(connector, mode);
2187a869b9dbSJitao Shi 
2188a869b9dbSJitao Shi 	connector->display_info.width_mm = boe->desc->size.width_mm;
2189a869b9dbSJitao Shi 	connector->display_info.height_mm = boe->desc->size.height_mm;
2190a869b9dbSJitao Shi 	connector->display_info.bpc = boe->desc->bpc;
21913fa214eeSHsin-Yi Wang 	/*
21923fa214eeSHsin-Yi Wang 	 * TODO: Remove once all drm drivers call
21933fa214eeSHsin-Yi Wang 	 * drm_connector_set_orientation_from_panel()
21943fa214eeSHsin-Yi Wang 	 */
21954a135d54SDerek Basehore 	drm_connector_set_panel_orientation(connector, boe->orientation);
2196a869b9dbSJitao Shi 
2197a869b9dbSJitao Shi 	return 1;
2198a869b9dbSJitao Shi }
2199a869b9dbSJitao Shi 
boe_panel_get_orientation(struct drm_panel * panel)22003fa214eeSHsin-Yi Wang static enum drm_panel_orientation boe_panel_get_orientation(struct drm_panel *panel)
22013fa214eeSHsin-Yi Wang {
22023fa214eeSHsin-Yi Wang 	struct boe_panel *boe = to_boe_panel(panel);
22033fa214eeSHsin-Yi Wang 
22043fa214eeSHsin-Yi Wang 	return boe->orientation;
22053fa214eeSHsin-Yi Wang }
22063fa214eeSHsin-Yi Wang 
2207a869b9dbSJitao Shi static const struct drm_panel_funcs boe_panel_funcs = {
2208c913cd54SStephen Boyd 	.disable = boe_panel_disable,
2209a869b9dbSJitao Shi 	.unprepare = boe_panel_unprepare,
2210a869b9dbSJitao Shi 	.prepare = boe_panel_prepare,
2211a869b9dbSJitao Shi 	.enable = boe_panel_enable,
2212a869b9dbSJitao Shi 	.get_modes = boe_panel_get_modes,
22133fa214eeSHsin-Yi Wang 	.get_orientation = boe_panel_get_orientation,
2214a869b9dbSJitao Shi };
2215a869b9dbSJitao Shi 
boe_panel_add(struct boe_panel * boe)2216a869b9dbSJitao Shi static int boe_panel_add(struct boe_panel *boe)
2217a869b9dbSJitao Shi {
2218a869b9dbSJitao Shi 	struct device *dev = &boe->dsi->dev;
2219a869b9dbSJitao Shi 	int err;
2220a869b9dbSJitao Shi 
2221a869b9dbSJitao Shi 	boe->avdd = devm_regulator_get(dev, "avdd");
2222a869b9dbSJitao Shi 	if (IS_ERR(boe->avdd))
2223a869b9dbSJitao Shi 		return PTR_ERR(boe->avdd);
2224a869b9dbSJitao Shi 
2225a869b9dbSJitao Shi 	boe->avee = devm_regulator_get(dev, "avee");
2226a869b9dbSJitao Shi 	if (IS_ERR(boe->avee))
2227a869b9dbSJitao Shi 		return PTR_ERR(boe->avee);
2228a869b9dbSJitao Shi 
222918c58153Syangcong 	boe->pp3300 = devm_regulator_get(dev, "pp3300");
223018c58153Syangcong 	if (IS_ERR(boe->pp3300))
223118c58153Syangcong 		return PTR_ERR(boe->pp3300);
223218c58153Syangcong 
2233a869b9dbSJitao Shi 	boe->pp1800 = devm_regulator_get(dev, "pp1800");
2234a869b9dbSJitao Shi 	if (IS_ERR(boe->pp1800))
2235a869b9dbSJitao Shi 		return PTR_ERR(boe->pp1800);
2236a869b9dbSJitao Shi 
2237a869b9dbSJitao Shi 	boe->enable_gpio = devm_gpiod_get(dev, "enable", GPIOD_OUT_LOW);
2238a869b9dbSJitao Shi 	if (IS_ERR(boe->enable_gpio)) {
2239a869b9dbSJitao Shi 		dev_err(dev, "cannot get reset-gpios %ld\n",
2240a869b9dbSJitao Shi 			PTR_ERR(boe->enable_gpio));
2241a869b9dbSJitao Shi 		return PTR_ERR(boe->enable_gpio);
2242a869b9dbSJitao Shi 	}
2243a869b9dbSJitao Shi 
2244a869b9dbSJitao Shi 	gpiod_set_value(boe->enable_gpio, 0);
2245a869b9dbSJitao Shi 
2246d4d8162dSDouglas Anderson 	boe->base.prepare_prev_first = true;
2247d4d8162dSDouglas Anderson 
2248a869b9dbSJitao Shi 	drm_panel_init(&boe->base, dev, &boe_panel_funcs,
2249a869b9dbSJitao Shi 		       DRM_MODE_CONNECTOR_DSI);
22504a135d54SDerek Basehore 	err = of_drm_get_panel_orientation(dev->of_node, &boe->orientation);
22514a135d54SDerek Basehore 	if (err < 0) {
22524a135d54SDerek Basehore 		dev_err(dev, "%pOF: failed to get orientation %d\n", dev->of_node, err);
22534a135d54SDerek Basehore 		return err;
22544a135d54SDerek Basehore 	}
2255a869b9dbSJitao Shi 
2256a869b9dbSJitao Shi 	err = drm_panel_of_backlight(&boe->base);
2257a869b9dbSJitao Shi 	if (err)
2258a869b9dbSJitao Shi 		return err;
2259a869b9dbSJitao Shi 
2260a869b9dbSJitao Shi 	boe->base.funcs = &boe_panel_funcs;
2261a869b9dbSJitao Shi 	boe->base.dev = &boe->dsi->dev;
2262a869b9dbSJitao Shi 
2263c3ee8c65SBernard Zhao 	drm_panel_add(&boe->base);
2264c3ee8c65SBernard Zhao 
2265c3ee8c65SBernard Zhao 	return 0;
2266a869b9dbSJitao Shi }
2267a869b9dbSJitao Shi 
boe_panel_probe(struct mipi_dsi_device * dsi)2268a869b9dbSJitao Shi static int boe_panel_probe(struct mipi_dsi_device *dsi)
2269a869b9dbSJitao Shi {
2270a869b9dbSJitao Shi 	struct boe_panel *boe;
2271a869b9dbSJitao Shi 	int ret;
2272a869b9dbSJitao Shi 	const struct panel_desc *desc;
2273a869b9dbSJitao Shi 
2274a869b9dbSJitao Shi 	boe = devm_kzalloc(&dsi->dev, sizeof(*boe), GFP_KERNEL);
2275a869b9dbSJitao Shi 	if (!boe)
2276a869b9dbSJitao Shi 		return -ENOMEM;
2277a869b9dbSJitao Shi 
2278a869b9dbSJitao Shi 	desc = of_device_get_match_data(&dsi->dev);
2279a869b9dbSJitao Shi 	dsi->lanes = desc->lanes;
2280a869b9dbSJitao Shi 	dsi->format = desc->format;
2281a869b9dbSJitao Shi 	dsi->mode_flags = desc->mode_flags;
2282a869b9dbSJitao Shi 	boe->desc = desc;
2283a869b9dbSJitao Shi 	boe->dsi = dsi;
2284a869b9dbSJitao Shi 	ret = boe_panel_add(boe);
2285a869b9dbSJitao Shi 	if (ret < 0)
2286a869b9dbSJitao Shi 		return ret;
2287a869b9dbSJitao Shi 
2288a869b9dbSJitao Shi 	mipi_dsi_set_drvdata(dsi, boe);
2289a869b9dbSJitao Shi 
2290a869b9dbSJitao Shi 	ret = mipi_dsi_attach(dsi);
2291a869b9dbSJitao Shi 	if (ret)
2292a869b9dbSJitao Shi 		drm_panel_remove(&boe->base);
2293a869b9dbSJitao Shi 
2294a869b9dbSJitao Shi 	return ret;
2295a869b9dbSJitao Shi }
2296a869b9dbSJitao Shi 
boe_panel_shutdown(struct mipi_dsi_device * dsi)2297a869b9dbSJitao Shi static void boe_panel_shutdown(struct mipi_dsi_device *dsi)
2298a869b9dbSJitao Shi {
2299a869b9dbSJitao Shi 	struct boe_panel *boe = mipi_dsi_get_drvdata(dsi);
2300a869b9dbSJitao Shi 
2301a869b9dbSJitao Shi 	drm_panel_disable(&boe->base);
2302a869b9dbSJitao Shi 	drm_panel_unprepare(&boe->base);
2303a869b9dbSJitao Shi }
2304a869b9dbSJitao Shi 
boe_panel_remove(struct mipi_dsi_device * dsi)230579abca2bSUwe Kleine-König static void boe_panel_remove(struct mipi_dsi_device *dsi)
2306a869b9dbSJitao Shi {
2307a869b9dbSJitao Shi 	struct boe_panel *boe = mipi_dsi_get_drvdata(dsi);
2308a869b9dbSJitao Shi 	int ret;
2309a869b9dbSJitao Shi 
2310a869b9dbSJitao Shi 	boe_panel_shutdown(dsi);
2311a869b9dbSJitao Shi 
2312a869b9dbSJitao Shi 	ret = mipi_dsi_detach(dsi);
2313a869b9dbSJitao Shi 	if (ret < 0)
2314a869b9dbSJitao Shi 		dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", ret);
2315a869b9dbSJitao Shi 
2316a869b9dbSJitao Shi 	if (boe->base.dev)
2317a869b9dbSJitao Shi 		drm_panel_remove(&boe->base);
2318a869b9dbSJitao Shi }
2319a869b9dbSJitao Shi 
2320a869b9dbSJitao Shi static const struct of_device_id boe_of_match[] = {
2321a869b9dbSJitao Shi 	{ .compatible = "boe,tv101wum-nl6",
2322a869b9dbSJitao Shi 	  .data = &boe_tv101wum_nl6_desc
2323a869b9dbSJitao Shi 	},
232444de19e3SJitao Shi 	{ .compatible = "auo,kd101n80-45na",
232544de19e3SJitao Shi 	  .data = &auo_kd101n80_45na_desc
232644de19e3SJitao Shi 	},
2327e6d020eeSJitao Shi 	{ .compatible = "boe,tv101wum-n53",
2328e6d020eeSJitao Shi 	  .data = &boe_tv101wum_n53_desc
2329e6d020eeSJitao Shi 	},
233056ad624bSJitao Shi 	{ .compatible = "auo,b101uan08.3",
233156ad624bSJitao Shi 	  .data = &auo_b101uan08_3_desc
233256ad624bSJitao Shi 	},
2333963518c1SDavid Lu 	{ .compatible = "boe,tv105wum-nw0",
2334963518c1SDavid Lu 	  .data = &boe_tv105wum_nw0_desc
2335963518c1SDavid Lu 	},
233693ee1a2cSyangcong 	{ .compatible = "boe,tv110c9m-ll3",
233793ee1a2cSyangcong 	  .data = &boe_tv110c9m_desc
233893ee1a2cSyangcong 	},
233993ee1a2cSyangcong 	{ .compatible = "innolux,hj110iz-01a",
234093ee1a2cSyangcong 	  .data = &inx_hj110iz_desc
234193ee1a2cSyangcong 	},
23426069b66cSRuihai Zhou 	{ .compatible = "starry,2081101qfh032011-53g",
23436069b66cSRuihai Zhou 	  .data = &starry_qfh032011_53g_desc
23446069b66cSRuihai Zhou 	},
23451bc2ef06SCong Yang 	{ .compatible = "starry,himax83102-j02",
23461bc2ef06SCong Yang 	  .data = &starry_himax83102_j02_desc
23471bc2ef06SCong Yang 	},
23488716a647SCong Yang 	{ .compatible = "starry,ili9882t",
23498716a647SCong Yang 	  .data = &starry_ili9882t_desc
23508716a647SCong Yang 	},
2351a869b9dbSJitao Shi 	{ /* sentinel */ }
2352a869b9dbSJitao Shi };
2353a869b9dbSJitao Shi MODULE_DEVICE_TABLE(of, boe_of_match);
2354a869b9dbSJitao Shi 
2355a869b9dbSJitao Shi static struct mipi_dsi_driver boe_panel_driver = {
2356a869b9dbSJitao Shi 	.driver = {
2357a869b9dbSJitao Shi 		.name = "panel-boe-tv101wum-nl6",
2358a869b9dbSJitao Shi 		.of_match_table = boe_of_match,
2359a869b9dbSJitao Shi 	},
2360a869b9dbSJitao Shi 	.probe = boe_panel_probe,
2361a869b9dbSJitao Shi 	.remove = boe_panel_remove,
2362a869b9dbSJitao Shi 	.shutdown = boe_panel_shutdown,
2363a869b9dbSJitao Shi };
2364a869b9dbSJitao Shi module_mipi_dsi_driver(boe_panel_driver);
2365a869b9dbSJitao Shi 
2366a869b9dbSJitao Shi MODULE_AUTHOR("Jitao Shi <jitao.shi@mediatek.com>");
2367a869b9dbSJitao Shi MODULE_DESCRIPTION("BOE tv101wum-nl6 1200x1920 video mode panel driver");
2368a869b9dbSJitao Shi MODULE_LICENSE("GPL v2");
2369