blob: eee5d77794f23ab23a16a15b788857d8eff0534d [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "lcd.h"
#include <ddk/debug.h>
#include <ddk/protocol/platform/device.h>
#include <ddktl/device.h>
#include <lib/mipi-dsi/mipi-dsi.h>
#include "common.h"
#define DELAY_CMD (0xFF)
#define DCS_CMD (0xFE)
#define GEN_CMD (0xFD)
#define READ_DISPLAY_ID_CMD (0x04)
#define READ_DISPLAY_ID_LEN (0x03)
namespace astro_display {
namespace {
// Based on Vendor datasheet
// <CMD TYPE><LENGTH><DATA...>
// <DELAY_CMD><DELAY (ms)>
constexpr uint8_t lcd_shutdown_sequence[] = {
DELAY_CMD,5,
DCS_CMD,1,0x28,
DELAY_CMD, 30,
DCS_CMD,1,0x10,
DELAY_CMD,150,
};
constexpr uint8_t lcd_init_sequence_TV070WSM_FT[] = {
GEN_CMD,2,0xE0,0x00,
GEN_CMD,2,0xE1,0x93,
GEN_CMD,2,0xE2,0x65,
GEN_CMD,2,0xE3,0xF8,
GEN_CMD,2,0xE0,0x01,
GEN_CMD,2,0x00,0x00,
GEN_CMD,2,0x01,0x90,
GEN_CMD,2,0x03,0x00,
GEN_CMD,2,0x04,0x90,
GEN_CMD,2,0x17,0x00,
GEN_CMD,2,0x18,0xB0,
GEN_CMD,2,0x19,0x01,
GEN_CMD,2,0x1A,0x00,
GEN_CMD,2,0x1B,0xB0,
GEN_CMD,2,0x1C,0x01,
GEN_CMD,2,0x1F,0x3E,
GEN_CMD,2,0x20,0x2F,
GEN_CMD,2,0x21,0x2F,
GEN_CMD,2,0x22,0x0E,
GEN_CMD,2,0x37,0x69,
GEN_CMD,2,0x38,0x05,
GEN_CMD,2,0x39,0x00,
GEN_CMD,2,0x3A,0x01,
GEN_CMD,2,0x3C,0x90,
GEN_CMD,2,0x3D,0xFF,
GEN_CMD,2,0x3E,0xFF,
GEN_CMD,2,0x3F,0xFF,
GEN_CMD,2,0x40,0x02,
GEN_CMD,2,0x41,0x80,
GEN_CMD,2,0x42,0x99,
GEN_CMD,2,0x43,0x06,
GEN_CMD,2,0x44,0x09,
GEN_CMD,2,0x45,0x3C,
GEN_CMD,2,0x4B,0x04,
GEN_CMD,2,0x55,0x0D,
GEN_CMD,2,0x56,0x01,
GEN_CMD,2,0x57,0x89,
GEN_CMD,2,0x58,0x0A,
GEN_CMD,2,0x59,0x0A,
GEN_CMD,2,0x5A,0x27,
GEN_CMD,2,0x5B,0x15,
GEN_CMD,2,0x5D,0x7C,
GEN_CMD,2,0x5E,0x67,
GEN_CMD,2,0x5F,0x58,
GEN_CMD,2,0x60,0x4C,
GEN_CMD,2,0x61,0x48,
GEN_CMD,2,0x62,0x38,
GEN_CMD,2,0x63,0x3C,
GEN_CMD,2,0x64,0x24,
GEN_CMD,2,0x65,0x3B,
GEN_CMD,2,0x66,0x38,
GEN_CMD,2,0x67,0x36,
GEN_CMD,2,0x68,0x53,
GEN_CMD,2,0x69,0x3F,
GEN_CMD,2,0x6A,0x44,
GEN_CMD,2,0x6B,0x35,
GEN_CMD,2,0x6C,0x2E,
GEN_CMD,2,0x6D,0x1F,
GEN_CMD,2,0x6E,0x0C,
GEN_CMD,2,0x6F,0x00,
GEN_CMD,2,0x70,0x7C,
GEN_CMD,2,0x71,0x67,
GEN_CMD,2,0x72,0x58,
GEN_CMD,2,0x73,0x4C,
GEN_CMD,2,0x74,0x48,
GEN_CMD,2,0x75,0x38,
GEN_CMD,2,0x76,0x3C,
GEN_CMD,2,0x77,0x24,
GEN_CMD,2,0x78,0x3B,
GEN_CMD,2,0x79,0x38,
GEN_CMD,2,0x7A,0x36,
GEN_CMD,2,0x7B,0x53,
GEN_CMD,2,0x7C,0x3F,
GEN_CMD,2,0x7D,0x44,
GEN_CMD,2,0x7E,0x35,
GEN_CMD,2,0x7F,0x2E,
GEN_CMD,2,0x80,0x1F,
GEN_CMD,2,0x81,0x0C,
GEN_CMD,2,0x82,0x00,
GEN_CMD,2,0xE0,0x02,
GEN_CMD,2,0x00,0x45,
GEN_CMD,2,0x01,0x45,
GEN_CMD,2,0x02,0x47,
GEN_CMD,2,0x03,0x47,
GEN_CMD,2,0x04,0x41,
GEN_CMD,2,0x05,0x41,
GEN_CMD,2,0x06,0x1F,
GEN_CMD,2,0x07,0x1F,
GEN_CMD,2,0x08,0x1F,
GEN_CMD,2,0x09,0x1F,
GEN_CMD,2,0x0A,0x1F,
GEN_CMD,2,0x0B,0x1F,
GEN_CMD,2,0x0C,0x1F,
GEN_CMD,2,0x0D,0x1D,
GEN_CMD,2,0x0E,0x1D,
GEN_CMD,2,0x0F,0x1D,
GEN_CMD,2,0x10,0x1F,
GEN_CMD,2,0x11,0x1F,
GEN_CMD,2,0x12,0x1F,
GEN_CMD,2,0x13,0x1F,
GEN_CMD,2,0x14,0x1F,
GEN_CMD,2,0x15,0x1F,
GEN_CMD,2,0x16,0x44,
GEN_CMD,2,0x17,0x44,
GEN_CMD,2,0x18,0x46,
GEN_CMD,2,0x19,0x46,
GEN_CMD,2,0x1A,0x40,
GEN_CMD,2,0x1B,0x40,
GEN_CMD,2,0x1C,0x1F,
GEN_CMD,2,0x1D,0x1F,
GEN_CMD,2,0x1E,0x1F,
GEN_CMD,2,0x1F,0x1F,
GEN_CMD,2,0x20,0x1F,
GEN_CMD,2,0x21,0x1F,
GEN_CMD,2,0x22,0x1F,
GEN_CMD,2,0x23,0x1D,
GEN_CMD,2,0x24,0x1D,
GEN_CMD,2,0x25,0x1D,
GEN_CMD,2,0x26,0x1F,
GEN_CMD,2,0x27,0x1F,
GEN_CMD,2,0x28,0x1F,
GEN_CMD,2,0x29,0x1F,
GEN_CMD,2,0x2A,0x1F,
GEN_CMD,2,0x2B,0x1F,
GEN_CMD,2,0x58,0x40,
GEN_CMD,2,0x59,0x00,
GEN_CMD,2,0x5A,0x00,
GEN_CMD,2,0x5B,0x10,
GEN_CMD,2,0x5C,0x06,
GEN_CMD,2,0x5D,0x20,
GEN_CMD,2,0x5E,0x00,
GEN_CMD,2,0x5F,0x00,
GEN_CMD,2,0x61,0x00,
GEN_CMD,2,0x62,0x00,
GEN_CMD,2,0x63,0x7A,
GEN_CMD,2,0x64,0x7A,
GEN_CMD,2,0x65,0x00,
GEN_CMD,2,0x66,0x00,
GEN_CMD,2,0x67,0x32,
GEN_CMD,2,0x68,0x08,
GEN_CMD,2,0x69,0x7A,
GEN_CMD,2,0x6A,0x7A,
GEN_CMD,2,0x6B,0x00,
GEN_CMD,2,0x6C,0x00,
GEN_CMD,2,0x6D,0x04,
GEN_CMD,2,0x6E,0x04,
GEN_CMD,2,0x6F,0x88,
GEN_CMD,2,0x70,0x00,
GEN_CMD,2,0x71,0x00,
GEN_CMD,2,0x72,0x06,
GEN_CMD,2,0x73,0x7B,
GEN_CMD,2,0x74,0x00,
GEN_CMD,2,0x75,0x07,
GEN_CMD,2,0x76,0x00,
GEN_CMD,2,0x77,0x5D,
GEN_CMD,2,0x78,0x17,
GEN_CMD,2,0x79,0x1F,
GEN_CMD,2,0x7A,0x00,
GEN_CMD,2,0x7B,0x00,
GEN_CMD,2,0x7C,0x00,
GEN_CMD,2,0x7D,0x03,
GEN_CMD,2,0x7E,0x7B,
GEN_CMD,2,0xE0,0x03,
GEN_CMD,2,0xAF,0x20,
GEN_CMD,2,0xE0,0x04,
GEN_CMD,2,0x09,0x11,
GEN_CMD,2,0x0E,0x48,
GEN_CMD,2,0x2B,0x2B,
GEN_CMD,2,0x2E,0x44,
GEN_CMD,2,0x41,0xFF,
GEN_CMD,2,0xE0,0x00,
GEN_CMD,2,0xE6,0x02,
GEN_CMD,2,0xE7,0x0C,
DCS_CMD,1,0x11,
DELAY_CMD,120,
GEN_CMD,2,0xE0,0x03,
GEN_CMD,2,0x2B,0x01,
GEN_CMD,2,0x2C,0x00,
GEN_CMD,2,0x30,0x03,
GEN_CMD,2,0x31,0xCC,
GEN_CMD,2,0x32,0x03,
GEN_CMD,2,0x33,0xC9,
GEN_CMD,2,0x34,0x03,
GEN_CMD,2,0x35,0xC0,
GEN_CMD,2,0x36,0x03,
GEN_CMD,2,0x37,0xB3,
GEN_CMD,2,0x38,0x03,
GEN_CMD,2,0x39,0xAB,
GEN_CMD,2,0x3A,0x03,
GEN_CMD,2,0x3B,0x9D,
GEN_CMD,2,0x3C,0x03,
GEN_CMD,2,0x3D,0x8F,
GEN_CMD,2,0x3E,0x03,
GEN_CMD,2,0x3F,0x6D,
GEN_CMD,2,0x40,0x03,
GEN_CMD,2,0x41,0x51,
GEN_CMD,2,0x42,0x03,
GEN_CMD,2,0x43,0x17,
GEN_CMD,2,0x44,0x02,
GEN_CMD,2,0x45,0xD8,
GEN_CMD,2,0x46,0x02,
GEN_CMD,2,0x47,0x60,
GEN_CMD,2,0x48,0x01,
GEN_CMD,2,0x49,0xEB,
GEN_CMD,2,0x4A,0x01,
GEN_CMD,2,0x4B,0xE5,
GEN_CMD,2,0x4C,0x01,
GEN_CMD,2,0x4D,0x6C,
GEN_CMD,2,0x4E,0x00,
GEN_CMD,2,0x4F,0xF2,
GEN_CMD,2,0x50,0x00,
GEN_CMD,2,0x51,0xB4,
GEN_CMD,2,0x52,0x00,
GEN_CMD,2,0x53,0x74,
GEN_CMD,2,0x54,0x00,
GEN_CMD,2,0x55,0x54,
GEN_CMD,2,0x56,0x00,
GEN_CMD,2,0x57,0x34,
GEN_CMD,2,0x58,0x00,
GEN_CMD,2,0x59,0x26,
GEN_CMD,2,0x5A,0x00,
GEN_CMD,2,0x5B,0x18,
GEN_CMD,2,0x5C,0x00,
GEN_CMD,2,0x5D,0x11,
GEN_CMD,2,0x5E,0x00,
GEN_CMD,2,0x5F,0x0A,
GEN_CMD,2,0x60,0x00,
GEN_CMD,2,0x61,0x03,
GEN_CMD,2,0x62,0x00,
GEN_CMD,2,0x63,0x00,
GEN_CMD,2,0x64,0x03,
GEN_CMD,2,0x65,0x9E,
GEN_CMD,2,0x66,0x03,
GEN_CMD,2,0x67,0x9B,
GEN_CMD,2,0x68,0x03,
GEN_CMD,2,0x69,0x94,
GEN_CMD,2,0x6A,0x03,
GEN_CMD,2,0x6B,0x8C,
GEN_CMD,2,0x6C,0x03,
GEN_CMD,2,0x6D,0x85,
GEN_CMD,2,0x6E,0x03,
GEN_CMD,2,0x6F,0x76,
GEN_CMD,2,0x70,0x03,
GEN_CMD,2,0x71,0x67,
GEN_CMD,2,0x72,0x03,
GEN_CMD,2,0x73,0x4B,
GEN_CMD,2,0x74,0x03,
GEN_CMD,2,0x75,0x2E,
GEN_CMD,2,0x76,0x02,
GEN_CMD,2,0x77,0xF7,
GEN_CMD,2,0x78,0x02,
GEN_CMD,2,0x79,0xB8,
GEN_CMD,2,0x7A,0x02,
GEN_CMD,2,0x7B,0x46,
GEN_CMD,2,0x7C,0x01,
GEN_CMD,2,0x7D,0xD6,
GEN_CMD,2,0x7E,0x01,
GEN_CMD,2,0x7F,0xD0,
GEN_CMD,2,0x80,0x01,
GEN_CMD,2,0x81,0x5C,
GEN_CMD,2,0x82,0x00,
GEN_CMD,2,0x83,0xE7,
GEN_CMD,2,0x84,0x00,
GEN_CMD,2,0x85,0xAA,
GEN_CMD,2,0x86,0x00,
GEN_CMD,2,0x87,0x74,
GEN_CMD,2,0x88,0x00,
GEN_CMD,2,0x89,0x5A,
GEN_CMD,2,0x8A,0x00,
GEN_CMD,2,0x8B,0x3C,
GEN_CMD,2,0x8C,0x00,
GEN_CMD,2,0x8D,0x2C,
GEN_CMD,2,0x8E,0x00,
GEN_CMD,2,0x8F,0x1C,
GEN_CMD,2,0x90,0x00,
GEN_CMD,2,0x91,0x14,
GEN_CMD,2,0x92,0x00,
GEN_CMD,2,0x93,0x0C,
GEN_CMD,2,0x94,0x00,
GEN_CMD,2,0x95,0x04,
GEN_CMD,2,0x96,0x00,
GEN_CMD,2,0x97,0x00,
GEN_CMD,2,0xE0,0x00,
DCS_CMD,1,0x29,
DELAY_CMD,5,
};
constexpr uint8_t lcd_init_sequence_P070ACB_FT[] = {
DELAY_CMD,100,
GEN_CMD,2,0xE0,0x00,
GEN_CMD,2,0xE1,0x93,
GEN_CMD,2,0xE2,0x65,
GEN_CMD,2,0xE3,0xF8,
GEN_CMD,2,0x80,0x03,
GEN_CMD,2,0xE0,0x01,
GEN_CMD,2,0x0C,0x74,
GEN_CMD,2,0x17,0x00,
GEN_CMD,2,0x18,0xEF,
GEN_CMD,2,0x19,0x00,
GEN_CMD,2,0x1A,0x00,
GEN_CMD,2,0x1B,0xEF,
GEN_CMD,2,0x1C,0x00,
GEN_CMD,2,0x1F,0x70,
GEN_CMD,2,0x20,0x2D,
GEN_CMD,2,0x21,0x2D,
GEN_CMD,2,0x22,0x7E,
GEN_CMD,2,0x26,0xF3,
GEN_CMD,2,0x37,0x09,
GEN_CMD,2,0x38,0x04,
GEN_CMD,2,0x39,0x00,
GEN_CMD,2,0x3A,0x01,
GEN_CMD,2,0x3C,0x90,
GEN_CMD,2,0x3D,0xFF,
GEN_CMD,2,0x3E,0xFF,
GEN_CMD,2,0x3F,0xFF,
GEN_CMD,2,0x40,0x02,
GEN_CMD,2,0x41,0x80,
GEN_CMD,2,0x42,0x99,
GEN_CMD,2,0x43,0x14,
GEN_CMD,2,0x44,0x19,
GEN_CMD,2,0x45,0x5A,
GEN_CMD,2,0x4B,0x04,
GEN_CMD,2,0x55,0x02,
GEN_CMD,2,0x56,0x01,
GEN_CMD,2,0x57,0x69,
GEN_CMD,2,0x58,0x0A,
GEN_CMD,2,0x59,0x0A,
GEN_CMD,2,0x5A,0x2E,
GEN_CMD,2,0x5B,0x19,
GEN_CMD,2,0x5C,0x15,
GEN_CMD,2,0x5D,0x77,
GEN_CMD,2,0x5E,0x56,
GEN_CMD,2,0x5F,0x45,
GEN_CMD,2,0x60,0x38,
GEN_CMD,2,0x61,0x35,
GEN_CMD,2,0x62,0x27,
GEN_CMD,2,0x63,0x2D,
GEN_CMD,2,0x64,0x18,
GEN_CMD,2,0x65,0x33,
GEN_CMD,2,0x66,0x34,
GEN_CMD,2,0x67,0x35,
GEN_CMD,2,0x68,0x56,
GEN_CMD,2,0x69,0x45,
GEN_CMD,2,0x6A,0x4F,
GEN_CMD,2,0x6B,0x42,
GEN_CMD,2,0x6C,0x40,
GEN_CMD,2,0x6D,0x34,
GEN_CMD,2,0x6E,0x25,
GEN_CMD,2,0x6F,0x02,
GEN_CMD,2,0x70,0x77,
GEN_CMD,2,0x71,0x56,
GEN_CMD,2,0x72,0x45,
GEN_CMD,2,0x73,0x38,
GEN_CMD,2,0x74,0x35,
GEN_CMD,2,0x75,0x27,
GEN_CMD,2,0x76,0x2D,
GEN_CMD,2,0x77,0x18,
GEN_CMD,2,0x78,0x33,
GEN_CMD,2,0x79,0x34,
GEN_CMD,2,0x7A,0x35,
GEN_CMD,2,0x7B,0x56,
GEN_CMD,2,0x7C,0x45,
GEN_CMD,2,0x7D,0x4F,
GEN_CMD,2,0x7E,0x42,
GEN_CMD,2,0x7F,0x40,
GEN_CMD,2,0x80,0x34,
GEN_CMD,2,0x81,0x25,
GEN_CMD,2,0x82,0x02,
GEN_CMD,2,0xE0,0x02,
GEN_CMD,2,0x00,0x53,
GEN_CMD,2,0x01,0x55,
GEN_CMD,2,0x02,0x55,
GEN_CMD,2,0x03,0x51,
GEN_CMD,2,0x04,0x77,
GEN_CMD,2,0x05,0x57,
GEN_CMD,2,0x06,0x1F,
GEN_CMD,2,0x07,0x4F,
GEN_CMD,2,0x08,0x4D,
GEN_CMD,2,0x09,0x1F,
GEN_CMD,2,0x0A,0x4B,
GEN_CMD,2,0x0B,0x49,
GEN_CMD,2,0x0C,0x1F,
GEN_CMD,2,0x0D,0x47,
GEN_CMD,2,0x0E,0x45,
GEN_CMD,2,0x0F,0x41,
GEN_CMD,2,0x10,0x1F,
GEN_CMD,2,0x11,0x1F,
GEN_CMD,2,0x12,0x1F,
GEN_CMD,2,0x13,0x55,
GEN_CMD,2,0x14,0x1F,
GEN_CMD,2,0x15,0x1F,
GEN_CMD,2,0x16,0x52,
GEN_CMD,2,0x17,0x55,
GEN_CMD,2,0x18,0x55,
GEN_CMD,2,0x19,0x50,
GEN_CMD,2,0x1A,0x77,
GEN_CMD,2,0x1B,0x57,
GEN_CMD,2,0x1C,0x1F,
GEN_CMD,2,0x1D,0x4E,
GEN_CMD,2,0x1E,0x4C,
GEN_CMD,2,0x1F,0x1F,
GEN_CMD,2,0x20,0x4A,
GEN_CMD,2,0x21,0x48,
GEN_CMD,2,0x22,0x1F,
GEN_CMD,2,0x23,0x46,
GEN_CMD,2,0x24,0x44,
GEN_CMD,2,0x25,0x40,
GEN_CMD,2,0x26,0x1F,
GEN_CMD,2,0x27,0x1F,
GEN_CMD,2,0x28,0x1F,
GEN_CMD,2,0x29,0x1F,
GEN_CMD,2,0x2A,0x1F,
GEN_CMD,2,0x2B,0x55,
GEN_CMD,2,0x2C,0x12,
GEN_CMD,2,0x2D,0x15,
GEN_CMD,2,0x2E,0x15,
GEN_CMD,2,0x2F,0x00,
GEN_CMD,2,0x30,0x37,
GEN_CMD,2,0x31,0x17,
GEN_CMD,2,0x32,0x1F,
GEN_CMD,2,0x33,0x08,
GEN_CMD,2,0x34,0x0A,
GEN_CMD,2,0x35,0x1F,
GEN_CMD,2,0x36,0x0C,
GEN_CMD,2,0x37,0x0E,
GEN_CMD,2,0x38,0x1F,
GEN_CMD,2,0x39,0x04,
GEN_CMD,2,0x3A,0x06,
GEN_CMD,2,0x3B,0x10,
GEN_CMD,2,0x3C,0x1F,
GEN_CMD,2,0x3D,0x1F,
GEN_CMD,2,0x3E,0x1F,
GEN_CMD,2,0x3F,0x15,
GEN_CMD,2,0x40,0x1F,
GEN_CMD,2,0x41,0x1F,
GEN_CMD,2,0x42,0x13,
GEN_CMD,2,0x43,0x15,
GEN_CMD,2,0x44,0x15,
GEN_CMD,2,0x45,0x01,
GEN_CMD,2,0x46,0x37,
GEN_CMD,2,0x47,0x17,
GEN_CMD,2,0x48,0x1F,
GEN_CMD,2,0x49,0x09,
GEN_CMD,2,0x4A,0x0B,
GEN_CMD,2,0x4B,0x1F,
GEN_CMD,2,0x4C,0x0D,
GEN_CMD,2,0x4D,0x0F,
GEN_CMD,2,0x4E,0x1F,
GEN_CMD,2,0x4F,0x05,
GEN_CMD,2,0x50,0x07,
GEN_CMD,2,0x51,0x11,
GEN_CMD,2,0x52,0x1F,
GEN_CMD,2,0x53,0x1F,
GEN_CMD,2,0x54,0x1F,
GEN_CMD,2,0x55,0x1F,
GEN_CMD,2,0x56,0x1F,
GEN_CMD,2,0x57,0x15,
GEN_CMD,2,0x58,0x40,
GEN_CMD,2,0x59,0x00,
GEN_CMD,2,0x5A,0x00,
GEN_CMD,2,0x5B,0x10,
GEN_CMD,2,0x5C,0x14,
GEN_CMD,2,0x5D,0x40,
GEN_CMD,2,0x5E,0x01,
GEN_CMD,2,0x5F,0x02,
GEN_CMD,2,0x60,0x40,
GEN_CMD,2,0x61,0x03,
GEN_CMD,2,0x62,0x04,
GEN_CMD,2,0x63,0x7A,
GEN_CMD,2,0x64,0x7A,
GEN_CMD,2,0x65,0x74,
GEN_CMD,2,0x66,0x16,
GEN_CMD,2,0x67,0xB4,
GEN_CMD,2,0x68,0x16,
GEN_CMD,2,0x69,0x7A,
GEN_CMD,2,0x6A,0x7A,
GEN_CMD,2,0x6B,0x0C,
GEN_CMD,2,0x6C,0x00,
GEN_CMD,2,0x6D,0x04,
GEN_CMD,2,0x6E,0x04,
GEN_CMD,2,0x6F,0x88,
GEN_CMD,2,0x70,0x00,
GEN_CMD,2,0x71,0x00,
GEN_CMD,2,0x72,0x06,
GEN_CMD,2,0x73,0x7B,
GEN_CMD,2,0x74,0x00,
GEN_CMD,2,0x75,0xBC,
GEN_CMD,2,0x76,0x00,
GEN_CMD,2,0x77,0x04,
GEN_CMD,2,0x78,0x2C,
GEN_CMD,2,0x79,0x00,
GEN_CMD,2,0x7A,0x00,
GEN_CMD,2,0x7B,0x00,
GEN_CMD,2,0x7C,0x00,
GEN_CMD,2,0x7D,0x03,
GEN_CMD,2,0x7E,0x7B,
GEN_CMD,2,0xE0,0x04,
GEN_CMD,2,0x09,0x11,
GEN_CMD,2,0x0E,0x48,
GEN_CMD,2,0x2B,0x2B,
GEN_CMD,2,0x2E,0x44,
GEN_CMD,2,0xE0,0x00,
GEN_CMD,2,0xE6,0x02,
GEN_CMD,2,0xE7,0x0C,
DCS_CMD,1,0x11,
DELAY_CMD,120,
DCS_CMD,1,0x29,
DCS_CMD,1,0x35,
DELAY_CMD,20,
};
constexpr uint8_t lcd_init_sequence_G101B158_FT[] = {
GEN_CMD,2,0xE0,0x00,
GEN_CMD,2,0xE1,0x93,
GEN_CMD,2,0xE2,0x65,
GEN_CMD,2,0xE3,0xF8,
GEN_CMD,2,0x80,0x03,
GEN_CMD,2,0xE0,0x01,
GEN_CMD,2,0x00,0x00,
GEN_CMD,2,0x01,0x5D,
GEN_CMD,2,0x03,0x00,
GEN_CMD,2,0x04,0x64,
GEN_CMD,2,0x17,0x00,
GEN_CMD,2,0x18,0xC7,
GEN_CMD,2,0x19,0x01,
GEN_CMD,2,0x1A,0x00,
GEN_CMD,2,0x1B,0xC7,
GEN_CMD,2,0x1C,0x01,
GEN_CMD,2,0x1F,0x70,
GEN_CMD,2,0x20,0x2D,
GEN_CMD,2,0x21,0x2D,
GEN_CMD,2,0x22,0x7E,
GEN_CMD,2,0x35,0x28,
GEN_CMD,2,0x37,0x19,
GEN_CMD,2,0x38,0x05,
GEN_CMD,2,0x39,0x00,
GEN_CMD,2,0x3A,0x01,
GEN_CMD,2,0x3C,0x7C,
GEN_CMD,2,0x3D,0xFF,
GEN_CMD,2,0x3E,0xFF,
GEN_CMD,2,0x3F,0x7F,
GEN_CMD,2,0x40,0x06,
GEN_CMD,2,0x41,0xA0,
GEN_CMD,2,0x43,0x14,
GEN_CMD,2,0x44,0x17,
GEN_CMD,2,0x45,0x2C,
GEN_CMD,2,0x55,0x0F,
GEN_CMD,2,0x57,0x68,
GEN_CMD,2,0x59,0x0A,
GEN_CMD,2,0x5A,0x2E,
GEN_CMD,2,0x5B,0x1A,
GEN_CMD,2,0x5C,0x15,
GEN_CMD,2,0x5D,0x7F,
GEN_CMD,2,0x5E,0x61,
GEN_CMD,2,0x5F,0x50,
GEN_CMD,2,0x60,0x43,
GEN_CMD,2,0x61,0x3E,
GEN_CMD,2,0x62,0x2E,
GEN_CMD,2,0x63,0x33,
GEN_CMD,2,0x64,0x1C,
GEN_CMD,2,0x65,0x34,
GEN_CMD,2,0x66,0x33,
GEN_CMD,2,0x67,0x32,
GEN_CMD,2,0x68,0x50,
GEN_CMD,2,0x69,0x3E,
GEN_CMD,2,0x6A,0x46,
GEN_CMD,2,0x6B,0x37,
GEN_CMD,2,0x6C,0x32,
GEN_CMD,2,0x6D,0x24,
GEN_CMD,2,0x6E,0x12,
GEN_CMD,2,0x6F,0x02,
GEN_CMD,2,0x70,0x7F,
GEN_CMD,2,0x71,0x61,
GEN_CMD,2,0x72,0x50,
GEN_CMD,2,0x73,0x43,
GEN_CMD,2,0x74,0x3E,
GEN_CMD,2,0x75,0x2E,
GEN_CMD,2,0x76,0x33,
GEN_CMD,2,0x77,0x1C,
GEN_CMD,2,0x78,0x34,
GEN_CMD,2,0x79,0x33,
GEN_CMD,2,0x7A,0x32,
GEN_CMD,2,0x7B,0x50,
GEN_CMD,2,0x7C,0x3E,
GEN_CMD,2,0x7D,0x46,
GEN_CMD,2,0x7E,0x37,
GEN_CMD,2,0x7F,0x32,
GEN_CMD,2,0x80,0x24,
GEN_CMD,2,0x81,0x12,
GEN_CMD,2,0x82,0x02,
GEN_CMD,2,0xE0,0x02,
GEN_CMD,2,0x00,0x52,
GEN_CMD,2,0x01,0x55,
GEN_CMD,2,0x02,0x55,
GEN_CMD,2,0x03,0x50,
GEN_CMD,2,0x04,0x77,
GEN_CMD,2,0x05,0x57,
GEN_CMD,2,0x06,0x55,
GEN_CMD,2,0x07,0x4E,
GEN_CMD,2,0x08,0x4C,
GEN_CMD,2,0x09,0x5F,
GEN_CMD,2,0x0A,0x4A,
GEN_CMD,2,0x0B,0x48,
GEN_CMD,2,0x0C,0x55,
GEN_CMD,2,0x0D,0x46,
GEN_CMD,2,0x0E,0x44,
GEN_CMD,2,0x0F,0x40,
GEN_CMD,2,0x10,0x55,
GEN_CMD,2,0x11,0x55,
GEN_CMD,2,0x12,0x55,
GEN_CMD,2,0x13,0x55,
GEN_CMD,2,0x14,0x55,
GEN_CMD,2,0x15,0x55,
GEN_CMD,2,0x16,0x53,
GEN_CMD,2,0x17,0x55,
GEN_CMD,2,0x18,0x55,
GEN_CMD,2,0x19,0x51,
GEN_CMD,2,0x1A,0x77,
GEN_CMD,2,0x1B,0x57,
GEN_CMD,2,0x1C,0x55,
GEN_CMD,2,0x1D,0x4F,
GEN_CMD,2,0x1E,0x4D,
GEN_CMD,2,0x1F,0x5F,
GEN_CMD,2,0x20,0x4B,
GEN_CMD,2,0x21,0x49,
GEN_CMD,2,0x22,0x55,
GEN_CMD,2,0x23,0x47,
GEN_CMD,2,0x24,0x45,
GEN_CMD,2,0x25,0x41,
GEN_CMD,2,0x26,0x55,
GEN_CMD,2,0x27,0x55,
GEN_CMD,2,0x28,0x55,
GEN_CMD,2,0x29,0x55,
GEN_CMD,2,0x2A,0x55,
GEN_CMD,2,0x2B,0x55,
GEN_CMD,2,0x2C,0x13,
GEN_CMD,2,0x2D,0x15,
GEN_CMD,2,0x2E,0x15,
GEN_CMD,2,0x2F,0x01,
GEN_CMD,2,0x30,0x37,
GEN_CMD,2,0x31,0x17,
GEN_CMD,2,0x32,0x15,
GEN_CMD,2,0x33,0x0D,
GEN_CMD,2,0x34,0x0F,
GEN_CMD,2,0x35,0x15,
GEN_CMD,2,0x36,0x05,
GEN_CMD,2,0x37,0x07,
GEN_CMD,2,0x38,0x15,
GEN_CMD,2,0x39,0x09,
GEN_CMD,2,0x3A,0x0B,
GEN_CMD,2,0x3B,0x11,
GEN_CMD,2,0x3C,0x15,
GEN_CMD,2,0x3D,0x15,
GEN_CMD,2,0x3E,0x15,
GEN_CMD,2,0x3F,0x15,
GEN_CMD,2,0x40,0x15,
GEN_CMD,2,0x41,0x15,
GEN_CMD,2,0x42,0x12,
GEN_CMD,2,0x43,0x15,
GEN_CMD,2,0x44,0x15,
GEN_CMD,2,0x45,0x00,
GEN_CMD,2,0x46,0x37,
GEN_CMD,2,0x47,0x17,
GEN_CMD,2,0x48,0x15,
GEN_CMD,2,0x49,0x0C,
GEN_CMD,2,0x4A,0x0E,
GEN_CMD,2,0x4B,0x15,
GEN_CMD,2,0x4C,0x04,
GEN_CMD,2,0x4D,0x06,
GEN_CMD,2,0x4E,0x15,
GEN_CMD,2,0x4F,0x08,
GEN_CMD,2,0x50,0x0A,
GEN_CMD,2,0x51,0x10,
GEN_CMD,2,0x52,0x15,
GEN_CMD,2,0x53,0x15,
GEN_CMD,2,0x54,0x15,
GEN_CMD,2,0x55,0x15,
GEN_CMD,2,0x56,0x15,
GEN_CMD,2,0x57,0x15,
GEN_CMD,2,0x58,0x40,
GEN_CMD,2,0x5B,0x10,
GEN_CMD,2,0x5C,0x12,
GEN_CMD,2,0x5D,0x40,
GEN_CMD,2,0x5E,0x00,
GEN_CMD,2,0x5F,0x00,
GEN_CMD,2,0x60,0x40,
GEN_CMD,2,0x61,0x03,
GEN_CMD,2,0x62,0x04,
GEN_CMD,2,0x63,0x6C,
GEN_CMD,2,0x64,0x6C,
GEN_CMD,2,0x65,0x75,
GEN_CMD,2,0x66,0x14,
GEN_CMD,2,0x67,0xB4,
GEN_CMD,2,0x68,0x14,
GEN_CMD,2,0x69,0x6C,
GEN_CMD,2,0x6A,0x6C,
GEN_CMD,2,0x6B,0x0C,
GEN_CMD,2,0x6D,0x04,
GEN_CMD,2,0x6E,0x00,
GEN_CMD,2,0x6F,0x88,
GEN_CMD,2,0x75,0xBB,
GEN_CMD,2,0x76,0x02,
GEN_CMD,2,0x77,0x00,
GEN_CMD,2,0x78,0x02,
GEN_CMD,2,0xE0,0x03,
GEN_CMD,2,0xAF,0x20,
GEN_CMD,2,0xE0,0x04,
GEN_CMD,2,0x09,0x11,
GEN_CMD,2,0x0E,0x48,
GEN_CMD,2,0x2B,0x2B,
GEN_CMD,2,0x2D,0x03,
GEN_CMD,2,0x2E,0x44,
GEN_CMD,2,0x41,0xFF,
GEN_CMD,2,0xE0,0x05,
GEN_CMD,2,0x12,0x72,
GEN_CMD,2,0xE0,0x00,
GEN_CMD,2,0xE6,0x02,
GEN_CMD,2,0xE7,0x0C,
GEN_CMD,2,0x53,0x2C,
DCS_CMD,1,0x11,
DELAY_CMD,120,
GEN_CMD,2,0xE0,0x03,
GEN_CMD,2,0x2B,0x01,
DELAY_CMD,10,
GEN_CMD,2,0x2C,0x01,
GEN_CMD,2,0x30,0x03,
GEN_CMD,2,0x31,0xDE,
GEN_CMD,2,0x32,0x03,
GEN_CMD,2,0x33,0xDA,
GEN_CMD,2,0x34,0x03,
GEN_CMD,2,0x35,0xD1,
GEN_CMD,2,0x36,0x03,
GEN_CMD,2,0x37,0xC9,
GEN_CMD,2,0x38,0x03,
GEN_CMD,2,0x39,0xC1,
GEN_CMD,2,0x3A,0x03,
GEN_CMD,2,0x3B,0xB3,
GEN_CMD,2,0x3C,0x03,
GEN_CMD,2,0x3D,0xA4,
GEN_CMD,2,0x3E,0x03,
GEN_CMD,2,0x3F,0x83,
GEN_CMD,2,0x40,0x03,
GEN_CMD,2,0x41,0x62,
GEN_CMD,2,0x42,0x03,
GEN_CMD,2,0x43,0x23,
GEN_CMD,2,0x44,0x02,
GEN_CMD,2,0x45,0xE4,
GEN_CMD,2,0x46,0x02,
GEN_CMD,2,0x47,0x67,
GEN_CMD,2,0x48,0x01,
GEN_CMD,2,0x49,0xEC,
GEN_CMD,2,0x4A,0x01,
GEN_CMD,2,0x4B,0xE8,
GEN_CMD,2,0x4C,0x01,
GEN_CMD,2,0x4D,0x6D,
GEN_CMD,2,0x4E,0x00,
GEN_CMD,2,0x4F,0xF2,
GEN_CMD,2,0x50,0x00,
GEN_CMD,2,0x51,0xB2,
GEN_CMD,2,0x52,0x00,
GEN_CMD,2,0x53,0x76,
GEN_CMD,2,0x54,0x00,
GEN_CMD,2,0x55,0x58,
GEN_CMD,2,0x56,0x00,
GEN_CMD,2,0x57,0x39,
GEN_CMD,2,0x58,0x00,
GEN_CMD,2,0x59,0x2A,
GEN_CMD,2,0x5A,0x00,
GEN_CMD,2,0x5B,0x1B,
GEN_CMD,2,0x5C,0x00,
GEN_CMD,2,0x5D,0x13,
GEN_CMD,2,0x5E,0x00,
GEN_CMD,2,0x5F,0x0B,
GEN_CMD,2,0x60,0x00,
GEN_CMD,2,0x61,0x04,
GEN_CMD,2,0x62,0x00,
GEN_CMD,2,0x63,0x00,
GEN_CMD,2,0x64,0x03,
GEN_CMD,2,0x65,0xE7,
GEN_CMD,2,0x66,0x03,
GEN_CMD,2,0x67,0xE4,
GEN_CMD,2,0x68,0x03,
GEN_CMD,2,0x69,0xDD,
GEN_CMD,2,0x6A,0x03,
GEN_CMD,2,0x6B,0xD5,
GEN_CMD,2,0x6C,0x03,
GEN_CMD,2,0x6D,0xCE,
GEN_CMD,2,0x6E,0x03,
GEN_CMD,2,0x6F,0xBF,
GEN_CMD,2,0x70,0x03,
GEN_CMD,2,0x71,0xB2,
GEN_CMD,2,0x72,0x03,
GEN_CMD,2,0x73,0x93,
GEN_CMD,2,0x74,0x03,
GEN_CMD,2,0x75,0x71,
GEN_CMD,2,0x76,0x03,
GEN_CMD,2,0x77,0x33,
GEN_CMD,2,0x78,0x02,
GEN_CMD,2,0x79,0xF4,
GEN_CMD,2,0x7A,0x02,
GEN_CMD,2,0x7B,0x75,
GEN_CMD,2,0x7C,0x01,
GEN_CMD,2,0x7D,0xF7,
GEN_CMD,2,0x7E,0x01,
GEN_CMD,2,0x7F,0xF3,
GEN_CMD,2,0x80,0x01,
GEN_CMD,2,0x81,0x75,
GEN_CMD,2,0x82,0x00,
GEN_CMD,2,0x83,0xF7,
GEN_CMD,2,0x84,0x00,
GEN_CMD,2,0x85,0xB6,
GEN_CMD,2,0x86,0x00,
GEN_CMD,2,0x87,0x7C,
GEN_CMD,2,0x88,0x00,
GEN_CMD,2,0x89,0x5E,
GEN_CMD,2,0x8A,0x00,
GEN_CMD,2,0x8B,0x3F,
GEN_CMD,2,0x8C,0x00,
GEN_CMD,2,0x8D,0x2E,
GEN_CMD,2,0x8E,0x00,
GEN_CMD,2,0x8F,0x1D,
GEN_CMD,2,0x90,0x00,
GEN_CMD,2,0x91,0x15,
GEN_CMD,2,0x92,0x00,
GEN_CMD,2,0x93,0x0C,
GEN_CMD,2,0x94,0x00,
GEN_CMD,2,0x95,0x04,
GEN_CMD,2,0x96,0x00,
GEN_CMD,2,0x97,0x00,
GEN_CMD,2,0xE0,0x00,
DCS_CMD,1,0x29,
DELAY_CMD,5,
};
constexpr uint8_t lcd_init_sequence_TV101WXM_FT[] = {
DELAY_CMD,100,
GEN_CMD,2,0xE0,0x00,
GEN_CMD,2,0xE1,0x93,
GEN_CMD,2,0xE2,0x65,
GEN_CMD,2,0xE3,0xF8,
GEN_CMD,2,0x80,0x03,
GEN_CMD,2,0xE0,0x01,
GEN_CMD,2,0x00,0x00,
GEN_CMD,2,0x01,0x55,
GEN_CMD,2,0x17,0x00,
GEN_CMD,2,0x18,0xAF,
GEN_CMD,2,0x19,0x01,
GEN_CMD,2,0x1A,0x00,
GEN_CMD,2,0x1B,0xAF,
GEN_CMD,2,0x1C,0x01,
GEN_CMD,2,0x1F,0x3E,
GEN_CMD,2,0x20,0x28,
GEN_CMD,2,0x21,0x28,
GEN_CMD,2,0x22,0x7E,
GEN_CMD,2,0x35,0x26,
GEN_CMD,2,0x37,0x09,
GEN_CMD,2,0x38,0x04,
GEN_CMD,2,0x39,0x00,
GEN_CMD,2,0x3A,0x01,
GEN_CMD,2,0x3C,0x78,
GEN_CMD,2,0x3D,0xFF,
GEN_CMD,2,0x3E,0xFF,
GEN_CMD,2,0x3F,0x7F,
GEN_CMD,2,0x40,0x06,
GEN_CMD,2,0x41,0xA0,
GEN_CMD,2,0x42,0x81,
GEN_CMD,2,0x43,0x08,
GEN_CMD,2,0x44,0x0B,
GEN_CMD,2,0x45,0x28,
GEN_CMD,2,0x55,0x0F,
GEN_CMD,2,0x57,0x69,
GEN_CMD,2,0x59,0x0A,
GEN_CMD,2,0x5A,0x28,
GEN_CMD,2,0x5B,0x14,
GEN_CMD,2,0x5D,0x7F,
GEN_CMD,2,0x5E,0x67,
GEN_CMD,2,0x5F,0x57,
GEN_CMD,2,0x60,0x4A,
GEN_CMD,2,0x61,0x44,
GEN_CMD,2,0x62,0x34,
GEN_CMD,2,0x63,0x37,
GEN_CMD,2,0x64,0x1F,
GEN_CMD,2,0x65,0x36,
GEN_CMD,2,0x66,0x33,
GEN_CMD,2,0x67,0x32,
GEN_CMD,2,0x68,0x4F,
GEN_CMD,2,0x69,0x3D,
GEN_CMD,2,0x6A,0x47,
GEN_CMD,2,0x6B,0x38,
GEN_CMD,2,0x6C,0x33,
GEN_CMD,2,0x6D,0x26,
GEN_CMD,2,0x6E,0x13,
GEN_CMD,2,0x6F,0x00,
GEN_CMD,2,0x70,0x7F,
GEN_CMD,2,0x71,0x67,
GEN_CMD,2,0x72,0x57,
GEN_CMD,2,0x73,0x4A,
GEN_CMD,2,0x74,0x44,
GEN_CMD,2,0x75,0x34,
GEN_CMD,2,0x76,0x37,
GEN_CMD,2,0x77,0x1F,
GEN_CMD,2,0x78,0x36,
GEN_CMD,2,0x79,0x33,
GEN_CMD,2,0x7A,0x32,
GEN_CMD,2,0x7B,0x4F,
GEN_CMD,2,0x7C,0x3D,
GEN_CMD,2,0x7D,0x47,
GEN_CMD,2,0x7E,0x38,
GEN_CMD,2,0x7F,0x33,
GEN_CMD,2,0x80,0x26,
GEN_CMD,2,0x81,0x13,
GEN_CMD,2,0x82,0x00,
GEN_CMD,2,0xE0,0x02,
GEN_CMD,2,0x00,0x1E,
GEN_CMD,2,0x01,0x1E,
GEN_CMD,2,0x02,0x41,
GEN_CMD,2,0x03,0x41,
GEN_CMD,2,0x04,0x43,
GEN_CMD,2,0x05,0x43,
GEN_CMD,2,0x06,0x1F,
GEN_CMD,2,0x07,0x1F,
GEN_CMD,2,0x08,0x35,
GEN_CMD,2,0x09,0x1F,
GEN_CMD,2,0x0A,0x15,
GEN_CMD,2,0x0B,0x15,
GEN_CMD,2,0x0C,0x1F,
GEN_CMD,2,0x0D,0x47,
GEN_CMD,2,0x0E,0x47,
GEN_CMD,2,0x0F,0x45,
GEN_CMD,2,0x10,0x45,
GEN_CMD,2,0x11,0x4B,
GEN_CMD,2,0x12,0x4B,
GEN_CMD,2,0x13,0x49,
GEN_CMD,2,0x14,0x49,
GEN_CMD,2,0x15,0x1F,
GEN_CMD,2,0x16,0x1E,
GEN_CMD,2,0x17,0x1E,
GEN_CMD,2,0x18,0x40,
GEN_CMD,2,0x19,0x40,
GEN_CMD,2,0x1A,0x42,
GEN_CMD,2,0x1B,0x42,
GEN_CMD,2,0x1C,0x1F,
GEN_CMD,2,0x1D,0x1F,
GEN_CMD,2,0x1E,0x35,
GEN_CMD,2,0x1F,0x1F,
GEN_CMD,2,0x20,0x15,
GEN_CMD,2,0x21,0x15,
GEN_CMD,2,0x22,0x1F,
GEN_CMD,2,0x23,0x46,
GEN_CMD,2,0x24,0x46,
GEN_CMD,2,0x25,0x44,
GEN_CMD,2,0x26,0x44,
GEN_CMD,2,0x27,0x4A,
GEN_CMD,2,0x28,0x4A,
GEN_CMD,2,0x29,0x48,
GEN_CMD,2,0x2A,0x48,
GEN_CMD,2,0x2B,0x1F,
GEN_CMD,2,0x58,0x40,
GEN_CMD,2,0x5B,0x30,
GEN_CMD,2,0x5C,0x0F,
GEN_CMD,2,0x5D,0x30,
GEN_CMD,2,0x5E,0x01,
GEN_CMD,2,0x5F,0x02,
GEN_CMD,2,0x63,0x14,
GEN_CMD,2,0x64,0x6A,
GEN_CMD,2,0x67,0x73,
GEN_CMD,2,0x68,0x11,
GEN_CMD,2,0x69,0x14,
GEN_CMD,2,0x6A,0x6A,
GEN_CMD,2,0x6B,0x08,
GEN_CMD,2,0x6C,0x00,
GEN_CMD,2,0x6D,0x00,
GEN_CMD,2,0x6E,0x00,
GEN_CMD,2,0x6F,0x88,
GEN_CMD,2,0x77,0xDD,
GEN_CMD,2,0x79,0x0E,
GEN_CMD,2,0x7A,0x0F,
GEN_CMD,2,0x7D,0x14,
GEN_CMD,2,0x7E,0x82,
GEN_CMD,2,0xE0,0x04,
GEN_CMD,2,0x09,0x11,
GEN_CMD,2,0x0E,0x48,
GEN_CMD,2,0x2B,0x2B,
GEN_CMD,2,0x2D,0x03,
GEN_CMD,2,0x2E,0x44,
GEN_CMD,2,0xE0,0x00,
GEN_CMD,2,0xE6,0x02,
GEN_CMD,2,0xE7,0x0C,
DCS_CMD,1,0x11,
DELAY_CMD,120,
GEN_CMD,2,0xE0,0x03,
GEN_CMD,2,0x2B,0x01,
GEN_CMD,2,0x2C,0x00,
GEN_CMD,2,0x30,0x03,
GEN_CMD,2,0x31,0xBC,
GEN_CMD,2,0x32,0x03,
GEN_CMD,2,0x33,0xBA,
GEN_CMD,2,0x34,0x03,
GEN_CMD,2,0x35,0xB4,
GEN_CMD,2,0x36,0x03,
GEN_CMD,2,0x37,0xAE,
GEN_CMD,2,0x38,0x03,
GEN_CMD,2,0x39,0xA6,
GEN_CMD,2,0x3A,0x03,
GEN_CMD,2,0x3B,0x97,
GEN_CMD,2,0x3C,0x03,
GEN_CMD,2,0x3D,0x88,
GEN_CMD,2,0x3E,0x03,
GEN_CMD,2,0x3F,0x68,
GEN_CMD,2,0x40,0x03,
GEN_CMD,2,0x41,0x4C,
GEN_CMD,2,0x42,0x03,
GEN_CMD,2,0x43,0x0F,
GEN_CMD,2,0x44,0x02,
GEN_CMD,2,0x45,0xD2,
GEN_CMD,2,0x46,0x02,
GEN_CMD,2,0x47,0x58,
GEN_CMD,2,0x48,0x01,
GEN_CMD,2,0x49,0xE3,
GEN_CMD,2,0x4A,0x01,
GEN_CMD,2,0x4B,0xDF,
GEN_CMD,2,0x4C,0x01,
GEN_CMD,2,0x4D,0x68,
GEN_CMD,2,0x4E,0x00,
GEN_CMD,2,0x4F,0xEF,
GEN_CMD,2,0x50,0x00,
GEN_CMD,2,0x51,0xB1,
GEN_CMD,2,0x52,0x00,
GEN_CMD,2,0x53,0x70,
GEN_CMD,2,0x54,0x00,
GEN_CMD,2,0x55,0x53,
GEN_CMD,2,0x56,0x00,
GEN_CMD,2,0x57,0x34,
GEN_CMD,2,0x58,0x00,
GEN_CMD,2,0x59,0x26,
GEN_CMD,2,0x5A,0x00,
GEN_CMD,2,0x5B,0x18,
GEN_CMD,2,0x5C,0x00,
GEN_CMD,2,0x5D,0x11,
GEN_CMD,2,0x5E,0x00,
GEN_CMD,2,0x5F,0x0A,
GEN_CMD,2,0x60,0x00,
GEN_CMD,2,0x61,0x03,
GEN_CMD,2,0x62,0x00,
GEN_CMD,2,0x63,0x00,
GEN_CMD,2,0x64,0x03,
GEN_CMD,2,0x65,0xCC,
GEN_CMD,2,0x66,0x03,
GEN_CMD,2,0x67,0xCA,
GEN_CMD,2,0x68,0x03,
GEN_CMD,2,0x69,0xC3,
GEN_CMD,2,0x6A,0x03,
GEN_CMD,2,0x6B,0xBD,
GEN_CMD,2,0x6C,0x03,
GEN_CMD,2,0x6D,0xB7,
GEN_CMD,2,0x6E,0x03,
GEN_CMD,2,0x6F,0xAB,
GEN_CMD,2,0x70,0x03,
GEN_CMD,2,0x71,0x9D,
GEN_CMD,2,0x72,0x03,
GEN_CMD,2,0x73,0x7F,
GEN_CMD,2,0x74,0x03,
GEN_CMD,2,0x75,0x62,
GEN_CMD,2,0x76,0x03,
GEN_CMD,2,0x77,0x26,
GEN_CMD,2,0x78,0x02,
GEN_CMD,2,0x79,0xEA,
GEN_CMD,2,0x7A,0x02,
GEN_CMD,2,0x7B,0x6F,
GEN_CMD,2,0x7C,0x01,
GEN_CMD,2,0x7D,0xF3,
GEN_CMD,2,0x7E,0x01,
GEN_CMD,2,0x7F,0xEF,
GEN_CMD,2,0x80,0x01,
GEN_CMD,2,0x81,0x73,
GEN_CMD,2,0x82,0x00,
GEN_CMD,2,0x83,0xF6,
GEN_CMD,2,0x84,0x00,
GEN_CMD,2,0x85,0xB5,
GEN_CMD,2,0x86,0x00,
GEN_CMD,2,0x87,0x77,
GEN_CMD,2,0x88,0x00,
GEN_CMD,2,0x89,0x5A,
GEN_CMD,2,0x8A,0x00,
GEN_CMD,2,0x8B,0x3A,
GEN_CMD,2,0x8C,0x00,
GEN_CMD,2,0x8D,0x2A,
GEN_CMD,2,0x8E,0x00,
GEN_CMD,2,0x8F,0x1B,
GEN_CMD,2,0x90,0x00,
GEN_CMD,2,0x91,0x13,
GEN_CMD,2,0x92,0x00,
GEN_CMD,2,0x93,0x0C,
GEN_CMD,2,0x94,0x00,
GEN_CMD,2,0x95,0x04,
GEN_CMD,2,0x96,0x00,
GEN_CMD,2,0x97,0x00,
GEN_CMD,2,0xE0,0x00,
DCS_CMD,1,0x29,
DELAY_CMD,0xFF,
};
} //namespace
zx_status_t Lcd::GetDisplayId() {
uint8_t txcmd = READ_DISPLAY_ID_CMD;
uint8_t rsp[READ_DISPLAY_ID_LEN];
zx_status_t status = ZX_OK;
// Create the command using mipi-dsi library
mipi_dsi_cmd_t cmd;
status = mipi_dsi::MipiDsi::CreateCommand(&txcmd, 1,
rsp, READ_DISPLAY_ID_LEN,
COMMAND_GEN, &cmd);
if (status == ZX_OK) {
if ((status = dsiimpl_.SendCmd(&cmd, 1)) != ZX_OK) {
DISP_ERROR("Could not read out Display ID\n");
return status;
}
DISP_INFO("Display ID: 0x%x, 0x%x, 0x%x\n", rsp[0], rsp[1], rsp[2]);
} else {
DISP_ERROR("Invalid command (%d)\n", status);
}
return status;
}
// This function write DSI commands based on the input buffer.
zx_status_t Lcd::LoadInitTable(const uint8_t* buffer, size_t size) {
zx_status_t status = ZX_OK;
size_t i;
i = 0;
bool isDCS = false;
while (i < size) {
switch (buffer[i]) {
case DELAY_CMD:
zx_nanosleep(zx_deadline_after(ZX_MSEC(buffer[i + 1])));
i += 2;
break;
case DCS_CMD:
isDCS = true;
__FALLTHROUGH;
case GEN_CMD:
default:
// Create the command using mipi-dsi library
mipi_dsi_cmd_t cmd;
status = mipi_dsi::MipiDsi::CreateCommand(&buffer[i+2], buffer[i+1],
NULL, 0,
isDCS, &cmd);
if (status == ZX_OK) {
if ((status = dsiimpl_.SendCmd(&cmd, 1)) != ZX_OK) {
DISP_ERROR("Error loading LCD init table. Aborting %d\n", status);
return status;
}
} else {
DISP_ERROR("Invalid command (%d). Skipping\n", status);
}
// increment by payload length
i += buffer[i + 1] + 2; // the 2 includes current plus size field
isDCS = false;
break;
}
}
return status;
}
zx_status_t Lcd::Disable() {
ZX_DEBUG_ASSERT(initialized_);
if (!enabled_) {
return ZX_OK;
}
// First send shutdown command to LCD
enabled_ = false;
return LoadInitTable(lcd_shutdown_sequence, sizeof(lcd_shutdown_sequence));
}
zx_status_t Lcd::Enable() {
ZX_DEBUG_ASSERT(initialized_);
if (enabled_) {
return ZX_OK;
}
// reset LCD panel via GPIO according to vendor doc
gpio_config_out(&gpio_, 1);
gpio_write(&gpio_, 1);
zx_nanosleep(zx_deadline_after(ZX_MSEC(30)));
gpio_write(&gpio_, 0);
zx_nanosleep(zx_deadline_after(ZX_MSEC(10)));
gpio_write(&gpio_, 1);
zx_nanosleep(zx_deadline_after(ZX_MSEC(30)));
// check status
if (GetDisplayId() != ZX_OK) {
DISP_ERROR("Cannot communicate with LCD Panel!\n");
return ZX_ERR_TIMED_OUT;
}
zx_nanosleep(zx_deadline_after(ZX_USEC(10)));
// load table
zx_status_t status;
if (panel_type_ == PANEL_TV070WSM_FT) {
status = LoadInitTable(lcd_init_sequence_TV070WSM_FT,
sizeof(lcd_init_sequence_TV070WSM_FT));
} else if (panel_type_ == PANEL_P070ACB_FT) {
status = LoadInitTable(lcd_init_sequence_P070ACB_FT,
sizeof(lcd_init_sequence_P070ACB_FT));
} else if (panel_type_ == PANEL_TV101WXM_FT) {
status = LoadInitTable(lcd_init_sequence_TV101WXM_FT,
sizeof(lcd_init_sequence_TV101WXM_FT));
} else if (panel_type_ == PANEL_G101B158_FT) {
status = LoadInitTable(lcd_init_sequence_G101B158_FT,
sizeof(lcd_init_sequence_G101B158_FT));
} else {
DISP_ERROR("Unsupported panel detected!\n");
status = ZX_ERR_NOT_SUPPORTED;
}
if (status == ZX_OK) {
// LCD is on now.
enabled_ = true;
}
return status;
}
zx_status_t Lcd::Init(zx_device_t* parent) {
if (initialized_) {
return ZX_OK;
}
pdev_protocol_t pdev;
zx_status_t status = device_get_protocol(parent, ZX_PROTOCOL_PDEV, &pdev);
if (status != ZX_OK) {
DISP_ERROR("Could not obtain platform device protocol\n");
return status;
}
dsiimpl_ = parent;
// Obtain GPIO protocol
size_t actual;
status = pdev_get_protocol(&pdev, ZX_PROTOCOL_GPIO, GPIO_LCD, &gpio_, sizeof(gpio_), &actual);
if (status != ZX_OK) {
DISP_ERROR("Could not obtain GPIO protocol\n");
return status;
}
initialized_ = true;
if (kBootloaderDisplayEnabled) {
DISP_INFO("LCD Enabled by Bootloader. Disabling before proceeding\n");
enabled_ = true;
Disable();
}
return ZX_OK;
}
} // namespace astro_display