// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright (c) 2018 MediaTek Inc.
 * Author: Jitao Shi <jitao.shi@mediatek.com>
 */

#include <linux/delay.h>
#include <linux/gpio/consumer.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/regulator/consumer.h>

#include <drm/drm_connector.h>
#include <drm/drm_crtc.h>
#include <drm/drm_mipi_dsi.h>
#include <drm/drm_panel.h>

#include <video/mipi_display.h>

struct panel_desc {
	const struct drm_display_mode *modes;
	unsigned int bpc;

	/**
	 * @width_mm: width of the panel's active display area
	 * @height_mm: height of the panel's active display area
	 */
	struct {
		unsigned int width_mm;
		unsigned int height_mm;
	} size;

	unsigned long mode_flags;
	enum mipi_dsi_pixel_format format;
	const struct panel_init_cmd *init_cmds;
	unsigned int lanes;
	bool discharge_on_disable;
};

struct boe_panel {
	struct drm_panel base;
	struct mipi_dsi_device *dsi;

	const struct panel_desc *desc;

	enum drm_panel_orientation orientation;
	struct regulator *pp3300;
	struct regulator *pp1800;
	struct regulator *avee;
	struct regulator *avdd;
	struct gpio_desc *enable_gpio;

	bool prepared;
};

enum dsi_cmd_type {
	INIT_DCS_CMD,
	DELAY_CMD,
};

struct panel_init_cmd {
	enum dsi_cmd_type type;
	size_t len;
	const char *data;
};

#define _INIT_DCS_CMD(...) { \
	.type = INIT_DCS_CMD, \
	.len = sizeof((char[]){__VA_ARGS__}), \
	.data = (char[]){__VA_ARGS__} }

#define _INIT_DELAY_CMD(...) { \
	.type = DELAY_CMD,\
	.len = sizeof((char[]){__VA_ARGS__}), \
	.data = (char[]){__VA_ARGS__} }

static const struct panel_init_cmd boe_tv110c9m_init_cmd[] = {
	_INIT_DCS_CMD(0xFF, 0x20),
	_INIT_DCS_CMD(0xFB, 0x01),
	_INIT_DCS_CMD(0x05, 0xD9),
	_INIT_DCS_CMD(0x07, 0x78),
	_INIT_DCS_CMD(0x08, 0x5A),
	_INIT_DCS_CMD(0x0D, 0x63),
	_INIT_DCS_CMD(0x0E, 0x91),
	_INIT_DCS_CMD(0x0F, 0x73),
	_INIT_DCS_CMD(0x95, 0xE6),
	_INIT_DCS_CMD(0x96, 0xF0),
	_INIT_DCS_CMD(0x30, 0x00),
	_INIT_DCS_CMD(0x6D, 0x66),
	_INIT_DCS_CMD(0x75, 0xA2),
	_INIT_DCS_CMD(0x77, 0x3B),

	_INIT_DCS_CMD(0xB0, 0x00, 0x08, 0x00, 0x23, 0x00, 0x4D, 0x00, 0x6D, 0x00, 0x89, 0x00, 0xA1, 0x00, 0xB6, 0x00, 0xC9),
	_INIT_DCS_CMD(0xB1, 0x00, 0xDA, 0x01, 0x13, 0x01, 0x3C, 0x01, 0x7E, 0x01, 0xAB, 0x01, 0xF7, 0x02, 0x2F, 0x02, 0x31),
	_INIT_DCS_CMD(0xB2, 0x02, 0x67, 0x02, 0xA6, 0x02, 0xD1, 0x03, 0x08, 0x03, 0x2E, 0x03, 0x5B, 0x03, 0x6B, 0x03, 0x7B),
	_INIT_DCS_CMD(0xB3, 0x03, 0x8E, 0x03, 0xA2, 0x03, 0xB7, 0x03, 0xE7, 0x03, 0xFD, 0x03, 0xFF),

	_INIT_DCS_CMD(0xB4, 0x00, 0x08, 0x00, 0x23, 0x00, 0x4D, 0x00, 0x6D, 0x00, 0x89, 0x00, 0xA1, 0x00, 0xB6, 0x00, 0xC9),
	_INIT_DCS_CMD(0xB5, 0x00, 0xDA, 0x01, 0x13, 0x01, 0x3C, 0x01, 0x7E, 0x01, 0xAB, 0x01, 0xF7, 0x02, 0x2F, 0x02, 0x31),
	_INIT_DCS_CMD(0xB6, 0x02, 0x67, 0x02, 0xA6, 0x02, 0xD1, 0x03, 0x08, 0x03, 0x2E, 0x03, 0x5B, 0x03, 0x6B, 0x03, 0x7B),
	_INIT_DCS_CMD(0xB7, 0x03, 0x8E, 0x03, 0xA2, 0x03, 0xB7, 0x03, 0xE7, 0x03, 0xFD, 0x03, 0xFF),
	_INIT_DCS_CMD(0xB8, 0x00, 0x08, 0x00, 0x23, 0x00, 0x4D, 0x00, 0x6D, 0x00, 0x89, 0x00, 0xA1, 0x00, 0xB6, 0x00, 0xC9),
	_INIT_DCS_CMD(0xB9, 0x00, 0xDA, 0x01, 0x13, 0x01, 0x3C, 0x01, 0x7E, 0x01, 0xAB, 0x01, 0xF7, 0x02, 0x2F, 0x02, 0x31),
	_INIT_DCS_CMD(0xBA, 0x02, 0x67, 0x02, 0xA6, 0x02, 0xD1, 0x03, 0x08, 0x03, 0x2E, 0x03, 0x5B, 0x03, 0x6B, 0x03, 0x7B),
	_INIT_DCS_CMD(0xBB, 0x03, 0x8E, 0x03, 0xA2, 0x03, 0xB7, 0x03, 0xE7, 0x03, 0xFD, 0x03, 0xFF),

	_INIT_DCS_CMD(0xFF, 0x21),
	_INIT_DCS_CMD(0xFB, 0x01),

	_INIT_DCS_CMD(0xB0, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x45, 0x00, 0x65, 0x00, 0x81, 0x00, 0x99, 0x00, 0xAE, 0x00, 0xC1),
	_INIT_DCS_CMD(0xB1, 0x00, 0xD2, 0x01, 0x0B, 0x01, 0x34, 0x01, 0x76, 0x01, 0xA3, 0x01, 0xEF, 0x02, 0x27, 0x02, 0x29),
	_INIT_DCS_CMD(0xB2, 0x02, 0x5F, 0x02, 0x9E, 0x02, 0xC9, 0x03, 0x00, 0x03, 0x26, 0x03, 0x53, 0x03, 0x63, 0x03, 0x73),

	_INIT_DCS_CMD(0xB3, 0x03, 0x86, 0x03, 0x9A, 0x03, 0xAF, 0x03, 0xDF, 0x03, 0xF5, 0x03, 0xE0),
	_INIT_DCS_CMD(0xB4, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x45, 0x00, 0x65, 0x00, 0x81, 0x00, 0x99, 0x00, 0xAE, 0x00, 0xC1),
	_INIT_DCS_CMD(0xB5, 0x00, 0xD2, 0x01, 0x0B, 0x01, 0x34, 0x01, 0x76, 0x01, 0xA3, 0x01, 0xEF, 0x02, 0x27, 0x02, 0x29),
	_INIT_DCS_CMD(0xB6, 0x02, 0x5F, 0x02, 0x9E, 0x02, 0xC9, 0x03, 0x00, 0x03, 0x26, 0x03, 0x53, 0x03, 0x63, 0x03, 0x73),
	_INIT_DCS_CMD(0xB7, 0x03, 0x86, 0x03, 0x9A, 0x03, 0xAF, 0x03, 0xDF, 0x03, 0xF5, 0x03, 0xE0),

	_INIT_DCS_CMD(0xB8, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x45, 0x00, 0x65, 0x00, 0x81, 0x00, 0x99, 0x00, 0xAE, 0x00, 0xC1),
	_INIT_DCS_CMD(0xB9, 0x00, 0xD2, 0x01, 0x0B, 0x01, 0x34, 0x01, 0x76, 0x01, 0xA3, 0x01, 0xEF, 0x02, 0x27, 0x02, 0x29),
	_INIT_DCS_CMD(0xBA, 0x02, 0x5F, 0x02, 0x9E, 0x02, 0xC9, 0x03, 0x00, 0x03, 0x26, 0x03, 0x53, 0x03, 0x63, 0x03, 0x73),

	_INIT_DCS_CMD(0xBB, 0x03, 0x86, 0x03, 0x9A, 0x03, 0xAF, 0x03, 0xDF, 0x03, 0xF5, 0x03, 0xE0),
	_INIT_DCS_CMD(0xFF, 0x24),
	_INIT_DCS_CMD(0xFB, 0x01),

	_INIT_DCS_CMD(0x00, 0x00),
	_INIT_DCS_CMD(0x01, 0x00),

	_INIT_DCS_CMD(0x02, 0x1C),
	_INIT_DCS_CMD(0x03, 0x1C),

	_INIT_DCS_CMD(0x04, 0x1D),
	_INIT_DCS_CMD(0x05, 0x1D),

	_INIT_DCS_CMD(0x06, 0x04),
	_INIT_DCS_CMD(0x07, 0x04),

	_INIT_DCS_CMD(0x08, 0x0F),
	_INIT_DCS_CMD(0x09, 0x0F),

	_INIT_DCS_CMD(0x0A, 0x0E),
	_INIT_DCS_CMD(0x0B, 0x0E),

	_INIT_DCS_CMD(0x0C, 0x0D),
	_INIT_DCS_CMD(0x0D, 0x0D),

	_INIT_DCS_CMD(0x0E, 0x0C),
	_INIT_DCS_CMD(0x0F, 0x0C),

	_INIT_DCS_CMD(0x10, 0x08),
	_INIT_DCS_CMD(0x11, 0x08),

	_INIT_DCS_CMD(0x12, 0x00),
	_INIT_DCS_CMD(0x13, 0x00),
	_INIT_DCS_CMD(0x14, 0x00),
	_INIT_DCS_CMD(0x15, 0x00),

	_INIT_DCS_CMD(0x16, 0x00),
	_INIT_DCS_CMD(0x17, 0x00),

	_INIT_DCS_CMD(0x18, 0x1C),
	_INIT_DCS_CMD(0x19, 0x1C),

	_INIT_DCS_CMD(0x1A, 0x1D),
	_INIT_DCS_CMD(0x1B, 0x1D),

	_INIT_DCS_CMD(0x1C, 0x04),
	_INIT_DCS_CMD(0x1D, 0x04),

	_INIT_DCS_CMD(0x1E, 0x0F),
	_INIT_DCS_CMD(0x1F, 0x0F),

	_INIT_DCS_CMD(0x20, 0x0E),
	_INIT_DCS_CMD(0x21, 0x0E),

	_INIT_DCS_CMD(0x22, 0x0D),
	_INIT_DCS_CMD(0x23, 0x0D),

	_INIT_DCS_CMD(0x24, 0x0C),
	_INIT_DCS_CMD(0x25, 0x0C),

	_INIT_DCS_CMD(0x26, 0x08),
	_INIT_DCS_CMD(0x27, 0x08),

	_INIT_DCS_CMD(0x28, 0x00),
	_INIT_DCS_CMD(0x29, 0x00),
	_INIT_DCS_CMD(0x2A, 0x00),
	_INIT_DCS_CMD(0x2B, 0x00),

	_INIT_DCS_CMD(0x2D, 0x20),
	_INIT_DCS_CMD(0x2F, 0x0A),
	_INIT_DCS_CMD(0x30, 0x44),
	_INIT_DCS_CMD(0x33, 0x0C),
	_INIT_DCS_CMD(0x34, 0x32),

	_INIT_DCS_CMD(0x37, 0x44),
	_INIT_DCS_CMD(0x38, 0x40),
	_INIT_DCS_CMD(0x39, 0x00),
	_INIT_DCS_CMD(0x3A, 0x5D),
	_INIT_DCS_CMD(0x3B, 0x60),
	_INIT_DCS_CMD(0x3D, 0x42),
	_INIT_DCS_CMD(0x3F, 0x06),
	_INIT_DCS_CMD(0x43, 0x06),
	_INIT_DCS_CMD(0x47, 0x66),
	_INIT_DCS_CMD(0x4A, 0x5D),
	_INIT_DCS_CMD(0x4B, 0x60),
	_INIT_DCS_CMD(0x4C, 0x91),
	_INIT_DCS_CMD(0x4D, 0x21),
	_INIT_DCS_CMD(0x4E, 0x43),
	_INIT_DCS_CMD(0x51, 0x12),
	_INIT_DCS_CMD(0x52, 0x34),
	_INIT_DCS_CMD(0x55, 0x82, 0x02),
	_INIT_DCS_CMD(0x56, 0x04),
	_INIT_DCS_CMD(0x58, 0x21),
	_INIT_DCS_CMD(0x59, 0x30),
	_INIT_DCS_CMD(0x5A, 0x60),
	_INIT_DCS_CMD(0x5B, 0x50),
	_INIT_DCS_CMD(0x5E, 0x00, 0x06),
	_INIT_DCS_CMD(0x5F, 0x00),
	_INIT_DCS_CMD(0x65, 0x82),
	_INIT_DCS_CMD(0x7E, 0x20),
	_INIT_DCS_CMD(0x7F, 0x3C),
	_INIT_DCS_CMD(0x82, 0x04),
	_INIT_DCS_CMD(0x97, 0xC0),

	_INIT_DCS_CMD(0xB6, 0x05, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00),
	_INIT_DCS_CMD(0x91, 0x44),
	_INIT_DCS_CMD(0x92, 0xA9),
	_INIT_DCS_CMD(0x93, 0x1A),
	_INIT_DCS_CMD(0x94, 0x96),
	_INIT_DCS_CMD(0xD7, 0x55),
	_INIT_DCS_CMD(0xDA, 0x0A),
	_INIT_DCS_CMD(0xDE, 0x08),
	_INIT_DCS_CMD(0xDB, 0x05),
	_INIT_DCS_CMD(0xDC, 0xA9),
	_INIT_DCS_CMD(0xDD, 0x22),

	_INIT_DCS_CMD(0xDF, 0x05),
	_INIT_DCS_CMD(0xE0, 0xA9),
	_INIT_DCS_CMD(0xE1, 0x05),
	_INIT_DCS_CMD(0xE2, 0xA9),
	_INIT_DCS_CMD(0xE3, 0x05),
	_INIT_DCS_CMD(0xE4, 0xA9),
	_INIT_DCS_CMD(0xE5, 0x05),
	_INIT_DCS_CMD(0xE6, 0xA9),
	_INIT_DCS_CMD(0x5C, 0x00),
	_INIT_DCS_CMD(0x5D, 0x00),
	_INIT_DCS_CMD(0x8D, 0x00),
	_INIT_DCS_CMD(0x8E, 0x00),
	_INIT_DCS_CMD(0xB5, 0x90),
	_INIT_DCS_CMD(0xFF, 0x25),
	_INIT_DCS_CMD(0xFB, 0x01),
	_INIT_DCS_CMD(0x05, 0x00),
	_INIT_DCS_CMD(0x19, 0x07),
	_INIT_DCS_CMD(0x1F, 0x60),
	_INIT_DCS_CMD(0x20, 0x50),
	_INIT_DCS_CMD(0x26, 0x60),
	_INIT_DCS_CMD(0x27, 0x50),
	_INIT_DCS_CMD(0x33, 0x60),
	_INIT_DCS_CMD(0x34, 0x50),
	_INIT_DCS_CMD(0x3F, 0xE0),
	_INIT_DCS_CMD(0x40, 0x00),
	_INIT_DCS_CMD(0x44, 0x00),
	_INIT_DCS_CMD(0x45, 0x40),
	_INIT_DCS_CMD(0x48, 0x60),
	_INIT_DCS_CMD(0x49, 0x50),
	_INIT_DCS_CMD(0x5B, 0x00),
	_INIT_DCS_CMD(0x5C, 0x00),
	_INIT_DCS_CMD(0x5D, 0x00),
	_INIT_DCS_CMD(0x5E, 0xD0),
	_INIT_DCS_CMD(0x61, 0x60),
	_INIT_DCS_CMD(0x62, 0x50),
	_INIT_DCS_CMD(0xF1, 0x10),
	_INIT_DCS_CMD(0xFF, 0x2A),
	_INIT_DCS_CMD(0xFB, 0x01),

	_INIT_DCS_CMD(0x64, 0x16),
	_INIT_DCS_CMD(0x67, 0x16),
	_INIT_DCS_CMD(0x6A, 0x16),

	_INIT_DCS_CMD(0x70, 0x30),

	_INIT_DCS_CMD(0xA2, 0xF3),
	_INIT_DCS_CMD(0xA3, 0xFF),
	_INIT_DCS_CMD(0xA4, 0xFF),
	_INIT_DCS_CMD(0xA5, 0xFF),

	_INIT_DCS_CMD(0xD6, 0x08),

	_INIT_DCS_CMD(0xFF, 0x26),
	_INIT_DCS_CMD(0xFB, 0x01),
	_INIT_DCS_CMD(0x00, 0xA1),

	_INIT_DCS_CMD(0x02, 0x31),
	_INIT_DCS_CMD(0x04, 0x28),
	_INIT_DCS_CMD(0x06, 0x30),
	_INIT_DCS_CMD(0x0C, 0x16),
	_INIT_DCS_CMD(0x0D, 0x0D),
	_INIT_DCS_CMD(0x0F, 0x00),
	_INIT_DCS_CMD(0x11, 0x00),
	_INIT_DCS_CMD(0x12, 0x50),
	_INIT_DCS_CMD(0x13, 0x56),
	_INIT_DCS_CMD(0x14, 0x57),
	_INIT_DCS_CMD(0x15, 0x00),
	_INIT_DCS_CMD(0x16, 0x10),
	_INIT_DCS_CMD(0x17, 0xA0),
	_INIT_DCS_CMD(0x18, 0x86),
	_INIT_DCS_CMD(0x19, 0x0D),
	_INIT_DCS_CMD(0x1A, 0x7F),
	_INIT_DCS_CMD(0x1B, 0x0C),
	_INIT_DCS_CMD(0x1C, 0xBF),
	_INIT_DCS_CMD(0x22, 0x00),
	_INIT_DCS_CMD(0x23, 0x00),
	_INIT_DCS_CMD(0x2A, 0x0D),
	_INIT_DCS_CMD(0x2B, 0x7F),

	_INIT_DCS_CMD(0x1D, 0x00),
	_INIT_DCS_CMD(0x1E, 0x65),
	_INIT_DCS_CMD(0x1F, 0x65),
	_INIT_DCS_CMD(0x24, 0x00),
	_INIT_DCS_CMD(0x25, 0x65),
	_INIT_DCS_CMD(0x2F, 0x05),
	_INIT_DCS_CMD(0x30, 0x65),
	_INIT_DCS_CMD(0x31, 0x05),
	_INIT_DCS_CMD(0x32, 0x7D),
	_INIT_DCS_CMD(0x39, 0x00),
	_INIT_DCS_CMD(0x3A, 0x65),
	_INIT_DCS_CMD(0x20, 0x01),
	_INIT_DCS_CMD(0x33, 0x11),
	_INIT_DCS_CMD(0x34, 0x78),
	_INIT_DCS_CMD(0x35, 0x16),
	_INIT_DCS_CMD(0xC8, 0x04),
	_INIT_DCS_CMD(0xC9, 0x9E),
	_INIT_DCS_CMD(0xCA, 0x4E),
	_INIT_DCS_CMD(0xCB, 0x00),

	_INIT_DCS_CMD(0xA9, 0x49),
	_INIT_DCS_CMD(0xAA, 0x4B),
	_INIT_DCS_CMD(0xAB, 0x48),
	_INIT_DCS_CMD(0xAC, 0x43),
	_INIT_DCS_CMD(0xAD, 0x40),
	_INIT_DCS_CMD(0xAE, 0x50),
	_INIT_DCS_CMD(0xAF, 0x44),
	_INIT_DCS_CMD(0xB0, 0x54),
	_INIT_DCS_CMD(0xB1, 0x4E),
	_INIT_DCS_CMD(0xB2, 0x4D),
	_INIT_DCS_CMD(0xB3, 0x4C),
	_INIT_DCS_CMD(0xB4, 0x41),
	_INIT_DCS_CMD(0xB5, 0x47),
	_INIT_DCS_CMD(0xB6, 0x53),
	_INIT_DCS_CMD(0xB7, 0x3E),
	_INIT_DCS_CMD(0xB8, 0x51),
	_INIT_DCS_CMD(0xB9, 0x3C),
	_INIT_DCS_CMD(0xBA, 0x3B),
	_INIT_DCS_CMD(0xBB, 0x46),
	_INIT_DCS_CMD(0xBC, 0x45),
	_INIT_DCS_CMD(0xBD, 0x55),
	_INIT_DCS_CMD(0xBE, 0x3D),
	_INIT_DCS_CMD(0xBF, 0x3F),
	_INIT_DCS_CMD(0xC0, 0x52),
	_INIT_DCS_CMD(0xC1, 0x4A),
	_INIT_DCS_CMD(0xC2, 0x39),
	_INIT_DCS_CMD(0xC3, 0x4F),
	_INIT_DCS_CMD(0xC4, 0x3A),
	_INIT_DCS_CMD(0xC5, 0x42),
	_INIT_DCS_CMD(0xFF, 0x27),
	_INIT_DCS_CMD(0xFB, 0x01),

	_INIT_DCS_CMD(0x56, 0x06),
	_INIT_DCS_CMD(0x58, 0x80),
	_INIT_DCS_CMD(0x59, 0x75),
	_INIT_DCS_CMD(0x5A, 0x00),
	_INIT_DCS_CMD(0x5B, 0x02),
	_INIT_DCS_CMD(0x5C, 0x00),
	_INIT_DCS_CMD(0x5D, 0x00),
	_INIT_DCS_CMD(0x5E, 0x20),
	_INIT_DCS_CMD(0x5F, 0x10),
	_INIT_DCS_CMD(0x60, 0x00),
	_INIT_DCS_CMD(0x61, 0x2E),
	_INIT_DCS_CMD(0x62, 0x00),
	_INIT_DCS_CMD(0x63, 0x01),
	_INIT_DCS_CMD(0x64, 0x43),
	_INIT_DCS_CMD(0x65, 0x2D),
	_INIT_DCS_CMD(0x66, 0x00),
	_INIT_DCS_CMD(0x67, 0x01),
	_INIT_DCS_CMD(0x68, 0x44),

	_INIT_DCS_CMD(0x00, 0x00),
	_INIT_DCS_CMD(0x78, 0x00),
	_INIT_DCS_CMD(0xC3, 0x00),

	_INIT_DCS_CMD(0xFF, 0x2A),
	_INIT_DCS_CMD(0xFB, 0x01),

	_INIT_DCS_CMD(0x22, 0x2F),
	_INIT_DCS_CMD(0x23, 0x08),

	_INIT_DCS_CMD(0x24, 0x00),
	_INIT_DCS_CMD(0x25, 0x65),
	_INIT_DCS_CMD(0x26, 0xF8),
	_INIT_DCS_CMD(0x27, 0x00),
	_INIT_DCS_CMD(0x28, 0x1A),
	_INIT_DCS_CMD(0x29, 0x00),
	_INIT_DCS_CMD(0x2A, 0x1A),
	_INIT_DCS_CMD(0x2B, 0x00),
	_INIT_DCS_CMD(0x2D, 0x1A),

	_INIT_DCS_CMD(0xFF, 0x23),
	_INIT_DCS_CMD(0xFB, 0x01),

	_INIT_DCS_CMD(0x00, 0x80),
	_INIT_DCS_CMD(0x07, 0x00),

	_INIT_DCS_CMD(0xFF, 0xE0),
	_INIT_DCS_CMD(0xFB, 0x01),
	_INIT_DCS_CMD(0x14, 0x60),
	_INIT_DCS_CMD(0x16, 0xC0),

	_INIT_DCS_CMD(0xFF, 0xF0),
	_INIT_DCS_CMD(0xFB, 0x01),
	_INIT_DCS_CMD(0x3A, 0x08),

	_INIT_DCS_CMD(0xFF, 0x10),
	_INIT_DCS_CMD(0xFB, 0x01),
	_INIT_DCS_CMD(0xB9, 0x01),
	_INIT_DCS_CMD(0xFF, 0x20),
	_INIT_DCS_CMD(0xFB, 0x01),
	_INIT_DCS_CMD(0x18, 0x40),

	_INIT_DCS_CMD(0xFF, 0x10),
	_INIT_DCS_CMD(0xFB, 0x01),
	_INIT_DCS_CMD(0xB9, 0x02),
	_INIT_DCS_CMD(0x35, 0x00),
	_INIT_DCS_CMD(0x51, 0x00, 0xFF),
	_INIT_DCS_CMD(0x53, 0x24),
	_INIT_DCS_CMD(0x55, 0x00),
	_INIT_DCS_CMD(0xBB, 0x13),
	_INIT_DCS_CMD(0x3B, 0x03, 0x96, 0x1A, 0x04, 0x04),
	_INIT_DELAY_CMD(100),
	_INIT_DCS_CMD(0x11),
	_INIT_DELAY_CMD(200),
	_INIT_DCS_CMD(0x29),
	_INIT_DELAY_CMD(100),
	{},
};

static const struct panel_init_cmd inx_hj110iz_init_cmd[] = {
	_INIT_DCS_CMD(0xFF, 0x20),
	_INIT_DCS_CMD(0xFB, 0x01),
	_INIT_DCS_CMD(0x05, 0xD1),
	_INIT_DCS_CMD(0x0D, 0x63),
	_INIT_DCS_CMD(0x07, 0x8C),
	_INIT_DCS_CMD(0x08, 0x4B),
	_INIT_DCS_CMD(0x0E, 0x91),
	_INIT_DCS_CMD(0x0F, 0x69),
	_INIT_DCS_CMD(0x95, 0xF5),
	_INIT_DCS_CMD(0x96, 0xF5),
	_INIT_DCS_CMD(0x9D, 0x00),
	_INIT_DCS_CMD(0x9E, 0x00),
	_INIT_DCS_CMD(0x69, 0x98),
	_INIT_DCS_CMD(0x75, 0xA2),
	_INIT_DCS_CMD(0x77, 0xB3),
	_INIT_DCS_CMD(0xFF, 0x24),
	_INIT_DCS_CMD(0xFB, 0x01),
	_INIT_DCS_CMD(0x91, 0x44),
	_INIT_DCS_CMD(0x92, 0x7A),
	_INIT_DCS_CMD(0x93, 0x1A),
	_INIT_DCS_CMD(0x94, 0x40),
	_INIT_DCS_CMD(0x9A, 0x08),
	_INIT_DCS_CMD(0x60, 0x96),
	_INIT_DCS_CMD(0x61, 0xD0),
	_INIT_DCS_CMD(0x63, 0x70),
	_INIT_DCS_CMD(0xC2, 0xCF),
	_INIT_DCS_CMD(0x9B, 0x0F),
	_INIT_DCS_CMD(0x9A, 0x08),
	_INIT_DCS_CMD(0x00, 0x03),
	_INIT_DCS_CMD(0x01, 0x03),
	_INIT_DCS_CMD(0x02, 0x03),
	_INIT_DCS_CMD(0x03, 0x03),
	_INIT_DCS_CMD(0x04, 0x03),
	_INIT_DCS_CMD(0x05, 0x03),
	_INIT_DCS_CMD(0x06, 0x22),
	_INIT_DCS_CMD(0x07, 0x06),
	_INIT_DCS_CMD(0x08, 0x00),
	_INIT_DCS_CMD(0x09, 0x1D),
	_INIT_DCS_CMD(0x0A, 0x1C),
	_INIT_DCS_CMD(0x0B, 0x13),
	_INIT_DCS_CMD(0x0C, 0x12),
	_INIT_DCS_CMD(0x0D, 0x11),
	_INIT_DCS_CMD(0x0E, 0x10),
	_INIT_DCS_CMD(0x0F, 0x0F),
	_INIT_DCS_CMD(0x10, 0x0E),
	_INIT_DCS_CMD(0x11, 0x0D),
	_INIT_DCS_CMD(0x12, 0x0C),
	_INIT_DCS_CMD(0x13, 0x04),
	_INIT_DCS_CMD(0x14, 0x03),
	_INIT_DCS_CMD(0x15, 0x03),
	_INIT_DCS_CMD(0x16, 0x03),
	_INIT_DCS_CMD(0x17, 0x03),
	_INIT_DCS_CMD(0x18, 0x03),
	_INIT_DCS_CMD(0x19, 0x03),
	_INIT_DCS_CMD(0x1A, 0x03),
	_INIT_DCS_CMD(0x1B, 0x03),
	_INIT_DCS_CMD(0x1C, 0x22),
	_INIT_DCS_CMD(0x1D, 0x06),
	_INIT_DCS_CMD(0x1E, 0x00),
	_INIT_DCS_CMD(0x1F, 0x1D),
	_INIT_DCS_CMD(0x20, 0x1C),
	_INIT_DCS_CMD(0x21, 0x13),
	_INIT_DCS_CMD(0x22, 0x12),
	_INIT_DCS_CMD(0x23, 0x11),
	_INIT_DCS_CMD(0x24, 0x10),
	_INIT_DCS_CMD(0x25, 0x0F),
	_INIT_DCS_CMD(0x26, 0x0E),
	_INIT_DCS_CMD(0x27, 0x0D),
	_INIT_DCS_CMD(0x28, 0x0C),
	_INIT_DCS_CMD(0x29, 0x04),
	_INIT_DCS_CMD(0x2A, 0x03),
	_INIT_DCS_CMD(0x2B, 0x03),

	_INIT_DCS_CMD(0x2F, 0x05),
	_INIT_DCS_CMD(0x30, 0x32),
	_INIT_DCS_CMD(0x31, 0x43),
	_INIT_DCS_CMD(0x33, 0x05),
	_INIT_DCS_CMD(0x34, 0x32),
	_INIT_DCS_CMD(0x35, 0x43),
	_INIT_DCS_CMD(0x37, 0x44),
	_INIT_DCS_CMD(0x38, 0x40),
	_INIT_DCS_CMD(0x39, 0x00),
	_INIT_DCS_CMD(0x3A, 0x18),
	_INIT_DCS_CMD(0x3B, 0x00),
	_INIT_DCS_CMD(0x3D, 0x93),
	_INIT_DCS_CMD(0xAB, 0x44),
	_INIT_DCS_CMD(0xAC, 0x40),

	_INIT_DCS_CMD(0x4D, 0x21),
	_INIT_DCS_CMD(0x4E, 0x43),
	_INIT_DCS_CMD(0x4F, 0x65),
	_INIT_DCS_CMD(0x50, 0x87),
	_INIT_DCS_CMD(0x51, 0x78),
	_INIT_DCS_CMD(0x52, 0x56),
	_INIT_DCS_CMD(0x53, 0x34),
	_INIT_DCS_CMD(0x54, 0x21),
	_INIT_DCS_CMD(0x55, 0x83),
	_INIT_DCS_CMD(0x56, 0x08),
	_INIT_DCS_CMD(0x58, 0x21),
	_INIT_DCS_CMD(0x59, 0x40),
	_INIT_DCS_CMD(0x5A, 0x00),
	_INIT_DCS_CMD(0x5B, 0x2C),
	_INIT_DCS_CMD(0x5E, 0x00, 0x10),
	_INIT_DCS_CMD(0x5F, 0x00),

	_INIT_DCS_CMD(0x7A, 0x00),
	_INIT_DCS_CMD(0x7B, 0x00),
	_INIT_DCS_CMD(0x7C, 0x00),
	_INIT_DCS_CMD(0x7D, 0x00),
	_INIT_DCS_CMD(0x7E, 0x20),
	_INIT_DCS_CMD(0x7F, 0x3C),
	_INIT_DCS_CMD(0x80, 0x00),
	_INIT_DCS_CMD(0x81, 0x00),
	_INIT_DCS_CMD(0x82, 0x08),
	_INIT_DCS_CMD(0x97, 0x02),
	_INIT_DCS_CMD(0xC5, 0x10),
	_INIT_DCS_CMD(0xDA, 0x05),
	_INIT_DCS_CMD(0xDB, 0x01),
	_INIT_DCS_CMD(0xDC, 0x7A),
	_INIT_DCS_CMD(0xDD, 0x55),
	_INIT_DCS_CMD(0xDE, 0x27),
	_INIT_DCS_CMD(0xDF, 0x01),
	_INIT_DCS_CMD(0xE0, 0x7A),
	_INIT_DCS_CMD(0xE1, 0x01),
	_INIT_DCS_CMD(0xE2, 0x7A),
	_INIT_DCS_CMD(0xE3, 0x01),
	_INIT_DCS_CMD(0xE4, 0x7A),
	_INIT_DCS_CMD(0xE5, 0x01),
	_INIT_DCS_CMD(0xE6, 0x7A),
	_INIT_DCS_CMD(0xE7, 0x00),
	_INIT_DCS_CMD(0xE8, 0x00),
	_INIT_DCS_CMD(0xE9, 0x01),
	_INIT_DCS_CMD(0xEA, 0x7A),
	_INIT_DCS_CMD(0xEB, 0x01),
	_INIT_DCS_CMD(0xEE, 0x7A),
	_INIT_DCS_CMD(0xEF, 0x01),
	_INIT_DCS_CMD(0xF0, 0x7A),

	_INIT_DCS_CMD(0xB6, 0x05, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00),
	_INIT_DCS_CMD(0xFF, 0x25),
	_INIT_DCS_CMD(0xFB, 0x01),

	_INIT_DCS_CMD(0x05, 0x00),

	_INIT_DCS_CMD(0x13, 0x02),
	_INIT_DCS_CMD(0x14, 0xDF),
	_INIT_DCS_CMD(0xF1, 0x10),
	_INIT_DCS_CMD(0x1E, 0x00),
	_INIT_DCS_CMD(0x1F, 0x00),
	_INIT_DCS_CMD(0x20, 0x2C),
	_INIT_DCS_CMD(0x25, 0x00),
	_INIT_DCS_CMD(0x26, 0x00),
	_INIT_DCS_CMD(0x27, 0x2C),
	_INIT_DCS_CMD(0x3F, 0x80),
	_INIT_DCS_CMD(0x40, 0x00),
	_INIT_DCS_CMD(0x43, 0x00),

	_INIT_DCS_CMD(0x44, 0x18),
	_INIT_DCS_CMD(0x45, 0x00),

	_INIT_DCS_CMD(0x48, 0x00),
	_INIT_DCS_CMD(0x49, 0x2C),
	_INIT_DCS_CMD(0x5B, 0x80),
	_INIT_DCS_CMD(0x5C, 0x00),
	_INIT_DCS_CMD(0x5D, 0x00),
	_INIT_DCS_CMD(0x5E, 0x00),
	_INIT_DCS_CMD(0x61, 0x00),
	_INIT_DCS_CMD(0x62, 0x2C),
	_INIT_DCS_CMD(0x68, 0x10),
	_INIT_DCS_CMD(0xFF, 0x26),
	_INIT_DCS_CMD(0xFB, 0x01),

	_INIT_DCS_CMD(0x00, 0xA1),
	_INIT_DCS_CMD(0x02, 0x31),
	_INIT_DCS_CMD(0x0A, 0xF2),
	_INIT_DCS_CMD(0x04, 0x28),
	_INIT_DCS_CMD(0x06, 0x30),
	_INIT_DCS_CMD(0x0C, 0x16),
	_INIT_DCS_CMD(0x0D, 0x0D),
	_INIT_DCS_CMD(0x0F, 0x00),
	_INIT_DCS_CMD(0x11, 0x00),
	_INIT_DCS_CMD(0x12, 0x50),
	_INIT_DCS_CMD(0x13, 0x56),
	_INIT_DCS_CMD(0x14, 0x57),
	_INIT_DCS_CMD(0x15, 0x00),
	_INIT_DCS_CMD(0x16, 0x10),
	_INIT_DCS_CMD(0x17, 0xA0),
	_INIT_DCS_CMD(0x18, 0x86),
	_INIT_DCS_CMD(0x22, 0x00),
	_INIT_DCS_CMD(0x23, 0x00),
	_INIT_DCS_CMD(0x19, 0x0D),
	_INIT_DCS_CMD(0x1A, 0x7F),
	_INIT_DCS_CMD(0x1B, 0x0C),
	_INIT_DCS_CMD(0x1C, 0xBF),
	_INIT_DCS_CMD(0x2A, 0x0D),
	_INIT_DCS_CMD(0x2B, 0x7F),
	_INIT_DCS_CMD(0x20, 0x00),

	_INIT_DCS_CMD(0x1D, 0x00),
	_INIT_DCS_CMD(0x1E, 0x78),
	_INIT_DCS_CMD(0x1F, 0x78),

	_INIT_DCS_CMD(0x2F, 0x03),
	_INIT_DCS_CMD(0x30, 0x78),
	_INIT_DCS_CMD(0x33, 0x78),
	_INIT_DCS_CMD(0x34, 0x66),
	_INIT_DCS_CMD(0x35, 0x11),

	_INIT_DCS_CMD(0x39, 0x10),
	_INIT_DCS_CMD(0x3A, 0x78),
	_INIT_DCS_CMD(0x3B, 0x06),

	_INIT_DCS_CMD(0xC8, 0x04),
	_INIT_DCS_CMD(0xC9, 0x84),
	_INIT_DCS_CMD(0xCA, 0x4E),
	_INIT_DCS_CMD(0xCB, 0x00),

	_INIT_DCS_CMD(0xA9, 0x50),
	_INIT_DCS_CMD(0xAA, 0x4F),
	_INIT_DCS_CMD(0xAB, 0x4D),
	_INIT_DCS_CMD(0xAC, 0x4A),
	_INIT_DCS_CMD(0xAD, 0x48),
	_INIT_DCS_CMD(0xAE, 0x46),
	_INIT_DCS_CMD(0xFF, 0x27),
	_INIT_DCS_CMD(0xFB, 0x01),
	_INIT_DCS_CMD(0xC0, 0x18),
	_INIT_DCS_CMD(0xC1, 0x00),
	_INIT_DCS_CMD(0xC2, 0x00),
	_INIT_DCS_CMD(0x56, 0x06),
	_INIT_DCS_CMD(0x58, 0x80),
	_INIT_DCS_CMD(0x59, 0x75),
	_INIT_DCS_CMD(0x5A, 0x00),
	_INIT_DCS_CMD(0x5B, 0x02),
	_INIT_DCS_CMD(0x5C, 0x00),
	_INIT_DCS_CMD(0x5D, 0x00),
	_INIT_DCS_CMD(0x5E, 0x20),
	_INIT_DCS_CMD(0x5F, 0x10),
	_INIT_DCS_CMD(0x60, 0x00),
	_INIT_DCS_CMD(0x61, 0x2E),
	_INIT_DCS_CMD(0x62, 0x00),
	_INIT_DCS_CMD(0x63, 0x01),
	_INIT_DCS_CMD(0x64, 0x43),
	_INIT_DCS_CMD(0x65, 0x2D),
	_INIT_DCS_CMD(0x66, 0x00),
	_INIT_DCS_CMD(0x67, 0x01),
	_INIT_DCS_CMD(0x68, 0x43),
	_INIT_DCS_CMD(0x98, 0x01),
	_INIT_DCS_CMD(0xB4, 0x03),
	_INIT_DCS_CMD(0x9B, 0xBD),
	_INIT_DCS_CMD(0xA0, 0x90),
	_INIT_DCS_CMD(0xAB, 0x1B),
	_INIT_DCS_CMD(0xBC, 0x0C),
	_INIT_DCS_CMD(0xBD, 0x28),

	_INIT_DCS_CMD(0xFF, 0x2A),
	_INIT_DCS_CMD(0xFB, 0x01),

	_INIT_DCS_CMD(0x22, 0x2F),
	_INIT_DCS_CMD(0x23, 0x08),

	_INIT_DCS_CMD(0x24, 0x00),
	_INIT_DCS_CMD(0x25, 0x65),
	_INIT_DCS_CMD(0x26, 0xF8),
	_INIT_DCS_CMD(0x27, 0x00),
	_INIT_DCS_CMD(0x28, 0x1A),
	_INIT_DCS_CMD(0x29, 0x00),
	_INIT_DCS_CMD(0x2A, 0x1A),
	_INIT_DCS_CMD(0x2B, 0x00),
	_INIT_DCS_CMD(0x2D, 0x1A),

	_INIT_DCS_CMD(0x64, 0x96),
	_INIT_DCS_CMD(0x65, 0x00),
	_INIT_DCS_CMD(0x66, 0x00),
	_INIT_DCS_CMD(0x6A, 0x96),
	_INIT_DCS_CMD(0x6B, 0x00),
	_INIT_DCS_CMD(0x6C, 0x00),
	_INIT_DCS_CMD(0x70, 0x92),
	_INIT_DCS_CMD(0x71, 0x00),
	_INIT_DCS_CMD(0x72, 0x00),
	_INIT_DCS_CMD(0xA2, 0x33),
	_INIT_DCS_CMD(0xA3, 0x30),
	_INIT_DCS_CMD(0xA4, 0xC0),
	_INIT_DCS_CMD(0xE8, 0x00),
	_INIT_DCS_CMD(0x97, 0x3C),
	_INIT_DCS_CMD(0x98, 0x02),
	_INIT_DCS_CMD(0x99, 0x95),
	_INIT_DCS_CMD(0x9A, 0x06),
	_INIT_DCS_CMD(0x9B, 0x00),
	_INIT_DCS_CMD(0x9C, 0x0B),
	_INIT_DCS_CMD(0x9D, 0x0A),
	_INIT_DCS_CMD(0x9E, 0x90),
	_INIT_DCS_CMD(0xFF, 0xF0),
	_INIT_DCS_CMD(0xFB, 0x01),
	_INIT_DCS_CMD(0x3A, 0x08),
	_INIT_DCS_CMD(0xFF, 0xD0),
	_INIT_DCS_CMD(0xFB, 0x01),
	_INIT_DCS_CMD(0x00, 0x33),
	_INIT_DCS_CMD(0x08, 0x01),
	_INIT_DCS_CMD(0x09, 0xBF),
	_INIT_DCS_CMD(0x2F, 0x33),
	_INIT_DCS_CMD(0xFF, 0x23),
	_INIT_DCS_CMD(0xFB, 0x01),
	_INIT_DCS_CMD(0x00, 0x80),
	_INIT_DCS_CMD(0x07, 0x00),
	_INIT_DCS_CMD(0xFF, 0x20),
	_INIT_DCS_CMD(0xFB, 0x01),
	_INIT_DCS_CMD(0x30, 0x00),
	_INIT_DCS_CMD(0xFF, 0x24),
	_INIT_DCS_CMD(0x5C, 0x88),
	_INIT_DCS_CMD(0x5D, 0x08),
	_INIT_DCS_CMD(0xFF, 0x10),
	_INIT_DCS_CMD(0xB9, 0x01),
	_INIT_DCS_CMD(0xFF, 0x20),
	_INIT_DCS_CMD(0x18, 0x40),
	_INIT_DCS_CMD(0xFF, 0x10),
	_INIT_DCS_CMD(0xB9, 0x02),
	_INIT_DCS_CMD(0xFF, 0x10),
	_INIT_DCS_CMD(0xFB, 0x01),
	_INIT_DCS_CMD(0xBB, 0x13),
	_INIT_DCS_CMD(0x3B, 0x03, 0x96, 0x1A, 0x04, 0x04),
	_INIT_DCS_CMD(0x35, 0x00),
	_INIT_DCS_CMD(0x51, 0x0F, 0xFF),
	_INIT_DCS_CMD(0x53, 0x24),
	_INIT_DELAY_CMD(100),
	_INIT_DCS_CMD(0x11),
	_INIT_DELAY_CMD(200),
	_INIT_DCS_CMD(0x29),
	_INIT_DELAY_CMD(100),
	{},
};

static const struct panel_init_cmd boe_init_cmd[] = {
	_INIT_DELAY_CMD(24),
	_INIT_DCS_CMD(0xB0, 0x05),
	_INIT_DCS_CMD(0xB1, 0xE5),
	_INIT_DCS_CMD(0xB3, 0x52),
	_INIT_DCS_CMD(0xB0, 0x00),
	_INIT_DCS_CMD(0xB3, 0x88),
	_INIT_DCS_CMD(0xB0, 0x04),
	_INIT_DCS_CMD(0xB8, 0x00),
	_INIT_DCS_CMD(0xB0, 0x00),
	_INIT_DCS_CMD(0xB6, 0x03),
	_INIT_DCS_CMD(0xBA, 0x8B),
	_INIT_DCS_CMD(0xBF, 0x1A),
	_INIT_DCS_CMD(0xC0, 0x0F),
	_INIT_DCS_CMD(0xC2, 0x0C),
	_INIT_DCS_CMD(0xC3, 0x02),
	_INIT_DCS_CMD(0xC4, 0x0C),
	_INIT_DCS_CMD(0xC5, 0x02),
	_INIT_DCS_CMD(0xB0, 0x01),
	_INIT_DCS_CMD(0xE0, 0x26),
	_INIT_DCS_CMD(0xE1, 0x26),
	_INIT_DCS_CMD(0xDC, 0x00),
	_INIT_DCS_CMD(0xDD, 0x00),
	_INIT_DCS_CMD(0xCC, 0x26),
	_INIT_DCS_CMD(0xCD, 0x26),
	_INIT_DCS_CMD(0xC8, 0x00),
	_INIT_DCS_CMD(0xC9, 0x00),
	_INIT_DCS_CMD(0xD2, 0x03),
	_INIT_DCS_CMD(0xD3, 0x03),
	_INIT_DCS_CMD(0xE6, 0x04),
	_INIT_DCS_CMD(0xE7, 0x04),
	_INIT_DCS_CMD(0xC4, 0x09),
	_INIT_DCS_CMD(0xC5, 0x09),
	_INIT_DCS_CMD(0xD8, 0x0A),
	_INIT_DCS_CMD(0xD9, 0x0A),
	_INIT_DCS_CMD(0xC2, 0x0B),
	_INIT_DCS_CMD(0xC3, 0x0B),
	_INIT_DCS_CMD(0xD6, 0x0C),
	_INIT_DCS_CMD(0xD7, 0x0C),
	_INIT_DCS_CMD(0xC0, 0x05),
	_INIT_DCS_CMD(0xC1, 0x05),
	_INIT_DCS_CMD(0xD4, 0x06),
	_INIT_DCS_CMD(0xD5, 0x06),
	_INIT_DCS_CMD(0xCA, 0x07),
	_INIT_DCS_CMD(0xCB, 0x07),
	_INIT_DCS_CMD(0xDE, 0x08),
	_INIT_DCS_CMD(0xDF, 0x08),
	_INIT_DCS_CMD(0xB0, 0x02),
	_INIT_DCS_CMD(0xC0, 0x00),
	_INIT_DCS_CMD(0xC1, 0x0D),
	_INIT_DCS_CMD(0xC2, 0x17),
	_INIT_DCS_CMD(0xC3, 0x26),
	_INIT_DCS_CMD(0xC4, 0x31),
	_INIT_DCS_CMD(0xC5, 0x1C),
	_INIT_DCS_CMD(0xC6, 0x2C),
	_INIT_DCS_CMD(0xC7, 0x33),
	_INIT_DCS_CMD(0xC8, 0x31),
	_INIT_DCS_CMD(0xC9, 0x37),
	_INIT_DCS_CMD(0xCA, 0x37),
	_INIT_DCS_CMD(0xCB, 0x37),
	_INIT_DCS_CMD(0xCC, 0x39),
	_INIT_DCS_CMD(0xCD, 0x2E),
	_INIT_DCS_CMD(0xCE, 0x2F),
	_INIT_DCS_CMD(0xCF, 0x2F),
	_INIT_DCS_CMD(0xD0, 0x07),
	_INIT_DCS_CMD(0xD2, 0x00),
	_INIT_DCS_CMD(0xD3, 0x0D),
	_INIT_DCS_CMD(0xD4, 0x17),
	_INIT_DCS_CMD(0xD5, 0x26),
	_INIT_DCS_CMD(0xD6, 0x31),
	_INIT_DCS_CMD(0xD7, 0x3F),
	_INIT_DCS_CMD(0xD8, 0x3F),
	_INIT_DCS_CMD(0xD9, 0x3F),
	_INIT_DCS_CMD(0xDA, 0x3F),
	_INIT_DCS_CMD(0xDB, 0x37),
	_INIT_DCS_CMD(0xDC, 0x37),
	_INIT_DCS_CMD(0xDD, 0x37),
	_INIT_DCS_CMD(0xDE, 0x39),
	_INIT_DCS_CMD(0xDF, 0x2E),
	_INIT_DCS_CMD(0xE0, 0x2F),
	_INIT_DCS_CMD(0xE1, 0x2F),
	_INIT_DCS_CMD(0xE2, 0x07),
	_INIT_DCS_CMD(0xB0, 0x03),
	_INIT_DCS_CMD(0xC8, 0x0B),
	_INIT_DCS_CMD(0xC9, 0x07),
	_INIT_DCS_CMD(0xC3, 0x00),
	_INIT_DCS_CMD(0xE7, 0x00),
	_INIT_DCS_CMD(0xC5, 0x2A),
	_INIT_DCS_CMD(0xDE, 0x2A),
	_INIT_DCS_CMD(0xCA, 0x43),
	_INIT_DCS_CMD(0xC9, 0x07),
	_INIT_DCS_CMD(0xE4, 0xC0),
	_INIT_DCS_CMD(0xE5, 0x0D),
	_INIT_DCS_CMD(0xCB, 0x00),
	_INIT_DCS_CMD(0xB0, 0x06),
	_INIT_DCS_CMD(0xB8, 0xA5),
	_INIT_DCS_CMD(0xC0, 0xA5),
	_INIT_DCS_CMD(0xC7, 0x0F),
	_INIT_DCS_CMD(0xD5, 0x32),
	_INIT_DCS_CMD(0xB8, 0x00),
	_INIT_DCS_CMD(0xC0, 0x00),
	_INIT_DCS_CMD(0xBC, 0x00),
	_INIT_DCS_CMD(0xB0, 0x07),
	_INIT_DCS_CMD(0xB1, 0x00),
	_INIT_DCS_CMD(0xB2, 0x02),
	_INIT_DCS_CMD(0xB3, 0x0F),
	_INIT_DCS_CMD(0xB4, 0x25),
	_INIT_DCS_CMD(0xB5, 0x39),
	_INIT_DCS_CMD(0xB6, 0x4E),
	_INIT_DCS_CMD(0xB7, 0x72),
	_INIT_DCS_CMD(0xB8, 0x97),
	_INIT_DCS_CMD(0xB9, 0xDC),
	_INIT_DCS_CMD(0xBA, 0x22),
	_INIT_DCS_CMD(0xBB, 0xA4),
	_INIT_DCS_CMD(0xBC, 0x2B),
	_INIT_DCS_CMD(0xBD, 0x2F),
	_INIT_DCS_CMD(0xBE, 0xA9),
	_INIT_DCS_CMD(0xBF, 0x25),
	_INIT_DCS_CMD(0xC0, 0x61),
	_INIT_DCS_CMD(0xC1, 0x97),
	_INIT_DCS_CMD(0xC2, 0xB2),
	_INIT_DCS_CMD(0xC3, 0xCD),
	_INIT_DCS_CMD(0xC4, 0xD9),
	_INIT_DCS_CMD(0xC5, 0xE7),
	_INIT_DCS_CMD(0xC6, 0xF4),
	_INIT_DCS_CMD(0xC7, 0xFA),
	_INIT_DCS_CMD(0xC8, 0xFC),
	_INIT_DCS_CMD(0xC9, 0x00),
	_INIT_DCS_CMD(0xCA, 0x00),
	_INIT_DCS_CMD(0xCB, 0x16),
	_INIT_DCS_CMD(0xCC, 0xAF),
	_INIT_DCS_CMD(0xCD, 0xFF),
	_INIT_DCS_CMD(0xCE, 0xFF),
	_INIT_DCS_CMD(0xB0, 0x08),
	_INIT_DCS_CMD(0xB1, 0x04),
	_INIT_DCS_CMD(0xB2, 0x05),
	_INIT_DCS_CMD(0xB3, 0x11),
	_INIT_DCS_CMD(0xB4, 0x24),
	_INIT_DCS_CMD(0xB5, 0x39),
	_INIT_DCS_CMD(0xB6, 0x4F),
	_INIT_DCS_CMD(0xB7, 0x72),
	_INIT_DCS_CMD(0xB8, 0x98),
	_INIT_DCS_CMD(0xB9, 0xDC),
	_INIT_DCS_CMD(0xBA, 0x23),
	_INIT_DCS_CMD(0xBB, 0xA6),
	_INIT_DCS_CMD(0xBC, 0x2C),
	_INIT_DCS_CMD(0xBD, 0x30),
	_INIT_DCS_CMD(0xBE, 0xAA),
	_INIT_DCS_CMD(0xBF, 0x26),
	_INIT_DCS_CMD(0xC0, 0x62),
	_INIT_DCS_CMD(0xC1, 0x9B),
	_INIT_DCS_CMD(0xC2, 0xB5),
	_INIT_DCS_CMD(0xC3, 0xCF),
	_INIT_DCS_CMD(0xC4, 0xDB),
	_INIT_DCS_CMD(0xC5, 0xE8),
	_INIT_DCS_CMD(0xC6, 0xF5),
	_INIT_DCS_CMD(0xC7, 0xFA),
	_INIT_DCS_CMD(0xC8, 0xFC),
	_INIT_DCS_CMD(0xC9, 0x00),
	_INIT_DCS_CMD(0xCA, 0x00),
	_INIT_DCS_CMD(0xCB, 0x16),
	_INIT_DCS_CMD(0xCC, 0xAF),
	_INIT_DCS_CMD(0xCD, 0xFF),
	_INIT_DCS_CMD(0xCE, 0xFF),
	_INIT_DCS_CMD(0xB0, 0x09),
	_INIT_DCS_CMD(0xB1, 0x04),
	_INIT_DCS_CMD(0xB2, 0x02),
	_INIT_DCS_CMD(0xB3, 0x16),
	_INIT_DCS_CMD(0xB4, 0x24),
	_INIT_DCS_CMD(0xB5, 0x3B),
	_INIT_DCS_CMD(0xB6, 0x4F),
	_INIT_DCS_CMD(0xB7, 0x73),
	_INIT_DCS_CMD(0xB8, 0x99),
	_INIT_DCS_CMD(0xB9, 0xE0),
	_INIT_DCS_CMD(0xBA, 0x26),
	_INIT_DCS_CMD(0xBB, 0xAD),
	_INIT_DCS_CMD(0xBC, 0x36),
	_INIT_DCS_CMD(0xBD, 0x3A),
	_INIT_DCS_CMD(0xBE, 0xAE),
	_INIT_DCS_CMD(0xBF, 0x2A),
	_INIT_DCS_CMD(0xC0, 0x66),
	_INIT_DCS_CMD(0xC1, 0x9E),
	_INIT_DCS_CMD(0xC2, 0xB8),
	_INIT_DCS_CMD(0xC3, 0xD1),
	_INIT_DCS_CMD(0xC4, 0xDD),
	_INIT_DCS_CMD(0xC5, 0xE9),
	_INIT_DCS_CMD(0xC6, 0xF6),
	_INIT_DCS_CMD(0xC7, 0xFA),
	_INIT_DCS_CMD(0xC8, 0xFC),
	_INIT_DCS_CMD(0xC9, 0x00),
	_INIT_DCS_CMD(0xCA, 0x00),
	_INIT_DCS_CMD(0xCB, 0x16),
	_INIT_DCS_CMD(0xCC, 0xAF),
	_INIT_DCS_CMD(0xCD, 0xFF),
	_INIT_DCS_CMD(0xCE, 0xFF),
	_INIT_DCS_CMD(0xB0, 0x0A),
	_INIT_DCS_CMD(0xB1, 0x00),
	_INIT_DCS_CMD(0xB2, 0x02),
	_INIT_DCS_CMD(0xB3, 0x0F),
	_INIT_DCS_CMD(0xB4, 0x25),
	_INIT_DCS_CMD(0xB5, 0x39),
	_INIT_DCS_CMD(0xB6, 0x4E),
	_INIT_DCS_CMD(0xB7, 0x72),
	_INIT_DCS_CMD(0xB8, 0x97),
	_INIT_DCS_CMD(0xB9, 0xDC),
	_INIT_DCS_CMD(0xBA, 0x22),
	_INIT_DCS_CMD(0xBB, 0xA4),
	_INIT_DCS_CMD(0xBC, 0x2B),
	_INIT_DCS_CMD(0xBD, 0x2F),
	_INIT_DCS_CMD(0xBE, 0xA9),
	_INIT_DCS_CMD(0xBF, 0x25),
	_INIT_DCS_CMD(0xC0, 0x61),
	_INIT_DCS_CMD(0xC1, 0x97),
	_INIT_DCS_CMD(0xC2, 0xB2),
	_INIT_DCS_CMD(0xC3, 0xCD),
	_INIT_DCS_CMD(0xC4, 0xD9),
	_INIT_DCS_CMD(0xC5, 0xE7),
	_INIT_DCS_CMD(0xC6, 0xF4),
	_INIT_DCS_CMD(0xC7, 0xFA),
	_INIT_DCS_CMD(0xC8, 0xFC),
	_INIT_DCS_CMD(0xC9, 0x00),
	_INIT_DCS_CMD(0xCA, 0x00),
	_INIT_DCS_CMD(0xCB, 0x16),
	_INIT_DCS_CMD(0xCC, 0xAF),
	_INIT_DCS_CMD(0xCD, 0xFF),
	_INIT_DCS_CMD(0xCE, 0xFF),
	_INIT_DCS_CMD(0xB0, 0x0B),
	_INIT_DCS_CMD(0xB1, 0x04),
	_INIT_DCS_CMD(0xB2, 0x05),
	_INIT_DCS_CMD(0xB3, 0x11),
	_INIT_DCS_CMD(0xB4, 0x24),
	_INIT_DCS_CMD(0xB5, 0x39),
	_INIT_DCS_CMD(0xB6, 0x4F),
	_INIT_DCS_CMD(0xB7, 0x72),
	_INIT_DCS_CMD(0xB8, 0x98),
	_INIT_DCS_CMD(0xB9, 0xDC),
	_INIT_DCS_CMD(0xBA, 0x23),
	_INIT_DCS_CMD(0xBB, 0xA6),
	_INIT_DCS_CMD(0xBC, 0x2C),
	_INIT_DCS_CMD(0xBD, 0x30),
	_INIT_DCS_CMD(0xBE, 0xAA),
	_INIT_DCS_CMD(0xBF, 0x26),
	_INIT_DCS_CMD(0xC0, 0x62),
	_INIT_DCS_CMD(0xC1, 0x9B),
	_INIT_DCS_CMD(0xC2, 0xB5),
	_INIT_DCS_CMD(0xC3, 0xCF),
	_INIT_DCS_CMD(0xC4, 0xDB),
	_INIT_DCS_CMD(0xC5, 0xE8),
	_INIT_DCS_CMD(0xC6, 0xF5),
	_INIT_DCS_CMD(0xC7, 0xFA),
	_INIT_DCS_CMD(0xC8, 0xFC),
	_INIT_DCS_CMD(0xC9, 0x00),
	_INIT_DCS_CMD(0xCA, 0x00),
	_INIT_DCS_CMD(0xCB, 0x16),
	_INIT_DCS_CMD(0xCC, 0xAF),
	_INIT_DCS_CMD(0xCD, 0xFF),
	_INIT_DCS_CMD(0xCE, 0xFF),
	_INIT_DCS_CMD(0xB0, 0x0C),
	_INIT_DCS_CMD(0xB1, 0x04),
	_INIT_DCS_CMD(0xB2, 0x02),
	_INIT_DCS_CMD(0xB3, 0x16),
	_INIT_DCS_CMD(0xB4, 0x24),
	_INIT_DCS_CMD(0xB5, 0x3B),
	_INIT_DCS_CMD(0xB6, 0x4F),
	_INIT_DCS_CMD(0xB7, 0x73),
	_INIT_DCS_CMD(0xB8, 0x99),
	_INIT_DCS_CMD(0xB9, 0xE0),
	_INIT_DCS_CMD(0xBA, 0x26),
	_INIT_DCS_CMD(0xBB, 0xAD),
	_INIT_DCS_CMD(0xBC, 0x36),
	_INIT_DCS_CMD(0xBD, 0x3A),
	_INIT_DCS_CMD(0xBE, 0xAE),
	_INIT_DCS_CMD(0xBF, 0x2A),
	_INIT_DCS_CMD(0xC0, 0x66),
	_INIT_DCS_CMD(0xC1, 0x9E),
	_INIT_DCS_CMD(0xC2, 0xB8),
	_INIT_DCS_CMD(0xC3, 0xD1),
	_INIT_DCS_CMD(0xC4, 0xDD),
	_INIT_DCS_CMD(0xC5, 0xE9),
	_INIT_DCS_CMD(0xC6, 0xF6),
	_INIT_DCS_CMD(0xC7, 0xFA),
	_INIT_DCS_CMD(0xC8, 0xFC),
	_INIT_DCS_CMD(0xC9, 0x00),
	_INIT_DCS_CMD(0xCA, 0x00),
	_INIT_DCS_CMD(0xCB, 0x16),
	_INIT_DCS_CMD(0xCC, 0xAF),
	_INIT_DCS_CMD(0xCD, 0xFF),
	_INIT_DCS_CMD(0xCE, 0xFF),
	_INIT_DCS_CMD(0xB0, 0x00),
	_INIT_DCS_CMD(0xB3, 0x08),
	_INIT_DCS_CMD(0xB0, 0x04),
	_INIT_DCS_CMD(0xB8, 0x68),
	_INIT_DELAY_CMD(150),
	{},
};

static const struct panel_init_cmd auo_kd101n80_45na_init_cmd[] = {
	_INIT_DELAY_CMD(24),
	_INIT_DCS_CMD(0x11),
	_INIT_DELAY_CMD(120),
	_INIT_DCS_CMD(0x29),
	_INIT_DELAY_CMD(120),
	{},
};

static const struct panel_init_cmd auo_b101uan08_3_init_cmd[] = {
	_INIT_DELAY_CMD(24),
	_INIT_DCS_CMD(0xB0, 0x01),
	_INIT_DCS_CMD(0xC0, 0x48),
	_INIT_DCS_CMD(0xC1, 0x48),
	_INIT_DCS_CMD(0xC2, 0x47),
	_INIT_DCS_CMD(0xC3, 0x47),
	_INIT_DCS_CMD(0xC4, 0x46),
	_INIT_DCS_CMD(0xC5, 0x46),
	_INIT_DCS_CMD(0xC6, 0x45),
	_INIT_DCS_CMD(0xC7, 0x45),
	_INIT_DCS_CMD(0xC8, 0x64),
	_INIT_DCS_CMD(0xC9, 0x64),
	_INIT_DCS_CMD(0xCA, 0x4F),
	_INIT_DCS_CMD(0xCB, 0x4F),
	_INIT_DCS_CMD(0xCC, 0x40),
	_INIT_DCS_CMD(0xCD, 0x40),
	_INIT_DCS_CMD(0xCE, 0x66),
	_INIT_DCS_CMD(0xCF, 0x66),
	_INIT_DCS_CMD(0xD0, 0x4F),
	_INIT_DCS_CMD(0xD1, 0x4F),
	_INIT_DCS_CMD(0xD2, 0x41),
	_INIT_DCS_CMD(0xD3, 0x41),
	_INIT_DCS_CMD(0xD4, 0x48),
	_INIT_DCS_CMD(0xD5, 0x48),
	_INIT_DCS_CMD(0xD6, 0x47),
	_INIT_DCS_CMD(0xD7, 0x47),
	_INIT_DCS_CMD(0xD8, 0x46),
	_INIT_DCS_CMD(0xD9, 0x46),
	_INIT_DCS_CMD(0xDA, 0x45),
	_INIT_DCS_CMD(0xDB, 0x45),
	_INIT_DCS_CMD(0xDC, 0x64),
	_INIT_DCS_CMD(0xDD, 0x64),
	_INIT_DCS_CMD(0xDE, 0x4F),
	_INIT_DCS_CMD(0xDF, 0x4F),
	_INIT_DCS_CMD(0xE0, 0x40),
	_INIT_DCS_CMD(0xE1, 0x40),
	_INIT_DCS_CMD(0xE2, 0x66),
	_INIT_DCS_CMD(0xE3, 0x66),
	_INIT_DCS_CMD(0xE4, 0x4F),
	_INIT_DCS_CMD(0xE5, 0x4F),
	_INIT_DCS_CMD(0xE6, 0x41),
	_INIT_DCS_CMD(0xE7, 0x41),
	_INIT_DELAY_CMD(150),
	{},
};

static inline struct boe_panel *to_boe_panel(struct drm_panel *panel)
{
	return container_of(panel, struct boe_panel, base);
}

static int boe_panel_init_dcs_cmd(struct boe_panel *boe)
{
	struct mipi_dsi_device *dsi = boe->dsi;
	struct drm_panel *panel = &boe->base;
	int i, err = 0;

	if (boe->desc->init_cmds) {
		const struct panel_init_cmd *init_cmds = boe->desc->init_cmds;

		for (i = 0; init_cmds[i].len != 0; i++) {
			const struct panel_init_cmd *cmd = &init_cmds[i];

			switch (cmd->type) {
			case DELAY_CMD:
				msleep(cmd->data[0]);
				err = 0;
				break;

			case INIT_DCS_CMD:
				err = mipi_dsi_dcs_write(dsi, cmd->data[0],
							 cmd->len <= 1 ? NULL :
							 &cmd->data[1],
							 cmd->len - 1);
				break;

			default:
				err = -EINVAL;
			}

			if (err < 0) {
				dev_err(panel->dev,
					"failed to write command %u\n", i);
				return err;
			}
		}
	}
	return 0;
}

static int boe_panel_enter_sleep_mode(struct boe_panel *boe)
{
	struct mipi_dsi_device *dsi = boe->dsi;
	int ret;

	dsi->mode_flags &= ~MIPI_DSI_MODE_LPM;

	ret = mipi_dsi_dcs_set_display_off(dsi);
	if (ret < 0)
		return ret;

	ret = mipi_dsi_dcs_enter_sleep_mode(dsi);
	if (ret < 0)
		return ret;

	return 0;
}

static int boe_panel_disable(struct drm_panel *panel)
{
	struct boe_panel *boe = to_boe_panel(panel);
	int ret;

	ret = boe_panel_enter_sleep_mode(boe);
	if (ret < 0) {
		dev_err(panel->dev, "failed to set panel off: %d\n", ret);
		return ret;
	}

	msleep(150);

	return 0;
}

static int boe_panel_unprepare(struct drm_panel *panel)
{
	struct boe_panel *boe = to_boe_panel(panel);

	if (!boe->prepared)
		return 0;

	if (boe->desc->discharge_on_disable) {
		regulator_disable(boe->avee);
		regulator_disable(boe->avdd);
		usleep_range(5000, 7000);
		gpiod_set_value(boe->enable_gpio, 0);
		usleep_range(5000, 7000);
		regulator_disable(boe->pp1800);
		regulator_disable(boe->pp3300);
	} else {
		gpiod_set_value(boe->enable_gpio, 0);
		usleep_range(1000, 2000);
		regulator_disable(boe->avee);
		regulator_disable(boe->avdd);
		usleep_range(5000, 7000);
		regulator_disable(boe->pp1800);
		regulator_disable(boe->pp3300);
	}

	boe->prepared = false;

	return 0;
}

static int boe_panel_prepare(struct drm_panel *panel)
{
	struct boe_panel *boe = to_boe_panel(panel);
	int ret;

	if (boe->prepared)
		return 0;

	gpiod_set_value(boe->enable_gpio, 0);
	usleep_range(1000, 1500);

	ret = regulator_enable(boe->pp3300);
	if (ret < 0)
		return ret;

	ret = regulator_enable(boe->pp1800);
	if (ret < 0)
		return ret;

	usleep_range(3000, 5000);

	ret = regulator_enable(boe->avdd);
	if (ret < 0)
		goto poweroff1v8;
	ret = regulator_enable(boe->avee);
	if (ret < 0)
		goto poweroffavdd;

	usleep_range(10000, 11000);

	gpiod_set_value(boe->enable_gpio, 1);
	usleep_range(1000, 2000);
	gpiod_set_value(boe->enable_gpio, 0);
	usleep_range(1000, 2000);
	gpiod_set_value(boe->enable_gpio, 1);
	usleep_range(6000, 10000);

	ret = boe_panel_init_dcs_cmd(boe);
	if (ret < 0) {
		dev_err(panel->dev, "failed to init panel: %d\n", ret);
		goto poweroff;
	}

	boe->prepared = true;

	return 0;

poweroff:
	regulator_disable(boe->avee);
poweroffavdd:
	regulator_disable(boe->avdd);
poweroff1v8:
	usleep_range(5000, 7000);
	regulator_disable(boe->pp1800);
	gpiod_set_value(boe->enable_gpio, 0);

	return ret;
}

static int boe_panel_enable(struct drm_panel *panel)
{
	msleep(130);
	return 0;
}

static const struct drm_display_mode boe_tv110c9m_default_mode = {
	.clock = 166594,
	.hdisplay = 1200,
	.hsync_start = 1200 + 40,
	.hsync_end = 1200 + 40 + 8,
	.htotal = 1200 + 40 + 8 + 28,
	.vdisplay = 2000,
	.vsync_start = 2000 + 26,
	.vsync_end = 2000 + 26 + 2,
	.vtotal = 2000 + 26 + 2 + 148,
	.vrefresh = 60,
	.type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
};

static const struct panel_desc boe_tv110c9m_desc = {
	.modes = &boe_tv110c9m_default_mode,
	.bpc = 8,
	.size = {
		.width_mm = 143,
		.height_mm = 238,
	},
	.lanes = 4,
	.format = MIPI_DSI_FMT_RGB888,
	.mode_flags = MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_VIDEO
			| MIPI_DSI_MODE_VIDEO_HSE
			| MIPI_DSI_CLOCK_NON_CONTINUOUS
			| MIPI_DSI_MODE_VIDEO_BURST,
	.init_cmds = boe_tv110c9m_init_cmd,
};

static const struct drm_display_mode inx_hj110iz_default_mode = {
	.clock = 166594,
	.hdisplay = 1200,
	.hsync_start = 1200 + 40,
	.hsync_end = 1200 + 40 + 8,
	.htotal = 1200 + 40 + 8 + 28,
	.vdisplay = 2000,
	.vsync_start = 2000 + 26,
	.vsync_end = 2000 + 26 + 1,
	.vtotal = 2000 + 26 + 1 + 149,
	.vrefresh = 60,
	.type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
};

static const struct panel_desc inx_hj110iz_desc = {
	.modes = &inx_hj110iz_default_mode,
	.bpc = 8,
	.size = {
		.width_mm = 143,
		.height_mm = 238,
	},
	.lanes = 4,
	.format = MIPI_DSI_FMT_RGB888,
	.mode_flags = MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_VIDEO
			| MIPI_DSI_MODE_VIDEO_HSE
			| MIPI_DSI_CLOCK_NON_CONTINUOUS
			| MIPI_DSI_MODE_VIDEO_BURST,
	.init_cmds = inx_hj110iz_init_cmd,
};

static const struct drm_display_mode boe_tv101wum_nl6_default_mode = {
	.clock = 159425,
	.hdisplay = 1200,
	.hsync_start = 1200 + 100,
	.hsync_end = 1200 + 100 + 40,
	.htotal = 1200 + 100 + 40 + 24,
	.vdisplay = 1920,
	.vsync_start = 1920 + 10,
	.vsync_end = 1920 + 10 + 14,
	.vtotal = 1920 + 10 + 14 + 4,
	.vrefresh = 60,
};

static const struct panel_desc boe_tv101wum_nl6_desc = {
	.modes = &boe_tv101wum_nl6_default_mode,
	.bpc = 8,
	.size = {
		.width_mm = 135,
		.height_mm = 216,
	},
	.lanes = 4,
	.format = MIPI_DSI_FMT_RGB888,
	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
		      MIPI_DSI_MODE_LPM,
	.init_cmds = boe_init_cmd,
	.discharge_on_disable = false,
};

static const struct drm_display_mode auo_kd101n80_45na_default_mode = {
	.clock = 157000,
	.hdisplay = 1200,
	.hsync_start = 1200 + 80,
	.hsync_end = 1200 + 80 + 24,
	.htotal = 1200 + 80 + 24 + 36,
	.vdisplay = 1920,
	.vsync_start = 1920 + 16,
	.vsync_end = 1920 + 16 + 4,
	.vtotal = 1920 + 16 + 4 + 16,
	.vrefresh = 60,
};

static const struct panel_desc auo_kd101n80_45na_desc = {
	.modes = &auo_kd101n80_45na_default_mode,
	.bpc = 8,
	.size = {
		.width_mm = 135,
		.height_mm = 216,
	},
	.lanes = 4,
	.format = MIPI_DSI_FMT_RGB888,
	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
		      MIPI_DSI_MODE_LPM,
	.init_cmds = auo_kd101n80_45na_init_cmd,
	.discharge_on_disable = true,
};

static const struct drm_display_mode boe_tv101wum_n53_default_mode = {
	.clock = 159916,
	.hdisplay = 1200,
	.hsync_start = 1200 + 80,
	.hsync_end = 1200 + 80 + 24,
	.htotal = 1200 + 80 + 24 + 60,
	.vdisplay = 1920,
	.vsync_start = 1920 + 20,
	.vsync_end = 1920 + 20 + 4,
	.vtotal = 1920 + 20 + 4 + 10,
	.vrefresh = 60,
	.type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
};

static const struct panel_desc boe_tv101wum_n53_desc = {
	.modes = &boe_tv101wum_n53_default_mode,
	.bpc = 8,
	.size = {
		.width_mm = 135,
		.height_mm = 216,
	},
	.lanes = 4,
	.format = MIPI_DSI_FMT_RGB888,
	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
		      MIPI_DSI_MODE_LPM,
	.init_cmds = boe_init_cmd,
};

static const struct drm_display_mode auo_b101uan08_3_default_mode = {
	.clock = 159667,
	.hdisplay = 1200,
	.hsync_start = 1200 + 60,
	.hsync_end = 1200 + 60 + 4,
	.htotal = 1200 + 60 + 4 + 80,
	.vdisplay = 1920,
	.vsync_start = 1920 + 34,
	.vsync_end = 1920 + 34 + 2,
	.vtotal = 1920 + 34 + 2 + 24,
	.vrefresh = 60,
	.type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
};

static const struct panel_desc auo_b101uan08_3_desc = {
	.modes = &auo_b101uan08_3_default_mode,
	.bpc = 8,
	.size = {
		.width_mm = 135,
		.height_mm = 216,
	},
	.lanes = 4,
	.format = MIPI_DSI_FMT_RGB888,
	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
		      MIPI_DSI_MODE_LPM,
	.init_cmds = auo_b101uan08_3_init_cmd,
};

static const struct drm_display_mode boe_tv105wum_nw0_default_mode = {
	.clock = 159916,
	.hdisplay = 1200,
	.hsync_start = 1200 + 80,
	.hsync_end = 1200 + 80 + 24,
	.htotal = 1200 + 80 + 24 + 60,
	.vdisplay = 1920,
	.vsync_start = 1920 + 20,
	.vsync_end = 1920 + 20 + 4,
	.vtotal = 1920 + 20 + 4 + 10,
	.vrefresh = 60,
	.type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
};

static const struct panel_desc boe_tv105wum_nw0_desc = {
	.modes = &boe_tv105wum_nw0_default_mode,
	.bpc = 8,
	.size = {
		.width_mm = 141,
		.height_mm = 226,
	},
	.lanes = 4,
	.format = MIPI_DSI_FMT_RGB888,
	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
		      MIPI_DSI_MODE_LPM,
	.init_cmds = boe_init_cmd,
};

static int boe_panel_get_modes(struct drm_panel *panel,
			       struct drm_connector *connector)
{
	struct boe_panel *boe = to_boe_panel(panel);
	const struct drm_display_mode *m = boe->desc->modes;
	struct drm_display_mode *mode;

	mode = drm_mode_duplicate(connector->dev, m);
	if (!mode) {
		dev_err(panel->dev, "failed to add mode %ux%u@%u\n",
			m->hdisplay, m->vdisplay, m->vrefresh);
		return -ENOMEM;
	}

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

	connector->display_info.width_mm = boe->desc->size.width_mm;
	connector->display_info.height_mm = boe->desc->size.height_mm;
	connector->display_info.bpc = boe->desc->bpc;
	/*
	 * TODO: Remove once all drm drivers call
	 * drm_connector_set_orientation_from_panel()
	 */
	drm_connector_set_panel_orientation(connector, boe->orientation);

	return 1;
}

static enum drm_panel_orientation boe_panel_get_orientation(struct drm_panel *panel)
{
	struct boe_panel *boe = to_boe_panel(panel);

	return boe->orientation;
}

static const struct drm_panel_funcs boe_panel_funcs = {
	.disable = boe_panel_disable,
	.unprepare = boe_panel_unprepare,
	.prepare = boe_panel_prepare,
	.enable = boe_panel_enable,
	.get_modes = boe_panel_get_modes,
	.get_orientation = boe_panel_get_orientation,
};

static int boe_panel_add(struct boe_panel *boe)
{
	struct device *dev = &boe->dsi->dev;
	int err;

	boe->avdd = devm_regulator_get(dev, "avdd");
	if (IS_ERR(boe->avdd))
		return PTR_ERR(boe->avdd);

	boe->avee = devm_regulator_get(dev, "avee");
	if (IS_ERR(boe->avee))
		return PTR_ERR(boe->avee);

	boe->pp3300 = devm_regulator_get(dev, "pp3300");
	if (IS_ERR(boe->pp3300))
		return PTR_ERR(boe->pp3300);

	boe->pp1800 = devm_regulator_get(dev, "pp1800");
	if (IS_ERR(boe->pp1800))
		return PTR_ERR(boe->pp1800);

	boe->enable_gpio = devm_gpiod_get(dev, "enable", GPIOD_OUT_LOW);
	if (IS_ERR(boe->enable_gpio)) {
		dev_err(dev, "cannot get reset-gpios %ld\n",
			PTR_ERR(boe->enable_gpio));
		return PTR_ERR(boe->enable_gpio);
	}

	gpiod_set_value(boe->enable_gpio, 0);

	drm_panel_init(&boe->base, dev, &boe_panel_funcs,
		       DRM_MODE_CONNECTOR_DSI);
	err = of_drm_get_panel_orientation(dev->of_node, &boe->orientation);
	if (err < 0) {
		dev_err(dev, "%pOF: failed to get orientation %d\n", dev->of_node, err);
		return err;
	}

	err = drm_panel_of_backlight(&boe->base);
	if (err)
		return err;

	boe->base.funcs = &boe_panel_funcs;
	boe->base.dev = &boe->dsi->dev;

	return drm_panel_add(&boe->base);
}

static int boe_panel_probe(struct mipi_dsi_device *dsi)
{
	struct boe_panel *boe;
	int ret;
	const struct panel_desc *desc;

	boe = devm_kzalloc(&dsi->dev, sizeof(*boe), GFP_KERNEL);
	if (!boe)
		return -ENOMEM;

	desc = of_device_get_match_data(&dsi->dev);
	dsi->lanes = desc->lanes;
	dsi->format = desc->format;
	dsi->mode_flags = desc->mode_flags;
	boe->desc = desc;
	boe->dsi = dsi;
	ret = boe_panel_add(boe);
	if (ret < 0)
		return ret;

	mipi_dsi_set_drvdata(dsi, boe);

	ret = mipi_dsi_attach(dsi);
	if (ret)
		drm_panel_remove(&boe->base);

	return ret;
}

static void boe_panel_shutdown(struct mipi_dsi_device *dsi)
{
	struct boe_panel *boe = mipi_dsi_get_drvdata(dsi);

	drm_panel_disable(&boe->base);
	drm_panel_unprepare(&boe->base);
}

static int boe_panel_remove(struct mipi_dsi_device *dsi)
{
	struct boe_panel *boe = mipi_dsi_get_drvdata(dsi);
	int ret;

	boe_panel_shutdown(dsi);

	ret = mipi_dsi_detach(dsi);
	if (ret < 0)
		dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", ret);

	if (boe->base.dev)
		drm_panel_remove(&boe->base);

	return 0;
}

static const struct of_device_id boe_of_match[] = {
	{ .compatible = "boe,tv101wum-nl6",
	  .data = &boe_tv101wum_nl6_desc
	},
	{ .compatible = "auo,kd101n80-45na",
	  .data = &auo_kd101n80_45na_desc
	},
	{ .compatible = "boe,tv101wum-n53",
	  .data = &boe_tv101wum_n53_desc
	},
	{ .compatible = "auo,b101uan08.3",
	  .data = &auo_b101uan08_3_desc
	},
	{ .compatible = "boe,tv105wum-nw0",
	  .data = &boe_tv105wum_nw0_desc
	},
	{ .compatible = "boe,tv110c9m-ll3",
	  .data = &boe_tv110c9m_desc
	},
	{ .compatible = "innolux,hj110iz-01a",
	  .data = &inx_hj110iz_desc
	},
	{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, boe_of_match);

static struct mipi_dsi_driver boe_panel_driver = {
	.driver = {
		.name = "panel-boe-tv101wum-nl6",
		.of_match_table = boe_of_match,
	},
	.probe = boe_panel_probe,
	.remove = boe_panel_remove,
	.shutdown = boe_panel_shutdown,
};
module_mipi_dsi_driver(boe_panel_driver);

MODULE_AUTHOR("Jitao Shi <jitao.shi@mediatek.com>");
MODULE_DESCRIPTION("BOE tv101wum-nl6 1200x1920 video mode panel driver");
MODULE_LICENSE("GPL v2");
