* [PATCH v2 0/2] Add WL-355608-A8 panel
@ 2024-05-30 8:22 Ryan Walklin
2024-05-30 8:22 ` [PATCH v2 1/2] dt-bindings: display: panel: " Ryan Walklin
2024-05-30 8:22 ` [PATCH v2 2/2] drm: panel: nv3052c: " Ryan Walklin
0 siblings, 2 replies; 7+ messages in thread
From: Ryan Walklin @ 2024-05-30 8:22 UTC (permalink / raw)
To: dri-devel, devicetree
Cc: Neil Armstrong, Jessica Zhang, Sam Ravnborg, David Airlie,
Daniel Vetter, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Hironori KIKUCHI, Chris Morgan, Andre Przywara, John Watts,
Ryan Walklin
Hello,
V2 of this patch with discussed and recommended compatible string fixes and updates to DT binding example code.
Original cover below.
--
The WL_355608_A8 panel is a VGA LCD display with an NV3052C-compatible driver IC, used in a number of Anbernic handheld gaming devices. This patch adds a device tree binding, and support for the display timings and init sequence to the NV3052C SPI/RGB driver.
Regards,
Ryan
Ryan Walklin (2):
dt-bindings: display: panel: Add WL-355608-A8 panel
drm: panel: nv3052c: Add WL-355608-A8 panel
.../bindings/display/panel/wl-355608-a8.yaml | 60 +++++
.../gpu/drm/panel/panel-newvision-nv3052c.c | 225 ++++++++++++++++++
2 files changed, 285 insertions(+)
create mode 100644 Documentation/devicetree/bindings/display/panel/wl-355608-a8.yaml
--
2.45.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel
2024-05-30 8:22 [PATCH v2 0/2] Add WL-355608-A8 panel Ryan Walklin
@ 2024-05-30 8:22 ` Ryan Walklin
2024-05-30 16:01 ` Conor Dooley
2024-05-30 16:03 ` Conor Dooley
2024-05-30 8:22 ` [PATCH v2 2/2] drm: panel: nv3052c: " Ryan Walklin
1 sibling, 2 replies; 7+ messages in thread
From: Ryan Walklin @ 2024-05-30 8:22 UTC (permalink / raw)
To: dri-devel, devicetree
Cc: Neil Armstrong, Jessica Zhang, Sam Ravnborg, David Airlie,
Daniel Vetter, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Hironori KIKUCHI, Chris Morgan, Andre Przywara, John Watts,
Ryan Walklin
The WL-355608-A8 is a 3.5" 640x480@60Hz RGB LCD display used in a
number of handheld gaming devices made by Anbernic. By consensus a
vendor prefix is not provided as the panel OEM is unknown.
Add a device tree binding for the panel.
Signed-off-by: Ryan Walklin <ryan@testtoast.com>
---
Changelog v1..v2:
- Correct compatible string and filename
- Note #dri-devel discussion regarding vendor prefix
- Remove unnecessary node names, spi-gpio compatible string and GPIOs from example
---
.../bindings/display/panel/wl-355608-a8.yaml | 60 +++++++++++++++++++
1 file changed, 60 insertions(+)
create mode 100644 Documentation/devicetree/bindings/display/panel/wl-355608-a8.yaml
diff --git a/Documentation/devicetree/bindings/display/panel/wl-355608-a8.yaml b/Documentation/devicetree/bindings/display/panel/wl-355608-a8.yaml
new file mode 100644
index 0000000000000..05039a6db4bc8
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/panel/wl-355608-a8.yaml
@@ -0,0 +1,60 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/panel/wl-355608-a8.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: WL-355608-A8 3.5" (640x480 pixels) 24-bit IPS LCD panel
+
+maintainers:
+ - Ryan Walklin <ryan@testtoast.com>
+
+allOf:
+ - $ref: panel-common.yaml#
+ - $ref: /schemas/spi/spi-peripheral-props.yaml#
+
+properties:
+ compatible:
+ const: wl-355608-a8
+
+ reg:
+ maxItems: 1
+
+ spi-3wire: true
+
+required:
+ - compatible
+ - reg
+ - port
+ - power-supply
+ - reset-gpios
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+
+ spi_lcd: spi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ panel@0 {
+ compatible = "wl-355608-a8";
+ reg = <0>;
+
+ spi-3wire;
+ spi-max-frequency = <3125000>;
+
+ reset-gpios = <&pio 8 14 GPIO_ACTIVE_LOW>; // PI14
+
+ backlight = <&backlight>;
+ power-supply = <®_lcd>;
+
+ port {
+ endpoint {
+ remote-endpoint = <&tcon_lcd0_out_lcd>;
+ };
+ };
+ };
+ };
--
2.45.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 2/2] drm: panel: nv3052c: Add WL-355608-A8 panel
2024-05-30 8:22 [PATCH v2 0/2] Add WL-355608-A8 panel Ryan Walklin
2024-05-30 8:22 ` [PATCH v2 1/2] dt-bindings: display: panel: " Ryan Walklin
@ 2024-05-30 8:22 ` Ryan Walklin
2024-05-31 17:56 ` Jessica Zhang
1 sibling, 1 reply; 7+ messages in thread
From: Ryan Walklin @ 2024-05-30 8:22 UTC (permalink / raw)
To: dri-devel, devicetree
Cc: Neil Armstrong, Jessica Zhang, Sam Ravnborg, David Airlie,
Daniel Vetter, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Hironori KIKUCHI, Chris Morgan, Andre Przywara, John Watts,
Ryan Walklin
The WL-355608-A8 is a 3.5" 640x480@60Hz RGB LCD display from an unknown
OEM used in a number of handheld gaming devices made by Anbernic.
Limited information is available online however the panel timing values
(below) have been obtained from the vendor BSP. The panel appears to
integrate a NV3052C LCD driver (or clone). Available devices address it
in SPI/RGB mode, with the timing signals generated from the device
SoC (Allwinner H700) and passed through.
Add a panel definition and display mode to the existing NV3502C driver.
It was assumed during bringup that the initialisation sequence was the
same as the existing Fascontek FS035VG158 panel, proved working during
experimentation, however subsequent dumping of the init sequence with a
logic analyser confirms one small change to VCOM_ADJ3 from 0x4a to 0x44,
therefore a separate set of registers is also added.
Timings:
| Active | FP | Sync | BP | Total
-----------|--------|------|------|------|-------
Horizontal | 640 | 64 | 20 | 46 | 770
Vertical | 480 | 21 | 4 | 15 | 520
Signed-off-by: Ryan Walklin <ryan@testtoast.com>
Co-developed-by: Hironori KIKUCHI <kikuchan98@gmail.com>
Signed-off-by: Hironori KIKUCHI <kikuchan98@gmail.com>
Reviewed-by: John Watts <contact@jookia.org>
---
Changelog v1..v2:
- Update .compatible string to match dt-binding
- Add co-developer sign-off and review tags
---
.../gpu/drm/panel/panel-newvision-nv3052c.c | 225 ++++++++++++++++++
1 file changed, 225 insertions(+)
diff --git a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
index 1aab0c9ae52fa..ee0ce271205e3 100644
--- a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
+++ b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
@@ -433,6 +433,202 @@ static const struct nv3052c_reg fs035vg158_panel_regs[] = {
{ 0x36, 0x0a }, // bgr = 1, ss = 1, gs = 0
};
+
+static const struct nv3052c_reg wl_355608_a8_panel_regs[] = {
+ // EXTC Command set enable, select page 1
+ { 0xff, 0x30 }, { 0xff, 0x52 }, { 0xff, 0x01 },
+ // Mostly unknown registers
+ { 0xe3, 0x00 },
+ { 0x40, 0x00 },
+ { 0x03, 0x40 },
+ { 0x04, 0x00 },
+ { 0x05, 0x03 },
+ { 0x08, 0x00 },
+ { 0x09, 0x07 },
+ { 0x0a, 0x01 },
+ { 0x0b, 0x32 },
+ { 0x0c, 0x32 },
+ { 0x0d, 0x0b },
+ { 0x0e, 0x00 },
+ { 0x23, 0xa0 },
+ { 0x24, 0x0c },
+ { 0x25, 0x06 },
+ { 0x26, 0x14 },
+ { 0x27, 0x14 },
+ { 0x38, 0xcc }, // VCOM_ADJ1
+ { 0x39, 0xd7 }, // VCOM_ADJ2
+ { 0x3a, 0x44 }, // VCOM_ADJ3
+ { 0x28, 0x40 },
+ { 0x29, 0x01 },
+ { 0x2a, 0xdf },
+ { 0x49, 0x3c },
+ { 0x91, 0x77 }, // EXTPW_CTRL2
+ { 0x92, 0x77 }, // EXTPW_CTRL3
+ { 0xa0, 0x55 },
+ { 0xa1, 0x50 },
+ { 0xa4, 0x9c },
+ { 0xa7, 0x02 },
+ { 0xa8, 0x01 },
+ { 0xa9, 0x01 },
+ { 0xaa, 0xfc },
+ { 0xab, 0x28 },
+ { 0xac, 0x06 },
+ { 0xad, 0x06 },
+ { 0xae, 0x06 },
+ { 0xaf, 0x03 },
+ { 0xb0, 0x08 },
+ { 0xb1, 0x26 },
+ { 0xb2, 0x28 },
+ { 0xb3, 0x28 },
+ { 0xb4, 0x33 },
+ { 0xb5, 0x08 },
+ { 0xb6, 0x26 },
+ { 0xb7, 0x08 },
+ { 0xb8, 0x26 },
+ { 0xf0, 0x00 },
+ { 0xf6, 0xc0 },
+ // EXTC Command set enable, select page 2
+ { 0xff, 0x30 }, { 0xff, 0x52 }, { 0xff, 0x02 },
+ // Set gray scale voltage to adjust gamma
+ { 0xb0, 0x0b }, // PGAMVR0
+ { 0xb1, 0x16 }, // PGAMVR1
+ { 0xb2, 0x17 }, // PGAMVR2
+ { 0xb3, 0x2c }, // PGAMVR3
+ { 0xb4, 0x32 }, // PGAMVR4
+ { 0xb5, 0x3b }, // PGAMVR5
+ { 0xb6, 0x29 }, // PGAMPR0
+ { 0xb7, 0x40 }, // PGAMPR1
+ { 0xb8, 0x0d }, // PGAMPK0
+ { 0xb9, 0x05 }, // PGAMPK1
+ { 0xba, 0x12 }, // PGAMPK2
+ { 0xbb, 0x10 }, // PGAMPK3
+ { 0xbc, 0x12 }, // PGAMPK4
+ { 0xbd, 0x15 }, // PGAMPK5
+ { 0xbe, 0x19 }, // PGAMPK6
+ { 0xbf, 0x0e }, // PGAMPK7
+ { 0xc0, 0x16 }, // PGAMPK8
+ { 0xc1, 0x0a }, // PGAMPK9
+ // Set gray scale voltage to adjust gamma
+ { 0xd0, 0x0c }, // NGAMVR0
+ { 0xd1, 0x17 }, // NGAMVR0
+ { 0xd2, 0x14 }, // NGAMVR1
+ { 0xd3, 0x2e }, // NGAMVR2
+ { 0xd4, 0x32 }, // NGAMVR3
+ { 0xd5, 0x3c }, // NGAMVR4
+ { 0xd6, 0x22 }, // NGAMPR0
+ { 0xd7, 0x3d }, // NGAMPR1
+ { 0xd8, 0x0d }, // NGAMPK0
+ { 0xd9, 0x07 }, // NGAMPK1
+ { 0xda, 0x13 }, // NGAMPK2
+ { 0xdb, 0x13 }, // NGAMPK3
+ { 0xdc, 0x11 }, // NGAMPK4
+ { 0xdd, 0x15 }, // NGAMPK5
+ { 0xde, 0x19 }, // NGAMPK6
+ { 0xdf, 0x10 }, // NGAMPK7
+ { 0xe0, 0x17 }, // NGAMPK8
+ { 0xe1, 0x0a }, // NGAMPK9
+ // EXTC Command set enable, select page 3
+ { 0xff, 0x30 }, { 0xff, 0x52 }, { 0xff, 0x03 },
+ // Set various timing settings
+ { 0x00, 0x2a }, // GIP_VST_1
+ { 0x01, 0x2a }, // GIP_VST_2
+ { 0x02, 0x2a }, // GIP_VST_3
+ { 0x03, 0x2a }, // GIP_VST_4
+ { 0x04, 0x61 }, // GIP_VST_5
+ { 0x05, 0x80 }, // GIP_VST_6
+ { 0x06, 0xc7 }, // GIP_VST_7
+ { 0x07, 0x01 }, // GIP_VST_8
+ { 0x08, 0x03 }, // GIP_VST_9
+ { 0x09, 0x04 }, // GIP_VST_10
+ { 0x70, 0x22 }, // GIP_ECLK1
+ { 0x71, 0x80 }, // GIP_ECLK2
+ { 0x30, 0x2a }, // GIP_CLK_1
+ { 0x31, 0x2a }, // GIP_CLK_2
+ { 0x32, 0x2a }, // GIP_CLK_3
+ { 0x33, 0x2a }, // GIP_CLK_4
+ { 0x34, 0x61 }, // GIP_CLK_5
+ { 0x35, 0xc5 }, // GIP_CLK_6
+ { 0x36, 0x80 }, // GIP_CLK_7
+ { 0x37, 0x23 }, // GIP_CLK_8
+ { 0x40, 0x03 }, // GIP_CLKA_1
+ { 0x41, 0x04 }, // GIP_CLKA_2
+ { 0x42, 0x05 }, // GIP_CLKA_3
+ { 0x43, 0x06 }, // GIP_CLKA_4
+ { 0x44, 0x11 }, // GIP_CLKA_5
+ { 0x45, 0xe8 }, // GIP_CLKA_6
+ { 0x46, 0xe9 }, // GIP_CLKA_7
+ { 0x47, 0x11 }, // GIP_CLKA_8
+ { 0x48, 0xea }, // GIP_CLKA_9
+ { 0x49, 0xeb }, // GIP_CLKA_10
+ { 0x50, 0x07 }, // GIP_CLKB_1
+ { 0x51, 0x08 }, // GIP_CLKB_2
+ { 0x52, 0x09 }, // GIP_CLKB_3
+ { 0x53, 0x0a }, // GIP_CLKB_4
+ { 0x54, 0x11 }, // GIP_CLKB_5
+ { 0x55, 0xec }, // GIP_CLKB_6
+ { 0x56, 0xed }, // GIP_CLKB_7
+ { 0x57, 0x11 }, // GIP_CLKB_8
+ { 0x58, 0xef }, // GIP_CLKB_9
+ { 0x59, 0xf0 }, // GIP_CLKB_10
+ // Map internal GOA signals to GOA output pad
+ { 0xb1, 0x01 }, // PANELD2U2
+ { 0xb4, 0x15 }, // PANELD2U5
+ { 0xb5, 0x16 }, // PANELD2U6
+ { 0xb6, 0x09 }, // PANELD2U7
+ { 0xb7, 0x0f }, // PANELD2U8
+ { 0xb8, 0x0d }, // PANELD2U9
+ { 0xb9, 0x0b }, // PANELD2U10
+ { 0xba, 0x00 }, // PANELD2U11
+ { 0xc7, 0x02 }, // PANELD2U24
+ { 0xca, 0x17 }, // PANELD2U27
+ { 0xcb, 0x18 }, // PANELD2U28
+ { 0xcc, 0x0a }, // PANELD2U29
+ { 0xcd, 0x10 }, // PANELD2U30
+ { 0xce, 0x0e }, // PANELD2U31
+ { 0xcf, 0x0c }, // PANELD2U32
+ { 0xd0, 0x00 }, // PANELD2U33
+ // Map internal GOA signals to GOA output pad
+ { 0x81, 0x00 }, // PANELU2D2
+ { 0x84, 0x15 }, // PANELU2D5
+ { 0x85, 0x16 }, // PANELU2D6
+ { 0x86, 0x10 }, // PANELU2D7
+ { 0x87, 0x0a }, // PANELU2D8
+ { 0x88, 0x0c }, // PANELU2D9
+ { 0x89, 0x0e }, // PANELU2D10
+ { 0x8a, 0x02 }, // PANELU2D11
+ { 0x97, 0x00 }, // PANELU2D24
+ { 0x9a, 0x17 }, // PANELU2D27
+ { 0x9b, 0x18 }, // PANELU2D28
+ { 0x9c, 0x0f }, // PANELU2D29
+ { 0x9d, 0x09 }, // PANELU2D30
+ { 0x9e, 0x0b }, // PANELU2D31
+ { 0x9f, 0x0d }, // PANELU2D32
+ { 0xa0, 0x01 }, // PANELU2D33
+ // EXTC Command set enable, select page 2
+ { 0xff, 0x30 }, { 0xff, 0x52 }, { 0xff, 0x02 },
+ // Unknown registers
+ { 0x01, 0x01 },
+ { 0x02, 0xda },
+ { 0x03, 0xba },
+ { 0x04, 0xa8 },
+ { 0x05, 0x9a },
+ { 0x06, 0x70 },
+ { 0x07, 0xff },
+ { 0x08, 0x91 },
+ { 0x09, 0x90 },
+ { 0x0a, 0xff },
+ { 0x0b, 0x8f },
+ { 0x0c, 0x60 },
+ { 0x0d, 0x58 },
+ { 0x0e, 0x48 },
+ { 0x0f, 0x38 },
+ { 0x10, 0x2b },
+ // EXTC Command set enable, select page 0
+ { 0xff, 0x30 }, { 0xff, 0x52 }, { 0xff, 0x00 },
+ // Display Access Control
+ { 0x36, 0x0a }, // bgr = 1, ss = 1, gs = 0
+};
+
static inline struct nv3052c *to_nv3052c(struct drm_panel *panel)
{
return container_of(panel, struct nv3052c, panel);
@@ -670,6 +866,21 @@ static const struct drm_display_mode fs035vg158_modes[] = {
},
};
+static const struct drm_display_mode wl_355608_a8_mode[] = {
+ {
+ .clock = 24000,
+ .hdisplay = 640,
+ .hsync_start = 640 + 64,
+ .hsync_end = 640 + 64 + 20,
+ .htotal = 640 + 64 + 20 + 46,
+ .vdisplay = 480,
+ .vsync_start = 480 + 21,
+ .vsync_end = 480 + 21 + 4,
+ .vtotal = 480 + 21 + 4 + 15,
+ .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
+ },
+};
+
static const struct nv3052c_panel_info ltk035c5444t_panel_info = {
.display_modes = ltk035c5444t_modes,
.num_modes = ARRAY_SIZE(ltk035c5444t_modes),
@@ -692,9 +903,21 @@ static const struct nv3052c_panel_info fs035vg158_panel_info = {
.panel_regs_len = ARRAY_SIZE(fs035vg158_panel_regs),
};
+static const struct nv3052c_panel_info wl_355608_a8_panel_info = {
+ .display_modes = wl_355608_a8_mode,
+ .num_modes = ARRAY_SIZE(wl_355608_a8_mode),
+ .width_mm = 150,
+ .height_mm = 94,
+ .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
+ .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
+ .panel_regs = wl_355608_a8_panel_regs,
+ .panel_regs_len = ARRAY_SIZE(wl_355608_a8_panel_regs),
+};
+
static const struct spi_device_id nv3052c_ids[] = {
{ "ltk035c5444t", },
{ "fs035vg158", },
+ { "wl-355608-a8", },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(spi, nv3052c_ids);
@@ -702,6 +925,7 @@ MODULE_DEVICE_TABLE(spi, nv3052c_ids);
static const struct of_device_id nv3052c_of_match[] = {
{ .compatible = "leadtek,ltk035c5444t", .data = <k035c5444t_panel_info },
{ .compatible = "fascontek,fs035vg158", .data = &fs035vg158_panel_info },
+ { .compatible = "wl-355608-a8", .data = &wl_355608_a8_panel_info },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, nv3052c_of_match);
@@ -719,4 +943,5 @@ module_spi_driver(nv3052c_driver);
MODULE_AUTHOR("Paul Cercueil <paul@crapouillou.net>");
MODULE_AUTHOR("Christophe Branchereau <cbranchereau@gmail.com>");
+MODULE_AUTHOR("Ryan Walklin <ryan@testtoast.com");
MODULE_LICENSE("GPL v2");
--
2.45.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel
2024-05-30 8:22 ` [PATCH v2 1/2] dt-bindings: display: panel: " Ryan Walklin
@ 2024-05-30 16:01 ` Conor Dooley
2024-05-30 16:03 ` Conor Dooley
1 sibling, 0 replies; 7+ messages in thread
From: Conor Dooley @ 2024-05-30 16:01 UTC (permalink / raw)
To: Ryan Walklin
Cc: dri-devel, devicetree, Neil Armstrong, Jessica Zhang,
Sam Ravnborg, David Airlie, Daniel Vetter, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Hironori KIKUCHI, Chris Morgan,
Andre Przywara, John Watts
[-- Attachment #1: Type: text/plain, Size: 464 bytes --]
On Thu, May 30, 2024 at 08:22:22PM +1200, Ryan Walklin wrote:
> The WL-355608-A8 is a 3.5" 640x480@60Hz RGB LCD display used in a
> number of handheld gaming devices made by Anbernic.
> By consensus a
> vendor prefix is not provided as the panel OEM is unknown.
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
> +examples:
> + - |
> + #include <dt-bindings/gpio/gpio.h>
> +
> + spi_lcd: spi {
The "spi_lcd" label is not used and can be dropped.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel
2024-05-30 8:22 ` [PATCH v2 1/2] dt-bindings: display: panel: " Ryan Walklin
2024-05-30 16:01 ` Conor Dooley
@ 2024-05-30 16:03 ` Conor Dooley
2024-05-30 21:05 ` Ryan Walklin
1 sibling, 1 reply; 7+ messages in thread
From: Conor Dooley @ 2024-05-30 16:03 UTC (permalink / raw)
To: Ryan Walklin
Cc: dri-devel, devicetree, Neil Armstrong, Jessica Zhang,
Sam Ravnborg, David Airlie, Daniel Vetter, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Hironori KIKUCHI, Chris Morgan,
Andre Przywara, John Watts
[-- Attachment #1: Type: text/plain, Size: 318 bytes --]
On Thu, May 30, 2024 at 08:22:22PM +1200, Ryan Walklin wrote:
> + port {
> + endpoint {
^
You accidentally added a tab here:
/stuff/linux/.git/worktrees/linux-dt/rebase-apply/patch:71: space before tab in indent.
endpoint {
warning: 1 line adds whitespace errors.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel
2024-05-30 16:03 ` Conor Dooley
@ 2024-05-30 21:05 ` Ryan Walklin
0 siblings, 0 replies; 7+ messages in thread
From: Ryan Walklin @ 2024-05-30 21:05 UTC (permalink / raw)
To: Conor Dooley
Cc: dri-devel, devicetree, Neil Armstrong, Jessica Zhang,
Sam Ravnborg, David Airlie, Daniel Vetter, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Hironori KIKUCHI, Chris Morgan,
Andre Przywara, John Watts
On Fri, 31 May 2024, at 4:03 AM, Conor Dooley wrote:
> You accidentally added a tab here:
> endpoint {
Apologies, will fix along with the other redundant label for v3. Thanks for the review!
Ryan
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 2/2] drm: panel: nv3052c: Add WL-355608-A8 panel
2024-05-30 8:22 ` [PATCH v2 2/2] drm: panel: nv3052c: " Ryan Walklin
@ 2024-05-31 17:56 ` Jessica Zhang
0 siblings, 0 replies; 7+ messages in thread
From: Jessica Zhang @ 2024-05-31 17:56 UTC (permalink / raw)
To: Ryan Walklin, dri-devel, devicetree
Cc: Neil Armstrong, Sam Ravnborg, David Airlie, Daniel Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Hironori KIKUCHI, Chris Morgan,
Andre Przywara, John Watts
On 5/30/2024 1:22 AM, Ryan Walklin wrote:
> The WL-355608-A8 is a 3.5" 640x480@60Hz RGB LCD display from an unknown
> OEM used in a number of handheld gaming devices made by Anbernic.
> Limited information is available online however the panel timing values
> (below) have been obtained from the vendor BSP. The panel appears to
> integrate a NV3052C LCD driver (or clone). Available devices address it
> in SPI/RGB mode, with the timing signals generated from the device
> SoC (Allwinner H700) and passed through.
>
> Add a panel definition and display mode to the existing NV3502C driver.
>
> It was assumed during bringup that the initialisation sequence was the
> same as the existing Fascontek FS035VG158 panel, proved working during
> experimentation, however subsequent dumping of the init sequence with a
> logic analyser confirms one small change to VCOM_ADJ3 from 0x4a to 0x44,
> therefore a separate set of registers is also added.
>
> Timings:
> | Active | FP | Sync | BP | Total
> -----------|--------|------|------|------|-------
> Horizontal | 640 | 64 | 20 | 46 | 770
> Vertical | 480 | 21 | 4 | 15 | 520
>
> Signed-off-by: Ryan Walklin <ryan@testtoast.com>
> Co-developed-by: Hironori KIKUCHI <kikuchan98@gmail.com>
> Signed-off-by: Hironori KIKUCHI <kikuchan98@gmail.com>
> Reviewed-by: John Watts <contact@jookia.org>
Hi Ryan,
Acked-by: Jessica Zhang <quic_jesszhan@quicinc.com>
Thanks,
Jessica Zhang
>
> ---
>
> Changelog v1..v2:
> - Update .compatible string to match dt-binding
> - Add co-developer sign-off and review tags
> ---
> .../gpu/drm/panel/panel-newvision-nv3052c.c | 225 ++++++++++++++++++
> 1 file changed, 225 insertions(+)
>
> diff --git a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
> index 1aab0c9ae52fa..ee0ce271205e3 100644
> --- a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
> +++ b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
> @@ -433,6 +433,202 @@ static const struct nv3052c_reg fs035vg158_panel_regs[] = {
> { 0x36, 0x0a }, // bgr = 1, ss = 1, gs = 0
> };
>
> +
> +static const struct nv3052c_reg wl_355608_a8_panel_regs[] = {
> + // EXTC Command set enable, select page 1
> + { 0xff, 0x30 }, { 0xff, 0x52 }, { 0xff, 0x01 },
> + // Mostly unknown registers
> + { 0xe3, 0x00 },
> + { 0x40, 0x00 },
> + { 0x03, 0x40 },
> + { 0x04, 0x00 },
> + { 0x05, 0x03 },
> + { 0x08, 0x00 },
> + { 0x09, 0x07 },
> + { 0x0a, 0x01 },
> + { 0x0b, 0x32 },
> + { 0x0c, 0x32 },
> + { 0x0d, 0x0b },
> + { 0x0e, 0x00 },
> + { 0x23, 0xa0 },
> + { 0x24, 0x0c },
> + { 0x25, 0x06 },
> + { 0x26, 0x14 },
> + { 0x27, 0x14 },
> + { 0x38, 0xcc }, // VCOM_ADJ1
> + { 0x39, 0xd7 }, // VCOM_ADJ2
> + { 0x3a, 0x44 }, // VCOM_ADJ3
> + { 0x28, 0x40 },
> + { 0x29, 0x01 },
> + { 0x2a, 0xdf },
> + { 0x49, 0x3c },
> + { 0x91, 0x77 }, // EXTPW_CTRL2
> + { 0x92, 0x77 }, // EXTPW_CTRL3
> + { 0xa0, 0x55 },
> + { 0xa1, 0x50 },
> + { 0xa4, 0x9c },
> + { 0xa7, 0x02 },
> + { 0xa8, 0x01 },
> + { 0xa9, 0x01 },
> + { 0xaa, 0xfc },
> + { 0xab, 0x28 },
> + { 0xac, 0x06 },
> + { 0xad, 0x06 },
> + { 0xae, 0x06 },
> + { 0xaf, 0x03 },
> + { 0xb0, 0x08 },
> + { 0xb1, 0x26 },
> + { 0xb2, 0x28 },
> + { 0xb3, 0x28 },
> + { 0xb4, 0x33 },
> + { 0xb5, 0x08 },
> + { 0xb6, 0x26 },
> + { 0xb7, 0x08 },
> + { 0xb8, 0x26 },
> + { 0xf0, 0x00 },
> + { 0xf6, 0xc0 },
> + // EXTC Command set enable, select page 2
> + { 0xff, 0x30 }, { 0xff, 0x52 }, { 0xff, 0x02 },
> + // Set gray scale voltage to adjust gamma
> + { 0xb0, 0x0b }, // PGAMVR0
> + { 0xb1, 0x16 }, // PGAMVR1
> + { 0xb2, 0x17 }, // PGAMVR2
> + { 0xb3, 0x2c }, // PGAMVR3
> + { 0xb4, 0x32 }, // PGAMVR4
> + { 0xb5, 0x3b }, // PGAMVR5
> + { 0xb6, 0x29 }, // PGAMPR0
> + { 0xb7, 0x40 }, // PGAMPR1
> + { 0xb8, 0x0d }, // PGAMPK0
> + { 0xb9, 0x05 }, // PGAMPK1
> + { 0xba, 0x12 }, // PGAMPK2
> + { 0xbb, 0x10 }, // PGAMPK3
> + { 0xbc, 0x12 }, // PGAMPK4
> + { 0xbd, 0x15 }, // PGAMPK5
> + { 0xbe, 0x19 }, // PGAMPK6
> + { 0xbf, 0x0e }, // PGAMPK7
> + { 0xc0, 0x16 }, // PGAMPK8
> + { 0xc1, 0x0a }, // PGAMPK9
> + // Set gray scale voltage to adjust gamma
> + { 0xd0, 0x0c }, // NGAMVR0
> + { 0xd1, 0x17 }, // NGAMVR0
> + { 0xd2, 0x14 }, // NGAMVR1
> + { 0xd3, 0x2e }, // NGAMVR2
> + { 0xd4, 0x32 }, // NGAMVR3
> + { 0xd5, 0x3c }, // NGAMVR4
> + { 0xd6, 0x22 }, // NGAMPR0
> + { 0xd7, 0x3d }, // NGAMPR1
> + { 0xd8, 0x0d }, // NGAMPK0
> + { 0xd9, 0x07 }, // NGAMPK1
> + { 0xda, 0x13 }, // NGAMPK2
> + { 0xdb, 0x13 }, // NGAMPK3
> + { 0xdc, 0x11 }, // NGAMPK4
> + { 0xdd, 0x15 }, // NGAMPK5
> + { 0xde, 0x19 }, // NGAMPK6
> + { 0xdf, 0x10 }, // NGAMPK7
> + { 0xe0, 0x17 }, // NGAMPK8
> + { 0xe1, 0x0a }, // NGAMPK9
> + // EXTC Command set enable, select page 3
> + { 0xff, 0x30 }, { 0xff, 0x52 }, { 0xff, 0x03 },
> + // Set various timing settings
> + { 0x00, 0x2a }, // GIP_VST_1
> + { 0x01, 0x2a }, // GIP_VST_2
> + { 0x02, 0x2a }, // GIP_VST_3
> + { 0x03, 0x2a }, // GIP_VST_4
> + { 0x04, 0x61 }, // GIP_VST_5
> + { 0x05, 0x80 }, // GIP_VST_6
> + { 0x06, 0xc7 }, // GIP_VST_7
> + { 0x07, 0x01 }, // GIP_VST_8
> + { 0x08, 0x03 }, // GIP_VST_9
> + { 0x09, 0x04 }, // GIP_VST_10
> + { 0x70, 0x22 }, // GIP_ECLK1
> + { 0x71, 0x80 }, // GIP_ECLK2
> + { 0x30, 0x2a }, // GIP_CLK_1
> + { 0x31, 0x2a }, // GIP_CLK_2
> + { 0x32, 0x2a }, // GIP_CLK_3
> + { 0x33, 0x2a }, // GIP_CLK_4
> + { 0x34, 0x61 }, // GIP_CLK_5
> + { 0x35, 0xc5 }, // GIP_CLK_6
> + { 0x36, 0x80 }, // GIP_CLK_7
> + { 0x37, 0x23 }, // GIP_CLK_8
> + { 0x40, 0x03 }, // GIP_CLKA_1
> + { 0x41, 0x04 }, // GIP_CLKA_2
> + { 0x42, 0x05 }, // GIP_CLKA_3
> + { 0x43, 0x06 }, // GIP_CLKA_4
> + { 0x44, 0x11 }, // GIP_CLKA_5
> + { 0x45, 0xe8 }, // GIP_CLKA_6
> + { 0x46, 0xe9 }, // GIP_CLKA_7
> + { 0x47, 0x11 }, // GIP_CLKA_8
> + { 0x48, 0xea }, // GIP_CLKA_9
> + { 0x49, 0xeb }, // GIP_CLKA_10
> + { 0x50, 0x07 }, // GIP_CLKB_1
> + { 0x51, 0x08 }, // GIP_CLKB_2
> + { 0x52, 0x09 }, // GIP_CLKB_3
> + { 0x53, 0x0a }, // GIP_CLKB_4
> + { 0x54, 0x11 }, // GIP_CLKB_5
> + { 0x55, 0xec }, // GIP_CLKB_6
> + { 0x56, 0xed }, // GIP_CLKB_7
> + { 0x57, 0x11 }, // GIP_CLKB_8
> + { 0x58, 0xef }, // GIP_CLKB_9
> + { 0x59, 0xf0 }, // GIP_CLKB_10
> + // Map internal GOA signals to GOA output pad
> + { 0xb1, 0x01 }, // PANELD2U2
> + { 0xb4, 0x15 }, // PANELD2U5
> + { 0xb5, 0x16 }, // PANELD2U6
> + { 0xb6, 0x09 }, // PANELD2U7
> + { 0xb7, 0x0f }, // PANELD2U8
> + { 0xb8, 0x0d }, // PANELD2U9
> + { 0xb9, 0x0b }, // PANELD2U10
> + { 0xba, 0x00 }, // PANELD2U11
> + { 0xc7, 0x02 }, // PANELD2U24
> + { 0xca, 0x17 }, // PANELD2U27
> + { 0xcb, 0x18 }, // PANELD2U28
> + { 0xcc, 0x0a }, // PANELD2U29
> + { 0xcd, 0x10 }, // PANELD2U30
> + { 0xce, 0x0e }, // PANELD2U31
> + { 0xcf, 0x0c }, // PANELD2U32
> + { 0xd0, 0x00 }, // PANELD2U33
> + // Map internal GOA signals to GOA output pad
> + { 0x81, 0x00 }, // PANELU2D2
> + { 0x84, 0x15 }, // PANELU2D5
> + { 0x85, 0x16 }, // PANELU2D6
> + { 0x86, 0x10 }, // PANELU2D7
> + { 0x87, 0x0a }, // PANELU2D8
> + { 0x88, 0x0c }, // PANELU2D9
> + { 0x89, 0x0e }, // PANELU2D10
> + { 0x8a, 0x02 }, // PANELU2D11
> + { 0x97, 0x00 }, // PANELU2D24
> + { 0x9a, 0x17 }, // PANELU2D27
> + { 0x9b, 0x18 }, // PANELU2D28
> + { 0x9c, 0x0f }, // PANELU2D29
> + { 0x9d, 0x09 }, // PANELU2D30
> + { 0x9e, 0x0b }, // PANELU2D31
> + { 0x9f, 0x0d }, // PANELU2D32
> + { 0xa0, 0x01 }, // PANELU2D33
> + // EXTC Command set enable, select page 2
> + { 0xff, 0x30 }, { 0xff, 0x52 }, { 0xff, 0x02 },
> + // Unknown registers
> + { 0x01, 0x01 },
> + { 0x02, 0xda },
> + { 0x03, 0xba },
> + { 0x04, 0xa8 },
> + { 0x05, 0x9a },
> + { 0x06, 0x70 },
> + { 0x07, 0xff },
> + { 0x08, 0x91 },
> + { 0x09, 0x90 },
> + { 0x0a, 0xff },
> + { 0x0b, 0x8f },
> + { 0x0c, 0x60 },
> + { 0x0d, 0x58 },
> + { 0x0e, 0x48 },
> + { 0x0f, 0x38 },
> + { 0x10, 0x2b },
> + // EXTC Command set enable, select page 0
> + { 0xff, 0x30 }, { 0xff, 0x52 }, { 0xff, 0x00 },
> + // Display Access Control
> + { 0x36, 0x0a }, // bgr = 1, ss = 1, gs = 0
> +};
> +
> static inline struct nv3052c *to_nv3052c(struct drm_panel *panel)
> {
> return container_of(panel, struct nv3052c, panel);
> @@ -670,6 +866,21 @@ static const struct drm_display_mode fs035vg158_modes[] = {
> },
> };
>
> +static const struct drm_display_mode wl_355608_a8_mode[] = {
> + {
> + .clock = 24000,
> + .hdisplay = 640,
> + .hsync_start = 640 + 64,
> + .hsync_end = 640 + 64 + 20,
> + .htotal = 640 + 64 + 20 + 46,
> + .vdisplay = 480,
> + .vsync_start = 480 + 21,
> + .vsync_end = 480 + 21 + 4,
> + .vtotal = 480 + 21 + 4 + 15,
> + .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
> + },
> +};
> +
> static const struct nv3052c_panel_info ltk035c5444t_panel_info = {
> .display_modes = ltk035c5444t_modes,
> .num_modes = ARRAY_SIZE(ltk035c5444t_modes),
> @@ -692,9 +903,21 @@ static const struct nv3052c_panel_info fs035vg158_panel_info = {
> .panel_regs_len = ARRAY_SIZE(fs035vg158_panel_regs),
> };
>
> +static const struct nv3052c_panel_info wl_355608_a8_panel_info = {
> + .display_modes = wl_355608_a8_mode,
> + .num_modes = ARRAY_SIZE(wl_355608_a8_mode),
> + .width_mm = 150,
> + .height_mm = 94,
> + .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
> + .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
> + .panel_regs = wl_355608_a8_panel_regs,
> + .panel_regs_len = ARRAY_SIZE(wl_355608_a8_panel_regs),
> +};
> +
> static const struct spi_device_id nv3052c_ids[] = {
> { "ltk035c5444t", },
> { "fs035vg158", },
> + { "wl-355608-a8", },
> { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(spi, nv3052c_ids);
> @@ -702,6 +925,7 @@ MODULE_DEVICE_TABLE(spi, nv3052c_ids);
> static const struct of_device_id nv3052c_of_match[] = {
> { .compatible = "leadtek,ltk035c5444t", .data = <k035c5444t_panel_info },
> { .compatible = "fascontek,fs035vg158", .data = &fs035vg158_panel_info },
> + { .compatible = "wl-355608-a8", .data = &wl_355608_a8_panel_info },
> { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(of, nv3052c_of_match);
> @@ -719,4 +943,5 @@ module_spi_driver(nv3052c_driver);
>
> MODULE_AUTHOR("Paul Cercueil <paul@crapouillou.net>");
> MODULE_AUTHOR("Christophe Branchereau <cbranchereau@gmail.com>");
> +MODULE_AUTHOR("Ryan Walklin <ryan@testtoast.com");
> MODULE_LICENSE("GPL v2");
> --
> 2.45.1
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-05-31 17:56 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-30 8:22 [PATCH v2 0/2] Add WL-355608-A8 panel Ryan Walklin
2024-05-30 8:22 ` [PATCH v2 1/2] dt-bindings: display: panel: " Ryan Walklin
2024-05-30 16:01 ` Conor Dooley
2024-05-30 16:03 ` Conor Dooley
2024-05-30 21:05 ` Ryan Walklin
2024-05-30 8:22 ` [PATCH v2 2/2] drm: panel: nv3052c: " Ryan Walklin
2024-05-31 17:56 ` Jessica Zhang
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 NNTP newsgroup(s).