brintos

brintos / linux-shallow public Read only

0
0
Text · 52.0 KiB · 084c37f Raw
1617 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (C) 2017-2018, Bootlin4 */5 6#include <linux/delay.h>7#include <linux/device.h>8#include <linux/err.h>9#include <linux/errno.h>10#include <linux/kernel.h>11#include <linux/module.h>12#include <linux/of.h>13 14#include <linux/gpio/consumer.h>15#include <linux/regulator/consumer.h>16 17#include <drm/drm_mipi_dsi.h>18#include <drm/drm_modes.h>19#include <drm/drm_panel.h>20 21#include <video/mipi_display.h>22 23enum ili9881c_op {24	ILI9881C_SWITCH_PAGE,25	ILI9881C_COMMAND,26};27 28struct ili9881c_instr {29	enum ili9881c_op	op;30 31	union arg {32		struct cmd {33			u8	cmd;34			u8	data;35		} cmd;36		u8	page;37	} arg;38};39 40struct ili9881c_desc {41	const struct ili9881c_instr *init;42	const size_t init_length;43	const struct drm_display_mode *mode;44	const unsigned long mode_flags;45};46 47struct ili9881c {48	struct drm_panel	panel;49	struct mipi_dsi_device	*dsi;50	const struct ili9881c_desc	*desc;51 52	struct regulator	*power;53	struct gpio_desc	*reset;54 55	enum drm_panel_orientation	orientation;56};57 58#define ILI9881C_SWITCH_PAGE_INSTR(_page)	\59	{					\60		.op = ILI9881C_SWITCH_PAGE,	\61		.arg = {			\62			.page = (_page),	\63		},				\64	}65 66#define ILI9881C_COMMAND_INSTR(_cmd, _data)		\67	{						\68		.op = ILI9881C_COMMAND,		\69		.arg = {				\70			.cmd = {			\71				.cmd = (_cmd),		\72				.data = (_data),	\73			},				\74		},					\75	}76 77static const struct ili9881c_instr lhr050h41_init[] = {78	ILI9881C_SWITCH_PAGE_INSTR(3),79	ILI9881C_COMMAND_INSTR(0x01, 0x00),80	ILI9881C_COMMAND_INSTR(0x02, 0x00),81	ILI9881C_COMMAND_INSTR(0x03, 0x73),82	ILI9881C_COMMAND_INSTR(0x04, 0x03),83	ILI9881C_COMMAND_INSTR(0x05, 0x00),84	ILI9881C_COMMAND_INSTR(0x06, 0x06),85	ILI9881C_COMMAND_INSTR(0x07, 0x06),86	ILI9881C_COMMAND_INSTR(0x08, 0x00),87	ILI9881C_COMMAND_INSTR(0x09, 0x18),88	ILI9881C_COMMAND_INSTR(0x0a, 0x04),89	ILI9881C_COMMAND_INSTR(0x0b, 0x00),90	ILI9881C_COMMAND_INSTR(0x0c, 0x02),91	ILI9881C_COMMAND_INSTR(0x0d, 0x03),92	ILI9881C_COMMAND_INSTR(0x0e, 0x00),93	ILI9881C_COMMAND_INSTR(0x0f, 0x25),94	ILI9881C_COMMAND_INSTR(0x10, 0x25),95	ILI9881C_COMMAND_INSTR(0x11, 0x00),96	ILI9881C_COMMAND_INSTR(0x12, 0x00),97	ILI9881C_COMMAND_INSTR(0x13, 0x00),98	ILI9881C_COMMAND_INSTR(0x14, 0x00),99	ILI9881C_COMMAND_INSTR(0x15, 0x00),100	ILI9881C_COMMAND_INSTR(0x16, 0x0C),101	ILI9881C_COMMAND_INSTR(0x17, 0x00),102	ILI9881C_COMMAND_INSTR(0x18, 0x00),103	ILI9881C_COMMAND_INSTR(0x19, 0x00),104	ILI9881C_COMMAND_INSTR(0x1a, 0x00),105	ILI9881C_COMMAND_INSTR(0x1b, 0x00),106	ILI9881C_COMMAND_INSTR(0x1c, 0x00),107	ILI9881C_COMMAND_INSTR(0x1d, 0x00),108	ILI9881C_COMMAND_INSTR(0x1e, 0xC0),109	ILI9881C_COMMAND_INSTR(0x1f, 0x80),110	ILI9881C_COMMAND_INSTR(0x20, 0x04),111	ILI9881C_COMMAND_INSTR(0x21, 0x01),112	ILI9881C_COMMAND_INSTR(0x22, 0x00),113	ILI9881C_COMMAND_INSTR(0x23, 0x00),114	ILI9881C_COMMAND_INSTR(0x24, 0x00),115	ILI9881C_COMMAND_INSTR(0x25, 0x00),116	ILI9881C_COMMAND_INSTR(0x26, 0x00),117	ILI9881C_COMMAND_INSTR(0x27, 0x00),118	ILI9881C_COMMAND_INSTR(0x28, 0x33),119	ILI9881C_COMMAND_INSTR(0x29, 0x03),120	ILI9881C_COMMAND_INSTR(0x2a, 0x00),121	ILI9881C_COMMAND_INSTR(0x2b, 0x00),122	ILI9881C_COMMAND_INSTR(0x2c, 0x00),123	ILI9881C_COMMAND_INSTR(0x2d, 0x00),124	ILI9881C_COMMAND_INSTR(0x2e, 0x00),125	ILI9881C_COMMAND_INSTR(0x2f, 0x00),126	ILI9881C_COMMAND_INSTR(0x30, 0x00),127	ILI9881C_COMMAND_INSTR(0x31, 0x00),128	ILI9881C_COMMAND_INSTR(0x32, 0x00),129	ILI9881C_COMMAND_INSTR(0x33, 0x00),130	ILI9881C_COMMAND_INSTR(0x34, 0x04),131	ILI9881C_COMMAND_INSTR(0x35, 0x00),132	ILI9881C_COMMAND_INSTR(0x36, 0x00),133	ILI9881C_COMMAND_INSTR(0x37, 0x00),134	ILI9881C_COMMAND_INSTR(0x38, 0x3C),135	ILI9881C_COMMAND_INSTR(0x39, 0x00),136	ILI9881C_COMMAND_INSTR(0x3a, 0x00),137	ILI9881C_COMMAND_INSTR(0x3b, 0x00),138	ILI9881C_COMMAND_INSTR(0x3c, 0x00),139	ILI9881C_COMMAND_INSTR(0x3d, 0x00),140	ILI9881C_COMMAND_INSTR(0x3e, 0x00),141	ILI9881C_COMMAND_INSTR(0x3f, 0x00),142	ILI9881C_COMMAND_INSTR(0x40, 0x00),143	ILI9881C_COMMAND_INSTR(0x41, 0x00),144	ILI9881C_COMMAND_INSTR(0x42, 0x00),145	ILI9881C_COMMAND_INSTR(0x43, 0x00),146	ILI9881C_COMMAND_INSTR(0x44, 0x00),147	ILI9881C_COMMAND_INSTR(0x50, 0x01),148	ILI9881C_COMMAND_INSTR(0x51, 0x23),149	ILI9881C_COMMAND_INSTR(0x52, 0x45),150	ILI9881C_COMMAND_INSTR(0x53, 0x67),151	ILI9881C_COMMAND_INSTR(0x54, 0x89),152	ILI9881C_COMMAND_INSTR(0x55, 0xab),153	ILI9881C_COMMAND_INSTR(0x56, 0x01),154	ILI9881C_COMMAND_INSTR(0x57, 0x23),155	ILI9881C_COMMAND_INSTR(0x58, 0x45),156	ILI9881C_COMMAND_INSTR(0x59, 0x67),157	ILI9881C_COMMAND_INSTR(0x5a, 0x89),158	ILI9881C_COMMAND_INSTR(0x5b, 0xab),159	ILI9881C_COMMAND_INSTR(0x5c, 0xcd),160	ILI9881C_COMMAND_INSTR(0x5d, 0xef),161	ILI9881C_COMMAND_INSTR(0x5e, 0x11),162	ILI9881C_COMMAND_INSTR(0x5f, 0x02),163	ILI9881C_COMMAND_INSTR(0x60, 0x02),164	ILI9881C_COMMAND_INSTR(0x61, 0x02),165	ILI9881C_COMMAND_INSTR(0x62, 0x02),166	ILI9881C_COMMAND_INSTR(0x63, 0x02),167	ILI9881C_COMMAND_INSTR(0x64, 0x02),168	ILI9881C_COMMAND_INSTR(0x65, 0x02),169	ILI9881C_COMMAND_INSTR(0x66, 0x02),170	ILI9881C_COMMAND_INSTR(0x67, 0x02),171	ILI9881C_COMMAND_INSTR(0x68, 0x02),172	ILI9881C_COMMAND_INSTR(0x69, 0x02),173	ILI9881C_COMMAND_INSTR(0x6a, 0x0C),174	ILI9881C_COMMAND_INSTR(0x6b, 0x02),175	ILI9881C_COMMAND_INSTR(0x6c, 0x0F),176	ILI9881C_COMMAND_INSTR(0x6d, 0x0E),177	ILI9881C_COMMAND_INSTR(0x6e, 0x0D),178	ILI9881C_COMMAND_INSTR(0x6f, 0x06),179	ILI9881C_COMMAND_INSTR(0x70, 0x07),180	ILI9881C_COMMAND_INSTR(0x71, 0x02),181	ILI9881C_COMMAND_INSTR(0x72, 0x02),182	ILI9881C_COMMAND_INSTR(0x73, 0x02),183	ILI9881C_COMMAND_INSTR(0x74, 0x02),184	ILI9881C_COMMAND_INSTR(0x75, 0x02),185	ILI9881C_COMMAND_INSTR(0x76, 0x02),186	ILI9881C_COMMAND_INSTR(0x77, 0x02),187	ILI9881C_COMMAND_INSTR(0x78, 0x02),188	ILI9881C_COMMAND_INSTR(0x79, 0x02),189	ILI9881C_COMMAND_INSTR(0x7a, 0x02),190	ILI9881C_COMMAND_INSTR(0x7b, 0x02),191	ILI9881C_COMMAND_INSTR(0x7c, 0x02),192	ILI9881C_COMMAND_INSTR(0x7d, 0x02),193	ILI9881C_COMMAND_INSTR(0x7e, 0x02),194	ILI9881C_COMMAND_INSTR(0x7f, 0x02),195	ILI9881C_COMMAND_INSTR(0x80, 0x0C),196	ILI9881C_COMMAND_INSTR(0x81, 0x02),197	ILI9881C_COMMAND_INSTR(0x82, 0x0F),198	ILI9881C_COMMAND_INSTR(0x83, 0x0E),199	ILI9881C_COMMAND_INSTR(0x84, 0x0D),200	ILI9881C_COMMAND_INSTR(0x85, 0x06),201	ILI9881C_COMMAND_INSTR(0x86, 0x07),202	ILI9881C_COMMAND_INSTR(0x87, 0x02),203	ILI9881C_COMMAND_INSTR(0x88, 0x02),204	ILI9881C_COMMAND_INSTR(0x89, 0x02),205	ILI9881C_COMMAND_INSTR(0x8A, 0x02),206	ILI9881C_SWITCH_PAGE_INSTR(4),207	ILI9881C_COMMAND_INSTR(0x6C, 0x15),208	ILI9881C_COMMAND_INSTR(0x6E, 0x22),209	ILI9881C_COMMAND_INSTR(0x6F, 0x33),210	ILI9881C_COMMAND_INSTR(0x3A, 0xA4),211	ILI9881C_COMMAND_INSTR(0x8D, 0x0D),212	ILI9881C_COMMAND_INSTR(0x87, 0xBA),213	ILI9881C_COMMAND_INSTR(0x26, 0x76),214	ILI9881C_COMMAND_INSTR(0xB2, 0xD1),215	ILI9881C_SWITCH_PAGE_INSTR(1),216	ILI9881C_COMMAND_INSTR(0x22, 0x0A),217	ILI9881C_COMMAND_INSTR(0x53, 0xDC),218	ILI9881C_COMMAND_INSTR(0x55, 0xA7),219	ILI9881C_COMMAND_INSTR(0x50, 0x78),220	ILI9881C_COMMAND_INSTR(0x51, 0x78),221	ILI9881C_COMMAND_INSTR(0x31, 0x02),222	ILI9881C_COMMAND_INSTR(0x60, 0x14),223	ILI9881C_COMMAND_INSTR(0xA0, 0x2A),224	ILI9881C_COMMAND_INSTR(0xA1, 0x39),225	ILI9881C_COMMAND_INSTR(0xA2, 0x46),226	ILI9881C_COMMAND_INSTR(0xA3, 0x0e),227	ILI9881C_COMMAND_INSTR(0xA4, 0x12),228	ILI9881C_COMMAND_INSTR(0xA5, 0x25),229	ILI9881C_COMMAND_INSTR(0xA6, 0x19),230	ILI9881C_COMMAND_INSTR(0xA7, 0x1d),231	ILI9881C_COMMAND_INSTR(0xA8, 0xa6),232	ILI9881C_COMMAND_INSTR(0xA9, 0x1C),233	ILI9881C_COMMAND_INSTR(0xAA, 0x29),234	ILI9881C_COMMAND_INSTR(0xAB, 0x85),235	ILI9881C_COMMAND_INSTR(0xAC, 0x1C),236	ILI9881C_COMMAND_INSTR(0xAD, 0x1B),237	ILI9881C_COMMAND_INSTR(0xAE, 0x51),238	ILI9881C_COMMAND_INSTR(0xAF, 0x22),239	ILI9881C_COMMAND_INSTR(0xB0, 0x2d),240	ILI9881C_COMMAND_INSTR(0xB1, 0x4f),241	ILI9881C_COMMAND_INSTR(0xB2, 0x59),242	ILI9881C_COMMAND_INSTR(0xB3, 0x3F),243	ILI9881C_COMMAND_INSTR(0xC0, 0x2A),244	ILI9881C_COMMAND_INSTR(0xC1, 0x3a),245	ILI9881C_COMMAND_INSTR(0xC2, 0x45),246	ILI9881C_COMMAND_INSTR(0xC3, 0x0e),247	ILI9881C_COMMAND_INSTR(0xC4, 0x11),248	ILI9881C_COMMAND_INSTR(0xC5, 0x24),249	ILI9881C_COMMAND_INSTR(0xC6, 0x1a),250	ILI9881C_COMMAND_INSTR(0xC7, 0x1c),251	ILI9881C_COMMAND_INSTR(0xC8, 0xaa),252	ILI9881C_COMMAND_INSTR(0xC9, 0x1C),253	ILI9881C_COMMAND_INSTR(0xCA, 0x29),254	ILI9881C_COMMAND_INSTR(0xCB, 0x96),255	ILI9881C_COMMAND_INSTR(0xCC, 0x1C),256	ILI9881C_COMMAND_INSTR(0xCD, 0x1B),257	ILI9881C_COMMAND_INSTR(0xCE, 0x51),258	ILI9881C_COMMAND_INSTR(0xCF, 0x22),259	ILI9881C_COMMAND_INSTR(0xD0, 0x2b),260	ILI9881C_COMMAND_INSTR(0xD1, 0x4b),261	ILI9881C_COMMAND_INSTR(0xD2, 0x59),262	ILI9881C_COMMAND_INSTR(0xD3, 0x3F),263};264 265static const struct ili9881c_instr k101_im2byl02_init[] = {266	ILI9881C_SWITCH_PAGE_INSTR(3),267	ILI9881C_COMMAND_INSTR(0x01, 0x00),268	ILI9881C_COMMAND_INSTR(0x02, 0x00),269	ILI9881C_COMMAND_INSTR(0x03, 0x73),270	ILI9881C_COMMAND_INSTR(0x04, 0x00),271	ILI9881C_COMMAND_INSTR(0x05, 0x00),272	ILI9881C_COMMAND_INSTR(0x06, 0x08),273	ILI9881C_COMMAND_INSTR(0x07, 0x00),274	ILI9881C_COMMAND_INSTR(0x08, 0x00),275	ILI9881C_COMMAND_INSTR(0x09, 0x00),276	ILI9881C_COMMAND_INSTR(0x0A, 0x01),277	ILI9881C_COMMAND_INSTR(0x0B, 0x01),278	ILI9881C_COMMAND_INSTR(0x0C, 0x00),279	ILI9881C_COMMAND_INSTR(0x0D, 0x01),280	ILI9881C_COMMAND_INSTR(0x0E, 0x01),281	ILI9881C_COMMAND_INSTR(0x0F, 0x00),282	ILI9881C_COMMAND_INSTR(0x10, 0x00),283	ILI9881C_COMMAND_INSTR(0x11, 0x00),284	ILI9881C_COMMAND_INSTR(0x12, 0x00),285	ILI9881C_COMMAND_INSTR(0x13, 0x00),286	ILI9881C_COMMAND_INSTR(0x14, 0x00),287	ILI9881C_COMMAND_INSTR(0x15, 0x00),288	ILI9881C_COMMAND_INSTR(0x16, 0x00),289	ILI9881C_COMMAND_INSTR(0x17, 0x00),290	ILI9881C_COMMAND_INSTR(0x18, 0x00),291	ILI9881C_COMMAND_INSTR(0x19, 0x00),292	ILI9881C_COMMAND_INSTR(0x1A, 0x00),293	ILI9881C_COMMAND_INSTR(0x1B, 0x00),294	ILI9881C_COMMAND_INSTR(0x1C, 0x00),295	ILI9881C_COMMAND_INSTR(0x1D, 0x00),296	ILI9881C_COMMAND_INSTR(0x1E, 0x40),297	ILI9881C_COMMAND_INSTR(0x1F, 0xC0),298	ILI9881C_COMMAND_INSTR(0x20, 0x06),299	ILI9881C_COMMAND_INSTR(0x21, 0x01),300	ILI9881C_COMMAND_INSTR(0x22, 0x06),301	ILI9881C_COMMAND_INSTR(0x23, 0x01),302	ILI9881C_COMMAND_INSTR(0x24, 0x88),303	ILI9881C_COMMAND_INSTR(0x25, 0x88),304	ILI9881C_COMMAND_INSTR(0x26, 0x00),305	ILI9881C_COMMAND_INSTR(0x27, 0x00),306	ILI9881C_COMMAND_INSTR(0x28, 0x3B),307	ILI9881C_COMMAND_INSTR(0x29, 0x03),308	ILI9881C_COMMAND_INSTR(0x2A, 0x00),309	ILI9881C_COMMAND_INSTR(0x2B, 0x00),310	ILI9881C_COMMAND_INSTR(0x2C, 0x00),311	ILI9881C_COMMAND_INSTR(0x2D, 0x00),312	ILI9881C_COMMAND_INSTR(0x2E, 0x00),313	ILI9881C_COMMAND_INSTR(0x2F, 0x00),314	ILI9881C_COMMAND_INSTR(0x30, 0x00),315	ILI9881C_COMMAND_INSTR(0x31, 0x00),316	ILI9881C_COMMAND_INSTR(0x32, 0x00),317	ILI9881C_COMMAND_INSTR(0x33, 0x00),318	ILI9881C_COMMAND_INSTR(0x34, 0x00), /* GPWR1/2 non overlap time 2.62us */319	ILI9881C_COMMAND_INSTR(0x35, 0x00),320	ILI9881C_COMMAND_INSTR(0x36, 0x00),321	ILI9881C_COMMAND_INSTR(0x37, 0x00),322	ILI9881C_COMMAND_INSTR(0x38, 0x00),323	ILI9881C_COMMAND_INSTR(0x39, 0x00),324	ILI9881C_COMMAND_INSTR(0x3A, 0x00),325	ILI9881C_COMMAND_INSTR(0x3B, 0x00),326	ILI9881C_COMMAND_INSTR(0x3C, 0x00),327	ILI9881C_COMMAND_INSTR(0x3D, 0x00),328	ILI9881C_COMMAND_INSTR(0x3E, 0x00),329	ILI9881C_COMMAND_INSTR(0x3F, 0x00),330	ILI9881C_COMMAND_INSTR(0x40, 0x00),331	ILI9881C_COMMAND_INSTR(0x41, 0x00),332	ILI9881C_COMMAND_INSTR(0x42, 0x00),333	ILI9881C_COMMAND_INSTR(0x43, 0x00),334	ILI9881C_COMMAND_INSTR(0x44, 0x00),335	ILI9881C_COMMAND_INSTR(0x50, 0x01),336	ILI9881C_COMMAND_INSTR(0x51, 0x23),337	ILI9881C_COMMAND_INSTR(0x52, 0x45),338	ILI9881C_COMMAND_INSTR(0x53, 0x67),339	ILI9881C_COMMAND_INSTR(0x54, 0x89),340	ILI9881C_COMMAND_INSTR(0x55, 0xAB),341	ILI9881C_COMMAND_INSTR(0x56, 0x01),342	ILI9881C_COMMAND_INSTR(0x57, 0x23),343	ILI9881C_COMMAND_INSTR(0x58, 0x45),344	ILI9881C_COMMAND_INSTR(0x59, 0x67),345	ILI9881C_COMMAND_INSTR(0x5A, 0x89),346	ILI9881C_COMMAND_INSTR(0x5B, 0xAB),347	ILI9881C_COMMAND_INSTR(0x5C, 0xCD),348	ILI9881C_COMMAND_INSTR(0x5D, 0xEF),349	ILI9881C_COMMAND_INSTR(0x5E, 0x00),350	ILI9881C_COMMAND_INSTR(0x5F, 0x01),351	ILI9881C_COMMAND_INSTR(0x60, 0x01),352	ILI9881C_COMMAND_INSTR(0x61, 0x06),353	ILI9881C_COMMAND_INSTR(0x62, 0x06),354	ILI9881C_COMMAND_INSTR(0x63, 0x07),355	ILI9881C_COMMAND_INSTR(0x64, 0x07),356	ILI9881C_COMMAND_INSTR(0x65, 0x00),357	ILI9881C_COMMAND_INSTR(0x66, 0x00),358	ILI9881C_COMMAND_INSTR(0x67, 0x02),359	ILI9881C_COMMAND_INSTR(0x68, 0x02),360	ILI9881C_COMMAND_INSTR(0x69, 0x05),361	ILI9881C_COMMAND_INSTR(0x6A, 0x05),362	ILI9881C_COMMAND_INSTR(0x6B, 0x02),363	ILI9881C_COMMAND_INSTR(0x6C, 0x0D),364	ILI9881C_COMMAND_INSTR(0x6D, 0x0D),365	ILI9881C_COMMAND_INSTR(0x6E, 0x0C),366	ILI9881C_COMMAND_INSTR(0x6F, 0x0C),367	ILI9881C_COMMAND_INSTR(0x70, 0x0F),368	ILI9881C_COMMAND_INSTR(0x71, 0x0F),369	ILI9881C_COMMAND_INSTR(0x72, 0x0E),370	ILI9881C_COMMAND_INSTR(0x73, 0x0E),371	ILI9881C_COMMAND_INSTR(0x74, 0x02),372	ILI9881C_COMMAND_INSTR(0x75, 0x01),373	ILI9881C_COMMAND_INSTR(0x76, 0x01),374	ILI9881C_COMMAND_INSTR(0x77, 0x06),375	ILI9881C_COMMAND_INSTR(0x78, 0x06),376	ILI9881C_COMMAND_INSTR(0x79, 0x07),377	ILI9881C_COMMAND_INSTR(0x7A, 0x07),378	ILI9881C_COMMAND_INSTR(0x7B, 0x00),379	ILI9881C_COMMAND_INSTR(0x7C, 0x00),380	ILI9881C_COMMAND_INSTR(0x7D, 0x02),381	ILI9881C_COMMAND_INSTR(0x7E, 0x02),382	ILI9881C_COMMAND_INSTR(0x7F, 0x05),383	ILI9881C_COMMAND_INSTR(0x80, 0x05),384	ILI9881C_COMMAND_INSTR(0x81, 0x02),385	ILI9881C_COMMAND_INSTR(0x82, 0x0D),386	ILI9881C_COMMAND_INSTR(0x83, 0x0D),387	ILI9881C_COMMAND_INSTR(0x84, 0x0C),388	ILI9881C_COMMAND_INSTR(0x85, 0x0C),389	ILI9881C_COMMAND_INSTR(0x86, 0x0F),390	ILI9881C_COMMAND_INSTR(0x87, 0x0F),391	ILI9881C_COMMAND_INSTR(0x88, 0x0E),392	ILI9881C_COMMAND_INSTR(0x89, 0x0E),393	ILI9881C_COMMAND_INSTR(0x8A, 0x02),394	ILI9881C_SWITCH_PAGE_INSTR(4),395	ILI9881C_COMMAND_INSTR(0x3B, 0xC0), /* ILI4003D sel */396	ILI9881C_COMMAND_INSTR(0x6C, 0x15), /* Set VCORE voltage = 1.5V */397	ILI9881C_COMMAND_INSTR(0x6E, 0x2A), /* di_pwr_reg=0 for power mode 2A, VGH clamp 18V */398	ILI9881C_COMMAND_INSTR(0x6F, 0x33), /* pumping ratio VGH=5x VGL=-3x */399	ILI9881C_COMMAND_INSTR(0x8D, 0x1B), /* VGL clamp -10V */400	ILI9881C_COMMAND_INSTR(0x87, 0xBA), /* ESD */401	ILI9881C_COMMAND_INSTR(0x3A, 0x24), /* POWER SAVING */402	ILI9881C_COMMAND_INSTR(0x26, 0x76),403	ILI9881C_COMMAND_INSTR(0xB2, 0xD1),404	ILI9881C_SWITCH_PAGE_INSTR(1),405	ILI9881C_COMMAND_INSTR(0x22, 0x0A), /* BGR, SS */406	ILI9881C_COMMAND_INSTR(0x31, 0x00), /* Zigzag type3 inversion */407	ILI9881C_COMMAND_INSTR(0x40, 0x53), /* ILI4003D sel */408	ILI9881C_COMMAND_INSTR(0x43, 0x66),409	ILI9881C_COMMAND_INSTR(0x53, 0x4C),410	ILI9881C_COMMAND_INSTR(0x50, 0x87),411	ILI9881C_COMMAND_INSTR(0x51, 0x82),412	ILI9881C_COMMAND_INSTR(0x60, 0x15),413	ILI9881C_COMMAND_INSTR(0x61, 0x01),414	ILI9881C_COMMAND_INSTR(0x62, 0x0C),415	ILI9881C_COMMAND_INSTR(0x63, 0x00),416	ILI9881C_COMMAND_INSTR(0xA0, 0x00),417	ILI9881C_COMMAND_INSTR(0xA1, 0x13), /* VP251 */418	ILI9881C_COMMAND_INSTR(0xA2, 0x23), /* VP247 */419	ILI9881C_COMMAND_INSTR(0xA3, 0x14), /* VP243 */420	ILI9881C_COMMAND_INSTR(0xA4, 0x16), /* VP239 */421	ILI9881C_COMMAND_INSTR(0xA5, 0x29), /* VP231 */422	ILI9881C_COMMAND_INSTR(0xA6, 0x1E), /* VP219 */423	ILI9881C_COMMAND_INSTR(0xA7, 0x1D), /* VP203 */424	ILI9881C_COMMAND_INSTR(0xA8, 0x86), /* VP175 */425	ILI9881C_COMMAND_INSTR(0xA9, 0x1E), /* VP144 */426	ILI9881C_COMMAND_INSTR(0xAA, 0x29), /* VP111 */427	ILI9881C_COMMAND_INSTR(0xAB, 0x74), /* VP80 */428	ILI9881C_COMMAND_INSTR(0xAC, 0x19), /* VP52 */429	ILI9881C_COMMAND_INSTR(0xAD, 0x17), /* VP36 */430	ILI9881C_COMMAND_INSTR(0xAE, 0x4B), /* VP24 */431	ILI9881C_COMMAND_INSTR(0xAF, 0x20), /* VP16 */432	ILI9881C_COMMAND_INSTR(0xB0, 0x26), /* VP12 */433	ILI9881C_COMMAND_INSTR(0xB1, 0x4C), /* VP8 */434	ILI9881C_COMMAND_INSTR(0xB2, 0x5D), /* VP4 */435	ILI9881C_COMMAND_INSTR(0xB3, 0x3F), /* VP0 */436	ILI9881C_COMMAND_INSTR(0xC0, 0x00), /* VN255 GAMMA N */437	ILI9881C_COMMAND_INSTR(0xC1, 0x13), /* VN251 */438	ILI9881C_COMMAND_INSTR(0xC2, 0x23), /* VN247 */439	ILI9881C_COMMAND_INSTR(0xC3, 0x14), /* VN243 */440	ILI9881C_COMMAND_INSTR(0xC4, 0x16), /* VN239 */441	ILI9881C_COMMAND_INSTR(0xC5, 0x29), /* VN231 */442	ILI9881C_COMMAND_INSTR(0xC6, 0x1E), /* VN219 */443	ILI9881C_COMMAND_INSTR(0xC7, 0x1D), /* VN203 */444	ILI9881C_COMMAND_INSTR(0xC8, 0x86), /* VN175 */445	ILI9881C_COMMAND_INSTR(0xC9, 0x1E), /* VN144 */446	ILI9881C_COMMAND_INSTR(0xCA, 0x29), /* VN111 */447	ILI9881C_COMMAND_INSTR(0xCB, 0x74), /* VN80 */448	ILI9881C_COMMAND_INSTR(0xCC, 0x19), /* VN52 */449	ILI9881C_COMMAND_INSTR(0xCD, 0x17), /* VN36 */450	ILI9881C_COMMAND_INSTR(0xCE, 0x4B), /* VN24 */451	ILI9881C_COMMAND_INSTR(0xCF, 0x20), /* VN16 */452	ILI9881C_COMMAND_INSTR(0xD0, 0x26), /* VN12 */453	ILI9881C_COMMAND_INSTR(0xD1, 0x4C), /* VN8 */454	ILI9881C_COMMAND_INSTR(0xD2, 0x5D), /* VN4 */455	ILI9881C_COMMAND_INSTR(0xD3, 0x3F), /* VN0 */456};457 458static const struct ili9881c_instr kd050hdfia020_init[] = {459	ILI9881C_SWITCH_PAGE_INSTR(3),460	ILI9881C_COMMAND_INSTR(0x01, 0x00),461	ILI9881C_COMMAND_INSTR(0x02, 0x00),462	ILI9881C_COMMAND_INSTR(0x03, 0x72),463	ILI9881C_COMMAND_INSTR(0x04, 0x00),464	ILI9881C_COMMAND_INSTR(0x05, 0x00),465	ILI9881C_COMMAND_INSTR(0x06, 0x09),466	ILI9881C_COMMAND_INSTR(0x07, 0x00),467	ILI9881C_COMMAND_INSTR(0x08, 0x00),468	ILI9881C_COMMAND_INSTR(0x09, 0x01),469	ILI9881C_COMMAND_INSTR(0x0a, 0x00),470	ILI9881C_COMMAND_INSTR(0x0b, 0x00),471	ILI9881C_COMMAND_INSTR(0x0c, 0x01),472	ILI9881C_COMMAND_INSTR(0x0d, 0x00),473	ILI9881C_COMMAND_INSTR(0x0e, 0x00),474	ILI9881C_COMMAND_INSTR(0x0f, 0x00),475	ILI9881C_COMMAND_INSTR(0x10, 0x00),476	ILI9881C_COMMAND_INSTR(0x11, 0x00),477	ILI9881C_COMMAND_INSTR(0x12, 0x00),478	ILI9881C_COMMAND_INSTR(0x13, 0x00),479	ILI9881C_COMMAND_INSTR(0x14, 0x00),480	ILI9881C_COMMAND_INSTR(0x15, 0x00),481	ILI9881C_COMMAND_INSTR(0x16, 0x00),482	ILI9881C_COMMAND_INSTR(0x17, 0x00),483	ILI9881C_COMMAND_INSTR(0x18, 0x00),484	ILI9881C_COMMAND_INSTR(0x19, 0x00),485	ILI9881C_COMMAND_INSTR(0x1a, 0x00),486	ILI9881C_COMMAND_INSTR(0x1b, 0x00),487	ILI9881C_COMMAND_INSTR(0x1c, 0x00),488	ILI9881C_COMMAND_INSTR(0x1d, 0x00),489	ILI9881C_COMMAND_INSTR(0x1e, 0x40),490	ILI9881C_COMMAND_INSTR(0x1f, 0x80),491	ILI9881C_COMMAND_INSTR(0x20, 0x05),492	ILI9881C_COMMAND_INSTR(0x20, 0x05),493	ILI9881C_COMMAND_INSTR(0x21, 0x02),494	ILI9881C_COMMAND_INSTR(0x22, 0x00),495	ILI9881C_COMMAND_INSTR(0x23, 0x00),496	ILI9881C_COMMAND_INSTR(0x24, 0x00),497	ILI9881C_COMMAND_INSTR(0x25, 0x00),498	ILI9881C_COMMAND_INSTR(0x26, 0x00),499	ILI9881C_COMMAND_INSTR(0x27, 0x00),500	ILI9881C_COMMAND_INSTR(0x28, 0x33),501	ILI9881C_COMMAND_INSTR(0x29, 0x02),502	ILI9881C_COMMAND_INSTR(0x2a, 0x00),503	ILI9881C_COMMAND_INSTR(0x2b, 0x00),504	ILI9881C_COMMAND_INSTR(0x2c, 0x00),505	ILI9881C_COMMAND_INSTR(0x2d, 0x00),506	ILI9881C_COMMAND_INSTR(0x2e, 0x00),507	ILI9881C_COMMAND_INSTR(0x2f, 0x00),508	ILI9881C_COMMAND_INSTR(0x30, 0x00),509	ILI9881C_COMMAND_INSTR(0x31, 0x00),510	ILI9881C_COMMAND_INSTR(0x32, 0x00),511	ILI9881C_COMMAND_INSTR(0x32, 0x00),512	ILI9881C_COMMAND_INSTR(0x33, 0x00),513	ILI9881C_COMMAND_INSTR(0x34, 0x04),514	ILI9881C_COMMAND_INSTR(0x35, 0x00),515	ILI9881C_COMMAND_INSTR(0x36, 0x00),516	ILI9881C_COMMAND_INSTR(0x37, 0x00),517	ILI9881C_COMMAND_INSTR(0x38, 0x3C),518	ILI9881C_COMMAND_INSTR(0x39, 0x00),519	ILI9881C_COMMAND_INSTR(0x3a, 0x40),520	ILI9881C_COMMAND_INSTR(0x3b, 0x40),521	ILI9881C_COMMAND_INSTR(0x3c, 0x00),522	ILI9881C_COMMAND_INSTR(0x3d, 0x00),523	ILI9881C_COMMAND_INSTR(0x3e, 0x00),524	ILI9881C_COMMAND_INSTR(0x3f, 0x00),525	ILI9881C_COMMAND_INSTR(0x40, 0x00),526	ILI9881C_COMMAND_INSTR(0x41, 0x00),527	ILI9881C_COMMAND_INSTR(0x42, 0x00),528	ILI9881C_COMMAND_INSTR(0x43, 0x00),529	ILI9881C_COMMAND_INSTR(0x44, 0x00),530	ILI9881C_COMMAND_INSTR(0x50, 0x01),531	ILI9881C_COMMAND_INSTR(0x51, 0x23),532	ILI9881C_COMMAND_INSTR(0x52, 0x45),533	ILI9881C_COMMAND_INSTR(0x53, 0x67),534	ILI9881C_COMMAND_INSTR(0x54, 0x89),535	ILI9881C_COMMAND_INSTR(0x55, 0xab),536	ILI9881C_COMMAND_INSTR(0x56, 0x01),537	ILI9881C_COMMAND_INSTR(0x57, 0x23),538	ILI9881C_COMMAND_INSTR(0x58, 0x45),539	ILI9881C_COMMAND_INSTR(0x59, 0x67),540	ILI9881C_COMMAND_INSTR(0x5a, 0x89),541	ILI9881C_COMMAND_INSTR(0x5b, 0xab),542	ILI9881C_COMMAND_INSTR(0x5c, 0xcd),543	ILI9881C_COMMAND_INSTR(0x5d, 0xef),544	ILI9881C_COMMAND_INSTR(0x5e, 0x11),545	ILI9881C_COMMAND_INSTR(0x5f, 0x01),546	ILI9881C_COMMAND_INSTR(0x60, 0x00),547	ILI9881C_COMMAND_INSTR(0x61, 0x15),548	ILI9881C_COMMAND_INSTR(0x62, 0x14),549	ILI9881C_COMMAND_INSTR(0x63, 0x0E),550	ILI9881C_COMMAND_INSTR(0x64, 0x0F),551	ILI9881C_COMMAND_INSTR(0x65, 0x0C),552	ILI9881C_COMMAND_INSTR(0x66, 0x0D),553	ILI9881C_COMMAND_INSTR(0x67, 0x06),554	ILI9881C_COMMAND_INSTR(0x68, 0x02),555	ILI9881C_COMMAND_INSTR(0x69, 0x07),556	ILI9881C_COMMAND_INSTR(0x6a, 0x02),557	ILI9881C_COMMAND_INSTR(0x6b, 0x02),558	ILI9881C_COMMAND_INSTR(0x6c, 0x02),559	ILI9881C_COMMAND_INSTR(0x6d, 0x02),560	ILI9881C_COMMAND_INSTR(0x6e, 0x02),561	ILI9881C_COMMAND_INSTR(0x6f, 0x02),562	ILI9881C_COMMAND_INSTR(0x70, 0x02),563	ILI9881C_COMMAND_INSTR(0x71, 0x02),564	ILI9881C_COMMAND_INSTR(0x72, 0x02),565	ILI9881C_COMMAND_INSTR(0x73, 0x02),566	ILI9881C_COMMAND_INSTR(0x74, 0x02),567	ILI9881C_COMMAND_INSTR(0x75, 0x01),568	ILI9881C_COMMAND_INSTR(0x76, 0x00),569	ILI9881C_COMMAND_INSTR(0x77, 0x14),570	ILI9881C_COMMAND_INSTR(0x78, 0x15),571	ILI9881C_COMMAND_INSTR(0x79, 0x0E),572	ILI9881C_COMMAND_INSTR(0x7a, 0x0F),573	ILI9881C_COMMAND_INSTR(0x7b, 0x0C),574	ILI9881C_COMMAND_INSTR(0x7c, 0x0D),575	ILI9881C_COMMAND_INSTR(0x7d, 0x06),576	ILI9881C_COMMAND_INSTR(0x7e, 0x02),577	ILI9881C_COMMAND_INSTR(0x7f, 0x07),578	ILI9881C_COMMAND_INSTR(0x80, 0x02),579	ILI9881C_COMMAND_INSTR(0x81, 0x02),580	ILI9881C_COMMAND_INSTR(0x83, 0x02),581	ILI9881C_COMMAND_INSTR(0x84, 0x02),582	ILI9881C_COMMAND_INSTR(0x85, 0x02),583	ILI9881C_COMMAND_INSTR(0x86, 0x02),584	ILI9881C_COMMAND_INSTR(0x87, 0x02),585	ILI9881C_COMMAND_INSTR(0x88, 0x02),586	ILI9881C_COMMAND_INSTR(0x89, 0x02),587	ILI9881C_COMMAND_INSTR(0x8A, 0x02),588	ILI9881C_SWITCH_PAGE_INSTR(0x4),589	ILI9881C_COMMAND_INSTR(0x6C, 0x15),590	ILI9881C_COMMAND_INSTR(0x6E, 0x2A),591	ILI9881C_COMMAND_INSTR(0x6F, 0x33),592	ILI9881C_COMMAND_INSTR(0x3A, 0x94),593	ILI9881C_COMMAND_INSTR(0x8D, 0x15),594	ILI9881C_COMMAND_INSTR(0x87, 0xBA),595	ILI9881C_COMMAND_INSTR(0x26, 0x76),596	ILI9881C_COMMAND_INSTR(0xB2, 0xD1),597	ILI9881C_COMMAND_INSTR(0xB5, 0x06),598	ILI9881C_SWITCH_PAGE_INSTR(0x1),599	ILI9881C_COMMAND_INSTR(0x22, 0x0A),600	ILI9881C_COMMAND_INSTR(0x31, 0x00),601	ILI9881C_COMMAND_INSTR(0x53, 0x90),602	ILI9881C_COMMAND_INSTR(0x55, 0xA2),603	ILI9881C_COMMAND_INSTR(0x50, 0xB7),604	ILI9881C_COMMAND_INSTR(0x51, 0xB7),605	ILI9881C_COMMAND_INSTR(0x60, 0x22),606	ILI9881C_COMMAND_INSTR(0x61, 0x00),607	ILI9881C_COMMAND_INSTR(0x62, 0x19),608	ILI9881C_COMMAND_INSTR(0x63, 0x10),609	ILI9881C_COMMAND_INSTR(0xA0, 0x08),610	ILI9881C_COMMAND_INSTR(0xA1, 0x1A),611	ILI9881C_COMMAND_INSTR(0xA2, 0x27),612	ILI9881C_COMMAND_INSTR(0xA3, 0x15),613	ILI9881C_COMMAND_INSTR(0xA4, 0x17),614	ILI9881C_COMMAND_INSTR(0xA5, 0x2A),615	ILI9881C_COMMAND_INSTR(0xA6, 0x1E),616	ILI9881C_COMMAND_INSTR(0xA7, 0x1F),617	ILI9881C_COMMAND_INSTR(0xA8, 0x8B),618	ILI9881C_COMMAND_INSTR(0xA9, 0x1B),619	ILI9881C_COMMAND_INSTR(0xAA, 0x27),620	ILI9881C_COMMAND_INSTR(0xAB, 0x78),621	ILI9881C_COMMAND_INSTR(0xAC, 0x18),622	ILI9881C_COMMAND_INSTR(0xAD, 0x18),623	ILI9881C_COMMAND_INSTR(0xAE, 0x4C),624	ILI9881C_COMMAND_INSTR(0xAF, 0x21),625	ILI9881C_COMMAND_INSTR(0xB0, 0x27),626	ILI9881C_COMMAND_INSTR(0xB1, 0x54),627	ILI9881C_COMMAND_INSTR(0xB2, 0x67),628	ILI9881C_COMMAND_INSTR(0xB3, 0x39),629	ILI9881C_COMMAND_INSTR(0xC0, 0x08),630	ILI9881C_COMMAND_INSTR(0xC1, 0x1A),631	ILI9881C_COMMAND_INSTR(0xC2, 0x27),632	ILI9881C_COMMAND_INSTR(0xC3, 0x15),633	ILI9881C_COMMAND_INSTR(0xC4, 0x17),634	ILI9881C_COMMAND_INSTR(0xC5, 0x2A),635	ILI9881C_COMMAND_INSTR(0xC6, 0x1E),636	ILI9881C_COMMAND_INSTR(0xC7, 0x1F),637	ILI9881C_COMMAND_INSTR(0xC8, 0x8B),638	ILI9881C_COMMAND_INSTR(0xC9, 0x1B),639	ILI9881C_COMMAND_INSTR(0xCA, 0x27),640	ILI9881C_COMMAND_INSTR(0xCB, 0x78),641	ILI9881C_COMMAND_INSTR(0xCC, 0x18),642	ILI9881C_COMMAND_INSTR(0xCD, 0x18),643	ILI9881C_COMMAND_INSTR(0xCE, 0x4C),644	ILI9881C_COMMAND_INSTR(0xCF, 0x21),645	ILI9881C_COMMAND_INSTR(0xD0, 0x27),646	ILI9881C_COMMAND_INSTR(0xD1, 0x54),647	ILI9881C_COMMAND_INSTR(0xD2, 0x67),648	ILI9881C_COMMAND_INSTR(0xD3, 0x39),649	ILI9881C_SWITCH_PAGE_INSTR(0),650	ILI9881C_COMMAND_INSTR(0x35, 0x00),651	ILI9881C_COMMAND_INSTR(0x3A, 0x7),652};653 654static const struct ili9881c_instr tl050hdv35_init[] = {655	ILI9881C_SWITCH_PAGE_INSTR(3),656	ILI9881C_COMMAND_INSTR(0x01, 0x00),657	ILI9881C_COMMAND_INSTR(0x02, 0x00),658	ILI9881C_COMMAND_INSTR(0x03, 0x73),659	ILI9881C_COMMAND_INSTR(0x04, 0x00),660	ILI9881C_COMMAND_INSTR(0x05, 0x00),661	ILI9881C_COMMAND_INSTR(0x06, 0x0a),662	ILI9881C_COMMAND_INSTR(0x07, 0x00),663	ILI9881C_COMMAND_INSTR(0x08, 0x00),664	ILI9881C_COMMAND_INSTR(0x09, 0x01),665	ILI9881C_COMMAND_INSTR(0x0a, 0x00),666	ILI9881C_COMMAND_INSTR(0x0b, 0x00),667	ILI9881C_COMMAND_INSTR(0x0c, 0x01),668	ILI9881C_COMMAND_INSTR(0x0d, 0x00),669	ILI9881C_COMMAND_INSTR(0x0e, 0x00),670	ILI9881C_COMMAND_INSTR(0x0f, 0x1d),671	ILI9881C_COMMAND_INSTR(0x10, 0x1d),672	ILI9881C_COMMAND_INSTR(0x15, 0x00),673	ILI9881C_COMMAND_INSTR(0x16, 0x00),674	ILI9881C_COMMAND_INSTR(0x17, 0x00),675	ILI9881C_COMMAND_INSTR(0x18, 0x00),676	ILI9881C_COMMAND_INSTR(0x19, 0x00),677	ILI9881C_COMMAND_INSTR(0x1a, 0x00),678	ILI9881C_COMMAND_INSTR(0x1b, 0x00),679	ILI9881C_COMMAND_INSTR(0x1c, 0x00),680	ILI9881C_COMMAND_INSTR(0x1d, 0x00),681	ILI9881C_COMMAND_INSTR(0x1e, 0x40),682	ILI9881C_COMMAND_INSTR(0x1f, 0x80),683	ILI9881C_COMMAND_INSTR(0x20, 0x06),684	ILI9881C_COMMAND_INSTR(0x21, 0x02),685	ILI9881C_COMMAND_INSTR(0x28, 0x33),686	ILI9881C_COMMAND_INSTR(0x29, 0x03),687	ILI9881C_COMMAND_INSTR(0x2a, 0x00),688	ILI9881C_COMMAND_INSTR(0x2b, 0x00),689	ILI9881C_COMMAND_INSTR(0x2c, 0x00),690	ILI9881C_COMMAND_INSTR(0x2d, 0x00),691	ILI9881C_COMMAND_INSTR(0x2e, 0x00),692	ILI9881C_COMMAND_INSTR(0x2f, 0x00),693	ILI9881C_COMMAND_INSTR(0x35, 0x00),694	ILI9881C_COMMAND_INSTR(0x36, 0x00),695	ILI9881C_COMMAND_INSTR(0x37, 0x00),696	ILI9881C_COMMAND_INSTR(0x38, 0x3C),697	ILI9881C_COMMAND_INSTR(0x39, 0x00),698	ILI9881C_COMMAND_INSTR(0x3a, 0x40),699	ILI9881C_COMMAND_INSTR(0x3b, 0x40),700	ILI9881C_COMMAND_INSTR(0x3c, 0x00),701	ILI9881C_COMMAND_INSTR(0x3d, 0x00),702	ILI9881C_COMMAND_INSTR(0x3e, 0x00),703	ILI9881C_COMMAND_INSTR(0x3f, 0x00),704	ILI9881C_COMMAND_INSTR(0x40, 0x00),705	ILI9881C_COMMAND_INSTR(0x41, 0x00),706	ILI9881C_COMMAND_INSTR(0x42, 0x00),707	ILI9881C_COMMAND_INSTR(0x43, 0x00),708	ILI9881C_COMMAND_INSTR(0x44, 0x00),709	ILI9881C_COMMAND_INSTR(0x55, 0xab),710	ILI9881C_COMMAND_INSTR(0x5a, 0x89),711	ILI9881C_COMMAND_INSTR(0x5b, 0xab),712	ILI9881C_COMMAND_INSTR(0x5c, 0xcd),713	ILI9881C_COMMAND_INSTR(0x5d, 0xef),714	ILI9881C_COMMAND_INSTR(0x5e, 0x11),715	ILI9881C_COMMAND_INSTR(0x5f, 0x01),716	ILI9881C_COMMAND_INSTR(0x60, 0x00),717	ILI9881C_COMMAND_INSTR(0x61, 0x15),718	ILI9881C_COMMAND_INSTR(0x62, 0x14),719	ILI9881C_COMMAND_INSTR(0x63, 0x0e),720	ILI9881C_COMMAND_INSTR(0x64, 0x0f),721	ILI9881C_COMMAND_INSTR(0x65, 0x0c),722	ILI9881C_COMMAND_INSTR(0x66, 0x0d),723	ILI9881C_COMMAND_INSTR(0x67, 0x06),724	ILI9881C_COMMAND_INSTR(0x68, 0x02),725	ILI9881C_COMMAND_INSTR(0x69, 0x07),726	ILI9881C_COMMAND_INSTR(0x6a, 0x02),727	ILI9881C_COMMAND_INSTR(0x6b, 0x02),728	ILI9881C_COMMAND_INSTR(0x6c, 0x02),729	ILI9881C_COMMAND_INSTR(0x6d, 0x02),730	ILI9881C_COMMAND_INSTR(0x6e, 0x02),731	ILI9881C_COMMAND_INSTR(0x6f, 0x02),732	ILI9881C_COMMAND_INSTR(0x70, 0x02),733	ILI9881C_COMMAND_INSTR(0x71, 0x02),734	ILI9881C_COMMAND_INSTR(0x72, 0x02),735	ILI9881C_COMMAND_INSTR(0x73, 0x02),736	ILI9881C_COMMAND_INSTR(0x74, 0x02),737	ILI9881C_COMMAND_INSTR(0x75, 0x01),738	ILI9881C_COMMAND_INSTR(0x76, 0x00),739	ILI9881C_COMMAND_INSTR(0x77, 0x14),740	ILI9881C_COMMAND_INSTR(0x78, 0x15),741	ILI9881C_COMMAND_INSTR(0x79, 0x0e),742	ILI9881C_COMMAND_INSTR(0x7a, 0x0f),743	ILI9881C_COMMAND_INSTR(0x7b, 0x0c),744	ILI9881C_COMMAND_INSTR(0x7c, 0x0d),745	ILI9881C_COMMAND_INSTR(0x7d, 0x06),746	ILI9881C_COMMAND_INSTR(0x7e, 0x02),747	ILI9881C_COMMAND_INSTR(0x7f, 0x07),748	ILI9881C_COMMAND_INSTR(0x88, 0x02),749	ILI9881C_COMMAND_INSTR(0x89, 0x02),750	ILI9881C_COMMAND_INSTR(0x8A, 0x02),751	ILI9881C_SWITCH_PAGE_INSTR(4),752	ILI9881C_COMMAND_INSTR(0x38, 0x01),753	ILI9881C_COMMAND_INSTR(0x39, 0x00),754	ILI9881C_COMMAND_INSTR(0x6c, 0x15),755	ILI9881C_COMMAND_INSTR(0x6e, 0x2b),756	ILI9881C_COMMAND_INSTR(0x6f, 0x33),757	ILI9881C_COMMAND_INSTR(0x8d, 0x18),758	ILI9881C_COMMAND_INSTR(0x87, 0xba),759	ILI9881C_COMMAND_INSTR(0x26, 0x76),760	ILI9881C_COMMAND_INSTR(0xb2, 0xd1),761	ILI9881C_COMMAND_INSTR(0xb5, 0x06),762	ILI9881C_COMMAND_INSTR(0x3a, 0x24),763	ILI9881C_COMMAND_INSTR(0x35, 0x1f),764	ILI9881C_COMMAND_INSTR(0x33, 0x14),765	ILI9881C_COMMAND_INSTR(0x3b, 0x98),766	ILI9881C_SWITCH_PAGE_INSTR(1),767	ILI9881C_COMMAND_INSTR(0x22, 0x0a),768	ILI9881C_COMMAND_INSTR(0x31, 0x00),769	ILI9881C_COMMAND_INSTR(0x40, 0x33),770	ILI9881C_COMMAND_INSTR(0x53, 0xa2),771	ILI9881C_COMMAND_INSTR(0x55, 0x92),772	ILI9881C_COMMAND_INSTR(0x50, 0x96),773	ILI9881C_COMMAND_INSTR(0x51, 0x96),774	ILI9881C_COMMAND_INSTR(0x60, 0x22),775	ILI9881C_COMMAND_INSTR(0x61, 0x00),776	ILI9881C_COMMAND_INSTR(0x62, 0x19),777	ILI9881C_COMMAND_INSTR(0x63, 0x00),778	ILI9881C_COMMAND_INSTR(0xa0, 0x08),779	ILI9881C_COMMAND_INSTR(0xa1, 0x11),780	ILI9881C_COMMAND_INSTR(0xa2, 0x19),781	ILI9881C_COMMAND_INSTR(0xa3, 0x0d),782	ILI9881C_COMMAND_INSTR(0xa4, 0x0d),783	ILI9881C_COMMAND_INSTR(0xa5, 0x1e),784	ILI9881C_COMMAND_INSTR(0xa6, 0x14),785	ILI9881C_COMMAND_INSTR(0xa7, 0x17),786	ILI9881C_COMMAND_INSTR(0xa8, 0x4f),787	ILI9881C_COMMAND_INSTR(0xa9, 0x1a),788	ILI9881C_COMMAND_INSTR(0xaa, 0x27),789	ILI9881C_COMMAND_INSTR(0xab, 0x49),790	ILI9881C_COMMAND_INSTR(0xac, 0x1a),791	ILI9881C_COMMAND_INSTR(0xad, 0x18),792	ILI9881C_COMMAND_INSTR(0xae, 0x4c),793	ILI9881C_COMMAND_INSTR(0xaf, 0x22),794	ILI9881C_COMMAND_INSTR(0xb0, 0x27),795	ILI9881C_COMMAND_INSTR(0xb1, 0x4b),796	ILI9881C_COMMAND_INSTR(0xb2, 0x60),797	ILI9881C_COMMAND_INSTR(0xb3, 0x39),798	ILI9881C_COMMAND_INSTR(0xc0, 0x08),799	ILI9881C_COMMAND_INSTR(0xc1, 0x11),800	ILI9881C_COMMAND_INSTR(0xc2, 0x19),801	ILI9881C_COMMAND_INSTR(0xc3, 0x0d),802	ILI9881C_COMMAND_INSTR(0xc4, 0x0d),803	ILI9881C_COMMAND_INSTR(0xc5, 0x1e),804	ILI9881C_COMMAND_INSTR(0xc6, 0x14),805	ILI9881C_COMMAND_INSTR(0xc7, 0x17),806	ILI9881C_COMMAND_INSTR(0xc8, 0x4f),807	ILI9881C_COMMAND_INSTR(0xc9, 0x1a),808	ILI9881C_COMMAND_INSTR(0xca, 0x27),809	ILI9881C_COMMAND_INSTR(0xcb, 0x49),810	ILI9881C_COMMAND_INSTR(0xcc, 0x1a),811	ILI9881C_COMMAND_INSTR(0xcd, 0x18),812	ILI9881C_COMMAND_INSTR(0xce, 0x4c),813	ILI9881C_COMMAND_INSTR(0xcf, 0x33),814	ILI9881C_COMMAND_INSTR(0xd0, 0x27),815	ILI9881C_COMMAND_INSTR(0xd1, 0x4b),816	ILI9881C_COMMAND_INSTR(0xd2, 0x60),817	ILI9881C_COMMAND_INSTR(0xd3, 0x39),818	ILI9881C_SWITCH_PAGE_INSTR(0),819	ILI9881C_COMMAND_INSTR(0x36, 0x03),820};821 822static const struct ili9881c_instr w552946ab_init[] = {823	ILI9881C_SWITCH_PAGE_INSTR(3),824	ILI9881C_COMMAND_INSTR(0x01, 0x00),825	ILI9881C_COMMAND_INSTR(0x02, 0x00),826	ILI9881C_COMMAND_INSTR(0x03, 0x53),827	ILI9881C_COMMAND_INSTR(0x04, 0x53),828	ILI9881C_COMMAND_INSTR(0x05, 0x13),829	ILI9881C_COMMAND_INSTR(0x06, 0x04),830	ILI9881C_COMMAND_INSTR(0x07, 0x02),831	ILI9881C_COMMAND_INSTR(0x08, 0x02),832	ILI9881C_COMMAND_INSTR(0x09, 0x00),833	ILI9881C_COMMAND_INSTR(0x0A, 0x00),834	ILI9881C_COMMAND_INSTR(0x0B, 0x00),835	ILI9881C_COMMAND_INSTR(0x0C, 0x00),836	ILI9881C_COMMAND_INSTR(0x0D, 0x00),837	ILI9881C_COMMAND_INSTR(0x0E, 0x00),838	ILI9881C_COMMAND_INSTR(0x0F, 0x00),839 840	ILI9881C_COMMAND_INSTR(0x10, 0x00),841	ILI9881C_COMMAND_INSTR(0x11, 0x00),842	ILI9881C_COMMAND_INSTR(0x12, 0x00),843	ILI9881C_COMMAND_INSTR(0x13, 0x00),844	ILI9881C_COMMAND_INSTR(0x14, 0x00),845	ILI9881C_COMMAND_INSTR(0x15, 0x08),846	ILI9881C_COMMAND_INSTR(0x16, 0x10),847	ILI9881C_COMMAND_INSTR(0x17, 0x00),848	ILI9881C_COMMAND_INSTR(0x18, 0x08),849	ILI9881C_COMMAND_INSTR(0x19, 0x00),850	ILI9881C_COMMAND_INSTR(0x1A, 0x00),851	ILI9881C_COMMAND_INSTR(0x1B, 0x00),852	ILI9881C_COMMAND_INSTR(0x1C, 0x00),853	ILI9881C_COMMAND_INSTR(0x1D, 0x00),854	ILI9881C_COMMAND_INSTR(0x1E, 0xC0),855	ILI9881C_COMMAND_INSTR(0x1F, 0x80),856 857	ILI9881C_COMMAND_INSTR(0x20, 0x02),858	ILI9881C_COMMAND_INSTR(0x21, 0x09),859	ILI9881C_COMMAND_INSTR(0x22, 0x00),860	ILI9881C_COMMAND_INSTR(0x23, 0x00),861	ILI9881C_COMMAND_INSTR(0x24, 0x00),862	ILI9881C_COMMAND_INSTR(0x25, 0x00),863	ILI9881C_COMMAND_INSTR(0x26, 0x00),864	ILI9881C_COMMAND_INSTR(0x27, 0x00),865	ILI9881C_COMMAND_INSTR(0x28, 0x55),866	ILI9881C_COMMAND_INSTR(0x29, 0x03),867	ILI9881C_COMMAND_INSTR(0x2A, 0x00),868	ILI9881C_COMMAND_INSTR(0x2B, 0x00),869	ILI9881C_COMMAND_INSTR(0x2C, 0x00),870	ILI9881C_COMMAND_INSTR(0x2D, 0x00),871	ILI9881C_COMMAND_INSTR(0x2E, 0x00),872	ILI9881C_COMMAND_INSTR(0x2F, 0x00),873 874	ILI9881C_COMMAND_INSTR(0x30, 0x00),875	ILI9881C_COMMAND_INSTR(0x31, 0x00),876	ILI9881C_COMMAND_INSTR(0x32, 0x00),877	ILI9881C_COMMAND_INSTR(0x33, 0x00),878	ILI9881C_COMMAND_INSTR(0x34, 0x04),879	ILI9881C_COMMAND_INSTR(0x35, 0x05),880	ILI9881C_COMMAND_INSTR(0x36, 0x05),881	ILI9881C_COMMAND_INSTR(0x37, 0x00),882	ILI9881C_COMMAND_INSTR(0x38, 0x3C),883	ILI9881C_COMMAND_INSTR(0x39, 0x35),884	ILI9881C_COMMAND_INSTR(0x3A, 0x00),885	ILI9881C_COMMAND_INSTR(0x3B, 0x40),886	ILI9881C_COMMAND_INSTR(0x3C, 0x00),887	ILI9881C_COMMAND_INSTR(0x3D, 0x00),888	ILI9881C_COMMAND_INSTR(0x3E, 0x00),889	ILI9881C_COMMAND_INSTR(0x3F, 0x00),890 891	ILI9881C_COMMAND_INSTR(0x40, 0x00),892	ILI9881C_COMMAND_INSTR(0x41, 0x88),893	ILI9881C_COMMAND_INSTR(0x42, 0x00),894	ILI9881C_COMMAND_INSTR(0x43, 0x00),895	ILI9881C_COMMAND_INSTR(0x44, 0x1F),896 897	ILI9881C_COMMAND_INSTR(0x50, 0x01),898	ILI9881C_COMMAND_INSTR(0x51, 0x23),899	ILI9881C_COMMAND_INSTR(0x52, 0x45),900	ILI9881C_COMMAND_INSTR(0x53, 0x67),901	ILI9881C_COMMAND_INSTR(0x54, 0x89),902	ILI9881C_COMMAND_INSTR(0x55, 0xaB),903	ILI9881C_COMMAND_INSTR(0x56, 0x01),904	ILI9881C_COMMAND_INSTR(0x57, 0x23),905	ILI9881C_COMMAND_INSTR(0x58, 0x45),906	ILI9881C_COMMAND_INSTR(0x59, 0x67),907	ILI9881C_COMMAND_INSTR(0x5A, 0x89),908	ILI9881C_COMMAND_INSTR(0x5B, 0xAB),909	ILI9881C_COMMAND_INSTR(0x5C, 0xCD),910	ILI9881C_COMMAND_INSTR(0x5D, 0xEF),911	ILI9881C_COMMAND_INSTR(0x5E, 0x03),912	ILI9881C_COMMAND_INSTR(0x5F, 0x14),913 914	ILI9881C_COMMAND_INSTR(0x60, 0x15),915	ILI9881C_COMMAND_INSTR(0x61, 0x0C),916	ILI9881C_COMMAND_INSTR(0x62, 0x0D),917	ILI9881C_COMMAND_INSTR(0x63, 0x0E),918	ILI9881C_COMMAND_INSTR(0x64, 0x0F),919	ILI9881C_COMMAND_INSTR(0x65, 0x10),920	ILI9881C_COMMAND_INSTR(0x66, 0x11),921	ILI9881C_COMMAND_INSTR(0x67, 0x08),922	ILI9881C_COMMAND_INSTR(0x68, 0x02),923	ILI9881C_COMMAND_INSTR(0x69, 0x0A),924	ILI9881C_COMMAND_INSTR(0x6A, 0x02),925	ILI9881C_COMMAND_INSTR(0x6B, 0x02),926	ILI9881C_COMMAND_INSTR(0x6C, 0x02),927	ILI9881C_COMMAND_INSTR(0x6D, 0x02),928	ILI9881C_COMMAND_INSTR(0x6E, 0x02),929	ILI9881C_COMMAND_INSTR(0x6F, 0x02),930 931	ILI9881C_COMMAND_INSTR(0x70, 0x02),932	ILI9881C_COMMAND_INSTR(0x71, 0x02),933	ILI9881C_COMMAND_INSTR(0x72, 0x06),934	ILI9881C_COMMAND_INSTR(0x73, 0x02),935	ILI9881C_COMMAND_INSTR(0x74, 0x02),936	ILI9881C_COMMAND_INSTR(0x75, 0x14),937	ILI9881C_COMMAND_INSTR(0x76, 0x15),938	ILI9881C_COMMAND_INSTR(0x77, 0x0F),939	ILI9881C_COMMAND_INSTR(0x78, 0x0E),940	ILI9881C_COMMAND_INSTR(0x79, 0x0D),941	ILI9881C_COMMAND_INSTR(0x7A, 0x0C),942	ILI9881C_COMMAND_INSTR(0x7B, 0x11),943	ILI9881C_COMMAND_INSTR(0x7C, 0x10),944	ILI9881C_COMMAND_INSTR(0x7D, 0x06),945	ILI9881C_COMMAND_INSTR(0x7E, 0x02),946	ILI9881C_COMMAND_INSTR(0x7F, 0x0A),947 948	ILI9881C_COMMAND_INSTR(0x80, 0x02),949	ILI9881C_COMMAND_INSTR(0x81, 0x02),950	ILI9881C_COMMAND_INSTR(0x82, 0x02),951	ILI9881C_COMMAND_INSTR(0x83, 0x02),952	ILI9881C_COMMAND_INSTR(0x84, 0x02),953	ILI9881C_COMMAND_INSTR(0x85, 0x02),954	ILI9881C_COMMAND_INSTR(0x86, 0x02),955	ILI9881C_COMMAND_INSTR(0x87, 0x02),956	ILI9881C_COMMAND_INSTR(0x88, 0x08),957	ILI9881C_COMMAND_INSTR(0x89, 0x02),958	ILI9881C_COMMAND_INSTR(0x8A, 0x02),959 960	ILI9881C_SWITCH_PAGE_INSTR(4),961	ILI9881C_COMMAND_INSTR(0x00, 0x80),962	ILI9881C_COMMAND_INSTR(0x70, 0x00),963	ILI9881C_COMMAND_INSTR(0x71, 0x00),964	ILI9881C_COMMAND_INSTR(0x66, 0xFE),965	ILI9881C_COMMAND_INSTR(0x82, 0x15),966	ILI9881C_COMMAND_INSTR(0x84, 0x15),967	ILI9881C_COMMAND_INSTR(0x85, 0x15),968	ILI9881C_COMMAND_INSTR(0x3a, 0x24),969	ILI9881C_COMMAND_INSTR(0x32, 0xAC),970	ILI9881C_COMMAND_INSTR(0x8C, 0x80),971	ILI9881C_COMMAND_INSTR(0x3C, 0xF5),972	ILI9881C_COMMAND_INSTR(0x88, 0x33),973 974	ILI9881C_SWITCH_PAGE_INSTR(1),975	ILI9881C_COMMAND_INSTR(0x22, 0x0A),976	ILI9881C_COMMAND_INSTR(0x31, 0x00),977	ILI9881C_COMMAND_INSTR(0x53, 0x78),978	ILI9881C_COMMAND_INSTR(0x50, 0x5B),979	ILI9881C_COMMAND_INSTR(0x51, 0x5B),980	ILI9881C_COMMAND_INSTR(0x60, 0x20),981	ILI9881C_COMMAND_INSTR(0x61, 0x00),982	ILI9881C_COMMAND_INSTR(0x62, 0x0D),983	ILI9881C_COMMAND_INSTR(0x63, 0x00),984 985	ILI9881C_COMMAND_INSTR(0xA0, 0x00),986	ILI9881C_COMMAND_INSTR(0xA1, 0x10),987	ILI9881C_COMMAND_INSTR(0xA2, 0x1C),988	ILI9881C_COMMAND_INSTR(0xA3, 0x13),989	ILI9881C_COMMAND_INSTR(0xA4, 0x15),990	ILI9881C_COMMAND_INSTR(0xA5, 0x26),991	ILI9881C_COMMAND_INSTR(0xA6, 0x1A),992	ILI9881C_COMMAND_INSTR(0xA7, 0x1D),993	ILI9881C_COMMAND_INSTR(0xA8, 0x67),994	ILI9881C_COMMAND_INSTR(0xA9, 0x1C),995	ILI9881C_COMMAND_INSTR(0xAA, 0x29),996	ILI9881C_COMMAND_INSTR(0xAB, 0x5B),997	ILI9881C_COMMAND_INSTR(0xAC, 0x26),998	ILI9881C_COMMAND_INSTR(0xAD, 0x28),999	ILI9881C_COMMAND_INSTR(0xAE, 0x5C),1000	ILI9881C_COMMAND_INSTR(0xAF, 0x30),1001	ILI9881C_COMMAND_INSTR(0xB0, 0x31),1002	ILI9881C_COMMAND_INSTR(0xB1, 0x2E),1003	ILI9881C_COMMAND_INSTR(0xB2, 0x32),1004	ILI9881C_COMMAND_INSTR(0xB3, 0x00),1005 1006	ILI9881C_COMMAND_INSTR(0xC0, 0x00),1007	ILI9881C_COMMAND_INSTR(0xC1, 0x10),1008	ILI9881C_COMMAND_INSTR(0xC2, 0x1C),1009	ILI9881C_COMMAND_INSTR(0xC3, 0x13),1010	ILI9881C_COMMAND_INSTR(0xC4, 0x15),1011	ILI9881C_COMMAND_INSTR(0xC5, 0x26),1012	ILI9881C_COMMAND_INSTR(0xC6, 0x1A),1013	ILI9881C_COMMAND_INSTR(0xC7, 0x1D),1014	ILI9881C_COMMAND_INSTR(0xC8, 0x67),1015	ILI9881C_COMMAND_INSTR(0xC9, 0x1C),1016	ILI9881C_COMMAND_INSTR(0xCA, 0x29),1017	ILI9881C_COMMAND_INSTR(0xCB, 0x5B),1018	ILI9881C_COMMAND_INSTR(0xCC, 0x26),1019	ILI9881C_COMMAND_INSTR(0xCD, 0x28),1020	ILI9881C_COMMAND_INSTR(0xCE, 0x5C),1021	ILI9881C_COMMAND_INSTR(0xCF, 0x30),1022	ILI9881C_COMMAND_INSTR(0xD0, 0x31),1023	ILI9881C_COMMAND_INSTR(0xD1, 0x2E),1024	ILI9881C_COMMAND_INSTR(0xD2, 0x32),1025	ILI9881C_COMMAND_INSTR(0xD3, 0x00),1026	ILI9881C_SWITCH_PAGE_INSTR(0),1027};1028 1029static const struct ili9881c_instr am8001280g_init[] = {1030	ILI9881C_SWITCH_PAGE_INSTR(3),1031	ILI9881C_COMMAND_INSTR(0x01, 0x00),1032	ILI9881C_COMMAND_INSTR(0x02, 0x00),1033	ILI9881C_COMMAND_INSTR(0x03, 0x73),1034	ILI9881C_COMMAND_INSTR(0x04, 0xD3),1035	ILI9881C_COMMAND_INSTR(0x05, 0x00),1036	ILI9881C_COMMAND_INSTR(0x06, 0x0A),1037	ILI9881C_COMMAND_INSTR(0x07, 0x0E),1038	ILI9881C_COMMAND_INSTR(0x08, 0x00),1039	ILI9881C_COMMAND_INSTR(0x09, 0x01),1040	ILI9881C_COMMAND_INSTR(0x0a, 0x01),1041	ILI9881C_COMMAND_INSTR(0x0b, 0x01),1042	ILI9881C_COMMAND_INSTR(0x0c, 0x01),1043	ILI9881C_COMMAND_INSTR(0x0d, 0x01),1044	ILI9881C_COMMAND_INSTR(0x0e, 0x01),1045	ILI9881C_COMMAND_INSTR(0x0f, 0x01),1046	ILI9881C_COMMAND_INSTR(0x10, 0x01),1047	ILI9881C_COMMAND_INSTR(0x11, 0x00),1048	ILI9881C_COMMAND_INSTR(0x12, 0x00),1049	ILI9881C_COMMAND_INSTR(0x13, 0x00),1050	ILI9881C_COMMAND_INSTR(0x14, 0x00),1051	ILI9881C_COMMAND_INSTR(0x15, 0x00),1052	ILI9881C_COMMAND_INSTR(0x16, 0x00),1053	ILI9881C_COMMAND_INSTR(0x17, 0x00),1054	ILI9881C_COMMAND_INSTR(0x18, 0x00),1055	ILI9881C_COMMAND_INSTR(0x19, 0x00),1056	ILI9881C_COMMAND_INSTR(0x1a, 0x00),1057	ILI9881C_COMMAND_INSTR(0x1b, 0x00),1058	ILI9881C_COMMAND_INSTR(0x1c, 0x00),1059	ILI9881C_COMMAND_INSTR(0x1d, 0x00),1060	ILI9881C_COMMAND_INSTR(0x1e, 0x40),1061	ILI9881C_COMMAND_INSTR(0x1f, 0x80),1062	ILI9881C_COMMAND_INSTR(0x20, 0x06),1063	ILI9881C_COMMAND_INSTR(0x21, 0x01),1064	ILI9881C_COMMAND_INSTR(0x22, 0x00),1065	ILI9881C_COMMAND_INSTR(0x23, 0x00),1066	ILI9881C_COMMAND_INSTR(0x24, 0x00),1067	ILI9881C_COMMAND_INSTR(0x25, 0x00),1068	ILI9881C_COMMAND_INSTR(0x26, 0x00),1069	ILI9881C_COMMAND_INSTR(0x27, 0x00),1070	ILI9881C_COMMAND_INSTR(0x28, 0x33),1071	ILI9881C_COMMAND_INSTR(0x29, 0x03),1072	ILI9881C_COMMAND_INSTR(0x2a, 0x00),1073	ILI9881C_COMMAND_INSTR(0x2b, 0x00),1074	ILI9881C_COMMAND_INSTR(0x2c, 0x00),1075	ILI9881C_COMMAND_INSTR(0x2d, 0x00),1076	ILI9881C_COMMAND_INSTR(0x2e, 0x00),1077	ILI9881C_COMMAND_INSTR(0x2f, 0x00),1078	ILI9881C_COMMAND_INSTR(0x30, 0x00),1079	ILI9881C_COMMAND_INSTR(0x31, 0x00),1080	ILI9881C_COMMAND_INSTR(0x32, 0x00),1081	ILI9881C_COMMAND_INSTR(0x33, 0x00),1082	ILI9881C_COMMAND_INSTR(0x34, 0x03),1083	ILI9881C_COMMAND_INSTR(0x35, 0x00),1084	ILI9881C_COMMAND_INSTR(0x36, 0x03),1085	ILI9881C_COMMAND_INSTR(0x37, 0x00),1086	ILI9881C_COMMAND_INSTR(0x38, 0x00),1087	ILI9881C_COMMAND_INSTR(0x39, 0x00),1088	ILI9881C_COMMAND_INSTR(0x3a, 0x40),1089	ILI9881C_COMMAND_INSTR(0x3b, 0x40),1090	ILI9881C_COMMAND_INSTR(0x3c, 0x00),1091	ILI9881C_COMMAND_INSTR(0x3d, 0x00),1092	ILI9881C_COMMAND_INSTR(0x3e, 0x00),1093	ILI9881C_COMMAND_INSTR(0x3f, 0x00),1094	ILI9881C_COMMAND_INSTR(0x40, 0x00),1095	ILI9881C_COMMAND_INSTR(0x41, 0x00),1096	ILI9881C_COMMAND_INSTR(0x42, 0x00),1097	ILI9881C_COMMAND_INSTR(0x43, 0x00),1098	ILI9881C_COMMAND_INSTR(0x44, 0x00),1099 1100	ILI9881C_COMMAND_INSTR(0x50, 0x01),1101	ILI9881C_COMMAND_INSTR(0x51, 0x23),1102	ILI9881C_COMMAND_INSTR(0x52, 0x45),1103	ILI9881C_COMMAND_INSTR(0x53, 0x67),1104	ILI9881C_COMMAND_INSTR(0x54, 0x89),1105	ILI9881C_COMMAND_INSTR(0x55, 0xab),1106	ILI9881C_COMMAND_INSTR(0x56, 0x01),1107	ILI9881C_COMMAND_INSTR(0x57, 0x23),1108	ILI9881C_COMMAND_INSTR(0x58, 0x45),1109	ILI9881C_COMMAND_INSTR(0x59, 0x67),1110	ILI9881C_COMMAND_INSTR(0x5a, 0x89),1111	ILI9881C_COMMAND_INSTR(0x5b, 0xab),1112	ILI9881C_COMMAND_INSTR(0x5c, 0xcd),1113	ILI9881C_COMMAND_INSTR(0x5d, 0xef),1114 1115	ILI9881C_COMMAND_INSTR(0x5e, 0x11),1116	ILI9881C_COMMAND_INSTR(0x5f, 0x02),1117	ILI9881C_COMMAND_INSTR(0x60, 0x00),1118	ILI9881C_COMMAND_INSTR(0x61, 0x01),1119	ILI9881C_COMMAND_INSTR(0x62, 0x0D),1120	ILI9881C_COMMAND_INSTR(0x63, 0x0C),1121	ILI9881C_COMMAND_INSTR(0x64, 0x0F),1122	ILI9881C_COMMAND_INSTR(0x65, 0x0E),1123	ILI9881C_COMMAND_INSTR(0x66, 0x06),1124	ILI9881C_COMMAND_INSTR(0x67, 0x07),1125	ILI9881C_COMMAND_INSTR(0x68, 0x02),1126	ILI9881C_COMMAND_INSTR(0x69, 0x02),1127	ILI9881C_COMMAND_INSTR(0x6a, 0x08),1128	ILI9881C_COMMAND_INSTR(0x6b, 0x02),1129	ILI9881C_COMMAND_INSTR(0x6c, 0x02),1130	ILI9881C_COMMAND_INSTR(0x6d, 0x02),1131	ILI9881C_COMMAND_INSTR(0x6e, 0x02),1132	ILI9881C_COMMAND_INSTR(0x6f, 0x02),1133	ILI9881C_COMMAND_INSTR(0x70, 0x02),1134	ILI9881C_COMMAND_INSTR(0x71, 0x02),1135	ILI9881C_COMMAND_INSTR(0x72, 0x02),1136	ILI9881C_COMMAND_INSTR(0x73, 0x02),1137	ILI9881C_COMMAND_INSTR(0x74, 0x02),1138	ILI9881C_COMMAND_INSTR(0x75, 0x02),1139	ILI9881C_COMMAND_INSTR(0x76, 0x00),1140	ILI9881C_COMMAND_INSTR(0x77, 0x01),1141	ILI9881C_COMMAND_INSTR(0x78, 0x0D),1142	ILI9881C_COMMAND_INSTR(0x79, 0x0C),1143	ILI9881C_COMMAND_INSTR(0x7a, 0x0F),1144	ILI9881C_COMMAND_INSTR(0x7b, 0x0E),1145	ILI9881C_COMMAND_INSTR(0x7c, 0x06),1146	ILI9881C_COMMAND_INSTR(0x7d, 0x07),1147	ILI9881C_COMMAND_INSTR(0x7e, 0x02),1148	ILI9881C_COMMAND_INSTR(0x7f, 0x02),1149	ILI9881C_COMMAND_INSTR(0x80, 0x08),1150	ILI9881C_COMMAND_INSTR(0x81, 0x02),1151	ILI9881C_COMMAND_INSTR(0x82, 0x02),1152	ILI9881C_COMMAND_INSTR(0x83, 0x02),1153	ILI9881C_COMMAND_INSTR(0x84, 0x02),1154	ILI9881C_COMMAND_INSTR(0x85, 0x02),1155	ILI9881C_COMMAND_INSTR(0x86, 0x02),1156	ILI9881C_COMMAND_INSTR(0x87, 0x02),1157	ILI9881C_COMMAND_INSTR(0x88, 0x02),1158	ILI9881C_COMMAND_INSTR(0x89, 0x02),1159	ILI9881C_COMMAND_INSTR(0x8A, 0x02),1160 1161	ILI9881C_SWITCH_PAGE_INSTR(4),1162	ILI9881C_COMMAND_INSTR(0x6c, 0x15),1163	ILI9881C_COMMAND_INSTR(0x6e, 0x30),1164	ILI9881C_COMMAND_INSTR(0x6f, 0x33),1165	ILI9881C_COMMAND_INSTR(0x8d, 0x15),1166	ILI9881C_COMMAND_INSTR(0x3a, 0xa4),1167	ILI9881C_COMMAND_INSTR(0x87, 0xba),1168	ILI9881C_COMMAND_INSTR(0x26, 0x76),1169	ILI9881C_COMMAND_INSTR(0xb2, 0xd1),1170 1171	ILI9881C_SWITCH_PAGE_INSTR(1),1172	ILI9881C_COMMAND_INSTR(0x22, 0x0A),1173	ILI9881C_COMMAND_INSTR(0x31, 0x0B),1174	ILI9881C_COMMAND_INSTR(0x50, 0xa5),1175	ILI9881C_COMMAND_INSTR(0x51, 0xa0),1176	ILI9881C_COMMAND_INSTR(0x53, 0x70),1177	ILI9881C_COMMAND_INSTR(0x55, 0x7A),1178	ILI9881C_COMMAND_INSTR(0x60, 0x14),1179 1180	ILI9881C_COMMAND_INSTR(0xA0, 0x00),1181	ILI9881C_COMMAND_INSTR(0xA1, 0x53),1182	ILI9881C_COMMAND_INSTR(0xA2, 0x50),1183	ILI9881C_COMMAND_INSTR(0xA3, 0x20),1184	ILI9881C_COMMAND_INSTR(0xA4, 0x27),1185	ILI9881C_COMMAND_INSTR(0xA5, 0x33),1186	ILI9881C_COMMAND_INSTR(0xA6, 0x25),1187	ILI9881C_COMMAND_INSTR(0xA7, 0x25),1188	ILI9881C_COMMAND_INSTR(0xA8, 0xD4),1189	ILI9881C_COMMAND_INSTR(0xA9, 0x1A),1190	ILI9881C_COMMAND_INSTR(0xAA, 0x2B),1191	ILI9881C_COMMAND_INSTR(0xAB, 0xB5),1192	ILI9881C_COMMAND_INSTR(0xAC, 0x19),1193	ILI9881C_COMMAND_INSTR(0xAD, 0x18),1194	ILI9881C_COMMAND_INSTR(0xAE, 0x53),1195	ILI9881C_COMMAND_INSTR(0xAF, 0x1A),1196	ILI9881C_COMMAND_INSTR(0xB0, 0x25),1197	ILI9881C_COMMAND_INSTR(0xB1, 0x62),1198	ILI9881C_COMMAND_INSTR(0xB2, 0x6A),1199	ILI9881C_COMMAND_INSTR(0xB3, 0x31),1200 1201	ILI9881C_COMMAND_INSTR(0xC0, 0x00),1202	ILI9881C_COMMAND_INSTR(0xC1, 0x53),1203	ILI9881C_COMMAND_INSTR(0xC2, 0x50),1204	ILI9881C_COMMAND_INSTR(0xC3, 0x20),1205	ILI9881C_COMMAND_INSTR(0xC4, 0x27),1206	ILI9881C_COMMAND_INSTR(0xC5, 0x33),1207	ILI9881C_COMMAND_INSTR(0xC6, 0x25),1208	ILI9881C_COMMAND_INSTR(0xC7, 0x25),1209	ILI9881C_COMMAND_INSTR(0xC8, 0xD4),1210	ILI9881C_COMMAND_INSTR(0xC9, 0x1A),1211	ILI9881C_COMMAND_INSTR(0xCA, 0x2B),1212	ILI9881C_COMMAND_INSTR(0xCB, 0xB5),1213	ILI9881C_COMMAND_INSTR(0xCC, 0x19),1214	ILI9881C_COMMAND_INSTR(0xCD, 0x18),1215	ILI9881C_COMMAND_INSTR(0xCE, 0x53),1216	ILI9881C_COMMAND_INSTR(0xCF, 0x1A),1217	ILI9881C_COMMAND_INSTR(0xD0, 0x25),1218	ILI9881C_COMMAND_INSTR(0xD1, 0x62),1219	ILI9881C_COMMAND_INSTR(0xD2, 0x6A),1220	ILI9881C_COMMAND_INSTR(0xD3, 0x31),1221	ILI9881C_SWITCH_PAGE_INSTR(0),1222	ILI9881C_COMMAND_INSTR(MIPI_DCS_WRITE_CONTROL_DISPLAY, 0x2c),1223	ILI9881C_COMMAND_INSTR(MIPI_DCS_WRITE_POWER_SAVE, 0x00),1224};1225 1226static inline struct ili9881c *panel_to_ili9881c(struct drm_panel *panel)1227{1228	return container_of(panel, struct ili9881c, panel);1229}1230 1231/*1232 * The panel seems to accept some private DCS commands that map1233 * directly to registers.1234 *1235 * It is organised by page, with each page having its own set of1236 * registers, and the first page looks like it's holding the standard1237 * DCS commands.1238 *1239 * So before any attempt at sending a command or data, we have to be1240 * sure if we're in the right page or not.1241 */1242static int ili9881c_switch_page(struct ili9881c *ctx, u8 page)1243{1244	u8 buf[4] = { 0xff, 0x98, 0x81, page };1245	int ret;1246 1247	ret = mipi_dsi_dcs_write_buffer(ctx->dsi, buf, sizeof(buf));1248	if (ret < 0)1249		return ret;1250 1251	return 0;1252}1253 1254static int ili9881c_send_cmd_data(struct ili9881c *ctx, u8 cmd, u8 data)1255{1256	u8 buf[2] = { cmd, data };1257	int ret;1258 1259	ret = mipi_dsi_dcs_write_buffer(ctx->dsi, buf, sizeof(buf));1260	if (ret < 0)1261		return ret;1262 1263	return 0;1264}1265 1266static int ili9881c_prepare(struct drm_panel *panel)1267{1268	struct ili9881c *ctx = panel_to_ili9881c(panel);1269	unsigned int i;1270	int ret;1271 1272	/* Power the panel */1273	ret = regulator_enable(ctx->power);1274	if (ret)1275		return ret;1276	msleep(5);1277 1278	/* And reset it */1279	gpiod_set_value_cansleep(ctx->reset, 1);1280	msleep(20);1281 1282	gpiod_set_value_cansleep(ctx->reset, 0);1283	msleep(20);1284 1285	for (i = 0; i < ctx->desc->init_length; i++) {1286		const struct ili9881c_instr *instr = &ctx->desc->init[i];1287 1288		if (instr->op == ILI9881C_SWITCH_PAGE)1289			ret = ili9881c_switch_page(ctx, instr->arg.page);1290		else if (instr->op == ILI9881C_COMMAND)1291			ret = ili9881c_send_cmd_data(ctx, instr->arg.cmd.cmd,1292						      instr->arg.cmd.data);1293 1294		if (ret)1295			return ret;1296	}1297 1298	ret = ili9881c_switch_page(ctx, 0);1299	if (ret)1300		return ret;1301 1302	ret = mipi_dsi_dcs_set_tear_on(ctx->dsi, MIPI_DSI_DCS_TEAR_MODE_VBLANK);1303	if (ret)1304		return ret;1305 1306	ret = mipi_dsi_dcs_exit_sleep_mode(ctx->dsi);1307	if (ret)1308		return ret;1309 1310	return 0;1311}1312 1313static int ili9881c_enable(struct drm_panel *panel)1314{1315	struct ili9881c *ctx = panel_to_ili9881c(panel);1316 1317	msleep(120);1318 1319	mipi_dsi_dcs_set_display_on(ctx->dsi);1320 1321	return 0;1322}1323 1324static int ili9881c_disable(struct drm_panel *panel)1325{1326	struct ili9881c *ctx = panel_to_ili9881c(panel);1327 1328	return mipi_dsi_dcs_set_display_off(ctx->dsi);1329}1330 1331static int ili9881c_unprepare(struct drm_panel *panel)1332{1333	struct ili9881c *ctx = panel_to_ili9881c(panel);1334 1335	mipi_dsi_dcs_enter_sleep_mode(ctx->dsi);1336	regulator_disable(ctx->power);1337	gpiod_set_value_cansleep(ctx->reset, 1);1338 1339	return 0;1340}1341 1342static const struct drm_display_mode lhr050h41_default_mode = {1343	.clock		= 62000,1344 1345	.hdisplay	= 720,1346	.hsync_start	= 720 + 10,1347	.hsync_end	= 720 + 10 + 20,1348	.htotal		= 720 + 10 + 20 + 30,1349 1350	.vdisplay	= 1280,1351	.vsync_start	= 1280 + 10,1352	.vsync_end	= 1280 + 10 + 10,1353	.vtotal		= 1280 + 10 + 10 + 20,1354 1355	.width_mm	= 62,1356	.height_mm	= 110,1357};1358 1359static const struct drm_display_mode k101_im2byl02_default_mode = {1360	.clock		= 69700,1361 1362	.hdisplay	= 800,1363	.hsync_start	= 800 + 52,1364	.hsync_end	= 800 + 52 + 8,1365	.htotal		= 800 + 52 + 8 + 48,1366 1367	.vdisplay	= 1280,1368	.vsync_start	= 1280 + 16,1369	.vsync_end	= 1280 + 16 + 6,1370	.vtotal		= 1280 + 16 + 6 + 15,1371 1372	.width_mm	= 135,1373	.height_mm	= 217,1374};1375 1376static const struct drm_display_mode kd050hdfia020_default_mode = {1377	.clock		= 62000,1378 1379	.hdisplay	= 720,1380	.hsync_start	= 720 + 10,1381	.hsync_end	= 720 + 10 + 20,1382	.htotal		= 720 + 10 + 20 + 30,1383 1384	.vdisplay	= 1280,1385	.vsync_start	= 1280 + 10,1386	.vsync_end	= 1280 + 10 + 10,1387	.vtotal		= 1280 + 10 + 10 + 20,1388 1389	.width_mm	= 62,1390	.height_mm	= 110,1391};1392 1393static const struct drm_display_mode tl050hdv35_default_mode = {1394	.clock		= 59400,1395 1396	.hdisplay	= 720,1397	.hsync_start	= 720 + 18,1398	.hsync_end	= 720 + 18 + 3,1399	.htotal		= 720 + 18 + 3 + 20,1400 1401	.vdisplay	= 1280,1402	.vsync_start	= 1280 + 26,1403	.vsync_end	= 1280 + 26 + 6,1404	.vtotal		= 1280 + 26 + 6 + 28,1405 1406	.width_mm	= 62,1407	.height_mm	= 110,1408};1409 1410static const struct drm_display_mode w552946aba_default_mode = {1411	.clock		= 64000,1412 1413	.hdisplay	= 720,1414	.hsync_start	= 720 + 40,1415	.hsync_end	= 720 + 40 + 10,1416	.htotal		= 720 + 40 + 10 + 40,1417 1418	.vdisplay	= 1280,1419	.vsync_start	= 1280 + 22,1420	.vsync_end	= 1280 + 22 + 4,1421	.vtotal		= 1280 + 22 + 4 + 11,1422 1423	.width_mm	= 68,1424	.height_mm	= 121,1425};1426 1427static const struct drm_display_mode am8001280g_default_mode = {1428	.clock		= 67911,1429 1430	.hdisplay	= 800,1431	.hsync_start	= 800 + 20,1432	.hsync_end	= 800 + 20 + 32,1433	.htotal		= 800 + 20 + 32 + 20,1434 1435	.vdisplay	= 1280,1436	.vsync_start	= 1280 + 6,1437	.vsync_end	= 1280 + 6 + 8,1438	.vtotal		= 1280 + 6 + 8 + 4,1439 1440	.width_mm	= 94,1441	.height_mm	= 151,1442};1443 1444static int ili9881c_get_modes(struct drm_panel *panel,1445			      struct drm_connector *connector)1446{1447	struct ili9881c *ctx = panel_to_ili9881c(panel);1448	struct drm_display_mode *mode;1449 1450	mode = drm_mode_duplicate(connector->dev, ctx->desc->mode);1451	if (!mode) {1452		dev_err(&ctx->dsi->dev, "failed to add mode %ux%ux@%u\n",1453			ctx->desc->mode->hdisplay,1454			ctx->desc->mode->vdisplay,1455			drm_mode_vrefresh(ctx->desc->mode));1456		return -ENOMEM;1457	}1458 1459	drm_mode_set_name(mode);1460 1461	mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;1462	drm_mode_probed_add(connector, mode);1463 1464	connector->display_info.width_mm = mode->width_mm;1465	connector->display_info.height_mm = mode->height_mm;1466 1467	/*1468	 * TODO: Remove once all drm drivers call1469	 * drm_connector_set_orientation_from_panel()1470	 */1471	drm_connector_set_panel_orientation(connector, ctx->orientation);1472 1473	return 1;1474}1475 1476static enum drm_panel_orientation ili9881c_get_orientation(struct drm_panel *panel)1477{1478	struct ili9881c *ctx = panel_to_ili9881c(panel);1479 1480	return ctx->orientation;1481}1482 1483static const struct drm_panel_funcs ili9881c_funcs = {1484	.prepare	= ili9881c_prepare,1485	.unprepare	= ili9881c_unprepare,1486	.enable		= ili9881c_enable,1487	.disable	= ili9881c_disable,1488	.get_modes	= ili9881c_get_modes,1489	.get_orientation = ili9881c_get_orientation,1490};1491 1492static int ili9881c_dsi_probe(struct mipi_dsi_device *dsi)1493{1494	struct ili9881c *ctx;1495	int ret;1496 1497	ctx = devm_kzalloc(&dsi->dev, sizeof(*ctx), GFP_KERNEL);1498	if (!ctx)1499		return -ENOMEM;1500	mipi_dsi_set_drvdata(dsi, ctx);1501	ctx->dsi = dsi;1502	ctx->desc = of_device_get_match_data(&dsi->dev);1503 1504	drm_panel_init(&ctx->panel, &dsi->dev, &ili9881c_funcs,1505		       DRM_MODE_CONNECTOR_DSI);1506 1507	ctx->power = devm_regulator_get(&dsi->dev, "power");1508	if (IS_ERR(ctx->power))1509		return dev_err_probe(&dsi->dev, PTR_ERR(ctx->power),1510				     "Couldn't get our power regulator\n");1511 1512	ctx->reset = devm_gpiod_get_optional(&dsi->dev, "reset", GPIOD_OUT_LOW);1513	if (IS_ERR(ctx->reset))1514		return dev_err_probe(&dsi->dev, PTR_ERR(ctx->reset),1515				     "Couldn't get our reset GPIO\n");1516 1517	ret = of_drm_get_panel_orientation(dsi->dev.of_node, &ctx->orientation);1518	if (ret) {1519		dev_err(&dsi->dev, "%pOF: failed to get orientation: %d\n",1520			dsi->dev.of_node, ret);1521		return ret;1522	}1523 1524	ctx->panel.prepare_prev_first = true;1525 1526	ret = drm_panel_of_backlight(&ctx->panel);1527	if (ret)1528		return ret;1529 1530	drm_panel_add(&ctx->panel);1531 1532	dsi->mode_flags = ctx->desc->mode_flags;1533	dsi->format = MIPI_DSI_FMT_RGB888;1534	dsi->lanes = 4;1535 1536	return mipi_dsi_attach(dsi);1537}1538 1539static void ili9881c_dsi_remove(struct mipi_dsi_device *dsi)1540{1541	struct ili9881c *ctx = mipi_dsi_get_drvdata(dsi);1542 1543	mipi_dsi_detach(dsi);1544	drm_panel_remove(&ctx->panel);1545}1546 1547static const struct ili9881c_desc lhr050h41_desc = {1548	.init = lhr050h41_init,1549	.init_length = ARRAY_SIZE(lhr050h41_init),1550	.mode = &lhr050h41_default_mode,1551	.mode_flags = MIPI_DSI_MODE_VIDEO_SYNC_PULSE,1552};1553 1554static const struct ili9881c_desc k101_im2byl02_desc = {1555	.init = k101_im2byl02_init,1556	.init_length = ARRAY_SIZE(k101_im2byl02_init),1557	.mode = &k101_im2byl02_default_mode,1558	.mode_flags = MIPI_DSI_MODE_VIDEO_SYNC_PULSE,1559};1560 1561static const struct ili9881c_desc kd050hdfia020_desc = {1562	.init = kd050hdfia020_init,1563	.init_length = ARRAY_SIZE(kd050hdfia020_init),1564	.mode = &kd050hdfia020_default_mode,1565	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |1566		      MIPI_DSI_MODE_LPM,1567};1568 1569static const struct ili9881c_desc tl050hdv35_desc = {1570	.init = tl050hdv35_init,1571	.init_length = ARRAY_SIZE(tl050hdv35_init),1572	.mode = &tl050hdv35_default_mode,1573	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |1574		      MIPI_DSI_MODE_LPM,1575};1576 1577static const struct ili9881c_desc w552946aba_desc = {1578	.init = w552946ab_init,1579	.init_length = ARRAY_SIZE(w552946ab_init),1580	.mode = &w552946aba_default_mode,1581	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |1582		      MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_NO_EOT_PACKET,1583};1584 1585static const struct ili9881c_desc am8001280g_desc = {1586	.init = am8001280g_init,1587	.init_length = ARRAY_SIZE(am8001280g_init),1588	.mode = &am8001280g_default_mode,1589	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |1590		      MIPI_DSI_CLOCK_NON_CONTINUOUS | MIPI_DSI_MODE_LPM,1591};1592 1593static const struct of_device_id ili9881c_of_match[] = {1594	{ .compatible = "bananapi,lhr050h41", .data = &lhr050h41_desc },1595	{ .compatible = "feixin,k101-im2byl02", .data = &k101_im2byl02_desc },1596	{ .compatible = "startek,kd050hdfia020", .data = &kd050hdfia020_desc },1597	{ .compatible = "tdo,tl050hdv35", .data = &tl050hdv35_desc },1598	{ .compatible = "wanchanglong,w552946aba", .data = &w552946aba_desc },1599	{ .compatible = "ampire,am8001280g", .data = &am8001280g_desc },1600	{ }1601};1602MODULE_DEVICE_TABLE(of, ili9881c_of_match);1603 1604static struct mipi_dsi_driver ili9881c_dsi_driver = {1605	.probe		= ili9881c_dsi_probe,1606	.remove		= ili9881c_dsi_remove,1607	.driver = {1608		.name		= "ili9881c-dsi",1609		.of_match_table	= ili9881c_of_match,1610	},1611};1612module_mipi_dsi_driver(ili9881c_dsi_driver);1613 1614MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com>");1615MODULE_DESCRIPTION("Ilitek ILI9881C Controller Driver");1616MODULE_LICENSE("GPL v2");1617