* [PATCH v2 1/3] dt-bindings: display: panel: ilitek,ili9488: make the port optional
2026-11-09 16:07 [PATCH v2 0/3] drm/panel: ilitek-ili9488: add the PocketGo S30 panel Romain TISSERAND
@ 2026-11-09 16:07 ` Romain TISSERAND
2026-11-09 16:07 ` [PATCH v2 2/3] dt-bindings: display: panel: ilitek,ili9488: add the PocketGo S30 panel Romain TISSERAND
2026-11-09 16:07 ` [PATCH v2 3/3] drm/panel: ilitek-ili9488: " Romain TISSERAND
2 siblings, 0 replies; 4+ messages in thread
From: Romain TISSERAND @ 2026-11-09 16:07 UTC (permalink / raw)
To: Igor Reznichenko, Neil Armstrong, Jessica Zhang
Cc: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, dri-devel, devicetree, linux-kernel,
sashiko-reviews
The panel is a MIPI-DSI peripheral, a child node of its DSI host, and the
driver does not use a graph port. A port is only needed when the host
links its panel through the graph; other DSI hosts, such as the Allwinner
sun6i-a31-mipi-dsi one, link the child node and have no output port to
point at. The PinePhone panel is described that way on the same host,
without a port.
Keep the port allowed (panel-common) but no longer required, as for other
DSI panels such as ilitek,ili9881c.
Reviewed-by: Igor Reznichenko <igor@reznichenko.net>
Signed-off-by: Romain TISSERAND <romain.tisserand@gmail.com>
---
.../devicetree/bindings/display/panel/ilitek,ili9488.yaml | 1 -
1 file changed, 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/display/panel/ilitek,ili9488.yaml b/Documentation/devicetree/bindings/display/panel/ilitek,ili9488.yaml
index ea7449273022..016a573893b7 100644
--- a/Documentation/devicetree/bindings/display/panel/ilitek,ili9488.yaml
+++ b/Documentation/devicetree/bindings/display/panel/ilitek,ili9488.yaml
@@ -32,7 +32,6 @@ required:
- iovcc-supply
- reset-gpios
- backlight
- - port
unevaluatedProperties: false
--
2.43.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 2/3] dt-bindings: display: panel: ilitek,ili9488: add the PocketGo S30 panel
2026-11-09 16:07 [PATCH v2 0/3] drm/panel: ilitek-ili9488: add the PocketGo S30 panel Romain TISSERAND
2026-11-09 16:07 ` [PATCH v2 1/3] dt-bindings: display: panel: ilitek,ili9488: make the port optional Romain TISSERAND
@ 2026-11-09 16:07 ` Romain TISSERAND
2026-11-09 16:07 ` [PATCH v2 3/3] drm/panel: ilitek-ili9488: " Romain TISSERAND
2 siblings, 0 replies; 4+ messages in thread
From: Romain TISSERAND @ 2026-11-09 16:07 UTC (permalink / raw)
To: Igor Reznichenko, Neil Armstrong, Jessica Zhang
Cc: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, dri-devel, devicetree, linux-kernel,
sashiko-reviews
The Miyoo PocketGo S30 handheld has a 320x480 1-lane MIPI-DSI panel
built around an Ilitek ILI9488.
Reviewed-by: Igor Reznichenko <igor@reznichenko.net>
Signed-off-by: Romain TISSERAND <romain.tisserand@gmail.com>
---
.../devicetree/bindings/display/panel/ilitek,ili9488.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/display/panel/ilitek,ili9488.yaml b/Documentation/devicetree/bindings/display/panel/ilitek,ili9488.yaml
index 016a573893b7..2908808393aa 100644
--- a/Documentation/devicetree/bindings/display/panel/ilitek,ili9488.yaml
+++ b/Documentation/devicetree/bindings/display/panel/ilitek,ili9488.yaml
@@ -17,6 +17,7 @@ properties:
items:
- enum:
- focuslcds,e35gh-i-mw800cb
+ - miyoo,pocketgo-s30-panel
- const: ilitek,ili9488
reg:
--
2.43.0
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH v2 3/3] drm/panel: ilitek-ili9488: add the PocketGo S30 panel
2026-11-09 16:07 [PATCH v2 0/3] drm/panel: ilitek-ili9488: add the PocketGo S30 panel Romain TISSERAND
2026-11-09 16:07 ` [PATCH v2 1/3] dt-bindings: display: panel: ilitek,ili9488: make the port optional Romain TISSERAND
2026-11-09 16:07 ` [PATCH v2 2/3] dt-bindings: display: panel: ilitek,ili9488: add the PocketGo S30 panel Romain TISSERAND
@ 2026-11-09 16:07 ` Romain TISSERAND
2 siblings, 0 replies; 4+ messages in thread
From: Romain TISSERAND @ 2026-11-09 16:07 UTC (permalink / raw)
To: Igor Reznichenko, Neil Armstrong, Jessica Zhang
Cc: Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Airlie, Simona Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, dri-devel, devicetree, linux-kernel,
sashiko-reviews
The Miyoo PocketGo S30 handheld (Allwinner A33) has a 320x480 1-lane
MIPI-DSI panel built around an Ilitek ILI9488.
The init sequence is the stock kernel's, read back from the running
stock system. It differs from the E35GH-I-MW800CB sequence only in VCOM
(0x26 instead of 0x25), the display function control (2 parameters
instead of 3) and the position of the inversion command. The interface
pixel format (COLMOD) is kept at the stock value.
Timings and video mode are from the stock configuration: 12 MHz pixel
clock, htotal 382, vtotal 524, active low sync (lcd_hv_sync_polarity 0),
non-burst video mode with sync pulses and without EoT packets.
Reviewed-by: Igor Reznichenko <igor@reznichenko.net>
Signed-off-by: Romain TISSERAND <romain.tisserand@gmail.com>
---
drivers/gpu/drm/panel/panel-ilitek-ili9488.c | 55 ++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9488.c b/drivers/gpu/drm/panel/panel-ilitek-ili9488.c
index 6ab8ae72abbf..29b869a6e909 100644
--- a/drivers/gpu/drm/panel/panel-ilitek-ili9488.c
+++ b/drivers/gpu/drm/panel/panel-ilitek-ili9488.c
@@ -86,6 +86,50 @@ static const struct drm_display_mode e35gh_i_mw800cb_display_mode = {
.type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
};
+static void pocketgo_s30_init(struct mipi_dsi_multi_context *ctx)
+{
+ /* Gamma control 1,2 */
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xE0, 0x00, 0x10, 0x14, 0x01, 0x0E, 0x04, 0x33,
+ 0x56, 0x48, 0x03, 0x0C, 0x0B, 0x2B, 0x34, 0x0F);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xE1, 0x00, 0x12, 0x18, 0x05, 0x12, 0x06, 0x40,
+ 0x34, 0x57, 0x06, 0x10, 0x0C, 0x3B, 0x3F, 0x0F);
+ /* Power control 1,2 */
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xC0, 0x0F, 0x0C);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xC1, 0x41);
+ /* VCOM Control */
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xC5, 0x00, 0x26, 0x80);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0x36, 0x48);
+ /* Interface pixel format 18bpp */
+ mipi_dsi_dcs_write_seq_multi(ctx, 0x3A, 0x66);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xB0, 0x00);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xB1, 0xA0);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xB4, 0x02);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xB6, 0x02, 0x02);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xE9, 0x00);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0x21);
+ mipi_dsi_dcs_write_seq_multi(ctx, 0xF7, 0xA9, 0x51, 0x2C, 0x82);
+}
+
+static const struct drm_display_mode pocketgo_s30_display_mode = {
+ .clock = 12000,
+
+ .hdisplay = 320,
+ .hsync_start = 320 + 22,
+ .hsync_end = 320 + 22 + 12,
+ .htotal = 320 + 22 + 12 + 28,
+
+ .vdisplay = 480,
+ .vsync_start = 480 + 22,
+ .vsync_end = 480 + 22 + 4,
+ .vtotal = 480 + 22 + 4 + 18,
+
+ .width_mm = 49,
+ .height_mm = 74,
+
+ .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
+ .type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
+};
+
static inline struct ili9488 *panel_to_ili9488(struct drm_panel *panel)
{
return container_of(panel, struct ili9488, panel);
@@ -269,8 +313,19 @@ static const struct ili9488_desc e35gh_i_mw800cb_desc = {
.bpc = 6,
};
+static const struct ili9488_desc pocketgo_s30_desc = {
+ .init_sequence = pocketgo_s30_init,
+ .display_mode = &pocketgo_s30_display_mode,
+ .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
+ MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_NO_EOT_PACKET,
+ .format = MIPI_DSI_FMT_RGB888,
+ .lanes = 1,
+ .bpc = 6,
+};
+
static const struct of_device_id ili9488_of_match[] = {
{ .compatible = "focuslcds,e35gh-i-mw800cb", .data = &e35gh_i_mw800cb_desc },
+ { .compatible = "miyoo,pocketgo-s30-panel", .data = &pocketgo_s30_desc },
{ }
};
--
2.43.0
^ permalink raw reply [flat|nested] 4+ messages in thread