Skip to contentSkip to conversation

Add WL-355608-A8 panel

PATCH Applied Ryan Walklin 5 participants 19 messages May 30, 2024 – Jun 26, 2024

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

v3 cover Add WL-355608-A8 panel

Hello,

V3 of this patch with further cleanup to DT binding example code and whitespace fixes in driver code. No functional change from V2.

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
Signature · 1 line
2.45.1
#1 lore raw

PATCH v3 1/2 dt-bindings: display: panel: Add WL-355608-A8 panel

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.

---

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

Changelog v2..v3:
- Remove errant tab and un-needed spi node label from example
- Add Reviewed-by tag

---
 .../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
Documentation/devicetree/bindings/display/panel/wl-355608-a8.yaml new file +60 -0
new file mode 100644
index 0000000000..e552d01b52
@@ -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 <[email protected]>
+
+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 {
+        #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 = <&reg_lcd>;
+
+            port {
+                endpoint {
+                    remote-endpoint = <&tcon_lcd0_out_lcd>;
+                };
+            };
+        };
+    };
Signature · 1 line
2.45.1
maintainer
#2 lore raw

Re: [PATCH v3 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel

Quoted 3 lines · 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.

Where has this consensus been found?

I had a look at the previous discussions, and I can't find any consensus being reached there. And for that kind of thing, having the ack or review of any of the DT maintainers would have been great.

For this kind of cases, we usually use the device it's attached to as the vendor, so anbernic in this case. Can you send a followup patch?

Maxime

maintainer
#3 lore raw

Re: [PATCH v3 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel

Quoted 10 lines · Maxime Ripard
Quoted 3 lines · 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.

Where has this consensus been found?

I had a look at the previous discussions, and I can't find any consensus being reached there. And for that kind of thing, having the ack or review of any of the DT maintainers would have been great.

There was a consensus with Conor, this is why he acked v2, see
https://lore.kernel.org/all/20240525-velvet-citable-a45dd06847a7@spud/

```
I think if we genuinely do not know what the vendor is then we just
don't have a prefix.
```

I agree with Conor so I applied the patchset after Connor reviewed it and the comment was fixed in v3:
https://lore.kernel.org/all/20240530-satchel-playgroup-e8aa6937b8b9@spud/

Quoted 5 lines

For this kind of cases, we usually use the device it's attached to as the vendor, so anbernic in this case. Can you send a followup patch?

Maxime

Neil

#4 lore raw

Re: [PATCH v3 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel

On Thu, 6 Jun 2024, at 9:32 PM, Maxime Ripard wrote:
Hi Maxime, thanks for reviewing.

Quoted 1 line

Where has this consensus been found?

As Neil notes Conor suggested it [1], and we did consider Hironori's suggestion [2] of using anbernic as the vendor prefix, although my (not strong) feeling at the time was because Anbernic is not the panel vendor, just integrating an unknown OEM's panel into their devices, so at the time I fit was not quite accurate to say Anbernic was the vendor.

Some discussion was also had on IRC at #linux-sunxi [3]. Admittedly not a *broad* consensus, but all offered opinions were taken and the patch was accepted subsequently.

Quoted 2 lines

For this kind of cases, we usually use the device it's attached to as the vendor, so anbernic in this case. Can you send a followup patch?

Thanks for the clarification, I was not aware of this. Happy to prepare one but will perhaps wait to see if there are any other comments.

Quoted 1 line

Maxime

Regards,

Ryan

[1] https://lore.kernel.org/dri-devel/20240525-velvet-citable-a45dd06847a7@spud/
[2] https://lore.kernel.org/dri-devel/CAG40kxGEw4AyHk3P_dixKRdesGT0pLtMfpYcCCTbVGUs2NMD-w@mail.gmail.com/
[3] https://oftc.irclog.whitequark.org/linux-sunxi/2024-05-27#332264

maintainer
#5 lore raw

Re: [PATCH v3 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel

Quoted 12 lines · Ryan Walklin

On Thu, 6 Jun 2024, at 9:32 PM, Maxime Ripard wrote:
Hi Maxime, thanks for reviewing.

Quoted 1 line

Where has this consensus been found?

As Neil notes Conor suggested it [1], and we did consider Hironori's suggestion [2] of using anbernic as the vendor prefix, although my (not strong) feeling at the time was because Anbernic is not the panel vendor, just integrating an unknown OEM's panel into their devices, so at the time I fit was not quite accurate to say Anbernic was the vendor.

Quoted 3 lines

Some discussion was also had on IRC at #linux-sunxi [3]. Admittedly not a *broad* consensus, but all offered opinions were taken and the patch was accepted subsequently.

Respectfully, #linux-sunxi isn't the persons you should be discussing this with.

Maxime

maintainer
#6 lore raw

Re: [PATCH v3 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel

In reply to Neil Armstrong
Quoted 6 lines · Neil Armstrong
Quoted 5 lines · Maxime Ripard
Quoted 3 lines · 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.

Quoted 8 lines
Quoted 5 lines

Where has this consensus been found?

I had a look at the previous discussions, and I can't find any consensus being reached there. And for that kind of thing, having the ack or review of any of the DT maintainers would have been great.

There was a consensus with Conor, this is why he acked v2, see
https://lore.kernel.org/all/20240525-velvet-citable-a45dd06847a7@spud/

It's probably a matter of semantics here, but if it's with only one person, it's not a consensus but an agreement.

Quoted 4 lines
```
I think if we genuinely do not know what the vendor is then we just
don't have a prefix.
```

And even then, I don't interpret Conor's statement as a formal agreement but rather an acknowledgment of the issue.

Quoted 2 lines

I agree with Conor so I applied the patchset after Connor reviewed it and the comment was fixed in v3:
https://lore.kernel.org/all/20240530-satchel-playgroup-e8aa6937b8b9@spud/

Yeah, I know. Still, it's a major deviation to what we've always been doing, getting the DT maintainers voice on that would have been a good idea.

Maxime

#7 lore raw

Re: [PATCH v3 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel

Quoted 19 lines · Maxime Ripard
Quoted 6 lines · Neil Armstrong
Quoted 5 lines · Maxime Ripard
Quoted 3 lines · 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.

Quoted 8 lines
Quoted 5 lines

Where has this consensus been found?

I had a look at the previous discussions, and I can't find any consensus being reached there. And for that kind of thing, having the ack or review of any of the DT maintainers would have been great.

There was a consensus with Conor, this is why he acked v2, see
https://lore.kernel.org/all/20240525-velvet-citable-a45dd06847a7@spud/

It's probably a matter of semantics here, but if it's with only one person, it's not a consensus but an agreement.

Quoted 7 lines
Quoted 4 lines
```
I think if we genuinely do not know what the vendor is then we just
don't have a prefix.
```

And even then, I don't interpret Conor's statement as a formal agreement but rather an acknowledgment of the issue.

I mean, I specifically left an r-b below that line in v2:
https://lore.kernel.org/all/20240530-satchel-playgroup-e8aa6937b8b9@spud/

I'm not a displays guy, so my sources were limited to what I could find from search engines, but I spent some time looking for an actual vendor of the panel and could not. All I found was various listings on places like AliExpress that did not mention an manufacturer. I'd rather not invent a vendor because we could not find the actual vendor of the panel & it seemed rather unreasonable to block support for the device on the basis of not being able to figure out the vendor. If you, as someone knowledgeable on displays, can figure the vendor out, then yeah we should definitely add it.

Quoted 6 lines
Quoted 2 lines

I agree with Conor so I applied the patchset after Connor reviewed it and the comment was fixed in v3:
https://lore.kernel.org/all/20240530-satchel-playgroup-e8aa6937b8b9@spud/

Yeah, I know. Still, it's a major deviation to what we've always been doing, getting the DT maintainers voice on that would have been a good idea.

Is it a consensus of DT maintainers you're looking for?

Cheers,
Conor.

maintainer
#8 lore raw

Re: [PATCH v3 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel

Hi Conor,

Sorry, I missed the news of you becoming a DT maintainer, so most of my previous points are obviously bogus. And congrats :)

Quoted 31 lines · Conor Dooley
Quoted 19 lines · Maxime Ripard
Quoted 6 lines · Neil Armstrong
Quoted 5 lines · Maxime Ripard
Quoted 3 lines · 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.

Quoted 8 lines
Quoted 5 lines

Where has this consensus been found?

I had a look at the previous discussions, and I can't find any consensus being reached there. And for that kind of thing, having the ack or review of any of the DT maintainers would have been great.

There was a consensus with Conor, this is why he acked v2, see
https://lore.kernel.org/all/20240525-velvet-citable-a45dd06847a7@spud/

It's probably a matter of semantics here, but if it's with only one person, it's not a consensus but an agreement.

Quoted 7 lines
Quoted 4 lines
```
I think if we genuinely do not know what the vendor is then we just
don't have a prefix.
```

And even then, I don't interpret Conor's statement as a formal agreement but rather an acknowledgment of the issue.

I mean, I specifically left an r-b below that line in v2:
https://lore.kernel.org/all/20240530-satchel-playgroup-e8aa6937b8b9@spud/

Quoted 9 lines

I'm not a displays guy, so my sources were limited to what I could find from search engines, but I spent some time looking for an actual vendor of the panel and could not. All I found was various listings on places like AliExpress that did not mention an manufacturer. I'd rather not invent a vendor because we could not find the actual vendor of the panel & it seemed rather unreasonable to block support for the device on the basis of not being able to figure out the vendor. If you, as someone knowledgeable on displays, can figure the vendor out, then yeah we should definitely add it.

It's still a bit surprising to me. We've merged[1][2][3][4], and are still merging[5], panels from this particular vendor that have no clearly identified OEMs. Just like any other panel, really. We almost *never* have the actual OEM, we just go with whatever is the easiest to identify it.

Plus, if there ever is another WL-355608-A8 part from a completely unrelated vendor, then you'll have a naming clash with no clear indication about which is which.

Maxime

1: https://lore.kernel.org/all/[email protected]/
2: https://lore.kernel.org/all/[email protected]/
3: https://lore.kernel.org/all/[email protected]/
4: https://lore.kernel.org/all/[email protected]/
5: https://lore.kernel.org/dri-devel/[email protected]/

#9 lore raw

Re: [PATCH v3 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel

Quoted 4 lines · Maxime Ripard

Hi Conor,

Sorry, I missed the news of you becoming a DT maintainer, so most of my previous points are obviously bogus. And congrats :)

I've been doing it for over a year, so news travels to some corners slowly I guess. I'm not just being a pest in dozens of subsystems for fun!

Quoted 42 lines · Conor Dooley
Quoted 31 lines · Maxime Ripard
Quoted 19 lines · Neil Armstrong
Quoted 6 lines · Maxime Ripard
Quoted 5 lines · Ryan Walklin
Quoted 3 lines

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.

Quoted 8 lines
Quoted 5 lines

Where has this consensus been found?

I had a look at the previous discussions, and I can't find any consensus being reached there. And for that kind of thing, having the ack or review of any of the DT maintainers would have been great.

There was a consensus with Conor, this is why he acked v2, see
https://lore.kernel.org/all/20240525-velvet-citable-a45dd06847a7@spud/

It's probably a matter of semantics here, but if it's with only one person, it's not a consensus but an agreement.

Quoted 7 lines
Quoted 4 lines
```
I think if we genuinely do not know what the vendor is then we just
don't have a prefix.
```

And even then, I don't interpret Conor's statement as a formal agreement but rather an acknowledgment of the issue.

I mean, I specifically left an r-b below that line in v2:
https://lore.kernel.org/all/20240530-satchel-playgroup-e8aa6937b8b9@spud/

Quoted 9 lines

I'm not a displays guy, so my sources were limited to what I could find from search engines, but I spent some time looking for an actual vendor of the panel and could not. All I found was various listings on places like AliExpress that did not mention an manufacturer. I'd rather not invent a vendor because we could not find the actual vendor of the panel & it seemed rather unreasonable to block support for the device on the basis of not being able to figure out the vendor. If you, as someone knowledgeable on displays, can figure the vendor out, then yeah we should definitely add it.

Quoted 5 lines

It's still a bit surprising to me. We've merged[1][2][3][4], and are still merging[5], panels from this particular vendor that have no clearly identified OEMs. Just like any other panel, really. We almost *never* have the actual OEM, we just go with whatever is the easiest to identify it.

It wasn't (isn't?) clear to me that Abernic is even the vendor of the panel, just that it works for their devices. If there's an established policy here of making up vendors for these panels, then sure, override me and use them as the prefix.

Quoted 9 lines

Plus, if there ever is another WL-355608-A8 part from a completely unrelated vendor, then you'll have a naming clash with no clear indication about which is which.

1: https://lore.kernel.org/all/[email protected]/
2: https://lore.kernel.org/all/[email protected]/
3: https://lore.kernel.org/all/[email protected]/
4: https://lore.kernel.org/all/[email protected]/
5: https://lore.kernel.org/dri-devel/[email protected]/

maintainer
#10 lore raw

Re: [PATCH v3 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel

Quoted 57 lines · Conor Dooley
Quoted 4 lines · Maxime Ripard

Hi Conor,

Sorry, I missed the news of you becoming a DT maintainer, so most of my previous points are obviously bogus. And congrats :)

I've been doing it for over a year, so news travels to some corners slowly I guess. I'm not just being a pest in dozens of subsystems for fun!

Quoted 42 lines · Conor Dooley
Quoted 31 lines · Maxime Ripard
Quoted 19 lines · Neil Armstrong
Quoted 6 lines · Maxime Ripard
Quoted 5 lines · Ryan Walklin
Quoted 3 lines

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.

Quoted 8 lines
Quoted 5 lines

Where has this consensus been found?

I had a look at the previous discussions, and I can't find any consensus being reached there. And for that kind of thing, having the ack or review of any of the DT maintainers would have been great.

There was a consensus with Conor, this is why he acked v2, see
https://lore.kernel.org/all/20240525-velvet-citable-a45dd06847a7@spud/

It's probably a matter of semantics here, but if it's with only one person, it's not a consensus but an agreement.

Quoted 7 lines
Quoted 4 lines
```
I think if we genuinely do not know what the vendor is then we just
don't have a prefix.
```

And even then, I don't interpret Conor's statement as a formal agreement but rather an acknowledgment of the issue.

I mean, I specifically left an r-b below that line in v2:
https://lore.kernel.org/all/20240530-satchel-playgroup-e8aa6937b8b9@spud/

Quoted 9 lines

I'm not a displays guy, so my sources were limited to what I could find from search engines, but I spent some time looking for an actual vendor of the panel and could not. All I found was various listings on places like AliExpress that did not mention an manufacturer. I'd rather not invent a vendor because we could not find the actual vendor of the panel & it seemed rather unreasonable to block support for the device on the basis of not being able to figure out the vendor. If you, as someone knowledgeable on displays, can figure the vendor out, then yeah we should definitely add it.

Quoted 5 lines

It's still a bit surprising to me. We've merged[1][2][3][4], and are still merging[5], panels from this particular vendor that have no clearly identified OEMs. Just like any other panel, really. We almost *never* have the actual OEM, we just go with whatever is the easiest to identify it.

Quoted 8 lines

It wasn't (isn't?) clear to me that Abernic is even the vendor of the panel, just that it works for their devices. If there's an established policy here of making up vendors for these panels, then sure, override me and use them as the prefix.

Quoted 3 lines

Plus, if there ever is another WL-355608-A8 part from a completely unrelated vendor, then you'll have a naming clash with no clear indication about which is which.

Not sure we can say there's an established policy ongoing here, we try to use the marking we find on the panel when possible and when not possible we use the vendor + name of the device in last ressort.

Neil

Quoted 8 lines
Quoted 6 lines

1: https://lore.kernel.org/all/[email protected]/
2: https://lore.kernel.org/all/[email protected]/
3: https://lore.kernel.org/all/[email protected]/
4: https://lore.kernel.org/all/[email protected]/
5: https://lore.kernel.org/dri-devel/[email protected]/

maintainer
#11 lore raw

Re: [PATCH v3 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel

Quoted 63 lines · Neil Armstrong
Quoted 62 lines · Conor Dooley
Quoted 4 lines · Maxime Ripard

Hi Conor,

Sorry, I missed the news of you becoming a DT maintainer, so most of my previous points are obviously bogus. And congrats :)

I've been doing it for over a year, so news travels to some corners slowly I guess. I'm not just being a pest in dozens of subsystems for fun!

Quoted 42 lines · Conor Dooley
Quoted 31 lines · Maxime Ripard
Quoted 19 lines · Neil Armstrong
Quoted 6 lines · Maxime Ripard
Quoted 5 lines · Ryan Walklin
Quoted 3 lines

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.

Quoted 8 lines
Quoted 5 lines

Where has this consensus been found?

I had a look at the previous discussions, and I can't find any consensus being reached there. And for that kind of thing, having the ack or review of any of the DT maintainers would have been great.

There was a consensus with Conor, this is why he acked v2, see
https://lore.kernel.org/all/20240525-velvet-citable-a45dd06847a7@spud/

It's probably a matter of semantics here, but if it's with only one person, it's not a consensus but an agreement.

Quoted 7 lines
Quoted 4 lines
```
I think if we genuinely do not know what the vendor is then we just
don't have a prefix.
```

And even then, I don't interpret Conor's statement as a formal agreement but rather an acknowledgment of the issue.

I mean, I specifically left an r-b below that line in v2:
https://lore.kernel.org/all/20240530-satchel-playgroup-e8aa6937b8b9@spud/

Quoted 9 lines

I'm not a displays guy, so my sources were limited to what I could find from search engines, but I spent some time looking for an actual vendor of the panel and could not. All I found was various listings on places like AliExpress that did not mention an manufacturer. I'd rather not invent a vendor because we could not find the actual vendor of the panel & it seemed rather unreasonable to block support for the device on the basis of not being able to figure out the vendor. If you, as someone knowledgeable on displays, can figure the vendor out, then yeah we should definitely add it.

Quoted 5 lines

It's still a bit surprising to me. We've merged[1][2][3][4], and are still merging[5], panels from this particular vendor that have no clearly identified OEMs. Just like any other panel, really. We almost *never* have the actual OEM, we just go with whatever is the easiest to identify it.

It wasn't (isn't?) clear to me that Abernic is even the vendor of the panel, just that it works for their devices. If there's an established policy here of making up vendors for these panels, then sure, override me and use them as the prefix.

Quoted 7 lines
Quoted 3 lines
Quoted 3 lines

Plus, if there ever is another WL-355608-A8 part from a completely unrelated vendor, then you'll have a naming clash with no clear indication about which is which.

Not sure we can say there's an established policy ongoing here, we try to use the marking we find on the panel when possible and when not possible we use the vendor + name of the device in last ressort.

So pretty much what I was asking for?

We're getting fairly late into the release cycle and I'd like to get it fixed before the release. Can you send a patch to address it please?

Maxime

#12 lore raw

Re: [PATCH v3 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel

Hi Maxime,

Quoted 2 lines · Maxime Ripard

We're getting fairly late into the release cycle and I'd like to get it fixed before the release. Can you send a patch to address it please?

Sure, happy to. So to confirm add 'anbernic' to the vendor binding list and 'anbernic,wl-355608-a8' as the panel compatible?

Regards,

Ryan

maintainer
#13 lore raw

Re: [PATCH v3 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel

Quoted 8 lines · Ryan Walklin

Hi Maxime,

Quoted 2 lines · Maxime Ripard

We're getting fairly late into the release cycle and I'd like to get it fixed before the release. Can you send a patch to address it please?

Sure, happy to. So to confirm add 'anbernic' to the vendor binding list and 'anbernic,wl-355608-a8' as the panel compatible?

Well anbernic is not the wl-355608-a8 panel manufaturer, so as Maxime is suggesting to use the name of the device where the panel is found like anbernic,rg353v-panel-v2 as submitted in https://lore.kernel.org/all/[email protected]/

Personally I don't care, if DT maintainers agrees having "wl-355608-a8" as compatible, it's perfectly fine to use it from the driver since it's solely a bindings decision and not a driver design issue.

Neil

Quoted 4 lines

Regards,

Ryan

#14 lore raw

Re: [PATCH v3 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel

Quoted 6 lines · Neil Armstrong

Well anbernic is not the wl-355608-a8 panel manufaturer, so as Maxime is suggesting to use the
name of the device where the panel is found like anbernic,rg353v-panel-v2 as submitted
in
https://lore.kernel.org/all/[email protected]/

Show quoted text

Understood thanks. I have no strong feelings either, using the device name is sensible. Will prepare a patch.

Regards,

Ryan

(apologies, replying-all this time)

maintainer
#15 lore raw

Re: [PATCH v3 1/2] dt-bindings: display: panel: Add WL-355608-A8 panel

In reply to Maxime Ripard
Quoted 19 lines · Maxime Ripard
Quoted 6 lines · Neil Armstrong
Quoted 5 lines · Maxime Ripard
Quoted 3 lines · 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.

Quoted 8 lines
Quoted 5 lines

Where has this consensus been found?

I had a look at the previous discussions, and I can't find any consensus being reached there. And for that kind of thing, having the ack or review of any of the DT maintainers would have been great.

There was a consensus with Conor, this is why he acked v2, see
https://lore.kernel.org/all/20240525-velvet-citable-a45dd06847a7@spud/

It's probably a matter of semantics here, but if it's with only one person, it's not a consensus but an agreement.

Quoted 7 lines
Quoted 4 lines
```
I think if we genuinely do not know what the vendor is then we just
don't have a prefix.
```

And even then, I don't interpret Conor's statement as a formal agreement but rather an acknowledgment of the issue.

Well since both maintainers (DT and Panel) agreed, isn't it all good ?

Quoted 7 lines
Quoted 3 lines

I agree with Conor so I applied the patchset after Connor reviewed it and the comment was fixed in v3:
https://lore.kernel.org/all/20240530-satchel-playgroup-e8aa6937b8b9@spud/

Yeah, I know. Still, it's a major deviation to what we've always been doing, getting the DT maintainers voice on that would have been a good idea.

I consider Conor's voice enough as one of the DT maintainers.

Neil

Quoted 2 lines

Maxime

#16 lore raw

PATCH v3 2/2 drm: panel: nv3052c: Add WL-355608-A8 panel

In reply to 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

---

Changelog v1..v2:
- Update .compatible string to match dt-binding
- Add co-developer sign-off and review tags

Changelog v2..v3:
- Trailing whitespace as per checkpatch.pl (no functional changes)

---
 .../gpu/drm/panel/panel-newvision-nv3052c.c   | 225 ++++++++++++++++++
 1 file changed, 225 insertions(+)
drivers/gpu/drm/panel/panel-newvision-nv3052c.c +225 -0
index 1aab0c9ae5..e986d98235 100644
@@ -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 = &ltk035c5444t_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 <[email protected]>");
 MODULE_AUTHOR("Christophe Branchereau <[email protected]>");
+MODULE_AUTHOR("Ryan Walklin <[email protected]");
 MODULE_LICENSE("GPL v2");
Signature · 1 line
2.45.1
maintainer Reviewed-by on v3 2/2
#17 lore raw

Re: [PATCH v3 2/2] drm: panel: nv3052c: Add WL-355608-A8 panel

Quoted 299 lines · 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

---

Changelog v1..v2:
- Update .compatible string to match dt-binding
- Add co-developer sign-off and review tags

Changelog v2..v3:
- Trailing whitespace as per checkpatch.pl (no functional changes)

---
  .../gpu/drm/panel/panel-newvision-nv3052c.c   | 225 ++++++++++++++++++
  1 file changed, 225 insertions(+)
drivers/gpu/drm/panel/panel-newvision-nv3052c.c +224 -0
index 1aab0c9ae5..e986d98235 100644
@@ -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 = &ltk035c5444t_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);

drivers/gpu/drm/panel/panel-newvision-nv3052c.c module_spi_driver(nv3052c_driver); · line 947

Quoted 5 lines
drivers/gpu/drm/panel/panel-newvision-nv3052c.c +1 -0
@@ -719,4 +943,5 @@ module_spi_driver(nv3052c_driver);
 
  MODULE_AUTHOR("Paul Cercueil <[email protected]>");
  MODULE_AUTHOR("Christophe Branchereau <[email protected]>");
+MODULE_AUTHOR("Ryan Walklin <[email protected]");
  MODULE_LICENSE("GPL v2");
maintainer Applied
#18 lore raw
In reply to Ryan Walklin

Hi,

Quoted 8 lines · Ryan Walklin

V3 of this patch with further cleanup to DT binding example code and whitespace fixes in driver code. No functional change from V2.

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.

[...]

Thanks, Applied to https://gitlab.freedesktop.org/drm/misc/kernel.git (drm-misc-next)

[1/2] dt-bindings: display: panel: Add WL-355608-A8 panel

      https://gitlab.freedesktop.org/drm/misc/kernel/-/commit/45b888a8980ae9a09fbf2f50b0ffb7505a834533
[2/2] drm: panel: nv3052c: Add WL-355608-A8 panel
      https://gitlab.freedesktop.org/drm/misc/kernel/-/commit/62ea2eeba7bf11f4b04e080475de93c2f8ee0f92
Signature · 1 line
Neil