Skip to contentSkip to conversation

drm/panel: Add IL97680A panels for Retroid Pocket Nova and Duo

PATCH In review Jacob Pyke 2 participants 5 messages Oct 25 – Oct 29

Subsystems (4)
lore
Share & tools
lore

Jacob Pyke

author
#0 lore raw

cover drm/panel: Add IL97680A panels for Retroid Pocket Nova and Duo

This series adds bindings and a driver for the Ilitek IL97680A panels in the Retroid Pocket Nova and the bottom display of the Retroid Pocket Duo. Both are 1280x960, four-lane RGB888 command-mode panels supporting 60 Hz and 120 Hz, with DCS brightness control.

The driver is based on Teguh Sobirin's RetroidPocket implementation. Display operation at both refresh rates, brightness adjustment and panel recovery after suspend/resume were tested on both devices.

Testing on these Qualcomm DPU systems also used Teguh's command-mode MERGE_3D fix [1], which is not included in this series. Board Devicetree changes are outside the scope of this series.

[1] https://github.com/RetroidPocket/linux/commit/b547718c91dbaf8fe27745afced8de00d1f7415b

Teguh Sobirin (2):
dt-bindings: display: panel: Add Retroid Pocket IL97680A panels drm/panel: Add Ilitek IL97680A panels for Retroid Pocket Nova and Duo

 .../display/panel/ilitek,il97680a.yaml        | 121 +++++
 MAINTAINERS                                   |   7 +
 drivers/gpu/drm/panel/Kconfig                 |  11 +
 drivers/gpu/drm/panel/Makefile                |   1 +
 drivers/gpu/drm/panel/panel-ilitek-il97680a.c | 433 ++++++++++++++++++
 5 files changed, 573 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/display/panel/ilitek,il97680a.yaml
 create mode 100644 drivers/gpu/drm/panel/panel-ilitek-il97680a.c

base-commit: 17bb0e2f6c8043f70a693a5f3797471cbed354c8

author
#1 lore raw

PATCH 1/2 dt-bindings: display: panel: Add Retroid Pocket IL97680A panels

From: Teguh Sobirin <[email protected]>

Document the Ilitek IL97680A panels in the Retroid Pocket Nova and the bottom display of the Retroid Pocket Duo. Both are 1280x960 MIPI DSI command-mode panels, with different supply configurations.

---
 .../display/panel/ilitek,il97680a.yaml        | 121 ++++++++++++++++++
 MAINTAINERS                                   |   6 +
 2 files changed, 127 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/display/panel/ilitek,il97680a.yaml
Documentation/devicetree/bindings/display/panel/ilitek,il97680a.yaml new file +121 -0
new file mode 100644
index 0000000000000000000000000000000000000000..70a1bdccef75ea3ee6335304ede771ff711991de
@@ -0,0 +1,121 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/panel/ilitek,il97680a.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Ilitek IL97680A based DSI panels
+
+maintainers:
+  - Teguh Sobirin <[email protected]>
+  - Jacob Pyke <[email protected]>
+
+description:
+  The Ilitek IL97680A is a DSI display driver IC driving the 1280x960
+  command mode panels of the RetroidPocket handhelds.
+
+allOf:
+  - $ref: panel-common.yaml#
+  - if:
+      properties:
+        compatible:
+          const: retroidpocket,rpnova-panel
+    then:
+      required:
+        - vdd18-supply
+        - vdd28-supply
+    else:
+      properties:
+        vdd18-supply: false
+        vdd28-supply: false
+
+properties:
+  compatible:
+    enum:
+      - retroidpocket,rpduo-panel-bottom
+      - retroidpocket,rpnova-panel
+
+  reg:
+    maxItems: 1
+
+  vdd-supply:
+    description: Core voltage supply
+
+  vddio-supply:
+    description: I/O voltage supply
+
+  vci-supply:
+    description: Analog voltage supply
+
+  vdd18-supply:
+    description: 1.8V supply of the panel module
+
+  vdd28-supply:
+    description: 2.8V supply of the panel module
+
+  reset-gpios: true
+  rotation: true
+  port: true
+
+required:
+  - compatible
+  - reg
+  - vdd-supply
+  - vddio-supply
+  - vci-supply
+  - reset-gpios
+  - port
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+
+    dsi {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        panel@0 {
+            compatible = "retroidpocket,rpnova-panel";
+            reg = <0>;
+
+            vdd-supply = <&vreg_l11b_1p2>;
+            vddio-supply = <&vreg_l12b_1p8>;
+            vci-supply = <&vreg_l13b_3p0>;
+            vdd18-supply = <&vdd_disp_1v8>;
+            vdd28-supply = <&vdd_disp_2v8>;
+
+            reset-gpios = <&tlmm 133 GPIO_ACTIVE_LOW>;
+
+            port {
+                panel_in: endpoint {
+                    remote-endpoint = <&dsi0_out>;
+                };
+            };
+        };
+    };
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+
+    dsi {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        panel@0 {
+            compatible = "retroidpocket,rpduo-panel-bottom";
+            reg = <0>;
+
+            vdd-supply = <&vreg_l1g>;
+            vddio-supply = <&vdd_disp_s_1v8>;
+            vci-supply = <&vdd_disp_s_3v0>;
+            reset-gpios = <&tlmm 73 GPIO_ACTIVE_LOW>;
+
+            port {
+                duo_panel_in: endpoint {
+                    remote-endpoint = <&dsi1_out>;
+                };
+            };
+        };
+    };
+...
MAINTAINERS +6 -0
index b9424b630ac34ae6b1774416ef4cb3ef1a8ebe63..d1be1cf2b93c4fa57ffcb6a17aaf2e14dad0deed 100644
@@ -8235,6 +8235,12 @@ S:	Maintained
 T:	git https://gitlab.freedesktop.org/drm/misc/kernel.git
 F:	drivers/gpu/drm/hyperv
 
+DRM DRIVER FOR ILITEK IL97680A PANELS
+M:	Jacob Pyke <[email protected]>
+L:	[email protected]
+S:	Maintained
+F:	Documentation/devicetree/bindings/display/panel/ilitek,il97680a.yaml
+
 DRM DRIVER FOR ILITEK ILI9225 PANELS
 M:	David Lechner <[email protected]>
 S:	Maintained
#2 lore raw

Re: [PATCH 1/2] dt-bindings: display: panel: Add Retroid Pocket IL97680A panels

Quoted 7 lines · Jacob Pyke

From: Teguh Sobirin <[email protected]>

Document the Ilitek IL97680A panels in the Retroid Pocket Nova and the bottom display of the Retroid Pocket Duo. Both are 1280x960 MIPI DSI command-mode panels, with different supply configurations.

Please do not reference random 3rd party repositories for no reason.

Quoted 2 lines
Assisted-by LLM

Drop tag

Quoted 33 lines
---
 .../display/panel/ilitek,il97680a.yaml        | 121 ++++++++++++++++++
 MAINTAINERS                                   |   6 +
 2 files changed, 127 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/display/panel/ilitek,il97680a.yaml
Documentation/devicetree/bindings/display/panel/ilitek,il97680a.yaml new file +20 -0
new file mode 100644
index 0000000000000000000000000000000000000000..70a1bdccef75ea3ee6335304ede771ff711991de
@@ -0,0 +1,121 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/panel/ilitek,il97680a.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Ilitek IL97680A based DSI panels
+
+maintainers:
+  - Teguh Sobirin <[email protected]>
+  - Jacob Pyke <[email protected]>
+
+description:
+  The Ilitek IL97680A is a DSI display driver IC driving the 1280x960
+  command mode panels of the RetroidPocket handhelds.
+
+allOf:
+  - $ref: panel-common.yaml#
+  - if:
+      properties:

Documentation/devicetree/bindings/display/panel/ilitek,il97680a.yaml line 30

Quoted 10 lines
Documentation/devicetree/bindings/display/panel/ilitek,il97680a.yaml new file +10 -0
+        compatible:
+          const: retroidpocket,rpnova-panel
+    then:
+      required:
+        - vdd18-supply
+        - vdd28-supply
+    else:
+      properties:
+        vdd18-supply: false
+        vdd28-supply: false

Keep the entire allOf just before additionalProperties: block.

Documentation/devicetree/bindings/display/panel/ilitek,il97680a.yaml line 36

Quoted 6 lines
Documentation/devicetree/bindings/display/panel/ilitek,il97680a.yaml new file +6 -0
+
+properties:
+  compatible:
+    enum:
+      - retroidpocket,rpduo-panel-bottom
+      - retroidpocket,rpnova-panel

I would expect IL97680A fallback compatible.

Documentation/devicetree/bindings/display/panel/ilitek,il97680a.yaml line 39

Quoted 3 lines
Documentation/devicetree/bindings/display/panel/ilitek,il97680a.yaml new file +3 -0
+
+  reg:
+    maxItems: 1

Best regards,
Krzysztof

author
#3 lore raw

Re: [PATCH 1/2] dt-bindings: display: panel: Add Retroid Pocket IL97680A panels

Quoted 5 lines

Please do not reference random 3rd party repositories for no reason.

Drop tag

Keep the entire allOf just before additionalProperties: block.

No worries, will address these in V2

Quoted 1 line

I would expect IL97680A fallback compatible.

I'll add a "ilitek,il97680a" after each panel-specific compatible and update the examples in V2

Thanks for the review. First submission so still learning the ropes. Appreciate the patience.

Thanks,
Jacob

author
#4 lore raw

PATCH 2/2 drm/panel: Add Ilitek IL97680A panels for Retroid Pocket Nova and Duo

In reply to Jacob Pyke

From: Teguh Sobirin <[email protected]>

Add support for the Ilitek IL97680A panels in the Retroid Pocket Nova and the bottom display of the Retroid Pocket Duo. Both are 1280x960 command-mode panels using four DSI lanes and RGB888 pixels, with fixed 60 Hz and 120 Hz modes and DCS brightness control.

Share initialization and timings, with per-panel supply configurations. Apply the requested brightness after display-on rather than setting full brightness during initialization, to avoid a white flash on startup.

---
 MAINTAINERS                                   |   1 +
 drivers/gpu/drm/panel/Kconfig                 |  11 +
 drivers/gpu/drm/panel/Makefile                |   1 +
 drivers/gpu/drm/panel/panel-ilitek-il97680a.c | 433 ++++++++++++++++++
 4 files changed, 446 insertions(+)
 create mode 100644 drivers/gpu/drm/panel/panel-ilitek-il97680a.c
MAINTAINERS +1 -0
index d1be1cf2b93c4fa57ffcb6a17aaf2e14dad0deed..70d04c3870022c468295ce1de2a636c05e3accee 100644
@@ -8240,6 +8240,7 @@ M:	Jacob Pyke <[email protected]>
 L:	[email protected]
 S:	Maintained
 F:	Documentation/devicetree/bindings/display/panel/ilitek,il97680a.yaml
+F:	drivers/gpu/drm/panel/panel-ilitek-il97680a.c
 
 DRM DRIVER FOR ILITEK ILI9225 PANELS
 M:	David Lechner <[email protected]>
drivers/gpu/drm/panel/Kconfig +11 -0
index cbdf7b8f7f7afc7f8aa3a9cefd2258ca81ac9673..fafa658d0c42cf26842e7ebb46dbf70ad59e4b9f 100644
@@ -306,6 +306,17 @@ config DRM_PANEL_ILITEK_IL9322
 	  Say Y here if you want to enable support for Ilitek IL9322
 	  QVGA (320x240) RGB, YUV and ITU-T BT.656 panels.
 
+config DRM_PANEL_ILITEK_IL97680A
+	tristate "Ilitek IL97680A-based panels"
+	depends on OF
+	depends on DRM_MIPI_DSI
+	depends on BACKLIGHT_CLASS_DEVICE
+	help
+	  Say Y here to enable the 1280x960 Ilitek IL97680A panels in the
+	  Retroid Pocket Nova and the bottom display of the Retroid Pocket Duo.
+	  These panels use four-lane MIPI DSI command mode and support fixed
+	  60 Hz and 120 Hz refresh rates with brightness controlled over DCS.
+
 config DRM_PANEL_ILITEK_ILI9341
 	tristate "Ilitek ILI9341 240x320 QVGA panels"
 	depends on SPI
drivers/gpu/drm/panel/Makefile +1 -0
index 3b523cf37833067c3b0b02ffd90694c3558f0741..ca03c07a1d255c1a8e0bd34dc0f3ba4fe2b65098 100644
@@ -30,6 +30,7 @@ obj-$(CONFIG_DRM_PANEL_HIMAX_HX8394) += panel-himax-hx8394.o
 obj-$(CONFIG_DRM_PANEL_HYDIS_HV101HD1) += panel-hydis-hv101hd1.o
 obj-$(CONFIG_DRM_PANEL_ILITEK_ILI7807S) += panel-ilitek-ili7807s.o
 obj-$(CONFIG_DRM_PANEL_ILITEK_IL9322) += panel-ilitek-ili9322.o
+obj-$(CONFIG_DRM_PANEL_ILITEK_IL97680A) += panel-ilitek-il97680a.o
 obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9341) += panel-ilitek-ili9341.o
 obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9488) += panel-ilitek-ili9488.o
 obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9805) += panel-ilitek-ili9805.o
drivers/gpu/drm/panel/panel-ilitek-il97680a.c new file +433 -0

433 lines not on this page · raw message