LKML Archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/2] drm/panel: add Khadas TS050 V2 panel support
@ 2024-04-15  3:14 Jacobe Zang
  2024-04-15  3:14 ` [PATCH v2 1/2] dt-bindings: panel-simple-dsi: add Khadas TS050 V2 panel bindings Jacobe Zang
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Jacobe Zang @ 2024-04-15  3:14 UTC (permalink / raw
  To: neil.armstrong, airlied, daniel, maarten.lankhorst, mripard,
	tzimmermann, robh, krzysztof.kozlowski+dt, conor+dt
  Cc: nick, linux-amlogic, quic_jesszhan, sam, thierry.reding,
	dri-devel, devicetree, linux-kernel, Jacobe Zang

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


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v2 1/2] dt-bindings: panel-simple-dsi: add Khadas TS050 V2 panel bindings
  2024-04-15  3:14 [PATCH v2 0/2] drm/panel: add Khadas TS050 V2 panel support Jacobe Zang
@ 2024-04-15  3:14 ` Jacobe Zang
  2024-04-15  8:01   ` Krzysztof Kozlowski
  2024-04-15  3:14 ` [PATCH v2 2/2] drm/panel: add Khadas TS050 V2 panel support Jacobe Zang
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Jacobe Zang @ 2024-04-15  3:14 UTC (permalink / raw
  To: neil.armstrong, airlied, daniel, maarten.lankhorst, mripard,
	tzimmermann, robh, krzysztof.kozlowski+dt, conor+dt
  Cc: nick, linux-amlogic, quic_jesszhan, sam, thierry.reding,
	dri-devel, devicetree, linux-kernel, Jacobe Zang

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 <jacobe.zang@wesion.com>
---
 .../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


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 2/2] drm/panel: add Khadas TS050 V2 panel support
  2024-04-15  3:14 [PATCH v2 0/2] drm/panel: add Khadas TS050 V2 panel support Jacobe Zang
  2024-04-15  3:14 ` [PATCH v2 1/2] dt-bindings: panel-simple-dsi: add Khadas TS050 V2 panel bindings Jacobe Zang
@ 2024-04-15  3:14 ` Jacobe Zang
  2024-04-16 17:44   ` neil.armstrong
  2024-04-15  8:02 ` [PATCH v2 0/2] " Krzysztof Kozlowski
  2024-04-22  8:13 ` Neil Armstrong
  3 siblings, 1 reply; 9+ messages in thread
From: Jacobe Zang @ 2024-04-15  3:14 UTC (permalink / raw
  To: neil.armstrong, airlied, daniel, maarten.lankhorst, mripard,
	tzimmermann, robh, krzysztof.kozlowski+dt, conor+dt
  Cc: nick, linux-amlogic, quic_jesszhan, sam, thierry.reding,
	dri-devel, devicetree, linux-kernel, Jacobe Zang

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 <jacobe.zang@wesion.com>
---
 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


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 1/2] dt-bindings: panel-simple-dsi: add Khadas TS050 V2 panel bindings
  2024-04-15  3:14 ` [PATCH v2 1/2] dt-bindings: panel-simple-dsi: add Khadas TS050 V2 panel bindings Jacobe Zang
@ 2024-04-15  8:01   ` Krzysztof Kozlowski
  0 siblings, 0 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2024-04-15  8:01 UTC (permalink / raw
  To: Jacobe Zang, neil.armstrong, airlied, daniel, maarten.lankhorst,
	mripard, tzimmermann, robh, krzysztof.kozlowski+dt, conor+dt
  Cc: nick, linux-amlogic, quic_jesszhan, sam, thierry.reding,
	dri-devel, devicetree, linux-kernel

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 <krzk@kernel.org>


---

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


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 0/2] drm/panel: add Khadas TS050 V2 panel support
  2024-04-15  3:14 [PATCH v2 0/2] drm/panel: add Khadas TS050 V2 panel support Jacobe Zang
  2024-04-15  3:14 ` [PATCH v2 1/2] dt-bindings: panel-simple-dsi: add Khadas TS050 V2 panel bindings Jacobe Zang
  2024-04-15  3:14 ` [PATCH v2 2/2] drm/panel: add Khadas TS050 V2 panel support Jacobe Zang
@ 2024-04-15  8:02 ` Krzysztof Kozlowski
  2024-04-18  1:14   ` Jacobe Zang
  2024-04-22  8:13 ` Neil Armstrong
  3 siblings, 1 reply; 9+ messages in thread
From: Krzysztof Kozlowski @ 2024-04-15  8:02 UTC (permalink / raw
  To: Jacobe Zang, neil.armstrong, airlied, daniel, maarten.lankhorst,
	mripard, tzimmermann, robh, krzysztof.kozlowski+dt, conor+dt
  Cc: nick, linux-amlogic, quic_jesszhan, sam, thierry.reding,
	dri-devel, devicetree, linux-kernel

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


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 2/2] drm/panel: add Khadas TS050 V2 panel support
  2024-04-15  3:14 ` [PATCH v2 2/2] drm/panel: add Khadas TS050 V2 panel support Jacobe Zang
@ 2024-04-16 17:44   ` neil.armstrong
  0 siblings, 0 replies; 9+ messages in thread
From: neil.armstrong @ 2024-04-16 17:44 UTC (permalink / raw
  To: Jacobe Zang, airlied, daniel, maarten.lankhorst, mripard,
	tzimmermann, robh, krzysztof.kozlowski+dt, conor+dt
  Cc: nick, linux-amlogic, quic_jesszhan, sam, thierry.reding,
	dri-devel, devicetree, linux-kernel

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 <jacobe.zang@wesion.com>
> ---
>   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 <neil.armstrong@linaro.org>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 0/2] drm/panel: add Khadas TS050 V2 panel support
  2024-04-15  8:02 ` [PATCH v2 0/2] " Krzysztof Kozlowski
@ 2024-04-18  1:14   ` Jacobe Zang
  2024-04-18 17:20     ` Krzysztof Kozlowski
  0 siblings, 1 reply; 9+ messages in thread
From: Jacobe Zang @ 2024-04-18  1:14 UTC (permalink / raw
  To: Krzysztof Kozlowski, neil.armstrong@linaro.org, airlied@gmail.com,
	daniel@ffwll.ch, maarten.lankhorst@linux.intel.com,
	mripard@kernel.org, tzimmermann@suse.de, robh@kernel.org,
	krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org
  Cc: Nick Xie, linux-amlogic@lists.infradead.org,
	quic_jesszhan@quicinc.com, sam@ravnborg.org,
	thierry.reding@gmail.com, dri-devel@lists.freedesktop.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org

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 <krzysztof.kozlowski@linaro.org>
Sent: Monday, April 15, 2024 16:02
To: Jacobe Zang <jacobe.zang@wesion.com>; neil.armstrong@linaro.org <neil.armstrong@linaro.org>; airlied@gmail.com <airlied@gmail.com>; daniel@ffwll.ch <daniel@ffwll.ch>; maarten.lankhorst@linux.intel.com <maarten.lankhorst@linux.intel.com>; mripard@kernel.org <mripard@kernel.org>; tzimmermann@suse.de <tzimmermann@suse.de>; robh@kernel.org <robh@kernel.org>; krzysztof.kozlowski+dt@linaro.org <krzysztof.kozlowski+dt@linaro.org>; conor+dt@kernel.org <conor+dt@kernel.org>
Cc: Nick Xie <nick@khadas.com>; linux-amlogic@lists.infradead.org <linux-amlogic@lists.infradead.org>; quic_jesszhan@quicinc.com <quic_jesszhan@quicinc.com>; sam@ravnborg.org <sam@ravnborg.org>; thierry.reding@gmail.com <thierry.reding@gmail.com>; dri-devel@lists.freedesktop.org <dri-devel@lists.freedesktop.org>; devicetree@vger.kernel.org <devicetree@vger.kernel.org>; linux-kernel@vger.kernel.org <linux-kernel@vger.kernel.org>
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


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 0/2] drm/panel: add Khadas TS050 V2 panel support
  2024-04-18  1:14   ` Jacobe Zang
@ 2024-04-18 17:20     ` Krzysztof Kozlowski
  0 siblings, 0 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2024-04-18 17:20 UTC (permalink / raw
  To: Jacobe Zang, neil.armstrong@linaro.org, airlied@gmail.com,
	daniel@ffwll.ch, maarten.lankhorst@linux.intel.com,
	mripard@kernel.org, tzimmermann@suse.de, robh@kernel.org,
	krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org
  Cc: Nick Xie, linux-amlogic@lists.infradead.org,
	quic_jesszhan@quicinc.com, sam@ravnborg.org,
	thierry.reding@gmail.com, dri-devel@lists.freedesktop.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org

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


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 0/2] drm/panel: add Khadas TS050 V2 panel support
  2024-04-15  3:14 [PATCH v2 0/2] drm/panel: add Khadas TS050 V2 panel support Jacobe Zang
                   ` (2 preceding siblings ...)
  2024-04-15  8:02 ` [PATCH v2 0/2] " Krzysztof Kozlowski
@ 2024-04-22  8:13 ` Neil Armstrong
  3 siblings, 0 replies; 9+ messages in thread
From: Neil Armstrong @ 2024-04-22  8:13 UTC (permalink / raw
  To: airlied, daniel, maarten.lankhorst, mripard, tzimmermann, robh,
	krzysztof.kozlowski+dt, conor+dt, Jacobe Zang
  Cc: nick, linux-amlogic, quic_jesszhan, sam, thierry.reding,
	dri-devel, devicetree, linux-kernel

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


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2024-04-22  8:13 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-15  3:14 [PATCH v2 0/2] drm/panel: add Khadas TS050 V2 panel support Jacobe Zang
2024-04-15  3:14 ` [PATCH v2 1/2] dt-bindings: panel-simple-dsi: add Khadas TS050 V2 panel bindings Jacobe Zang
2024-04-15  8:01   ` Krzysztof Kozlowski
2024-04-15  3:14 ` [PATCH v2 2/2] drm/panel: add Khadas TS050 V2 panel support Jacobe Zang
2024-04-16 17:44   ` neil.armstrong
2024-04-15  8:02 ` [PATCH v2 0/2] " Krzysztof Kozlowski
2024-04-18  1:14   ` Jacobe Zang
2024-04-18 17:20     ` Krzysztof Kozlowski
2024-04-22  8:13 ` Neil Armstrong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).