sunny2405
Posts: 13
Joined: Mon Jun 27, 2022 2:10 pm

LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Mon Jun 27, 2022 2:19 pm

Hi guys
Currentl,y I am doing a project using PI CM4 to communicate with TFT LCD via MIPI DSI. standard
I edited the driver according to the manufacturer's config and rebuilt the kernel, edited the .dts file and the config.txt file
After booting up, seems to have received the screen but everything is still black
I use

Code: Select all

dmesg | grep dsi
  • [1515.595194] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP1 contention error
    [ 1515.595320] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP0 contention error
    [ 1515.595444] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP1 contention error
    [ 1515.611935] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP0 contention error
    [ 1515.612128] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP1 contention error
    [ 1515.612259] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP0 contention error
    [ 1515.612325] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP1 contention error
    [ 1515.612386] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP0 contention error
    [ 1515.612444] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP1 contention error
    [ 1515.612516] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP0 contention error
    [ 1515.612575] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP1 contention error
Please help me, how do I solve it?

6by9
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 13243
Joined: Wed Dec 04, 2013 11:27 am
Location: ZZ9 Plural Z Alpha, aka just outside Cambridge.

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Mon Jun 27, 2022 5:51 pm

sunny2405 wrote:
Mon Jun 27, 2022 2:19 pm
Hi guys
Currentl,y I am doing a project using PI CM4 to communicate with TFT LCD via MIPI DSI. standard
I edited the driver according to the manufacturer's config and rebuilt the kernel, edited the .dts file and the config.txt file
What driver? There isn't just one panel driver for all displays, and getting the device tree configuration correct isn't always obvious either.
sunny2405 wrote:After booting up, seems to have received the screen but everything is still black
I use

Code: Select all

dmesg | grep dsi
  • [1515.595194] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP1 contention error
    [ 1515.595320] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP0 contention error
    [ 1515.595444] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP1 contention error
    [ 1515.611935] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP0 contention error
    [ 1515.612128] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP1 contention error
    [ 1515.612259] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP0 contention error
    [ 1515.612325] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP1 contention error
    [ 1515.612386] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP0 contention error
    [ 1515.612444] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP1 contention error
    [ 1515.612516] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP0 contention error
    [ 1515.612575] [drm:vc4_dsi_irq_handler [vc4]] *ERROR* DSI1: LP1 contention error
Please help me, how do I solve it?
LP contention means that the DSI host interface couldn't drive data lane 0 to the appropriate states for LP signalling. Most likely your panel is still in reset and is pulling the data lane to ground.
Software Engineer at Raspberry Pi Ltd. Views expressed are still personal views.
I'm not interested in doing contracts for bespoke functionality - please don't ask.

sunny2405
Posts: 13
Joined: Mon Jun 27, 2022 2:10 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Tue Jun 28, 2022 4:14 am

Hi @6by9
Thank for your support
I am using the driver ili9881.c and using the company's parameter file
with kernel version: Linux raspberrypi 5.15.49-v7l+ #1 SMP Sat Jun 25 13:50:39 +07 2022 armv7l GNU/Linux

The panel LCD type I'm user

https://www.shtdo.com/Admin/Others/Down ... b18d7ac52b

I have assigned the config values to a format for the nwe080 panel. I'm not a software developer, I'm a hardware engineer.
Driver code: ili9881.c

Code: Select all

// SPDX-License-Identifier: GPL-2.0

/*

 * Copyright (C) 2017-2018, Bootlin

 * Copyright (C) 2021, Henson Li <henson@cutiepi.io>

 * Copyright (C) 2021, Penk Chen <penk@cutiepi.io>

 */



#include <linux/delay.h>

#include <linux/device.h>

#include <linux/err.h>

#include <linux/errno.h>

#include <linux/fb.h>

#include <linux/kernel.h>

#include <linux/module.h>

#include <linux/of_device.h>



#include <linux/gpio/consumer.h>

#include <linux/regulator/consumer.h>



#include <drm/drm_mipi_dsi.h>

#include <drm/drm_modes.h>

#include <drm/drm_panel.h>



#include <video/mipi_display.h>



enum ili9881c_op {

	ILI9881C_SWITCH_PAGE,

	ILI9881C_COMMAND,

};



struct ili9881c_instr {

	enum ili9881c_op	op;



	union arg {

		struct cmd {

			u8	cmd;

			u8	data;

		} cmd;

		u8	page;

	} arg;

};



struct ili9881c_desc {

	const struct ili9881c_instr *init;

	const size_t init_length;

	const struct drm_display_mode *mode;

	const unsigned flags;

};



struct ili9881c {

	struct drm_panel	panel;

	struct mipi_dsi_device	*dsi;

	const struct ili9881c_desc	*desc;



	struct regulator	*power;

	struct gpio_desc	*reset_gpio;

};



#define ILI9881C_SWITCH_PAGE_INSTR(_page)	\

	{					\

		.op = ILI9881C_SWITCH_PAGE,	\

		.arg = {			\

			.page = (_page),	\

		},				\

	}



#define ILI9881C_COMMAND_INSTR(_cmd, _data)		\

	{						\

		.op = ILI9881C_COMMAND,		\

		.arg = {				\

			.cmd = {			\

				.cmd = (_cmd),		\

				.data = (_data),	\

			},				\

		},					\

	}



static const struct ili9881c_instr lhr050h41_init[] = {

	ILI9881C_SWITCH_PAGE_INSTR(3),

	ILI9881C_COMMAND_INSTR(0x01, 0x00),

	ILI9881C_COMMAND_INSTR(0x02, 0x00),

	ILI9881C_COMMAND_INSTR(0x03, 0x73),

	ILI9881C_COMMAND_INSTR(0x04, 0x03),

	ILI9881C_COMMAND_INSTR(0x05, 0x00),

	ILI9881C_COMMAND_INSTR(0x06, 0x06),

	ILI9881C_COMMAND_INSTR(0x07, 0x06),

	ILI9881C_COMMAND_INSTR(0x08, 0x00),

	ILI9881C_COMMAND_INSTR(0x09, 0x18),

	ILI9881C_COMMAND_INSTR(0x0a, 0x04),

	ILI9881C_COMMAND_INSTR(0x0b, 0x00),

	ILI9881C_COMMAND_INSTR(0x0c, 0x02),

	ILI9881C_COMMAND_INSTR(0x0d, 0x03),

	ILI9881C_COMMAND_INSTR(0x0e, 0x00),

	ILI9881C_COMMAND_INSTR(0x0f, 0x25),

	ILI9881C_COMMAND_INSTR(0x10, 0x25),

	ILI9881C_COMMAND_INSTR(0x11, 0x00),

	ILI9881C_COMMAND_INSTR(0x12, 0x00),

	ILI9881C_COMMAND_INSTR(0x13, 0x00),

	ILI9881C_COMMAND_INSTR(0x14, 0x00),

	ILI9881C_COMMAND_INSTR(0x15, 0x00),

	ILI9881C_COMMAND_INSTR(0x16, 0x0C),

	ILI9881C_COMMAND_INSTR(0x17, 0x00),

	ILI9881C_COMMAND_INSTR(0x18, 0x00),

	ILI9881C_COMMAND_INSTR(0x19, 0x00),

	ILI9881C_COMMAND_INSTR(0x1a, 0x00),

	ILI9881C_COMMAND_INSTR(0x1b, 0x00),

	ILI9881C_COMMAND_INSTR(0x1c, 0x00),

	ILI9881C_COMMAND_INSTR(0x1d, 0x00),

	ILI9881C_COMMAND_INSTR(0x1e, 0xC0),

	ILI9881C_COMMAND_INSTR(0x1f, 0x80),

	ILI9881C_COMMAND_INSTR(0x20, 0x04),

	ILI9881C_COMMAND_INSTR(0x21, 0x01),

	ILI9881C_COMMAND_INSTR(0x22, 0x00),

	ILI9881C_COMMAND_INSTR(0x23, 0x00),

	ILI9881C_COMMAND_INSTR(0x24, 0x00),

	ILI9881C_COMMAND_INSTR(0x25, 0x00),

	ILI9881C_COMMAND_INSTR(0x26, 0x00),

	ILI9881C_COMMAND_INSTR(0x27, 0x00),

	ILI9881C_COMMAND_INSTR(0x28, 0x33),

	ILI9881C_COMMAND_INSTR(0x29, 0x03),

	ILI9881C_COMMAND_INSTR(0x2a, 0x00),

	ILI9881C_COMMAND_INSTR(0x2b, 0x00),

	ILI9881C_COMMAND_INSTR(0x2c, 0x00),

	ILI9881C_COMMAND_INSTR(0x2d, 0x00),

	ILI9881C_COMMAND_INSTR(0x2e, 0x00),

	ILI9881C_COMMAND_INSTR(0x2f, 0x00),

	ILI9881C_COMMAND_INSTR(0x30, 0x00),

	ILI9881C_COMMAND_INSTR(0x31, 0x00),

	ILI9881C_COMMAND_INSTR(0x32, 0x00),

	ILI9881C_COMMAND_INSTR(0x33, 0x00),

	ILI9881C_COMMAND_INSTR(0x34, 0x04),

	ILI9881C_COMMAND_INSTR(0x35, 0x00),

	ILI9881C_COMMAND_INSTR(0x36, 0x00),

	ILI9881C_COMMAND_INSTR(0x37, 0x00),

	ILI9881C_COMMAND_INSTR(0x38, 0x3C),

	ILI9881C_COMMAND_INSTR(0x39, 0x00),

	ILI9881C_COMMAND_INSTR(0x3a, 0x00),

	ILI9881C_COMMAND_INSTR(0x3b, 0x00),

	ILI9881C_COMMAND_INSTR(0x3c, 0x00),

	ILI9881C_COMMAND_INSTR(0x3d, 0x00),

	ILI9881C_COMMAND_INSTR(0x3e, 0x00),

	ILI9881C_COMMAND_INSTR(0x3f, 0x00),

	ILI9881C_COMMAND_INSTR(0x40, 0x00),

	ILI9881C_COMMAND_INSTR(0x41, 0x00),

	ILI9881C_COMMAND_INSTR(0x42, 0x00),

	ILI9881C_COMMAND_INSTR(0x43, 0x00),

	ILI9881C_COMMAND_INSTR(0x44, 0x00),

	ILI9881C_COMMAND_INSTR(0x50, 0x01),

	ILI9881C_COMMAND_INSTR(0x51, 0x23),

	ILI9881C_COMMAND_INSTR(0x52, 0x45),

	ILI9881C_COMMAND_INSTR(0x53, 0x67),

	ILI9881C_COMMAND_INSTR(0x54, 0x89),

	ILI9881C_COMMAND_INSTR(0x55, 0xab),

	ILI9881C_COMMAND_INSTR(0x56, 0x01),

	ILI9881C_COMMAND_INSTR(0x57, 0x23),

	ILI9881C_COMMAND_INSTR(0x58, 0x45),

	ILI9881C_COMMAND_INSTR(0x59, 0x67),

	ILI9881C_COMMAND_INSTR(0x5a, 0x89),

	ILI9881C_COMMAND_INSTR(0x5b, 0xab),

	ILI9881C_COMMAND_INSTR(0x5c, 0xcd),

	ILI9881C_COMMAND_INSTR(0x5d, 0xef),

	ILI9881C_COMMAND_INSTR(0x5e, 0x11),

	ILI9881C_COMMAND_INSTR(0x5f, 0x02),

	ILI9881C_COMMAND_INSTR(0x60, 0x02),

	ILI9881C_COMMAND_INSTR(0x61, 0x02),

	ILI9881C_COMMAND_INSTR(0x62, 0x02),

	ILI9881C_COMMAND_INSTR(0x63, 0x02),

	ILI9881C_COMMAND_INSTR(0x64, 0x02),

	ILI9881C_COMMAND_INSTR(0x65, 0x02),

	ILI9881C_COMMAND_INSTR(0x66, 0x02),

	ILI9881C_COMMAND_INSTR(0x67, 0x02),

	ILI9881C_COMMAND_INSTR(0x68, 0x02),

	ILI9881C_COMMAND_INSTR(0x69, 0x02),

	ILI9881C_COMMAND_INSTR(0x6a, 0x0C),

	ILI9881C_COMMAND_INSTR(0x6b, 0x02),

	ILI9881C_COMMAND_INSTR(0x6c, 0x0F),

	ILI9881C_COMMAND_INSTR(0x6d, 0x0E),

	ILI9881C_COMMAND_INSTR(0x6e, 0x0D),

	ILI9881C_COMMAND_INSTR(0x6f, 0x06),

	ILI9881C_COMMAND_INSTR(0x70, 0x07),

	ILI9881C_COMMAND_INSTR(0x71, 0x02),

	ILI9881C_COMMAND_INSTR(0x72, 0x02),

	ILI9881C_COMMAND_INSTR(0x73, 0x02),

	ILI9881C_COMMAND_INSTR(0x74, 0x02),

	ILI9881C_COMMAND_INSTR(0x75, 0x02),

	ILI9881C_COMMAND_INSTR(0x76, 0x02),

	ILI9881C_COMMAND_INSTR(0x77, 0x02),

	ILI9881C_COMMAND_INSTR(0x78, 0x02),

	ILI9881C_COMMAND_INSTR(0x79, 0x02),

	ILI9881C_COMMAND_INSTR(0x7a, 0x02),

	ILI9881C_COMMAND_INSTR(0x7b, 0x02),

	ILI9881C_COMMAND_INSTR(0x7c, 0x02),

	ILI9881C_COMMAND_INSTR(0x7d, 0x02),

	ILI9881C_COMMAND_INSTR(0x7e, 0x02),

	ILI9881C_COMMAND_INSTR(0x7f, 0x02),

	ILI9881C_COMMAND_INSTR(0x80, 0x0C),

	ILI9881C_COMMAND_INSTR(0x81, 0x02),

	ILI9881C_COMMAND_INSTR(0x82, 0x0F),

	ILI9881C_COMMAND_INSTR(0x83, 0x0E),

	ILI9881C_COMMAND_INSTR(0x84, 0x0D),

	ILI9881C_COMMAND_INSTR(0x85, 0x06),

	ILI9881C_COMMAND_INSTR(0x86, 0x07),

	ILI9881C_COMMAND_INSTR(0x87, 0x02),

	ILI9881C_COMMAND_INSTR(0x88, 0x02),

	ILI9881C_COMMAND_INSTR(0x89, 0x02),

	ILI9881C_COMMAND_INSTR(0x8A, 0x02),

	ILI9881C_SWITCH_PAGE_INSTR(4),

	ILI9881C_COMMAND_INSTR(0x6C, 0x15),

	ILI9881C_COMMAND_INSTR(0x6E, 0x22),

	ILI9881C_COMMAND_INSTR(0x6F, 0x33),

	ILI9881C_COMMAND_INSTR(0x3A, 0xA4),

	ILI9881C_COMMAND_INSTR(0x8D, 0x0D),

	ILI9881C_COMMAND_INSTR(0x87, 0xBA),

	ILI9881C_COMMAND_INSTR(0x26, 0x76),

	ILI9881C_COMMAND_INSTR(0xB2, 0xD1),

	ILI9881C_SWITCH_PAGE_INSTR(1),

	ILI9881C_COMMAND_INSTR(0x22, 0x0A),

	ILI9881C_COMMAND_INSTR(0x53, 0xDC),

	ILI9881C_COMMAND_INSTR(0x55, 0xA7),

	ILI9881C_COMMAND_INSTR(0x50, 0x78),

	ILI9881C_COMMAND_INSTR(0x51, 0x78),

	ILI9881C_COMMAND_INSTR(0x31, 0x02),

	ILI9881C_COMMAND_INSTR(0x60, 0x14),

	ILI9881C_COMMAND_INSTR(0xA0, 0x2A),

	ILI9881C_COMMAND_INSTR(0xA1, 0x39),

	ILI9881C_COMMAND_INSTR(0xA2, 0x46),

	ILI9881C_COMMAND_INSTR(0xA3, 0x0e),

	ILI9881C_COMMAND_INSTR(0xA4, 0x12),

	ILI9881C_COMMAND_INSTR(0xA5, 0x25),

	ILI9881C_COMMAND_INSTR(0xA6, 0x19),

	ILI9881C_COMMAND_INSTR(0xA7, 0x1d),

	ILI9881C_COMMAND_INSTR(0xA8, 0xa6),

	ILI9881C_COMMAND_INSTR(0xA9, 0x1C),

	ILI9881C_COMMAND_INSTR(0xAA, 0x29),

	ILI9881C_COMMAND_INSTR(0xAB, 0x85),

	ILI9881C_COMMAND_INSTR(0xAC, 0x1C),

	ILI9881C_COMMAND_INSTR(0xAD, 0x1B),

	ILI9881C_COMMAND_INSTR(0xAE, 0x51),

	ILI9881C_COMMAND_INSTR(0xAF, 0x22),

	ILI9881C_COMMAND_INSTR(0xB0, 0x2d),

	ILI9881C_COMMAND_INSTR(0xB1, 0x4f),

	ILI9881C_COMMAND_INSTR(0xB2, 0x59),

	ILI9881C_COMMAND_INSTR(0xB3, 0x3F),

	ILI9881C_COMMAND_INSTR(0xC0, 0x2A),

	ILI9881C_COMMAND_INSTR(0xC1, 0x3a),

	ILI9881C_COMMAND_INSTR(0xC2, 0x45),

	ILI9881C_COMMAND_INSTR(0xC3, 0x0e),

	ILI9881C_COMMAND_INSTR(0xC4, 0x11),

	ILI9881C_COMMAND_INSTR(0xC5, 0x24),

	ILI9881C_COMMAND_INSTR(0xC6, 0x1a),

	ILI9881C_COMMAND_INSTR(0xC7, 0x1c),

	ILI9881C_COMMAND_INSTR(0xC8, 0xaa),

	ILI9881C_COMMAND_INSTR(0xC9, 0x1C),

	ILI9881C_COMMAND_INSTR(0xCA, 0x29),

	ILI9881C_COMMAND_INSTR(0xCB, 0x96),

	ILI9881C_COMMAND_INSTR(0xCC, 0x1C),

	ILI9881C_COMMAND_INSTR(0xCD, 0x1B),

	ILI9881C_COMMAND_INSTR(0xCE, 0x51),

	ILI9881C_COMMAND_INSTR(0xCF, 0x22),

	ILI9881C_COMMAND_INSTR(0xD0, 0x2b),

	ILI9881C_COMMAND_INSTR(0xD1, 0x4b),

	ILI9881C_COMMAND_INSTR(0xD2, 0x59),

	ILI9881C_COMMAND_INSTR(0xD3, 0x3F),

};



static const struct ili9881c_instr k101_im2byl02_init[] = {

	ILI9881C_SWITCH_PAGE_INSTR(3),

	ILI9881C_COMMAND_INSTR(0x01, 0x00),

	ILI9881C_COMMAND_INSTR(0x02, 0x00),

	ILI9881C_COMMAND_INSTR(0x03, 0x73),

	ILI9881C_COMMAND_INSTR(0x04, 0x00),

	ILI9881C_COMMAND_INSTR(0x05, 0x00),

	ILI9881C_COMMAND_INSTR(0x06, 0x08),

	ILI9881C_COMMAND_INSTR(0x07, 0x00),

	ILI9881C_COMMAND_INSTR(0x08, 0x00),

	ILI9881C_COMMAND_INSTR(0x09, 0x00),

	ILI9881C_COMMAND_INSTR(0x0A, 0x01),

	ILI9881C_COMMAND_INSTR(0x0B, 0x01),

	ILI9881C_COMMAND_INSTR(0x0C, 0x00),

	ILI9881C_COMMAND_INSTR(0x0D, 0x01),

	ILI9881C_COMMAND_INSTR(0x0E, 0x01),

	ILI9881C_COMMAND_INSTR(0x0F, 0x00),

	ILI9881C_COMMAND_INSTR(0x10, 0x00),

	ILI9881C_COMMAND_INSTR(0x11, 0x00),

	ILI9881C_COMMAND_INSTR(0x12, 0x00),

	ILI9881C_COMMAND_INSTR(0x13, 0x00),

	ILI9881C_COMMAND_INSTR(0x14, 0x00),

	ILI9881C_COMMAND_INSTR(0x15, 0x00),

	ILI9881C_COMMAND_INSTR(0x16, 0x00),

	ILI9881C_COMMAND_INSTR(0x17, 0x00),

	ILI9881C_COMMAND_INSTR(0x18, 0x00),

	ILI9881C_COMMAND_INSTR(0x19, 0x00),

	ILI9881C_COMMAND_INSTR(0x1A, 0x00),

	ILI9881C_COMMAND_INSTR(0x1B, 0x00),

	ILI9881C_COMMAND_INSTR(0x1C, 0x00),

	ILI9881C_COMMAND_INSTR(0x1D, 0x00),

	ILI9881C_COMMAND_INSTR(0x1E, 0x40),

	ILI9881C_COMMAND_INSTR(0x1F, 0xC0),

	ILI9881C_COMMAND_INSTR(0x20, 0x06),

	ILI9881C_COMMAND_INSTR(0x21, 0x01),

	ILI9881C_COMMAND_INSTR(0x22, 0x06),

	ILI9881C_COMMAND_INSTR(0x23, 0x01),

	ILI9881C_COMMAND_INSTR(0x24, 0x88),

	ILI9881C_COMMAND_INSTR(0x25, 0x88),

	ILI9881C_COMMAND_INSTR(0x26, 0x00),

	ILI9881C_COMMAND_INSTR(0x27, 0x00),

	ILI9881C_COMMAND_INSTR(0x28, 0x3B),

	ILI9881C_COMMAND_INSTR(0x29, 0x03),

	ILI9881C_COMMAND_INSTR(0x2A, 0x00),

	ILI9881C_COMMAND_INSTR(0x2B, 0x00),

	ILI9881C_COMMAND_INSTR(0x2C, 0x00),

	ILI9881C_COMMAND_INSTR(0x2D, 0x00),

	ILI9881C_COMMAND_INSTR(0x2E, 0x00),

	ILI9881C_COMMAND_INSTR(0x2F, 0x00),

	ILI9881C_COMMAND_INSTR(0x30, 0x00),

	ILI9881C_COMMAND_INSTR(0x31, 0x00),

	ILI9881C_COMMAND_INSTR(0x32, 0x00),

	ILI9881C_COMMAND_INSTR(0x33, 0x00),

	ILI9881C_COMMAND_INSTR(0x34, 0x00), /* GPWR1/2 non overlap time 2.62us */

	ILI9881C_COMMAND_INSTR(0x35, 0x00),

	ILI9881C_COMMAND_INSTR(0x36, 0x00),

	ILI9881C_COMMAND_INSTR(0x37, 0x00),

	ILI9881C_COMMAND_INSTR(0x38, 0x00),

	ILI9881C_COMMAND_INSTR(0x39, 0x00),

	ILI9881C_COMMAND_INSTR(0x3A, 0x00),

	ILI9881C_COMMAND_INSTR(0x3B, 0x00),

	ILI9881C_COMMAND_INSTR(0x3C, 0x00),

	ILI9881C_COMMAND_INSTR(0x3D, 0x00),

	ILI9881C_COMMAND_INSTR(0x3E, 0x00),

	ILI9881C_COMMAND_INSTR(0x3F, 0x00),

	ILI9881C_COMMAND_INSTR(0x40, 0x00),

	ILI9881C_COMMAND_INSTR(0x41, 0x00),

	ILI9881C_COMMAND_INSTR(0x42, 0x00),

	ILI9881C_COMMAND_INSTR(0x43, 0x00),

	ILI9881C_COMMAND_INSTR(0x44, 0x00),

	ILI9881C_COMMAND_INSTR(0x50, 0x01),

	ILI9881C_COMMAND_INSTR(0x51, 0x23),

	ILI9881C_COMMAND_INSTR(0x52, 0x45),

	ILI9881C_COMMAND_INSTR(0x53, 0x67),

	ILI9881C_COMMAND_INSTR(0x54, 0x89),

	ILI9881C_COMMAND_INSTR(0x55, 0xAB),

	ILI9881C_COMMAND_INSTR(0x56, 0x01),

	ILI9881C_COMMAND_INSTR(0x57, 0x23),

	ILI9881C_COMMAND_INSTR(0x58, 0x45),

	ILI9881C_COMMAND_INSTR(0x59, 0x67),

	ILI9881C_COMMAND_INSTR(0x5A, 0x89),

	ILI9881C_COMMAND_INSTR(0x5B, 0xAB),

	ILI9881C_COMMAND_INSTR(0x5C, 0xCD),

	ILI9881C_COMMAND_INSTR(0x5D, 0xEF),

	ILI9881C_COMMAND_INSTR(0x5E, 0x00),

	ILI9881C_COMMAND_INSTR(0x5F, 0x01),

	ILI9881C_COMMAND_INSTR(0x60, 0x01),

	ILI9881C_COMMAND_INSTR(0x61, 0x06),

	ILI9881C_COMMAND_INSTR(0x62, 0x06),

	ILI9881C_COMMAND_INSTR(0x63, 0x07),

	ILI9881C_COMMAND_INSTR(0x64, 0x07),

	ILI9881C_COMMAND_INSTR(0x65, 0x00),

	ILI9881C_COMMAND_INSTR(0x66, 0x00),

	ILI9881C_COMMAND_INSTR(0x67, 0x02),

	ILI9881C_COMMAND_INSTR(0x68, 0x02),

	ILI9881C_COMMAND_INSTR(0x69, 0x05),

	ILI9881C_COMMAND_INSTR(0x6A, 0x05),

	ILI9881C_COMMAND_INSTR(0x6B, 0x02),

	ILI9881C_COMMAND_INSTR(0x6C, 0x0D),

	ILI9881C_COMMAND_INSTR(0x6D, 0x0D),

	ILI9881C_COMMAND_INSTR(0x6E, 0x0C),

	ILI9881C_COMMAND_INSTR(0x6F, 0x0C),

	ILI9881C_COMMAND_INSTR(0x70, 0x0F),

	ILI9881C_COMMAND_INSTR(0x71, 0x0F),

	ILI9881C_COMMAND_INSTR(0x72, 0x0E),

	ILI9881C_COMMAND_INSTR(0x73, 0x0E),

	ILI9881C_COMMAND_INSTR(0x74, 0x02),

	ILI9881C_COMMAND_INSTR(0x75, 0x01),

	ILI9881C_COMMAND_INSTR(0x76, 0x01),

	ILI9881C_COMMAND_INSTR(0x77, 0x06),

	ILI9881C_COMMAND_INSTR(0x78, 0x06),

	ILI9881C_COMMAND_INSTR(0x79, 0x07),

	ILI9881C_COMMAND_INSTR(0x7A, 0x07),

	ILI9881C_COMMAND_INSTR(0x7B, 0x00),

	ILI9881C_COMMAND_INSTR(0x7C, 0x00),

	ILI9881C_COMMAND_INSTR(0x7D, 0x02),

	ILI9881C_COMMAND_INSTR(0x7E, 0x02),

	ILI9881C_COMMAND_INSTR(0x7F, 0x05),

	ILI9881C_COMMAND_INSTR(0x80, 0x05),

	ILI9881C_COMMAND_INSTR(0x81, 0x02),

	ILI9881C_COMMAND_INSTR(0x82, 0x0D),

	ILI9881C_COMMAND_INSTR(0x83, 0x0D),

	ILI9881C_COMMAND_INSTR(0x84, 0x0C),

	ILI9881C_COMMAND_INSTR(0x85, 0x0C),

	ILI9881C_COMMAND_INSTR(0x86, 0x0F),

	ILI9881C_COMMAND_INSTR(0x87, 0x0F),

	ILI9881C_COMMAND_INSTR(0x88, 0x0E),

	ILI9881C_COMMAND_INSTR(0x89, 0x0E),

	ILI9881C_COMMAND_INSTR(0x8A, 0x02),

	ILI9881C_SWITCH_PAGE_INSTR(4),

	ILI9881C_COMMAND_INSTR(0x3B, 0xC0), /* ILI4003D sel */

	ILI9881C_COMMAND_INSTR(0x6C, 0x15), /* Set VCORE voltage = 1.5V */

	ILI9881C_COMMAND_INSTR(0x6E, 0x2A), /* di_pwr_reg=0 for power mode 2A, VGH clamp 18V */

	ILI9881C_COMMAND_INSTR(0x6F, 0x33), /* pumping ratio VGH=5x VGL=-3x */

	ILI9881C_COMMAND_INSTR(0x8D, 0x1B), /* VGL clamp -10V */

	ILI9881C_COMMAND_INSTR(0x87, 0xBA), /* ESD */

	ILI9881C_COMMAND_INSTR(0x3A, 0x24), /* POWER SAVING */

	ILI9881C_COMMAND_INSTR(0x26, 0x76),

	ILI9881C_COMMAND_INSTR(0xB2, 0xD1),

	ILI9881C_SWITCH_PAGE_INSTR(1),

	ILI9881C_COMMAND_INSTR(0x22, 0x0A), /* BGR, SS */

	ILI9881C_COMMAND_INSTR(0x31, 0x00), /* Zigzag type3 inversion */

	ILI9881C_COMMAND_INSTR(0x40, 0x53), /* ILI4003D sel */

	ILI9881C_COMMAND_INSTR(0x43, 0x66),

	ILI9881C_COMMAND_INSTR(0x53, 0x4C),

	ILI9881C_COMMAND_INSTR(0x50, 0x87),

	ILI9881C_COMMAND_INSTR(0x51, 0x82),

	ILI9881C_COMMAND_INSTR(0x60, 0x15),

	ILI9881C_COMMAND_INSTR(0x61, 0x01),

	ILI9881C_COMMAND_INSTR(0x62, 0x0C),

	ILI9881C_COMMAND_INSTR(0x63, 0x00),

	ILI9881C_COMMAND_INSTR(0xA0, 0x00),

	ILI9881C_COMMAND_INSTR(0xA1, 0x13), /* VP251 */

	ILI9881C_COMMAND_INSTR(0xA2, 0x23), /* VP247 */

	ILI9881C_COMMAND_INSTR(0xA3, 0x14), /* VP243 */

	ILI9881C_COMMAND_INSTR(0xA4, 0x16), /* VP239 */

	ILI9881C_COMMAND_INSTR(0xA5, 0x29), /* VP231 */

	ILI9881C_COMMAND_INSTR(0xA6, 0x1E), /* VP219 */

	ILI9881C_COMMAND_INSTR(0xA7, 0x1D), /* VP203 */

	ILI9881C_COMMAND_INSTR(0xA8, 0x86), /* VP175 */

	ILI9881C_COMMAND_INSTR(0xA9, 0x1E), /* VP144 */

	ILI9881C_COMMAND_INSTR(0xAA, 0x29), /* VP111 */

	ILI9881C_COMMAND_INSTR(0xAB, 0x74), /* VP80 */

	ILI9881C_COMMAND_INSTR(0xAC, 0x19), /* VP52 */

	ILI9881C_COMMAND_INSTR(0xAD, 0x17), /* VP36 */

	ILI9881C_COMMAND_INSTR(0xAE, 0x4B), /* VP24 */

	ILI9881C_COMMAND_INSTR(0xAF, 0x20), /* VP16 */

	ILI9881C_COMMAND_INSTR(0xB0, 0x26), /* VP12 */

	ILI9881C_COMMAND_INSTR(0xB1, 0x4C), /* VP8 */

	ILI9881C_COMMAND_INSTR(0xB2, 0x5D), /* VP4 */

	ILI9881C_COMMAND_INSTR(0xB3, 0x3F), /* VP0 */

	ILI9881C_COMMAND_INSTR(0xC0, 0x00), /* VN255 GAMMA N */

	ILI9881C_COMMAND_INSTR(0xC1, 0x13), /* VN251 */

	ILI9881C_COMMAND_INSTR(0xC2, 0x23), /* VN247 */

	ILI9881C_COMMAND_INSTR(0xC3, 0x14), /* VN243 */

	ILI9881C_COMMAND_INSTR(0xC4, 0x16), /* VN239 */

	ILI9881C_COMMAND_INSTR(0xC5, 0x29), /* VN231 */

	ILI9881C_COMMAND_INSTR(0xC6, 0x1E), /* VN219 */

	ILI9881C_COMMAND_INSTR(0xC7, 0x1D), /* VN203 */

	ILI9881C_COMMAND_INSTR(0xC8, 0x86), /* VN175 */

	ILI9881C_COMMAND_INSTR(0xC9, 0x1E), /* VN144 */

	ILI9881C_COMMAND_INSTR(0xCA, 0x29), /* VN111 */

	ILI9881C_COMMAND_INSTR(0xCB, 0x74), /* VN80 */

	ILI9881C_COMMAND_INSTR(0xCC, 0x19), /* VN52 */

	ILI9881C_COMMAND_INSTR(0xCD, 0x17), /* VN36 */

	ILI9881C_COMMAND_INSTR(0xCE, 0x4B), /* VN24 */

	ILI9881C_COMMAND_INSTR(0xCF, 0x20), /* VN16 */

	ILI9881C_COMMAND_INSTR(0xD0, 0x26), /* VN12 */

	ILI9881C_COMMAND_INSTR(0xD1, 0x4C), /* VN8 */

	ILI9881C_COMMAND_INSTR(0xD2, 0x5D), /* VN4 */

	ILI9881C_COMMAND_INSTR(0xD3, 0x3F), /* VN0 */

};



static const struct ili9881c_instr nwe080_init[] = {

	ILI9881C_SWITCH_PAGE_INSTR(3),//PAGE3

	ILI9881C_COMMAND_INSTR(0x01,0x00),

	ILI9881C_COMMAND_INSTR(0x02,0x00),

	ILI9881C_COMMAND_INSTR(0x03,0x53),    

	ILI9881C_COMMAND_INSTR(0x04,0x53),    

	ILI9881C_COMMAND_INSTR(0x05,0x13),

	ILI9881C_COMMAND_INSTR(0x06,0x04),

	ILI9881C_COMMAND_INSTR(0x07,0x02),

	ILI9881C_COMMAND_INSTR(0x08,0x02),

	ILI9881C_COMMAND_INSTR(0x09,0x00),

	ILI9881C_COMMAND_INSTR(0x0a,0x00),

	ILI9881C_COMMAND_INSTR(0x0b,0x00),

	ILI9881C_COMMAND_INSTR(0x0c,0x00),

	ILI9881C_COMMAND_INSTR(0x0d,0x00),

	ILI9881C_COMMAND_INSTR(0x0e,0x00),

	ILI9881C_COMMAND_INSTR(0x0f,0x00),

	ILI9881C_COMMAND_INSTR(0x10,0x00),

	ILI9881C_COMMAND_INSTR(0x11,0x00),

	ILI9881C_COMMAND_INSTR(0x12,0x00),

	ILI9881C_COMMAND_INSTR(0x13,0x00),

	ILI9881C_COMMAND_INSTR(0x14,0x00),

	ILI9881C_COMMAND_INSTR(0x15,0x00),

	ILI9881C_COMMAND_INSTR(0x16,0x00),

	ILI9881C_COMMAND_INSTR(0x17,0x00),

	ILI9881C_COMMAND_INSTR(0x18,0x00),

	ILI9881C_COMMAND_INSTR(0x19,0x00),

	ILI9881C_COMMAND_INSTR(0x1a,0x00),

	ILI9881C_COMMAND_INSTR(0x1b,0x00),

	ILI9881C_COMMAND_INSTR(0x1c,0x00),

	ILI9881C_COMMAND_INSTR(0x1d,0x00),

	ILI9881C_COMMAND_INSTR(0x1e,0xc0),

	ILI9881C_COMMAND_INSTR(0x1f,0x00),

	ILI9881C_COMMAND_INSTR(0x20,0x02),

	ILI9881C_COMMAND_INSTR(0x21,0x09),

	ILI9881C_COMMAND_INSTR(0x22,0x00),

	ILI9881C_COMMAND_INSTR(0x23,0x00),

	ILI9881C_COMMAND_INSTR(0x24,0x00),

	ILI9881C_COMMAND_INSTR(0x25,0x00),

	ILI9881C_COMMAND_INSTR(0x26,0x00),

	ILI9881C_COMMAND_INSTR(0x27,0x00),

	ILI9881C_COMMAND_INSTR(0x28,0x55),

	ILI9881C_COMMAND_INSTR(0x29,0x03),

	ILI9881C_COMMAND_INSTR(0x2a,0x00),

	ILI9881C_COMMAND_INSTR(0x2b,0x00),

	ILI9881C_COMMAND_INSTR(0x2c,0x00),

	ILI9881C_COMMAND_INSTR(0x2d,0x00),

	ILI9881C_COMMAND_INSTR(0x2e,0x00),

	ILI9881C_COMMAND_INSTR(0x2f,0x00),

	ILI9881C_COMMAND_INSTR(0x30,0x00),

	ILI9881C_COMMAND_INSTR(0x31,0x00),

	ILI9881C_COMMAND_INSTR(0x32,0x00),

	ILI9881C_COMMAND_INSTR(0x33,0x00),

	ILI9881C_COMMAND_INSTR(0x34,0x00),

	ILI9881C_COMMAND_INSTR(0x35,0x00),

	ILI9881C_COMMAND_INSTR(0x36,0x00),

	ILI9881C_COMMAND_INSTR(0x37,0x00),

	ILI9881C_COMMAND_INSTR(0x38,0x3C),

	ILI9881C_COMMAND_INSTR(0x39,0x00),

	ILI9881C_COMMAND_INSTR(0x3a,0x00),

	ILI9881C_COMMAND_INSTR(0x3b,0x00),

	ILI9881C_COMMAND_INSTR(0x3c,0x00),

	ILI9881C_COMMAND_INSTR(0x3d,0x00),

	ILI9881C_COMMAND_INSTR(0x3e,0x00),

	ILI9881C_COMMAND_INSTR(0x3f,0x00),

	ILI9881C_COMMAND_INSTR(0x40,0x00),

	ILI9881C_COMMAND_INSTR(0x41,0x00),

	ILI9881C_COMMAND_INSTR(0x42,0x00),

	ILI9881C_COMMAND_INSTR(0x43,0x00),

	ILI9881C_COMMAND_INSTR(0x44,0x00),

	ILI9881C_COMMAND_INSTR(0x45,0x00),



	ILI9881C_COMMAND_INSTR(0x50,0x01),

	ILI9881C_COMMAND_INSTR(0x51,0x23),

	ILI9881C_COMMAND_INSTR(0x52,0x45),

	ILI9881C_COMMAND_INSTR(0x53,0x67),

	ILI9881C_COMMAND_INSTR(0x54,0x89),

	ILI9881C_COMMAND_INSTR(0x55,0xab),

	ILI9881C_COMMAND_INSTR(0x56,0x01),

	ILI9881C_COMMAND_INSTR(0x57,0x23),

	ILI9881C_COMMAND_INSTR(0x58,0x45),

	ILI9881C_COMMAND_INSTR(0x59,0x67),

	ILI9881C_COMMAND_INSTR(0x5a,0x89),

	ILI9881C_COMMAND_INSTR(0x5b,0xab),

	ILI9881C_COMMAND_INSTR(0x5c,0xcd),

	ILI9881C_COMMAND_INSTR(0x5d,0xef),

	ILI9881C_COMMAND_INSTR(0x5e,0x01),

	ILI9881C_COMMAND_INSTR(0x5f,0x0A),     //FW_CGOUT_L[1] RESE_ODD

	ILI9881C_COMMAND_INSTR(0x60,0x02),     //FW_CGOUT_L[2] VSSG_ODD

	ILI9881C_COMMAND_INSTR(0x61,0x02),     //FW_CGOUT_L[3] VSSG_ODD

	ILI9881C_COMMAND_INSTR(0x62,0x08),     //FW_CGOUT_L[4] STV2_ODD

	ILI9881C_COMMAND_INSTR(0x63,0x15),     //FW_CGOUT_L[5] VDD2_ODD

	ILI9881C_COMMAND_INSTR(0x64,0x14),     //FW_CGOUT_L[6] VDD1_ODD

	ILI9881C_COMMAND_INSTR(0x65,0x02),     //FW_CGOUT_L[7]

	ILI9881C_COMMAND_INSTR(0x66,0x11),     //FW_CGOUT_L[8] CK11

	ILI9881C_COMMAND_INSTR(0x67,0x10),     //FW_CGOUT_L[9] CK9

	ILI9881C_COMMAND_INSTR(0x68,0x02),     //FW_CGOUT_L[10]

	ILI9881C_COMMAND_INSTR(0x69,0x0F),     //FW_CGOUT_L[11] CK7

	ILI9881C_COMMAND_INSTR(0x6a,0x0E),     //FW_CGOUT_L[12] CK5

	ILI9881C_COMMAND_INSTR(0x6b,0x02),     //FW_CGOUT_L[13]   

	ILI9881C_COMMAND_INSTR(0x6c,0x0D),     //FW_CGOUT_L[14] CK3  

	ILI9881C_COMMAND_INSTR(0x6d,0x0C),     //FW_CGOUT_L[15] CK1  

	ILI9881C_COMMAND_INSTR(0x6e,0x06),     //FW_CGOUT_L[16] STV1_ODD  

	ILI9881C_COMMAND_INSTR(0x6f,0x02),     //FW_CGOUT_L[17]   

	ILI9881C_COMMAND_INSTR(0x70,0x02),     //FW_CGOUT_L[18]   

	ILI9881C_COMMAND_INSTR(0x71,0x02),     //FW_CGOUT_L[19]   

	ILI9881C_COMMAND_INSTR(0x72,0x02),     //FW_CGOUT_L[20]   

	ILI9881C_COMMAND_INSTR(0x73,0x02),     //FW_CGOUT_L[21]   

	ILI9881C_COMMAND_INSTR(0x74,0x02),     //FW_CGOUT_L[22] 

	ILI9881C_COMMAND_INSTR(0x75,0x0A),     //BW_CGOUT_L[1]   RESE_ODD 

	ILI9881C_COMMAND_INSTR(0x76,0x02),     //BW_CGOUT_L[2]   VSSG_ODD 

	ILI9881C_COMMAND_INSTR(0x77,0x02),     //BW_CGOUT_L[3]   VSSG_ODD  

	ILI9881C_COMMAND_INSTR(0x78,0x06),     //BW_CGOUT_L[4]   STV2_ODD 

	ILI9881C_COMMAND_INSTR(0x79,0x15),     //BW_CGOUT_L[5]   VDD2_ODD 

	ILI9881C_COMMAND_INSTR(0x7a,0x14),     //BW_CGOUT_L[6]   VDD1_ODD 

	ILI9881C_COMMAND_INSTR(0x7b,0x02),     //BW_CGOUT_L[7]    

	ILI9881C_COMMAND_INSTR(0x7c,0x10),     //BW_CGOUT_L[8]   CK11 

	ILI9881C_COMMAND_INSTR(0x7d,0x11),     //BW_CGOUT_L[9]   CK9 

	ILI9881C_COMMAND_INSTR(0x7e,0x02),     //BW_CGOUT_L[10]   

	ILI9881C_COMMAND_INSTR(0x7f,0x0C),     //BW_CGOUT_L[11]  CK7

	ILI9881C_COMMAND_INSTR(0x80,0x0D),     //BW_CGOUT_L[12]  CK5 

	ILI9881C_COMMAND_INSTR(0x81,0x02),     //BW_CGOUT_L[13]   

	ILI9881C_COMMAND_INSTR(0x82,0x0E),     //BW_CGOUT_L[14]  CK3 

	ILI9881C_COMMAND_INSTR(0x83,0x0F),     //BW_CGOUT_L[15]  CK1 

	ILI9881C_COMMAND_INSTR(0x84,0x08),    //BW_CGOUT_L[16]  STV1_ODD 

	ILI9881C_COMMAND_INSTR(0x85,0x02),     //BW_CGOUT_L[17]   

	ILI9881C_COMMAND_INSTR(0x86,0x02),     //BW_CGOUT_L[18]   

	ILI9881C_COMMAND_INSTR(0x87,0x02),     //BW_CGOUT_L[19]   

	ILI9881C_COMMAND_INSTR(0x88,0x02),     //BW_CGOUT_L[20]   

	ILI9881C_COMMAND_INSTR(0x89,0x02),     //BW_CGOUT_L[21]   

	ILI9881C_COMMAND_INSTR(0x8A,0x02),     //BW_CGOUT_L[22]   



	ILI9881C_SWITCH_PAGE_INSTR(4),//PAGE4

	ILI9881C_COMMAND_INSTR(0x3B,0xC0),     // 4003 sel 

	ILI9881C_COMMAND_INSTR(0x6C,0x15),

	ILI9881C_COMMAND_INSTR(0x6E,0x30),     //VGH 16V

	ILI9881C_COMMAND_INSTR(0x6F,0x55),     //Pump ratio VGH=VSPX4 VGL=VSNX4

	ILI9881C_COMMAND_INSTR(0x3A,0x24),

	ILI9881C_COMMAND_INSTR(0x8D,0x1F),

	ILI9881C_COMMAND_INSTR(0x87,0xBA),

	ILI9881C_COMMAND_INSTR(0x26,0x76),

	ILI9881C_COMMAND_INSTR(0xB2,0xD1),

	ILI9881C_COMMAND_INSTR(0xB5,0x07),

	ILI9881C_COMMAND_INSTR(0x35,0x1F),

	ILI9881C_COMMAND_INSTR(0x88,0x0B),

	ILI9881C_COMMAND_INSTR(0x21,0x30),



	ILI9881C_SWITCH_PAGE_INSTR(1),//PAGE1

	ILI9881C_COMMAND_INSTR(0x22,0x0A),

	ILI9881C_COMMAND_INSTR(0x31,0x09),

	ILI9881C_COMMAND_INSTR(0x40,0x53),

	ILI9881C_COMMAND_INSTR(0x53,0x37),

	ILI9881C_COMMAND_INSTR(0x55,0x88),

	ILI9881C_COMMAND_INSTR(0x50,0x95),

	ILI9881C_COMMAND_INSTR(0x51,0x95),

	ILI9881C_COMMAND_INSTR(0x60,0x30),



	ILI9881C_SWITCH_PAGE_INSTR(0),//PAGE0

	ILI9881C_COMMAND_INSTR(0x11, 0x00),

	ILI9881C_COMMAND_INSTR(0x29, 0x00),

	ILI9881C_COMMAND_INSTR(0x35, 0x00),

};



static inline struct ili9881c *panel_to_ili9881c(struct drm_panel *panel)

{

	return container_of(panel, struct ili9881c, panel);

}



/*

 * The panel seems to accept some private DCS commands that map

 * directly to registers.

 *

 * It is organised by page, with each page having its own set of

 * registers, and the first page looks like it's holding the standard

 * DCS commands.

 *

 * So before any attempt at sending a command or data, we have to be

 * sure if we're in the right page or not.

 */

static int ili9881c_switch_page(struct ili9881c *ctx, u8 page)

{

	u8 buf[4] = { 0xff, 0x98, 0x81, page };

	int ret;



	ret = mipi_dsi_dcs_write_buffer(ctx->dsi, buf, sizeof(buf));

	if (ret < 0)

		return ret;



	return 0;

}



static int ili9881c_send_cmd_data(struct ili9881c *ctx, u8 cmd, u8 data)

{

	u8 buf[2] = { cmd, data };

	int ret;



	ret = mipi_dsi_dcs_write_buffer(ctx->dsi, buf, sizeof(buf));

	if (ret < 0)

		return ret;



	return 0;

}



static int ili9881c_prepare(struct drm_panel *panel)

{

	struct ili9881c *ctx = panel_to_ili9881c(panel);

	unsigned int i;

	int ret;



	/* Power the panel */

	ret = regulator_enable(ctx->power);

	if (ret)

		return ret;

	msleep(5);



	/* And reset_gpio it */

	gpiod_set_value(ctx->reset_gpio, 1);

	msleep(20);



	gpiod_set_value(ctx->reset_gpio, 0);

	msleep(100);

	

	gpiod_set_value(ctx->reset_gpio, 1);

	msleep(20);



	for (i = 0; i < ctx->desc->init_length; i++) {

		const struct ili9881c_instr *instr = &ctx->desc->init[i];



		if (instr->op == ILI9881C_SWITCH_PAGE)

			ret = ili9881c_switch_page(ctx, instr->arg.page);

		else if (instr->op == ILI9881C_COMMAND)

			ret = ili9881c_send_cmd_data(ctx, instr->arg.cmd.cmd,

						      instr->arg.cmd.data);



		if (ret)

			return ret;

	}



	ret = ili9881c_switch_page(ctx, 0);

	if (ret)

		return ret;



	ret = mipi_dsi_dcs_set_tear_on(ctx->dsi, MIPI_DSI_DCS_TEAR_MODE_VBLANK);

	if (ret)

		return ret;



	ret = mipi_dsi_dcs_exit_sleep_mode(ctx->dsi);

	if (ret)

		return ret;



	return 0;

}



static int ili9881c_enable(struct drm_panel *panel)

{

	struct ili9881c *ctx = panel_to_ili9881c(panel);



	msleep(120);



	mipi_dsi_dcs_set_display_on(ctx->dsi);



	return 0;

}



static int ili9881c_disable(struct drm_panel *panel)

{

	struct ili9881c *ctx = panel_to_ili9881c(panel);



	return mipi_dsi_dcs_set_display_off(ctx->dsi);

}



static int ili9881c_unprepare(struct drm_panel *panel)

{

	struct ili9881c *ctx = panel_to_ili9881c(panel);



	mipi_dsi_dcs_enter_sleep_mode(ctx->dsi);

	regulator_disable(ctx->power);

	gpiod_set_value(ctx->reset_gpio, 1);



	return 0;

}



static const struct drm_display_mode lhr050h41_default_mode = {

	.clock		= 62000,



	.hdisplay	= 720,

	.hsync_start	= 720 + 10,

	.hsync_end	= 720 + 10 + 20,

	.htotal		= 720 + 10 + 20 + 30,



	.vdisplay	= 1280,

	.vsync_start	= 1280 + 10,

	.vsync_end	= 1280 + 10 + 10,

	.vtotal		= 1280 + 10 + 10 + 20,



	.width_mm	= 62,

	.height_mm	= 110,

};



static const struct drm_display_mode k101_im2byl02_default_mode = {

	.clock		= 69700,



	.hdisplay	= 800,

	.hsync_start	= 800 + 52,

	.hsync_end	= 800 + 52 + 8,

	.htotal		= 800 + 52 + 8 + 48,



	.vdisplay	= 1280,

	.vsync_start	= 1280 + 16,

	.vsync_end	= 1280 + 16 + 6,

	.vtotal		= 1280 + 16 + 6 + 15,



	.width_mm	= 135,

	.height_mm	= 217,

};



static const struct drm_display_mode nwe080_default_mode = {

	.clock		= 70000,



	.hdisplay	= 800,

	.hsync_start	= 800 + 50,

	.hsync_end	= 800 + 50 + 6,

	.htotal		= 800 + 50 + 6 + 50,



	.vdisplay	= 1280,

	.vsync_start	= 1280 + 20,

	.vsync_end	= 1280 + 20 + 2,

	.vtotal		= 1280 + 20 + 2 + 20,



	.width_mm	= 68,

	.height_mm	= 121,



};



static int ili9881c_get_modes(struct drm_panel *panel,

			      struct drm_connector *connector)

{

	struct ili9881c *ctx = panel_to_ili9881c(panel);

	struct drm_display_mode *mode;



	mode = drm_mode_duplicate(connector->dev, ctx->desc->mode);

	if (!mode) {

		dev_err(&ctx->dsi->dev, "failed to add mode %ux%ux@%u\n",

			ctx->desc->mode->hdisplay,

			ctx->desc->mode->vdisplay,

			drm_mode_vrefresh(ctx->desc->mode));

		return -ENOMEM;

	}



	drm_mode_set_name(mode);



	mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;

	drm_mode_probed_add(connector, mode);



	connector->display_info.width_mm = mode->width_mm;

	connector->display_info.height_mm = mode->height_mm;



	return 1;

}



static const struct drm_panel_funcs ili9881c_funcs = {

	.prepare	= ili9881c_prepare,

	.unprepare	= ili9881c_unprepare,

	.enable		= ili9881c_enable,

	.disable	= ili9881c_disable,

	.get_modes	= ili9881c_get_modes,

};



static int ili9881c_dsi_probe(struct mipi_dsi_device *dsi)

{

	struct ili9881c *ctx;

	int ret;



	ctx = devm_kzalloc(&dsi->dev, sizeof(*ctx), GFP_KERNEL);

	if (!ctx)

		return -ENOMEM;

	mipi_dsi_set_drvdata(dsi, ctx);

	ctx->dsi = dsi;

	ctx->desc = of_device_get_match_data(&dsi->dev);



	ctx->panel.prepare_upstream_first = true;

	drm_panel_init(&ctx->panel, &dsi->dev, &ili9881c_funcs,

		       DRM_MODE_CONNECTOR_DSI);



	ctx->power = devm_regulator_get(&dsi->dev, "power");

	if (IS_ERR(ctx->power)) {

		dev_err(&dsi->dev, "Couldn't get our power regulator\n");

		return PTR_ERR(ctx->power);

	}



	ctx->reset_gpio = devm_gpiod_get(&dsi->dev, "reset", GPIOD_OUT_LOW);

	if (IS_ERR(ctx->reset_gpio)) {

		dev_err(&dsi->dev, "Couldn't get our reset GPIO\n");

		return PTR_ERR(ctx->reset_gpio);

	}



	ret = drm_panel_of_backlight(&ctx->panel);

	if (ret)

		return ret;



	drm_panel_add(&ctx->panel);



	dsi->mode_flags = ctx->desc->flags;

	dsi->format = MIPI_DSI_FMT_RGB888;

	dsi->lanes = 4;



	ret = mipi_dsi_attach(dsi);

	if (ret)

		drm_panel_remove(&ctx->panel);



	return ret;

}



static int ili9881c_dsi_remove(struct mipi_dsi_device *dsi)

{

	struct ili9881c *ctx = mipi_dsi_get_drvdata(dsi);



	mipi_dsi_detach(dsi);

	drm_panel_remove(&ctx->panel);



	return 0;

}



static const struct ili9881c_desc lhr050h41_desc = {

	.init = lhr050h41_init,

	.init_length = ARRAY_SIZE(lhr050h41_init),

	.mode = &lhr050h41_default_mode,

	.flags = MIPI_DSI_MODE_VIDEO_SYNC_PULSE,

};



static const struct ili9881c_desc k101_im2byl02_desc = {

	.init = k101_im2byl02_init,

	.init_length = ARRAY_SIZE(k101_im2byl02_init),

	.mode = &k101_im2byl02_default_mode,

	.flags = MIPI_DSI_MODE_VIDEO_SYNC_PULSE,

};



static const struct ili9881c_desc nwe080_desc = {

	.init = nwe080_init,

	.init_length = ARRAY_SIZE(nwe080_init),

	.mode = &nwe080_default_mode,

	.flags = MIPI_DSI_MODE_VIDEO_SYNC_PULSE | MIPI_DSI_MODE_VIDEO,

};



static const struct of_device_id ili9881c_of_match[] = {

	{ .compatible = "bananapi,lhr050h41", .data = &lhr050h41_desc },

	{ .compatible = "feixin,k101-im2byl02", .data = &k101_im2byl02_desc },

	{ .compatible = "nwe,nwe080", .data = &nwe080_desc },

	{}

};

MODULE_DEVICE_TABLE(of, ili9881c_of_match);



static struct mipi_dsi_driver ili9881c_dsi_driver = {

	.probe		= ili9881c_dsi_probe,

	.remove		= ili9881c_dsi_remove,

	.driver = {

		.name		= "ili9881c-dsi",

		.of_match_table	= ili9881c_of_match,

	},

};

module_mipi_dsi_driver(ili9881c_dsi_driver);



MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com>");

MODULE_DESCRIPTION("Ilitek ILI9881C Controller Driver");

MODULE_LICENSE("GPL v2");

dts code

Code: Select all

/dts-v1/;
/plugin/;

/ {
    compatible = "brcm,bcm2711";

    fragment@0 {
        target=<&dsi1>;

        __overlay__ {
            status = "okay";

            #address-cells = <1>;
            #size-cells = <0>;

            port {
                dsi1_out_port: endpoint {
                    remote-endpoint = <&panel_dsi_in1>;
                };
            };

            display1: panel@0 {
                compatible = "nwe,nwe080";
                reg=<0>;
                reset-gpios = <&gpio 6 0>;
                port {
                    panel_dsi_in1: endpoint {
                        remote-endpoint = <&dsi1_out_port>;
                    };
                };
            };
        };
    };

    fragment@1 {
        target = <&gpio>;
        __overlay__ {
            pwm_pins: pwm_pins {
                brcm,pins = <12>;
                brcm,function = <4>; // ALT0
            };
        };
    };

    fragment@2 {
        target = <&pwm>;
        frag1: __overlay__ {
            pinctrl-names = "default";
            pinctrl-0 = <&pwm_pins>;
            assigned-clock-rates = <1000000>;
            status = "okay";
        };
    };

    fragment@3 {
        target-path = "/";
        __overlay__ {
            rpi_backlight: rpi_backlight {
                compatible = "pwm-backlight";
                brightness-levels = <0 6 8 12 16 24 32 40 48 64 96 128 160 192 224 255>;
                default-brightness-level = <6>;
                pwms = <&pwm 0 200000>;
                power-supply = <&vdd_3v3_reg>;
                status = "okay";
            };
        };
    };

    fragment@4 {
        target = <&i2c6>;
        frag0: __overlay__ {
            status = "okay";
            pinctrl-names = "default";
            pinctrl-0 = <&i2c6_pins>;
            clock-frequency = <100000>;
        };
    };

    fragment@5 {
        target = <&i2c6_pins>;
        __dormant__ {
            brcm,pins = <0 1>;
        };
    };

    fragment@6 {
        target = <&i2c6_pins>;
        __overlay__ {
            brcm,pins = <22 23>;
        };
    };

    fragment@7 {
            target = <&gpio>;
            __overlay__ {
                goodix_pins: goodix_pins {
                    brcm,pins = <21 26>; // interrupt and reset
                    brcm,function = <0 0>; // in
                    brcm,pull = <2 2>; // pull-up
                };
            };
    };

    fragment@8 {
        target = <&i2c6>;
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;
            status = "okay";

            gt9xx: gt9xx@5d {
                compatible = "goodix,gt9271"; 
                reg = <0x5D>;
                pinctrl-names = "default";
                pinctrl-0 = <&goodix_pins>;
                interrupt-parent = <&gpio>;
                interrupts = <21 2>; // high-to-low edge triggered
                irq-gpios = <&gpio 21 0>; 
                reset-gpios = <&gpio 26 0>;
            };
        };
    };
};

aBUGSworstnightmare
Posts: 5618
Joined: Tue Jun 30, 2015 1:35 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Tue Jun 28, 2022 2:37 pm

sunny2405 wrote:
Tue Jun 28, 2022 4:14 am
Hi @6by9
Thank for your support
I am using the driver ili9881.c and using the company's parameter file
with kernel version: Linux raspberrypi 5.15.49-v7l+ #1 SMP Sat Jun 25 13:50:39 +07 2022 armv7l GNU/Linux

The panel LCD type I'm user

https://www.shtdo.com/Admin/Others/Down ... b18d7ac52b

I have assigned the config values to a format for the nwe080 panel. I'm not a software developer, I'm a hardware engineer.
Driver code: ili9881.c

Code: Select all

// SPDX-License-Identifier: GPL-2.0

/*

 * Copyright (C) 2017-2018, Bootlin

 * Copyright (C) 2021, Henson Li <henson@cutiepi.io>

 * Copyright (C) 2021, Penk Chen <penk@cutiepi.io>

 */



#include <linux/delay.h>

#include <linux/device.h>

#include <linux/err.h>

#include <linux/errno.h>

#include <linux/fb.h>

#include <linux/kernel.h>

#include <linux/module.h>

#include <linux/of_device.h>



#include <linux/gpio/consumer.h>

#include <linux/regulator/consumer.h>



#include <drm/drm_mipi_dsi.h>

#include <drm/drm_modes.h>

#include <drm/drm_panel.h>



#include <video/mipi_display.h>



enum ili9881c_op {

	ILI9881C_SWITCH_PAGE,

	ILI9881C_COMMAND,

};



struct ili9881c_instr {

	enum ili9881c_op	op;



	union arg {

		struct cmd {

			u8	cmd;

			u8	data;

		} cmd;

		u8	page;

	} arg;

};



struct ili9881c_desc {

	const struct ili9881c_instr *init;

	const size_t init_length;

	const struct drm_display_mode *mode;

	const unsigned flags;

};



struct ili9881c {

	struct drm_panel	panel;

	struct mipi_dsi_device	*dsi;

	const struct ili9881c_desc	*desc;



	struct regulator	*power;

	struct gpio_desc	*reset_gpio;

};



#define ILI9881C_SWITCH_PAGE_INSTR(_page)	\

	{					\

		.op = ILI9881C_SWITCH_PAGE,	\

		.arg = {			\

			.page = (_page),	\

		},				\

	}



#define ILI9881C_COMMAND_INSTR(_cmd, _data)		\

	{						\

		.op = ILI9881C_COMMAND,		\

		.arg = {				\

			.cmd = {			\

				.cmd = (_cmd),		\

				.data = (_data),	\

			},				\

		},					\

	}



static const struct ili9881c_instr lhr050h41_init[] = {

	ILI9881C_SWITCH_PAGE_INSTR(3),

	ILI9881C_COMMAND_INSTR(0x01, 0x00),

	ILI9881C_COMMAND_INSTR(0x02, 0x00),

	ILI9881C_COMMAND_INSTR(0x03, 0x73),

	ILI9881C_COMMAND_INSTR(0x04, 0x03),

	ILI9881C_COMMAND_INSTR(0x05, 0x00),

	ILI9881C_COMMAND_INSTR(0x06, 0x06),

	ILI9881C_COMMAND_INSTR(0x07, 0x06),

	ILI9881C_COMMAND_INSTR(0x08, 0x00),

	ILI9881C_COMMAND_INSTR(0x09, 0x18),

	ILI9881C_COMMAND_INSTR(0x0a, 0x04),

	ILI9881C_COMMAND_INSTR(0x0b, 0x00),

	ILI9881C_COMMAND_INSTR(0x0c, 0x02),

	ILI9881C_COMMAND_INSTR(0x0d, 0x03),

	ILI9881C_COMMAND_INSTR(0x0e, 0x00),

	ILI9881C_COMMAND_INSTR(0x0f, 0x25),

	ILI9881C_COMMAND_INSTR(0x10, 0x25),

	ILI9881C_COMMAND_INSTR(0x11, 0x00),

	ILI9881C_COMMAND_INSTR(0x12, 0x00),

	ILI9881C_COMMAND_INSTR(0x13, 0x00),

	ILI9881C_COMMAND_INSTR(0x14, 0x00),

	ILI9881C_COMMAND_INSTR(0x15, 0x00),

	ILI9881C_COMMAND_INSTR(0x16, 0x0C),

	ILI9881C_COMMAND_INSTR(0x17, 0x00),

	ILI9881C_COMMAND_INSTR(0x18, 0x00),

	ILI9881C_COMMAND_INSTR(0x19, 0x00),

	ILI9881C_COMMAND_INSTR(0x1a, 0x00),

	ILI9881C_COMMAND_INSTR(0x1b, 0x00),

	ILI9881C_COMMAND_INSTR(0x1c, 0x00),

	ILI9881C_COMMAND_INSTR(0x1d, 0x00),

	ILI9881C_COMMAND_INSTR(0x1e, 0xC0),

	ILI9881C_COMMAND_INSTR(0x1f, 0x80),

	ILI9881C_COMMAND_INSTR(0x20, 0x04),

	ILI9881C_COMMAND_INSTR(0x21, 0x01),

	ILI9881C_COMMAND_INSTR(0x22, 0x00),

	ILI9881C_COMMAND_INSTR(0x23, 0x00),

	ILI9881C_COMMAND_INSTR(0x24, 0x00),

	ILI9881C_COMMAND_INSTR(0x25, 0x00),

	ILI9881C_COMMAND_INSTR(0x26, 0x00),

	ILI9881C_COMMAND_INSTR(0x27, 0x00),

	ILI9881C_COMMAND_INSTR(0x28, 0x33),

	ILI9881C_COMMAND_INSTR(0x29, 0x03),

	ILI9881C_COMMAND_INSTR(0x2a, 0x00),

	ILI9881C_COMMAND_INSTR(0x2b, 0x00),

	ILI9881C_COMMAND_INSTR(0x2c, 0x00),

	ILI9881C_COMMAND_INSTR(0x2d, 0x00),

	ILI9881C_COMMAND_INSTR(0x2e, 0x00),

	ILI9881C_COMMAND_INSTR(0x2f, 0x00),

	ILI9881C_COMMAND_INSTR(0x30, 0x00),

	ILI9881C_COMMAND_INSTR(0x31, 0x00),

	ILI9881C_COMMAND_INSTR(0x32, 0x00),

	ILI9881C_COMMAND_INSTR(0x33, 0x00),

	ILI9881C_COMMAND_INSTR(0x34, 0x04),

	ILI9881C_COMMAND_INSTR(0x35, 0x00),

	ILI9881C_COMMAND_INSTR(0x36, 0x00),

	ILI9881C_COMMAND_INSTR(0x37, 0x00),

	ILI9881C_COMMAND_INSTR(0x38, 0x3C),

	ILI9881C_COMMAND_INSTR(0x39, 0x00),

	ILI9881C_COMMAND_INSTR(0x3a, 0x00),

	ILI9881C_COMMAND_INSTR(0x3b, 0x00),

	ILI9881C_COMMAND_INSTR(0x3c, 0x00),

	ILI9881C_COMMAND_INSTR(0x3d, 0x00),

	ILI9881C_COMMAND_INSTR(0x3e, 0x00),

	ILI9881C_COMMAND_INSTR(0x3f, 0x00),

	ILI9881C_COMMAND_INSTR(0x40, 0x00),

	ILI9881C_COMMAND_INSTR(0x41, 0x00),

	ILI9881C_COMMAND_INSTR(0x42, 0x00),

	ILI9881C_COMMAND_INSTR(0x43, 0x00),

	ILI9881C_COMMAND_INSTR(0x44, 0x00),

	ILI9881C_COMMAND_INSTR(0x50, 0x01),

	ILI9881C_COMMAND_INSTR(0x51, 0x23),

	ILI9881C_COMMAND_INSTR(0x52, 0x45),

	ILI9881C_COMMAND_INSTR(0x53, 0x67),

	ILI9881C_COMMAND_INSTR(0x54, 0x89),

	ILI9881C_COMMAND_INSTR(0x55, 0xab),

	ILI9881C_COMMAND_INSTR(0x56, 0x01),

	ILI9881C_COMMAND_INSTR(0x57, 0x23),

	ILI9881C_COMMAND_INSTR(0x58, 0x45),

	ILI9881C_COMMAND_INSTR(0x59, 0x67),

	ILI9881C_COMMAND_INSTR(0x5a, 0x89),

	ILI9881C_COMMAND_INSTR(0x5b, 0xab),

	ILI9881C_COMMAND_INSTR(0x5c, 0xcd),

	ILI9881C_COMMAND_INSTR(0x5d, 0xef),

	ILI9881C_COMMAND_INSTR(0x5e, 0x11),

	ILI9881C_COMMAND_INSTR(0x5f, 0x02),

	ILI9881C_COMMAND_INSTR(0x60, 0x02),

	ILI9881C_COMMAND_INSTR(0x61, 0x02),

	ILI9881C_COMMAND_INSTR(0x62, 0x02),

	ILI9881C_COMMAND_INSTR(0x63, 0x02),

	ILI9881C_COMMAND_INSTR(0x64, 0x02),

	ILI9881C_COMMAND_INSTR(0x65, 0x02),

	ILI9881C_COMMAND_INSTR(0x66, 0x02),

	ILI9881C_COMMAND_INSTR(0x67, 0x02),

	ILI9881C_COMMAND_INSTR(0x68, 0x02),

	ILI9881C_COMMAND_INSTR(0x69, 0x02),

	ILI9881C_COMMAND_INSTR(0x6a, 0x0C),

	ILI9881C_COMMAND_INSTR(0x6b, 0x02),

	ILI9881C_COMMAND_INSTR(0x6c, 0x0F),

	ILI9881C_COMMAND_INSTR(0x6d, 0x0E),

	ILI9881C_COMMAND_INSTR(0x6e, 0x0D),

	ILI9881C_COMMAND_INSTR(0x6f, 0x06),

	ILI9881C_COMMAND_INSTR(0x70, 0x07),

	ILI9881C_COMMAND_INSTR(0x71, 0x02),

	ILI9881C_COMMAND_INSTR(0x72, 0x02),

	ILI9881C_COMMAND_INSTR(0x73, 0x02),

	ILI9881C_COMMAND_INSTR(0x74, 0x02),

	ILI9881C_COMMAND_INSTR(0x75, 0x02),

	ILI9881C_COMMAND_INSTR(0x76, 0x02),

	ILI9881C_COMMAND_INSTR(0x77, 0x02),

	ILI9881C_COMMAND_INSTR(0x78, 0x02),

	ILI9881C_COMMAND_INSTR(0x79, 0x02),

	ILI9881C_COMMAND_INSTR(0x7a, 0x02),

	ILI9881C_COMMAND_INSTR(0x7b, 0x02),

	ILI9881C_COMMAND_INSTR(0x7c, 0x02),

	ILI9881C_COMMAND_INSTR(0x7d, 0x02),

	ILI9881C_COMMAND_INSTR(0x7e, 0x02),

	ILI9881C_COMMAND_INSTR(0x7f, 0x02),

	ILI9881C_COMMAND_INSTR(0x80, 0x0C),

	ILI9881C_COMMAND_INSTR(0x81, 0x02),

	ILI9881C_COMMAND_INSTR(0x82, 0x0F),

	ILI9881C_COMMAND_INSTR(0x83, 0x0E),

	ILI9881C_COMMAND_INSTR(0x84, 0x0D),

	ILI9881C_COMMAND_INSTR(0x85, 0x06),

	ILI9881C_COMMAND_INSTR(0x86, 0x07),

	ILI9881C_COMMAND_INSTR(0x87, 0x02),

	ILI9881C_COMMAND_INSTR(0x88, 0x02),

	ILI9881C_COMMAND_INSTR(0x89, 0x02),

	ILI9881C_COMMAND_INSTR(0x8A, 0x02),

	ILI9881C_SWITCH_PAGE_INSTR(4),

	ILI9881C_COMMAND_INSTR(0x6C, 0x15),

	ILI9881C_COMMAND_INSTR(0x6E, 0x22),

	ILI9881C_COMMAND_INSTR(0x6F, 0x33),

	ILI9881C_COMMAND_INSTR(0x3A, 0xA4),

	ILI9881C_COMMAND_INSTR(0x8D, 0x0D),

	ILI9881C_COMMAND_INSTR(0x87, 0xBA),

	ILI9881C_COMMAND_INSTR(0x26, 0x76),

	ILI9881C_COMMAND_INSTR(0xB2, 0xD1),

	ILI9881C_SWITCH_PAGE_INSTR(1),

	ILI9881C_COMMAND_INSTR(0x22, 0x0A),

	ILI9881C_COMMAND_INSTR(0x53, 0xDC),

	ILI9881C_COMMAND_INSTR(0x55, 0xA7),

	ILI9881C_COMMAND_INSTR(0x50, 0x78),

	ILI9881C_COMMAND_INSTR(0x51, 0x78),

	ILI9881C_COMMAND_INSTR(0x31, 0x02),

	ILI9881C_COMMAND_INSTR(0x60, 0x14),

	ILI9881C_COMMAND_INSTR(0xA0, 0x2A),

	ILI9881C_COMMAND_INSTR(0xA1, 0x39),

	ILI9881C_COMMAND_INSTR(0xA2, 0x46),

	ILI9881C_COMMAND_INSTR(0xA3, 0x0e),

	ILI9881C_COMMAND_INSTR(0xA4, 0x12),

	ILI9881C_COMMAND_INSTR(0xA5, 0x25),

	ILI9881C_COMMAND_INSTR(0xA6, 0x19),

	ILI9881C_COMMAND_INSTR(0xA7, 0x1d),

	ILI9881C_COMMAND_INSTR(0xA8, 0xa6),

	ILI9881C_COMMAND_INSTR(0xA9, 0x1C),

	ILI9881C_COMMAND_INSTR(0xAA, 0x29),

	ILI9881C_COMMAND_INSTR(0xAB, 0x85),

	ILI9881C_COMMAND_INSTR(0xAC, 0x1C),

	ILI9881C_COMMAND_INSTR(0xAD, 0x1B),

	ILI9881C_COMMAND_INSTR(0xAE, 0x51),

	ILI9881C_COMMAND_INSTR(0xAF, 0x22),

	ILI9881C_COMMAND_INSTR(0xB0, 0x2d),

	ILI9881C_COMMAND_INSTR(0xB1, 0x4f),

	ILI9881C_COMMAND_INSTR(0xB2, 0x59),

	ILI9881C_COMMAND_INSTR(0xB3, 0x3F),

	ILI9881C_COMMAND_INSTR(0xC0, 0x2A),

	ILI9881C_COMMAND_INSTR(0xC1, 0x3a),

	ILI9881C_COMMAND_INSTR(0xC2, 0x45),

	ILI9881C_COMMAND_INSTR(0xC3, 0x0e),

	ILI9881C_COMMAND_INSTR(0xC4, 0x11),

	ILI9881C_COMMAND_INSTR(0xC5, 0x24),

	ILI9881C_COMMAND_INSTR(0xC6, 0x1a),

	ILI9881C_COMMAND_INSTR(0xC7, 0x1c),

	ILI9881C_COMMAND_INSTR(0xC8, 0xaa),

	ILI9881C_COMMAND_INSTR(0xC9, 0x1C),

	ILI9881C_COMMAND_INSTR(0xCA, 0x29),

	ILI9881C_COMMAND_INSTR(0xCB, 0x96),

	ILI9881C_COMMAND_INSTR(0xCC, 0x1C),

	ILI9881C_COMMAND_INSTR(0xCD, 0x1B),

	ILI9881C_COMMAND_INSTR(0xCE, 0x51),

	ILI9881C_COMMAND_INSTR(0xCF, 0x22),

	ILI9881C_COMMAND_INSTR(0xD0, 0x2b),

	ILI9881C_COMMAND_INSTR(0xD1, 0x4b),

	ILI9881C_COMMAND_INSTR(0xD2, 0x59),

	ILI9881C_COMMAND_INSTR(0xD3, 0x3F),

};



static const struct ili9881c_instr k101_im2byl02_init[] = {

	ILI9881C_SWITCH_PAGE_INSTR(3),

	ILI9881C_COMMAND_INSTR(0x01, 0x00),

	ILI9881C_COMMAND_INSTR(0x02, 0x00),

	ILI9881C_COMMAND_INSTR(0x03, 0x73),

	ILI9881C_COMMAND_INSTR(0x04, 0x00),

	ILI9881C_COMMAND_INSTR(0x05, 0x00),

	ILI9881C_COMMAND_INSTR(0x06, 0x08),

	ILI9881C_COMMAND_INSTR(0x07, 0x00),

	ILI9881C_COMMAND_INSTR(0x08, 0x00),

	ILI9881C_COMMAND_INSTR(0x09, 0x00),

	ILI9881C_COMMAND_INSTR(0x0A, 0x01),

	ILI9881C_COMMAND_INSTR(0x0B, 0x01),

	ILI9881C_COMMAND_INSTR(0x0C, 0x00),

	ILI9881C_COMMAND_INSTR(0x0D, 0x01),

	ILI9881C_COMMAND_INSTR(0x0E, 0x01),

	ILI9881C_COMMAND_INSTR(0x0F, 0x00),

	ILI9881C_COMMAND_INSTR(0x10, 0x00),

	ILI9881C_COMMAND_INSTR(0x11, 0x00),

	ILI9881C_COMMAND_INSTR(0x12, 0x00),

	ILI9881C_COMMAND_INSTR(0x13, 0x00),

	ILI9881C_COMMAND_INSTR(0x14, 0x00),

	ILI9881C_COMMAND_INSTR(0x15, 0x00),

	ILI9881C_COMMAND_INSTR(0x16, 0x00),

	ILI9881C_COMMAND_INSTR(0x17, 0x00),

	ILI9881C_COMMAND_INSTR(0x18, 0x00),

	ILI9881C_COMMAND_INSTR(0x19, 0x00),

	ILI9881C_COMMAND_INSTR(0x1A, 0x00),

	ILI9881C_COMMAND_INSTR(0x1B, 0x00),

	ILI9881C_COMMAND_INSTR(0x1C, 0x00),

	ILI9881C_COMMAND_INSTR(0x1D, 0x00),

	ILI9881C_COMMAND_INSTR(0x1E, 0x40),

	ILI9881C_COMMAND_INSTR(0x1F, 0xC0),

	ILI9881C_COMMAND_INSTR(0x20, 0x06),

	ILI9881C_COMMAND_INSTR(0x21, 0x01),

	ILI9881C_COMMAND_INSTR(0x22, 0x06),

	ILI9881C_COMMAND_INSTR(0x23, 0x01),

	ILI9881C_COMMAND_INSTR(0x24, 0x88),

	ILI9881C_COMMAND_INSTR(0x25, 0x88),

	ILI9881C_COMMAND_INSTR(0x26, 0x00),

	ILI9881C_COMMAND_INSTR(0x27, 0x00),

	ILI9881C_COMMAND_INSTR(0x28, 0x3B),

	ILI9881C_COMMAND_INSTR(0x29, 0x03),

	ILI9881C_COMMAND_INSTR(0x2A, 0x00),

	ILI9881C_COMMAND_INSTR(0x2B, 0x00),

	ILI9881C_COMMAND_INSTR(0x2C, 0x00),

	ILI9881C_COMMAND_INSTR(0x2D, 0x00),

	ILI9881C_COMMAND_INSTR(0x2E, 0x00),

	ILI9881C_COMMAND_INSTR(0x2F, 0x00),

	ILI9881C_COMMAND_INSTR(0x30, 0x00),

	ILI9881C_COMMAND_INSTR(0x31, 0x00),

	ILI9881C_COMMAND_INSTR(0x32, 0x00),

	ILI9881C_COMMAND_INSTR(0x33, 0x00),

	ILI9881C_COMMAND_INSTR(0x34, 0x00), /* GPWR1/2 non overlap time 2.62us */

	ILI9881C_COMMAND_INSTR(0x35, 0x00),

	ILI9881C_COMMAND_INSTR(0x36, 0x00),

	ILI9881C_COMMAND_INSTR(0x37, 0x00),

	ILI9881C_COMMAND_INSTR(0x38, 0x00),

	ILI9881C_COMMAND_INSTR(0x39, 0x00),

	ILI9881C_COMMAND_INSTR(0x3A, 0x00),

	ILI9881C_COMMAND_INSTR(0x3B, 0x00),

	ILI9881C_COMMAND_INSTR(0x3C, 0x00),

	ILI9881C_COMMAND_INSTR(0x3D, 0x00),

	ILI9881C_COMMAND_INSTR(0x3E, 0x00),

	ILI9881C_COMMAND_INSTR(0x3F, 0x00),

	ILI9881C_COMMAND_INSTR(0x40, 0x00),

	ILI9881C_COMMAND_INSTR(0x41, 0x00),

	ILI9881C_COMMAND_INSTR(0x42, 0x00),

	ILI9881C_COMMAND_INSTR(0x43, 0x00),

	ILI9881C_COMMAND_INSTR(0x44, 0x00),

	ILI9881C_COMMAND_INSTR(0x50, 0x01),

	ILI9881C_COMMAND_INSTR(0x51, 0x23),

	ILI9881C_COMMAND_INSTR(0x52, 0x45),

	ILI9881C_COMMAND_INSTR(0x53, 0x67),

	ILI9881C_COMMAND_INSTR(0x54, 0x89),

	ILI9881C_COMMAND_INSTR(0x55, 0xAB),

	ILI9881C_COMMAND_INSTR(0x56, 0x01),

	ILI9881C_COMMAND_INSTR(0x57, 0x23),

	ILI9881C_COMMAND_INSTR(0x58, 0x45),

	ILI9881C_COMMAND_INSTR(0x59, 0x67),

	ILI9881C_COMMAND_INSTR(0x5A, 0x89),

	ILI9881C_COMMAND_INSTR(0x5B, 0xAB),

	ILI9881C_COMMAND_INSTR(0x5C, 0xCD),

	ILI9881C_COMMAND_INSTR(0x5D, 0xEF),

	ILI9881C_COMMAND_INSTR(0x5E, 0x00),

	ILI9881C_COMMAND_INSTR(0x5F, 0x01),

	ILI9881C_COMMAND_INSTR(0x60, 0x01),

	ILI9881C_COMMAND_INSTR(0x61, 0x06),

	ILI9881C_COMMAND_INSTR(0x62, 0x06),

	ILI9881C_COMMAND_INSTR(0x63, 0x07),

	ILI9881C_COMMAND_INSTR(0x64, 0x07),

	ILI9881C_COMMAND_INSTR(0x65, 0x00),

	ILI9881C_COMMAND_INSTR(0x66, 0x00),

	ILI9881C_COMMAND_INSTR(0x67, 0x02),

	ILI9881C_COMMAND_INSTR(0x68, 0x02),

	ILI9881C_COMMAND_INSTR(0x69, 0x05),

	ILI9881C_COMMAND_INSTR(0x6A, 0x05),

	ILI9881C_COMMAND_INSTR(0x6B, 0x02),

	ILI9881C_COMMAND_INSTR(0x6C, 0x0D),

	ILI9881C_COMMAND_INSTR(0x6D, 0x0D),

	ILI9881C_COMMAND_INSTR(0x6E, 0x0C),

	ILI9881C_COMMAND_INSTR(0x6F, 0x0C),

	ILI9881C_COMMAND_INSTR(0x70, 0x0F),

	ILI9881C_COMMAND_INSTR(0x71, 0x0F),

	ILI9881C_COMMAND_INSTR(0x72, 0x0E),

	ILI9881C_COMMAND_INSTR(0x73, 0x0E),

	ILI9881C_COMMAND_INSTR(0x74, 0x02),

	ILI9881C_COMMAND_INSTR(0x75, 0x01),

	ILI9881C_COMMAND_INSTR(0x76, 0x01),

	ILI9881C_COMMAND_INSTR(0x77, 0x06),

	ILI9881C_COMMAND_INSTR(0x78, 0x06),

	ILI9881C_COMMAND_INSTR(0x79, 0x07),

	ILI9881C_COMMAND_INSTR(0x7A, 0x07),

	ILI9881C_COMMAND_INSTR(0x7B, 0x00),

	ILI9881C_COMMAND_INSTR(0x7C, 0x00),

	ILI9881C_COMMAND_INSTR(0x7D, 0x02),

	ILI9881C_COMMAND_INSTR(0x7E, 0x02),

	ILI9881C_COMMAND_INSTR(0x7F, 0x05),

	ILI9881C_COMMAND_INSTR(0x80, 0x05),

	ILI9881C_COMMAND_INSTR(0x81, 0x02),

	ILI9881C_COMMAND_INSTR(0x82, 0x0D),

	ILI9881C_COMMAND_INSTR(0x83, 0x0D),

	ILI9881C_COMMAND_INSTR(0x84, 0x0C),

	ILI9881C_COMMAND_INSTR(0x85, 0x0C),

	ILI9881C_COMMAND_INSTR(0x86, 0x0F),

	ILI9881C_COMMAND_INSTR(0x87, 0x0F),

	ILI9881C_COMMAND_INSTR(0x88, 0x0E),

	ILI9881C_COMMAND_INSTR(0x89, 0x0E),

	ILI9881C_COMMAND_INSTR(0x8A, 0x02),

	ILI9881C_SWITCH_PAGE_INSTR(4),

	ILI9881C_COMMAND_INSTR(0x3B, 0xC0), /* ILI4003D sel */

	ILI9881C_COMMAND_INSTR(0x6C, 0x15), /* Set VCORE voltage = 1.5V */

	ILI9881C_COMMAND_INSTR(0x6E, 0x2A), /* di_pwr_reg=0 for power mode 2A, VGH clamp 18V */

	ILI9881C_COMMAND_INSTR(0x6F, 0x33), /* pumping ratio VGH=5x VGL=-3x */

	ILI9881C_COMMAND_INSTR(0x8D, 0x1B), /* VGL clamp -10V */

	ILI9881C_COMMAND_INSTR(0x87, 0xBA), /* ESD */

	ILI9881C_COMMAND_INSTR(0x3A, 0x24), /* POWER SAVING */

	ILI9881C_COMMAND_INSTR(0x26, 0x76),

	ILI9881C_COMMAND_INSTR(0xB2, 0xD1),

	ILI9881C_SWITCH_PAGE_INSTR(1),

	ILI9881C_COMMAND_INSTR(0x22, 0x0A), /* BGR, SS */

	ILI9881C_COMMAND_INSTR(0x31, 0x00), /* Zigzag type3 inversion */

	ILI9881C_COMMAND_INSTR(0x40, 0x53), /* ILI4003D sel */

	ILI9881C_COMMAND_INSTR(0x43, 0x66),

	ILI9881C_COMMAND_INSTR(0x53, 0x4C),

	ILI9881C_COMMAND_INSTR(0x50, 0x87),

	ILI9881C_COMMAND_INSTR(0x51, 0x82),

	ILI9881C_COMMAND_INSTR(0x60, 0x15),

	ILI9881C_COMMAND_INSTR(0x61, 0x01),

	ILI9881C_COMMAND_INSTR(0x62, 0x0C),

	ILI9881C_COMMAND_INSTR(0x63, 0x00),

	ILI9881C_COMMAND_INSTR(0xA0, 0x00),

	ILI9881C_COMMAND_INSTR(0xA1, 0x13), /* VP251 */

	ILI9881C_COMMAND_INSTR(0xA2, 0x23), /* VP247 */

	ILI9881C_COMMAND_INSTR(0xA3, 0x14), /* VP243 */

	ILI9881C_COMMAND_INSTR(0xA4, 0x16), /* VP239 */

	ILI9881C_COMMAND_INSTR(0xA5, 0x29), /* VP231 */

	ILI9881C_COMMAND_INSTR(0xA6, 0x1E), /* VP219 */

	ILI9881C_COMMAND_INSTR(0xA7, 0x1D), /* VP203 */

	ILI9881C_COMMAND_INSTR(0xA8, 0x86), /* VP175 */

	ILI9881C_COMMAND_INSTR(0xA9, 0x1E), /* VP144 */

	ILI9881C_COMMAND_INSTR(0xAA, 0x29), /* VP111 */

	ILI9881C_COMMAND_INSTR(0xAB, 0x74), /* VP80 */

	ILI9881C_COMMAND_INSTR(0xAC, 0x19), /* VP52 */

	ILI9881C_COMMAND_INSTR(0xAD, 0x17), /* VP36 */

	ILI9881C_COMMAND_INSTR(0xAE, 0x4B), /* VP24 */

	ILI9881C_COMMAND_INSTR(0xAF, 0x20), /* VP16 */

	ILI9881C_COMMAND_INSTR(0xB0, 0x26), /* VP12 */

	ILI9881C_COMMAND_INSTR(0xB1, 0x4C), /* VP8 */

	ILI9881C_COMMAND_INSTR(0xB2, 0x5D), /* VP4 */

	ILI9881C_COMMAND_INSTR(0xB3, 0x3F), /* VP0 */

	ILI9881C_COMMAND_INSTR(0xC0, 0x00), /* VN255 GAMMA N */

	ILI9881C_COMMAND_INSTR(0xC1, 0x13), /* VN251 */

	ILI9881C_COMMAND_INSTR(0xC2, 0x23), /* VN247 */

	ILI9881C_COMMAND_INSTR(0xC3, 0x14), /* VN243 */

	ILI9881C_COMMAND_INSTR(0xC4, 0x16), /* VN239 */

	ILI9881C_COMMAND_INSTR(0xC5, 0x29), /* VN231 */

	ILI9881C_COMMAND_INSTR(0xC6, 0x1E), /* VN219 */

	ILI9881C_COMMAND_INSTR(0xC7, 0x1D), /* VN203 */

	ILI9881C_COMMAND_INSTR(0xC8, 0x86), /* VN175 */

	ILI9881C_COMMAND_INSTR(0xC9, 0x1E), /* VN144 */

	ILI9881C_COMMAND_INSTR(0xCA, 0x29), /* VN111 */

	ILI9881C_COMMAND_INSTR(0xCB, 0x74), /* VN80 */

	ILI9881C_COMMAND_INSTR(0xCC, 0x19), /* VN52 */

	ILI9881C_COMMAND_INSTR(0xCD, 0x17), /* VN36 */

	ILI9881C_COMMAND_INSTR(0xCE, 0x4B), /* VN24 */

	ILI9881C_COMMAND_INSTR(0xCF, 0x20), /* VN16 */

	ILI9881C_COMMAND_INSTR(0xD0, 0x26), /* VN12 */

	ILI9881C_COMMAND_INSTR(0xD1, 0x4C), /* VN8 */

	ILI9881C_COMMAND_INSTR(0xD2, 0x5D), /* VN4 */

	ILI9881C_COMMAND_INSTR(0xD3, 0x3F), /* VN0 */

};



static const struct ili9881c_instr nwe080_init[] = {

	ILI9881C_SWITCH_PAGE_INSTR(3),//PAGE3

	ILI9881C_COMMAND_INSTR(0x01,0x00),

	ILI9881C_COMMAND_INSTR(0x02,0x00),

	ILI9881C_COMMAND_INSTR(0x03,0x53),    

	ILI9881C_COMMAND_INSTR(0x04,0x53),    

	ILI9881C_COMMAND_INSTR(0x05,0x13),

	ILI9881C_COMMAND_INSTR(0x06,0x04),

	ILI9881C_COMMAND_INSTR(0x07,0x02),

	ILI9881C_COMMAND_INSTR(0x08,0x02),

	ILI9881C_COMMAND_INSTR(0x09,0x00),

	ILI9881C_COMMAND_INSTR(0x0a,0x00),

	ILI9881C_COMMAND_INSTR(0x0b,0x00),

	ILI9881C_COMMAND_INSTR(0x0c,0x00),

	ILI9881C_COMMAND_INSTR(0x0d,0x00),

	ILI9881C_COMMAND_INSTR(0x0e,0x00),

	ILI9881C_COMMAND_INSTR(0x0f,0x00),

	ILI9881C_COMMAND_INSTR(0x10,0x00),

	ILI9881C_COMMAND_INSTR(0x11,0x00),

	ILI9881C_COMMAND_INSTR(0x12,0x00),

	ILI9881C_COMMAND_INSTR(0x13,0x00),

	ILI9881C_COMMAND_INSTR(0x14,0x00),

	ILI9881C_COMMAND_INSTR(0x15,0x00),

	ILI9881C_COMMAND_INSTR(0x16,0x00),

	ILI9881C_COMMAND_INSTR(0x17,0x00),

	ILI9881C_COMMAND_INSTR(0x18,0x00),

	ILI9881C_COMMAND_INSTR(0x19,0x00),

	ILI9881C_COMMAND_INSTR(0x1a,0x00),

	ILI9881C_COMMAND_INSTR(0x1b,0x00),

	ILI9881C_COMMAND_INSTR(0x1c,0x00),

	ILI9881C_COMMAND_INSTR(0x1d,0x00),

	ILI9881C_COMMAND_INSTR(0x1e,0xc0),

	ILI9881C_COMMAND_INSTR(0x1f,0x00),

	ILI9881C_COMMAND_INSTR(0x20,0x02),

	ILI9881C_COMMAND_INSTR(0x21,0x09),

	ILI9881C_COMMAND_INSTR(0x22,0x00),

	ILI9881C_COMMAND_INSTR(0x23,0x00),

	ILI9881C_COMMAND_INSTR(0x24,0x00),

	ILI9881C_COMMAND_INSTR(0x25,0x00),

	ILI9881C_COMMAND_INSTR(0x26,0x00),

	ILI9881C_COMMAND_INSTR(0x27,0x00),

	ILI9881C_COMMAND_INSTR(0x28,0x55),

	ILI9881C_COMMAND_INSTR(0x29,0x03),

	ILI9881C_COMMAND_INSTR(0x2a,0x00),

	ILI9881C_COMMAND_INSTR(0x2b,0x00),

	ILI9881C_COMMAND_INSTR(0x2c,0x00),

	ILI9881C_COMMAND_INSTR(0x2d,0x00),

	ILI9881C_COMMAND_INSTR(0x2e,0x00),

	ILI9881C_COMMAND_INSTR(0x2f,0x00),

	ILI9881C_COMMAND_INSTR(0x30,0x00),

	ILI9881C_COMMAND_INSTR(0x31,0x00),

	ILI9881C_COMMAND_INSTR(0x32,0x00),

	ILI9881C_COMMAND_INSTR(0x33,0x00),

	ILI9881C_COMMAND_INSTR(0x34,0x00),

	ILI9881C_COMMAND_INSTR(0x35,0x00),

	ILI9881C_COMMAND_INSTR(0x36,0x00),

	ILI9881C_COMMAND_INSTR(0x37,0x00),

	ILI9881C_COMMAND_INSTR(0x38,0x3C),

	ILI9881C_COMMAND_INSTR(0x39,0x00),

	ILI9881C_COMMAND_INSTR(0x3a,0x00),

	ILI9881C_COMMAND_INSTR(0x3b,0x00),

	ILI9881C_COMMAND_INSTR(0x3c,0x00),

	ILI9881C_COMMAND_INSTR(0x3d,0x00),

	ILI9881C_COMMAND_INSTR(0x3e,0x00),

	ILI9881C_COMMAND_INSTR(0x3f,0x00),

	ILI9881C_COMMAND_INSTR(0x40,0x00),

	ILI9881C_COMMAND_INSTR(0x41,0x00),

	ILI9881C_COMMAND_INSTR(0x42,0x00),

	ILI9881C_COMMAND_INSTR(0x43,0x00),

	ILI9881C_COMMAND_INSTR(0x44,0x00),

	ILI9881C_COMMAND_INSTR(0x45,0x00),



	ILI9881C_COMMAND_INSTR(0x50,0x01),

	ILI9881C_COMMAND_INSTR(0x51,0x23),

	ILI9881C_COMMAND_INSTR(0x52,0x45),

	ILI9881C_COMMAND_INSTR(0x53,0x67),

	ILI9881C_COMMAND_INSTR(0x54,0x89),

	ILI9881C_COMMAND_INSTR(0x55,0xab),

	ILI9881C_COMMAND_INSTR(0x56,0x01),

	ILI9881C_COMMAND_INSTR(0x57,0x23),

	ILI9881C_COMMAND_INSTR(0x58,0x45),

	ILI9881C_COMMAND_INSTR(0x59,0x67),

	ILI9881C_COMMAND_INSTR(0x5a,0x89),

	ILI9881C_COMMAND_INSTR(0x5b,0xab),

	ILI9881C_COMMAND_INSTR(0x5c,0xcd),

	ILI9881C_COMMAND_INSTR(0x5d,0xef),

	ILI9881C_COMMAND_INSTR(0x5e,0x01),

	ILI9881C_COMMAND_INSTR(0x5f,0x0A),     //FW_CGOUT_L[1] RESE_ODD

	ILI9881C_COMMAND_INSTR(0x60,0x02),     //FW_CGOUT_L[2] VSSG_ODD

	ILI9881C_COMMAND_INSTR(0x61,0x02),     //FW_CGOUT_L[3] VSSG_ODD

	ILI9881C_COMMAND_INSTR(0x62,0x08),     //FW_CGOUT_L[4] STV2_ODD

	ILI9881C_COMMAND_INSTR(0x63,0x15),     //FW_CGOUT_L[5] VDD2_ODD

	ILI9881C_COMMAND_INSTR(0x64,0x14),     //FW_CGOUT_L[6] VDD1_ODD

	ILI9881C_COMMAND_INSTR(0x65,0x02),     //FW_CGOUT_L[7]

	ILI9881C_COMMAND_INSTR(0x66,0x11),     //FW_CGOUT_L[8] CK11

	ILI9881C_COMMAND_INSTR(0x67,0x10),     //FW_CGOUT_L[9] CK9

	ILI9881C_COMMAND_INSTR(0x68,0x02),     //FW_CGOUT_L[10]

	ILI9881C_COMMAND_INSTR(0x69,0x0F),     //FW_CGOUT_L[11] CK7

	ILI9881C_COMMAND_INSTR(0x6a,0x0E),     //FW_CGOUT_L[12] CK5

	ILI9881C_COMMAND_INSTR(0x6b,0x02),     //FW_CGOUT_L[13]   

	ILI9881C_COMMAND_INSTR(0x6c,0x0D),     //FW_CGOUT_L[14] CK3  

	ILI9881C_COMMAND_INSTR(0x6d,0x0C),     //FW_CGOUT_L[15] CK1  

	ILI9881C_COMMAND_INSTR(0x6e,0x06),     //FW_CGOUT_L[16] STV1_ODD  

	ILI9881C_COMMAND_INSTR(0x6f,0x02),     //FW_CGOUT_L[17]   

	ILI9881C_COMMAND_INSTR(0x70,0x02),     //FW_CGOUT_L[18]   

	ILI9881C_COMMAND_INSTR(0x71,0x02),     //FW_CGOUT_L[19]   

	ILI9881C_COMMAND_INSTR(0x72,0x02),     //FW_CGOUT_L[20]   

	ILI9881C_COMMAND_INSTR(0x73,0x02),     //FW_CGOUT_L[21]   

	ILI9881C_COMMAND_INSTR(0x74,0x02),     //FW_CGOUT_L[22] 

	ILI9881C_COMMAND_INSTR(0x75,0x0A),     //BW_CGOUT_L[1]   RESE_ODD 

	ILI9881C_COMMAND_INSTR(0x76,0x02),     //BW_CGOUT_L[2]   VSSG_ODD 

	ILI9881C_COMMAND_INSTR(0x77,0x02),     //BW_CGOUT_L[3]   VSSG_ODD  

	ILI9881C_COMMAND_INSTR(0x78,0x06),     //BW_CGOUT_L[4]   STV2_ODD 

	ILI9881C_COMMAND_INSTR(0x79,0x15),     //BW_CGOUT_L[5]   VDD2_ODD 

	ILI9881C_COMMAND_INSTR(0x7a,0x14),     //BW_CGOUT_L[6]   VDD1_ODD 

	ILI9881C_COMMAND_INSTR(0x7b,0x02),     //BW_CGOUT_L[7]    

	ILI9881C_COMMAND_INSTR(0x7c,0x10),     //BW_CGOUT_L[8]   CK11 

	ILI9881C_COMMAND_INSTR(0x7d,0x11),     //BW_CGOUT_L[9]   CK9 

	ILI9881C_COMMAND_INSTR(0x7e,0x02),     //BW_CGOUT_L[10]   

	ILI9881C_COMMAND_INSTR(0x7f,0x0C),     //BW_CGOUT_L[11]  CK7

	ILI9881C_COMMAND_INSTR(0x80,0x0D),     //BW_CGOUT_L[12]  CK5 

	ILI9881C_COMMAND_INSTR(0x81,0x02),     //BW_CGOUT_L[13]   

	ILI9881C_COMMAND_INSTR(0x82,0x0E),     //BW_CGOUT_L[14]  CK3 

	ILI9881C_COMMAND_INSTR(0x83,0x0F),     //BW_CGOUT_L[15]  CK1 

	ILI9881C_COMMAND_INSTR(0x84,0x08),    //BW_CGOUT_L[16]  STV1_ODD 

	ILI9881C_COMMAND_INSTR(0x85,0x02),     //BW_CGOUT_L[17]   

	ILI9881C_COMMAND_INSTR(0x86,0x02),     //BW_CGOUT_L[18]   

	ILI9881C_COMMAND_INSTR(0x87,0x02),     //BW_CGOUT_L[19]   

	ILI9881C_COMMAND_INSTR(0x88,0x02),     //BW_CGOUT_L[20]   

	ILI9881C_COMMAND_INSTR(0x89,0x02),     //BW_CGOUT_L[21]   

	ILI9881C_COMMAND_INSTR(0x8A,0x02),     //BW_CGOUT_L[22]   



	ILI9881C_SWITCH_PAGE_INSTR(4),//PAGE4

	ILI9881C_COMMAND_INSTR(0x3B,0xC0),     // 4003 sel 

	ILI9881C_COMMAND_INSTR(0x6C,0x15),

	ILI9881C_COMMAND_INSTR(0x6E,0x30),     //VGH 16V

	ILI9881C_COMMAND_INSTR(0x6F,0x55),     //Pump ratio VGH=VSPX4 VGL=VSNX4

	ILI9881C_COMMAND_INSTR(0x3A,0x24),

	ILI9881C_COMMAND_INSTR(0x8D,0x1F),

	ILI9881C_COMMAND_INSTR(0x87,0xBA),

	ILI9881C_COMMAND_INSTR(0x26,0x76),

	ILI9881C_COMMAND_INSTR(0xB2,0xD1),

	ILI9881C_COMMAND_INSTR(0xB5,0x07),

	ILI9881C_COMMAND_INSTR(0x35,0x1F),

	ILI9881C_COMMAND_INSTR(0x88,0x0B),

	ILI9881C_COMMAND_INSTR(0x21,0x30),



	ILI9881C_SWITCH_PAGE_INSTR(1),//PAGE1

	ILI9881C_COMMAND_INSTR(0x22,0x0A),

	ILI9881C_COMMAND_INSTR(0x31,0x09),

	ILI9881C_COMMAND_INSTR(0x40,0x53),

	ILI9881C_COMMAND_INSTR(0x53,0x37),

	ILI9881C_COMMAND_INSTR(0x55,0x88),

	ILI9881C_COMMAND_INSTR(0x50,0x95),

	ILI9881C_COMMAND_INSTR(0x51,0x95),

	ILI9881C_COMMAND_INSTR(0x60,0x30),



	ILI9881C_SWITCH_PAGE_INSTR(0),//PAGE0

	ILI9881C_COMMAND_INSTR(0x11, 0x00),

	ILI9881C_COMMAND_INSTR(0x29, 0x00),

	ILI9881C_COMMAND_INSTR(0x35, 0x00),

};



static inline struct ili9881c *panel_to_ili9881c(struct drm_panel *panel)

{

	return container_of(panel, struct ili9881c, panel);

}



/*

 * The panel seems to accept some private DCS commands that map

 * directly to registers.

 *

 * It is organised by page, with each page having its own set of

 * registers, and the first page looks like it's holding the standard

 * DCS commands.

 *

 * So before any attempt at sending a command or data, we have to be

 * sure if we're in the right page or not.

 */

static int ili9881c_switch_page(struct ili9881c *ctx, u8 page)

{

	u8 buf[4] = { 0xff, 0x98, 0x81, page };

	int ret;



	ret = mipi_dsi_dcs_write_buffer(ctx->dsi, buf, sizeof(buf));

	if (ret < 0)

		return ret;



	return 0;

}



static int ili9881c_send_cmd_data(struct ili9881c *ctx, u8 cmd, u8 data)

{

	u8 buf[2] = { cmd, data };

	int ret;



	ret = mipi_dsi_dcs_write_buffer(ctx->dsi, buf, sizeof(buf));

	if (ret < 0)

		return ret;



	return 0;

}



static int ili9881c_prepare(struct drm_panel *panel)

{

	struct ili9881c *ctx = panel_to_ili9881c(panel);

	unsigned int i;

	int ret;



	/* Power the panel */

	ret = regulator_enable(ctx->power);

	if (ret)

		return ret;

	msleep(5);



	/* And reset_gpio it */

	gpiod_set_value(ctx->reset_gpio, 1);

	msleep(20);



	gpiod_set_value(ctx->reset_gpio, 0);

	msleep(100);

	

	gpiod_set_value(ctx->reset_gpio, 1);

	msleep(20);



	for (i = 0; i < ctx->desc->init_length; i++) {

		const struct ili9881c_instr *instr = &ctx->desc->init[i];



		if (instr->op == ILI9881C_SWITCH_PAGE)

			ret = ili9881c_switch_page(ctx, instr->arg.page);

		else if (instr->op == ILI9881C_COMMAND)

			ret = ili9881c_send_cmd_data(ctx, instr->arg.cmd.cmd,

						      instr->arg.cmd.data);



		if (ret)

			return ret;

	}



	ret = ili9881c_switch_page(ctx, 0);

	if (ret)

		return ret;



	ret = mipi_dsi_dcs_set_tear_on(ctx->dsi, MIPI_DSI_DCS_TEAR_MODE_VBLANK);

	if (ret)

		return ret;



	ret = mipi_dsi_dcs_exit_sleep_mode(ctx->dsi);

	if (ret)

		return ret;



	return 0;

}



static int ili9881c_enable(struct drm_panel *panel)

{

	struct ili9881c *ctx = panel_to_ili9881c(panel);



	msleep(120);



	mipi_dsi_dcs_set_display_on(ctx->dsi);



	return 0;

}



static int ili9881c_disable(struct drm_panel *panel)

{

	struct ili9881c *ctx = panel_to_ili9881c(panel);



	return mipi_dsi_dcs_set_display_off(ctx->dsi);

}



static int ili9881c_unprepare(struct drm_panel *panel)

{

	struct ili9881c *ctx = panel_to_ili9881c(panel);



	mipi_dsi_dcs_enter_sleep_mode(ctx->dsi);

	regulator_disable(ctx->power);

	gpiod_set_value(ctx->reset_gpio, 1);



	return 0;

}



static const struct drm_display_mode lhr050h41_default_mode = {

	.clock		= 62000,



	.hdisplay	= 720,

	.hsync_start	= 720 + 10,

	.hsync_end	= 720 + 10 + 20,

	.htotal		= 720 + 10 + 20 + 30,



	.vdisplay	= 1280,

	.vsync_start	= 1280 + 10,

	.vsync_end	= 1280 + 10 + 10,

	.vtotal		= 1280 + 10 + 10 + 20,



	.width_mm	= 62,

	.height_mm	= 110,

};



static const struct drm_display_mode k101_im2byl02_default_mode = {

	.clock		= 69700,



	.hdisplay	= 800,

	.hsync_start	= 800 + 52,

	.hsync_end	= 800 + 52 + 8,

	.htotal		= 800 + 52 + 8 + 48,



	.vdisplay	= 1280,

	.vsync_start	= 1280 + 16,

	.vsync_end	= 1280 + 16 + 6,

	.vtotal		= 1280 + 16 + 6 + 15,



	.width_mm	= 135,

	.height_mm	= 217,

};



static const struct drm_display_mode nwe080_default_mode = {

	.clock		= 70000,



	.hdisplay	= 800,

	.hsync_start	= 800 + 50,

	.hsync_end	= 800 + 50 + 6,

	.htotal		= 800 + 50 + 6 + 50,



	.vdisplay	= 1280,

	.vsync_start	= 1280 + 20,

	.vsync_end	= 1280 + 20 + 2,

	.vtotal		= 1280 + 20 + 2 + 20,



	.width_mm	= 68,

	.height_mm	= 121,



};



static int ili9881c_get_modes(struct drm_panel *panel,

			      struct drm_connector *connector)

{

	struct ili9881c *ctx = panel_to_ili9881c(panel);

	struct drm_display_mode *mode;



	mode = drm_mode_duplicate(connector->dev, ctx->desc->mode);

	if (!mode) {

		dev_err(&ctx->dsi->dev, "failed to add mode %ux%ux@%u\n",

			ctx->desc->mode->hdisplay,

			ctx->desc->mode->vdisplay,

			drm_mode_vrefresh(ctx->desc->mode));

		return -ENOMEM;

	}



	drm_mode_set_name(mode);



	mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;

	drm_mode_probed_add(connector, mode);



	connector->display_info.width_mm = mode->width_mm;

	connector->display_info.height_mm = mode->height_mm;



	return 1;

}



static const struct drm_panel_funcs ili9881c_funcs = {

	.prepare	= ili9881c_prepare,

	.unprepare	= ili9881c_unprepare,

	.enable		= ili9881c_enable,

	.disable	= ili9881c_disable,

	.get_modes	= ili9881c_get_modes,

};



static int ili9881c_dsi_probe(struct mipi_dsi_device *dsi)

{

	struct ili9881c *ctx;

	int ret;



	ctx = devm_kzalloc(&dsi->dev, sizeof(*ctx), GFP_KERNEL);

	if (!ctx)

		return -ENOMEM;

	mipi_dsi_set_drvdata(dsi, ctx);

	ctx->dsi = dsi;

	ctx->desc = of_device_get_match_data(&dsi->dev);



	ctx->panel.prepare_upstream_first = true;

	drm_panel_init(&ctx->panel, &dsi->dev, &ili9881c_funcs,

		       DRM_MODE_CONNECTOR_DSI);



	ctx->power = devm_regulator_get(&dsi->dev, "power");

	if (IS_ERR(ctx->power)) {

		dev_err(&dsi->dev, "Couldn't get our power regulator\n");

		return PTR_ERR(ctx->power);

	}



	ctx->reset_gpio = devm_gpiod_get(&dsi->dev, "reset", GPIOD_OUT_LOW);

	if (IS_ERR(ctx->reset_gpio)) {

		dev_err(&dsi->dev, "Couldn't get our reset GPIO\n");

		return PTR_ERR(ctx->reset_gpio);

	}



	ret = drm_panel_of_backlight(&ctx->panel);

	if (ret)

		return ret;



	drm_panel_add(&ctx->panel);



	dsi->mode_flags = ctx->desc->flags;

	dsi->format = MIPI_DSI_FMT_RGB888;

	dsi->lanes = 4;



	ret = mipi_dsi_attach(dsi);

	if (ret)

		drm_panel_remove(&ctx->panel);



	return ret;

}



static int ili9881c_dsi_remove(struct mipi_dsi_device *dsi)

{

	struct ili9881c *ctx = mipi_dsi_get_drvdata(dsi);



	mipi_dsi_detach(dsi);

	drm_panel_remove(&ctx->panel);



	return 0;

}



static const struct ili9881c_desc lhr050h41_desc = {

	.init = lhr050h41_init,

	.init_length = ARRAY_SIZE(lhr050h41_init),

	.mode = &lhr050h41_default_mode,

	.flags = MIPI_DSI_MODE_VIDEO_SYNC_PULSE,

};



static const struct ili9881c_desc k101_im2byl02_desc = {

	.init = k101_im2byl02_init,

	.init_length = ARRAY_SIZE(k101_im2byl02_init),

	.mode = &k101_im2byl02_default_mode,

	.flags = MIPI_DSI_MODE_VIDEO_SYNC_PULSE,

};



static const struct ili9881c_desc nwe080_desc = {

	.init = nwe080_init,

	.init_length = ARRAY_SIZE(nwe080_init),

	.mode = &nwe080_default_mode,

	.flags = MIPI_DSI_MODE_VIDEO_SYNC_PULSE | MIPI_DSI_MODE_VIDEO,

};



static const struct of_device_id ili9881c_of_match[] = {

	{ .compatible = "bananapi,lhr050h41", .data = &lhr050h41_desc },

	{ .compatible = "feixin,k101-im2byl02", .data = &k101_im2byl02_desc },

	{ .compatible = "nwe,nwe080", .data = &nwe080_desc },

	{}

};

MODULE_DEVICE_TABLE(of, ili9881c_of_match);



static struct mipi_dsi_driver ili9881c_dsi_driver = {

	.probe		= ili9881c_dsi_probe,

	.remove		= ili9881c_dsi_remove,

	.driver = {

		.name		= "ili9881c-dsi",

		.of_match_table	= ili9881c_of_match,

	},

};

module_mipi_dsi_driver(ili9881c_dsi_driver);



MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com>");

MODULE_DESCRIPTION("Ilitek ILI9881C Controller Driver");

MODULE_LICENSE("GPL v2");

dts code

Code: Select all

/dts-v1/;
/plugin/;

/ {
    compatible = "brcm,bcm2711";

    fragment@0 {
        target=<&dsi1>;

        __overlay__ {
            status = "okay";

            #address-cells = <1>;
            #size-cells = <0>;

            port {
                dsi1_out_port: endpoint {
                    remote-endpoint = <&panel_dsi_in1>;
                };
            };

            display1: panel@0 {
                compatible = "nwe,nwe080";
                reg=<0>;
                reset-gpios = <&gpio 6 0>;
                port {
                    panel_dsi_in1: endpoint {
                        remote-endpoint = <&dsi1_out_port>;
                    };
                };
            };
        };
    };

    fragment@1 {
        target = <&gpio>;
        __overlay__ {
            pwm_pins: pwm_pins {
                brcm,pins = <12>;
                brcm,function = <4>; // ALT0
            };
        };
    };

    fragment@2 {
        target = <&pwm>;
        frag1: __overlay__ {
            pinctrl-names = "default";
            pinctrl-0 = <&pwm_pins>;
            assigned-clock-rates = <1000000>;
            status = "okay";
        };
    };

    fragment@3 {
        target-path = "/";
        __overlay__ {
            rpi_backlight: rpi_backlight {
                compatible = "pwm-backlight";
                brightness-levels = <0 6 8 12 16 24 32 40 48 64 96 128 160 192 224 255>;
                default-brightness-level = <6>;
                pwms = <&pwm 0 200000>;
                power-supply = <&vdd_3v3_reg>;
                status = "okay";
            };
        };
    };

    fragment@4 {
        target = <&i2c6>;
        frag0: __overlay__ {
            status = "okay";
            pinctrl-names = "default";
            pinctrl-0 = <&i2c6_pins>;
            clock-frequency = <100000>;
        };
    };

    fragment@5 {
        target = <&i2c6_pins>;
        __dormant__ {
            brcm,pins = <0 1>;
        };
    };

    fragment@6 {
        target = <&i2c6_pins>;
        __overlay__ {
            brcm,pins = <22 23>;
        };
    };

    fragment@7 {
            target = <&gpio>;
            __overlay__ {
                goodix_pins: goodix_pins {
                    brcm,pins = <21 26>; // interrupt and reset
                    brcm,function = <0 0>; // in
                    brcm,pull = <2 2>; // pull-up
                };
            };
    };

    fragment@8 {
        target = <&i2c6>;
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;
            status = "okay";

            gt9xx: gt9xx@5d {
                compatible = "goodix,gt9271"; 
                reg = <0x5D>;
                pinctrl-names = "default";
                pinctrl-0 = <&goodix_pins>;
                interrupt-parent = <&gpio>;
                interrupts = <21 2>; // high-to-low edge triggered
                irq-gpios = <&gpio 21 0>; 
                reset-gpios = <&gpio 26 0>;
            };
        };
    };
};
so you have I2C interface for connecting a touch as well? Your PWM and reset signal is connected as shown in your overlay?
Why did you hack the driver instead of adding your init sequence to it? Is what's shown under nwe080 for your panel?

sunny2405
Posts: 13
Joined: Mon Jun 27, 2022 2:10 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Fri Jul 01, 2022 9:24 am

I tried to build a program with parameters from the company sent to
I did a kernel rebuild and edited the overlays and config files.
After rebooting I got the following message

Code: Select all

pi@raspberrypi:~ $ dmesg |grep vc4
[    6.290960] vc4-drm gpu: bound fe400000.hvs (ops vc4_hvs_ops [vc4])
[    6.293583] rc rc0: vc4 as /devices/platform/soc/fef00700.hdmi/rc/rc0
[    6.293810] input: vc4 as /devices/platform/soc/fef00700.hdmi/rc/rc0/input0
[    6.405919] vc4-drm gpu: bound fe400000.hvs (ops vc4_hvs_ops [vc4])
[    6.415622] rc rc0: vc4 as /devices/platform/soc/fef00700.hdmi/rc/rc0
[    6.415833] input: vc4 as /devices/platform/soc/fef00700.hdmi/rc/rc0/input1
[    6.423743] vc4-drm gpu: bound fef00700.hdmi (ops vc4_hdmi_ops [vc4])
[    6.451052] rc rc1: vc4 as /devices/platform/soc/fef05700.hdmi/rc/rc1
[    6.451276] input: vc4 as /devices/platform/soc/fef05700.hdmi/rc/rc1/input2
[    6.459228] vc4-drm gpu: bound fef05700.hdmi (ops vc4_hdmi_ops [vc4])
[    6.460665] vc4-drm gpu: bound fe700000.dsi (ops vc4_dsi_ops [vc4])
[    6.461087] vc4-drm gpu: bound fe004000.txp (ops vc4_txp_ops [vc4])
[    6.461415] vc4-drm gpu: bound fe206000.pixelvalve (ops vc4_crtc_ops [vc4])
[    6.461726] vc4-drm gpu: bound fe207000.pixelvalve (ops vc4_crtc_ops [vc4])
[    6.462021] vc4-drm gpu: bound fe20a000.pixelvalve (ops vc4_crtc_ops [vc4])
[    6.462296] vc4-drm gpu: bound fe216000.pixelvalve (ops vc4_crtc_ops [vc4])
[    6.462590] vc4-drm gpu: bound fec12000.pixelvalve (ops vc4_crtc_ops [vc4])
[    6.505940] [drm] Initialized vc4 0.0.0 20140616 for gpu on minor 1
[    6.840774] vc4-drm gpu: [drm] fb0: vc4drmfb frame buffer device
pi@raspberrypi:~ $ dmesg |grep dsi
[    0.095410] platform fe700000.dsi: Fixing up cyclic dependency with fe101000.cprman
[    6.287899] ili9881c-dsi fe700000.dsi.0: supply power not found, using dummy regulator
[    6.404154] ili9881c-dsi fe700000.dsi.0: supply power not found, using dummy regulator
[    6.460665] vc4-drm gpu: bound fe700000.dsi (ops vc4_dsi_ops [vc4])
Here is my program built from ili9881c with Linux raspberrypi 5.15.50-v8+ #1 SMP PREEMPT Fri Jul 1 12:52:50 +07 2022 aarch64 GNU/Linux

Code: Select all

// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright (C) 2017-2018, Bootlin
 * Copyright (C) 2021, Henson Li <henson@cutiepi.io>
 * Copyright (C) 2021, Penk Chen <penk@cutiepi.io>
 * Copyright (C) 2021, Minato <hungdv@selex.vn>
 */

#include <linux/delay.h>
#include <linux/device.h>
#include <linux/err.h>
#include <linux/errno.h>
#include <linux/fb.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/of_device.h>

#include <linux/gpio/consumer.h>
#include <linux/regulator/consumer.h>

#include <drm/drm_mipi_dsi.h>
#include <drm/drm_modes.h>
#include <drm/drm_panel.h>

#include <video/mipi_display.h>

enum ili9881c_op {
	ILI9881C_SWITCH_PAGE,
	ILI9881C_COMMAND,
};

struct ili9881c_instr {
	enum ili9881c_op	op;

	union arg {
		struct cmd {
			u8	cmd;
			u8	data;
		} cmd;
		u8	page;
	} arg;
};

struct ili9881c_desc {
	const struct ili9881c_instr *init;
	const size_t init_length;
	const struct drm_display_mode *mode;
	const unsigned flags;
};

struct ili9881c {
	struct drm_panel	panel;
	struct mipi_dsi_device	*dsi;
	const struct ili9881c_desc	*desc;

	struct regulator	*power;
	struct gpio_desc	*reset_gpio;
};

#define ILI9881C_SWITCH_PAGE_INSTR(_page)	\
	{					\
		.op = ILI9881C_SWITCH_PAGE,	\
		.arg = {			\
			.page = (_page),	\
		},				\
	}

#define ILI9881C_COMMAND_INSTR(_cmd, _data)		\
	{						\
		.op = ILI9881C_COMMAND,		\
		.arg = {				\
			.cmd = {			\
				.cmd = (_cmd),		\
				.data = (_data),	\
			},				\
		},					\
	}

static const struct ili9881c_instr lhr050h41_init[] = {
	ILI9881C_SWITCH_PAGE_INSTR(3),
	ILI9881C_COMMAND_INSTR(0x01, 0x00),
	ILI9881C_COMMAND_INSTR(0x02, 0x00),
	ILI9881C_COMMAND_INSTR(0x03, 0x73),
	ILI9881C_COMMAND_INSTR(0x04, 0x03),
	ILI9881C_COMMAND_INSTR(0x05, 0x00),
	ILI9881C_COMMAND_INSTR(0x06, 0x06),
	ILI9881C_COMMAND_INSTR(0x07, 0x06),
	ILI9881C_COMMAND_INSTR(0x08, 0x00),
	ILI9881C_COMMAND_INSTR(0x09, 0x18),
	ILI9881C_COMMAND_INSTR(0x0a, 0x04),
	ILI9881C_COMMAND_INSTR(0x0b, 0x00),
	ILI9881C_COMMAND_INSTR(0x0c, 0x02),
	ILI9881C_COMMAND_INSTR(0x0d, 0x03),
	ILI9881C_COMMAND_INSTR(0x0e, 0x00),
	ILI9881C_COMMAND_INSTR(0x0f, 0x25),
	ILI9881C_COMMAND_INSTR(0x10, 0x25),
	ILI9881C_COMMAND_INSTR(0x11, 0x00),
	ILI9881C_COMMAND_INSTR(0x12, 0x00),
	ILI9881C_COMMAND_INSTR(0x13, 0x00),
	ILI9881C_COMMAND_INSTR(0x14, 0x00),
	ILI9881C_COMMAND_INSTR(0x15, 0x00),
	ILI9881C_COMMAND_INSTR(0x16, 0x0C),
	ILI9881C_COMMAND_INSTR(0x17, 0x00),
	ILI9881C_COMMAND_INSTR(0x18, 0x00),
	ILI9881C_COMMAND_INSTR(0x19, 0x00),
	ILI9881C_COMMAND_INSTR(0x1a, 0x00),
	ILI9881C_COMMAND_INSTR(0x1b, 0x00),
	ILI9881C_COMMAND_INSTR(0x1c, 0x00),
	ILI9881C_COMMAND_INSTR(0x1d, 0x00),
	ILI9881C_COMMAND_INSTR(0x1e, 0xC0),
	ILI9881C_COMMAND_INSTR(0x1f, 0x80),
	ILI9881C_COMMAND_INSTR(0x20, 0x04),
	ILI9881C_COMMAND_INSTR(0x21, 0x01),
	ILI9881C_COMMAND_INSTR(0x22, 0x00),
	ILI9881C_COMMAND_INSTR(0x23, 0x00),
	ILI9881C_COMMAND_INSTR(0x24, 0x00),
	ILI9881C_COMMAND_INSTR(0x25, 0x00),
	ILI9881C_COMMAND_INSTR(0x26, 0x00),
	ILI9881C_COMMAND_INSTR(0x27, 0x00),
	ILI9881C_COMMAND_INSTR(0x28, 0x33),
	ILI9881C_COMMAND_INSTR(0x29, 0x03),
	ILI9881C_COMMAND_INSTR(0x2a, 0x00),
	ILI9881C_COMMAND_INSTR(0x2b, 0x00),
	ILI9881C_COMMAND_INSTR(0x2c, 0x00),
	ILI9881C_COMMAND_INSTR(0x2d, 0x00),
	ILI9881C_COMMAND_INSTR(0x2e, 0x00),
	ILI9881C_COMMAND_INSTR(0x2f, 0x00),
	ILI9881C_COMMAND_INSTR(0x30, 0x00),
	ILI9881C_COMMAND_INSTR(0x31, 0x00),
	ILI9881C_COMMAND_INSTR(0x32, 0x00),
	ILI9881C_COMMAND_INSTR(0x33, 0x00),
	ILI9881C_COMMAND_INSTR(0x34, 0x04),
	ILI9881C_COMMAND_INSTR(0x35, 0x00),
	ILI9881C_COMMAND_INSTR(0x36, 0x00),
	ILI9881C_COMMAND_INSTR(0x37, 0x00),
	ILI9881C_COMMAND_INSTR(0x38, 0x3C),
	ILI9881C_COMMAND_INSTR(0x39, 0x00),
	ILI9881C_COMMAND_INSTR(0x3a, 0x00),
	ILI9881C_COMMAND_INSTR(0x3b, 0x00),
	ILI9881C_COMMAND_INSTR(0x3c, 0x00),
	ILI9881C_COMMAND_INSTR(0x3d, 0x00),
	ILI9881C_COMMAND_INSTR(0x3e, 0x00),
	ILI9881C_COMMAND_INSTR(0x3f, 0x00),
	ILI9881C_COMMAND_INSTR(0x40, 0x00),
	ILI9881C_COMMAND_INSTR(0x41, 0x00),
	ILI9881C_COMMAND_INSTR(0x42, 0x00),
	ILI9881C_COMMAND_INSTR(0x43, 0x00),
	ILI9881C_COMMAND_INSTR(0x44, 0x00),
	ILI9881C_COMMAND_INSTR(0x50, 0x01),
	ILI9881C_COMMAND_INSTR(0x51, 0x23),
	ILI9881C_COMMAND_INSTR(0x52, 0x45),
	ILI9881C_COMMAND_INSTR(0x53, 0x67),
	ILI9881C_COMMAND_INSTR(0x54, 0x89),
	ILI9881C_COMMAND_INSTR(0x55, 0xab),
	ILI9881C_COMMAND_INSTR(0x56, 0x01),
	ILI9881C_COMMAND_INSTR(0x57, 0x23),
	ILI9881C_COMMAND_INSTR(0x58, 0x45),
	ILI9881C_COMMAND_INSTR(0x59, 0x67),
	ILI9881C_COMMAND_INSTR(0x5a, 0x89),
	ILI9881C_COMMAND_INSTR(0x5b, 0xab),
	ILI9881C_COMMAND_INSTR(0x5c, 0xcd),
	ILI9881C_COMMAND_INSTR(0x5d, 0xef),
	ILI9881C_COMMAND_INSTR(0x5e, 0x11),
	ILI9881C_COMMAND_INSTR(0x5f, 0x02),
	ILI9881C_COMMAND_INSTR(0x60, 0x02),
	ILI9881C_COMMAND_INSTR(0x61, 0x02),
	ILI9881C_COMMAND_INSTR(0x62, 0x02),
	ILI9881C_COMMAND_INSTR(0x63, 0x02),
	ILI9881C_COMMAND_INSTR(0x64, 0x02),
	ILI9881C_COMMAND_INSTR(0x65, 0x02),
	ILI9881C_COMMAND_INSTR(0x66, 0x02),
	ILI9881C_COMMAND_INSTR(0x67, 0x02),
	ILI9881C_COMMAND_INSTR(0x68, 0x02),
	ILI9881C_COMMAND_INSTR(0x69, 0x02),
	ILI9881C_COMMAND_INSTR(0x6a, 0x0C),
	ILI9881C_COMMAND_INSTR(0x6b, 0x02),
	ILI9881C_COMMAND_INSTR(0x6c, 0x0F),
	ILI9881C_COMMAND_INSTR(0x6d, 0x0E),
	ILI9881C_COMMAND_INSTR(0x6e, 0x0D),
	ILI9881C_COMMAND_INSTR(0x6f, 0x06),
	ILI9881C_COMMAND_INSTR(0x70, 0x07),
	ILI9881C_COMMAND_INSTR(0x71, 0x02),
	ILI9881C_COMMAND_INSTR(0x72, 0x02),
	ILI9881C_COMMAND_INSTR(0x73, 0x02),
	ILI9881C_COMMAND_INSTR(0x74, 0x02),
	ILI9881C_COMMAND_INSTR(0x75, 0x02),
	ILI9881C_COMMAND_INSTR(0x76, 0x02),
	ILI9881C_COMMAND_INSTR(0x77, 0x02),
	ILI9881C_COMMAND_INSTR(0x78, 0x02),
	ILI9881C_COMMAND_INSTR(0x79, 0x02),
	ILI9881C_COMMAND_INSTR(0x7a, 0x02),
	ILI9881C_COMMAND_INSTR(0x7b, 0x02),
	ILI9881C_COMMAND_INSTR(0x7c, 0x02),
	ILI9881C_COMMAND_INSTR(0x7d, 0x02),
	ILI9881C_COMMAND_INSTR(0x7e, 0x02),
	ILI9881C_COMMAND_INSTR(0x7f, 0x02),
	ILI9881C_COMMAND_INSTR(0x80, 0x0C),
	ILI9881C_COMMAND_INSTR(0x81, 0x02),
	ILI9881C_COMMAND_INSTR(0x82, 0x0F),
	ILI9881C_COMMAND_INSTR(0x83, 0x0E),
	ILI9881C_COMMAND_INSTR(0x84, 0x0D),
	ILI9881C_COMMAND_INSTR(0x85, 0x06),
	ILI9881C_COMMAND_INSTR(0x86, 0x07),
	ILI9881C_COMMAND_INSTR(0x87, 0x02),
	ILI9881C_COMMAND_INSTR(0x88, 0x02),
	ILI9881C_COMMAND_INSTR(0x89, 0x02),
	ILI9881C_COMMAND_INSTR(0x8A, 0x02),
	ILI9881C_SWITCH_PAGE_INSTR(4),
	ILI9881C_COMMAND_INSTR(0x6C, 0x15),
	ILI9881C_COMMAND_INSTR(0x6E, 0x22),
	ILI9881C_COMMAND_INSTR(0x6F, 0x33),
	ILI9881C_COMMAND_INSTR(0x3A, 0xA4),
	ILI9881C_COMMAND_INSTR(0x8D, 0x0D),
	ILI9881C_COMMAND_INSTR(0x87, 0xBA),
	ILI9881C_COMMAND_INSTR(0x26, 0x76),
	ILI9881C_COMMAND_INSTR(0xB2, 0xD1),
	ILI9881C_SWITCH_PAGE_INSTR(1),
	ILI9881C_COMMAND_INSTR(0x22, 0x0A),
	ILI9881C_COMMAND_INSTR(0x53, 0xDC),
	ILI9881C_COMMAND_INSTR(0x55, 0xA7),
	ILI9881C_COMMAND_INSTR(0x50, 0x78),
	ILI9881C_COMMAND_INSTR(0x51, 0x78),
	ILI9881C_COMMAND_INSTR(0x31, 0x02),
	ILI9881C_COMMAND_INSTR(0x60, 0x14),
	ILI9881C_COMMAND_INSTR(0xA0, 0x2A),
	ILI9881C_COMMAND_INSTR(0xA1, 0x39),
	ILI9881C_COMMAND_INSTR(0xA2, 0x46),
	ILI9881C_COMMAND_INSTR(0xA3, 0x0e),
	ILI9881C_COMMAND_INSTR(0xA4, 0x12),
	ILI9881C_COMMAND_INSTR(0xA5, 0x25),
	ILI9881C_COMMAND_INSTR(0xA6, 0x19),
	ILI9881C_COMMAND_INSTR(0xA7, 0x1d),
	ILI9881C_COMMAND_INSTR(0xA8, 0xa6),
	ILI9881C_COMMAND_INSTR(0xA9, 0x1C),
	ILI9881C_COMMAND_INSTR(0xAA, 0x29),
	ILI9881C_COMMAND_INSTR(0xAB, 0x85),
	ILI9881C_COMMAND_INSTR(0xAC, 0x1C),
	ILI9881C_COMMAND_INSTR(0xAD, 0x1B),
	ILI9881C_COMMAND_INSTR(0xAE, 0x51),
	ILI9881C_COMMAND_INSTR(0xAF, 0x22),
	ILI9881C_COMMAND_INSTR(0xB0, 0x2d),
	ILI9881C_COMMAND_INSTR(0xB1, 0x4f),
	ILI9881C_COMMAND_INSTR(0xB2, 0x59),
	ILI9881C_COMMAND_INSTR(0xB3, 0x3F),
	ILI9881C_COMMAND_INSTR(0xC0, 0x2A),
	ILI9881C_COMMAND_INSTR(0xC1, 0x3a),
	ILI9881C_COMMAND_INSTR(0xC2, 0x45),
	ILI9881C_COMMAND_INSTR(0xC3, 0x0e),
	ILI9881C_COMMAND_INSTR(0xC4, 0x11),
	ILI9881C_COMMAND_INSTR(0xC5, 0x24),
	ILI9881C_COMMAND_INSTR(0xC6, 0x1a),
	ILI9881C_COMMAND_INSTR(0xC7, 0x1c),
	ILI9881C_COMMAND_INSTR(0xC8, 0xaa),
	ILI9881C_COMMAND_INSTR(0xC9, 0x1C),
	ILI9881C_COMMAND_INSTR(0xCA, 0x29),
	ILI9881C_COMMAND_INSTR(0xCB, 0x96),
	ILI9881C_COMMAND_INSTR(0xCC, 0x1C),
	ILI9881C_COMMAND_INSTR(0xCD, 0x1B),
	ILI9881C_COMMAND_INSTR(0xCE, 0x51),
	ILI9881C_COMMAND_INSTR(0xCF, 0x22),
	ILI9881C_COMMAND_INSTR(0xD0, 0x2b),
	ILI9881C_COMMAND_INSTR(0xD1, 0x4b),
	ILI9881C_COMMAND_INSTR(0xD2, 0x59),
	ILI9881C_COMMAND_INSTR(0xD3, 0x3F),
};

static const struct ili9881c_instr k101_im2byl02_init[] = {
	ILI9881C_SWITCH_PAGE_INSTR(3),
	ILI9881C_COMMAND_INSTR(0x01, 0x00),
	ILI9881C_COMMAND_INSTR(0x02, 0x00),
	ILI9881C_COMMAND_INSTR(0x03, 0x73),
	ILI9881C_COMMAND_INSTR(0x04, 0x00),
	ILI9881C_COMMAND_INSTR(0x05, 0x00),
	ILI9881C_COMMAND_INSTR(0x06, 0x08),
	ILI9881C_COMMAND_INSTR(0x07, 0x00),
	ILI9881C_COMMAND_INSTR(0x08, 0x00),
	ILI9881C_COMMAND_INSTR(0x09, 0x00),
	ILI9881C_COMMAND_INSTR(0x0A, 0x01),
	ILI9881C_COMMAND_INSTR(0x0B, 0x01),
	ILI9881C_COMMAND_INSTR(0x0C, 0x00),
	ILI9881C_COMMAND_INSTR(0x0D, 0x01),
	ILI9881C_COMMAND_INSTR(0x0E, 0x01),
	ILI9881C_COMMAND_INSTR(0x0F, 0x00),
	ILI9881C_COMMAND_INSTR(0x10, 0x00),
	ILI9881C_COMMAND_INSTR(0x11, 0x00),
	ILI9881C_COMMAND_INSTR(0x12, 0x00),
	ILI9881C_COMMAND_INSTR(0x13, 0x00),
	ILI9881C_COMMAND_INSTR(0x14, 0x00),
	ILI9881C_COMMAND_INSTR(0x15, 0x00),
	ILI9881C_COMMAND_INSTR(0x16, 0x00),
	ILI9881C_COMMAND_INSTR(0x17, 0x00),
	ILI9881C_COMMAND_INSTR(0x18, 0x00),
	ILI9881C_COMMAND_INSTR(0x19, 0x00),
	ILI9881C_COMMAND_INSTR(0x1A, 0x00),
	ILI9881C_COMMAND_INSTR(0x1B, 0x00),
	ILI9881C_COMMAND_INSTR(0x1C, 0x00),
	ILI9881C_COMMAND_INSTR(0x1D, 0x00),
	ILI9881C_COMMAND_INSTR(0x1E, 0x40),
	ILI9881C_COMMAND_INSTR(0x1F, 0xC0),
	ILI9881C_COMMAND_INSTR(0x20, 0x06),
	ILI9881C_COMMAND_INSTR(0x21, 0x01),
	ILI9881C_COMMAND_INSTR(0x22, 0x06),
	ILI9881C_COMMAND_INSTR(0x23, 0x01),
	ILI9881C_COMMAND_INSTR(0x24, 0x88),
	ILI9881C_COMMAND_INSTR(0x25, 0x88),
	ILI9881C_COMMAND_INSTR(0x26, 0x00),
	ILI9881C_COMMAND_INSTR(0x27, 0x00),
	ILI9881C_COMMAND_INSTR(0x28, 0x3B),
	ILI9881C_COMMAND_INSTR(0x29, 0x03),
	ILI9881C_COMMAND_INSTR(0x2A, 0x00),
	ILI9881C_COMMAND_INSTR(0x2B, 0x00),
	ILI9881C_COMMAND_INSTR(0x2C, 0x00),
	ILI9881C_COMMAND_INSTR(0x2D, 0x00),
	ILI9881C_COMMAND_INSTR(0x2E, 0x00),
	ILI9881C_COMMAND_INSTR(0x2F, 0x00),
	ILI9881C_COMMAND_INSTR(0x30, 0x00),
	ILI9881C_COMMAND_INSTR(0x31, 0x00),
	ILI9881C_COMMAND_INSTR(0x32, 0x00),
	ILI9881C_COMMAND_INSTR(0x33, 0x00),
	ILI9881C_COMMAND_INSTR(0x34, 0x00), /* GPWR1/2 non overlap time 2.62us */
	ILI9881C_COMMAND_INSTR(0x35, 0x00),
	ILI9881C_COMMAND_INSTR(0x36, 0x00),
	ILI9881C_COMMAND_INSTR(0x37, 0x00),
	ILI9881C_COMMAND_INSTR(0x38, 0x00),
	ILI9881C_COMMAND_INSTR(0x39, 0x00),
	ILI9881C_COMMAND_INSTR(0x3A, 0x00),
	ILI9881C_COMMAND_INSTR(0x3B, 0x00),
	ILI9881C_COMMAND_INSTR(0x3C, 0x00),
	ILI9881C_COMMAND_INSTR(0x3D, 0x00),
	ILI9881C_COMMAND_INSTR(0x3E, 0x00),
	ILI9881C_COMMAND_INSTR(0x3F, 0x00),
	ILI9881C_COMMAND_INSTR(0x40, 0x00),
	ILI9881C_COMMAND_INSTR(0x41, 0x00),
	ILI9881C_COMMAND_INSTR(0x42, 0x00),
	ILI9881C_COMMAND_INSTR(0x43, 0x00),
	ILI9881C_COMMAND_INSTR(0x44, 0x00),
	ILI9881C_COMMAND_INSTR(0x50, 0x01),
	ILI9881C_COMMAND_INSTR(0x51, 0x23),
	ILI9881C_COMMAND_INSTR(0x52, 0x45),
	ILI9881C_COMMAND_INSTR(0x53, 0x67),
	ILI9881C_COMMAND_INSTR(0x54, 0x89),
	ILI9881C_COMMAND_INSTR(0x55, 0xAB),
	ILI9881C_COMMAND_INSTR(0x56, 0x01),
	ILI9881C_COMMAND_INSTR(0x57, 0x23),
	ILI9881C_COMMAND_INSTR(0x58, 0x45),
	ILI9881C_COMMAND_INSTR(0x59, 0x67),
	ILI9881C_COMMAND_INSTR(0x5A, 0x89),
	ILI9881C_COMMAND_INSTR(0x5B, 0xAB),
	ILI9881C_COMMAND_INSTR(0x5C, 0xCD),
	ILI9881C_COMMAND_INSTR(0x5D, 0xEF),
	ILI9881C_COMMAND_INSTR(0x5E, 0x00),
	ILI9881C_COMMAND_INSTR(0x5F, 0x01),
	ILI9881C_COMMAND_INSTR(0x60, 0x01),
	ILI9881C_COMMAND_INSTR(0x61, 0x06),
	ILI9881C_COMMAND_INSTR(0x62, 0x06),
	ILI9881C_COMMAND_INSTR(0x63, 0x07),
	ILI9881C_COMMAND_INSTR(0x64, 0x07),
	ILI9881C_COMMAND_INSTR(0x65, 0x00),
	ILI9881C_COMMAND_INSTR(0x66, 0x00),
	ILI9881C_COMMAND_INSTR(0x67, 0x02),
	ILI9881C_COMMAND_INSTR(0x68, 0x02),
	ILI9881C_COMMAND_INSTR(0x69, 0x05),
	ILI9881C_COMMAND_INSTR(0x6A, 0x05),
	ILI9881C_COMMAND_INSTR(0x6B, 0x02),
	ILI9881C_COMMAND_INSTR(0x6C, 0x0D),
	ILI9881C_COMMAND_INSTR(0x6D, 0x0D),
	ILI9881C_COMMAND_INSTR(0x6E, 0x0C),
	ILI9881C_COMMAND_INSTR(0x6F, 0x0C),
	ILI9881C_COMMAND_INSTR(0x70, 0x0F),
	ILI9881C_COMMAND_INSTR(0x71, 0x0F),
	ILI9881C_COMMAND_INSTR(0x72, 0x0E),
	ILI9881C_COMMAND_INSTR(0x73, 0x0E),
	ILI9881C_COMMAND_INSTR(0x74, 0x02),
	ILI9881C_COMMAND_INSTR(0x75, 0x01),
	ILI9881C_COMMAND_INSTR(0x76, 0x01),
	ILI9881C_COMMAND_INSTR(0x77, 0x06),
	ILI9881C_COMMAND_INSTR(0x78, 0x06),
	ILI9881C_COMMAND_INSTR(0x79, 0x07),
	ILI9881C_COMMAND_INSTR(0x7A, 0x07),
	ILI9881C_COMMAND_INSTR(0x7B, 0x00),
	ILI9881C_COMMAND_INSTR(0x7C, 0x00),
	ILI9881C_COMMAND_INSTR(0x7D, 0x02),
	ILI9881C_COMMAND_INSTR(0x7E, 0x02),
	ILI9881C_COMMAND_INSTR(0x7F, 0x05),
	ILI9881C_COMMAND_INSTR(0x80, 0x05),
	ILI9881C_COMMAND_INSTR(0x81, 0x02),
	ILI9881C_COMMAND_INSTR(0x82, 0x0D),
	ILI9881C_COMMAND_INSTR(0x83, 0x0D),
	ILI9881C_COMMAND_INSTR(0x84, 0x0C),
	ILI9881C_COMMAND_INSTR(0x85, 0x0C),
	ILI9881C_COMMAND_INSTR(0x86, 0x0F),
	ILI9881C_COMMAND_INSTR(0x87, 0x0F),
	ILI9881C_COMMAND_INSTR(0x88, 0x0E),
	ILI9881C_COMMAND_INSTR(0x89, 0x0E),
	ILI9881C_COMMAND_INSTR(0x8A, 0x02),
	ILI9881C_SWITCH_PAGE_INSTR(4),
	ILI9881C_COMMAND_INSTR(0x3B, 0xC0), /* ILI4003D sel */
	ILI9881C_COMMAND_INSTR(0x6C, 0x15), /* Set VCORE voltage = 1.5V */
	ILI9881C_COMMAND_INSTR(0x6E, 0x2A), /* di_pwr_reg=0 for power mode 2A, VGH clamp 18V */
	ILI9881C_COMMAND_INSTR(0x6F, 0x33), /* pumping ratio VGH=5x VGL=-3x */
	ILI9881C_COMMAND_INSTR(0x8D, 0x1B), /* VGL clamp -10V */
	ILI9881C_COMMAND_INSTR(0x87, 0xBA), /* ESD */
	ILI9881C_COMMAND_INSTR(0x3A, 0x24), /* POWER SAVING */
	ILI9881C_COMMAND_INSTR(0x26, 0x76),
	ILI9881C_COMMAND_INSTR(0xB2, 0xD1),
	ILI9881C_SWITCH_PAGE_INSTR(1),
	ILI9881C_COMMAND_INSTR(0x22, 0x0A), /* BGR, SS */
	ILI9881C_COMMAND_INSTR(0x31, 0x00), /* Zigzag type3 inversion */
	ILI9881C_COMMAND_INSTR(0x40, 0x53), /* ILI4003D sel */
	ILI9881C_COMMAND_INSTR(0x43, 0x66),
	ILI9881C_COMMAND_INSTR(0x53, 0x4C),
	ILI9881C_COMMAND_INSTR(0x50, 0x87),
	ILI9881C_COMMAND_INSTR(0x51, 0x82),
	ILI9881C_COMMAND_INSTR(0x60, 0x15),
	ILI9881C_COMMAND_INSTR(0x61, 0x01),
	ILI9881C_COMMAND_INSTR(0x62, 0x0C),
	ILI9881C_COMMAND_INSTR(0x63, 0x00),
	ILI9881C_COMMAND_INSTR(0xA0, 0x00),
	ILI9881C_COMMAND_INSTR(0xA1, 0x13), /* VP251 */
	ILI9881C_COMMAND_INSTR(0xA2, 0x23), /* VP247 */
	ILI9881C_COMMAND_INSTR(0xA3, 0x14), /* VP243 */
	ILI9881C_COMMAND_INSTR(0xA4, 0x16), /* VP239 */
	ILI9881C_COMMAND_INSTR(0xA5, 0x29), /* VP231 */
	ILI9881C_COMMAND_INSTR(0xA6, 0x1E), /* VP219 */
	ILI9881C_COMMAND_INSTR(0xA7, 0x1D), /* VP203 */
	ILI9881C_COMMAND_INSTR(0xA8, 0x86), /* VP175 */
	ILI9881C_COMMAND_INSTR(0xA9, 0x1E), /* VP144 */
	ILI9881C_COMMAND_INSTR(0xAA, 0x29), /* VP111 */
	ILI9881C_COMMAND_INSTR(0xAB, 0x74), /* VP80 */
	ILI9881C_COMMAND_INSTR(0xAC, 0x19), /* VP52 */
	ILI9881C_COMMAND_INSTR(0xAD, 0x17), /* VP36 */
	ILI9881C_COMMAND_INSTR(0xAE, 0x4B), /* VP24 */
	ILI9881C_COMMAND_INSTR(0xAF, 0x20), /* VP16 */
	ILI9881C_COMMAND_INSTR(0xB0, 0x26), /* VP12 */
	ILI9881C_COMMAND_INSTR(0xB1, 0x4C), /* VP8 */
	ILI9881C_COMMAND_INSTR(0xB2, 0x5D), /* VP4 */
	ILI9881C_COMMAND_INSTR(0xB3, 0x3F), /* VP0 */
	ILI9881C_COMMAND_INSTR(0xC0, 0x00), /* VN255 GAMMA N */
	ILI9881C_COMMAND_INSTR(0xC1, 0x13), /* VN251 */
	ILI9881C_COMMAND_INSTR(0xC2, 0x23), /* VN247 */
	ILI9881C_COMMAND_INSTR(0xC3, 0x14), /* VN243 */
	ILI9881C_COMMAND_INSTR(0xC4, 0x16), /* VN239 */
	ILI9881C_COMMAND_INSTR(0xC5, 0x29), /* VN231 */
	ILI9881C_COMMAND_INSTR(0xC6, 0x1E), /* VN219 */
	ILI9881C_COMMAND_INSTR(0xC7, 0x1D), /* VN203 */
	ILI9881C_COMMAND_INSTR(0xC8, 0x86), /* VN175 */
	ILI9881C_COMMAND_INSTR(0xC9, 0x1E), /* VN144 */
	ILI9881C_COMMAND_INSTR(0xCA, 0x29), /* VN111 */
	ILI9881C_COMMAND_INSTR(0xCB, 0x74), /* VN80 */
	ILI9881C_COMMAND_INSTR(0xCC, 0x19), /* VN52 */
	ILI9881C_COMMAND_INSTR(0xCD, 0x17), /* VN36 */
	ILI9881C_COMMAND_INSTR(0xCE, 0x4B), /* VN24 */
	ILI9881C_COMMAND_INSTR(0xCF, 0x20), /* VN16 */
	ILI9881C_COMMAND_INSTR(0xD0, 0x26), /* VN12 */
	ILI9881C_COMMAND_INSTR(0xD1, 0x4C), /* VN8 */
	ILI9881C_COMMAND_INSTR(0xD2, 0x5D), /* VN4 */
	ILI9881C_COMMAND_INSTR(0xD3, 0x3F), /* VN0 */
};

static const struct ili9881c_instr tl101wxv35_init[] = {
	ILI9881C_SWITCH_PAGE_INSTR(3),//PAGE3
	ILI9881C_COMMAND_INSTR(0x01,0x00),
	ILI9881C_COMMAND_INSTR(0x02,0x00),
	ILI9881C_COMMAND_INSTR(0x03,0x53),    
	ILI9881C_COMMAND_INSTR(0x04,0x53),    
	ILI9881C_COMMAND_INSTR(0x05,0x13),
	ILI9881C_COMMAND_INSTR(0x06,0x04),
	ILI9881C_COMMAND_INSTR(0x07,0x02),
	ILI9881C_COMMAND_INSTR(0x08,0x02),
	ILI9881C_COMMAND_INSTR(0x09,0x00),
	ILI9881C_COMMAND_INSTR(0x0a,0x00),
	ILI9881C_COMMAND_INSTR(0x0b,0x00),
	ILI9881C_COMMAND_INSTR(0x0c,0x00),
	ILI9881C_COMMAND_INSTR(0x0d,0x00),
	ILI9881C_COMMAND_INSTR(0x0e,0x00),
	ILI9881C_COMMAND_INSTR(0x0f,0x00),
	ILI9881C_COMMAND_INSTR(0x10,0x00),
	ILI9881C_COMMAND_INSTR(0x11,0x00),
	ILI9881C_COMMAND_INSTR(0x12,0x00),
	ILI9881C_COMMAND_INSTR(0x13,0x00),
	ILI9881C_COMMAND_INSTR(0x14,0x00),
	ILI9881C_COMMAND_INSTR(0x15,0x00),
	ILI9881C_COMMAND_INSTR(0x16,0x00),
	ILI9881C_COMMAND_INSTR(0x17,0x00),
	ILI9881C_COMMAND_INSTR(0x18,0x00),
	ILI9881C_COMMAND_INSTR(0x19,0x00),
	ILI9881C_COMMAND_INSTR(0x1a,0x00),
	ILI9881C_COMMAND_INSTR(0x1b,0x00),
	ILI9881C_COMMAND_INSTR(0x1c,0x00),
	ILI9881C_COMMAND_INSTR(0x1d,0x00),
	ILI9881C_COMMAND_INSTR(0x1e,0xc0),
	ILI9881C_COMMAND_INSTR(0x1f,0x00),
	ILI9881C_COMMAND_INSTR(0x20,0x02),
	ILI9881C_COMMAND_INSTR(0x21,0x09),
	ILI9881C_COMMAND_INSTR(0x22,0x00),
	ILI9881C_COMMAND_INSTR(0x23,0x00),
	ILI9881C_COMMAND_INSTR(0x24,0x00),
	ILI9881C_COMMAND_INSTR(0x25,0x00),
	ILI9881C_COMMAND_INSTR(0x26,0x00),
	ILI9881C_COMMAND_INSTR(0x27,0x00),
	ILI9881C_COMMAND_INSTR(0x28,0x55),
	ILI9881C_COMMAND_INSTR(0x29,0x03),
	ILI9881C_COMMAND_INSTR(0x2a,0x00),
	ILI9881C_COMMAND_INSTR(0x2b,0x00),
	ILI9881C_COMMAND_INSTR(0x2c,0x00),
	ILI9881C_COMMAND_INSTR(0x2d,0x00),
	ILI9881C_COMMAND_INSTR(0x2e,0x00),
	ILI9881C_COMMAND_INSTR(0x2f,0x00),
	ILI9881C_COMMAND_INSTR(0x30,0x00),
	ILI9881C_COMMAND_INSTR(0x31,0x00),
	ILI9881C_COMMAND_INSTR(0x32,0x00),
	ILI9881C_COMMAND_INSTR(0x33,0x00),
	ILI9881C_COMMAND_INSTR(0x34,0x00),
	ILI9881C_COMMAND_INSTR(0x35,0x00),
	ILI9881C_COMMAND_INSTR(0x36,0x00),
	ILI9881C_COMMAND_INSTR(0x37,0x00),
	ILI9881C_COMMAND_INSTR(0x38,0x3C),
	ILI9881C_COMMAND_INSTR(0x39,0x00),
	ILI9881C_COMMAND_INSTR(0x3a,0x00),
	ILI9881C_COMMAND_INSTR(0x3b,0x00),
	ILI9881C_COMMAND_INSTR(0x3c,0x00),
	ILI9881C_COMMAND_INSTR(0x3d,0x00),
	ILI9881C_COMMAND_INSTR(0x3e,0x00),
	ILI9881C_COMMAND_INSTR(0x3f,0x00),
	ILI9881C_COMMAND_INSTR(0x40,0x00),
	ILI9881C_COMMAND_INSTR(0x41,0x00),
	ILI9881C_COMMAND_INSTR(0x42,0x00),
	ILI9881C_COMMAND_INSTR(0x43,0x00),
	ILI9881C_COMMAND_INSTR(0x44,0x00),
	ILI9881C_COMMAND_INSTR(0x45,0x00),

	ILI9881C_COMMAND_INSTR(0x50,0x01),
	ILI9881C_COMMAND_INSTR(0x51,0x23),
	ILI9881C_COMMAND_INSTR(0x52,0x45),
	ILI9881C_COMMAND_INSTR(0x53,0x67),
	ILI9881C_COMMAND_INSTR(0x54,0x89),
	ILI9881C_COMMAND_INSTR(0x55,0xab),
	ILI9881C_COMMAND_INSTR(0x56,0x01),
	ILI9881C_COMMAND_INSTR(0x57,0x23),
	ILI9881C_COMMAND_INSTR(0x58,0x45),
	ILI9881C_COMMAND_INSTR(0x59,0x67),
	ILI9881C_COMMAND_INSTR(0x5a,0x89),
	ILI9881C_COMMAND_INSTR(0x5b,0xab),
	ILI9881C_COMMAND_INSTR(0x5c,0xcd),
	ILI9881C_COMMAND_INSTR(0x5d,0xef),
	ILI9881C_COMMAND_INSTR(0x5e,0x01),
	ILI9881C_COMMAND_INSTR(0x5f,0x0A),     //FW_CGOUT_L[1] RESE_ODD
	ILI9881C_COMMAND_INSTR(0x60,0x02),     //FW_CGOUT_L[2] VSSG_ODD
	ILI9881C_COMMAND_INSTR(0x61,0x02),     //FW_CGOUT_L[3] VSSG_ODD
	ILI9881C_COMMAND_INSTR(0x62,0x08),     //FW_CGOUT_L[4] STV2_ODD
	ILI9881C_COMMAND_INSTR(0x63,0x15),     //FW_CGOUT_L[5] VDD2_ODD
	ILI9881C_COMMAND_INSTR(0x64,0x14),     //FW_CGOUT_L[6] VDD1_ODD
	ILI9881C_COMMAND_INSTR(0x65,0x02),     //FW_CGOUT_L[7]
	ILI9881C_COMMAND_INSTR(0x66,0x11),     //FW_CGOUT_L[8] CK11
	ILI9881C_COMMAND_INSTR(0x67,0x10),     //FW_CGOUT_L[9] CK9
	ILI9881C_COMMAND_INSTR(0x68,0x02),     //FW_CGOUT_L[10]
	ILI9881C_COMMAND_INSTR(0x69,0x0F),     //FW_CGOUT_L[11] CK7
	ILI9881C_COMMAND_INSTR(0x6a,0x0E),     //FW_CGOUT_L[12] CK5
	ILI9881C_COMMAND_INSTR(0x6b,0x02),     //FW_CGOUT_L[13]   
	ILI9881C_COMMAND_INSTR(0x6c,0x0D),     //FW_CGOUT_L[14] CK3  
	ILI9881C_COMMAND_INSTR(0x6d,0x0C),     //FW_CGOUT_L[15] CK1  
	ILI9881C_COMMAND_INSTR(0x6e,0x06),     //FW_CGOUT_L[16] STV1_ODD  
	ILI9881C_COMMAND_INSTR(0x6f,0x02),     //FW_CGOUT_L[17]   
	ILI9881C_COMMAND_INSTR(0x70,0x02),     //FW_CGOUT_L[18]   
	ILI9881C_COMMAND_INSTR(0x71,0x02),     //FW_CGOUT_L[19]   
	ILI9881C_COMMAND_INSTR(0x72,0x02),     //FW_CGOUT_L[20]   
	ILI9881C_COMMAND_INSTR(0x73,0x02),     //FW_CGOUT_L[21]   
	ILI9881C_COMMAND_INSTR(0x74,0x02),     //FW_CGOUT_L[22] 
	ILI9881C_COMMAND_INSTR(0x75,0x0A),     //BW_CGOUT_L[1]   RESE_ODD 
	ILI9881C_COMMAND_INSTR(0x76,0x02),     //BW_CGOUT_L[2]   VSSG_ODD 
	ILI9881C_COMMAND_INSTR(0x77,0x02),     //BW_CGOUT_L[3]   VSSG_ODD  
	ILI9881C_COMMAND_INSTR(0x78,0x06),     //BW_CGOUT_L[4]   STV2_ODD 
	ILI9881C_COMMAND_INSTR(0x79,0x15),     //BW_CGOUT_L[5]   VDD2_ODD 
	ILI9881C_COMMAND_INSTR(0x7a,0x14),     //BW_CGOUT_L[6]   VDD1_ODD 
	ILI9881C_COMMAND_INSTR(0x7b,0x02),     //BW_CGOUT_L[7]    
	ILI9881C_COMMAND_INSTR(0x7c,0x10),     //BW_CGOUT_L[8]   CK11 
	ILI9881C_COMMAND_INSTR(0x7d,0x11),     //BW_CGOUT_L[9]   CK9 
	ILI9881C_COMMAND_INSTR(0x7e,0x02),     //BW_CGOUT_L[10]   
	ILI9881C_COMMAND_INSTR(0x7f,0x0C),     //BW_CGOUT_L[11]  CK7
	ILI9881C_COMMAND_INSTR(0x80,0x0D),     //BW_CGOUT_L[12]  CK5 
	ILI9881C_COMMAND_INSTR(0x81,0x02),     //BW_CGOUT_L[13]   
	ILI9881C_COMMAND_INSTR(0x82,0x0E),     //BW_CGOUT_L[14]  CK3 
	ILI9881C_COMMAND_INSTR(0x83,0x0F),     //BW_CGOUT_L[15]  CK1 
	ILI9881C_COMMAND_INSTR(0x84,0x08),    //BW_CGOUT_L[16]  STV1_ODD 
	ILI9881C_COMMAND_INSTR(0x85,0x02),     //BW_CGOUT_L[17]   
	ILI9881C_COMMAND_INSTR(0x86,0x02),     //BW_CGOUT_L[18]   
	ILI9881C_COMMAND_INSTR(0x87,0x02),     //BW_CGOUT_L[19]   
	ILI9881C_COMMAND_INSTR(0x88,0x02),     //BW_CGOUT_L[20]   
	ILI9881C_COMMAND_INSTR(0x89,0x02),     //BW_CGOUT_L[21]   
	ILI9881C_COMMAND_INSTR(0x8A,0x02),     //BW_CGOUT_L[22] 
	ILI9881C_SWITCH_PAGE_INSTR(4),//PAGE4
	ILI9881C_COMMAND_INSTR(0x3B,0xC0),     // 4003 sel 
	ILI9881C_COMMAND_INSTR(0x6C,0x15),
	ILI9881C_COMMAND_INSTR(0x6E,0x30),     //VGH 16V
	ILI9881C_COMMAND_INSTR(0x6F,0x55),     //Pump ratio VGH=VSPX4 VGL=VSNX4
	ILI9881C_COMMAND_INSTR(0x3A,0x24),
	ILI9881C_COMMAND_INSTR(0x8D,0x1F),
	ILI9881C_COMMAND_INSTR(0x87,0xBA),
	ILI9881C_COMMAND_INSTR(0x26,0x76),
	ILI9881C_COMMAND_INSTR(0xB2,0xD1),
	ILI9881C_COMMAND_INSTR(0xB5,0x07),
	ILI9881C_COMMAND_INSTR(0x35,0x1F),
	ILI9881C_COMMAND_INSTR(0x88,0x0B),
	ILI9881C_COMMAND_INSTR(0x21,0x30),
	ILI9881C_SWITCH_PAGE_INSTR(1),//PAGE1
	ILI9881C_COMMAND_INSTR(0x22,0x0A),
	ILI9881C_COMMAND_INSTR(0x31,0x09),
	ILI9881C_COMMAND_INSTR(0x40,0x53),
	ILI9881C_COMMAND_INSTR(0x53,0x37),
	ILI9881C_COMMAND_INSTR(0x55,0x88),
	ILI9881C_COMMAND_INSTR(0x50,0x95),
	ILI9881C_COMMAND_INSTR(0x51,0x95),
	ILI9881C_COMMAND_INSTR(0x60,0x30),
	ILI9881C_SWITCH_PAGE_INSTR(0),//PAGE0
	ILI9881C_COMMAND_INSTR(0x11, 0x00),
	ILI9881C_COMMAND_INSTR(0x29, 0x00),
	
};

static inline struct ili9881c *panel_to_ili9881c(struct drm_panel *panel)
{
	return container_of(panel, struct ili9881c, panel);
}

/*
 * The panel seems to accept some private DCS commands that map
 * directly to registers.
 *
 * It is organised by page, with each page having its own set of
 * registers, and the first page looks like it's holding the standard
 * DCS commands.
 *
 * So before any attempt at sending a command or data, we have to be
 * sure if we're in the right page or not.
 */
static int ili9881c_switch_page(struct ili9881c *ctx, u8 page)
{
	u8 buf[4] = { 0xff, 0x98, 0x81, page };
	int ret;

	ret = mipi_dsi_dcs_write_buffer(ctx->dsi, buf, sizeof(buf));
	if (ret < 0)
		return ret;

	return 0;
}

static int ili9881c_send_cmd_data(struct ili9881c *ctx, u8 cmd, u8 data)
{
	u8 buf[2] = { cmd, data };
	int ret;

	ret = mipi_dsi_dcs_write_buffer(ctx->dsi, buf, sizeof(buf));
	if (ret < 0)
		return ret;

	return 0;
}

static int ili9881c_prepare(struct drm_panel *panel)
{
	struct ili9881c *ctx = panel_to_ili9881c(panel);
	unsigned int i;
	int ret;

	/* Power the panel */
	ret = regulator_enable(ctx->power);
	if (ret)
		return ret;
	msleep(5);

	/* And reset it */
	gpiod_set_value(ctx->reset_gpio, 1);
	msleep(10);

	gpiod_set_value(ctx->reset_gpio, 0);
	msleep(100);
	
	gpiod_set_value(ctx->reset_gpio, 1);
	msleep(20);

	for (i = 0; i < ctx->desc->init_length; i++) {
		const struct ili9881c_instr *instr = &ctx->desc->init[i];

		if (instr->op == ILI9881C_SWITCH_PAGE)
			ret = ili9881c_switch_page(ctx, instr->arg.page);
		else if (instr->op == ILI9881C_COMMAND)
			ret = ili9881c_send_cmd_data(ctx, instr->arg.cmd.cmd,
						      instr->arg.cmd.data);

		if (ret)
			return ret;
	}

	ret = ili9881c_switch_page(ctx, 0);
	if (ret)
		return ret;

	ret = mipi_dsi_dcs_set_tear_on(ctx->dsi, MIPI_DSI_DCS_TEAR_MODE_VBLANK);
	if (ret)
		return ret;

	ret = mipi_dsi_dcs_exit_sleep_mode(ctx->dsi);
	if (ret)
		return ret;

	return 0;
}

static int ili9881c_enable(struct drm_panel *panel)
{
	struct ili9881c *ctx = panel_to_ili9881c(panel);

	msleep(120);

	mipi_dsi_dcs_set_display_on(ctx->dsi);

	return 0;
}

static int ili9881c_disable(struct drm_panel *panel)
{
	struct ili9881c *ctx = panel_to_ili9881c(panel);

	return mipi_dsi_dcs_set_display_off(ctx->dsi);
}

static int ili9881c_unprepare(struct drm_panel *panel)
{
	struct ili9881c *ctx = panel_to_ili9881c(panel);

	mipi_dsi_dcs_enter_sleep_mode(ctx->dsi);
	regulator_disable(ctx->power);
	gpiod_set_value(ctx->reset_gpio, 1);

	return 0;
}

static const struct drm_display_mode lhr050h41_default_mode = {
	.clock		= 62000,

	.hdisplay	= 720,
	.hsync_start	= 720 + 10,
	.hsync_end	= 720 + 10 + 20,
	.htotal		= 720 + 10 + 20 + 30,

	.vdisplay	= 1280,
	.vsync_start	= 1280 + 10,
	.vsync_end	= 1280 + 10 + 10,
	.vtotal		= 1280 + 10 + 10 + 20,

	.width_mm	= 62,
	.height_mm	= 110,
};

static const struct drm_display_mode k101_im2byl02_default_mode = {
	.clock		= 69700,

	.hdisplay	= 800,
	.hsync_start	= 800 + 52,
	.hsync_end	= 800 + 52 + 8,
	.htotal		= 800 + 52 + 8 + 48,

	.vdisplay	= 1280,
	.vsync_start	= 1280 + 16,
	.vsync_end	= 1280 + 16 + 6,
	.vtotal		= 1280 + 16 + 6 + 15,

	.width_mm	= 135,
	.height_mm	= 217,
};

static const struct drm_display_mode tl101wxv35_default_mode = {
	.clock		= 70000,

	.hdisplay	= 800,
	.hsync_start	= 800 + 50,
	.hsync_end	= 800 + 50 + 6,
	.htotal		= 800 + 50 + 6 + 50,

	.vdisplay	= 1280,
	.vsync_start	= 1280 + 20,
	.vsync_end	= 1280 + 20 + 2,
	.vtotal		= 1280 + 20 + 2 + 20,

	.width_mm	= 68,
	.height_mm	= 121,
};

static int ili9881c_get_modes(struct drm_panel *panel,
			      struct drm_connector *connector)
{
	struct ili9881c *ctx = panel_to_ili9881c(panel);
	struct drm_display_mode *mode;

	mode = drm_mode_duplicate(connector->dev, ctx->desc->mode);
	if (!mode) {
		dev_err(&ctx->dsi->dev, "failed to add mode %ux%ux@%u\n",
			ctx->desc->mode->hdisplay,
			ctx->desc->mode->vdisplay,
			drm_mode_vrefresh(ctx->desc->mode));
		return -ENOMEM;
	}

	drm_mode_set_name(mode);

	mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
	drm_mode_probed_add(connector, mode);

	connector->display_info.width_mm = mode->width_mm;
	connector->display_info.height_mm = mode->height_mm;

	return 1;
}

static const struct drm_panel_funcs ili9881c_funcs = {
	.prepare	= ili9881c_prepare,
	.unprepare	= ili9881c_unprepare,
	.enable		= ili9881c_enable,
	.disable	= ili9881c_disable,
	.get_modes	= ili9881c_get_modes,
};

static int ili9881c_dsi_probe(struct mipi_dsi_device *dsi)
{
	struct ili9881c *ctx;
	int ret;

	ctx = devm_kzalloc(&dsi->dev, sizeof(*ctx), GFP_KERNEL);
	if (!ctx)
		return -ENOMEM;
	mipi_dsi_set_drvdata(dsi, ctx);
	ctx->dsi = dsi;
	ctx->desc = of_device_get_match_data(&dsi->dev);

	ctx->panel.prepare_upstream_first = true;
	drm_panel_init(&ctx->panel, &dsi->dev, &ili9881c_funcs,
		       DRM_MODE_CONNECTOR_DSI);

	ctx->power = devm_regulator_get(&dsi->dev, "power");
	if (IS_ERR(ctx->power)) {
		dev_err(&dsi->dev, "Couldn't get our power regulator\n");
		return PTR_ERR(ctx->power);
	}

	ctx->reset_gpio = devm_gpiod_get(&dsi->dev, "reset", GPIOD_OUT_LOW);
	if (IS_ERR(ctx->reset_gpio)) {
		dev_err(&dsi->dev, "Couldn't get our reset GPIO\n");
		return PTR_ERR(ctx->reset_gpio);
	}

	ret = drm_panel_of_backlight(&ctx->panel);
	if (ret)
		return ret;

	drm_panel_add(&ctx->panel);

	dsi->mode_flags = ctx->desc->flags;
	dsi->format = MIPI_DSI_FMT_RGB888;
	dsi->lanes = 4;

	ret = mipi_dsi_attach(dsi);
	if (ret)
		drm_panel_remove(&ctx->panel);

	return ret;
}

static int ili9881c_dsi_remove(struct mipi_dsi_device *dsi)
{
	struct ili9881c *ctx = mipi_dsi_get_drvdata(dsi);

	mipi_dsi_detach(dsi);
	drm_panel_remove(&ctx->panel);

	return 0;
}

static const struct ili9881c_desc lhr050h41_desc = {
	.init = lhr050h41_init,
	.init_length = ARRAY_SIZE(lhr050h41_init),
	.mode = &lhr050h41_default_mode,
	.flags = MIPI_DSI_MODE_VIDEO_SYNC_PULSE,
};

static const struct ili9881c_desc k101_im2byl02_desc = {
	.init = k101_im2byl02_init,
	.init_length = ARRAY_SIZE(k101_im2byl02_init),
	.mode = &k101_im2byl02_default_mode,
	.flags = MIPI_DSI_MODE_VIDEO_SYNC_PULSE,
};

static const struct ili9881c_desc tl101wxv35_desc = {
	.init = tl101wxv35_init,
	.init_length = ARRAY_SIZE(tl101wxv35_init),
	.mode = &tl101wxv35_default_mode,
	.flags = MIPI_DSI_MODE_VIDEO_SYNC_PULSE | MIPI_DSI_MODE_VIDEO,
};

static const struct of_device_id ili9881c_of_match[] = {
	{ .compatible = "bananapi,lhr050h41", .data = &lhr050h41_desc },
	{ .compatible = "feixin,k101-im2byl02", .data = &k101_im2byl02_desc },
	{ .compatible = "tdo,tl101wxv35", .data = &tl101wxv35_desc },
	{}
};
MODULE_DEVICE_TABLE(of, ili9881c_of_match);

static struct mipi_dsi_driver ili9881c_dsi_driver = {
	.probe		= ili9881c_dsi_probe,
	.remove		= ili9881c_dsi_remove,
	.driver = {
		.name		= "ili9881c-dsi",
		.of_match_table	= ili9881c_of_match,
	},
};
module_mipi_dsi_driver(ili9881c_dsi_driver);

MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com>");
MODULE_DESCRIPTION("Ilitek ILI9881C Controller Driver");
MODULE_LICENSE("GPL v2");
overlays code

Code: Select all

/dts-v1/;
/plugin/;

/ {
    compatible = "brcm,bcm2711";

    fragment@0 {
        target=<&dsi1>;

        __overlay__ {
            status = "okay";

            #address-cells = <1>;
            #size-cells = <0>;

            port {
                dsi1_out_port: endpoint {
                    remote-endpoint = <&panel_dsi_in1>;
                };
            };

            display1: panel@0 {
                compatible = "tdo,tl101wxv35";
                reg=<0>;
                backlight = <&rpi_backlight>;
                reset-gpios = <&gpio 26 0>;
                port {
                    panel_dsi_in1: endpoint {
                        remote-endpoint = <&dsi1_out_port>;
                    };
                };
            };
        };
    };

    fragment@1 {
        target = <&gpio>;
        __overlay__ {
            pwm_pins: pwm_pins {
                brcm,pins = <12>;
                brcm,function = <4>; // ALT0
            };
        };
    };

    fragment@2 {
        target = <&pwm>;
        frag1: __overlay__ {
            pinctrl-names = "default";
            pinctrl-0 = <&pwm_pins>;
            assigned-clock-rates = <1000000>;
            status = "okay";
        };
    };

    fragment@3 {
        target-path = "/";
        __overlay__ {
            rpi_backlight: rpi_backlight {
                compatible = "pwm-backlight";
                brightness-levels = <0 6 8 12 16 24 32 40 48 64 96 128 160 192 224 255>;
                default-brightness-level = <6>;
                pwms = <&pwm 0 200000>;
                power-supply = <&vdd_3v3_reg>;
                status = "okay";
            };
        };
    };

    fragment@4 {
        target = <&i2c0>;
        frag0: __overlay__ {
            status = "okay";
            pinctrl-names = "default";
            pinctrl-0 = <&i2c0_pins>;
            clock-frequency = <100000>;
        };
    };

    fragment@5 {
        target = <&i2c0_pins>;
        __overlay__ {
            brcm,pins = <0 1>;
        };
    };

    fragment@6 {
            target = <&gpio>;
            __overlay__ {
                goodix_pins: goodix_pins {
                    brcm,pins = <20 6>; // interrupt and reset
                    brcm,function = <0 0>; // in
                    brcm,pull = <2 2>; // pull-up
                };
            };
    };

    fragment@7 {
        target = <&i2c0>;
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;
            status = "okay";

            gt9xx: gt9xx@5d {
                compatible = "goodix,gt9271"; 
                reg = <0x5D>;
                pinctrl-names = "default";
                pinctrl-0 = <&goodix_pins>;
                interrupt-parent = <&gpio>;
                interrupts = <20 2>; // high-to-low edge triggered
                irq-gpios = <&gpio 20 0>; 
                reset-gpios = <&gpio 6 0>;
            };
        };
    };
};
Code from manufacture

Code: Select all

you can try this parameter :
/*
	.clock		= 70000,

	.hdisplay	= 800,
	.hsync_start	= 800 + 50,
	.hsync_end	= 800 + 50 + 6,
	.htotal		= 800 + 50 + 6 + 50,

	.vdisplay	= 1280,
	.vsync_start	= 1280 + 20,
	.vsync_end	= 1280 + 20 + 2,
	.vtotal		= 1280 + 20 + 2 + 20,

	.width_mm	= 68,
	.height_mm	= 121,

*/

/// or you can try this parameter too

/*
	.clock		= 61000,

	.hdisplay	= 800,
	.hsync_start	= 800 + 20,
	.hsync_end	= 800 + 20 + 10,
	.htotal		= 800 + 20 + 10 + 20,

	.vdisplay	= 1280,
	.vsync_start	= 1280 + 10,
	.vsync_end	= 1280 + 10 + 4,
	.vtotal		= 1280 + 10 + 4 + 10,

	.width_mm	= 68,
	.height_mm	= 121,

*/




void main()
{
// reset sequence must be applied as below:
	Set_RESET(1),
	Delay(20),
	Set_RESET(0),
	Delay(100),
	Set_RESET(1),
	Delay(20),



//-----------------------Initial  Code--------------------------------------//


//--------------------------------//
Generic_Long_Write_3P(0xFF, 0x98, 0x81, 0x03),//PAGE3
tl101wxv35_send_cmd_data(ctx, 0x01, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x02, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x03, 0x53),    
tl101wxv35_send_cmd_data(ctx, 0x04, 0x53),    
tl101wxv35_send_cmd_data(ctx, 0x05, 0x13),
tl101wxv35_send_cmd_data(ctx, 0x06, 0x04),
tl101wxv35_send_cmd_data(ctx, 0x07, 0x02),
tl101wxv35_send_cmd_data(ctx, 0x08, 0x02),
tl101wxv35_send_cmd_data(ctx, 0x09, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x0a, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x0b, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x0c, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x0d, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x0e, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x0f, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x10, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x11, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x12, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x13, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x14, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x15, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x16, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x17, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x18, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x19, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x1a, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x1b, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x1c, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x1d, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x1e, 0xc0),
tl101wxv35_send_cmd_data(ctx, 0x1f, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x20, 0x02),
tl101wxv35_send_cmd_data(ctx, 0x21, 0x09),
tl101wxv35_send_cmd_data(ctx, 0x22, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x23, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x24, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x25, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x26, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x27, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x28, 0x55),
tl101wxv35_send_cmd_data(ctx, 0x29, 0x03),
tl101wxv35_send_cmd_data(ctx, 0x2a, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x2b, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x2c, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x2d, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x2e, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x2f, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x30, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x31, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x32, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x33, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x34, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x35, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x36, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x37, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x38, 0x3C),
tl101wxv35_send_cmd_data(ctx, 0x39, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x3a, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x3b, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x3c, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x3d, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x3e, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x3f, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x40, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x41, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x42, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x43, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x44, 0x00),
tl101wxv35_send_cmd_data(ctx, 0x45, 0x00),

tl101wxv35_send_cmd_data(ctx, 0x50, 0x01),
tl101wxv35_send_cmd_data(ctx, 0x51, 0x23),
tl101wxv35_send_cmd_data(ctx, 0x52, 0x45),
tl101wxv35_send_cmd_data(ctx, 0x53, 0x67),
tl101wxv35_send_cmd_data(ctx, 0x54, 0x89),
tl101wxv35_send_cmd_data(ctx, 0x55, 0xab),
tl101wxv35_send_cmd_data(ctx, 0x56, 0x01),
tl101wxv35_send_cmd_data(ctx, 0x57, 0x23),
tl101wxv35_send_cmd_data(ctx, 0x58, 0x45),
tl101wxv35_send_cmd_data(ctx, 0x59, 0x67),
tl101wxv35_send_cmd_data(ctx, 0x5a, 0x89),
tl101wxv35_send_cmd_data(ctx, 0x5b, 0xab),
tl101wxv35_send_cmd_data(ctx, 0x5c, 0xcd),
tl101wxv35_send_cmd_data(ctx, 0x5d, 0xef),
tl101wxv35_send_cmd_data(ctx, 0x5e, 0x01),
tl101wxv35_send_cmd_data(ctx, 0x5f, 0x0A),     //FW_CGOUT_L[1] RESE_ODD
tl101wxv35_send_cmd_data(ctx, 0x60, 0x02),     //FW_CGOUT_L[2] VSSG_ODD
tl101wxv35_send_cmd_data(ctx, 0x61, 0x02),     //FW_CGOUT_L[3] VSSG_ODD
tl101wxv35_send_cmd_data(ctx, 0x62, 0x08),     //FW_CGOUT_L[4] STV2_ODD
tl101wxv35_send_cmd_data(ctx, 0x63, 0x15),     //FW_CGOUT_L[5] VDD2_ODD
tl101wxv35_send_cmd_data(ctx, 0x64, 0x14),     //FW_CGOUT_L[6] VDD1_ODD
tl101wxv35_send_cmd_data(ctx, 0x65, 0x02),     //FW_CGOUT_L[7]
tl101wxv35_send_cmd_data(ctx, 0x66, 0x11),     //FW_CGOUT_L[8] CK11
tl101wxv35_send_cmd_data(ctx, 0x67, 0x10),     //FW_CGOUT_L[9] CK9
tl101wxv35_send_cmd_data(ctx, 0x68, 0x02),     //FW_CGOUT_L[10]
tl101wxv35_send_cmd_data(ctx, 0x69, 0x0F),     //FW_CGOUT_L[11] CK7
tl101wxv35_send_cmd_data(ctx, 0x6a, 0x0E),     //FW_CGOUT_L[12] CK5
tl101wxv35_send_cmd_data(ctx, 0x6b, 0x02),     //FW_CGOUT_L[13]   
tl101wxv35_send_cmd_data(ctx, 0x6c, 0x0D),     //FW_CGOUT_L[14] CK3  
tl101wxv35_send_cmd_data(ctx, 0x6d, 0x0C),     //FW_CGOUT_L[15] CK1  
tl101wxv35_send_cmd_data(ctx, 0x6e, 0x06),     //FW_CGOUT_L[16] STV1_ODD  
tl101wxv35_send_cmd_data(ctx, 0x6f, 0x02),     //FW_CGOUT_L[17]   
tl101wxv35_send_cmd_data(ctx, 0x70, 0x02),     //FW_CGOUT_L[18]   
tl101wxv35_send_cmd_data(ctx, 0x71, 0x02),     //FW_CGOUT_L[19]   
tl101wxv35_send_cmd_data(ctx, 0x72, 0x02),     //FW_CGOUT_L[20]   
tl101wxv35_send_cmd_data(ctx, 0x73, 0x02),     //FW_CGOUT_L[21]   
tl101wxv35_send_cmd_data(ctx, 0x74, 0x02),     //FW_CGOUT_L[22] 
tl101wxv35_send_cmd_data(ctx, 0x75, 0x0A),     //BW_CGOUT_L[1]   RESE_ODD 
tl101wxv35_send_cmd_data(ctx, 0x76, 0x02),     //BW_CGOUT_L[2]   VSSG_ODD 
tl101wxv35_send_cmd_data(ctx, 0x77, 0x02),     //BW_CGOUT_L[3]   VSSG_ODD  
tl101wxv35_send_cmd_data(ctx, 0x78, 0x06),     //BW_CGOUT_L[4]   STV2_ODD 
tl101wxv35_send_cmd_data(ctx, 0x79, 0x15),     //BW_CGOUT_L[5]   VDD2_ODD 
tl101wxv35_send_cmd_data(ctx, 0x7a, 0x14),     //BW_CGOUT_L[6]   VDD1_ODD 
tl101wxv35_send_cmd_data(ctx, 0x7b, 0x02),     //BW_CGOUT_L[7]    
tl101wxv35_send_cmd_data(ctx, 0x7c, 0x10),     //BW_CGOUT_L[8]   CK11 
tl101wxv35_send_cmd_data(ctx, 0x7d, 0x11),     //BW_CGOUT_L[9]   CK9 
tl101wxv35_send_cmd_data(ctx, 0x7e, 0x02),     //BW_CGOUT_L[10]   
tl101wxv35_send_cmd_data(ctx, 0x7f, 0x0C),     //BW_CGOUT_L[11]  CK7
tl101wxv35_send_cmd_data(ctx, 0x80, 0x0D),     //BW_CGOUT_L[12]  CK5 
tl101wxv35_send_cmd_data(ctx, 0x81, 0x02),     //BW_CGOUT_L[13]   
tl101wxv35_send_cmd_data(ctx, 0x82, 0x0E),     //BW_CGOUT_L[14]  CK3 
tl101wxv35_send_cmd_data(ctx, 0x83, 0x0F),     //BW_CGOUT_L[15]  CK1 
tl101wxv35_send_cmd_data(ctx, 0x84, 0x08),    //BW_CGOUT_L[16]  STV1_ODD 
tl101wxv35_send_cmd_data(ctx, 0x85, 0x02),     //BW_CGOUT_L[17]   
tl101wxv35_send_cmd_data(ctx, 0x86, 0x02),     //BW_CGOUT_L[18]   
tl101wxv35_send_cmd_data(ctx, 0x87, 0x02),     //BW_CGOUT_L[19]   
tl101wxv35_send_cmd_data(ctx, 0x88, 0x02),     //BW_CGOUT_L[20]   
tl101wxv35_send_cmd_data(ctx, 0x89, 0x02),     //BW_CGOUT_L[21]   
tl101wxv35_send_cmd_data(ctx, 0x8A, 0x02),     //BW_CGOUT_L[22]   

Generic_Long_Write_3P(0xFF, 0x98, 0x81, 0x04),//PAGE4
tl101wxv35_send_cmd_data(ctx, 0x3B, 0xC0),     // 4003 sel 
tl101wxv35_send_cmd_data(ctx, 0x6C, 0x15),
tl101wxv35_send_cmd_data(ctx, 0x6E, 0x30),     //VGH 16V
tl101wxv35_send_cmd_data(ctx, 0x6F, 0x55),     //Pump ratio VGH=VSPX4 VGL=VSNX4
tl101wxv35_send_cmd_data(ctx, 0x3A, 0x24),
tl101wxv35_send_cmd_data(ctx, 0x8D, 0x1F),
tl101wxv35_send_cmd_data(ctx, 0x87, 0xBA),
tl101wxv35_send_cmd_data(ctx, 0x26, 0x76),
tl101wxv35_send_cmd_data(ctx, 0xB2, 0xD1),
tl101wxv35_send_cmd_data(ctx, 0xB5, 0x07),
tl101wxv35_send_cmd_data(ctx, 0x35, 0x1F),
tl101wxv35_send_cmd_data(ctx, 0x88, 0x0B),
tl101wxv35_send_cmd_data(ctx, 0x21, 0x30),

Generic_Long_Write_3P(0xFF, 0x98, 0x81, 0x01),//PAGE1
tl101wxv35_send_cmd_data(ctx, 0x22, 0x0A),
tl101wxv35_send_cmd_data(ctx, 0x31, 0x09),
tl101wxv35_send_cmd_data(ctx, 0x40, 0x53),
tl101wxv35_send_cmd_data(ctx, 0x53, 0x37),
tl101wxv35_send_cmd_data(ctx, 0x55, 0x88),
tl101wxv35_send_cmd_data(ctx, 0x50, 0x95),
tl101wxv35_send_cmd_data(ctx, 0x51, 0x95),
tl101wxv35_send_cmd_data(ctx, 0x60, 0x30),


Generic_Long_Write_3P(0xFF, 0x98, 0x81, 0x00),//PAGE0
DCS_Short_Write_NP(0x11),      //sleep out
Delay(120),
DCS_Short_Write_NP(0x29),       //display on
Delay(50),
}
Please help me
Thank you

6by9
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 13243
Joined: Wed Dec 04, 2013 11:27 am
Location: ZZ9 Plural Z Alpha, aka just outside Cambridge.

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Fri Jul 01, 2022 10:19 am

Is that all there is in dmesg? No errors?

Check with "modetest -M vc4 | less" to see if it has brought up DSI as a display. If it is listed, then the Pi side is doing what it has been asked. ("sudo apt install libdrm-tests" if modetest isn't installed yet).
Software Engineer at Raspberry Pi Ltd. Views expressed are still personal views.
I'm not interested in doing contracts for bespoke functionality - please don't ask.

aBUGSworstnightmare
Posts: 5618
Joined: Tue Jun 30, 2015 1:35 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Fri Jul 01, 2022 11:25 am

6by9 wrote:
Fri Jul 01, 2022 10:19 am
Is that all there is in dmesg? No errors?

Check with "modetest -M vc4 | less" to see if it has brought up DSI as a display. If it is listed, then the Pi side is doing what it has been asked. ("sudo apt install libdrm-tests" if modetest isn't installed yet).
Below is such an output from one of my DUT's which has a DSI display (bridge to LVDS) attached to DSI1.
Are Encoder ID and Connector ID related to each other, or why is Connector ID = Encoder ID+1?

Code: Select all

Encoders:
id	crtc	type	possible crtcs	possible clones	
31	0	TMDS	0x00000008	0x00000001
40	0	TMDS	0x00000010	0x00000002
45	85	DSI	0x00000004	0x00000004
51	0	Virtual	0x00000001	0x00000008

Connectors:
id	encoder	status		name		size (mm)	modes	encoders
32	0	disconnected	HDMI-A-1       	0x0		0	31
  props:
	1 EDID:
		flags: immutable blob
		blobs:

		value:
	2 DPMS:
		flags: enum
		enums: On=0 Standby=1 Suspend=2 Off=3
		value: 0
	5 link-status:
		flags: enum
		enums: Good=0 Bad=1
		value: 0
	6 non-desktop:
		flags: immutable range
		values: 0 1
		value: 0
	4 TILE:
		flags: immutable blob
		blobs:

		value:
	37 Colorspace:
		flags: enum
		enums: Default=0 SMPTE_170M_YCC=1 BT709_YCC=2 XVYCC_601=3 XVYCC_709=4 SYCC_601=5 opYCC_601=6 opRGB=7 BT2020_CYCC=8 BT2020_RGB=9 BT2020_YCC=10 DCI-P3_RGB_D65=11 DCI-P3_RGB_Theater=12
		value: 0
	33 left margin:
		flags: range
		values: 0 100
		value: 0
	34 right margin:
		flags: range
		values: 0 100
		value: 0
	35 top margin:
		flags: range
		values: 0 100
		value: 0
	36 bottom margin:
		flags: range
		values: 0 100
		value: 0
	38 max bpc:
		flags: range
		values: 8 12
		value: 8
	7 HDR_OUTPUT_METADATA:
		flags: blob
		blobs:

		value:
	39 Broadcast RGB:
		flags: enum
		enums: Automatic=0 Full=1 Limited 16:235=2
		value: 0
41	0	disconnected	HDMI-A-2       	0x0		0	40
  props:
	1 EDID:
		flags: immutable blob
		blobs:

		value:
	2 DPMS:
		flags: enum
		enums: On=0 Standby=1 Suspend=2 Off=3
		value: 0
	5 link-status:
		flags: enum
		enums: Good=0 Bad=1
		value: 0
	6 non-desktop:
		flags: immutable range
		values: 0 1
		value: 0
	4 TILE:
		flags: immutable blob
		blobs:

		value:
	42 Colorspace:
		flags: enum
		enums: Default=0 SMPTE_170M_YCC=1 BT709_YCC=2 XVYCC_601=3 XVYCC_709=4 SYCC_601=5 opYCC_601=6 opRGB=7 BT2020_CYCC=8 BT2020_RGB=9 BT2020_YCC=10 DCI-P3_RGB_D65=11 DCI-P3_RGB_Theater=12
		value: 0
	33 left margin:
		flags: range
		values: 0 100
		value: 0
	34 right margin:
		flags: range
		values: 0 100
		value: 0
	35 top margin:
		flags: range
		values: 0 100
		value: 0
	36 bottom margin:
		flags: range
		values: 0 100
		value: 0
	43 max bpc:
		flags: range
		values: 8 12
		value: 8
	7 HDR_OUTPUT_METADATA:
		flags: blob
		blobs:

		value:
	44 Broadcast RGB:
		flags: enum
		enums: Automatic=0 Full=1 Limited 16:235=2
		value: 0
46	45	connected	LVDS-1         	217x136		1	45
  modes:
	index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot
  #0 1280x800 55.30 1280 1440 1488 1536 800 823 829 837 71100 flags: ; type: preferred, driver
  props:
	1 EDID:
		flags: immutable blob
		blobs:

		value:
	2 DPMS:
		flags: enum
		enums: On=0 Standby=1 Suspend=2 Off=3
		value: 0
	5 link-status:
		flags: enum
		enums: Good=0 Bad=1
		value: 0
	6 non-desktop:
		flags: immutable range
		values: 0 1
		value: 0
	4 TILE:
		flags: immutable blob
		blobs:

		value:

CRTCs:
...
'dmesg |grep vc4' doesn't give more data (same for 'dmesg |grep dsi') for me as well. OP may want to open a VNC connection to this Pi as one will 'see' if X is running and DSI brought up (even if the display is pitch black still).

Code: Select all

pi@DSI0test:~ $ dmesg |grep vc4
[    8.815107] vc4-drm gpu: bound fe400000.hvs (ops vc4_hvs_ops [vc4])
[    8.833314] rc rc0: vc4 as /devices/platform/soc/fef00700.hdmi/rc/rc0
[    8.833411] input: vc4 as /devices/platform/soc/fef00700.hdmi/rc/rc0/input0
[    8.947247] vc4-drm gpu: bound fe400000.hvs (ops vc4_hvs_ops [vc4])
[    8.950157] rc rc0: vc4 as /devices/platform/soc/fef00700.hdmi/rc/rc0
[    8.950241] input: vc4 as /devices/platform/soc/fef00700.hdmi/rc/rc0/input1
[    8.958138] vc4-drm gpu: bound fef00700.hdmi (ops vc4_hdmi_ops [vc4])
[    8.959953] rc rc1: vc4 as /devices/platform/soc/fef05700.hdmi/rc/rc1
[    8.960036] input: vc4 as /devices/platform/soc/fef05700.hdmi/rc/rc1/input2
[    8.964899] vc4-drm gpu: bound fef05700.hdmi (ops vc4_hdmi_ops [vc4])
[    8.965453] vc4-drm gpu: bound fe700000.dsi (ops vc4_dsi_ops [vc4])
[    8.965671] vc4-drm gpu: bound fe004000.txp (ops vc4_txp_ops [vc4])
[    8.965851] vc4-drm gpu: bound fe206000.pixelvalve (ops vc4_crtc_ops [vc4])
[    8.965997] vc4-drm gpu: bound fe207000.pixelvalve (ops vc4_crtc_ops [vc4])
[    8.966139] vc4-drm gpu: bound fe20a000.pixelvalve (ops vc4_crtc_ops [vc4])
[    8.966271] vc4-drm gpu: bound fe216000.pixelvalve (ops vc4_crtc_ops [vc4])
[    8.966408] vc4-drm gpu: bound fec12000.pixelvalve (ops vc4_crtc_ops [vc4])
[    8.967897] [drm] Initialized vc4 0.0.0 20140616 for gpu on minor 1
[    9.215620] vc4-drm gpu: [drm] fb0: vc4drmfb frame buffer device
pi@DSI0test:~ $ 
Please confirm you have a touch connected as well!
What do you get from below commands:

Code: Select all

i2cdetect -l
ls /sys/bus/i2c/drivers
sudo cat /sys/kernel/debug/device_component/gpu
sudo cat /sys/kernel/debug/devices_deferred

sunny2405
Posts: 13
Joined: Mon Jun 27, 2022 2:10 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Fri Jul 01, 2022 3:09 pm

6by9 wrote:
Fri Jul 01, 2022 10:19 am
Is that all there is in dmesg? No errors?

Check with "modetest -M vc4 | less" to see if it has brought up DSI as a display. If it is listed, then the Pi side is doing what it has been asked. ("sudo apt install libdrm-tests" if modetest isn't installed yet).
Here is the log file dmesg

Code: Select all

pi@raspberrypi:~ $ dmesg
[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd083]
[    0.000000] Linux version 5.15.50-v8+ (root@raspberrypi) (gcc (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP PREEMPT Fri Jul 1 12:52:50 +07 2022
[    0.000000] random: crng init done
[    0.000000] Machine model: Raspberry Pi Compute Module 4 Rev 1.0
[    0.000000] efi: UEFI not found.
[    0.000000] Reserved memory: created CMA memory pool at 0x000000001ac00000, size 320 MiB
[    0.000000] OF: reserved mem: initialized node linux,cma, compatible id shared-dma-pool
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000000000000-0x000000003fffffff]
[    0.000000]   DMA32    [mem 0x0000000040000000-0x00000000fbffffff]
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x000000003b3fffff]
[    0.000000]   node   0: [mem 0x0000000040000000-0x00000000fbffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x00000000fbffffff]
[    0.000000] On node 0, zone DMA32: 19456 pages in unavailable ranges
[    0.000000] On node 0, zone DMA32: 16384 pages in unavailable ranges
[    0.000000] percpu: Embedded 28 pages/cpu s77272 r8192 d29224 u114688
[    0.000000] pcpu-alloc: s77272 r8192 d29224 u114688 alloc=28*4096
[    0.000000] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3 
[    0.000000] Detected PIPT I-cache on CPU0
[    0.000000] CPU features: detected: Spectre-v2
[    0.000000] CPU features: detected: Spectre-v3a
[    0.000000] CPU features: detected: Spectre-v4
[    0.000000] CPU features: detected: Spectre-BHB
[    0.000000] CPU features: kernel page table isolation forced ON by KASLR
[    0.000000] CPU features: detected: Kernel page table isolation (KPTI)
[    0.000000] CPU features: detected: ARM errata 1165522, 1319367, or 1530923
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 996912
[    0.000000] Kernel command line: coherent_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 video=HDMI-A-1:1920x1080M@60 smsc95xx.macaddr=E4:5F:01:6D:55:20 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  console=ttyS0,115200 console=tty1 root=PARTUUID=bc7be3c3-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
[    0.000000] Unknown kernel command line parameters "splash", will be passed to user space.
[    0.000000] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes, linear)
[    0.000000] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] software IO TLB: mapped [mem 0x0000000037400000-0x000000003b400000] (64MB)
[    0.000000] Memory: 3553828K/4050944K available (11776K kernel code, 1956K rwdata, 4120K rodata, 3776K init, 967K bss, 169436K reserved, 327680K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
[    0.000000] ftrace: allocating 36860 entries in 144 pages
[    0.000000] ftrace: allocated 144 pages with 2 groups
[    0.000000] trace event string verifier disabled
[    0.000000] rcu: Preemptible hierarchical RCU implementation.
[    0.000000] rcu: 	RCU event tracing is enabled.
[    0.000000] rcu: 	RCU restricting CPUs from NR_CPUS=256 to nr_cpu_ids=4.
[    0.000000] 	Trampoline variant of Tasks RCU enabled.
[    0.000000] 	Rude variant of Tasks RCU enabled.
[    0.000000] 	Tracing variant of Tasks RCU enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
[    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    0.000000] Root IRQ handler: gic_handle_irq
[    0.000000] GIC: Using split EOI/Deactivate mode
[    0.000000] irq_brcmstb_l2: registered L2 intc (/soc/interrupt-controller@7ef00100, parent irq: 10)
[    0.000000] arch_timer: cp15 timer(s) running at 54.00MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0xc743ce346, max_idle_ns: 440795203123 ns
[    0.000001] sched_clock: 56 bits at 54MHz, resolution 18ns, wraps every 4398046511102ns
[    0.000323] Console: colour dummy device 80x25
[    0.000381] printk: console [tty1] enabled
[    0.000449] Calibrating delay loop (skipped), value calculated using timer frequency.. 108.00 BogoMIPS (lpj=216000)
[    0.000474] pid_max: default: 32768 minimum: 301
[    0.000603] LSM: Security Framework initializing
[    0.000874] Mount-cache hash table entries: 8192 (order: 4, 65536 bytes, linear)
[    0.000956] Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes, linear)
[    0.002254] cgroup: Disabling memory control group subsystem
[    0.005086] rcu: Hierarchical SRCU implementation.
[    0.006234] EFI services will not be available.
[    0.006794] smp: Bringing up secondary CPUs ...
[    0.007893] Detected PIPT I-cache on CPU1
[    0.007983] CPU1: Booted secondary processor 0x0000000001 [0x410fd083]
[    0.009184] Detected PIPT I-cache on CPU2
[    0.009235] CPU2: Booted secondary processor 0x0000000002 [0x410fd083]
[    0.010362] Detected PIPT I-cache on CPU3
[    0.010411] CPU3: Booted secondary processor 0x0000000003 [0x410fd083]
[    0.010563] smp: Brought up 1 node, 4 CPUs
[    0.010583] SMP: Total of 4 processors activated.
[    0.010596] CPU features: detected: 32-bit EL0 Support
[    0.010605] CPU features: detected: 32-bit EL1 Support
[    0.010618] CPU features: detected: CRC32 instructions
[    0.043599] CPU: All CPU(s) started at EL2
[    0.043686] alternatives: patching kernel code
[    0.045421] devtmpfs: initialized
[    0.057577] Enabled cp15_barrier support
[    0.057624] Enabled setend support
[    0.057645] KASLR enabled
[    0.057859] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.057895] futex hash table entries: 1024 (order: 4, 65536 bytes, linear)
[    0.067641] pinctrl core: initialized pinctrl subsystem
[    0.068556] DMI not present or invalid.
[    0.069088] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.072706] DMA: preallocated 1024 KiB GFP_KERNEL pool for atomic allocations
[    0.073015] DMA: preallocated 1024 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[    0.073897] DMA: preallocated 1024 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[    0.073996] audit: initializing netlink subsys (disabled)
[    0.074307] audit: type=2000 audit(0.072:1): state=initialized audit_enabled=0 res=1
[    0.074851] thermal_sys: Registered thermal governor 'step_wise'
[    0.075092] cpuidle: using governor menu
[    0.075303] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[    0.075500] ASID allocator initialised with 32768 entries
[    0.075664] Serial: AMBA PL011 UART driver
[    0.089369] bcm2835-mbox fe00b880.mailbox: mailbox enabled
[    0.099835] platform fe700000.dsi: Fixing up cyclic dependency with fe101000.cprman
[    0.120429] raspberrypi-firmware soc:firmware: Attached to firmware from 2022-03-24T13:19:26, variant start
[    0.124447] raspberrypi-firmware soc:firmware: Firmware hash is e5a963efa66a1974127860b42e913d2374139ff5
[    0.176186] bcm2835-dma fe007000.dma: DMA legacy API manager, dmachans=0x1
[    0.180484] vgaarb: loaded
[    0.181022] SCSI subsystem initialized
[    0.181231] usbcore: registered new interface driver usbfs
[    0.181285] usbcore: registered new interface driver hub
[    0.181354] usbcore: registered new device driver usb
[    0.181768] usb_phy_generic phy: supply vcc not found, using dummy regulator
[    0.181974] usb_phy_generic phy: dummy supplies not allowed for exclusive requests
[    0.182278] pps_core: LinuxPPS API ver. 1 registered
[    0.182291] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.182322] PTP clock support registered
[    0.183797] clocksource: Switched to clocksource arch_sys_counter
[    0.272396] VFS: Disk quotas dquot_6.6.0
[    0.272502] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    0.272671] FS-Cache: Loaded
[    0.272932] CacheFiles: Loaded
[    0.274300] simple-framebuffer 3e3cf000.framebuffer: framebuffer at 0x3e3cf000, 0x7f8000 bytes
[    0.274320] simple-framebuffer 3e3cf000.framebuffer: format=a8r8g8b8, mode=1920x1080x32, linelength=7680
[    0.274837] Console: switching to colour frame buffer device 240x67
[    0.286389] simple-framebuffer 3e3cf000.framebuffer: fb0: simplefb registered!
[    0.297035] NET: Registered PF_INET protocol family
[    0.297655] IP idents hash table entries: 65536 (order: 7, 524288 bytes, linear)
[    0.300833] tcp_listen_portaddr_hash hash table entries: 2048 (order: 3, 32768 bytes, linear)
[    0.300904] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.300931] TCP established hash table entries: 32768 (order: 6, 262144 bytes, linear)
[    0.301200] TCP bind hash table entries: 32768 (order: 7, 524288 bytes, linear)
[    0.301789] TCP: Hash tables configured (established 32768 bind 32768)
[    0.302064] UDP hash table entries: 2048 (order: 4, 65536 bytes, linear)
[    0.302163] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes, linear)
[    0.302491] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    0.303622] RPC: Registered named UNIX socket transport module.
[    0.303639] RPC: Registered udp transport module.
[    0.303649] RPC: Registered tcp transport module.
[    0.303658] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.303679] PCI: CLS 0 bytes, default 64
[    0.306282] hw perfevents: enabled with armv8_cortex_a72 PMU driver, 7 counters available
[    0.306641] kvm [1]: IPA Size Limit: 44 bits
[    0.307980] kvm [1]: vgic interrupt IRQ9
[    0.308268] kvm [1]: Hyp mode initialized successfully
[    1.195671] Initialise system trusted keyrings
[    1.196163] workingset: timestamp_bits=46 max_order=20 bucket_order=0
[    1.203287] zbud: loaded
[    1.205242] FS-Cache: Netfs 'nfs' registered for caching
[    1.205958] NFS: Registering the id_resolver key type
[    1.206001] Key type id_resolver registered
[    1.206012] Key type id_legacy registered
[    1.206134] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[    1.206147] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
[    1.207386] Key type asymmetric registered
[    1.207401] Asymmetric key parser 'x509' registered
[    1.207483] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 247)
[    1.207807] io scheduler mq-deadline registered
[    1.207823] io scheduler kyber registered
[    1.216652] gpio-507 (ant1): hogged as output/high
[    1.218087] gpio-511 (ant2): hogged as output/low
[    1.219570] brcm-pcie fd500000.pcie: host bridge /scb/pcie@7d500000 ranges:
[    1.219605] brcm-pcie fd500000.pcie:   No bus range found for /scb/pcie@7d500000, using [bus 00-ff]
[    1.219690] brcm-pcie fd500000.pcie:      MEM 0x0600000000..0x063fffffff -> 0x00c0000000
[    1.219806] brcm-pcie fd500000.pcie:   IB MEM 0x0000000000..0x00ffffffff -> 0x0400000000
[    1.539817] brcm-pcie fd500000.pcie: link down
[    1.552178] iproc-rng200 fe104000.rng: hwrng registered
[    1.552676] vc-mem: phys_addr:0x00000000 mem_base=0x3ec00000 mem_size:0x40000000(1024 MiB)
[    1.554202] gpiomem-bcm2835 fe200000.gpiomem: Initialised: Registers at 0xfe200000
[    1.567166] brd: module loaded
[    1.577111] loop: module loaded
[    1.577999] Loading iSCSI transport class v2.0-870.
[    1.583237] bcmgenet fd580000.ethernet: GENET 5.0 EPHY: 0x0000
[    1.643959] unimac-mdio unimac-mdio.-19: Broadcom UniMAC MDIO bus
[    1.645162] usbcore: registered new interface driver r8152
[    1.645241] usbcore: registered new interface driver lan78xx
[    1.645296] usbcore: registered new interface driver smsc95xx
[    1.671384] xhci-hcd fe9c0000.xhci: xHCI Host Controller
[    1.671423] xhci-hcd fe9c0000.xhci: new USB bus registered, assigned bus number 1
[    1.671812] xhci-hcd fe9c0000.xhci: hcc params 0x0220fe65 hci version 0x110 quirks 0x0000000000010010
[    1.671916] xhci-hcd fe9c0000.xhci: irq 62, io mem 0xfe9c0000
[    1.672529] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.15
[    1.672549] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.672564] usb usb1: Product: xHCI Host Controller
[    1.672577] usb usb1: Manufacturer: Linux 5.15.50-v8+ xhci-hcd
[    1.672590] usb usb1: SerialNumber: fe9c0000.xhci
[    1.673324] hub 1-0:1.0: USB hub found
[    1.673394] hub 1-0:1.0: 1 port detected
[    1.673895] xhci-hcd fe9c0000.xhci: xHCI Host Controller
[    1.673917] xhci-hcd fe9c0000.xhci: new USB bus registered, assigned bus number 2
[    1.673939] xhci-hcd fe9c0000.xhci: Host supports USB 3.0 SuperSpeed
[    1.674103] usb usb2: We don't know the algorithms for LPM for this host, disabling LPM.
[    1.674379] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 5.15
[    1.674398] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.674411] usb usb2: Product: xHCI Host Controller
[    1.674424] usb usb2: Manufacturer: Linux 5.15.50-v8+ xhci-hcd
[    1.674436] usb usb2: SerialNumber: fe9c0000.xhci
[    1.675039] hub 2-0:1.0: USB hub found
[    1.675101] hub 2-0:1.0: config failed, hub doesn't have any ports! (err -19)
[    1.675699] dwc_otg: version 3.00a 10-AUG-2012 (platform bus)
[    1.676103] dwc_otg: FIQ enabled
[    1.676115] dwc_otg: NAK holdoff enabled
[    1.676124] dwc_otg: FIQ split-transaction FSM enabled
[    1.676137] Module dwc_common_port init
[    1.676705] usbcore: registered new interface driver uas
[    1.676800] usbcore: registered new interface driver usb-storage
[    1.677014] mousedev: PS/2 mouse device common for all mice
[    1.682524] sdhci: Secure Digital Host Controller Interface driver
[    1.682545] sdhci: Copyright(c) Pierre Ossman
[    1.683236] sdhci-pltfm: SDHCI platform and OF driver helper
[    1.686964] ledtrig-cpu: registered to indicate activity on CPUs
[    1.687553] hid: raw HID events driver (C) Jiri Kosina
[    1.687712] usbcore: registered new interface driver usbhid
[    1.687725] usbhid: USB HID core driver
[    1.688108] ashmem: initialized
[    1.697151] Initializing XFRM netlink socket
[    1.697204] NET: Registered PF_PACKET protocol family
[    1.697346] Key type dns_resolver registered
[    1.698472] registered taskstats version 1
[    1.698508] Loading compiled-in X.509 certificates
[    1.699189] Key type ._fscrypt registered
[    1.699206] Key type .fscrypt registered
[    1.699218] Key type fscrypt-provisioning registered
[    1.711921] uart-pl011 fe201000.serial: there is not valid maps for state default
[    1.712243] uart-pl011 fe201000.serial: cts_event_workaround enabled
[    1.712406] fe201000.serial: ttyAMA0 at MMIO 0xfe201000 (irq = 19, base_baud = 0) is a PL011 rev2
[    1.721463] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835 watchdog timer
[    1.721939] bcm2835-power bcm2835-power: Broadcom BCM2835 power domains driver
[    1.723119] mmc-bcm2835 fe300000.mmcnr: mmc_debug:0 mmc_debug2:0
[    1.723137] mmc-bcm2835 fe300000.mmcnr: DMA channel allocated
[    1.753424] of_cfs_init
[    1.753575] of_cfs_init: OK
[    1.787703] mmc0: SDHCI controller on fe340000.mmc [fe340000.mmc] using ADMA
[    1.788294] Waiting for root device PARTUUID=bc7be3c3-02...
[    1.840337] mmc1: new high speed SDIO card at address 0001
[    1.856029] mmc0: new DDR MMC card at address 0001
[    1.857122] mmcblk0: mmc0:0001 BJTD4R 29.1 GiB 
[    1.860433]  mmcblk0: p1 p2
[    1.861025] mmcblk0: mmc0:0001 BJTD4R 29.1 GiB
[    1.861639] mmcblk0boot0: mmc0:0001 BJTD4R 4.00 MiB 
[    1.864545] mmcblk0boot1: mmc0:0001 BJTD4R 4.00 MiB 
[    1.866997] mmcblk0rpmb: mmc0:0001 BJTD4R 4.00 MiB, chardev (242:0)
[    1.872874] EXT4-fs (mmcblk0p2): INFO: recovery required on readonly filesystem
[    1.872899] EXT4-fs (mmcblk0p2): write access will be enabled during recovery
[    1.927877] usb 1-1: new high-speed USB device number 2 using xhci-hcd
[    1.952967] EXT4-fs (mmcblk0p2): recovery complete
[    1.954129] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null). Quota mode: none.
[    1.954264] VFS: Mounted root (ext4 filesystem) readonly on device 179:2.
[    1.957535] devtmpfs: mounted
[    1.967503] Freeing unused kernel memory: 3776K
[    1.967735] Run /sbin/init as init process
[    1.967745]   with arguments:
[    1.967754]     /sbin/init
[    1.967763]     splash
[    1.967809]   with environment:
[    1.967817]     HOME=/
[    1.967826]     TERM=linux
[    2.076236] usb 1-1: New USB device found, idVendor=1a40, idProduct=0101, bcdDevice= 1.11
[    2.076274] usb 1-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[    2.076289] usb 1-1: Product: USB 2.0 Hub
[    2.122374] hub 1-1:1.0: USB hub found
[    2.122477] hub 1-1:1.0: 4 ports detected
[    2.186775] systemd[1]: System time before build time, advancing clock.
[    2.344349] NET: Registered PF_INET6 protocol family
[    2.346399] Segment Routing with IPv6
[    2.346443] In-situ OAM (IOAM) with IPv6
[    2.397289] systemd[1]: systemd 247.3-7 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified)
[    2.398290] systemd[1]: Detected architecture arm64.
[    2.401902] systemd[1]: Set hostname to <raspberrypi>.
[    2.956932] systemd[1]: /lib/systemd/system/plymouth-start.service:16: Unit configured to use KillMode=none. This is unsafe, as it disables systemd's process lifecycle management for the service. Please update your service to use a safer KillMode=, such as 'mixed' or 'control-group'. Support for KillMode=none is deprecated and will eventually be removed.
[    3.087684] systemd[1]: Queued start job for default target Graphical Interface.
[    3.092490] systemd[1]: Created slice system-getty.slice.
[    3.093850] systemd[1]: Created slice system-modprobe.slice.
[    3.094826] systemd[1]: Created slice system-systemd\x2dfsck.slice.
[    3.095621] systemd[1]: Created slice User and Session Slice.
[    3.096233] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[    3.097373] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.
[    3.097826] systemd[1]: Reached target Slices.
[    3.097950] systemd[1]: Reached target Swap.
[    3.098974] systemd[1]: Listening on Syslog Socket.
[    3.099693] systemd[1]: Listening on fsck to fsckd communication Socket.
[    3.100143] systemd[1]: Listening on initctl Compatibility Named Pipe.
[    3.101414] systemd[1]: Listening on Journal Audit Socket.
[    3.102214] systemd[1]: Listening on Journal Socket (/dev/log).
[    3.103169] systemd[1]: Listening on Journal Socket.
[    3.104982] systemd[1]: Listening on udev Control Socket.
[    3.105781] systemd[1]: Listening on udev Kernel Socket.
[    3.106745] systemd[1]: Condition check resulted in Huge Pages File System being skipped.
[    3.110855] systemd[1]: Mounting POSIX Message Queue File System...
[    3.115885] systemd[1]: Mounting RPC Pipe File System...
[    3.121933] systemd[1]: Mounting Kernel Debug File System...
[    3.127503] systemd[1]: Mounting Kernel Trace File System...
[    3.128208] systemd[1]: Condition check resulted in Kernel Module supporting RPCSEC_GSS being skipped.
[    3.134796] systemd[1]: Starting Restore / save the current clock...
[    3.141047] systemd[1]: Starting Set the console keyboard layout...
[    3.147012] systemd[1]: Starting Create list of static device nodes for the current kernel...
[    3.153103] systemd[1]: Starting Load Kernel Module configfs...
[    3.159613] systemd[1]: Starting Load Kernel Module drm...
[    3.167042] systemd[1]: Starting Load Kernel Module fuse...
[    3.170398] systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped.
[    3.176488] systemd[1]: Starting File System Check on Root Device...
[    3.191053] systemd[1]: Starting Journal Service...
[    3.209995] systemd[1]: Starting Load Kernel Modules...
[    3.231364] systemd[1]: Starting Coldplug All udev Devices...
[    3.261523] systemd[1]: Mounted POSIX Message Queue File System.
[    3.262522] systemd[1]: Mounted RPC Pipe File System.
[    3.263535] systemd[1]: Mounted Kernel Debug File System.
[    3.266086] fuse: init (API version 7.34)
[    3.272105] systemd[1]: Mounted Kernel Trace File System.
[    3.275111] systemd[1]: Finished Restore / save the current clock.
[    3.279033] systemd[1]: Finished Create list of static device nodes for the current kernel.
[    3.282177] systemd[1]: modprobe@configfs.service: Succeeded.
[    3.289672] systemd[1]: Finished Load Kernel Module configfs.
[    3.296301] systemd[1]: modprobe@fuse.service: Succeeded.
[    3.298396] systemd[1]: Finished Load Kernel Module fuse.
[    3.306327] i2c_dev: i2c /dev entries driver
[    3.319154] systemd[1]: Mounting FUSE Control File System...
[    3.340447] systemd[1]: Mounting Kernel Configuration File System...
[    3.352893] systemd[1]: Started File System Check Daemon to report status.
[    3.362463] systemd[1]: Finished Load Kernel Modules.
[    3.371703] systemd[1]: Finished File System Check on Root Device.
[    3.373466] systemd[1]: Mounted FUSE Control File System.
[    3.374380] systemd[1]: Mounted Kernel Configuration File System.
[    3.380211] systemd[1]: Starting Remount Root and Kernel File Systems...
[    3.401740] systemd[1]: Starting Apply Kernel Variables...
[    3.404700] systemd[1]: modprobe@drm.service: Succeeded.
[    3.406210] systemd[1]: Finished Load Kernel Module drm.
[    3.475563] systemd[1]: Finished Apply Kernel Variables.
[    3.543293] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null). Quota mode: none.
[    3.550130] systemd[1]: Finished Remount Root and Kernel File Systems.
[    3.553721] systemd[1]: Condition check resulted in Rebuild Hardware Database being skipped.
[    3.554054] systemd[1]: Condition check resulted in Platform Persistent Storage Archival being skipped.
[    3.558585] systemd[1]: Starting Load/Save Random Seed...
[    3.563746] systemd[1]: Starting Create System Users...
[    3.565174] systemd[1]: Started Journal Service.
[    3.645087] systemd-journald[140]: Received client request to flush runtime journal.
[    3.655415] systemd-journald[140]: File /var/log/journal/65f37bb2867145f4b98fc6c95f269baa/system.journal corrupted or uncleanly shut down, renaming and replacing.
[    4.566007] mc: Linux media interface: v0.10
[    4.631096] vc_sm_cma: module is from the staging directory, the quality is unknown, you have been warned.
[    4.653591] bcm2835_vc_sm_cma_probe: Videocore shared memory driver
[    4.653641] [vc_sm_connected_init]: start
[    4.742046] snd_bcm2835: module is from the staging directory, the quality is unknown, you have been warned.
[    4.750144] bcm2835_audio bcm2835_audio: there is not valid maps for state default
[    4.769763] [vc_sm_connected_init]: installed successfully
[    4.813887] videodev: Linux video capture interface: v2.00
[    4.860514] brcmstb-i2c fef04500.i2c:  @97500hz registered in polling mode
[    4.930831] brcmstb-i2c fef09500.i2c:  @97500hz registered in polling mode
[    5.131559] bcm2835_mmal_vchiq: module is from the staging directory, the quality is unknown, you have been warned.
[    5.223100] bcm2835_isp: module is from the staging directory, the quality is unknown, you have been warned.
[    5.233656] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[    5.264089] bcm2835_v4l2: module is from the staging directory, the quality is unknown, you have been warned.
[    5.281878] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[    5.285695] bcm2835-isp bcm2835-isp: Device node output[0] registered as /dev/video13
[    5.293503] bcm2835-isp bcm2835-isp: Device node capture[0] registered as /dev/video14
[    5.296161] cfg80211: loaded regulatory.db is malformed or signature is missing/invalid
[    5.301202] bcm2835-isp bcm2835-isp: Device node capture[1] registered as /dev/video15
[    5.304494] rpivid_hevc: module is from the staging directory, the quality is unknown, you have been warned.
[    5.313458] bcm2835-isp bcm2835-isp: Device node stats[2] registered as /dev/video16
[    5.313523] bcm2835-isp bcm2835-isp: Register output node 0 with media controller
[    5.313563] bcm2835-isp bcm2835-isp: Register capture node 1 with media controller
[    5.313595] bcm2835-isp bcm2835-isp: Register capture node 2 with media controller
[    5.313613] bcm2835-isp bcm2835-isp: Register capture node 3 with media controller
[    5.324838] [drm] Initialized v3d 1.0.0 20180419 for fec00000.v3d on minor 0
[    5.344385] bcm2835_codec: module is from the staging directory, the quality is unknown, you have been warned.
[    5.353907] bcm2835-isp bcm2835-isp: Device node output[0] registered as /dev/video20
[    5.354847] bcm2835-isp bcm2835-isp: Device node capture[0] registered as /dev/video21
[    5.357626] rpivid feb10000.codec: Device registered as /dev/video19
[    5.451302] bcm2835-isp bcm2835-isp: Device node capture[1] registered as /dev/video22
[    5.476928] bcm2835-isp bcm2835-isp: Device node stats[2] registered as /dev/video23
[    5.476989] bcm2835-isp bcm2835-isp: Register output node 0 with media controller
[    5.477013] bcm2835-isp bcm2835-isp: Register capture node 1 with media controller
[    5.477032] bcm2835-isp bcm2835-isp: Register capture node 2 with media controller
[    5.477049] bcm2835-isp bcm2835-isp: Register capture node 3 with media controller
[    5.502362] bcm2835-codec bcm2835-codec: Device registered as /dev/video10
[    5.502433] bcm2835-codec bcm2835-codec: Loaded V4L2 decode
[    5.513717] bcm2835-codec bcm2835-codec: Device registered as /dev/video11
[    5.513806] bcm2835-codec bcm2835-codec: Loaded V4L2 encode
[    5.518402] bcm2835-isp bcm2835-isp: Loaded V4L2 bcm2835-isp
[    5.530850] bcm2835-codec bcm2835-codec: Device registered as /dev/video12
[    5.530952] bcm2835-codec bcm2835-codec: Loaded V4L2 isp
[    5.576240] bcm2835-codec bcm2835-codec: Device registered as /dev/video18
[    5.576300] bcm2835-codec bcm2835-codec: Loaded V4L2 image_fx
[    5.588870] bcm2835-codec bcm2835-codec: Device registered as /dev/video31
[    5.588945] bcm2835-codec bcm2835-codec: Loaded V4L2 encode_image
[    5.626324] brcmfmac: F1 signature read @0x18000000=0x15264345
[    5.648048] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
[    5.650921] brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43455-sdio.raspberrypi,4-compute-module.bin failed with error -2
[    5.656621] usbcore: registered new interface driver brcmfmac
[    5.951951] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
[    5.952209] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac43455-sdio for chip BCM4345/6
[    5.958447] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4345/6 wl0: Nov  1 2021 00:37:25 version 7.45.241 (1a2f2fa CY) FWID 01-703fd60
[    6.446509] ili9881c-dsi fe700000.dsi.0: supply supply not found, using dummy regulator
[    6.479052] checking generic (3e3cf000 7f8000) vs hw (0 ffffffffffffffff)
[    6.479095] fb0: switching to vc4 from simple
[    6.621257] Console: switching to colour dummy device 80x25
[    6.658041] vc4-drm gpu: bound fe400000.hvs (ops vc4_hvs_ops [vc4])
[    6.668037] Registered IR keymap rc-cec
[    6.685086] rc rc0: vc4 as /devices/platform/soc/fef00700.hdmi/rc/rc0
[    6.717086] input: vc4 as /devices/platform/soc/fef00700.hdmi/rc/rc0/input0
[    6.949400] uart-pl011 fe201000.serial: no DMA platform data
[    6.979256] ili9881c-dsi fe700000.dsi.0: supply supply not found, using dummy regulator
[    6.989767] vc4-drm gpu: bound fe400000.hvs (ops vc4_hvs_ops [vc4])
[    7.010038] Registered IR keymap rc-cec
[    7.010313] rc rc0: vc4 as /devices/platform/soc/fef00700.hdmi/rc/rc0
[    7.010544] input: vc4 as /devices/platform/soc/fef00700.hdmi/rc/rc0/input1
[    7.040434] vc4-drm gpu: bound fef00700.hdmi (ops vc4_hdmi_ops [vc4])
[    7.074529] Registered IR keymap rc-cec
[    7.084362] rc rc1: vc4 as /devices/platform/soc/fef05700.hdmi/rc/rc1
[    7.084621] input: vc4 as /devices/platform/soc/fef05700.hdmi/rc/rc1/input2
[    7.110111] vc4-drm gpu: bound fef05700.hdmi (ops vc4_hdmi_ops [vc4])
[    7.111566] vc4-drm gpu: bound fe700000.dsi (ops vc4_dsi_ops [vc4])
[    7.112134] vc4-drm gpu: bound fe004000.txp (ops vc4_txp_ops [vc4])
[    7.112469] vc4-drm gpu: bound fe206000.pixelvalve (ops vc4_crtc_ops [vc4])
[    7.112759] vc4-drm gpu: bound fe207000.pixelvalve (ops vc4_crtc_ops [vc4])
[    7.113054] vc4-drm gpu: bound fe20a000.pixelvalve (ops vc4_crtc_ops [vc4])
[    7.113296] vc4-drm gpu: bound fe216000.pixelvalve (ops vc4_crtc_ops [vc4])
[    7.113595] vc4-drm gpu: bound fec12000.pixelvalve (ops vc4_crtc_ops [vc4])
[    7.119256] Adding 102396k swap on /var/swap.  Priority:-2 extents:2 across:110588k SSFS
[    7.128286] [drm] Initialized vc4 0.0.0 20140616 for gpu on minor 1
[    7.199269] Console: switching to colour frame buffer device 100x67
[    7.199334] vc4-drm gpu: [drm] fb0: vc4drmfb frame buffer device
[    7.573034] 8021q: 802.1Q VLAN Support v1.8
[    8.062692] brcmfmac: brcmf_cfg80211_set_power_mgmt: power save enabled
[    8.193150] ieee80211 phy0: brcmf_cfg80211_reg_notifier: Firmware rejected country setting
[    8.340651] bcmgenet fd580000.ethernet: configuring instance for external RGMII (RX delay)
[    8.342318] bcmgenet fd580000.ethernet eth0: Link is Down
[   11.343382] systemd-journald[140]: File /var/log/journal/65f37bb2867145f4b98fc6c95f269baa/user-1000.journal corrupted or uncleanly shut down, renaming and replacing.
[   12.180696] hdmi-audio-codec hdmi-audio-codec.2.auto: ASoC: error at snd_soc_dai_startup on i2s-hifi: -19
[   12.180756]  MAI: soc_pcm_open() failed (-19)
[   12.181339] hdmi-audio-codec hdmi-audio-codec.2.auto: ASoC: error at snd_soc_dai_startup on i2s-hifi: -19
[   12.181376]  MAI: soc_pcm_open() failed (-19)
[   12.181890] hdmi-audio-codec hdmi-audio-codec.2.auto: ASoC: error at snd_soc_dai_startup on i2s-hifi: -19
[   12.181919]  MAI: soc_pcm_open() failed (-19)
[   12.189101] hdmi-audio-codec hdmi-audio-codec.2.auto: ASoC: error at snd_soc_dai_startup on i2s-hifi: -19
[   12.189167]  MAI: soc_pcm_open() failed (-19)
[   12.189414] hdmi-audio-codec hdmi-audio-codec.2.auto: ASoC: error at snd_soc_dai_startup on i2s-hifi: -19
[   12.189443]  MAI: soc_pcm_open() failed (-19)
[   12.189700] hdmi-audio-codec hdmi-audio-codec.2.auto: ASoC: error at snd_soc_dai_startup on i2s-hifi: -19
[   12.189733]  MAI: soc_pcm_open() failed (-19)
[   13.736329] Bluetooth: Core ver 2.22
[   13.736841] NET: Registered PF_BLUETOOTH protocol family
[   13.736855] Bluetooth: HCI device and connection manager initialized
[   13.736874] Bluetooth: HCI socket layer initialized
[   13.736882] Bluetooth: L2CAP socket layer initialized
[   13.736901] Bluetooth: SCO socket layer initialized
[   13.748134] Bluetooth: HCI UART driver ver 2.3
[   13.748165] Bluetooth: HCI UART protocol H4 registered
[   13.748636] Bluetooth: HCI UART protocol Three-wire (H5) registered
[   13.749257] Bluetooth: HCI UART protocol Broadcom registered
[   13.969755] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[   13.969779] Bluetooth: BNEP filters: protocol multicast
[   13.969797] Bluetooth: BNEP socket layer initialized
[   14.020230] NET: Registered PF_ALG protocol family
[   14.131985] Bluetooth: RFCOMM TTY layer initialized
[   14.132022] Bluetooth: RFCOMM socket layer initialized
[   14.132049] Bluetooth: RFCOMM ver 1.11
[   33.759902] cam-dummy-reg: disabling
[  165.423877] usb 1-1.3: new full-speed USB device number 3 using xhci-hcd
[  165.645592] usb 1-1.3: New USB device found, idVendor=046d, idProduct=c08f, bcdDevice=45.01
[  165.645625] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  165.645641] usb 1-1.3: Product: G403 HERO Gaming Mouse
[  165.645656] usb 1-1.3: Manufacturer: Logitech
[  165.645669] usb 1-1.3: SerialNumber: 146B30743132
[  165.763089] input: Logitech G403 HERO Gaming Mouse as /devices/platform/scb/fe9c0000.xhci/usb1/1-1/1-1.3/1-1.3:1.0/0003:046D:C08F.0001/input/input3
[  165.763887] hid-generic 0003:046D:C08F.0001: input,hidraw0: USB HID v1.11 Mouse [Logitech G403 HERO Gaming Mouse] on usb-fe9c0000.xhci-1.3/input0
[  165.769838] input: Logitech G403 HERO Gaming Mouse Keyboard as /devices/platform/scb/fe9c0000.xhci/usb1/1-1/1-1.3/1-1.3:1.1/0003:046D:C08F.0002/input/input4
[  165.828612] hid-generic 0003:046D:C08F.0002: input,hiddev96,hidraw1: USB HID v1.11 Keyboard [Logitech G403 HERO Gaming Mouse] on usb-fe9c0000.xhci-1.3/input1
[  172.823866] usb 1-1.4: new full-speed USB device number 4 using xhci-hcd
[  173.045355] usb 1-1.4: New USB device found, idVendor=060b, idProduct=7a02, bcdDevice= 0.01
[  173.045388] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  173.045405] usb 1-1.4: Product: USB Keyboard
[  173.045420] usb 1-1.4: Manufacturer: IKBC
[  173.221384] input: IKBC USB Keyboard as /devices/platform/scb/fe9c0000.xhci/usb1/1-1/1-1.4/1-1.4:1.0/0003:060B:7A02.0003/input/input7
[  173.280906] hid-generic 0003:060B:7A02.0003: input,hidraw2: USB HID v1.11 Keyboard [IKBC USB Keyboard] on usb-fe9c0000.xhci-1.4/input0
[  173.290057] input: IKBC USB Keyboard Consumer Control as /devices/platform/scb/fe9c0000.xhci/usb1/1-1/1-1.4/1-1.4:1.1/0003:060B:7A02.0004/input/input8
[  173.348358] input: IKBC USB Keyboard System Control as /devices/platform/scb/fe9c0000.xhci/usb1/1-1/1-1.4/1-1.4:1.1/0003:060B:7A02.0004/input/input9
[  173.348761] input: IKBC USB Keyboard Mouse as /devices/platform/scb/fe9c0000.xhci/usb1/1-1/1-1.4/1-1.4:1.1/0003:060B:7A02.0004/input/input10
[  173.349357] hid-generic 0003:060B:7A02.0004: input,hidraw3: USB HID v1.11 Mouse [IKBC USB Keyboard] on usb-fe9c0000.xhci-1.4/input1
[  173.354763] input: IKBC USB Keyboard as /devices/platform/scb/fe9c0000.xhci/usb1/1-1/1-1.4/1-1.4:1.2/0003:060B:7A02.0005/input/input11
[  173.412523] hid-generic 0003:060B:7A02.0005: input,hidraw4: USB HID v1.11 Keyboard [IKBC USB Keyboard] on usb-fe9c0000.xhci-1.4/input2
[  173.415271] hid-generic 0003:060B:7A02.0006: hiddev97,hidraw5: USB HID v1.11 Device [IKBC USB Keyboard] on usb-fe9c0000.xhci-1.4/input3
[  268.754646] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[  268.771997] ieee80211 phy0: brcmf_cfg80211_reg_notifier: Firmware rejected country setting
[  271.011692] ICMPv6: process `dhcpcd' is using deprecated sysctl (syscall) net.ipv6.neigh.wlan0.retrans_time - use net.ipv6.neigh.wlan0.retrans_time_ms instead
[  282.818936] usb 1-1.3: USB disconnect, device number 3
[  284.880237] usb 1-1.4: USB disconnect, device number 4
[  523.705136] v3d fec00000.v3d: MMU error from client CLE (4) at 0x36c1000, pte invalid
pi@raspberrypi:~ $ 
After completing the "modetest -M vc4 | less" command(

Can you continue to help me? Thank you

sunny2405
Posts: 13
Joined: Mon Jun 27, 2022 2:10 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Fri Jul 01, 2022 3:51 pm

After completing the "modetest -M vc4 | less" command

Code: Select all

Encoders:
id	crtc	type	possible crtcs	possible clones	
31	96	TMDS	0x00000008	0x00000001
40	0	TMDS	0x00000010	0x00000002
45	85	DSI	0x00000004	0x00000004
51	0	Virtual	0x00000001	0x00000008

Connectors:
id	encoder	status		name		size (mm)	modes	encoders
32	31	connected	HDMI-A-1       	530x300		27	31
  modes:
	index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot
  #0 1920x1080 60.00 1920 2008 2052 2200 1080 1084 1089 1125 148500 flags: phsync, pvsync; type: preferred, userdef, driver
  #1 1920x1080 59.94 1920 2008 2052 2200 1080 1084 1089 1125 148352 flags: phsync, pvsync; type: driver
  #2 1920x1080i 30.00 1920 2008 2052 2200 1080 1084 1094 1125 74250 flags: phsync, pvsync, interlace; type: driver
  #3 1920x1080i 29.97 1920 2008 2052 2200 1080 1084 1094 1125 74176 flags: phsync, pvsync, interlace; type: driver
  #4 1920x1080 50.00 1920 2448 2492 2640 1080 1084 1089 1125 148500 flags: phsync, pvsync; type: driver
  #5 1920x1080i 25.00 1920 2448 2492 2640 1080 1084 1094 1125 74250 flags: phsync, pvsync, interlace; type: driver
  #6 1600x1200 60.00 1600 1664 1856 2160 1200 1201 1204 1250 162000 flags: phsync, pvsync; type: driver
  #7 1280x1024 75.02 1280 1296 1440 1688 1024 1025 1028 1066 135000 flags: phsync, pvsync; type: driver
  #8 1280x1024 60.02 1280 1328 1440 1688 1024 1025 1028 1066 108000 flags: phsync, pvsync; type: driver
  #9 1152x864 75.00 1152 1216 1344 1600 864 865 868 900 108000 flags: phsync, pvsync; type: driver
  #10 1280x720 60.00 1280 1390 1430 1650 720 725 730 750 74250 flags: phsync, pvsync; type: driver
  #11 1280x720 59.94 1280 1390 1430 1650 720 725 730 750 74176 flags: phsync, pvsync; type: driver
  #12 1280x720 50.00 1280 1720 1760 1980 720 725 730 750 74250 flags: phsync, pvsync; type: driver
  #13 1024x768 75.03 1024 1040 1136 1312 768 769 772 800 78750 flags: phsync, pvsync; type: driver
  #14 1024x768 60.00 1024 1048 1184 1344 768 771 777 806 65000 flags: nhsync, nvsync; type: driver
  #15 800x600 75.00 800 816 896 1056 600 601 604 625 49500 flags: phsync, pvsync; type: driver
  #16 800x600 60.32 800 840 968 1056 600 601 605 628 40000 flags: phsync, pvsync; type: driver
  #17 720x576 50.00 720 732 796 864 576 581 586 625 27000 flags: nhsync, nvsync; type: driver
  #18 720x576i 25.00 720 732 795 864 576 580 586 625 13500 flags: nhsync, nvsync, interlace, dblclk; type: driver
  #19 720x480 60.00 720 736 798 858 480 489 495 525 27027 flags: nhsync, nvsync; type: driver
  #20 720x480 59.94 720 736 798 858 480 489 495 525 27000 flags: nhsync, nvsync; type: driver
  #21 720x480i 30.00 720 739 801 858 480 488 494 525 13514 flags: nhsync, nvsync, interlace, dblclk; type: driver
  #22 720x480i 29.97 720 739 801 858 480 488 494 525 13500 flags: nhsync, nvsync, interlace, dblclk; type: driver
  #23 640x480 75.00 640 656 720 840 480 481 484 500 31500 flags: nhsync, nvsync; type: driver
  #24 640x480 60.00 640 656 752 800 480 490 492 525 25200 flags: nhsync, nvsync; type: driver
  #25 640x480 59.94 640 656 752 800 480 490 492 525 25175 flags: nhsync, nvsync; type: driver
  #26 720x400 70.08 720 738 846 900 400 412 414 449 28320 flags: nhsync, pvsync; type: driver
  props:
	1 EDID:
		flags: immutable blob
		blobs:

		value:
			00ffffffffffff0010ace8404c584643
			0b1b010380351e78eaee95a3544c9926
			0f5054a54b00714f8180a940d1c00101
			010101010101023a801871382d40582c
			45000f282100001e000000ff00475939
			50323733494346584c0a000000fc0044
			454c4c205532343137480a20000000fd
			00324b1e5311000a2020202020200125
			020326f14f9005040302071601061112
			1513141f2309070765030c0010008301
			0000e3050000023a801871382d40582c
			45000f282100001e011d8018711c1620
			582c25000f282100009e011d007251d0
			1e206e2855000f282100001e8c0ad08a
			20e02d10103e96000f28210000180000
			00000000000000000000000000000019
	2 DPMS:
		flags: enum
		enums: On=0 Standby=1 Suspend=2 Off=3
		value: 0
	5 link-status:
		flags: enum
		enums: Good=0 Bad=1
		value: 0
	6 non-desktop:
		flags: immutable range
		values: 0 1
		value: 0
	4 TILE:
		flags: immutable blob
		blobs:

		value:
	37 Colorspace:
		flags: enum
		enums: Default=0 SMPTE_170M_YCC=1 BT709_YCC=2 XVYCC_601=3 XVYCC_709=4 SYCC_601=5 opYCC_601=6 opRGB=7 BT2020_CYCC=8 BT2020_RGB=9 BT2020_YCC=10 DCI-P3_RGB_D65=11 DCI-P3_RGB_Theater=12
		value: 0
	33 left margin:
		flags: range
		values: 0 100
		value: 0
	34 right margin:
		flags: range
		values: 0 100
		value: 0
	35 top margin:
		flags: range
		values: 0 100
		value: 0
	36 bottom margin:
		flags: range
		values: 0 100
		value: 0
	38 max bpc:
		flags: range
		values: 8 12
		value: 8
	7 HDR_OUTPUT_METADATA:
		flags: blob
		blobs:

		value:
	39 Broadcast RGB:
		flags: enum
		enums: Automatic=0 Full=1 Limited 16:235=2
		value: 0
41	0	disconnected	HDMI-A-2       	0x0		0	40
  props:
	1 EDID:
		flags: immutable blob
		blobs:

		value:
	2 DPMS:
		flags: enum
		enums: On=0 Standby=1 Suspend=2 Off=3
		value: 3
	5 link-status:
		flags: enum
		enums: Good=0 Bad=1
		value: 0
	6 non-desktop:
		flags: immutable range
		values: 0 1
		value: 0
	4 TILE:
		flags: immutable blob
		blobs:

		value:
	42 Colorspace:
		flags: enum
		enums: Default=0 SMPTE_170M_YCC=1 BT709_YCC=2 XVYCC_601=3 XVYCC_709=4 SYCC_601=5 opYCC_601=6 opRGB=7 BT2020_CYCC=8 BT2020_RGB=9 BT2020_YCC=10 DCI-P3_RGB_D65=11 DCI-P3_RGB_Theater=12
		value: 0
	33 left margin:
		flags: range
		values: 0 100
		value: 0
	34 right margin:
		flags: range
		values: 0 100
		value: 0
	35 top margin:
		flags: range
		values: 0 100
		value: 0
	36 bottom margin:
		flags: range
		values: 0 100
		value: 0
	43 max bpc:
		flags: range
		values: 8 12
		value: 8
	7 HDR_OUTPUT_METADATA:
		flags: blob
		blobs:

		value:
	44 Broadcast RGB:
		flags: enum
		enums: Automatic=0 Full=1 Limited 16:235=2
		value: 0
46	45	connected	DSI-1          	68x121		1	45
  modes:
	index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot
  #0 800x1280 58.44 800 850 856 906 1280 1300 1302 1322 70000 flags: ; type: preferred, driver
  props:
	1 EDID:
		flags: immutable blob
		blobs:

		value:
	2 DPMS:
		flags: enum
		enums: On=0 Standby=1 Suspend=2 Off=3
		value: 0
	5 link-status:
		flags: enum
		enums: Good=0 Bad=1
		value: 0
	6 non-desktop:
		flags: immutable range
		values: 0 1
		value: 0
	4 TILE:
		flags: immutable blob
		blobs:

		value:

CRTCs:
id	fb	pos	size
63	0	(0,0)	(0x0)
  #0  nan 0 0 0 0 0 0 0 0 0 flags: ; type: 
  props:
	24 VRR_ENABLED:
		flags: range
		values: 0 1
		value: 0
74	0	(0,0)	(0x0)
  #0  nan 0 0 0 0 0 0 0 0 0 flags: ; type: 
  props:
	24 VRR_ENABLED:
		flags: range
		values: 0 1
		value: 0
85	344	(1920,0)	(800x1280)
  #0  58.44 800 850 856 906 1280 1300 1302 1322 70000 flags: ; type: 
  props:
	24 VRR_ENABLED:
		flags: range
		values: 0 1
		value: 0
96	345	(0,0)	(1920x1080)
  #0  60.00 1920 2008 2052 2200 1080 1084 1089 1125 148500 flags: phsync, pvsync; type: 
  props:
	24 VRR_ENABLED:
		flags: range
		values: 0 1
		value: 0
107	0	(0,0)	(0x0)
  #0  nan 0 0 0 0 0 0 0 0 0 flags: ; type: 
  props:
	24 VRR_ENABLED:
		flags: range
		values: 0 1
		value: 0
118	0	(0,0)	(0x0)
  #0  nan 0 0 0 0 0 0 0 0 0 flags: ; type: 
  props:
	24 VRR_ENABLED:
		flags: range
		values: 0 1
		value: 0

Planes:
id	crtc	fb	CRTC x,y	x,y	gamma size	possible crtcs
53	0	0	0,0		0,0	0       	0x00000001
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 1
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	55 alpha:
		flags: range
		values: 0 65535
		value: 65535
	56 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	57 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	58 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	59 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	60 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	61 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	62 zpos:
		flags: immutable range
		values: 0 0
		value: 0
64	0	0	0,0		0,0	0       	0x00000002
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 1
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	66 alpha:
		flags: range
		values: 0 65535
		value: 65535
	67 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	68 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	69 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	70 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	71 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	72 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	73 zpos:
		flags: immutable range
		values: 0 0
		value: 0
75	85	344	0,0		0,0	0       	0x00000004
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 1
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	77 alpha:
		flags: range
		values: 0 65535
		value: 65535
	78 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	79 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	80 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	81 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	82 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	83 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	84 zpos:
		flags: immutable range
		values: 0 0
		value: 0
86	96	345	0,0		0,0	0       	0x00000008
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 1
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	88 alpha:
		flags: range
		values: 0 65535
		value: 65535
	89 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	90 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	91 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	92 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	93 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	94 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	95 zpos:
		flags: immutable range
		values: 0 0
		value: 0
97	0	0	0,0		0,0	0       	0x00000010
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 1
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	99 alpha:
		flags: range
		values: 0 65535
		value: 65535
	100 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	101 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	102 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	103 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	104 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	105 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	106 zpos:
		flags: immutable range
		values: 0 0
		value: 0
108	0	0	0,0		0,0	0       	0x00000020
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 1
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	110 alpha:
		flags: range
		values: 0 65535
		value: 65535
	111 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	112 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	113 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	114 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	115 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	116 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	117 zpos:
		flags: immutable range
		values: 0 0
		value: 0
119	0	0	0,0		0,0	0       	0x0000003f
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	121 alpha:
		flags: range
		values: 0 65535
		value: 65535
	122 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	123 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	124 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	125 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	126 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	127 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	128 zpos:
		flags: range
		values: 1 17
		value: 1
129	0	0	0,0		0,0	0       	0x0000003f
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	131 alpha:
		flags: range
		values: 0 65535
		value: 65535
	132 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	133 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	134 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	135 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	136 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	137 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	138 zpos:
		flags: range
		values: 1 17
		value: 2
139	0	0	0,0		0,0	0       	0x0000003f
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	141 alpha:
		flags: range
		values: 0 65535
		value: 65535
	142 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	143 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	144 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	145 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	146 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	147 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	148 zpos:
		flags: range
		values: 1 17
		value: 3
149	0	0	0,0		0,0	0       	0x0000003f
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	151 alpha:
		flags: range
		values: 0 65535
		value: 65535
	152 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	153 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	154 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	155 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	156 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	157 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	158 zpos:
		flags: range
		values: 1 17
		value: 4
159	0	0	0,0		0,0	0       	0x0000003f
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	161 alpha:
		flags: range
		values: 0 65535
		value: 65535
	162 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	163 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	164 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	165 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	166 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	167 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0

sunny2405
Posts: 13
Joined: Mon Jun 27, 2022 2:10 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Fri Jul 01, 2022 3:51 pm

Code: Select all

	168 zpos:
		flags: range
		values: 1 17
		value: 5
169	0	0	0,0		0,0	0       	0x0000003f
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	171 alpha:
		flags: range
		values: 0 65535
		value: 65535
	172 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	173 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	174 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	175 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	176 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	177 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	178 zpos:
		flags: range
		values: 1 17
		value: 6
179	0	0	0,0		0,0	0       	0x0000003f
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	181 alpha:
		flags: range
		values: 0 65535
		value: 65535
	182 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	183 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	184 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	185 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	186 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	187 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	188 zpos:
		flags: range
		values: 1 17
		value: 7
189	0	0	0,0		0,0	0       	0x0000003f
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	191 alpha:
		flags: range
		values: 0 65535
		value: 65535
	192 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	193 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	194 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	195 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	196 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	197 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	198 zpos:
		flags: range
		values: 1 17
		value: 8
199	0	0	0,0		0,0	0       	0x0000003f
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	201 alpha:
		flags: range
		values: 0 65535
		value: 65535
	202 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	203 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	204 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	205 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	206 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	207 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	208 zpos:
		flags: range
		values: 1 17
		value: 9
209	0	0	0,0		0,0	0       	0x0000003f
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	211 alpha:
		flags: range
		values: 0 65535
		value: 65535
	212 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	213 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	214 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	215 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	216 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	217 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	218 zpos:
		flags: range
		values: 1 17
		value: 10
219	0	0	0,0		0,0	0       	0x0000003f
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	221 alpha:
		flags: range
		values: 0 65535
		value: 65535
	222 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	223 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	224 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	225 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	226 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	227 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	228 zpos:
		flags: range
		values: 1 17
		value: 11
229	0	0	0,0		0,0	0       	0x0000003f
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	231 alpha:
		flags: range
		values: 0 65535
		value: 65535
	232 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	233 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	234 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	235 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	236 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	237 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	238 zpos:
		flags: range
		values: 1 17
		value: 12
239	0	0	0,0		0,0	0       	0x0000003f
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	241 alpha:
		flags: range
		values: 0 65535
		value: 65535
	242 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	243 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	244 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	245 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	246 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	247 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	248 zpos:
		flags: range
		values: 1 17
		value: 13
249	0	0	0,0		0,0	0       	0x0000003f
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	251 alpha:
		flags: range
		values: 0 65535
		value: 65535
	252 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	253 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	254 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	255 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	256 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	257 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	258 zpos:
		flags: range
		values: 1 17
		value: 14
259	0	0	0,0		0,0	0       	0x0000003f
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	261 alpha:
		flags: range
		values: 0 65535
		value: 65535
	262 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	263 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	264 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	265 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	266 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	267 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	268 zpos:
		flags: range
		values: 1 17
		value: 15
269	0	0	0,0		0,0	0       	0x0000003f
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	271 alpha:
		flags: range
		values: 0 65535
		value: 65535
	272 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	273 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	274 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	275 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	276 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	277 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	278 zpos:
		flags: range
		values: 1 17
		value: 16
279	0	0	0,0		0,0	0       	0x00000001
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 2
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	281 alpha:
		flags: range
		values: 0 65535
		value: 65535
	282 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	283 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	284 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	285 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	286 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	287 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	288 zpos:
		flags: range
		values: 1 17
		value: 17
289	0	0	0,0		0,0	0       	0x00000002
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 2
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	291 alpha:
		flags: range
		values: 0 65535
		value: 65535
	292 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	293 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	294 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	295 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	296 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	297 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	298 zpos:
		flags: range
		values: 1 17
		value: 17
299	0	0	0,0		0,0	0       	0x00000004
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 2
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	301 alpha:
		flags: range
		values: 0 65535
		value: 65535
	302 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	303 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	304 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	305 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	306 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	307 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	308 zpos:
		flags: range
		values: 1 17
		value: 17
309	96	341	0,0		0,0	0       	0x00000008
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 2
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	311 alpha:
		flags: range
		values: 0 65535
		value: 65535
	312 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	313 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	314 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	315 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	316 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	317 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	318 zpos:
		flags: range
		values: 1 17
		value: 17
319	0	0	0,0		0,0	0       	0x00000010
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 2
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	321 alpha:
		flags: range
		values: 0 65535
		value: 65535
	322 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	323 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	324 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	325 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	326 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	327 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	328 zpos:
		flags: range
		values: 1 17
		value: 17
329	0	0	0,0		0,0	0       	0x00000020
  formats: XR24 AR24 AB24 XB24 RG16 BG16 AR15 XR15 RG24 BG24 YU16 YV16 YU12 YV12 NV12 NV21 NV16 NV61 P030 XR30 AR30 AB30 XB30 RGB8 BGR8 XR12 AR12 XB12 AB12 BX12 BA12 RX12 RA12
  props:
	8 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 2
	30 IN_FORMATS:
		flags: immutable blob
		blobs:

		value:
			01000000000000002100000018000000
			05000000a00000005852323441523234
			41423234584232345247313642473136
			41523135585231355247323442473234
			59553136595631365955313259563132
			4e5631324e5632314e5631364e563631
			50303330585233304152333041423330
			58423330524742384247523858523132
			41523132584231324142313242583132
			42413132525831325241313200000000
			ff000000000000000000000000000000
			010000000000000700c0040000000000
			00000000000000000400000000000007
			00c00000000000000000000000000000
			030000000000000700c0000000000000
			00000000000000000500000000000007
			fffffbff010000000000000000000000
			0000000000000000
		in_formats blob decoded:
			 XR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XB24:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 BG16:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 AR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 XR15:  MOD_BROADCOM_VC4_T_TILED LINEAR
			 RG24:  LINEAR
			 BG24:  LINEAR
			 YU16:  LINEAR
			 YV16:  LINEAR
			 YU12:  LINEAR
			 YV12:  LINEAR
			 NV12:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV21:  (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) (UNKNOWN MODIFIER) LINEAR
			 NV16:  LINEAR
			 NV61:  LINEAR
			 P030:  (UNKNOWN MODIFIER)
			 XR30:  LINEAR
			 AR30:  LINEAR
			 AB30:  LINEAR
			 XB30:  LINEAR
			 RGB8:  LINEAR
			 BGR8:  LINEAR
			 XR12:  LINEAR
			 AR12:  LINEAR
			 XB12:  LINEAR
			 AB12:  LINEAR
			 BX12:  LINEAR
			 BA12:  LINEAR
			 RX12:  LINEAR
			 RA12:  LINEAR
	331 alpha:
		flags: range
		values: 0 65535
		value: 65535
	332 pixel blend mode:
		flags: enum
		enums: None=2 Pre-multiplied=0 Coverage=1
		value: 0
	333 rotation:
		flags: bitmask
		values: rotate-0=0x1 rotate-180=0x4 reflect-x=0x10 reflect-y=0x20
		value: 1
	334 COLOR_ENCODING:
		flags: enum
		enums: ITU-R BT.601 YCbCr=0 ITU-R BT.709 YCbCr=1 ITU-R BT.2020 YCbCr=2
		value: 1
	335 COLOR_RANGE:
		flags: enum
		enums: YCbCr limited range=0 YCbCr full range=1
		value: 0
	336 CHROMA_SITING_H:
		flags: range
		values: 0 65536
		value: 0
	337 CHROMA_SITING_V:
		flags: range
		values: 0 65536
		value: 0
	338 zpos:
		flags: range
		values: 1 17
		value: 17

Frame buffers:
id	size	pitch


6by9
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 13243
Joined: Wed Dec 04, 2013 11:27 am
Location: ZZ9 Plural Z Alpha, aka just outside Cambridge.

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Fri Jul 01, 2022 4:13 pm

So DSI is up and running at the 800x1280 that you've requested.

The driver is configured to use 4 DSI data lanes. Is that what you have wired up and is expected by your display?
Software Engineer at Raspberry Pi Ltd. Views expressed are still personal views.
I'm not interested in doing contracts for bespoke functionality - please don't ask.

sunny2405
Posts: 13
Joined: Mon Jun 27, 2022 2:10 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Fri Jul 01, 2022 4:42 pm

Hi 6by9

Yes, I used an oscilloscope to check the output, all signals from 4 lanes have signal
So I will send pictures of it tomorrow after I get to the company.

I'm wondering if the problem is that my extension cable is too long
I use a 0.5mm pitch FFC cable 10cm long, I'm afraid its impedance is not guaranteed

Image

aBUGSworstnightmare
Posts: 5618
Joined: Tue Jun 30, 2015 1:35 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Fri Jul 01, 2022 4:48 pm

sunny2405 wrote:
Fri Jul 01, 2022 4:42 pm
Hi 6by9

Yes, I used an oscilloscope to check the output, all signals from 4 lanes have signal
So I will send pictures of it tomorrow after I get to the company.

I'm wondering if the problem is that my extension cable is too long
I use a 0.5mm pitch FFC cable 10cm long, I'm afraid its impedance is not guaranteed

Image
cable can be an issue, more likely it's init or power on sequence.
I'm using 22-pin FFC from CM4IO to my board with no issues; 10cm lenght as well.
Do you have lenght matching (and not just impedance matching) as well.

sunny2405
Posts: 13
Joined: Mon Jun 27, 2022 2:10 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Fri Jul 01, 2022 5:17 pm

]Hi 6by9
Yes on the PCB board I have impedance matching and length matching for the entire MIPI bus

Is there any other problem leading to this, RESET signal, or something else.
Image
Image

schematics
Image

filter EMI and ESD, I am using part EMI8141MUTAG for MIPI bus lines

dp11
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 940
Joined: Thu Dec 29, 2011 5:46 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Fri Jul 01, 2022 6:54 pm

I can't see in the pictures, but for constant impedance the same reference plane must be constant under the entire length of diff pair and if you change layers you need vias to join the reference planes or coupling capacitors to join the reference planes.

sunny2405
Posts: 13
Joined: Mon Jun 27, 2022 2:10 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Sat Jul 02, 2022 12:13 am

dp11 wrote:
Fri Jul 01, 2022 6:54 pm
I can't see in the pictures, but for constant impedance the same reference plane must be constant under the entire length of diff pair and if you change layers you need vias to join the reference planes or coupling capacitors to join the reference planes.
My PCB has 4 layers, BOT layer refer L3(GND) and Top refer L2 (GND). I believe their impedance is ok. To day, I will send you signal waveform

sunny2405
Posts: 13
Joined: Mon Jun 27, 2022 2:10 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Sat Jul 02, 2022 3:08 am

aBUGSworstnightmare wrote:
Fri Jul 01, 2022 4:48 pm
sunny2405 wrote:
Fri Jul 01, 2022 4:42 pm
Hi 6by9

Yes, I used an oscilloscope to check the output, all signals from 4 lanes have signal
So I will send pictures of it tomorrow after I get to the company.

I'm wondering if the problem is that my extension cable is too long
I use a 0.5mm pitch FFC cable 10cm long, I'm afraid its impedance is not guaranteed

Image
cable can be an issue, more likely it's init or power on sequence.
I'm using 22-pin FFC from CM4IO to my board with no issues; 10cm lenght as well.
Do you have lenght matching (and not just impedance matching) as well.
Hi 6by9
I send pictures of waveform signal MIPI
Is the Clock's waveform ok?

These are the waveforms of each pair of P, N
Image
Image
Image
Image
Image
Image

Clock waveform (DSI1_C_N)

Image
Image

sunny2405
Posts: 13
Joined: Mon Jun 27, 2022 2:10 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Sat Jul 02, 2022 4:00 am

Waveforms of DSI_C_N and DSI_D0_N signals
Image

Blue: DSI_C_N, Yellow: DSI_C_P
It feels like they're in sync
Why so?
Image

dp11
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 940
Joined: Thu Dec 29, 2011 5:46 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Sat Jul 02, 2022 4:41 am

sunny2405 wrote:
Sat Jul 02, 2022 12:13 am
dp11 wrote:
Fri Jul 01, 2022 6:54 pm
I can't see in the pictures, but for constant impedance the same reference plane must be constant under the entire length of diff pair and if you change layers you need vias to join the reference planes or coupling capacitors to join the reference planes.
My PCB has 4 layers, BOT layer refer L3(GND) and Top refer L2 (GND). I believe their impedance is ok. To day, I will send you signal waveform
I can't see vias linking the ground planes very close to the layer transitions.it might be the image.

dp11
Raspberry Pi Engineer & Forum Moderator
Raspberry Pi Engineer & Forum Moderator
Posts: 940
Joined: Thu Dec 29, 2011 5:46 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Sat Jul 02, 2022 4:45 am

sunny2405 wrote:
Sat Jul 02, 2022 4:00 am
Waveforms of DSI_C_N and DSI_D0_N signals
Image

Blue: DSI_C_N, Yellow: DSI_C_P
It feels like they're in sync
Why so?
Image
Looks to me as the DSI_C_N is open circuit

aBUGSworstnightmare
Posts: 5618
Joined: Tue Jun 30, 2015 1:35 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Sat Jul 02, 2022 5:41 am

Have you checked your reset signal waveform and timing ?

sunny2405
Posts: 13
Joined: Mon Jun 27, 2022 2:10 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Thu Jul 07, 2022 8:41 am

Hi @all
I am redesigning a new PCB, I will bring it up in 2 weeks
Thank all

sunny2405
Posts: 13
Joined: Mon Jun 27, 2022 2:10 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Fri Aug 12, 2022 2:26 pm

My LCD worked with OS bullseye 64bit, but after change to os buster, it got the follwing error

Code: Select all

[    0.066258] platform fe700000.dsi: Fixing up cyclic dependency with fe101000.cprman
[    6.920223] ili9881c-dsi fe700000.dsi.0: supply power not found, using dummy regulator
[    6.942735] vc4-drm gpu: bound fe700000.dsi (ops vc4_dsi_ops [vc4])
[    6.948241] [<c088b5f4>] (component_add) from [<bf5788c8>] (vc4_dsi_host_attach+0x90/0x118 [vc4])
[    6.948401] [<bf578838>] (vc4_dsi_host_attach [vc4]) from [<c0887938>] (mipi_dsi_attach+0x38/0x44)
[    6.948577] [<c0887900>] (mipi_dsi_attach) from [<bf1c61a0>] (ili9881c_dsi_probe+0xe8/0x134 [panel_ilitek_ili9881c])
[    6.948612] [<bf1c60b8>] (ili9881c_dsi_probe [panel_ilitek_ili9881c]) from [<c0887fd8>] (mipi_dsi_drv_probe+0x28/0x2c)
[    6.948656] [<c0887fb0>] (mipi_dsi_drv_probe) from [<c089401c>] (really_probe.part.0+0xac/0x33c)
[    6.948941] [<c08952c0>] (driver_register) from [<c0888328>] (mipi_dsi_driver_register_full+0x64/0x68)
[    6.948978] [<c08882c4>] (mipi_dsi_driver_register_full) from [<bf08d028>] (ili9881c_dsi_driver_init+0x28/0x1000 [panel_ilitek_ili9881c])
[    6.949013] [<bf08d000>] (ili9881c_dsi_driver_init [panel_ilitek_ili9881c]) from [<c02021e8>] (do_one_initcall+0x50/0x250)
How to handle them?

aBUGSworstnightmare
Posts: 5618
Joined: Tue Jun 30, 2015 1:35 pm

Re: LCD TFT 10.1 inch MIPI DSI interface with Pi CM4

Sun Aug 14, 2022 6:15 am

Why do you want to use buster?
Which kernel do you speak of when saying 'Buster OS'?

Return to “Compute Module”