Skip to contentSkip to conversation

Add Support for RK3566 Powkiddy RGB30

PATCH Applied Chris Morgan 6 participants 17 messages Oct 13, 2023 – Oct 17, 2023

Subsystems (6)
lore
Share & tools
lore
#0 lore raw

cover Add Support for RK3566 Powkiddy RGB30

From: Chris Morgan <[email protected]>

Add support for the Powkiddy RGB30 handheld gaming console.

Chris Morgan (5):
dt-bindings: vendor-prefixes: document Powkiddy
dt-bindings: panel: Add Powkiddy RGB30 panel compatible drm/panel: st7703: Add Powkiddy RGB30 Panel Support
dt-bindings: arm64: rockchip: add Powkiddy RGB30
arm64: dts: rockchip: add support for Powkiddy RGB30

 .../devicetree/bindings/arm/rockchip.yaml     |   5 +
 .../display/panel/rocktech,jh057n00900.yaml   |   2 +
 .../devicetree/bindings/vendor-prefixes.yaml  |   2 +
 arch/arm64/boot/dts/rockchip/Makefile         |   1 +
 .../dts/rockchip/rk3566-powkiddy-rgb30.dts    | 152 ++++++++++++++++++
 drivers/gpu/drm/panel/panel-sitronix-st7703.c |  89 ++++++++++
 6 files changed, 251 insertions(+)
 create mode 100644 arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb30.dts
Signature · 1 line
2.34.1
#1 lore raw

PATCH 1/5 dt-bindings: vendor-prefixes: document Powkiddy

From: Chris Morgan <[email protected]>

Document Powkiddy (https://powkiddy.com/).

---
 Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++
 1 file changed, 2 insertions(+)
Documentation/devicetree/bindings/vendor-prefixes.yaml +2 -0
index 573578db9509..25fd2dc378f5 100644
@@ -1081,6 +1081,8 @@ patternProperties:
     description: Powertip Tech. Corp.
   "^powervr,.*":
     description: PowerVR (deprecated, use img)
+  "^powkiddy,.*":
+    description: Powkiddy
   "^primux,.*":
     description: Primux Trading, S.L.
   "^probox2,.*":
Signature · 1 line
2.34.1
#3 lore raw

PATCH 2/5 dt-bindings: panel: Add Powkiddy RGB30 panel compatible

In reply to Chris Morgan

From: Chris Morgan <[email protected]>

The Powkiddy RGB30 panel is a 4 inch 720x720 MIPI-DSI LCD panel. It appears to be based on the ST7703 LCD controller (this is assumed from the init sequence similarity between this and other displays). Powkiddy would not share the part number or name for the display from the bill of materials and there were no obvious external markings, so name the panel for the device (Powkiddy RGB30).

---
 .../devicetree/bindings/display/panel/rocktech,jh057n00900.yaml | 2 ++
 1 file changed, 2 insertions(+)
Documentation/devicetree/bindings/display/panel/rocktech,jh057n00900.yaml +2 -0
index 5ea74426b1d5..97cccd8a8479 100644
@@ -22,6 +22,8 @@ properties:
     enum:
       # Anberic RG353V-V2 5.0" 640x480 TFT LCD panel
       - anbernic,rg353v-panel-v2
+      # Powkiddy RGB30 3.0" 720x720 TFT LCD panel
+      - powkiddy,rgb30-panel
       # Rocktech JH057N00900 5.5" 720x1440 TFT LCD panel
       - rocktech,jh057n00900
       # Xingbangda XBD599 5.99" 720x1440 TFT LCD panel
Signature · 1 line
2.34.1
Acked-by on v1 2/5
#4 lore raw

Re: [PATCH 2/5] dt-bindings: panel: Add Powkiddy RGB30 panel compatible

Quoted 8 lines · Chris Morgan

From: Chris Morgan <[email protected]>

The Powkiddy RGB30 panel is a 4 inch 720x720 MIPI-DSI LCD panel. It appears to be based on the ST7703 LCD controller (this is assumed from the init sequence similarity between this and other displays). Powkiddy would not share the part number or name for the display from the bill of materials and there were no obvious external markings, so name the panel for the device (Powkiddy RGB30).

Best regards,
Krzysztof

#5 lore raw

PATCH 3/5 drm/panel: st7703: Add Powkiddy RGB30 Panel Support

In reply to Chris Morgan

From: Chris Morgan <[email protected]>

The Powkiddy RGB30 4 inch panel is a 4 inch 720x720 DSI panel used in the Powkiddy RGB30 handheld gaming device. Add support for it.

TODO: The panel seems to not resume properly from suspend. I've confirmed on the other ST7703 based devices it works correctly.

---
 drivers/gpu/drm/panel/panel-sitronix-st7703.c | 89 +++++++++++++++++++
 1 file changed, 89 insertions(+)
drivers/gpu/drm/panel/panel-sitronix-st7703.c +89 -0
index 6a3945639535..a9892a4447fb 100644
@@ -433,6 +433,94 @@ static const struct st7703_panel_desc rg353v2_desc = {
 	.init_sequence = rg353v2_init_sequence,
 };
 
+static int rgb30panel_init_sequence(struct st7703 *ctx)
+{
+	struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
+
+	/* Init sequence extracted from Powkiddy RGB30 BSP kernel. */
+
+	/*
+	 * For some reason this specific panel must be taken out of sleep
+	 * before the full init sequence, or else it will not display.
+	 */
+	mipi_dsi_dcs_exit_sleep_mode(dsi);
+	msleep(250);
+
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETEXTC, 0xf1, 0x12, 0x83);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETMIPI, 0x33, 0x81, 0x05, 0xf9,
+			       0x0e, 0x0e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
+			       0x00, 0x00, 0x44, 0x25, 0x00, 0x90, 0x0a, 0x00,
+			       0x00, 0x01, 0x4f, 0x01, 0x00, 0x00, 0x37);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER_EXT, 0x25, 0x22, 0xf0,
+			       0x63);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_UNKNOWN_BF, 0x02, 0x11, 0x00);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETRGBIF, 0x10, 0x10, 0x28,
+			       0x28, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETSCR, 0x73, 0x73, 0x50, 0x50,
+			       0x00, 0x00, 0x12, 0x70, 0x00);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETVDC, 0x46);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETPANEL, 0x0b);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETCYC, 0x80);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETDISP, 0x3c, 0x12, 0x30);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETEQ, 0x07, 0x07, 0x0b, 0x0b,
+			       0x03, 0x0b, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
+			       0xc0, 0x10);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER, 0x36, 0x00, 0x32,
+			       0x32, 0x77, 0xf1, 0xcc, 0xcc, 0x77, 0x77, 0x33,
+			       0x33);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETBGP, 0x0a, 0x0a);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETVCOM, 0x88, 0x88);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP1, 0xc8, 0x10, 0x0a, 0x10,
+			       0x0f, 0xa1, 0x80, 0x12, 0x31, 0x23, 0x47, 0x86,
+			       0xa1, 0x80, 0x47, 0x08, 0x00, 0x00, 0x0d, 0x00,
+			       0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+			       0x48, 0x02, 0x8b, 0xaf, 0x46, 0x02, 0x88, 0x88,
+			       0x88, 0x88, 0x88, 0x48, 0x13, 0x8b, 0xaf, 0x57,
+			       0x13, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00,
+			       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			       0x00, 0x00, 0x00);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP2, 0x96, 0x12, 0x01, 0x01,
+			       0x01, 0x78, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+			       0x4f, 0x31, 0x8b, 0xa8, 0x31, 0x75, 0x88, 0x88,
+			       0x88, 0x88, 0x88, 0x4f, 0x20, 0x8b, 0xa8, 0x20,
+			       0x64, 0x88, 0x88, 0x88, 0x88, 0x88, 0x23, 0x00,
+			       0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+			       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			       0x00, 0x00, 0x40, 0xa1, 0x80, 0x00, 0x00, 0x00,
+			       0x00);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETGAMMA, 0x00, 0x0a, 0x0f,
+			       0x29, 0x3b, 0x3f, 0x42, 0x39, 0x06, 0x0d, 0x10,
+			       0x13, 0x15, 0x14, 0x15, 0x10, 0x17, 0x00, 0x0a,
+			       0x0f, 0x29, 0x3b, 0x3f, 0x42, 0x39, 0x06, 0x0d,
+			       0x10, 0x13, 0x15, 0x14, 0x15, 0x10, 0x17);
+
+	return 0;
+}
+
+static const struct drm_display_mode rgb30panel_mode = {
+	.hdisplay	= 720,
+	.hsync_start	= 720 + 45,
+	.hsync_end	= 720 + 45 + 4,
+	.htotal		= 720 + 45 + 4 + 45,
+	.vdisplay	= 720,
+	.vsync_start	= 720 + 15,
+	.vsync_end	= 720 + 15 + 3,
+	.vtotal		= 720 + 15 + 3 + 11,
+	.clock		= 36570,
+	.flags		= DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
+	.width_mm	= 76,
+	.height_mm	= 76,
+};
+
+static const struct st7703_panel_desc rgb30panel_desc = {
+	.mode = &rgb30panel_mode,
+	.lanes = 4,
+	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
+		      MIPI_DSI_MODE_NO_EOT_PACKET | MIPI_DSI_MODE_LPM,
+	.format = MIPI_DSI_FMT_RGB888,
+	.init_sequence = rgb30panel_init_sequence,
+};
+
 static int st7703_enable(struct drm_panel *panel)
 {
 	struct st7703 *ctx = panel_to_st7703(panel);
@@ -694,6 +782,7 @@ static void st7703_remove(struct mipi_dsi_device *dsi)
 
 static const struct of_device_id st7703_of_match[] = {
 	{ .compatible = "anbernic,rg353v-panel-v2", .data = &rg353v2_desc },
+	{ .compatible = "powkiddy,rgb30-panel", .data = &rgb30panel_desc },
 	{ .compatible = "rocktech,jh057n00900", .data = &jh057n00900_panel_desc },
 	{ .compatible = "xingbangda,xbd599", .data = &xbd599_desc },
 	{ /* sentinel */ }
Signature · 1 line
2.34.1
#6 lore raw

Re: [PATCH 3/5] drm/panel: st7703: Add Powkiddy RGB30 Panel Support

Hi Chris,

Quoted 7 lines · Chris Morgan

From: Chris Morgan <[email protected]>

The Powkiddy RGB30 4 inch panel is a 4 inch 720x720 DSI panel used in the Powkiddy RGB30 handheld gaming device. Add support for it.

TODO: The panel seems to not resume properly from suspend. I've confirmed on the other ST7703 based devices it works correctly.

Regarding drm-misc-next has improvements regarding this prompted by the PinePhone. Maybe that fixes suspend for you too?

Cheers,
-- Guido

Quoted 116 lines
---
 drivers/gpu/drm/panel/panel-sitronix-st7703.c | 89 +++++++++++++++++++
 1 file changed, 89 insertions(+)
drivers/gpu/drm/panel/panel-sitronix-st7703.c +89 -0
index 6a3945639535..a9892a4447fb 100644
@@ -433,6 +433,94 @@ static const struct st7703_panel_desc rg353v2_desc = {
 	.init_sequence = rg353v2_init_sequence,
 };
 
+static int rgb30panel_init_sequence(struct st7703 *ctx)
+{
+	struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
+
+	/* Init sequence extracted from Powkiddy RGB30 BSP kernel. */
+
+	/*
+	 * For some reason this specific panel must be taken out of sleep
+	 * before the full init sequence, or else it will not display.
+	 */
+	mipi_dsi_dcs_exit_sleep_mode(dsi);
+	msleep(250);
+
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETEXTC, 0xf1, 0x12, 0x83);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETMIPI, 0x33, 0x81, 0x05, 0xf9,
+			       0x0e, 0x0e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
+			       0x00, 0x00, 0x44, 0x25, 0x00, 0x90, 0x0a, 0x00,
+			       0x00, 0x01, 0x4f, 0x01, 0x00, 0x00, 0x37);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER_EXT, 0x25, 0x22, 0xf0,
+			       0x63);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_UNKNOWN_BF, 0x02, 0x11, 0x00);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETRGBIF, 0x10, 0x10, 0x28,
+			       0x28, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETSCR, 0x73, 0x73, 0x50, 0x50,
+			       0x00, 0x00, 0x12, 0x70, 0x00);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETVDC, 0x46);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETPANEL, 0x0b);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETCYC, 0x80);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETDISP, 0x3c, 0x12, 0x30);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETEQ, 0x07, 0x07, 0x0b, 0x0b,
+			       0x03, 0x0b, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
+			       0xc0, 0x10);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER, 0x36, 0x00, 0x32,
+			       0x32, 0x77, 0xf1, 0xcc, 0xcc, 0x77, 0x77, 0x33,
+			       0x33);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETBGP, 0x0a, 0x0a);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETVCOM, 0x88, 0x88);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP1, 0xc8, 0x10, 0x0a, 0x10,
+			       0x0f, 0xa1, 0x80, 0x12, 0x31, 0x23, 0x47, 0x86,
+			       0xa1, 0x80, 0x47, 0x08, 0x00, 0x00, 0x0d, 0x00,
+			       0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+			       0x48, 0x02, 0x8b, 0xaf, 0x46, 0x02, 0x88, 0x88,
+			       0x88, 0x88, 0x88, 0x48, 0x13, 0x8b, 0xaf, 0x57,
+			       0x13, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00,
+			       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			       0x00, 0x00, 0x00);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP2, 0x96, 0x12, 0x01, 0x01,
+			       0x01, 0x78, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+			       0x4f, 0x31, 0x8b, 0xa8, 0x31, 0x75, 0x88, 0x88,
+			       0x88, 0x88, 0x88, 0x4f, 0x20, 0x8b, 0xa8, 0x20,
+			       0x64, 0x88, 0x88, 0x88, 0x88, 0x88, 0x23, 0x00,
+			       0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+			       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			       0x00, 0x00, 0x40, 0xa1, 0x80, 0x00, 0x00, 0x00,
+			       0x00);
+	mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETGAMMA, 0x00, 0x0a, 0x0f,
+			       0x29, 0x3b, 0x3f, 0x42, 0x39, 0x06, 0x0d, 0x10,
+			       0x13, 0x15, 0x14, 0x15, 0x10, 0x17, 0x00, 0x0a,
+			       0x0f, 0x29, 0x3b, 0x3f, 0x42, 0x39, 0x06, 0x0d,
+			       0x10, 0x13, 0x15, 0x14, 0x15, 0x10, 0x17);
+
+	return 0;
+}
+
+static const struct drm_display_mode rgb30panel_mode = {
+	.hdisplay	= 720,
+	.hsync_start	= 720 + 45,
+	.hsync_end	= 720 + 45 + 4,
+	.htotal		= 720 + 45 + 4 + 45,
+	.vdisplay	= 720,
+	.vsync_start	= 720 + 15,
+	.vsync_end	= 720 + 15 + 3,
+	.vtotal		= 720 + 15 + 3 + 11,
+	.clock		= 36570,
+	.flags		= DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
+	.width_mm	= 76,
+	.height_mm	= 76,
+};
+
+static const struct st7703_panel_desc rgb30panel_desc = {
+	.mode = &rgb30panel_mode,
+	.lanes = 4,
+	.mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
+		      MIPI_DSI_MODE_NO_EOT_PACKET | MIPI_DSI_MODE_LPM,
+	.format = MIPI_DSI_FMT_RGB888,
+	.init_sequence = rgb30panel_init_sequence,
+};
+
 static int st7703_enable(struct drm_panel *panel)
 {
 	struct st7703 *ctx = panel_to_st7703(panel);
@@ -694,6 +782,7 @@ static void st7703_remove(struct mipi_dsi_device *dsi)
 
 static const struct of_device_id st7703_of_match[] = {
 	{ .compatible = "anbernic,rg353v-panel-v2", .data = &rg353v2_desc },
+	{ .compatible = "powkiddy,rgb30-panel", .data = &rgb30panel_desc },
 	{ .compatible = "rocktech,jh057n00900", .data = &jh057n00900_panel_desc },
 	{ .compatible = "xingbangda,xbd599", .data = &xbd599_desc },
 	{ /* sentinel */ }
Signature · 1 line
2.34.1
#7 lore raw

Re: [PATCH 3/5] drm/panel: st7703: Add Powkiddy RGB30 Panel Support

Confirmed that those pending patches DO fix the panel suspend issues. Thank you.

Quoted 134 lines · Guido Günther

Hi Chris,

Quoted 7 lines · Chris Morgan

From: Chris Morgan <[email protected]>

The Powkiddy RGB30 4 inch panel is a 4 inch 720x720 DSI panel used in the Powkiddy RGB30 handheld gaming device. Add support for it.

TODO: The panel seems to not resume properly from suspend. I've confirmed on the other ST7703 based devices it works correctly.

Regarding drm-misc-next has improvements regarding this prompted by the PinePhone. Maybe that fixes suspend for you too?

Cheers,
-- Guido

Quoted 116 lines
---
 drivers/gpu/drm/panel/panel-sitronix-st7703.c | 89 +++++++++++++++++++
 1 file changed, 89 insertions(+)
drivers/gpu/drm/panel/panel-sitronix-st7703.c +89 -1
index 6a3945639535..a9892a4447fb 100644
@@ -433,6 +433,94 @@ static const struct st7703_panel_desc rg353v2_desc = {
      .init_sequence = rg353v2_init_sequence,
 };
 
+static int rgb30panel_init_sequence(struct st7703 *ctx)
+{
+     struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
+
+     /* Init sequence extracted from Powkiddy RGB30 BSP kernel. */
+
+     /*
+      * For some reason this specific panel must be taken out of sleep
+      * before the full init sequence, or else it will not display.
+      */
+     mipi_dsi_dcs_exit_sleep_mode(dsi);
+     msleep(250);
+
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETEXTC, 0xf1, 0x12, 0x83);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETMIPI, 0x33, 0x81, 0x05, 0xf9,
+                            0x0e, 0x0e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
+                            0x00, 0x00, 0x44, 0x25, 0x00, 0x90, 0x0a, 0x00,
+                            0x00, 0x01, 0x4f, 0x01, 0x00, 0x00, 0x37);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER_EXT, 0x25, 0x22, 0xf0,
+                            0x63);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_UNKNOWN_BF, 0x02, 0x11, 0x00);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETRGBIF, 0x10, 0x10, 0x28,
+                            0x28, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETSCR, 0x73, 0x73, 0x50, 0x50,
+                            0x00, 0x00, 0x12, 0x70, 0x00);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETVDC, 0x46);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETPANEL, 0x0b);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETCYC, 0x80);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETDISP, 0x3c, 0x12, 0x30);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETEQ, 0x07, 0x07, 0x0b, 0x0b,
+                            0x03, 0x0b, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
+                            0xc0, 0x10);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER, 0x36, 0x00, 0x32,
+                            0x32, 0x77, 0xf1, 0xcc, 0xcc, 0x77, 0x77, 0x33,
+                            0x33);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETBGP, 0x0a, 0x0a);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETVCOM, 0x88, 0x88);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP1, 0xc8, 0x10, 0x0a, 0x10,
+                            0x0f, 0xa1, 0x80, 0x12, 0x31, 0x23, 0x47, 0x86,
+                            0xa1, 0x80, 0x47, 0x08, 0x00, 0x00, 0x0d, 0x00,
+                            0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+                            0x48, 0x02, 0x8b, 0xaf, 0x46, 0x02, 0x88, 0x88,
+                            0x88, 0x88, 0x88, 0x48, 0x13, 0x8b, 0xaf, 0x57,
+                            0x13, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00,
+                            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                            0x00, 0x00, 0x00);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP2, 0x96, 0x12, 0x01, 0x01,
+                            0x01, 0x78, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+                            0x4f, 0x31, 0x8b, 0xa8, 0x31, 0x75, 0x88, 0x88,
+                            0x88, 0x88, 0x88, 0x4f, 0x20, 0x8b, 0xa8, 0x20,
+                            0x64, 0x88, 0x88, 0x88, 0x88, 0x88, 0x23, 0x00,
+                            0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+                            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                            0x00, 0x00, 0x40, 0xa1, 0x80, 0x00, 0x00, 0x00,
+                            0x00);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETGAMMA, 0x00, 0x0a, 0x0f,
+                            0x29, 0x3b, 0x3f, 0x42, 0x39, 0x06, 0x0d, 0x10,
+                            0x13, 0x15, 0x14, 0x15, 0x10, 0x17, 0x00, 0x0a,
+                            0x0f, 0x29, 0x3b, 0x3f, 0x42, 0x39, 0x06, 0x0d,
+                            0x10, 0x13, 0x15, 0x14, 0x15, 0x10, 0x17);
+
+     return 0;
+}
+
+static const struct drm_display_mode rgb30panel_mode = {
+     .hdisplay       = 720,
+     .hsync_start    = 720 + 45,
+     .hsync_end      = 720 + 45 + 4,
+     .htotal         = 720 + 45 + 4 + 45,
+     .vdisplay       = 720,
+     .vsync_start    = 720 + 15,
+     .vsync_end      = 720 + 15 + 3,
+     .vtotal         = 720 + 15 + 3 + 11,
+     .clock          = 36570,
+     .flags          = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
+     .width_mm       = 76,
+     .height_mm      = 76,
+};
+
+static const struct st7703_panel_desc rgb30panel_desc = {
+     .mode = &rgb30panel_mode,
+     .lanes = 4,
+     .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
+                   MIPI_DSI_MODE_NO_EOT_PACKET | MIPI_DSI_MODE_LPM,
+     .format = MIPI_DSI_FMT_RGB888,
+     .init_sequence = rgb30panel_init_sequence,
+};
+
 static int st7703_enable(struct drm_panel *panel)
 {
      struct st7703 *ctx = panel_to_st7703(panel);
@@ -694,6 +782,7 @@ static void st7703_remove(struct mipi_dsi_device *dsi)
 
 static const struct of_device_id st7703_of_match[] = {
      { .compatible = "anbernic,rg353v-panel-v2", .data = &rg353v2_desc },
+     { .compatible = "powkiddy,rgb30-panel", .data = &rgb30panel_desc },
      { .compatible = "rocktech,jh057n00900", .data = &jh057n00900_panel_desc },
      { .compatible = "xingbangda,xbd599", .data = &xbd599_desc },
      { /* sentinel */ }
--

2.34.1

#8 lore raw

Re: [PATCH 3/5] drm/panel: st7703: Add Powkiddy RGB30 Panel Support

Quoted 1 line · Chris Morgan

Confirmed that those pending patches DO fix the panel suspend issues. Thank you.

Awesome, that's great to hear! Perhaps a "Tested-by" in the original LKML thread [1] could help with having the patch pulled sooner.

Links:
[1] https://lore.kernel.org/lkml/[email protected]/T/

Quoted 136 lines · Guido Günther
Quoted 124 lines

Hi Chris,

Quoted 7 lines · Chris Morgan

From: Chris Morgan <[email protected]>

The Powkiddy RGB30 4 inch panel is a 4 inch 720x720 DSI panel used in the Powkiddy RGB30 handheld gaming device. Add support for it.

TODO: The panel seems to not resume properly from suspend. I've confirmed on the other ST7703 based devices it works correctly.

Regarding drm-misc-next has improvements regarding this prompted by the PinePhone. Maybe that fixes suspend for you too?

Cheers,
-- Guido

Quoted 107 lines
---
 drivers/gpu/drm/panel/panel-sitronix-st7703.c | 89 +++++++++++++++++++
 1 file changed, 89 insertions(+)
drivers/gpu/drm/panel/panel-sitronix-st7703.c +88 -0
index 6a3945639535..a9892a4447fb 100644
@@ -433,6 +433,94 @@ static const struct st7703_panel_desc rg353v2_desc = {
      .init_sequence = rg353v2_init_sequence,
 };
 
+static int rgb30panel_init_sequence(struct st7703 *ctx)
+{
+     struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
+
+     /* Init sequence extracted from Powkiddy RGB30 BSP kernel. */
+
+     /*
+      * For some reason this specific panel must be taken out of sleep
+      * before the full init sequence, or else it will not display.
+      */
+     mipi_dsi_dcs_exit_sleep_mode(dsi);
+     msleep(250);
+
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETEXTC, 0xf1, 0x12, 0x83);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETMIPI, 0x33, 0x81, 0x05, 0xf9,
+                            0x0e, 0x0e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
+                            0x00, 0x00, 0x44, 0x25, 0x00, 0x90, 0x0a, 0x00,
+                            0x00, 0x01, 0x4f, 0x01, 0x00, 0x00, 0x37);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER_EXT, 0x25, 0x22, 0xf0,
+                            0x63);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_UNKNOWN_BF, 0x02, 0x11, 0x00);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETRGBIF, 0x10, 0x10, 0x28,
+                            0x28, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETSCR, 0x73, 0x73, 0x50, 0x50,
+                            0x00, 0x00, 0x12, 0x70, 0x00);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETVDC, 0x46);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETPANEL, 0x0b);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETCYC, 0x80);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETDISP, 0x3c, 0x12, 0x30);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETEQ, 0x07, 0x07, 0x0b, 0x0b,
+                            0x03, 0x0b, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
+                            0xc0, 0x10);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETPOWER, 0x36, 0x00, 0x32,
+                            0x32, 0x77, 0xf1, 0xcc, 0xcc, 0x77, 0x77, 0x33,
+                            0x33);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETBGP, 0x0a, 0x0a);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETVCOM, 0x88, 0x88);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP1, 0xc8, 0x10, 0x0a, 0x10,
+                            0x0f, 0xa1, 0x80, 0x12, 0x31, 0x23, 0x47, 0x86,
+                            0xa1, 0x80, 0x47, 0x08, 0x00, 0x00, 0x0d, 0x00,
+                            0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+                            0x48, 0x02, 0x8b, 0xaf, 0x46, 0x02, 0x88, 0x88,
+                            0x88, 0x88, 0x88, 0x48, 0x13, 0x8b, 0xaf, 0x57,
+                            0x13, 0x88, 0x88, 0x88, 0x88, 0x88, 0x00, 0x00,
+                            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                            0x00, 0x00, 0x00);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETGIP2, 0x96, 0x12, 0x01, 0x01,
+                            0x01, 0x78, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+                            0x4f, 0x31, 0x8b, 0xa8, 0x31, 0x75, 0x88, 0x88,
+                            0x88, 0x88, 0x88, 0x4f, 0x20, 0x8b, 0xa8, 0x20,
+                            0x64, 0x88, 0x88, 0x88, 0x88, 0x88, 0x23, 0x00,
+                            0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+                            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                            0x00, 0x00, 0x40, 0xa1, 0x80, 0x00, 0x00, 0x00,
+                            0x00);
+     mipi_dsi_dcs_write_seq(dsi, ST7703_CMD_SETGAMMA, 0x00, 0x0a, 0x0f,
+                            0x29, 0x3b, 0x3f, 0x42, 0x39, 0x06, 0x0d, 0x10,
+                            0x13, 0x15, 0x14, 0x15, 0x10, 0x17, 0x00, 0x0a,
+                            0x0f, 0x29, 0x3b, 0x3f, 0x42, 0x39, 0x06, 0x0d,
+                            0x10, 0x13, 0x15, 0x14, 0x15, 0x10, 0x17);
+
+     return 0;
+}
+
+static const struct drm_display_mode rgb30panel_mode = {
+     .hdisplay       = 720,
+     .hsync_start    = 720 + 45,
+     .hsync_end      = 720 + 45 + 4,
+     .htotal         = 720 + 45 + 4 + 45,
+     .vdisplay       = 720,
+     .vsync_start    = 720 + 15,
+     .vsync_end      = 720 + 15 + 3,
+     .vtotal         = 720 + 15 + 3 + 11,
+     .clock          = 36570,
+     .flags          = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
+     .width_mm       = 76,
+     .height_mm      = 76,
+};
+
+static const struct st7703_panel_desc rgb30panel_desc = {
+     .mode = &rgb30panel_mode,
+     .lanes = 4,
+     .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
+                   MIPI_DSI_MODE_NO_EOT_PACKET | MIPI_DSI_MODE_LPM,
+     .format = MIPI_DSI_FMT_RGB888,
+     .init_sequence = rgb30panel_init_sequence,
+};
+
 static int st7703_enable(struct drm_panel *panel)
 {
      struct st7703 *ctx = panel_to_st7703(panel);
@@ -694,6 +782,7 @@ static void st7703_remove(struct mipi_dsi_device *dsi)
 
Quoted 10 lines
Quoted 9 lines
drivers/gpu/drm/panel/panel-sitronix-st7703.c +1 -1
 static const struct of_device_id st7703_of_match[] = {
      { .compatible = "anbernic,rg353v-panel-v2", .data = &rg353v2_desc },
+     { .compatible = "powkiddy,rgb30-panel", .data = &rgb30panel_desc },
      { .compatible = "rocktech,jh057n00900", .data = &jh057n00900_panel_desc },
      { .compatible = "xingbangda,xbd599", .data = &xbd599_desc },
      { /* sentinel */ }
--

2.34.1

Quoted 4 lines

_______________________________________________
Linux-rockchip mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-rockchip

_______________________________________________
Linux-rockchip mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-rockchip

maintainer
#9 lore raw

Re: [PATCH 3/5] drm/panel: st7703: Add Powkiddy RGB30 Panel Support

Hi,

Am Montag, 16. Oktober 2023, 18:07:52 CEST schrieb Dragan Simic:

Quoted 24 lines · Chris Morgan
Quoted 2 lines

Confirmed that those pending patches DO fix the panel suspend issues. Thank you.

Awesome, that's great to hear! Perhaps a "Tested-by" in the original LKML thread [1] could help with having the patch pulled sooner.

Links:
[1]
https://lore.kernel.org/lkml/[email protected]/T/

Quoted 12 lines
Quoted 10 lines · Guido Günther

Hi Chris,

Quoted 7 lines · Chris Morgan

From: Chris Morgan <[email protected]>

The Powkiddy RGB30 4 inch panel is a 4 inch 720x720 DSI panel used in the Powkiddy RGB30 handheld gaming device. Add support for it.

TODO: The panel seems to not resume properly from suspend. I've confirmed on the other ST7703 based devices it works correctly.

so this TODO item could go away, right?
I can remove it when applying the patch, just want to make sure all review comments are addressed - only the suspend thing it seems.

Thanks
Heiko

#10 lore raw

Re: [PATCH 3/5] drm/panel: st7703: Add Powkiddy RGB30 Panel Support

Quoted 25 lines · Heiko Stübner

Hi,

Am Montag, 16. Oktober 2023, 18:07:52 CEST schrieb Dragan Simic:

Quoted 22 lines · Chris Morgan
Quoted 2 lines

Confirmed that those pending patches DO fix the panel suspend issues. Thank you.

Awesome, that's great to hear! Perhaps a "Tested-by" in the original LKML thread [1] could help with having the patch pulled sooner.

Links:
[1]
https://lore.kernel.org/lkml/[email protected]/T/

Quoted 10 lines
Quoted 8 lines · Guido Günther

Hi Chris,

Quoted 5 lines · Chris Morgan

From: Chris Morgan <[email protected]>

The Powkiddy RGB30 4 inch panel is a 4 inch 720x720 DSI panel used in the Powkiddy RGB30 handheld gaming device. Add support for it.

Quoted 6 lines
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines

TODO: The panel seems to not resume properly from suspend. I've confirmed on the other ST7703 based devices it works correctly.

so this TODO item could go away, right?
I can remove it when applying the patch, just want to make sure all review comments are addressed - only the suspend thing it seems.

That is correct, but let me send a v2 of this instead. I'll remove this verbiage among other fixes. End users wanted me to see if I could get this panel to run at precisely 60hz, which I believe I am able to do with the addition of a new PLL clock in clk_rk3568. I believe I have taken every constraint detailed in the datasheet to heart for the new frequency I'll be requesting. By using the frequency of 292500000 for the VPLL I can get the panel running at 59.969hz which in my view is close enough to the ideal 59.98hz.

I also accidentally left the UART2 active even though this device has no exposed UART port, so I need to fix that too by disabling it.

Lastly I'll add my tested by to the dri-devel patches as well.

Thank you,
Chris

Quoted 6 lines

Thanks
Heiko

maintainer
#11 lore raw

Re: [PATCH 3/5] drm/panel: st7703: Add Powkiddy RGB30 Panel Support

Hi Chris,

Am Montag, 16. Oktober 2023, 20:26:58 CEST schrieb Chris Morgan:

Quoted 42 lines · Heiko Stübner
Quoted 25 lines

Hi,

Am Montag, 16. Oktober 2023, 18:07:52 CEST schrieb Dragan Simic:

Quoted 22 lines · Chris Morgan
Quoted 2 lines

Confirmed that those pending patches DO fix the panel suspend issues. Thank you.

Awesome, that's great to hear! Perhaps a "Tested-by" in the original LKML thread [1] could help with having the patch pulled sooner.

Links:
[1]
https://lore.kernel.org/lkml/[email protected]/T/

Quoted 10 lines
Quoted 8 lines · Guido Günther

Hi Chris,

Quoted 5 lines · Chris Morgan

From: Chris Morgan <[email protected]>

The Powkiddy RGB30 4 inch panel is a 4 inch 720x720 DSI panel used in the Powkiddy RGB30 handheld gaming device. Add support for it.

Quoted 6 lines
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines

TODO: The panel seems to not resume properly from suspend. I've confirmed on the other ST7703 based devices it works correctly.

so this TODO item could go away, right?
I can remove it when applying the patch, just want to make sure all review comments are addressed - only the suspend thing it seems.

That is correct, but let me send a v2 of this instead. I'll remove this verbiage among other fixes. End users wanted me to see if I could get this panel to run at precisely 60hz, which I believe I am able to do with the addition of a new PLL clock in clk_rk3568. I believe I have taken every constraint detailed in the datasheet to heart for the new frequency I'll be requesting. By using the frequency of 292500000 for the VPLL I can get the panel running at 59.969hz which in my view is close enough to the ideal 59.98hz.

Quoted 4 lines

I also accidentally left the UART2 active even though this device has no exposed UART port, so I need to fix that too by disabling it.

Lastly I'll add my tested by to the dri-devel patches as well.

too late ;-)

Looks like your mail and me applying the series happened at a similar time and I just saw your mail.

So if you want to change the dts now, please do a followup patch.

Thanks
Heiko

#12 lore raw

PATCH 4/5 dt-bindings: arm64: rockchip: add Powkiddy RGB30

In reply to Chris Morgan

From: Chris Morgan <[email protected]>

The Powkiddy RGB30 is a portable handheld console from Powkiddy which uses the Rockchip RK3566 SoC.

---
 Documentation/devicetree/bindings/arm/rockchip.yaml | 5 +++++
 1 file changed, 5 insertions(+)
Documentation/devicetree/bindings/arm/rockchip.yaml +5 -0
index ca5389862887..a349bf4da6bc 100644
@@ -669,6 +669,11 @@ properties:
           - const: pine64,soquartz
           - const: rockchip,rk3566
 
+      - description: Powkiddy RGB30
+        items:
+          - const: powkiddy,rgb30
+          - const: rockchip,rk3566
+
       - description: Radxa Compute Module 3(CM3)
         items:
           - enum:
Signature · 1 line
2.34.1
#14 lore raw

PATCH 5/5 arm64: dts: rockchip: add support for Powkiddy RGB30

In reply to Chris Morgan

From: Chris Morgan <[email protected]>

The Powkiddy RGB30 is a portable game device based on the Rockchip RK3566 SoC. It has GPIO buttons on the face and sides for input, stereo speakers, a 720x720 4 inch DSI display, a USB-C host port and a USB-C peripheral port, dual SD card slots, WiFi, Bluetooth, and 1GB of RAM.

Working/Tested:
- SDMMC
- UART (for debugging)
- Buttons
- Charging/battery/PMIC
- Speaker/Headphones
- USB
- WiFi
- Bluetooth
- Display (at 59.04hz)

Not Working/TODO:
- Display does not resume from suspend properly. I'm working with the manufacturer to resolve this.

---
 arch/arm64/boot/dts/rockchip/Makefile         |   1 +
 .../dts/rockchip/rk3566-powkiddy-rgb30.dts    | 152 ++++++++++++++++++
 2 files changed, 153 insertions(+)
 create mode 100644 arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb30.dts
arch/arm64/boot/dts/rockchip/Makefile +1 -0
index e7728007fd1b..3f01b429a3aa 100644
@@ -77,6 +77,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-anbernic-rg353vs.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-anbernic-rg503.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-pinenote-v1.1.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-pinenote-v1.2.dtb
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-powkiddy-rgb30.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-quartz64-a.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-quartz64-b.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-radxa-cm3-io.dtb
arch/arm64/boot/dts/rockchip/rk3566-powkiddy-rgb30.dts new file +152 -0

152 lines not on this page · raw message

Signature · 1 line
2.34.1
maintainer Applied
#15 lore raw

Re: (subset) [PATCH 0/5] Add Support for RK3566 Powkiddy RGB30

In reply to Chris Morgan
Quoted 4 lines · Chris Morgan

From: Chris Morgan <[email protected]>

Add support for the Powkiddy RGB30 handheld gaming console.

Quoted 8 lines

Chris Morgan (5):
dt-bindings: vendor-prefixes: document Powkiddy
dt-bindings: panel: Add Powkiddy RGB30 panel compatible drm/panel: st7703: Add Powkiddy RGB30 Panel Support
dt-bindings: arm64: rockchip: add Powkiddy RGB30
arm64: dts: rockchip: add support for Powkiddy RGB30

[...]

Applied, thanks!

[1/5] dt-bindings: vendor-prefixes: document Powkiddy

      commit: 00e395c8edf7fb6fa0830125d91c2b4bc381eefd
[2/5] dt-bindings: panel: Add Powkiddy RGB30 panel compatible
      commit: daee0320a13724e5a584726b693eee87bbd96172
[3/5] drm/panel: st7703: Add Powkiddy RGB30 Panel Support
      commit: 636a989eb4d022e1756009592445aedaaf7424d8

Best regards,

Signature · 1 line
Heiko Stuebner <[email protected]>
maintainer Applied
#16 lore raw

Re: (subset) [PATCH 0/5] Add Support for RK3566 Powkiddy RGB30

In reply to Chris Morgan
Quoted 4 lines · Chris Morgan

From: Chris Morgan <[email protected]>

Add support for the Powkiddy RGB30 handheld gaming console.

Quoted 8 lines

Chris Morgan (5):
dt-bindings: vendor-prefixes: document Powkiddy
dt-bindings: panel: Add Powkiddy RGB30 panel compatible drm/panel: st7703: Add Powkiddy RGB30 Panel Support
dt-bindings: arm64: rockchip: add Powkiddy RGB30
arm64: dts: rockchip: add support for Powkiddy RGB30

[...]

Applied, thanks!

[4/5] dt-bindings: arm64: rockchip: add Powkiddy RGB30

      commit: 64d0de4f65c2951ccdc7a7aebe8a7e3455946f5f
[5/5] arm64: dts: rockchip: add support for Powkiddy RGB30
      commit: 1e9ac3e8a6a9d4da9efbad2d8e95cc1140e0e23f

Best regards,

Signature · 1 line
Heiko Stuebner <[email protected]>