* [RFC PATCH v2 0/9] Add FS035VG158 panel
@ 2023-09-18 12:58 John Watts
2023-09-18 12:58 ` [RFC PATCH v2 1/9] drm/panel: nv3052c: Document known register names John Watts
` (8 more replies)
0 siblings, 9 replies; 20+ messages in thread
From: John Watts @ 2023-09-18 12:58 UTC (permalink / raw)
To: dri-devel
Cc: Neil Armstrong, Jessica Zhang, Sam Ravnborg, David Airlie,
Daniel Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Heiko Stuebner, Chris Morgan, Jagan Teki, John Watts,
Paul Cercueil, Christophe Branchereau, devicetree, linux-kernel
Hello there,
This RFC introduces support for the FS035VG158 LCD panel, cleaning up
the nv3052c driver on the way and documentating existing panel code.
John.
v1 -> v2:
- Fixed a variable declaration style error
- Cleaned up device tree yaml
John Watts (9):
drm/panel: nv3052c: Document known register names
drm/panel: nv3052c: Add SPI device IDs
drm/panel: nv3052c: Sleep for 150ms after reset
drm/panel: nv3052c: Wait before entering sleep mode
drm/panel: nv3052c: Allow specifying registers per panel
drm/panel: nv3052c: Add Fascontek FS035VG158 LCD display
dt-bindings: display: panel: Clean up leadtek,ltk035c5444t properties
dt-bindings: vendor-prefixes: Add fascontek
dt-bindings: display: panel: add Fascontek FS035VG158 panel
.../display/panel/fascontek,fs035vg158.yaml | 56 ++
.../display/panel/leadtek,ltk035c5444t.yaml | 8 +-
.../devicetree/bindings/vendor-prefixes.yaml | 2 +
.../gpu/drm/panel/panel-newvision-nv3052c.c | 520 +++++++++++++-----
4 files changed, 441 insertions(+), 145 deletions(-)
create mode 100644 Documentation/devicetree/bindings/display/panel/fascontek,fs035vg158.yaml
--
2.42.0
^ permalink raw reply [flat|nested] 20+ messages in thread
* [RFC PATCH v2 1/9] drm/panel: nv3052c: Document known register names
2023-09-18 12:58 [RFC PATCH v2 0/9] Add FS035VG158 panel John Watts
@ 2023-09-18 12:58 ` John Watts
2023-09-18 12:58 ` [RFC PATCH v2 2/9] drm/panel: nv3052c: Add SPI device IDs John Watts
` (7 subsequent siblings)
8 siblings, 0 replies; 20+ messages in thread
From: John Watts @ 2023-09-18 12:58 UTC (permalink / raw)
To: dri-devel
Cc: Neil Armstrong, Jessica Zhang, Sam Ravnborg, David Airlie,
Daniel Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Heiko Stuebner, Chris Morgan, Jagan Teki, John Watts,
Paul Cercueil, Christophe Branchereau, devicetree, linux-kernel
Many of these registers have a known name in the public datasheet.
Document them as comments for reference.
Signed-off-by: John Watts <contact@jookia.org>
Reviewed-by: Jessica Zhang <quic_jesszhan@quicinc.com>
---
.../gpu/drm/panel/panel-newvision-nv3052c.c | 261 +++++++++---------
1 file changed, 132 insertions(+), 129 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
index 71e57de6d8b2..589431523ce7 100644
--- a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
+++ b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
@@ -42,9 +42,9 @@ struct nv3052c_reg {
};
static const struct nv3052c_reg nv3052c_panel_regs[] = {
- { 0xff, 0x30 },
- { 0xff, 0x52 },
- { 0xff, 0x01 },
+ // EXTC Command set enable, select page 1
+ { 0xff, 0x30 }, { 0xff, 0x52 }, { 0xff, 0x01 },
+ // Mostly unknown registers
{ 0xe3, 0x00 },
{ 0x40, 0x00 },
{ 0x03, 0x40 },
@@ -62,15 +62,15 @@ static const struct nv3052c_reg nv3052c_panel_regs[] = {
{ 0x25, 0x06 },
{ 0x26, 0x14 },
{ 0x27, 0x14 },
- { 0x38, 0xcc },
- { 0x39, 0xd7 },
- { 0x3a, 0x4a },
+ { 0x38, 0xcc }, // VCOM_ADJ1
+ { 0x39, 0xd7 }, // VCOM_ADJ2
+ { 0x3a, 0x4a }, // VCOM_ADJ3
{ 0x28, 0x40 },
{ 0x29, 0x01 },
{ 0x2a, 0xdf },
{ 0x49, 0x3c },
- { 0x91, 0x77 },
- { 0x92, 0x77 },
+ { 0x91, 0x77 }, // EXTPW_CTRL2
+ { 0x92, 0x77 }, // EXTPW_CTRL3
{ 0xa0, 0x55 },
{ 0xa1, 0x50 },
{ 0xa4, 0x9c },
@@ -94,123 +94,126 @@ static const struct nv3052c_reg nv3052c_panel_regs[] = {
{ 0xb8, 0x26 },
{ 0xf0, 0x00 },
{ 0xf6, 0xc0 },
- { 0xff, 0x30 },
- { 0xff, 0x52 },
- { 0xff, 0x02 },
- { 0xb0, 0x0b },
- { 0xb1, 0x16 },
- { 0xb2, 0x17 },
- { 0xb3, 0x2c },
- { 0xb4, 0x32 },
- { 0xb5, 0x3b },
- { 0xb6, 0x29 },
- { 0xb7, 0x40 },
- { 0xb8, 0x0d },
- { 0xb9, 0x05 },
- { 0xba, 0x12 },
- { 0xbb, 0x10 },
- { 0xbc, 0x12 },
- { 0xbd, 0x15 },
- { 0xbe, 0x19 },
- { 0xbf, 0x0e },
- { 0xc0, 0x16 },
- { 0xc1, 0x0a },
- { 0xd0, 0x0c },
- { 0xd1, 0x17 },
- { 0xd2, 0x14 },
- { 0xd3, 0x2e },
- { 0xd4, 0x32 },
- { 0xd5, 0x3c },
- { 0xd6, 0x22 },
- { 0xd7, 0x3d },
- { 0xd8, 0x0d },
- { 0xd9, 0x07 },
- { 0xda, 0x13 },
- { 0xdb, 0x13 },
- { 0xdc, 0x11 },
- { 0xdd, 0x15 },
- { 0xde, 0x19 },
- { 0xdf, 0x10 },
- { 0xe0, 0x17 },
- { 0xe1, 0x0a },
- { 0xff, 0x30 },
- { 0xff, 0x52 },
- { 0xff, 0x03 },
- { 0x00, 0x2a },
- { 0x01, 0x2a },
- { 0x02, 0x2a },
- { 0x03, 0x2a },
- { 0x04, 0x61 },
- { 0x05, 0x80 },
- { 0x06, 0xc7 },
- { 0x07, 0x01 },
- { 0x08, 0x03 },
- { 0x09, 0x04 },
- { 0x70, 0x22 },
- { 0x71, 0x80 },
- { 0x30, 0x2a },
- { 0x31, 0x2a },
- { 0x32, 0x2a },
- { 0x33, 0x2a },
- { 0x34, 0x61 },
- { 0x35, 0xc5 },
- { 0x36, 0x80 },
- { 0x37, 0x23 },
- { 0x40, 0x03 },
- { 0x41, 0x04 },
- { 0x42, 0x05 },
- { 0x43, 0x06 },
- { 0x44, 0x11 },
- { 0x45, 0xe8 },
- { 0x46, 0xe9 },
- { 0x47, 0x11 },
- { 0x48, 0xea },
- { 0x49, 0xeb },
- { 0x50, 0x07 },
- { 0x51, 0x08 },
- { 0x52, 0x09 },
- { 0x53, 0x0a },
- { 0x54, 0x11 },
- { 0x55, 0xec },
- { 0x56, 0xed },
- { 0x57, 0x11 },
- { 0x58, 0xef },
- { 0x59, 0xf0 },
- { 0xb1, 0x01 },
- { 0xb4, 0x15 },
- { 0xb5, 0x16 },
- { 0xb6, 0x09 },
- { 0xb7, 0x0f },
- { 0xb8, 0x0d },
- { 0xb9, 0x0b },
- { 0xba, 0x00 },
- { 0xc7, 0x02 },
- { 0xca, 0x17 },
- { 0xcb, 0x18 },
- { 0xcc, 0x0a },
- { 0xcd, 0x10 },
- { 0xce, 0x0e },
- { 0xcf, 0x0c },
- { 0xd0, 0x00 },
- { 0x81, 0x00 },
- { 0x84, 0x15 },
- { 0x85, 0x16 },
- { 0x86, 0x10 },
- { 0x87, 0x0a },
- { 0x88, 0x0c },
- { 0x89, 0x0e },
- { 0x8a, 0x02 },
- { 0x97, 0x00 },
- { 0x9a, 0x17 },
- { 0x9b, 0x18 },
- { 0x9c, 0x0f },
- { 0x9d, 0x09 },
- { 0x9e, 0x0b },
- { 0x9f, 0x0d },
- { 0xa0, 0x01 },
- { 0xff, 0x30 },
- { 0xff, 0x52 },
- { 0xff, 0x02 },
+ // 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 },
@@ -227,10 +230,10 @@ static const struct nv3052c_reg nv3052c_panel_regs[] = {
{ 0x0e, 0x48 },
{ 0x0f, 0x38 },
{ 0x10, 0x2b },
- { 0xff, 0x30 },
- { 0xff, 0x52 },
- { 0xff, 0x00 },
- { 0x36, 0x0a },
+ // 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)
--
2.42.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [RFC PATCH v2 2/9] drm/panel: nv3052c: Add SPI device IDs
2023-09-18 12:58 [RFC PATCH v2 0/9] Add FS035VG158 panel John Watts
2023-09-18 12:58 ` [RFC PATCH v2 1/9] drm/panel: nv3052c: Document known register names John Watts
@ 2023-09-18 12:58 ` John Watts
2023-09-18 12:58 ` [RFC PATCH v2 3/9] drm/panel: nv3052c: Sleep for 150ms after reset John Watts
` (6 subsequent siblings)
8 siblings, 0 replies; 20+ messages in thread
From: John Watts @ 2023-09-18 12:58 UTC (permalink / raw)
To: dri-devel
Cc: Neil Armstrong, Jessica Zhang, Sam Ravnborg, David Airlie,
Daniel Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Heiko Stuebner, Chris Morgan, Jagan Teki, John Watts,
Paul Cercueil, Christophe Branchereau, devicetree, linux-kernel
SPI drivers needs their own list of compatible device IDs in order
for automatic module loading to work. Add those for this driver.
Signed-off-by: John Watts <contact@jookia.org>
Reviewed-by: Jessica Zhang <quic_jesszhan@quicinc.com>
---
drivers/gpu/drm/panel/panel-newvision-nv3052c.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
index 589431523ce7..90dea21f9856 100644
--- a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
+++ b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
@@ -465,6 +465,12 @@ static const struct nv3052c_panel_info ltk035c5444t_panel_info = {
.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
};
+static const struct spi_device_id nv3052c_ids[] = {
+ { "ltk035c5444t", },
+ { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(spi, nv3052c_ids);
+
static const struct of_device_id nv3052c_of_match[] = {
{ .compatible = "leadtek,ltk035c5444t", .data = <k035c5444t_panel_info },
{ /* sentinel */ }
@@ -476,6 +482,7 @@ static struct spi_driver nv3052c_driver = {
.name = "nv3052c",
.of_match_table = nv3052c_of_match,
},
+ .id_table = nv3052c_ids,
.probe = nv3052c_probe,
.remove = nv3052c_remove,
};
--
2.42.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [RFC PATCH v2 3/9] drm/panel: nv3052c: Sleep for 150ms after reset
2023-09-18 12:58 [RFC PATCH v2 0/9] Add FS035VG158 panel John Watts
2023-09-18 12:58 ` [RFC PATCH v2 1/9] drm/panel: nv3052c: Document known register names John Watts
2023-09-18 12:58 ` [RFC PATCH v2 2/9] drm/panel: nv3052c: Add SPI device IDs John Watts
@ 2023-09-18 12:58 ` John Watts
2023-09-18 20:19 ` Jessica Zhang
2023-09-18 12:58 ` [RFC PATCH v2 4/9] drm/panel: nv3052c: Wait before entering sleep mode John Watts
` (5 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: John Watts @ 2023-09-18 12:58 UTC (permalink / raw)
To: dri-devel
Cc: Neil Armstrong, Jessica Zhang, Sam Ravnborg, David Airlie,
Daniel Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Heiko Stuebner, Chris Morgan, Jagan Teki, John Watts,
Paul Cercueil, Christophe Branchereau, devicetree, linux-kernel
The current code waits after resets for 5 to 20 milliseconds.
This is appropriate when resetting a sleeping panel, but an awake panel
requires at least 120ms of waiting.
Sleep for 150ms so the panel always completes it reset properly.
Signed-off-by: John Watts <contact@jookia.org>
---
drivers/gpu/drm/panel/panel-newvision-nv3052c.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
index 90dea21f9856..2526b123b1f5 100644
--- a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
+++ b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
@@ -258,7 +258,7 @@ static int nv3052c_prepare(struct drm_panel *panel)
gpiod_set_value_cansleep(priv->reset_gpio, 1);
usleep_range(10, 1000);
gpiod_set_value_cansleep(priv->reset_gpio, 0);
- usleep_range(5000, 20000);
+ msleep(150);
for (i = 0; i < ARRAY_SIZE(nv3052c_panel_regs); i++) {
err = mipi_dbi_command(dbi, nv3052c_panel_regs[i].cmd,
--
2.42.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [RFC PATCH v2 4/9] drm/panel: nv3052c: Wait before entering sleep mode
2023-09-18 12:58 [RFC PATCH v2 0/9] Add FS035VG158 panel John Watts
` (2 preceding siblings ...)
2023-09-18 12:58 ` [RFC PATCH v2 3/9] drm/panel: nv3052c: Sleep for 150ms after reset John Watts
@ 2023-09-18 12:58 ` John Watts
2023-09-18 20:27 ` Jessica Zhang
2023-09-18 12:58 ` [RFC PATCH v2 5/9] drm/panel: nv3052c: Allow specifying registers per panel John Watts
` (4 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: John Watts @ 2023-09-18 12:58 UTC (permalink / raw)
To: dri-devel
Cc: Neil Armstrong, Jessica Zhang, Sam Ravnborg, David Airlie,
Daniel Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Heiko Stuebner, Chris Morgan, Jagan Teki, John Watts,
Paul Cercueil, Christophe Branchereau, devicetree, linux-kernel
The panel needs us to wait 120ms between exiting and entering sleep.
Guarantee that by always waiting 150ms before entering sleep mode.
Signed-off-by: John Watts <contact@jookia.org>
---
drivers/gpu/drm/panel/panel-newvision-nv3052c.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
index 2526b123b1f5..307335d0f1fc 100644
--- a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
+++ b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
@@ -289,6 +289,9 @@ static int nv3052c_unprepare(struct drm_panel *panel)
struct mipi_dbi *dbi = &priv->dbi;
int err;
+ /* Wait 150ms in case we just exited sleep mode */
+ msleep(150);
+
err = mipi_dbi_command(dbi, MIPI_DCS_ENTER_SLEEP_MODE);
if (err)
dev_err(priv->dev, "Unable to enter sleep mode: %d\n", err);
--
2.42.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [RFC PATCH v2 5/9] drm/panel: nv3052c: Allow specifying registers per panel
2023-09-18 12:58 [RFC PATCH v2 0/9] Add FS035VG158 panel John Watts
` (3 preceding siblings ...)
2023-09-18 12:58 ` [RFC PATCH v2 4/9] drm/panel: nv3052c: Wait before entering sleep mode John Watts
@ 2023-09-18 12:58 ` John Watts
2023-09-18 12:58 ` [RFC PATCH v2 6/9] drm/panel: nv3052c: Add Fascontek FS035VG158 LCD display John Watts
` (3 subsequent siblings)
8 siblings, 0 replies; 20+ messages in thread
From: John Watts @ 2023-09-18 12:58 UTC (permalink / raw)
To: dri-devel
Cc: Neil Armstrong, Jessica Zhang, Sam Ravnborg, David Airlie,
Daniel Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Heiko Stuebner, Chris Morgan, Jagan Teki, John Watts,
Paul Cercueil, Christophe Branchereau, devicetree, linux-kernel
Panel initialization registers are per-display and not tied to the
controller itself. Different panels will specify their own registers.
Attach the sequences to the panel info struct so future panels
can specify their own sequences.
Signed-off-by: John Watts <contact@jookia.org>
Reviewed-by: Jessica Zhang <quic_jesszhan@quicinc.com>
---
.../gpu/drm/panel/panel-newvision-nv3052c.c | 24 ++++++++++++-------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
index 307335d0f1fc..2b24c684a8ac 100644
--- a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
+++ b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
@@ -20,11 +20,18 @@
#include <drm/drm_modes.h>
#include <drm/drm_panel.h>
+struct nv3052c_reg {
+ u8 cmd;
+ u8 val;
+};
+
struct nv3052c_panel_info {
const struct drm_display_mode *display_modes;
unsigned int num_modes;
u16 width_mm, height_mm;
u32 bus_format, bus_flags;
+ const struct nv3052c_reg *panel_regs;
+ int panel_regs_len;
};
struct nv3052c {
@@ -36,12 +43,7 @@ struct nv3052c {
struct gpio_desc *reset_gpio;
};
-struct nv3052c_reg {
- u8 cmd;
- u8 val;
-};
-
-static const struct nv3052c_reg nv3052c_panel_regs[] = {
+static const struct nv3052c_reg ltk035c5444t_panel_regs[] = {
// EXTC Command set enable, select page 1
{ 0xff, 0x30 }, { 0xff, 0x52 }, { 0xff, 0x01 },
// Mostly unknown registers
@@ -244,6 +246,8 @@ static inline struct nv3052c *to_nv3052c(struct drm_panel *panel)
static int nv3052c_prepare(struct drm_panel *panel)
{
struct nv3052c *priv = to_nv3052c(panel);
+ const struct nv3052c_reg *panel_regs = priv->panel_info->panel_regs;
+ int panel_regs_len = priv->panel_info->panel_regs_len;
struct mipi_dbi *dbi = &priv->dbi;
unsigned int i;
int err;
@@ -260,9 +264,9 @@ static int nv3052c_prepare(struct drm_panel *panel)
gpiod_set_value_cansleep(priv->reset_gpio, 0);
msleep(150);
- for (i = 0; i < ARRAY_SIZE(nv3052c_panel_regs); i++) {
- err = mipi_dbi_command(dbi, nv3052c_panel_regs[i].cmd,
- nv3052c_panel_regs[i].val);
+ for (i = 0; i < panel_regs_len; i++) {
+ err = mipi_dbi_command(dbi, panel_regs[i].cmd,
+ panel_regs[i].val);
if (err) {
dev_err(priv->dev, "Unable to set register: %d\n", err);
@@ -466,6 +470,8 @@ static const struct nv3052c_panel_info ltk035c5444t_panel_info = {
.height_mm = 64,
.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
+ .panel_regs = ltk035c5444t_panel_regs,
+ .panel_regs_len = ARRAY_SIZE(ltk035c5444t_panel_regs),
};
static const struct spi_device_id nv3052c_ids[] = {
--
2.42.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [RFC PATCH v2 6/9] drm/panel: nv3052c: Add Fascontek FS035VG158 LCD display
2023-09-18 12:58 [RFC PATCH v2 0/9] Add FS035VG158 panel John Watts
` (4 preceding siblings ...)
2023-09-18 12:58 ` [RFC PATCH v2 5/9] drm/panel: nv3052c: Allow specifying registers per panel John Watts
@ 2023-09-18 12:58 ` John Watts
2023-09-18 20:35 ` Jessica Zhang
2023-09-18 12:58 ` [RFC PATCH v2 7/9] dt-bindings: display: panel: Clean up leadtek,ltk035c5444t properties John Watts
` (2 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: John Watts @ 2023-09-18 12:58 UTC (permalink / raw)
To: dri-devel
Cc: Neil Armstrong, Jessica Zhang, Sam Ravnborg, David Airlie,
Daniel Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Heiko Stuebner, Chris Morgan, Jagan Teki, John Watts,
Paul Cercueil, Christophe Branchereau, devicetree, linux-kernel
This display is extremely similar to the LTK035C5444T, but still has
some minor variations in panel initialization.
Signed-off-by: John Watts <contact@jookia.org>
---
.../gpu/drm/panel/panel-newvision-nv3052c.c | 223 ++++++++++++++++++
1 file changed, 223 insertions(+)
diff --git a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
index 2b24c684a8ac..a42c38d93f52 100644
--- a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
+++ b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
@@ -238,6 +238,201 @@ static const struct nv3052c_reg ltk035c5444t_panel_regs[] = {
{ 0x36, 0x0a }, // bgr = 1, ss = 1, gs = 0
};
+static const struct nv3052c_reg fs035vg158_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, 0x20 }, // RGB interface control: DE MODE PCLK-N
+ { 0x24, 0x0c },
+ { 0x25, 0x06 },
+ { 0x26, 0x14 },
+ { 0x27, 0x14 },
+ { 0x38, 0x9c }, //VCOM_ADJ1, different to ltk035c5444t
+ { 0x39, 0xa7 }, //VCOM_ADJ2, different to ltk035c5444t
+ { 0x3a, 0x50 }, //VCOM_ADJ3, different to ltk035c5444t
+ { 0x28, 0x40 },
+ { 0x29, 0x01 },
+ { 0x2a, 0xdf },
+ { 0x49, 0x3c },
+ { 0x91, 0x57 }, //EXTPW_CTRL2, different to ltk035c5444t
+ { 0x92, 0x57 }, //EXTPW_CTRL3, different to ltk035c5444t
+ { 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, 0x03 }, // Unknown, different to ltk035c5444
+ { 0xb5, 0x08 },
+ { 0xb6, 0x26 },
+ { 0xb7, 0x08 },
+ { 0xb8, 0x26 },
+ { 0xf0, 0x00 },
+ { 0xf6, 0xc0 },
+ // EXTC Command set enable, select page 0
+ { 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);
@@ -463,6 +658,21 @@ static const struct drm_display_mode ltk035c5444t_modes[] = {
},
};
+static const struct drm_display_mode fs035vg158_modes[] = {
+ { /* 60 Hz */
+ .clock = 21000,
+ .hdisplay = 640,
+ .hsync_start = 640 + 34,
+ .hsync_end = 640 + 34 + 4,
+ .htotal = 640 + 34 + 4 + 20,
+ .vdisplay = 480,
+ .vsync_start = 480 + 12,
+ .vsync_end = 480 + 12 + 4,
+ .vtotal = 480 + 12 + 4 + 6,
+ .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
+ },
+};
+
static const struct nv3052c_panel_info ltk035c5444t_panel_info = {
.display_modes = ltk035c5444t_modes,
.num_modes = ARRAY_SIZE(ltk035c5444t_modes),
@@ -474,14 +684,27 @@ static const struct nv3052c_panel_info ltk035c5444t_panel_info = {
.panel_regs_len = ARRAY_SIZE(ltk035c5444t_panel_regs),
};
+static const struct nv3052c_panel_info fs035vg158_panel_info = {
+ .display_modes = fs035vg158_modes,
+ .num_modes = ARRAY_SIZE(fs035vg158_modes),
+ .width_mm = 70,
+ .height_mm = 53,
+ .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
+ .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
+ .panel_regs = fs035vg158_panel_regs,
+ .panel_regs_len = ARRAY_SIZE(fs035vg158_panel_regs),
+};
+
static const struct spi_device_id nv3052c_ids[] = {
{ "ltk035c5444t", },
+ { "fs035vg158", },
{ /* sentinel */ }
};
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 },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, nv3052c_of_match);
--
2.42.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [RFC PATCH v2 7/9] dt-bindings: display: panel: Clean up leadtek,ltk035c5444t properties
2023-09-18 12:58 [RFC PATCH v2 0/9] Add FS035VG158 panel John Watts
` (5 preceding siblings ...)
2023-09-18 12:58 ` [RFC PATCH v2 6/9] drm/panel: nv3052c: Add Fascontek FS035VG158 LCD display John Watts
@ 2023-09-18 12:58 ` John Watts
2023-09-18 22:28 ` Rob Herring
2023-09-18 12:58 ` [RFC PATCH v2 8/9] dt-bindings: vendor-prefixes: Add fascontek John Watts
2023-09-18 12:58 ` [RFC PATCH v2 9/9] dt-bindings: display: panel: add Fascontek FS035VG158 panel John Watts
8 siblings, 1 reply; 20+ messages in thread
From: John Watts @ 2023-09-18 12:58 UTC (permalink / raw)
To: dri-devel
Cc: Neil Armstrong, Jessica Zhang, Sam Ravnborg, David Airlie,
Daniel Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Heiko Stuebner, Chris Morgan, Jagan Teki, John Watts,
Paul Cercueil, Christophe Branchereau, devicetree, linux-kernel
Remove common properties listed in common yaml files.
Add required properties needed to describe the panel.
Signed-off-by: John Watts <contact@jookia.org>
---
.../bindings/display/panel/leadtek,ltk035c5444t.yaml | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/Documentation/devicetree/bindings/display/panel/leadtek,ltk035c5444t.yaml b/Documentation/devicetree/bindings/display/panel/leadtek,ltk035c5444t.yaml
index ebdca5f5a001..7a55961e1a3d 100644
--- a/Documentation/devicetree/bindings/display/panel/leadtek,ltk035c5444t.yaml
+++ b/Documentation/devicetree/bindings/display/panel/leadtek,ltk035c5444t.yaml
@@ -18,16 +18,12 @@ properties:
compatible:
const: leadtek,ltk035c5444t
- backlight: true
- port: true
- power-supply: true
- reg: true
- reset-gpios: true
-
spi-3wire: true
required:
- compatible
+ - reg
+ - port
- power-supply
- reset-gpios
--
2.42.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [RFC PATCH v2 8/9] dt-bindings: vendor-prefixes: Add fascontek
2023-09-18 12:58 [RFC PATCH v2 0/9] Add FS035VG158 panel John Watts
` (6 preceding siblings ...)
2023-09-18 12:58 ` [RFC PATCH v2 7/9] dt-bindings: display: panel: Clean up leadtek,ltk035c5444t properties John Watts
@ 2023-09-18 12:58 ` John Watts
2023-09-18 12:58 ` [RFC PATCH v2 9/9] dt-bindings: display: panel: add Fascontek FS035VG158 panel John Watts
8 siblings, 0 replies; 20+ messages in thread
From: John Watts @ 2023-09-18 12:58 UTC (permalink / raw)
To: dri-devel
Cc: Neil Armstrong, Jessica Zhang, Sam Ravnborg, David Airlie,
Daniel Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Heiko Stuebner, Chris Morgan, Jagan Teki, John Watts,
Paul Cercueil, Christophe Branchereau, devicetree, linux-kernel,
Krzysztof Kozlowski
Fascontek manufactures LCD panels such as the FS035VG158.
Signed-off-by: John Watts <contact@jookia.org>
Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
---
Documentation/devicetree/bindings/vendor-prefixes.yaml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml
index 573578db9509..69befb76b6ce 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.yaml
+++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml
@@ -468,6 +468,8 @@ patternProperties:
description: Fairphone B.V.
"^faraday,.*":
description: Faraday Technology Corporation
+ "^fascontek,.*":
+ description: Fascontek
"^fastrax,.*":
description: Fastrax Oy
"^fcs,.*":
--
2.42.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [RFC PATCH v2 9/9] dt-bindings: display: panel: add Fascontek FS035VG158 panel
2023-09-18 12:58 [RFC PATCH v2 0/9] Add FS035VG158 panel John Watts
` (7 preceding siblings ...)
2023-09-18 12:58 ` [RFC PATCH v2 8/9] dt-bindings: vendor-prefixes: Add fascontek John Watts
@ 2023-09-18 12:58 ` John Watts
2023-09-18 22:29 ` Rob Herring
8 siblings, 1 reply; 20+ messages in thread
From: John Watts @ 2023-09-18 12:58 UTC (permalink / raw)
To: dri-devel
Cc: Neil Armstrong, Jessica Zhang, Sam Ravnborg, David Airlie,
Daniel Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Heiko Stuebner, Chris Morgan, Jagan Teki, John Watts,
Paul Cercueil, Christophe Branchereau, devicetree, linux-kernel
This is a small 3.5" 640x480 IPS LCD panel.
Signed-off-by: John Watts <contact@jookia.org>
---
.../display/panel/fascontek,fs035vg158.yaml | 56 +++++++++++++++++++
1 file changed, 56 insertions(+)
create mode 100644 Documentation/devicetree/bindings/display/panel/fascontek,fs035vg158.yaml
diff --git a/Documentation/devicetree/bindings/display/panel/fascontek,fs035vg158.yaml b/Documentation/devicetree/bindings/display/panel/fascontek,fs035vg158.yaml
new file mode 100644
index 000000000000..d13c4bd26de4
--- /dev/null
+++ b/Documentation/devicetree/bindings/display/panel/fascontek,fs035vg158.yaml
@@ -0,0 +1,56 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/display/panel/fascontek,fs035vg158.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Fascontek FS035VG158 3.5" (640x480 pixels) 24-bit IPS LCD panel
+
+maintainers:
+ - John Watts <contact@jookia.org>
+
+allOf:
+ - $ref: panel-common.yaml#
+ - $ref: /schemas/spi/spi-peripheral-props.yaml#
+
+properties:
+ compatible:
+ const: fascontek,fs035vg158
+
+ 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 = "fascontek,fs035vg158";
+ reg = <0>;
+
+ spi-3wire;
+ spi-max-frequency = <3125000>;
+
+ reset-gpios = <&gpe 2 GPIO_ACTIVE_LOW>;
+
+ backlight = <&backlight>;
+ power-supply = <&vcc>;
+
+ port {
+ panel_input: endpoint {
+ remote-endpoint = <&panel_output>;
+ };
+ };
+ };
+ };
--
2.42.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [RFC PATCH v2 3/9] drm/panel: nv3052c: Sleep for 150ms after reset
2023-09-18 12:58 ` [RFC PATCH v2 3/9] drm/panel: nv3052c: Sleep for 150ms after reset John Watts
@ 2023-09-18 20:19 ` Jessica Zhang
2023-09-18 20:52 ` John Watts
0 siblings, 1 reply; 20+ messages in thread
From: Jessica Zhang @ 2023-09-18 20:19 UTC (permalink / raw)
To: John Watts, dri-devel
Cc: Neil Armstrong, Sam Ravnborg, David Airlie, Daniel Vetter,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Heiko Stuebner, Chris Morgan, Jagan Teki, Paul Cercueil,
Christophe Branchereau, devicetree, linux-kernel
On 9/18/2023 5:58 AM, John Watts wrote:
> The current code waits after resets for 5 to 20 milliseconds.
> This is appropriate when resetting a sleeping panel, but an awake panel
> requires at least 120ms of waiting.
>
> Sleep for 150ms so the panel always completes it reset properly.
>
> Signed-off-by: John Watts <contact@jookia.org>
Hi John,
Just wondering, is there some context to this change? I.e., was this
made to fix a specific issue?
This seems like a pretty significant increase in wait time so, if it's
not a fix, I'm not sure if this would be an improvement on the current
behavior.
Thanks,
Jessica Zhang
> ---
> drivers/gpu/drm/panel/panel-newvision-nv3052c.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
> index 90dea21f9856..2526b123b1f5 100644
> --- a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
> +++ b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
> @@ -258,7 +258,7 @@ static int nv3052c_prepare(struct drm_panel *panel)
> gpiod_set_value_cansleep(priv->reset_gpio, 1);
> usleep_range(10, 1000);
> gpiod_set_value_cansleep(priv->reset_gpio, 0);
> - usleep_range(5000, 20000);
> + msleep(150);
>
> for (i = 0; i < ARRAY_SIZE(nv3052c_panel_regs); i++) {
> err = mipi_dbi_command(dbi, nv3052c_panel_regs[i].cmd,
> --
> 2.42.0
>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [RFC PATCH v2 4/9] drm/panel: nv3052c: Wait before entering sleep mode
2023-09-18 12:58 ` [RFC PATCH v2 4/9] drm/panel: nv3052c: Wait before entering sleep mode John Watts
@ 2023-09-18 20:27 ` Jessica Zhang
0 siblings, 0 replies; 20+ messages in thread
From: Jessica Zhang @ 2023-09-18 20:27 UTC (permalink / raw)
To: John Watts, dri-devel
Cc: Neil Armstrong, Sam Ravnborg, David Airlie, Daniel Vetter,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Heiko Stuebner, Chris Morgan, Jagan Teki, Paul Cercueil,
Christophe Branchereau, devicetree, linux-kernel
On 9/18/2023 5:58 AM, John Watts wrote:
> The panel needs us to wait 120ms between exiting and entering sleep.
> Guarantee that by always waiting 150ms before entering sleep mode.
Hi John,
Same question as the last patch -- is this a fix for something?
Thanks,
Jessica Zhang
>
> Signed-off-by: John Watts <contact@jookia.org>
> ---
> drivers/gpu/drm/panel/panel-newvision-nv3052c.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
> index 2526b123b1f5..307335d0f1fc 100644
> --- a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
> +++ b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
> @@ -289,6 +289,9 @@ static int nv3052c_unprepare(struct drm_panel *panel)
> struct mipi_dbi *dbi = &priv->dbi;
> int err;
>
> + /* Wait 150ms in case we just exited sleep mode */
> + msleep(150);
> +
> err = mipi_dbi_command(dbi, MIPI_DCS_ENTER_SLEEP_MODE);
> if (err)
> dev_err(priv->dev, "Unable to enter sleep mode: %d\n", err);
> --
> 2.42.0
>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [RFC PATCH v2 6/9] drm/panel: nv3052c: Add Fascontek FS035VG158 LCD display
2023-09-18 12:58 ` [RFC PATCH v2 6/9] drm/panel: nv3052c: Add Fascontek FS035VG158 LCD display John Watts
@ 2023-09-18 20:35 ` Jessica Zhang
0 siblings, 0 replies; 20+ messages in thread
From: Jessica Zhang @ 2023-09-18 20:35 UTC (permalink / raw)
To: John Watts, dri-devel
Cc: Neil Armstrong, Sam Ravnborg, David Airlie, Daniel Vetter,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Heiko Stuebner, Chris Morgan, Jagan Teki, Paul Cercueil,
Christophe Branchereau, devicetree, linux-kernel
On 9/18/2023 5:58 AM, John Watts wrote:
> This display is extremely similar to the LTK035C5444T, but still has
> some minor variations in panel initialization.
>
> Signed-off-by: John Watts <contact@jookia.org>
Reviewed-by: Jessica Zhang <quic_jesszhan@quicinc.com>
> ---
> .../gpu/drm/panel/panel-newvision-nv3052c.c | 223 ++++++++++++++++++
> 1 file changed, 223 insertions(+)
>
> diff --git a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
> index 2b24c684a8ac..a42c38d93f52 100644
> --- a/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
> +++ b/drivers/gpu/drm/panel/panel-newvision-nv3052c.c
> @@ -238,6 +238,201 @@ static const struct nv3052c_reg ltk035c5444t_panel_regs[] = {
> { 0x36, 0x0a }, // bgr = 1, ss = 1, gs = 0
> };
>
> +static const struct nv3052c_reg fs035vg158_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, 0x20 }, // RGB interface control: DE MODE PCLK-N
> + { 0x24, 0x0c },
> + { 0x25, 0x06 },
> + { 0x26, 0x14 },
> + { 0x27, 0x14 },
> + { 0x38, 0x9c }, //VCOM_ADJ1, different to ltk035c5444t
> + { 0x39, 0xa7 }, //VCOM_ADJ2, different to ltk035c5444t
> + { 0x3a, 0x50 }, //VCOM_ADJ3, different to ltk035c5444t
> + { 0x28, 0x40 },
> + { 0x29, 0x01 },
> + { 0x2a, 0xdf },
> + { 0x49, 0x3c },
> + { 0x91, 0x57 }, //EXTPW_CTRL2, different to ltk035c5444t
> + { 0x92, 0x57 }, //EXTPW_CTRL3, different to ltk035c5444t
> + { 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, 0x03 }, // Unknown, different to ltk035c5444
> + { 0xb5, 0x08 },
> + { 0xb6, 0x26 },
> + { 0xb7, 0x08 },
> + { 0xb8, 0x26 },
> + { 0xf0, 0x00 },
> + { 0xf6, 0xc0 },
> + // EXTC Command set enable, select page 0
> + { 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);
> @@ -463,6 +658,21 @@ static const struct drm_display_mode ltk035c5444t_modes[] = {
> },
> };
>
> +static const struct drm_display_mode fs035vg158_modes[] = {
> + { /* 60 Hz */
> + .clock = 21000,
> + .hdisplay = 640,
> + .hsync_start = 640 + 34,
> + .hsync_end = 640 + 34 + 4,
> + .htotal = 640 + 34 + 4 + 20,
> + .vdisplay = 480,
> + .vsync_start = 480 + 12,
> + .vsync_end = 480 + 12 + 4,
> + .vtotal = 480 + 12 + 4 + 6,
> + .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
> + },
> +};
> +
> static const struct nv3052c_panel_info ltk035c5444t_panel_info = {
> .display_modes = ltk035c5444t_modes,
> .num_modes = ARRAY_SIZE(ltk035c5444t_modes),
> @@ -474,14 +684,27 @@ static const struct nv3052c_panel_info ltk035c5444t_panel_info = {
> .panel_regs_len = ARRAY_SIZE(ltk035c5444t_panel_regs),
> };
>
> +static const struct nv3052c_panel_info fs035vg158_panel_info = {
> + .display_modes = fs035vg158_modes,
> + .num_modes = ARRAY_SIZE(fs035vg158_modes),
> + .width_mm = 70,
> + .height_mm = 53,
> + .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
> + .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE,
> + .panel_regs = fs035vg158_panel_regs,
> + .panel_regs_len = ARRAY_SIZE(fs035vg158_panel_regs),
> +};
> +
> static const struct spi_device_id nv3052c_ids[] = {
> { "ltk035c5444t", },
> + { "fs035vg158", },
> { /* sentinel */ }
> };
> 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 },
> { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(of, nv3052c_of_match);
> --
> 2.42.0
>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [RFC PATCH v2 3/9] drm/panel: nv3052c: Sleep for 150ms after reset
2023-09-18 20:19 ` Jessica Zhang
@ 2023-09-18 20:52 ` John Watts
2023-09-18 21:01 ` Paul Cercueil
0 siblings, 1 reply; 20+ messages in thread
From: John Watts @ 2023-09-18 20:52 UTC (permalink / raw)
To: Jessica Zhang
Cc: dri-devel, Neil Armstrong, Sam Ravnborg, David Airlie,
Daniel Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Heiko Stuebner, Chris Morgan, Jagan Teki,
Paul Cercueil, Christophe Branchereau, devicetree, linux-kernel
On Mon, Sep 18, 2023 at 01:19:03PM -0700, Jessica Zhang wrote:
> Hi John,
>
> Just wondering, is there some context to this change? I.e., was this made to
> fix a specific issue?
>
> This seems like a pretty significant increase in wait time so, if it's not a
> fix, I'm not sure if this would be an improvement on the current behavior.
>
> Thanks,
>
> Jessica Zhang
Hi Jessica,
Thank you for the feedback.
This patch here is required by the data sheet if the screen was already running
and was reset. This is necessary if for example the bootloader set up and had
the screen running. However I have not tested this, it's possible the specific
panels have shorter tolerances for resets. This is purely precautionary at
this stage based on what the data sheet says.
That said I will be investigating this specific use case with this panel over
the next few months. I am okay separating out this patch until I have proof it's
needed for my particular display. I don't know anything about the ltk display.
The second sleep patch can probably be omitted as I don't think the panel being
prepared then unprepared in rapid succession is a realistic situation, but I
figured I might as well propose it to see if it's the right thing to do.
Thanks for your time and review,
John.
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [RFC PATCH v2 3/9] drm/panel: nv3052c: Sleep for 150ms after reset
2023-09-18 20:52 ` John Watts
@ 2023-09-18 21:01 ` Paul Cercueil
2023-09-18 21:08 ` John Watts
0 siblings, 1 reply; 20+ messages in thread
From: Paul Cercueil @ 2023-09-18 21:01 UTC (permalink / raw)
To: John Watts, Jessica Zhang
Cc: dri-devel, Neil Armstrong, Sam Ravnborg, David Airlie,
Daniel Vetter, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Shawn Guo, Heiko Stuebner, Chris Morgan, Jagan Teki,
Christophe Branchereau, devicetree, linux-kernel
Hi John,
Le mardi 19 septembre 2023 à 06:52 +1000, John Watts a écrit :
> On Mon, Sep 18, 2023 at 01:19:03PM -0700, Jessica Zhang wrote:
> > Hi John,
> >
> > Just wondering, is there some context to this change? I.e., was
> > this made to
> > fix a specific issue?
> >
> > This seems like a pretty significant increase in wait time so, if
> > it's not a
> > fix, I'm not sure if this would be an improvement on the current
> > behavior.
> >
> > Thanks,
> >
> > Jessica Zhang
>
> Hi Jessica,
>
> Thank you for the feedback.
>
> This patch here is required by the data sheet if the screen was
> already running
> and was reset. This is necessary if for example the bootloader set up
> and had
> the screen running. However I have not tested this, it's possible the
> specific
> panels have shorter tolerances for resets. This is purely
> precautionary at
> this stage based on what the data sheet says.
>
> That said I will be investigating this specific use case with this
> panel over
> the next few months. I am okay separating out this patch until I have
> proof it's
> needed for my particular display. I don't know anything about the ltk
> display.
>
> The second sleep patch can probably be omitted as I don't think the
> panel being
> prepared then unprepared in rapid succession is a realistic
> situation, but I
> figured I might as well propose it to see if it's the right thing to
> do.
>
> Thanks for your time and review,
> John.
The datasheet does say a 5ms sleep time is necesary after a reset. I
assume the 120ms delay you quote is when a *software* reset is
performed in Sleep-out mode. The code here does a hard-reset.
Cheers,
-Paul
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [RFC PATCH v2 3/9] drm/panel: nv3052c: Sleep for 150ms after reset
2023-09-18 21:01 ` Paul Cercueil
@ 2023-09-18 21:08 ` John Watts
2023-09-18 21:34 ` Paul Cercueil
0 siblings, 1 reply; 20+ messages in thread
From: John Watts @ 2023-09-18 21:08 UTC (permalink / raw)
To: Paul Cercueil
Cc: Jessica Zhang, dri-devel, Neil Armstrong, Sam Ravnborg,
David Airlie, Daniel Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Shawn Guo, Heiko Stuebner, Chris Morgan, Jagan Teki,
Christophe Branchereau, devicetree, linux-kernel
On Mon, Sep 18, 2023 at 11:01:15PM +0200, Paul Cercueil wrote:
> The datasheet does say a 5ms sleep time is necesary after a reset. I
> assume the 120ms delay you quote is when a *software* reset is
> performed in Sleep-out mode. The code here does a hard-reset.
>
> Cheers,
> -Paul
Hello Paul,
Section 7.3 of the data sheet (AC characteristic) says that the reset can take
up to 120ms to complete if the reset is applied during sleep out mode.
John.
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [RFC PATCH v2 3/9] drm/panel: nv3052c: Sleep for 150ms after reset
2023-09-18 21:08 ` John Watts
@ 2023-09-18 21:34 ` Paul Cercueil
2023-09-18 21:40 ` John Watts
0 siblings, 1 reply; 20+ messages in thread
From: Paul Cercueil @ 2023-09-18 21:34 UTC (permalink / raw)
To: John Watts
Cc: Jessica Zhang, dri-devel, Neil Armstrong, Sam Ravnborg,
David Airlie, Daniel Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Shawn Guo, Heiko Stuebner, Chris Morgan, Jagan Teki,
Christophe Branchereau, devicetree, linux-kernel
Le mardi 19 septembre 2023 à 07:08 +1000, John Watts a écrit :
> On Mon, Sep 18, 2023 at 11:01:15PM +0200, Paul Cercueil wrote:
> > The datasheet does say a 5ms sleep time is necesary after a reset.
> > I
> > assume the 120ms delay you quote is when a *software* reset is
> > performed in Sleep-out mode. The code here does a hard-reset.
> >
> > Cheers,
> > -Paul
>
> Hello Paul,
>
> Section 7.3 of the data sheet (AC characteristic) says that the reset
> can take
> up to 120ms to complete if the reset is applied during sleep out
> mode.
>
> John.
The driver is guaranteed to always reset the panel in sleep-in mode -
as long as the panel was off when the driver started.
What I'd suggest if you really need to support a case where the panel
was enabled by the bootloader, is to read the 0x0a register after
enabling the regulator to read the mode, and sleep 120ms if it was in
sleep-out mode.
But that's only if it's a case that you can test with. I won't accept a
patch that makes sense on the surface if it addresses a corner case
that nobody ever tested for.
For what I know, this patch just adds a huge delay to panel boot-up for
all existing users for no valid reason.
Cheers,
-Paul
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [RFC PATCH v2 3/9] drm/panel: nv3052c: Sleep for 150ms after reset
2023-09-18 21:34 ` Paul Cercueil
@ 2023-09-18 21:40 ` John Watts
0 siblings, 0 replies; 20+ messages in thread
From: John Watts @ 2023-09-18 21:40 UTC (permalink / raw)
To: Paul Cercueil
Cc: Jessica Zhang, dri-devel, Neil Armstrong, Sam Ravnborg,
David Airlie, Daniel Vetter, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Shawn Guo, Heiko Stuebner, Chris Morgan, Jagan Teki,
Christophe Branchereau, devicetree, linux-kernel
On Mon, Sep 18, 2023 at 11:34:51PM +0200, Paul Cercueil wrote:
> The driver is guaranteed to always reset the panel in sleep-in mode -
> as long as the panel was off when the driver started.
>
> What I'd suggest if you really need to support a case where the panel
> was enabled by the bootloader, is to read the 0x0a register after
> enabling the regulator to read the mode, and sleep 120ms if it was in
> sleep-out mode.
>
> But that's only if it's a case that you can test with. I won't accept a
> patch that makes sense on the surface if it addresses a corner case
> that nobody ever tested for.
>
> For what I know, this patch just adds a huge delay to panel boot-up for
> all existing users for no valid reason.
>
>
> Cheers,
> -Paul
Thank you very much for this feedback. I am more than happy to throw these
sleep patches in the trash and come back later with a proper solution when
I have an actual hardware setup and use case to test on.
John.
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [RFC PATCH v2 7/9] dt-bindings: display: panel: Clean up leadtek,ltk035c5444t properties
2023-09-18 12:58 ` [RFC PATCH v2 7/9] dt-bindings: display: panel: Clean up leadtek,ltk035c5444t properties John Watts
@ 2023-09-18 22:28 ` Rob Herring
0 siblings, 0 replies; 20+ messages in thread
From: Rob Herring @ 2023-09-18 22:28 UTC (permalink / raw)
To: John Watts
Cc: Chris Morgan, David Airlie, Jagan Teki, Rob Herring,
Jessica Zhang, Paul Cercueil, Neil Armstrong, Krzysztof Kozlowski,
dri-devel, Daniel Vetter, Shawn Guo, Heiko Stuebner,
Christophe Branchereau, devicetree, linux-kernel, Conor Dooley,
Sam Ravnborg
On Mon, 18 Sep 2023 22:58:51 +1000, John Watts wrote:
> Remove common properties listed in common yaml files.
> Add required properties needed to describe the panel.
>
> Signed-off-by: John Watts <contact@jookia.org>
> ---
> .../bindings/display/panel/leadtek,ltk035c5444t.yaml | 8 ++------
> 1 file changed, 2 insertions(+), 6 deletions(-)
>
Reviewed-by: Rob Herring <robh@kernel.org>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [RFC PATCH v2 9/9] dt-bindings: display: panel: add Fascontek FS035VG158 panel
2023-09-18 12:58 ` [RFC PATCH v2 9/9] dt-bindings: display: panel: add Fascontek FS035VG158 panel John Watts
@ 2023-09-18 22:29 ` Rob Herring
0 siblings, 0 replies; 20+ messages in thread
From: Rob Herring @ 2023-09-18 22:29 UTC (permalink / raw)
To: John Watts
Cc: dri-devel, Jagan Teki, devicetree, Sam Ravnborg, David Airlie,
Daniel Vetter, Chris Morgan, Jessica Zhang, Shawn Guo,
linux-kernel, Heiko Stuebner, Krzysztof Kozlowski, Paul Cercueil,
Conor Dooley, Neil Armstrong, Christophe Branchereau, Rob Herring
On Mon, 18 Sep 2023 22:58:53 +1000, John Watts wrote:
> This is a small 3.5" 640x480 IPS LCD panel.
>
> Signed-off-by: John Watts <contact@jookia.org>
> ---
> .../display/panel/fascontek,fs035vg158.yaml | 56 +++++++++++++++++++
> 1 file changed, 56 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/display/panel/fascontek,fs035vg158.yaml
>
Reviewed-by: Rob Herring <robh@kernel.org>
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2023-09-18 22:29 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-18 12:58 [RFC PATCH v2 0/9] Add FS035VG158 panel John Watts
2023-09-18 12:58 ` [RFC PATCH v2 1/9] drm/panel: nv3052c: Document known register names John Watts
2023-09-18 12:58 ` [RFC PATCH v2 2/9] drm/panel: nv3052c: Add SPI device IDs John Watts
2023-09-18 12:58 ` [RFC PATCH v2 3/9] drm/panel: nv3052c: Sleep for 150ms after reset John Watts
2023-09-18 20:19 ` Jessica Zhang
2023-09-18 20:52 ` John Watts
2023-09-18 21:01 ` Paul Cercueil
2023-09-18 21:08 ` John Watts
2023-09-18 21:34 ` Paul Cercueil
2023-09-18 21:40 ` John Watts
2023-09-18 12:58 ` [RFC PATCH v2 4/9] drm/panel: nv3052c: Wait before entering sleep mode John Watts
2023-09-18 20:27 ` Jessica Zhang
2023-09-18 12:58 ` [RFC PATCH v2 5/9] drm/panel: nv3052c: Allow specifying registers per panel John Watts
2023-09-18 12:58 ` [RFC PATCH v2 6/9] drm/panel: nv3052c: Add Fascontek FS035VG158 LCD display John Watts
2023-09-18 20:35 ` Jessica Zhang
2023-09-18 12:58 ` [RFC PATCH v2 7/9] dt-bindings: display: panel: Clean up leadtek,ltk035c5444t properties John Watts
2023-09-18 22:28 ` Rob Herring
2023-09-18 12:58 ` [RFC PATCH v2 8/9] dt-bindings: vendor-prefixes: Add fascontek John Watts
2023-09-18 12:58 ` [RFC PATCH v2 9/9] dt-bindings: display: panel: add Fascontek FS035VG158 panel John Watts
2023-09-18 22:29 ` Rob Herring
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).