2024-04-15 03:16:17

by Jacobe Zang

[permalink] [raw]
Subject: [PATCH v2 0/2] drm/panel: add Khadas TS050 V2 panel support

Changes from v1 at [1]:
- Fix name from "newts050" to "ts050v2"
- Add specific description about controller change

[1]https://patchwork.kernel.org/project/linux-amlogic/list/?series=842707

Jacobe Zang (2):
dt-bindings: panel-simple-dsi: add Khadas TS050 V2 panel bindings
drm/panel: add Khadas TS050 V2 panel support

.../display/panel/panel-simple-dsi.yaml | 2 +
drivers/gpu/drm/panel/panel-khadas-ts050.c | 1112 +++++++++--------
2 files changed, 592 insertions(+), 522 deletions(-)

--
2.34.1



2024-04-15 03:17:32

by Jacobe Zang

[permalink] [raw]
Subject: [PATCH v2 1/2] dt-bindings: panel-simple-dsi: add Khadas TS050 V2 panel bindings

This add the bindings for the Khadas TS050 V2 1080x1920 5" LCD DSI panel
designed to work with the Khadas VIM3 and VIM3L Single Board Computers.

Signed-off-by: Jacobe Zang <[email protected]>
---
.../devicetree/bindings/display/panel/panel-simple-dsi.yaml | 2 ++
1 file changed, 2 insertions(+)

diff --git a/Documentation/devicetree/bindings/display/panel/panel-simple-dsi.yaml b/Documentation/devicetree/bindings/display/panel/panel-simple-dsi.yaml
index f9160d7bac3ca..ad0a733ee1331 100644
--- a/Documentation/devicetree/bindings/display/panel/panel-simple-dsi.yaml
+++ b/Documentation/devicetree/bindings/display/panel/panel-simple-dsi.yaml
@@ -36,6 +36,8 @@ properties:
- jdi,fhd-r63452
# Khadas TS050 5" 1080x1920 LCD panel
- khadas,ts050
+ # Khadas TS050 V2 5" 1080x1920 LCD panel
+ - khadas,ts050v2
# Kingdisplay KD097D04 9.7" 1536x2048 TFT LCD panel
- kingdisplay,kd097d04
# LG ACX467AKM-7 4.95" 1080×1920 LCD Panel
--
2.34.1


2024-04-15 03:27:44

by Jacobe Zang

[permalink] [raw]
Subject: [PATCH v2 2/2] drm/panel: add Khadas TS050 V2 panel support

This add Khadas TS050 V2 Panel and make it compatible with old one.
Controller of V2 panel is "Himax HX8399-C" and the old panel is "NT35596".
In driver file, the only different between them is the timing squence.

Signed-off-by: Jacobe Zang <[email protected]>
---
drivers/gpu/drm/panel/panel-khadas-ts050.c | 1112 +++++++++++---------
1 file changed, 590 insertions(+), 522 deletions(-)

diff --git a/drivers/gpu/drm/panel/panel-khadas-ts050.c b/drivers/gpu/drm/panel/panel-khadas-ts050.c
index b942a01622743..c54be0cc3f084 100644
--- a/drivers/gpu/drm/panel/panel-khadas-ts050.c
+++ b/drivers/gpu/drm/panel/panel-khadas-ts050.c
@@ -25,6 +25,7 @@ struct khadas_ts050_panel {
struct regulator *supply;
struct gpio_desc *reset_gpio;
struct gpio_desc *enable_gpio;
+ struct khadas_ts050_panel_data *panel_data;

bool prepared;
bool enabled;
@@ -32,544 +33,601 @@ struct khadas_ts050_panel {

struct khadas_ts050_panel_cmd {
u8 cmd;
- u8 data;
+ u8 data[55];
+ u8 size;
+};
+
+struct khadas_ts050_panel_data {
+ struct khadas_ts050_panel_cmd *init_code;
+ int len;
+};
+
+static const struct khadas_ts050_panel_cmd ts050v2_init_code[] = {
+ {0xB9, {0xFF, 0x83, 0x99}, 0x03},
+ {0xBA, {0x63, 0x23, 0x68, 0xCF}, 0x04},
+ {0xD2, {0x55}, 0x01},
+ {0xB1, {0x02, 0x04, 0x70, 0x90, 0x01, 0x32, 0x33,
+ 0x11, 0x11, 0x4D, 0x57, 0x56, 0x73, 0x02, 0x02}, 0x0f},
+ {0xB2, {0x00, 0x80, 0x80, 0xAE, 0x0A, 0x0E, 0x75, 0x11, 0x00, 0x00, 0x00}, 0x0b},
+ {0xB4, {0x00, 0xFF, 0x04, 0xA4, 0x02, 0xA0, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02,
+ 0x00, 0x24, 0x02, 0x04, 0x0A, 0x21, 0x03, 0x00, 0x00, 0x08, 0xA6, 0x88,
+ 0x04, 0xA4, 0x02, 0xA0, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x00, 0x24,
+ 0x02, 0x04, 0x0A, 0x00, 0x00, 0x08, 0xA6, 0x00, 0x08, 0x11}, 0x2e},
+ {0xD3, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
+ 0x18, 0x32, 0x10, 0x09, 0x00, 0x09, 0x32,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x00, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x0A,
+ 0x40}, 0x21},
+ {0xD5, {0x18, 0x18, 0x18, 0x18, 0x21, 0x20, 0x18, 0x18, 0x19, 0x19, 0x19,
+ 0x19, 0x18, 0x18, 0x18, 0x18, 0x03, 0x02, 0x01, 0x00, 0x2F, 0x2F,
+ 0x30, 0x30, 0x31, 0x31, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, 0x20},
+ {0xD6, {0x18, 0x18, 0x18, 0x18, 0x20, 0x21, 0x19, 0x19, 0x18, 0x18, 0x19,
+ 0x19, 0x18, 0x18, 0x18, 0x18, 0x00, 0x01, 0x02, 0x03, 0x2F, 0x2F,
+ 0x30, 0x30, 0x31, 0x31, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, 0x20},
+ {0xD8, {0x0A, 0xBE, 0xFA, 0xA0, 0x0A, 0xBE, 0xFA, 0xA0}, 0x08},
+ {0xBD, {0x01}, 0x01},
+ {0xD8, {0x0F, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xE0}, 0x08},
+ {0xBD, {0x02}, 0x01},
+ {0xD8, {0x0F, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xE0}, 0x08},
+ {0xBD, {0x00}, 0x01},
+ {0xE0, {0x01, 0x35, 0x41, 0x3B, 0x79, 0x81, 0x8C, 0x85, 0x8E,
+ 0x95, 0x9B, 0xA0, 0xA4, 0xAB, 0xB1, 0xB3, 0xB7, 0xC5, 0xBD, 0xC5,
+ 0xB6, 0xC2, 0xC2, 0x62, 0x5D, 0x66, 0x73, 0x01, 0x35, 0x41, 0x3B,
+ 0x79, 0x81, 0x8C, 0x85, 0x8E, 0x95, 0x9B, 0xA0, 0xA4, 0xAB, 0xB1,
+ 0xB3, 0xB7, 0xB5, 0xBD, 0xC5, 0xB6, 0xC2, 0xC2, 0x62, 0x5D, 0x66,
+ 0x73}, 0x36},
+ {0xB6, {0x97, 0x97}, 0x02},
+ {0xCC, {0xC8}, 0x02},
+ {0xBF, {0x40, 0x41, 0x50, 0x19}, 0x04},
+ {0xC6, {0xFF, 0xF9}, 0x02},
+ {0xC0, {0x25, 0x5A}, 0x02},
};

/* Only the CMD1 User Command set is documented */
-static const struct khadas_ts050_panel_cmd init_code[] = {
+static const struct khadas_ts050_panel_cmd ts050_init_code[] = {
/* Select Unknown CMD Page (Undocumented) */
- {0xff, 0xee},
+ {0xff, {0xee}, 0x01},
/* Reload CMD1: Don't reload default value to register */
- {0xfb, 0x01},
- {0x1f, 0x45},
- {0x24, 0x4f},
- {0x38, 0xc8},
- {0x39, 0x27},
- {0x1e, 0x77},
- {0x1d, 0x0f},
- {0x7e, 0x71},
- {0x7c, 0x03},
- {0xff, 0x00},
- {0xfb, 0x01},
- {0x35, 0x01},
+ {0xfb, {0x01}, 0x01},
+ {0x1f, {0x45}, 0x01},
+ {0x24, {0x4f}, 0x01},
+ {0x38, {0xc8}, 0x01},
+ {0x39, {0x27}, 0x01},
+ {0x1e, {0x77}, 0x01},
+ {0x1d, {0x0f}, 0x01},
+ {0x7e, {0x71}, 0x01},
+ {0x7c, {0x03}, 0x01},
+ {0xff, {0x00}, 0x01},
+ {0xfb, {0x01}, 0x01},
+ {0x35, {0x01}, 0x01},
/* Select CMD2 Page0 (Undocumented) */
- {0xff, 0x01},
+ {0xff, {0x01}, 0x01},
/* Reload CMD1: Don't reload default value to register */
- {0xfb, 0x01},
- {0x00, 0x01},
- {0x01, 0x55},
- {0x02, 0x40},
- {0x05, 0x40},
- {0x06, 0x4a},
- {0x07, 0x24},
- {0x08, 0x0c},
- {0x0b, 0x7d},
- {0x0c, 0x7d},
- {0x0e, 0xb0},
- {0x0f, 0xae},
- {0x11, 0x10},
- {0x12, 0x10},
- {0x13, 0x03},
- {0x14, 0x4a},
- {0x15, 0x12},
- {0x16, 0x12},
- {0x18, 0x00},
- {0x19, 0x77},
- {0x1a, 0x55},
- {0x1b, 0x13},
- {0x1c, 0x00},
- {0x1d, 0x00},
- {0x1e, 0x13},
- {0x1f, 0x00},
- {0x23, 0x00},
- {0x24, 0x00},
- {0x25, 0x00},
- {0x26, 0x00},
- {0x27, 0x00},
- {0x28, 0x00},
- {0x35, 0x00},
- {0x66, 0x00},
- {0x58, 0x82},
- {0x59, 0x02},
- {0x5a, 0x02},
- {0x5b, 0x02},
- {0x5c, 0x82},
- {0x5d, 0x82},
- {0x5e, 0x02},
- {0x5f, 0x02},
- {0x72, 0x31},
+ {0xfb, {0x01}, 0x01},
+ {0x00, {0x01}, 0x01},
+ {0x01, {0x55}, 0x01},
+ {0x02, {0x40}, 0x01},
+ {0x05, {0x40}, 0x01},
+ {0x06, {0x4a}, 0x01},
+ {0x07, {0x24}, 0x01},
+ {0x08, {0x0c}, 0x01},
+ {0x0b, {0x7d}, 0x01},
+ {0x0c, {0x7d}, 0x01},
+ {0x0e, {0xb0}, 0x01},
+ {0x0f, {0xae}, 0x01},
+ {0x11, {0x10}, 0x01},
+ {0x12, {0x10}, 0x01},
+ {0x13, {0x03}, 0x01},
+ {0x14, {0x4a}, 0x01},
+ {0x15, {0x12}, 0x01},
+ {0x16, {0x12}, 0x01},
+ {0x18, {0x00}, 0x01},
+ {0x19, {0x77}, 0x01},
+ {0x1a, {0x55}, 0x01},
+ {0x1b, {0x13}, 0x01},
+ {0x1c, {0x00}, 0x01},
+ {0x1d, {0x00}, 0x01},
+ {0x1e, {0x13}, 0x01},
+ {0x1f, {0x00}, 0x01},
+ {0x23, {0x00}, 0x01},
+ {0x24, {0x00}, 0x01},
+ {0x25, {0x00}, 0x01},
+ {0x26, {0x00}, 0x01},
+ {0x27, {0x00}, 0x01},
+ {0x28, {0x00}, 0x01},
+ {0x35, {0x00}, 0x01},
+ {0x66, {0x00}, 0x01},
+ {0x58, {0x82}, 0x01},
+ {0x59, {0x02}, 0x01},
+ {0x5a, {0x02}, 0x01},
+ {0x5b, {0x02}, 0x01},
+ {0x5c, {0x82}, 0x01},
+ {0x5d, {0x82}, 0x01},
+ {0x5e, {0x02}, 0x01},
+ {0x5f, {0x02}, 0x01},
+ {0x72, {0x31}, 0x01},
/* Select CMD2 Page4 (Undocumented) */
- {0xff, 0x05},
+ {0xff, {0x05}, 0x01},
/* Reload CMD1: Don't reload default value to register */
- {0xfb, 0x01},
- {0x00, 0x01},
- {0x01, 0x0b},
- {0x02, 0x0c},
- {0x03, 0x09},
- {0x04, 0x0a},
- {0x05, 0x00},
- {0x06, 0x0f},
- {0x07, 0x10},
- {0x08, 0x00},
- {0x09, 0x00},
- {0x0a, 0x00},
- {0x0b, 0x00},
- {0x0c, 0x00},
- {0x0d, 0x13},
- {0x0e, 0x15},
- {0x0f, 0x17},
- {0x10, 0x01},
- {0x11, 0x0b},
- {0x12, 0x0c},
- {0x13, 0x09},
- {0x14, 0x0a},
- {0x15, 0x00},
- {0x16, 0x0f},
- {0x17, 0x10},
- {0x18, 0x00},
- {0x19, 0x00},
- {0x1a, 0x00},
- {0x1b, 0x00},
- {0x1c, 0x00},
- {0x1d, 0x13},
- {0x1e, 0x15},
- {0x1f, 0x17},
- {0x20, 0x00},
- {0x21, 0x03},
- {0x22, 0x01},
- {0x23, 0x40},
- {0x24, 0x40},
- {0x25, 0xed},
- {0x29, 0x58},
- {0x2a, 0x12},
- {0x2b, 0x01},
- {0x4b, 0x06},
- {0x4c, 0x11},
- {0x4d, 0x20},
- {0x4e, 0x02},
- {0x4f, 0x02},
- {0x50, 0x20},
- {0x51, 0x61},
- {0x52, 0x01},
- {0x53, 0x63},
- {0x54, 0x77},
- {0x55, 0xed},
- {0x5b, 0x00},
- {0x5c, 0x00},
- {0x5d, 0x00},
- {0x5e, 0x00},
- {0x5f, 0x15},
- {0x60, 0x75},
- {0x61, 0x00},
- {0x62, 0x00},
- {0x63, 0x00},
- {0x64, 0x00},
- {0x65, 0x00},
- {0x66, 0x00},
- {0x67, 0x00},
- {0x68, 0x04},
- {0x69, 0x00},
- {0x6a, 0x00},
- {0x6c, 0x40},
- {0x75, 0x01},
- {0x76, 0x01},
- {0x7a, 0x80},
- {0x7b, 0xa3},
- {0x7c, 0xd8},
- {0x7d, 0x60},
- {0x7f, 0x15},
- {0x80, 0x81},
- {0x83, 0x05},
- {0x93, 0x08},
- {0x94, 0x10},
- {0x8a, 0x00},
- {0x9b, 0x0f},
- {0xea, 0xff},
- {0xec, 0x00},
+ {0xfb, {0x01}, 0x01},
+ {0x00, {0x01}, 0x01},
+ {0x01, {0x0b}, 0x01},
+ {0x02, {0x0c}, 0x01},
+ {0x03, {0x09}, 0x01},
+ {0x04, {0x0a}, 0x01},
+ {0x05, {0x00}, 0x01},
+ {0x06, {0x0f}, 0x01},
+ {0x07, {0x10}, 0x01},
+ {0x08, {0x00}, 0x01},
+ {0x09, {0x00}, 0x01},
+ {0x0a, {0x00}, 0x01},
+ {0x0b, {0x00}, 0x01},
+ {0x0c, {0x00}, 0x01},
+ {0x0d, {0x13}, 0x01},
+ {0x0e, {0x15}, 0x01},
+ {0x0f, {0x17}, 0x01},
+ {0x10, {0x01}, 0x01},
+ {0x11, {0x0b}, 0x01},
+ {0x12, {0x0c}, 0x01},
+ {0x13, {0x09}, 0x01},
+ {0x14, {0x0a}, 0x01},
+ {0x15, {0x00}, 0x01},
+ {0x16, {0x0f}, 0x01},
+ {0x17, {0x10}, 0x01},
+ {0x18, {0x00}, 0x01},
+ {0x19, {0x00}, 0x01},
+ {0x1a, {0x00}, 0x01},
+ {0x1b, {0x00}, 0x01},
+ {0x1c, {0x00}, 0x01},
+ {0x1d, {0x13}, 0x01},
+ {0x1e, {0x15}, 0x01},
+ {0x1f, {0x17}, 0x01},
+ {0x20, {0x00}, 0x01},
+ {0x21, {0x03}, 0x01},
+ {0x22, {0x01}, 0x01},
+ {0x23, {0x40}, 0x01},
+ {0x24, {0x40}, 0x01},
+ {0x25, {0xed}, 0x01},
+ {0x29, {0x58}, 0x01},
+ {0x2a, {0x12}, 0x01},
+ {0x2b, {0x01}, 0x01},
+ {0x4b, {0x06}, 0x01},
+ {0x4c, {0x11}, 0x01},
+ {0x4d, {0x20}, 0x01},
+ {0x4e, {0x02}, 0x01},
+ {0x4f, {0x02}, 0x01},
+ {0x50, {0x20}, 0x01},
+ {0x51, {0x61}, 0x01},
+ {0x52, {0x01}, 0x01},
+ {0x53, {0x63}, 0x01},
+ {0x54, {0x77}, 0x01},
+ {0x55, {0xed}, 0x01},
+ {0x5b, {0x00}, 0x01},
+ {0x5c, {0x00}, 0x01},
+ {0x5d, {0x00}, 0x01},
+ {0x5e, {0x00}, 0x01},
+ {0x5f, {0x15}, 0x01},
+ {0x60, {0x75}, 0x01},
+ {0x61, {0x00}, 0x01},
+ {0x62, {0x00}, 0x01},
+ {0x63, {0x00}, 0x01},
+ {0x64, {0x00}, 0x01},
+ {0x65, {0x00}, 0x01},
+ {0x66, {0x00}, 0x01},
+ {0x67, {0x00}, 0x01},
+ {0x68, {0x04}, 0x01},
+ {0x69, {0x00}, 0x01},
+ {0x6a, {0x00}, 0x01},
+ {0x6c, {0x40}, 0x01},
+ {0x75, {0x01}, 0x01},
+ {0x76, {0x01}, 0x01},
+ {0x7a, {0x80}, 0x01},
+ {0x7b, {0xa3}, 0x01},
+ {0x7c, {0xd8}, 0x01},
+ {0x7d, {0x60}, 0x01},
+ {0x7f, {0x15}, 0x01},
+ {0x80, {0x81}, 0x01},
+ {0x83, {0x05}, 0x01},
+ {0x93, {0x08}, 0x01},
+ {0x94, {0x10}, 0x01},
+ {0x8a, {0x00}, 0x01},
+ {0x9b, {0x0f}, 0x01},
+ {0xea, {0xff}, 0x01},
+ {0xec, {0x00}, 0x01},
/* Select CMD2 Page0 (Undocumented) */
- {0xff, 0x01},
+ {0xff, {0x01}, 0x01},
/* Reload CMD1: Don't reload default value to register */
- {0xfb, 0x01},
- {0x75, 0x00},
- {0x76, 0xdf},
- {0x77, 0x00},
- {0x78, 0xe4},
- {0x79, 0x00},
- {0x7a, 0xed},
- {0x7b, 0x00},
- {0x7c, 0xf6},
- {0x7d, 0x00},
- {0x7e, 0xff},
- {0x7f, 0x01},
- {0x80, 0x07},
- {0x81, 0x01},
- {0x82, 0x10},
- {0x83, 0x01},
- {0x84, 0x18},
- {0x85, 0x01},
- {0x86, 0x20},
- {0x87, 0x01},
- {0x88, 0x3d},
- {0x89, 0x01},
- {0x8a, 0x56},
- {0x8b, 0x01},
- {0x8c, 0x84},
- {0x8d, 0x01},
- {0x8e, 0xab},
- {0x8f, 0x01},
- {0x90, 0xec},
- {0x91, 0x02},
- {0x92, 0x22},
- {0x93, 0x02},
- {0x94, 0x23},
- {0x95, 0x02},
- {0x96, 0x55},
- {0x97, 0x02},
- {0x98, 0x8b},
- {0x99, 0x02},
- {0x9a, 0xaf},
- {0x9b, 0x02},
- {0x9c, 0xdf},
- {0x9d, 0x03},
- {0x9e, 0x01},
- {0x9f, 0x03},
- {0xa0, 0x2c},
- {0xa2, 0x03},
- {0xa3, 0x39},
- {0xa4, 0x03},
- {0xa5, 0x47},
- {0xa6, 0x03},
- {0xa7, 0x56},
- {0xa9, 0x03},
- {0xaa, 0x66},
- {0xab, 0x03},
- {0xac, 0x76},
- {0xad, 0x03},
- {0xae, 0x85},
- {0xaf, 0x03},
- {0xb0, 0x90},
- {0xb1, 0x03},
- {0xb2, 0xcb},
- {0xb3, 0x00},
- {0xb4, 0xdf},
- {0xb5, 0x00},
- {0xb6, 0xe4},
- {0xb7, 0x00},
- {0xb8, 0xed},
- {0xb9, 0x00},
- {0xba, 0xf6},
- {0xbb, 0x00},
- {0xbc, 0xff},
- {0xbd, 0x01},
- {0xbe, 0x07},
- {0xbf, 0x01},
- {0xc0, 0x10},
- {0xc1, 0x01},
- {0xc2, 0x18},
- {0xc3, 0x01},
- {0xc4, 0x20},
- {0xc5, 0x01},
- {0xc6, 0x3d},
- {0xc7, 0x01},
- {0xc8, 0x56},
- {0xc9, 0x01},
- {0xca, 0x84},
- {0xcb, 0x01},
- {0xcc, 0xab},
- {0xcd, 0x01},
- {0xce, 0xec},
- {0xcf, 0x02},
- {0xd0, 0x22},
- {0xd1, 0x02},
- {0xd2, 0x23},
- {0xd3, 0x02},
- {0xd4, 0x55},
- {0xd5, 0x02},
- {0xd6, 0x8b},
- {0xd7, 0x02},
- {0xd8, 0xaf},
- {0xd9, 0x02},
- {0xda, 0xdf},
- {0xdb, 0x03},
- {0xdc, 0x01},
- {0xdd, 0x03},
- {0xde, 0x2c},
- {0xdf, 0x03},
- {0xe0, 0x39},
- {0xe1, 0x03},
- {0xe2, 0x47},
- {0xe3, 0x03},
- {0xe4, 0x56},
- {0xe5, 0x03},
- {0xe6, 0x66},
- {0xe7, 0x03},
- {0xe8, 0x76},
- {0xe9, 0x03},
- {0xea, 0x85},
- {0xeb, 0x03},
- {0xec, 0x90},
- {0xed, 0x03},
- {0xee, 0xcb},
- {0xef, 0x00},
- {0xf0, 0xbb},
- {0xf1, 0x00},
- {0xf2, 0xc0},
- {0xf3, 0x00},
- {0xf4, 0xcc},
- {0xf5, 0x00},
- {0xf6, 0xd6},
- {0xf7, 0x00},
- {0xf8, 0xe1},
- {0xf9, 0x00},
- {0xfa, 0xea},
+ {0xfb, {0x01}, 0x01},
+ {0x75, {0x00}, 0x01},
+ {0x76, {0xdf}, 0x01},
+ {0x77, {0x00}, 0x01},
+ {0x78, {0xe4}, 0x01},
+ {0x79, {0x00}, 0x01},
+ {0x7a, {0xed}, 0x01},
+ {0x7b, {0x00}, 0x01},
+ {0x7c, {0xf6}, 0x01},
+ {0x7d, {0x00}, 0x01},
+ {0x7e, {0xff}, 0x01},
+ {0x7f, {0x01}, 0x01},
+ {0x80, {0x07}, 0x01},
+ {0x81, {0x01}, 0x01},
+ {0x82, {0x10}, 0x01},
+ {0x83, {0x01}, 0x01},
+ {0x84, {0x18}, 0x01},
+ {0x85, {0x01}, 0x01},
+ {0x86, {0x20}, 0x01},
+ {0x87, {0x01}, 0x01},
+ {0x88, {0x3d}, 0x01},
+ {0x89, {0x01}, 0x01},
+ {0x8a, {0x56}, 0x01},
+ {0x8b, {0x01}, 0x01},
+ {0x8c, {0x84}, 0x01},
+ {0x8d, {0x01}, 0x01},
+ {0x8e, {0xab}, 0x01},
+ {0x8f, {0x01}, 0x01},
+ {0x90, {0xec}, 0x01},
+ {0x91, {0x02}, 0x01},
+ {0x92, {0x22}, 0x01},
+ {0x93, {0x02}, 0x01},
+ {0x94, {0x23}, 0x01},
+ {0x95, {0x02}, 0x01},
+ {0x96, {0x55}, 0x01},
+ {0x97, {0x02}, 0x01},
+ {0x98, {0x8b}, 0x01},
+ {0x99, {0x02}, 0x01},
+ {0x9a, {0xaf}, 0x01},
+ {0x9b, {0x02}, 0x01},
+ {0x9c, {0xdf}, 0x01},
+ {0x9d, {0x03}, 0x01},
+ {0x9e, {0x01}, 0x01},
+ {0x9f, {0x03}, 0x01},
+ {0xa0, {0x2c}, 0x01},
+ {0xa2, {0x03}, 0x01},
+ {0xa3, {0x39}, 0x01},
+ {0xa4, {0x03}, 0x01},
+ {0xa5, {0x47}, 0x01},
+ {0xa6, {0x03}, 0x01},
+ {0xa7, {0x56}, 0x01},
+ {0xa9, {0x03}, 0x01},
+ {0xaa, {0x66}, 0x01},
+ {0xab, {0x03}, 0x01},
+ {0xac, {0x76}, 0x01},
+ {0xad, {0x03}, 0x01},
+ {0xae, {0x85}, 0x01},
+ {0xaf, {0x03}, 0x01},
+ {0xb0, {0x90}, 0x01},
+ {0xb1, {0x03}, 0x01},
+ {0xb2, {0xcb}, 0x01},
+ {0xb3, {0x00}, 0x01},
+ {0xb4, {0xdf}, 0x01},
+ {0xb5, {0x00}, 0x01},
+ {0xb6, {0xe4}, 0x01},
+ {0xb7, {0x00}, 0x01},
+ {0xb8, {0xed}, 0x01},
+ {0xb9, {0x00}, 0x01},
+ {0xba, {0xf6}, 0x01},
+ {0xbb, {0x00}, 0x01},
+ {0xbc, {0xff}, 0x01},
+ {0xbd, {0x01}, 0x01},
+ {0xbe, {0x07}, 0x01},
+ {0xbf, {0x01}, 0x01},
+ {0xc0, {0x10}, 0x01},
+ {0xc1, {0x01}, 0x01},
+ {0xc2, {0x18}, 0x01},
+ {0xc3, {0x01}, 0x01},
+ {0xc4, {0x20}, 0x01},
+ {0xc5, {0x01}, 0x01},
+ {0xc6, {0x3d}, 0x01},
+ {0xc7, {0x01}, 0x01},
+ {0xc8, {0x56}, 0x01},
+ {0xc9, {0x01}, 0x01},
+ {0xca, {0x84}, 0x01},
+ {0xcb, {0x01}, 0x01},
+ {0xcc, {0xab}, 0x01},
+ {0xcd, {0x01}, 0x01},
+ {0xce, {0xec}, 0x01},
+ {0xcf, {0x02}, 0x01},
+ {0xd0, {0x22}, 0x01},
+ {0xd1, {0x02}, 0x01},
+ {0xd2, {0x23}, 0x01},
+ {0xd3, {0x02}, 0x01},
+ {0xd4, {0x55}, 0x01},
+ {0xd5, {0x02}, 0x01},
+ {0xd6, {0x8b}, 0x01},
+ {0xd7, {0x02}, 0x01},
+ {0xd8, {0xaf}, 0x01},
+ {0xd9, {0x02}, 0x01},
+ {0xda, {0xdf}, 0x01},
+ {0xdb, {0x03}, 0x01},
+ {0xdc, {0x01}, 0x01},
+ {0xdd, {0x03}, 0x01},
+ {0xde, {0x2c}, 0x01},
+ {0xdf, {0x03}, 0x01},
+ {0xe0, {0x39}, 0x01},
+ {0xe1, {0x03}, 0x01},
+ {0xe2, {0x47}, 0x01},
+ {0xe3, {0x03}, 0x01},
+ {0xe4, {0x56}, 0x01},
+ {0xe5, {0x03}, 0x01},
+ {0xe6, {0x66}, 0x01},
+ {0xe7, {0x03}, 0x01},
+ {0xe8, {0x76}, 0x01},
+ {0xe9, {0x03}, 0x01},
+ {0xea, {0x85}, 0x01},
+ {0xeb, {0x03}, 0x01},
+ {0xec, {0x90}, 0x01},
+ {0xed, {0x03}, 0x01},
+ {0xee, {0xcb}, 0x01},
+ {0xef, {0x00}, 0x01},
+ {0xf0, {0xbb}, 0x01},
+ {0xf1, {0x00}, 0x01},
+ {0xf2, {0xc0}, 0x01},
+ {0xf3, {0x00}, 0x01},
+ {0xf4, {0xcc}, 0x01},
+ {0xf5, {0x00}, 0x01},
+ {0xf6, {0xd6}, 0x01},
+ {0xf7, {0x00}, 0x01},
+ {0xf8, {0xe1}, 0x01},
+ {0xf9, {0x00}, 0x01},
+ {0xfa, {0xea}, 0x01},
/* Select CMD2 Page2 (Undocumented) */
- {0xff, 0x02},
+ {0xff, {0x02}, 0x01},
/* Reload CMD1: Don't reload default value to register */
- {0xfb, 0x01},
- {0x00, 0x00},
- {0x01, 0xf4},
- {0x02, 0x00},
- {0x03, 0xef},
- {0x04, 0x01},
- {0x05, 0x07},
- {0x06, 0x01},
- {0x07, 0x28},
- {0x08, 0x01},
- {0x09, 0x44},
- {0x0a, 0x01},
- {0x0b, 0x76},
- {0x0c, 0x01},
- {0x0d, 0xa0},
- {0x0e, 0x01},
- {0x0f, 0xe7},
- {0x10, 0x02},
- {0x11, 0x1f},
- {0x12, 0x02},
- {0x13, 0x22},
- {0x14, 0x02},
- {0x15, 0x54},
- {0x16, 0x02},
- {0x17, 0x8b},
- {0x18, 0x02},
- {0x19, 0xaf},
- {0x1a, 0x02},
- {0x1b, 0xe0},
- {0x1c, 0x03},
- {0x1d, 0x01},
- {0x1e, 0x03},
- {0x1f, 0x2d},
- {0x20, 0x03},
- {0x21, 0x39},
- {0x22, 0x03},
- {0x23, 0x47},
- {0x24, 0x03},
- {0x25, 0x57},
- {0x26, 0x03},
- {0x27, 0x65},
- {0x28, 0x03},
- {0x29, 0x77},
- {0x2a, 0x03},
- {0x2b, 0x85},
- {0x2d, 0x03},
- {0x2f, 0x8f},
- {0x30, 0x03},
- {0x31, 0xcb},
- {0x32, 0x00},
- {0x33, 0xbb},
- {0x34, 0x00},
- {0x35, 0xc0},
- {0x36, 0x00},
- {0x37, 0xcc},
- {0x38, 0x00},
- {0x39, 0xd6},
- {0x3a, 0x00},
- {0x3b, 0xe1},
- {0x3d, 0x00},
- {0x3f, 0xea},
- {0x40, 0x00},
- {0x41, 0xf4},
- {0x42, 0x00},
- {0x43, 0xfe},
- {0x44, 0x01},
- {0x45, 0x07},
- {0x46, 0x01},
- {0x47, 0x28},
- {0x48, 0x01},
- {0x49, 0x44},
- {0x4a, 0x01},
- {0x4b, 0x76},
- {0x4c, 0x01},
- {0x4d, 0xa0},
- {0x4e, 0x01},
- {0x4f, 0xe7},
- {0x50, 0x02},
- {0x51, 0x1f},
- {0x52, 0x02},
- {0x53, 0x22},
- {0x54, 0x02},
- {0x55, 0x54},
- {0x56, 0x02},
- {0x58, 0x8b},
- {0x59, 0x02},
- {0x5a, 0xaf},
- {0x5b, 0x02},
- {0x5c, 0xe0},
- {0x5d, 0x03},
- {0x5e, 0x01},
- {0x5f, 0x03},
- {0x60, 0x2d},
- {0x61, 0x03},
- {0x62, 0x39},
- {0x63, 0x03},
- {0x64, 0x47},
- {0x65, 0x03},
- {0x66, 0x57},
- {0x67, 0x03},
- {0x68, 0x65},
- {0x69, 0x03},
- {0x6a, 0x77},
- {0x6b, 0x03},
- {0x6c, 0x85},
- {0x6d, 0x03},
- {0x6e, 0x8f},
- {0x6f, 0x03},
- {0x70, 0xcb},
- {0x71, 0x00},
- {0x72, 0x00},
- {0x73, 0x00},
- {0x74, 0x21},
- {0x75, 0x00},
- {0x76, 0x4c},
- {0x77, 0x00},
- {0x78, 0x6b},
- {0x79, 0x00},
- {0x7a, 0x85},
- {0x7b, 0x00},
- {0x7c, 0x9a},
- {0x7d, 0x00},
- {0x7e, 0xad},
- {0x7f, 0x00},
- {0x80, 0xbe},
- {0x81, 0x00},
- {0x82, 0xcd},
- {0x83, 0x01},
- {0x84, 0x01},
- {0x85, 0x01},
- {0x86, 0x29},
- {0x87, 0x01},
- {0x88, 0x68},
- {0x89, 0x01},
- {0x8a, 0x98},
- {0x8b, 0x01},
- {0x8c, 0xe5},
- {0x8d, 0x02},
- {0x8e, 0x1e},
- {0x8f, 0x02},
- {0x90, 0x30},
- {0x91, 0x02},
- {0x92, 0x52},
- {0x93, 0x02},
- {0x94, 0x88},
- {0x95, 0x02},
- {0x96, 0xaa},
- {0x97, 0x02},
- {0x98, 0xd7},
- {0x99, 0x02},
- {0x9a, 0xf7},
- {0x9b, 0x03},
- {0x9c, 0x21},
- {0x9d, 0x03},
- {0x9e, 0x2e},
- {0x9f, 0x03},
- {0xa0, 0x3d},
- {0xa2, 0x03},
- {0xa3, 0x4c},
- {0xa4, 0x03},
- {0xa5, 0x5e},
- {0xa6, 0x03},
- {0xa7, 0x71},
- {0xa9, 0x03},
- {0xaa, 0x86},
- {0xab, 0x03},
- {0xac, 0x94},
- {0xad, 0x03},
- {0xae, 0xfa},
- {0xaf, 0x00},
- {0xb0, 0x00},
- {0xb1, 0x00},
- {0xb2, 0x21},
- {0xb3, 0x00},
- {0xb4, 0x4c},
- {0xb5, 0x00},
- {0xb6, 0x6b},
- {0xb7, 0x00},
- {0xb8, 0x85},
- {0xb9, 0x00},
- {0xba, 0x9a},
- {0xbb, 0x00},
- {0xbc, 0xad},
- {0xbd, 0x00},
- {0xbe, 0xbe},
- {0xbf, 0x00},
- {0xc0, 0xcd},
- {0xc1, 0x01},
- {0xc2, 0x01},
- {0xc3, 0x01},
- {0xc4, 0x29},
- {0xc5, 0x01},
- {0xc6, 0x68},
- {0xc7, 0x01},
- {0xc8, 0x98},
- {0xc9, 0x01},
- {0xca, 0xe5},
- {0xcb, 0x02},
- {0xcc, 0x1e},
- {0xcd, 0x02},
- {0xce, 0x20},
- {0xcf, 0x02},
- {0xd0, 0x52},
- {0xd1, 0x02},
- {0xd2, 0x88},
- {0xd3, 0x02},
- {0xd4, 0xaa},
- {0xd5, 0x02},
- {0xd6, 0xd7},
- {0xd7, 0x02},
- {0xd8, 0xf7},
- {0xd9, 0x03},
- {0xda, 0x21},
- {0xdb, 0x03},
- {0xdc, 0x2e},
- {0xdd, 0x03},
- {0xde, 0x3d},
- {0xdf, 0x03},
- {0xe0, 0x4c},
- {0xe1, 0x03},
- {0xe2, 0x5e},
- {0xe3, 0x03},
- {0xe4, 0x71},
- {0xe5, 0x03},
- {0xe6, 0x86},
- {0xe7, 0x03},
- {0xe8, 0x94},
- {0xe9, 0x03},
- {0xea, 0xfa},
+ {0xfb, {0x01}, 0x01},
+ {0x00, {0x00}, 0x01},
+ {0x01, {0xf4}, 0x01},
+ {0x02, {0x00}, 0x01},
+ {0x03, {0xef}, 0x01},
+ {0x04, {0x01}, 0x01},
+ {0x05, {0x07}, 0x01},
+ {0x06, {0x01}, 0x01},
+ {0x07, {0x28}, 0x01},
+ {0x08, {0x01}, 0x01},
+ {0x09, {0x44}, 0x01},
+ {0x0a, {0x01}, 0x01},
+ {0x0b, {0x76}, 0x01},
+ {0x0c, {0x01}, 0x01},
+ {0x0d, {0xa0}, 0x01},
+ {0x0e, {0x01}, 0x01},
+ {0x0f, {0xe7}, 0x01},
+ {0x10, {0x02}, 0x01},
+ {0x11, {0x1f}, 0x01},
+ {0x12, {0x02}, 0x01},
+ {0x13, {0x22}, 0x01},
+ {0x14, {0x02}, 0x01},
+ {0x15, {0x54}, 0x01},
+ {0x16, {0x02}, 0x01},
+ {0x17, {0x8b}, 0x01},
+ {0x18, {0x02}, 0x01},
+ {0x19, {0xaf}, 0x01},
+ {0x1a, {0x02}, 0x01},
+ {0x1b, {0xe0}, 0x01},
+ {0x1c, {0x03}, 0x01},
+ {0x1d, {0x01}, 0x01},
+ {0x1e, {0x03}, 0x01},
+ {0x1f, {0x2d}, 0x01},
+ {0x20, {0x03}, 0x01},
+ {0x21, {0x39}, 0x01},
+ {0x22, {0x03}, 0x01},
+ {0x23, {0x47}, 0x01},
+ {0x24, {0x03}, 0x01},
+ {0x25, {0x57}, 0x01},
+ {0x26, {0x03}, 0x01},
+ {0x27, {0x65}, 0x01},
+ {0x28, {0x03}, 0x01},
+ {0x29, {0x77}, 0x01},
+ {0x2a, {0x03}, 0x01},
+ {0x2b, {0x85}, 0x01},
+ {0x2d, {0x03}, 0x01},
+ {0x2f, {0x8f}, 0x01},
+ {0x30, {0x03}, 0x01},
+ {0x31, {0xcb}, 0x01},
+ {0x32, {0x00}, 0x01},
+ {0x33, {0xbb}, 0x01},
+ {0x34, {0x00}, 0x01},
+ {0x35, {0xc0}, 0x01},
+ {0x36, {0x00}, 0x01},
+ {0x37, {0xcc}, 0x01},
+ {0x38, {0x00}, 0x01},
+ {0x39, {0xd6}, 0x01},
+ {0x3a, {0x00}, 0x01},
+ {0x3b, {0xe1}, 0x01},
+ {0x3d, {0x00}, 0x01},
+ {0x3f, {0xea}, 0x01},
+ {0x40, {0x00}, 0x01},
+ {0x41, {0xf4}, 0x01},
+ {0x42, {0x00}, 0x01},
+ {0x43, {0xfe}, 0x01},
+ {0x44, {0x01}, 0x01},
+ {0x45, {0x07}, 0x01},
+ {0x46, {0x01}, 0x01},
+ {0x47, {0x28}, 0x01},
+ {0x48, {0x01}, 0x01},
+ {0x49, {0x44}, 0x01},
+ {0x4a, {0x01}, 0x01},
+ {0x4b, {0x76}, 0x01},
+ {0x4c, {0x01}, 0x01},
+ {0x4d, {0xa0}, 0x01},
+ {0x4e, {0x01}, 0x01},
+ {0x4f, {0xe7}, 0x01},
+ {0x50, {0x02}, 0x01},
+ {0x51, {0x1f}, 0x01},
+ {0x52, {0x02}, 0x01},
+ {0x53, {0x22}, 0x01},
+ {0x54, {0x02}, 0x01},
+ {0x55, {0x54}, 0x01},
+ {0x56, {0x02}, 0x01},
+ {0x58, {0x8b}, 0x01},
+ {0x59, {0x02}, 0x01},
+ {0x5a, {0xaf}, 0x01},
+ {0x5b, {0x02}, 0x01},
+ {0x5c, {0xe0}, 0x01},
+ {0x5d, {0x03}, 0x01},
+ {0x5e, {0x01}, 0x01},
+ {0x5f, {0x03}, 0x01},
+ {0x60, {0x2d}, 0x01},
+ {0x61, {0x03}, 0x01},
+ {0x62, {0x39}, 0x01},
+ {0x63, {0x03}, 0x01},
+ {0x64, {0x47}, 0x01},
+ {0x65, {0x03}, 0x01},
+ {0x66, {0x57}, 0x01},
+ {0x67, {0x03}, 0x01},
+ {0x68, {0x65}, 0x01},
+ {0x69, {0x03}, 0x01},
+ {0x6a, {0x77}, 0x01},
+ {0x6b, {0x03}, 0x01},
+ {0x6c, {0x85}, 0x01},
+ {0x6d, {0x03}, 0x01},
+ {0x6e, {0x8f}, 0x01},
+ {0x6f, {0x03}, 0x01},
+ {0x70, {0xcb}, 0x01},
+ {0x71, {0x00}, 0x01},
+ {0x72, {0x00}, 0x01},
+ {0x73, {0x00}, 0x01},
+ {0x74, {0x21}, 0x01},
+ {0x75, {0x00}, 0x01},
+ {0x76, {0x4c}, 0x01},
+ {0x77, {0x00}, 0x01},
+ {0x78, {0x6b}, 0x01},
+ {0x79, {0x00}, 0x01},
+ {0x7a, {0x85}, 0x01},
+ {0x7b, {0x00}, 0x01},
+ {0x7c, {0x9a}, 0x01},
+ {0x7d, {0x00}, 0x01},
+ {0x7e, {0xad}, 0x01},
+ {0x7f, {0x00}, 0x01},
+ {0x80, {0xbe}, 0x01},
+ {0x81, {0x00}, 0x01},
+ {0x82, {0xcd}, 0x01},
+ {0x83, {0x01}, 0x01},
+ {0x84, {0x01}, 0x01},
+ {0x85, {0x01}, 0x01},
+ {0x86, {0x29}, 0x01},
+ {0x87, {0x01}, 0x01},
+ {0x88, {0x68}, 0x01},
+ {0x89, {0x01}, 0x01},
+ {0x8a, {0x98}, 0x01},
+ {0x8b, {0x01}, 0x01},
+ {0x8c, {0xe5}, 0x01},
+ {0x8d, {0x02}, 0x01},
+ {0x8e, {0x1e}, 0x01},
+ {0x8f, {0x02}, 0x01},
+ {0x90, {0x30}, 0x01},
+ {0x91, {0x02}, 0x01},
+ {0x92, {0x52}, 0x01},
+ {0x93, {0x02}, 0x01},
+ {0x94, {0x88}, 0x01},
+ {0x95, {0x02}, 0x01},
+ {0x96, {0xaa}, 0x01},
+ {0x97, {0x02}, 0x01},
+ {0x98, {0xd7}, 0x01},
+ {0x99, {0x02}, 0x01},
+ {0x9a, {0xf7}, 0x01},
+ {0x9b, {0x03}, 0x01},
+ {0x9c, {0x21}, 0x01},
+ {0x9d, {0x03}, 0x01},
+ {0x9e, {0x2e}, 0x01},
+ {0x9f, {0x03}, 0x01},
+ {0xa0, {0x3d}, 0x01},
+ {0xa2, {0x03}, 0x01},
+ {0xa3, {0x4c}, 0x01},
+ {0xa4, {0x03}, 0x01},
+ {0xa5, {0x5e}, 0x01},
+ {0xa6, {0x03}, 0x01},
+ {0xa7, {0x71}, 0x01},
+ {0xa9, {0x03}, 0x01},
+ {0xaa, {0x86}, 0x01},
+ {0xab, {0x03}, 0x01},
+ {0xac, {0x94}, 0x01},
+ {0xad, {0x03}, 0x01},
+ {0xae, {0xfa}, 0x01},
+ {0xaf, {0x00}, 0x01},
+ {0xb0, {0x00}, 0x01},
+ {0xb1, {0x00}, 0x01},
+ {0xb2, {0x21}, 0x01},
+ {0xb3, {0x00}, 0x01},
+ {0xb4, {0x4c}, 0x01},
+ {0xb5, {0x00}, 0x01},
+ {0xb6, {0x6b}, 0x01},
+ {0xb7, {0x00}, 0x01},
+ {0xb8, {0x85}, 0x01},
+ {0xb9, {0x00}, 0x01},
+ {0xba, {0x9a}, 0x01},
+ {0xbb, {0x00}, 0x01},
+ {0xbc, {0xad}, 0x01},
+ {0xbd, {0x00}, 0x01},
+ {0xbe, {0xbe}, 0x01},
+ {0xbf, {0x00}, 0x01},
+ {0xc0, {0xcd}, 0x01},
+ {0xc1, {0x01}, 0x01},
+ {0xc2, {0x01}, 0x01},
+ {0xc3, {0x01}, 0x01},
+ {0xc4, {0x29}, 0x01},
+ {0xc5, {0x01}, 0x01},
+ {0xc6, {0x68}, 0x01},
+ {0xc7, {0x01}, 0x01},
+ {0xc8, {0x98}, 0x01},
+ {0xc9, {0x01}, 0x01},
+ {0xca, {0xe5}, 0x01},
+ {0xcb, {0x02}, 0x01},
+ {0xcc, {0x1e}, 0x01},
+ {0xcd, {0x02}, 0x01},
+ {0xce, {0x20}, 0x01},
+ {0xcf, {0x02}, 0x01},
+ {0xd0, {0x52}, 0x01},
+ {0xd1, {0x02}, 0x01},
+ {0xd2, {0x88}, 0x01},
+ {0xd3, {0x02}, 0x01},
+ {0xd4, {0xaa}, 0x01},
+ {0xd5, {0x02}, 0x01},
+ {0xd6, {0xd7}, 0x01},
+ {0xd7, {0x02}, 0x01},
+ {0xd8, {0xf7}, 0x01},
+ {0xd9, {0x03}, 0x01},
+ {0xda, {0x21}, 0x01},
+ {0xdb, {0x03}, 0x01},
+ {0xdc, {0x2e}, 0x01},
+ {0xdd, {0x03}, 0x01},
+ {0xde, {0x3d}, 0x01},
+ {0xdf, {0x03}, 0x01},
+ {0xe0, {0x4c}, 0x01},
+ {0xe1, {0x03}, 0x01},
+ {0xe2, {0x5e}, 0x01},
+ {0xe3, {0x03}, 0x01},
+ {0xe4, {0x71}, 0x01},
+ {0xe5, {0x03}, 0x01},
+ {0xe6, {0x86}, 0x01},
+ {0xe7, {0x03}, 0x01},
+ {0xe8, {0x94}, 0x01},
+ {0xe9, {0x03}, 0x01},
+ {0xea, {0xfa}, 0x01},
/* Select CMD2 Page0 (Undocumented) */
- {0xff, 0x01},
+ {0xff, {0x01}, 0x01},
/* Reload CMD1: Don't reload default value to register */
- {0xfb, 0x01},
+ {0xfb, {0x01}, 0x01},
/* Select CMD2 Page1 (Undocumented) */
- {0xff, 0x02},
+ {0xff, {0x02}, 0x01},
/* Reload CMD1: Don't reload default value to register */
- {0xfb, 0x01},
+ {0xfb, {0x01}, 0x01},
/* Select CMD2 Page3 (Undocumented) */
- {0xff, 0x04},
+ {0xff, {0x04}, 0x01},
/* Reload CMD1: Don't reload default value to register */
- {0xfb, 0x01},
+ {0xfb, {0x01}, 0x01},
/* Select CMD1 */
- {0xff, 0x00},
- {0xd3, 0x22}, /* RGBMIPICTRL: VSYNC back porch = 34 */
- {0xd4, 0x04}, /* RGBMIPICTRL: VSYNC front porch = 4 */
+ {0xff, {0x00}, 0x01},
+ {0xd3, {0x22}, 0x01}, /* RGBMIPICTRL: VSYNC back porch = 34 */
+ {0xd4, {0x04}, 0x01}, /* RGBMIPICTRL: VSYNC front porch = 4 */
+};
+
+struct khadas_ts050_panel_data ts050_panel_data = {
+ .init_code = (struct khadas_ts050_panel_cmd *)ts050_init_code,
+ .len = ARRAY_SIZE(ts050_init_code)
+};
+
+struct khadas_ts050_panel_data ts050v2_panel_data = {
+ .init_code = (struct khadas_ts050_panel_cmd *)ts050v2_init_code,
+ .len = ARRAY_SIZE(ts050v2_init_code)
};

static inline
@@ -613,10 +671,11 @@ static int khadas_ts050_panel_prepare(struct drm_panel *panel)

msleep(100);

- for (i = 0; i < ARRAY_SIZE(init_code); i++) {
+ for (i = 0; i < khadas_ts050->panel_data->len; i++) {
err = mipi_dsi_dcs_write(khadas_ts050->link,
- init_code[i].cmd,
- &init_code[i].data, 1);
+ khadas_ts050->panel_data->init_code[i].cmd,
+ &khadas_ts050->panel_data->init_code[i].data,
+ khadas_ts050->panel_data->init_code[i].size);
if (err < 0) {
dev_err(panel->dev, "failed write cmds: %d\n", err);
goto poweroff;
@@ -762,7 +821,8 @@ static const struct drm_panel_funcs khadas_ts050_panel_funcs = {
};

static const struct of_device_id khadas_ts050_of_match[] = {
- { .compatible = "khadas,ts050", },
+ { .compatible = "khadas,ts050", .data = &ts050_panel_data, },
+ { .compatible = "khadas,ts050v2", .data = &ts050v2_panel_data, },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, khadas_ts050_of_match);
@@ -806,6 +866,13 @@ static int khadas_ts050_panel_probe(struct mipi_dsi_device *dsi)
struct khadas_ts050_panel *khadas_ts050;
int err;

+ const void *data = of_device_get_match_data(&dsi->dev);
+
+ if (!data) {
+ dev_err(&dsi->dev, "No matching data\n");
+ return -ENODEV;
+ }
+
dsi->lanes = 4;
dsi->format = MIPI_DSI_FMT_RGB888;
dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
@@ -816,6 +883,7 @@ static int khadas_ts050_panel_probe(struct mipi_dsi_device *dsi)
if (!khadas_ts050)
return -ENOMEM;

+ khadas_ts050->panel_data = (struct khadas_ts050_panel_data *)data;
mipi_dsi_set_drvdata(dsi, khadas_ts050);
khadas_ts050->link = dsi;

--
2.34.1


2024-04-15 08:02:23

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] dt-bindings: panel-simple-dsi: add Khadas TS050 V2 panel bindings

On 15/04/2024 05:14, Jacobe Zang wrote:
> This add the bindings for the Khadas TS050 V2 1080x1920 5" LCD DSI panel
> designed to work with the Khadas VIM3 and VIM3L Single Board Computers.

A nit, subject: drop second/last, redundant "bindings". The
"dt-bindings" prefix is already stating that these are bindings.
See also:
https://elixir.bootlin.com/linux/v6.7-rc8/source/Documentation/devicetree/bindings/submitting-patches.rst#L18


Acked-by: Krzysztof Kozlowski <[email protected]>


---

This is an automated instruction, just in case, because many review tags
are being ignored. If you know the process, you can skip it (please do
not feel offended by me posting it here - no bad intentions intended).
If you do not know the process, here is a short explanation:

Please add Acked-by/Reviewed-by/Tested-by tags when posting new
versions, under or above your Signed-off-by tag. Tag is "received", when
provided in a message replied to you on the mailing list. Tools like b4
can help here. However, there's no need to repost patches *only* to add
the tags. The upstream maintainer will do that for tags received on the
version they apply.

https://elixir.bootlin.com/linux/v6.5-rc3/source/Documentation/process/submitting-patches.rst#L577

Best regards,
Krzysztof


2024-04-15 08:02:36

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v2 0/2] drm/panel: add Khadas TS050 V2 panel support

On 15/04/2024 05:14, Jacobe Zang wrote:
> Changes from v1 at [1]:
> - Fix name from "newts050" to "ts050v2"
> - Add specific description about controller change

You must say that you ignored/dropped received tags.

Best regards,
Krzysztof


2024-04-16 17:44:19

by Neil Armstrong

[permalink] [raw]
Subject: Re: [PATCH v2 2/2] drm/panel: add Khadas TS050 V2 panel support

On 15/04/2024 05:14, Jacobe Zang wrote:
> This add Khadas TS050 V2 Panel and make it compatible with old one.
> Controller of V2 panel is "Himax HX8399-C" and the old panel is "NT35596".
> In driver file, the only different between them is the timing squence.
>
> Signed-off-by: Jacobe Zang <[email protected]>
> ---
> drivers/gpu/drm/panel/panel-khadas-ts050.c | 1112 +++++++++++---------
> 1 file changed, 590 insertions(+), 522 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-khadas-ts050.c b/drivers/gpu/drm/panel/panel-khadas-ts050.c
> index b942a01622743..c54be0cc3f084 100644
> --- a/drivers/gpu/drm/panel/panel-khadas-ts050.c
> +++ b/drivers/gpu/drm/panel/panel-khadas-ts050.c
> @@ -25,6 +25,7 @@ struct khadas_ts050_panel {
> struct regulator *supply;
> struct gpio_desc *reset_gpio;
> struct gpio_desc *enable_gpio;
> + struct khadas_ts050_panel_data *panel_data;
>
> bool prepared;
> bool enabled;
> @@ -32,544 +33,601 @@ struct khadas_ts050_panel {
>
> struct khadas_ts050_panel_cmd {
> u8 cmd;
> - u8 data;
> + u8 data[55];
> + u8 size;
> +};
> +
> +struct khadas_ts050_panel_data {
> + struct khadas_ts050_panel_cmd *init_code;
> + int len;
> +};
> +
> +static const struct khadas_ts050_panel_cmd ts050v2_init_code[] = {
> + {0xB9, {0xFF, 0x83, 0x99}, 0x03},
> + {0xBA, {0x63, 0x23, 0x68, 0xCF}, 0x04},
> + {0xD2, {0x55}, 0x01},
> + {0xB1, {0x02, 0x04, 0x70, 0x90, 0x01, 0x32, 0x33,
> + 0x11, 0x11, 0x4D, 0x57, 0x56, 0x73, 0x02, 0x02}, 0x0f},
> + {0xB2, {0x00, 0x80, 0x80, 0xAE, 0x0A, 0x0E, 0x75, 0x11, 0x00, 0x00, 0x00}, 0x0b},
> + {0xB4, {0x00, 0xFF, 0x04, 0xA4, 0x02, 0xA0, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02,
> + 0x00, 0x24, 0x02, 0x04, 0x0A, 0x21, 0x03, 0x00, 0x00, 0x08, 0xA6, 0x88,
> + 0x04, 0xA4, 0x02, 0xA0, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x00, 0x24,
> + 0x02, 0x04, 0x0A, 0x00, 0x00, 0x08, 0xA6, 0x00, 0x08, 0x11}, 0x2e},
> + {0xD3, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
> + 0x18, 0x32, 0x10, 0x09, 0x00, 0x09, 0x32,
> + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> + 0x00, 0x00, 0x11, 0x00, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x0A,
> + 0x40}, 0x21},
> + {0xD5, {0x18, 0x18, 0x18, 0x18, 0x21, 0x20, 0x18, 0x18, 0x19, 0x19, 0x19,
> + 0x19, 0x18, 0x18, 0x18, 0x18, 0x03, 0x02, 0x01, 0x00, 0x2F, 0x2F,
> + 0x30, 0x30, 0x31, 0x31, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, 0x20},
> + {0xD6, {0x18, 0x18, 0x18, 0x18, 0x20, 0x21, 0x19, 0x19, 0x18, 0x18, 0x19,
> + 0x19, 0x18, 0x18, 0x18, 0x18, 0x00, 0x01, 0x02, 0x03, 0x2F, 0x2F,
> + 0x30, 0x30, 0x31, 0x31, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, 0x20},
> + {0xD8, {0x0A, 0xBE, 0xFA, 0xA0, 0x0A, 0xBE, 0xFA, 0xA0}, 0x08},
> + {0xBD, {0x01}, 0x01},
> + {0xD8, {0x0F, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xE0}, 0x08},
> + {0xBD, {0x02}, 0x01},
> + {0xD8, {0x0F, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xE0}, 0x08},
> + {0xBD, {0x00}, 0x01},
> + {0xE0, {0x01, 0x35, 0x41, 0x3B, 0x79, 0x81, 0x8C, 0x85, 0x8E,
> + 0x95, 0x9B, 0xA0, 0xA4, 0xAB, 0xB1, 0xB3, 0xB7, 0xC5, 0xBD, 0xC5,
> + 0xB6, 0xC2, 0xC2, 0x62, 0x5D, 0x66, 0x73, 0x01, 0x35, 0x41, 0x3B,
> + 0x79, 0x81, 0x8C, 0x85, 0x8E, 0x95, 0x9B, 0xA0, 0xA4, 0xAB, 0xB1,
> + 0xB3, 0xB7, 0xB5, 0xBD, 0xC5, 0xB6, 0xC2, 0xC2, 0x62, 0x5D, 0x66,
> + 0x73}, 0x36},
> + {0xB6, {0x97, 0x97}, 0x02},
> + {0xCC, {0xC8}, 0x02},
> + {0xBF, {0x40, 0x41, 0x50, 0x19}, 0x04},
> + {0xC6, {0xFF, 0xF9}, 0x02},
> + {0xC0, {0x25, 0x5A}, 0x02},
> };
>
> /* Only the CMD1 User Command set is documented */
> -static const struct khadas_ts050_panel_cmd init_code[] = {
> +static const struct khadas_ts050_panel_cmd ts050_init_code[] = {
> /* Select Unknown CMD Page (Undocumented) */
> - {0xff, 0xee},
> + {0xff, {0xee}, 0x01},
> /* Reload CMD1: Don't reload default value to register */
> - {0xfb, 0x01},
> - {0x1f, 0x45},
> - {0x24, 0x4f},
> - {0x38, 0xc8},
> - {0x39, 0x27},
> - {0x1e, 0x77},
> - {0x1d, 0x0f},
> - {0x7e, 0x71},
> - {0x7c, 0x03},
> - {0xff, 0x00},
> - {0xfb, 0x01},
> - {0x35, 0x01},
> + {0xfb, {0x01}, 0x01},
> + {0x1f, {0x45}, 0x01},
> + {0x24, {0x4f}, 0x01},
> + {0x38, {0xc8}, 0x01},
> + {0x39, {0x27}, 0x01},
> + {0x1e, {0x77}, 0x01},
> + {0x1d, {0x0f}, 0x01},
> + {0x7e, {0x71}, 0x01},
> + {0x7c, {0x03}, 0x01},
> + {0xff, {0x00}, 0x01},
> + {0xfb, {0x01}, 0x01},
> + {0x35, {0x01}, 0x01},
> /* Select CMD2 Page0 (Undocumented) */
> - {0xff, 0x01},
> + {0xff, {0x01}, 0x01},
> /* Reload CMD1: Don't reload default value to register */
> - {0xfb, 0x01},
> - {0x00, 0x01},
> - {0x01, 0x55},
> - {0x02, 0x40},
> - {0x05, 0x40},
> - {0x06, 0x4a},
> - {0x07, 0x24},
> - {0x08, 0x0c},
> - {0x0b, 0x7d},
> - {0x0c, 0x7d},
> - {0x0e, 0xb0},
> - {0x0f, 0xae},
> - {0x11, 0x10},
> - {0x12, 0x10},
> - {0x13, 0x03},
> - {0x14, 0x4a},
> - {0x15, 0x12},
> - {0x16, 0x12},
> - {0x18, 0x00},
> - {0x19, 0x77},
> - {0x1a, 0x55},
> - {0x1b, 0x13},
> - {0x1c, 0x00},
> - {0x1d, 0x00},
> - {0x1e, 0x13},
> - {0x1f, 0x00},
> - {0x23, 0x00},
> - {0x24, 0x00},
> - {0x25, 0x00},
> - {0x26, 0x00},
> - {0x27, 0x00},
> - {0x28, 0x00},
> - {0x35, 0x00},
> - {0x66, 0x00},
> - {0x58, 0x82},
> - {0x59, 0x02},
> - {0x5a, 0x02},
> - {0x5b, 0x02},
> - {0x5c, 0x82},
> - {0x5d, 0x82},
> - {0x5e, 0x02},
> - {0x5f, 0x02},
> - {0x72, 0x31},
> + {0xfb, {0x01}, 0x01},
> + {0x00, {0x01}, 0x01},
> + {0x01, {0x55}, 0x01},
> + {0x02, {0x40}, 0x01},
> + {0x05, {0x40}, 0x01},
> + {0x06, {0x4a}, 0x01},
> + {0x07, {0x24}, 0x01},
> + {0x08, {0x0c}, 0x01},
> + {0x0b, {0x7d}, 0x01},
> + {0x0c, {0x7d}, 0x01},
> + {0x0e, {0xb0}, 0x01},
> + {0x0f, {0xae}, 0x01},
> + {0x11, {0x10}, 0x01},
> + {0x12, {0x10}, 0x01},
> + {0x13, {0x03}, 0x01},
> + {0x14, {0x4a}, 0x01},
> + {0x15, {0x12}, 0x01},
> + {0x16, {0x12}, 0x01},
> + {0x18, {0x00}, 0x01},
> + {0x19, {0x77}, 0x01},
> + {0x1a, {0x55}, 0x01},
> + {0x1b, {0x13}, 0x01},
> + {0x1c, {0x00}, 0x01},
> + {0x1d, {0x00}, 0x01},
> + {0x1e, {0x13}, 0x01},
> + {0x1f, {0x00}, 0x01},
> + {0x23, {0x00}, 0x01},
> + {0x24, {0x00}, 0x01},
> + {0x25, {0x00}, 0x01},
> + {0x26, {0x00}, 0x01},
> + {0x27, {0x00}, 0x01},
> + {0x28, {0x00}, 0x01},
> + {0x35, {0x00}, 0x01},
> + {0x66, {0x00}, 0x01},
> + {0x58, {0x82}, 0x01},
> + {0x59, {0x02}, 0x01},
> + {0x5a, {0x02}, 0x01},
> + {0x5b, {0x02}, 0x01},
> + {0x5c, {0x82}, 0x01},
> + {0x5d, {0x82}, 0x01},
> + {0x5e, {0x02}, 0x01},
> + {0x5f, {0x02}, 0x01},
> + {0x72, {0x31}, 0x01},
> /* Select CMD2 Page4 (Undocumented) */
> - {0xff, 0x05},
> + {0xff, {0x05}, 0x01},
> /* Reload CMD1: Don't reload default value to register */
> - {0xfb, 0x01},
> - {0x00, 0x01},
> - {0x01, 0x0b},
> - {0x02, 0x0c},
> - {0x03, 0x09},
> - {0x04, 0x0a},
> - {0x05, 0x00},
> - {0x06, 0x0f},
> - {0x07, 0x10},
> - {0x08, 0x00},
> - {0x09, 0x00},
> - {0x0a, 0x00},
> - {0x0b, 0x00},
> - {0x0c, 0x00},
> - {0x0d, 0x13},
> - {0x0e, 0x15},
> - {0x0f, 0x17},
> - {0x10, 0x01},
> - {0x11, 0x0b},
> - {0x12, 0x0c},
> - {0x13, 0x09},
> - {0x14, 0x0a},
> - {0x15, 0x00},
> - {0x16, 0x0f},
> - {0x17, 0x10},
> - {0x18, 0x00},
> - {0x19, 0x00},
> - {0x1a, 0x00},
> - {0x1b, 0x00},
> - {0x1c, 0x00},
> - {0x1d, 0x13},
> - {0x1e, 0x15},
> - {0x1f, 0x17},
> - {0x20, 0x00},
> - {0x21, 0x03},
> - {0x22, 0x01},
> - {0x23, 0x40},
> - {0x24, 0x40},
> - {0x25, 0xed},
> - {0x29, 0x58},
> - {0x2a, 0x12},
> - {0x2b, 0x01},
> - {0x4b, 0x06},
> - {0x4c, 0x11},
> - {0x4d, 0x20},
> - {0x4e, 0x02},
> - {0x4f, 0x02},
> - {0x50, 0x20},
> - {0x51, 0x61},
> - {0x52, 0x01},
> - {0x53, 0x63},
> - {0x54, 0x77},
> - {0x55, 0xed},
> - {0x5b, 0x00},
> - {0x5c, 0x00},
> - {0x5d, 0x00},
> - {0x5e, 0x00},
> - {0x5f, 0x15},
> - {0x60, 0x75},
> - {0x61, 0x00},
> - {0x62, 0x00},
> - {0x63, 0x00},
> - {0x64, 0x00},
> - {0x65, 0x00},
> - {0x66, 0x00},
> - {0x67, 0x00},
> - {0x68, 0x04},
> - {0x69, 0x00},
> - {0x6a, 0x00},
> - {0x6c, 0x40},
> - {0x75, 0x01},
> - {0x76, 0x01},
> - {0x7a, 0x80},
> - {0x7b, 0xa3},
> - {0x7c, 0xd8},
> - {0x7d, 0x60},
> - {0x7f, 0x15},
> - {0x80, 0x81},
> - {0x83, 0x05},
> - {0x93, 0x08},
> - {0x94, 0x10},
> - {0x8a, 0x00},
> - {0x9b, 0x0f},
> - {0xea, 0xff},
> - {0xec, 0x00},
> + {0xfb, {0x01}, 0x01},
> + {0x00, {0x01}, 0x01},
> + {0x01, {0x0b}, 0x01},
> + {0x02, {0x0c}, 0x01},
> + {0x03, {0x09}, 0x01},
> + {0x04, {0x0a}, 0x01},
> + {0x05, {0x00}, 0x01},
> + {0x06, {0x0f}, 0x01},
> + {0x07, {0x10}, 0x01},
> + {0x08, {0x00}, 0x01},
> + {0x09, {0x00}, 0x01},
> + {0x0a, {0x00}, 0x01},
> + {0x0b, {0x00}, 0x01},
> + {0x0c, {0x00}, 0x01},
> + {0x0d, {0x13}, 0x01},
> + {0x0e, {0x15}, 0x01},
> + {0x0f, {0x17}, 0x01},
> + {0x10, {0x01}, 0x01},
> + {0x11, {0x0b}, 0x01},
> + {0x12, {0x0c}, 0x01},
> + {0x13, {0x09}, 0x01},
> + {0x14, {0x0a}, 0x01},
> + {0x15, {0x00}, 0x01},
> + {0x16, {0x0f}, 0x01},
> + {0x17, {0x10}, 0x01},
> + {0x18, {0x00}, 0x01},
> + {0x19, {0x00}, 0x01},
> + {0x1a, {0x00}, 0x01},
> + {0x1b, {0x00}, 0x01},
> + {0x1c, {0x00}, 0x01},
> + {0x1d, {0x13}, 0x01},
> + {0x1e, {0x15}, 0x01},
> + {0x1f, {0x17}, 0x01},
> + {0x20, {0x00}, 0x01},
> + {0x21, {0x03}, 0x01},
> + {0x22, {0x01}, 0x01},
> + {0x23, {0x40}, 0x01},
> + {0x24, {0x40}, 0x01},
> + {0x25, {0xed}, 0x01},
> + {0x29, {0x58}, 0x01},
> + {0x2a, {0x12}, 0x01},
> + {0x2b, {0x01}, 0x01},
> + {0x4b, {0x06}, 0x01},
> + {0x4c, {0x11}, 0x01},
> + {0x4d, {0x20}, 0x01},
> + {0x4e, {0x02}, 0x01},
> + {0x4f, {0x02}, 0x01},
> + {0x50, {0x20}, 0x01},
> + {0x51, {0x61}, 0x01},
> + {0x52, {0x01}, 0x01},
> + {0x53, {0x63}, 0x01},
> + {0x54, {0x77}, 0x01},
> + {0x55, {0xed}, 0x01},
> + {0x5b, {0x00}, 0x01},
> + {0x5c, {0x00}, 0x01},
> + {0x5d, {0x00}, 0x01},
> + {0x5e, {0x00}, 0x01},
> + {0x5f, {0x15}, 0x01},
> + {0x60, {0x75}, 0x01},
> + {0x61, {0x00}, 0x01},
> + {0x62, {0x00}, 0x01},
> + {0x63, {0x00}, 0x01},
> + {0x64, {0x00}, 0x01},
> + {0x65, {0x00}, 0x01},
> + {0x66, {0x00}, 0x01},
> + {0x67, {0x00}, 0x01},
> + {0x68, {0x04}, 0x01},
> + {0x69, {0x00}, 0x01},
> + {0x6a, {0x00}, 0x01},
> + {0x6c, {0x40}, 0x01},
> + {0x75, {0x01}, 0x01},
> + {0x76, {0x01}, 0x01},
> + {0x7a, {0x80}, 0x01},
> + {0x7b, {0xa3}, 0x01},
> + {0x7c, {0xd8}, 0x01},
> + {0x7d, {0x60}, 0x01},
> + {0x7f, {0x15}, 0x01},
> + {0x80, {0x81}, 0x01},
> + {0x83, {0x05}, 0x01},
> + {0x93, {0x08}, 0x01},
> + {0x94, {0x10}, 0x01},
> + {0x8a, {0x00}, 0x01},
> + {0x9b, {0x0f}, 0x01},
> + {0xea, {0xff}, 0x01},
> + {0xec, {0x00}, 0x01},
> /* Select CMD2 Page0 (Undocumented) */
> - {0xff, 0x01},
> + {0xff, {0x01}, 0x01},
> /* Reload CMD1: Don't reload default value to register */
> - {0xfb, 0x01},
> - {0x75, 0x00},
> - {0x76, 0xdf},
> - {0x77, 0x00},
> - {0x78, 0xe4},
> - {0x79, 0x00},
> - {0x7a, 0xed},
> - {0x7b, 0x00},
> - {0x7c, 0xf6},
> - {0x7d, 0x00},
> - {0x7e, 0xff},
> - {0x7f, 0x01},
> - {0x80, 0x07},
> - {0x81, 0x01},
> - {0x82, 0x10},
> - {0x83, 0x01},
> - {0x84, 0x18},
> - {0x85, 0x01},
> - {0x86, 0x20},
> - {0x87, 0x01},
> - {0x88, 0x3d},
> - {0x89, 0x01},
> - {0x8a, 0x56},
> - {0x8b, 0x01},
> - {0x8c, 0x84},
> - {0x8d, 0x01},
> - {0x8e, 0xab},
> - {0x8f, 0x01},
> - {0x90, 0xec},
> - {0x91, 0x02},
> - {0x92, 0x22},
> - {0x93, 0x02},
> - {0x94, 0x23},
> - {0x95, 0x02},
> - {0x96, 0x55},
> - {0x97, 0x02},
> - {0x98, 0x8b},
> - {0x99, 0x02},
> - {0x9a, 0xaf},
> - {0x9b, 0x02},
> - {0x9c, 0xdf},
> - {0x9d, 0x03},
> - {0x9e, 0x01},
> - {0x9f, 0x03},
> - {0xa0, 0x2c},
> - {0xa2, 0x03},
> - {0xa3, 0x39},
> - {0xa4, 0x03},
> - {0xa5, 0x47},
> - {0xa6, 0x03},
> - {0xa7, 0x56},
> - {0xa9, 0x03},
> - {0xaa, 0x66},
> - {0xab, 0x03},
> - {0xac, 0x76},
> - {0xad, 0x03},
> - {0xae, 0x85},
> - {0xaf, 0x03},
> - {0xb0, 0x90},
> - {0xb1, 0x03},
> - {0xb2, 0xcb},
> - {0xb3, 0x00},
> - {0xb4, 0xdf},
> - {0xb5, 0x00},
> - {0xb6, 0xe4},
> - {0xb7, 0x00},
> - {0xb8, 0xed},
> - {0xb9, 0x00},
> - {0xba, 0xf6},
> - {0xbb, 0x00},
> - {0xbc, 0xff},
> - {0xbd, 0x01},
> - {0xbe, 0x07},
> - {0xbf, 0x01},
> - {0xc0, 0x10},
> - {0xc1, 0x01},
> - {0xc2, 0x18},
> - {0xc3, 0x01},
> - {0xc4, 0x20},
> - {0xc5, 0x01},
> - {0xc6, 0x3d},
> - {0xc7, 0x01},
> - {0xc8, 0x56},
> - {0xc9, 0x01},
> - {0xca, 0x84},
> - {0xcb, 0x01},
> - {0xcc, 0xab},
> - {0xcd, 0x01},
> - {0xce, 0xec},
> - {0xcf, 0x02},
> - {0xd0, 0x22},
> - {0xd1, 0x02},
> - {0xd2, 0x23},
> - {0xd3, 0x02},
> - {0xd4, 0x55},
> - {0xd5, 0x02},
> - {0xd6, 0x8b},
> - {0xd7, 0x02},
> - {0xd8, 0xaf},
> - {0xd9, 0x02},
> - {0xda, 0xdf},
> - {0xdb, 0x03},
> - {0xdc, 0x01},
> - {0xdd, 0x03},
> - {0xde, 0x2c},
> - {0xdf, 0x03},
> - {0xe0, 0x39},
> - {0xe1, 0x03},
> - {0xe2, 0x47},
> - {0xe3, 0x03},
> - {0xe4, 0x56},
> - {0xe5, 0x03},
> - {0xe6, 0x66},
> - {0xe7, 0x03},
> - {0xe8, 0x76},
> - {0xe9, 0x03},
> - {0xea, 0x85},
> - {0xeb, 0x03},
> - {0xec, 0x90},
> - {0xed, 0x03},
> - {0xee, 0xcb},
> - {0xef, 0x00},
> - {0xf0, 0xbb},
> - {0xf1, 0x00},
> - {0xf2, 0xc0},
> - {0xf3, 0x00},
> - {0xf4, 0xcc},
> - {0xf5, 0x00},
> - {0xf6, 0xd6},
> - {0xf7, 0x00},
> - {0xf8, 0xe1},
> - {0xf9, 0x00},
> - {0xfa, 0xea},
> + {0xfb, {0x01}, 0x01},
> + {0x75, {0x00}, 0x01},
> + {0x76, {0xdf}, 0x01},
> + {0x77, {0x00}, 0x01},
> + {0x78, {0xe4}, 0x01},
> + {0x79, {0x00}, 0x01},
> + {0x7a, {0xed}, 0x01},
> + {0x7b, {0x00}, 0x01},
> + {0x7c, {0xf6}, 0x01},
> + {0x7d, {0x00}, 0x01},
> + {0x7e, {0xff}, 0x01},
> + {0x7f, {0x01}, 0x01},
> + {0x80, {0x07}, 0x01},
> + {0x81, {0x01}, 0x01},
> + {0x82, {0x10}, 0x01},
> + {0x83, {0x01}, 0x01},
> + {0x84, {0x18}, 0x01},
> + {0x85, {0x01}, 0x01},
> + {0x86, {0x20}, 0x01},
> + {0x87, {0x01}, 0x01},
> + {0x88, {0x3d}, 0x01},
> + {0x89, {0x01}, 0x01},
> + {0x8a, {0x56}, 0x01},
> + {0x8b, {0x01}, 0x01},
> + {0x8c, {0x84}, 0x01},
> + {0x8d, {0x01}, 0x01},
> + {0x8e, {0xab}, 0x01},
> + {0x8f, {0x01}, 0x01},
> + {0x90, {0xec}, 0x01},
> + {0x91, {0x02}, 0x01},
> + {0x92, {0x22}, 0x01},
> + {0x93, {0x02}, 0x01},
> + {0x94, {0x23}, 0x01},
> + {0x95, {0x02}, 0x01},
> + {0x96, {0x55}, 0x01},
> + {0x97, {0x02}, 0x01},
> + {0x98, {0x8b}, 0x01},
> + {0x99, {0x02}, 0x01},
> + {0x9a, {0xaf}, 0x01},
> + {0x9b, {0x02}, 0x01},
> + {0x9c, {0xdf}, 0x01},
> + {0x9d, {0x03}, 0x01},
> + {0x9e, {0x01}, 0x01},
> + {0x9f, {0x03}, 0x01},
> + {0xa0, {0x2c}, 0x01},
> + {0xa2, {0x03}, 0x01},
> + {0xa3, {0x39}, 0x01},
> + {0xa4, {0x03}, 0x01},
> + {0xa5, {0x47}, 0x01},
> + {0xa6, {0x03}, 0x01},
> + {0xa7, {0x56}, 0x01},
> + {0xa9, {0x03}, 0x01},
> + {0xaa, {0x66}, 0x01},
> + {0xab, {0x03}, 0x01},
> + {0xac, {0x76}, 0x01},
> + {0xad, {0x03}, 0x01},
> + {0xae, {0x85}, 0x01},
> + {0xaf, {0x03}, 0x01},
> + {0xb0, {0x90}, 0x01},
> + {0xb1, {0x03}, 0x01},
> + {0xb2, {0xcb}, 0x01},
> + {0xb3, {0x00}, 0x01},
> + {0xb4, {0xdf}, 0x01},
> + {0xb5, {0x00}, 0x01},
> + {0xb6, {0xe4}, 0x01},
> + {0xb7, {0x00}, 0x01},
> + {0xb8, {0xed}, 0x01},
> + {0xb9, {0x00}, 0x01},
> + {0xba, {0xf6}, 0x01},
> + {0xbb, {0x00}, 0x01},
> + {0xbc, {0xff}, 0x01},
> + {0xbd, {0x01}, 0x01},
> + {0xbe, {0x07}, 0x01},
> + {0xbf, {0x01}, 0x01},
> + {0xc0, {0x10}, 0x01},
> + {0xc1, {0x01}, 0x01},
> + {0xc2, {0x18}, 0x01},
> + {0xc3, {0x01}, 0x01},
> + {0xc4, {0x20}, 0x01},
> + {0xc5, {0x01}, 0x01},
> + {0xc6, {0x3d}, 0x01},
> + {0xc7, {0x01}, 0x01},
> + {0xc8, {0x56}, 0x01},
> + {0xc9, {0x01}, 0x01},
> + {0xca, {0x84}, 0x01},
> + {0xcb, {0x01}, 0x01},
> + {0xcc, {0xab}, 0x01},
> + {0xcd, {0x01}, 0x01},
> + {0xce, {0xec}, 0x01},
> + {0xcf, {0x02}, 0x01},
> + {0xd0, {0x22}, 0x01},
> + {0xd1, {0x02}, 0x01},
> + {0xd2, {0x23}, 0x01},
> + {0xd3, {0x02}, 0x01},
> + {0xd4, {0x55}, 0x01},
> + {0xd5, {0x02}, 0x01},
> + {0xd6, {0x8b}, 0x01},
> + {0xd7, {0x02}, 0x01},
> + {0xd8, {0xaf}, 0x01},
> + {0xd9, {0x02}, 0x01},
> + {0xda, {0xdf}, 0x01},
> + {0xdb, {0x03}, 0x01},
> + {0xdc, {0x01}, 0x01},
> + {0xdd, {0x03}, 0x01},
> + {0xde, {0x2c}, 0x01},
> + {0xdf, {0x03}, 0x01},
> + {0xe0, {0x39}, 0x01},
> + {0xe1, {0x03}, 0x01},
> + {0xe2, {0x47}, 0x01},
> + {0xe3, {0x03}, 0x01},
> + {0xe4, {0x56}, 0x01},
> + {0xe5, {0x03}, 0x01},
> + {0xe6, {0x66}, 0x01},
> + {0xe7, {0x03}, 0x01},
> + {0xe8, {0x76}, 0x01},
> + {0xe9, {0x03}, 0x01},
> + {0xea, {0x85}, 0x01},
> + {0xeb, {0x03}, 0x01},
> + {0xec, {0x90}, 0x01},
> + {0xed, {0x03}, 0x01},
> + {0xee, {0xcb}, 0x01},
> + {0xef, {0x00}, 0x01},
> + {0xf0, {0xbb}, 0x01},
> + {0xf1, {0x00}, 0x01},
> + {0xf2, {0xc0}, 0x01},
> + {0xf3, {0x00}, 0x01},
> + {0xf4, {0xcc}, 0x01},
> + {0xf5, {0x00}, 0x01},
> + {0xf6, {0xd6}, 0x01},
> + {0xf7, {0x00}, 0x01},
> + {0xf8, {0xe1}, 0x01},
> + {0xf9, {0x00}, 0x01},
> + {0xfa, {0xea}, 0x01},
> /* Select CMD2 Page2 (Undocumented) */
> - {0xff, 0x02},
> + {0xff, {0x02}, 0x01},
> /* Reload CMD1: Don't reload default value to register */
> - {0xfb, 0x01},
> - {0x00, 0x00},
> - {0x01, 0xf4},
> - {0x02, 0x00},
> - {0x03, 0xef},
> - {0x04, 0x01},
> - {0x05, 0x07},
> - {0x06, 0x01},
> - {0x07, 0x28},
> - {0x08, 0x01},
> - {0x09, 0x44},
> - {0x0a, 0x01},
> - {0x0b, 0x76},
> - {0x0c, 0x01},
> - {0x0d, 0xa0},
> - {0x0e, 0x01},
> - {0x0f, 0xe7},
> - {0x10, 0x02},
> - {0x11, 0x1f},
> - {0x12, 0x02},
> - {0x13, 0x22},
> - {0x14, 0x02},
> - {0x15, 0x54},
> - {0x16, 0x02},
> - {0x17, 0x8b},
> - {0x18, 0x02},
> - {0x19, 0xaf},
> - {0x1a, 0x02},
> - {0x1b, 0xe0},
> - {0x1c, 0x03},
> - {0x1d, 0x01},
> - {0x1e, 0x03},
> - {0x1f, 0x2d},
> - {0x20, 0x03},
> - {0x21, 0x39},
> - {0x22, 0x03},
> - {0x23, 0x47},
> - {0x24, 0x03},
> - {0x25, 0x57},
> - {0x26, 0x03},
> - {0x27, 0x65},
> - {0x28, 0x03},
> - {0x29, 0x77},
> - {0x2a, 0x03},
> - {0x2b, 0x85},
> - {0x2d, 0x03},
> - {0x2f, 0x8f},
> - {0x30, 0x03},
> - {0x31, 0xcb},
> - {0x32, 0x00},
> - {0x33, 0xbb},
> - {0x34, 0x00},
> - {0x35, 0xc0},
> - {0x36, 0x00},
> - {0x37, 0xcc},
> - {0x38, 0x00},
> - {0x39, 0xd6},
> - {0x3a, 0x00},
> - {0x3b, 0xe1},
> - {0x3d, 0x00},
> - {0x3f, 0xea},
> - {0x40, 0x00},
> - {0x41, 0xf4},
> - {0x42, 0x00},
> - {0x43, 0xfe},
> - {0x44, 0x01},
> - {0x45, 0x07},
> - {0x46, 0x01},
> - {0x47, 0x28},
> - {0x48, 0x01},
> - {0x49, 0x44},
> - {0x4a, 0x01},
> - {0x4b, 0x76},
> - {0x4c, 0x01},
> - {0x4d, 0xa0},
> - {0x4e, 0x01},
> - {0x4f, 0xe7},
> - {0x50, 0x02},
> - {0x51, 0x1f},
> - {0x52, 0x02},
> - {0x53, 0x22},
> - {0x54, 0x02},
> - {0x55, 0x54},
> - {0x56, 0x02},
> - {0x58, 0x8b},
> - {0x59, 0x02},
> - {0x5a, 0xaf},
> - {0x5b, 0x02},
> - {0x5c, 0xe0},
> - {0x5d, 0x03},
> - {0x5e, 0x01},
> - {0x5f, 0x03},
> - {0x60, 0x2d},
> - {0x61, 0x03},
> - {0x62, 0x39},
> - {0x63, 0x03},
> - {0x64, 0x47},
> - {0x65, 0x03},
> - {0x66, 0x57},
> - {0x67, 0x03},
> - {0x68, 0x65},
> - {0x69, 0x03},
> - {0x6a, 0x77},
> - {0x6b, 0x03},
> - {0x6c, 0x85},
> - {0x6d, 0x03},
> - {0x6e, 0x8f},
> - {0x6f, 0x03},
> - {0x70, 0xcb},
> - {0x71, 0x00},
> - {0x72, 0x00},
> - {0x73, 0x00},
> - {0x74, 0x21},
> - {0x75, 0x00},
> - {0x76, 0x4c},
> - {0x77, 0x00},
> - {0x78, 0x6b},
> - {0x79, 0x00},
> - {0x7a, 0x85},
> - {0x7b, 0x00},
> - {0x7c, 0x9a},
> - {0x7d, 0x00},
> - {0x7e, 0xad},
> - {0x7f, 0x00},
> - {0x80, 0xbe},
> - {0x81, 0x00},
> - {0x82, 0xcd},
> - {0x83, 0x01},
> - {0x84, 0x01},
> - {0x85, 0x01},
> - {0x86, 0x29},
> - {0x87, 0x01},
> - {0x88, 0x68},
> - {0x89, 0x01},
> - {0x8a, 0x98},
> - {0x8b, 0x01},
> - {0x8c, 0xe5},
> - {0x8d, 0x02},
> - {0x8e, 0x1e},
> - {0x8f, 0x02},
> - {0x90, 0x30},
> - {0x91, 0x02},
> - {0x92, 0x52},
> - {0x93, 0x02},
> - {0x94, 0x88},
> - {0x95, 0x02},
> - {0x96, 0xaa},
> - {0x97, 0x02},
> - {0x98, 0xd7},
> - {0x99, 0x02},
> - {0x9a, 0xf7},
> - {0x9b, 0x03},
> - {0x9c, 0x21},
> - {0x9d, 0x03},
> - {0x9e, 0x2e},
> - {0x9f, 0x03},
> - {0xa0, 0x3d},
> - {0xa2, 0x03},
> - {0xa3, 0x4c},
> - {0xa4, 0x03},
> - {0xa5, 0x5e},
> - {0xa6, 0x03},
> - {0xa7, 0x71},
> - {0xa9, 0x03},
> - {0xaa, 0x86},
> - {0xab, 0x03},
> - {0xac, 0x94},
> - {0xad, 0x03},
> - {0xae, 0xfa},
> - {0xaf, 0x00},
> - {0xb0, 0x00},
> - {0xb1, 0x00},
> - {0xb2, 0x21},
> - {0xb3, 0x00},
> - {0xb4, 0x4c},
> - {0xb5, 0x00},
> - {0xb6, 0x6b},
> - {0xb7, 0x00},
> - {0xb8, 0x85},
> - {0xb9, 0x00},
> - {0xba, 0x9a},
> - {0xbb, 0x00},
> - {0xbc, 0xad},
> - {0xbd, 0x00},
> - {0xbe, 0xbe},
> - {0xbf, 0x00},
> - {0xc0, 0xcd},
> - {0xc1, 0x01},
> - {0xc2, 0x01},
> - {0xc3, 0x01},
> - {0xc4, 0x29},
> - {0xc5, 0x01},
> - {0xc6, 0x68},
> - {0xc7, 0x01},
> - {0xc8, 0x98},
> - {0xc9, 0x01},
> - {0xca, 0xe5},
> - {0xcb, 0x02},
> - {0xcc, 0x1e},
> - {0xcd, 0x02},
> - {0xce, 0x20},
> - {0xcf, 0x02},
> - {0xd0, 0x52},
> - {0xd1, 0x02},
> - {0xd2, 0x88},
> - {0xd3, 0x02},
> - {0xd4, 0xaa},
> - {0xd5, 0x02},
> - {0xd6, 0xd7},
> - {0xd7, 0x02},
> - {0xd8, 0xf7},
> - {0xd9, 0x03},
> - {0xda, 0x21},
> - {0xdb, 0x03},
> - {0xdc, 0x2e},
> - {0xdd, 0x03},
> - {0xde, 0x3d},
> - {0xdf, 0x03},
> - {0xe0, 0x4c},
> - {0xe1, 0x03},
> - {0xe2, 0x5e},
> - {0xe3, 0x03},
> - {0xe4, 0x71},
> - {0xe5, 0x03},
> - {0xe6, 0x86},
> - {0xe7, 0x03},
> - {0xe8, 0x94},
> - {0xe9, 0x03},
> - {0xea, 0xfa},
> + {0xfb, {0x01}, 0x01},
> + {0x00, {0x00}, 0x01},
> + {0x01, {0xf4}, 0x01},
> + {0x02, {0x00}, 0x01},
> + {0x03, {0xef}, 0x01},
> + {0x04, {0x01}, 0x01},
> + {0x05, {0x07}, 0x01},
> + {0x06, {0x01}, 0x01},
> + {0x07, {0x28}, 0x01},
> + {0x08, {0x01}, 0x01},
> + {0x09, {0x44}, 0x01},
> + {0x0a, {0x01}, 0x01},
> + {0x0b, {0x76}, 0x01},
> + {0x0c, {0x01}, 0x01},
> + {0x0d, {0xa0}, 0x01},
> + {0x0e, {0x01}, 0x01},
> + {0x0f, {0xe7}, 0x01},
> + {0x10, {0x02}, 0x01},
> + {0x11, {0x1f}, 0x01},
> + {0x12, {0x02}, 0x01},
> + {0x13, {0x22}, 0x01},
> + {0x14, {0x02}, 0x01},
> + {0x15, {0x54}, 0x01},
> + {0x16, {0x02}, 0x01},
> + {0x17, {0x8b}, 0x01},
> + {0x18, {0x02}, 0x01},
> + {0x19, {0xaf}, 0x01},
> + {0x1a, {0x02}, 0x01},
> + {0x1b, {0xe0}, 0x01},
> + {0x1c, {0x03}, 0x01},
> + {0x1d, {0x01}, 0x01},
> + {0x1e, {0x03}, 0x01},
> + {0x1f, {0x2d}, 0x01},
> + {0x20, {0x03}, 0x01},
> + {0x21, {0x39}, 0x01},
> + {0x22, {0x03}, 0x01},
> + {0x23, {0x47}, 0x01},
> + {0x24, {0x03}, 0x01},
> + {0x25, {0x57}, 0x01},
> + {0x26, {0x03}, 0x01},
> + {0x27, {0x65}, 0x01},
> + {0x28, {0x03}, 0x01},
> + {0x29, {0x77}, 0x01},
> + {0x2a, {0x03}, 0x01},
> + {0x2b, {0x85}, 0x01},
> + {0x2d, {0x03}, 0x01},
> + {0x2f, {0x8f}, 0x01},
> + {0x30, {0x03}, 0x01},
> + {0x31, {0xcb}, 0x01},
> + {0x32, {0x00}, 0x01},
> + {0x33, {0xbb}, 0x01},
> + {0x34, {0x00}, 0x01},
> + {0x35, {0xc0}, 0x01},
> + {0x36, {0x00}, 0x01},
> + {0x37, {0xcc}, 0x01},
> + {0x38, {0x00}, 0x01},
> + {0x39, {0xd6}, 0x01},
> + {0x3a, {0x00}, 0x01},
> + {0x3b, {0xe1}, 0x01},
> + {0x3d, {0x00}, 0x01},
> + {0x3f, {0xea}, 0x01},
> + {0x40, {0x00}, 0x01},
> + {0x41, {0xf4}, 0x01},
> + {0x42, {0x00}, 0x01},
> + {0x43, {0xfe}, 0x01},
> + {0x44, {0x01}, 0x01},
> + {0x45, {0x07}, 0x01},
> + {0x46, {0x01}, 0x01},
> + {0x47, {0x28}, 0x01},
> + {0x48, {0x01}, 0x01},
> + {0x49, {0x44}, 0x01},
> + {0x4a, {0x01}, 0x01},
> + {0x4b, {0x76}, 0x01},
> + {0x4c, {0x01}, 0x01},
> + {0x4d, {0xa0}, 0x01},
> + {0x4e, {0x01}, 0x01},
> + {0x4f, {0xe7}, 0x01},
> + {0x50, {0x02}, 0x01},
> + {0x51, {0x1f}, 0x01},
> + {0x52, {0x02}, 0x01},
> + {0x53, {0x22}, 0x01},
> + {0x54, {0x02}, 0x01},
> + {0x55, {0x54}, 0x01},
> + {0x56, {0x02}, 0x01},
> + {0x58, {0x8b}, 0x01},
> + {0x59, {0x02}, 0x01},
> + {0x5a, {0xaf}, 0x01},
> + {0x5b, {0x02}, 0x01},
> + {0x5c, {0xe0}, 0x01},
> + {0x5d, {0x03}, 0x01},
> + {0x5e, {0x01}, 0x01},
> + {0x5f, {0x03}, 0x01},
> + {0x60, {0x2d}, 0x01},
> + {0x61, {0x03}, 0x01},
> + {0x62, {0x39}, 0x01},
> + {0x63, {0x03}, 0x01},
> + {0x64, {0x47}, 0x01},
> + {0x65, {0x03}, 0x01},
> + {0x66, {0x57}, 0x01},
> + {0x67, {0x03}, 0x01},
> + {0x68, {0x65}, 0x01},
> + {0x69, {0x03}, 0x01},
> + {0x6a, {0x77}, 0x01},
> + {0x6b, {0x03}, 0x01},
> + {0x6c, {0x85}, 0x01},
> + {0x6d, {0x03}, 0x01},
> + {0x6e, {0x8f}, 0x01},
> + {0x6f, {0x03}, 0x01},
> + {0x70, {0xcb}, 0x01},
> + {0x71, {0x00}, 0x01},
> + {0x72, {0x00}, 0x01},
> + {0x73, {0x00}, 0x01},
> + {0x74, {0x21}, 0x01},
> + {0x75, {0x00}, 0x01},
> + {0x76, {0x4c}, 0x01},
> + {0x77, {0x00}, 0x01},
> + {0x78, {0x6b}, 0x01},
> + {0x79, {0x00}, 0x01},
> + {0x7a, {0x85}, 0x01},
> + {0x7b, {0x00}, 0x01},
> + {0x7c, {0x9a}, 0x01},
> + {0x7d, {0x00}, 0x01},
> + {0x7e, {0xad}, 0x01},
> + {0x7f, {0x00}, 0x01},
> + {0x80, {0xbe}, 0x01},
> + {0x81, {0x00}, 0x01},
> + {0x82, {0xcd}, 0x01},
> + {0x83, {0x01}, 0x01},
> + {0x84, {0x01}, 0x01},
> + {0x85, {0x01}, 0x01},
> + {0x86, {0x29}, 0x01},
> + {0x87, {0x01}, 0x01},
> + {0x88, {0x68}, 0x01},
> + {0x89, {0x01}, 0x01},
> + {0x8a, {0x98}, 0x01},
> + {0x8b, {0x01}, 0x01},
> + {0x8c, {0xe5}, 0x01},
> + {0x8d, {0x02}, 0x01},
> + {0x8e, {0x1e}, 0x01},
> + {0x8f, {0x02}, 0x01},
> + {0x90, {0x30}, 0x01},
> + {0x91, {0x02}, 0x01},
> + {0x92, {0x52}, 0x01},
> + {0x93, {0x02}, 0x01},
> + {0x94, {0x88}, 0x01},
> + {0x95, {0x02}, 0x01},
> + {0x96, {0xaa}, 0x01},
> + {0x97, {0x02}, 0x01},
> + {0x98, {0xd7}, 0x01},
> + {0x99, {0x02}, 0x01},
> + {0x9a, {0xf7}, 0x01},
> + {0x9b, {0x03}, 0x01},
> + {0x9c, {0x21}, 0x01},
> + {0x9d, {0x03}, 0x01},
> + {0x9e, {0x2e}, 0x01},
> + {0x9f, {0x03}, 0x01},
> + {0xa0, {0x3d}, 0x01},
> + {0xa2, {0x03}, 0x01},
> + {0xa3, {0x4c}, 0x01},
> + {0xa4, {0x03}, 0x01},
> + {0xa5, {0x5e}, 0x01},
> + {0xa6, {0x03}, 0x01},
> + {0xa7, {0x71}, 0x01},
> + {0xa9, {0x03}, 0x01},
> + {0xaa, {0x86}, 0x01},
> + {0xab, {0x03}, 0x01},
> + {0xac, {0x94}, 0x01},
> + {0xad, {0x03}, 0x01},
> + {0xae, {0xfa}, 0x01},
> + {0xaf, {0x00}, 0x01},
> + {0xb0, {0x00}, 0x01},
> + {0xb1, {0x00}, 0x01},
> + {0xb2, {0x21}, 0x01},
> + {0xb3, {0x00}, 0x01},
> + {0xb4, {0x4c}, 0x01},
> + {0xb5, {0x00}, 0x01},
> + {0xb6, {0x6b}, 0x01},
> + {0xb7, {0x00}, 0x01},
> + {0xb8, {0x85}, 0x01},
> + {0xb9, {0x00}, 0x01},
> + {0xba, {0x9a}, 0x01},
> + {0xbb, {0x00}, 0x01},
> + {0xbc, {0xad}, 0x01},
> + {0xbd, {0x00}, 0x01},
> + {0xbe, {0xbe}, 0x01},
> + {0xbf, {0x00}, 0x01},
> + {0xc0, {0xcd}, 0x01},
> + {0xc1, {0x01}, 0x01},
> + {0xc2, {0x01}, 0x01},
> + {0xc3, {0x01}, 0x01},
> + {0xc4, {0x29}, 0x01},
> + {0xc5, {0x01}, 0x01},
> + {0xc6, {0x68}, 0x01},
> + {0xc7, {0x01}, 0x01},
> + {0xc8, {0x98}, 0x01},
> + {0xc9, {0x01}, 0x01},
> + {0xca, {0xe5}, 0x01},
> + {0xcb, {0x02}, 0x01},
> + {0xcc, {0x1e}, 0x01},
> + {0xcd, {0x02}, 0x01},
> + {0xce, {0x20}, 0x01},
> + {0xcf, {0x02}, 0x01},
> + {0xd0, {0x52}, 0x01},
> + {0xd1, {0x02}, 0x01},
> + {0xd2, {0x88}, 0x01},
> + {0xd3, {0x02}, 0x01},
> + {0xd4, {0xaa}, 0x01},
> + {0xd5, {0x02}, 0x01},
> + {0xd6, {0xd7}, 0x01},
> + {0xd7, {0x02}, 0x01},
> + {0xd8, {0xf7}, 0x01},
> + {0xd9, {0x03}, 0x01},
> + {0xda, {0x21}, 0x01},
> + {0xdb, {0x03}, 0x01},
> + {0xdc, {0x2e}, 0x01},
> + {0xdd, {0x03}, 0x01},
> + {0xde, {0x3d}, 0x01},
> + {0xdf, {0x03}, 0x01},
> + {0xe0, {0x4c}, 0x01},
> + {0xe1, {0x03}, 0x01},
> + {0xe2, {0x5e}, 0x01},
> + {0xe3, {0x03}, 0x01},
> + {0xe4, {0x71}, 0x01},
> + {0xe5, {0x03}, 0x01},
> + {0xe6, {0x86}, 0x01},
> + {0xe7, {0x03}, 0x01},
> + {0xe8, {0x94}, 0x01},
> + {0xe9, {0x03}, 0x01},
> + {0xea, {0xfa}, 0x01},
> /* Select CMD2 Page0 (Undocumented) */
> - {0xff, 0x01},
> + {0xff, {0x01}, 0x01},
> /* Reload CMD1: Don't reload default value to register */
> - {0xfb, 0x01},
> + {0xfb, {0x01}, 0x01},
> /* Select CMD2 Page1 (Undocumented) */
> - {0xff, 0x02},
> + {0xff, {0x02}, 0x01},
> /* Reload CMD1: Don't reload default value to register */
> - {0xfb, 0x01},
> + {0xfb, {0x01}, 0x01},
> /* Select CMD2 Page3 (Undocumented) */
> - {0xff, 0x04},
> + {0xff, {0x04}, 0x01},
> /* Reload CMD1: Don't reload default value to register */
> - {0xfb, 0x01},
> + {0xfb, {0x01}, 0x01},
> /* Select CMD1 */
> - {0xff, 0x00},
> - {0xd3, 0x22}, /* RGBMIPICTRL: VSYNC back porch = 34 */
> - {0xd4, 0x04}, /* RGBMIPICTRL: VSYNC front porch = 4 */
> + {0xff, {0x00}, 0x01},
> + {0xd3, {0x22}, 0x01}, /* RGBMIPICTRL: VSYNC back porch = 34 */
> + {0xd4, {0x04}, 0x01}, /* RGBMIPICTRL: VSYNC front porch = 4 */
> +};
> +
> +struct khadas_ts050_panel_data ts050_panel_data = {
> + .init_code = (struct khadas_ts050_panel_cmd *)ts050_init_code,
> + .len = ARRAY_SIZE(ts050_init_code)
> +};
> +
> +struct khadas_ts050_panel_data ts050v2_panel_data = {
> + .init_code = (struct khadas_ts050_panel_cmd *)ts050v2_init_code,
> + .len = ARRAY_SIZE(ts050v2_init_code)
> };
>
> static inline
> @@ -613,10 +671,11 @@ static int khadas_ts050_panel_prepare(struct drm_panel *panel)
>
> msleep(100);
>
> - for (i = 0; i < ARRAY_SIZE(init_code); i++) {
> + for (i = 0; i < khadas_ts050->panel_data->len; i++) {
> err = mipi_dsi_dcs_write(khadas_ts050->link,
> - init_code[i].cmd,
> - &init_code[i].data, 1);
> + khadas_ts050->panel_data->init_code[i].cmd,
> + &khadas_ts050->panel_data->init_code[i].data,
> + khadas_ts050->panel_data->init_code[i].size);
> if (err < 0) {
> dev_err(panel->dev, "failed write cmds: %d\n", err);
> goto poweroff;
> @@ -762,7 +821,8 @@ static const struct drm_panel_funcs khadas_ts050_panel_funcs = {
> };
>
> static const struct of_device_id khadas_ts050_of_match[] = {
> - { .compatible = "khadas,ts050", },
> + { .compatible = "khadas,ts050", .data = &ts050_panel_data, },
> + { .compatible = "khadas,ts050v2", .data = &ts050v2_panel_data, },
> { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(of, khadas_ts050_of_match);
> @@ -806,6 +866,13 @@ static int khadas_ts050_panel_probe(struct mipi_dsi_device *dsi)
> struct khadas_ts050_panel *khadas_ts050;
> int err;
>
> + const void *data = of_device_get_match_data(&dsi->dev);
> +
> + if (!data) {
> + dev_err(&dsi->dev, "No matching data\n");
> + return -ENODEV;
> + }
> +
> dsi->lanes = 4;
> dsi->format = MIPI_DSI_FMT_RGB888;
> dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
> @@ -816,6 +883,7 @@ static int khadas_ts050_panel_probe(struct mipi_dsi_device *dsi)
> if (!khadas_ts050)
> return -ENOMEM;
>
> + khadas_ts050->panel_data = (struct khadas_ts050_panel_data *)data;
> mipi_dsi_set_drvdata(dsi, khadas_ts050);
> khadas_ts050->link = dsi;
>

Reviewed-by: Neil Armstrong <[email protected]>

2024-04-18 01:16:02

by Jacobe Zang

[permalink] [raw]
Subject: Re: [PATCH v2 0/2] drm/panel: add Khadas TS050 V2 panel support

Hi Krzysztof,

> You must say that you ignored/dropped received tags.

I don't know which tags you mean and where should I fix. Please tell me in detail.

Best Regards
Jacobe



From:?Krzysztof Kozlowski <[email protected]>
Sent:?Monday, April 15, 2024 16:02
To:?Jacobe Zang <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>; daniel@ffwllch <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>
Cc:?Nick Xie <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>; [email protected] <[email protected]>
Subject:?Re: [PATCH v2 0/2] drm/panel: add Khadas TS050 V2 panel support
?
On 15/04/2024 05:14, Jacobe Zang wrote:
> Changes from v1 at [1]:
> - Fix name from "newts050" to "ts050v2"
> - Add specific description about controller change

You must say that you ignored/dropped received tags.

Best regards,
Krzysztof


2024-04-18 17:20:48

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v2 0/2] drm/panel: add Khadas TS050 V2 panel support

On 18/04/2024 03:14, Jacobe Zang wrote:
> Hi Krzysztof,
>
>> You must say that you ignored/dropped received tags.
>
> I don't know which tags you mean and where should I fix. Please tell me in detail.

https://elixir.bootlin.com/linux/v6.5-rc3/source/Documentation/process/submitting-patches.rst#L577

Also, please do not top-post.
https://elixir.bootlin.com/linux/v6.8-rc7/source/Documentation/process/submitting-patches.rst#L340

Best regards,
Krzysztof


2024-04-22 08:16:50

by Neil Armstrong

[permalink] [raw]
Subject: Re: [PATCH v2 0/2] drm/panel: add Khadas TS050 V2 panel support

Hi,

On Mon, 15 Apr 2024 11:14:06 +0800, Jacobe Zang wrote:
> Changes from v1 at [1]:
> - Fix name from "newts050" to "ts050v2"
> - Add specific description about controller change
>
> [1]https://patchwork.kernel.org/project/linux-amlogic/list/?series=842707
>
> Jacobe Zang (2):
> dt-bindings: panel-simple-dsi: add Khadas TS050 V2 panel bindings
> drm/panel: add Khadas TS050 V2 panel support
>
> [...]

Thanks, Applied to https://gitlab.freedesktop.org/drm/misc/kernel.git (drm-misc-next)

[1/2] dt-bindings: panel-simple-dsi: add Khadas TS050 V2 panel bindings
(no commit info)
[2/2] drm/panel: add Khadas TS050 V2 panel support
https://gitlab.freedesktop.org/drm/misc/kernel/-/commit/26f9339212db569310d4b0ef4284efcbb462a86f

--
Neil