linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] drm/panel: A few cleanups and improvements
@ 2020-08-11  0:22 Paul Cercueil
  2020-08-11  0:22 ` [PATCH 1/5] drm/panel: novatek,nt39016: Handle backlight the standard way Paul Cercueil
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Paul Cercueil @ 2020-08-11  0:22 UTC (permalink / raw)
  To: Thierry Reding, Sam Ravnborg
  Cc: David Airlie, Daniel Vetter, od, dri-devel, linux-kernel, Paul Cercueil

Hi list,

Here's a list of 5 patches that bring some cleanups and improvements.

Patches 1-2 clean up the novatek,nt39016 code to remove custom handling
of the backlight and to add the missing carriage returns on error
messages.

Patches 3-5 updates the modes list of the sharp,ls020b1dd01d panel, to
make it use 'struct drm_display_mode' instead of 'struct
display_timing', modify the timings to get a perfect 60.00 Hz rate, and
add a 50 Hz mode.

Cheers,
-Paul

Paul Cercueil (5):
  drm/panel: novatek,nt39016: Handle backlight the standard way
  drm/panel: novatek,nt39016: Add missing CR to error messages
  drm/panel: simple: Convert sharp,ls020b1dd01d from timings to
    videomode
  drm/panel: simple: Tweak timings of sharp,ls020b1dd01d for perfect
    60Hz
  drm/panel: simple: Add 50Hz mode for sharp,ls020b1dd01d

 drivers/gpu/drm/panel/panel-novatek-nt39016.c | 34 ++++++----------
 drivers/gpu/drm/panel/panel-simple.c          | 40 +++++++++++++------
 2 files changed, 40 insertions(+), 34 deletions(-)

-- 
2.28.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/5] drm/panel: novatek,nt39016: Handle backlight the standard way
  2020-08-11  0:22 [PATCH 0/5] drm/panel: A few cleanups and improvements Paul Cercueil
@ 2020-08-11  0:22 ` Paul Cercueil
  2020-08-11  0:22 ` [PATCH 2/5] drm/panel: novatek,nt39016: Add missing CR to error messages Paul Cercueil
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Paul Cercueil @ 2020-08-11  0:22 UTC (permalink / raw)
  To: Thierry Reding, Sam Ravnborg
  Cc: David Airlie, Daniel Vetter, od, dri-devel, linux-kernel, Paul Cercueil

Instead of manipulating the backlight directly in this driver, register
it in the probe using drm_panel_of_backlight() and let the drm_panel
framework code handle it.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
 drivers/gpu/drm/panel/panel-novatek-nt39016.c | 16 ++++------------
 1 file changed, 4 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/panel/panel-novatek-nt39016.c b/drivers/gpu/drm/panel/panel-novatek-nt39016.c
index 3d15d9925204..ba05165b6050 100644
--- a/drivers/gpu/drm/panel/panel-novatek-nt39016.c
+++ b/drivers/gpu/drm/panel/panel-novatek-nt39016.c
@@ -6,7 +6,6 @@
  * Copyright (C) 2019, Paul Cercueil <paul@crapouillou.net>
  */
 
-#include <linux/backlight.h>
 #include <linux/delay.h>
 #include <linux/device.h>
 #include <linux/gpio/consumer.h>
@@ -63,8 +62,6 @@ struct nt39016 {
 	const struct nt39016_panel_info *panel_info;
 
 	struct gpio_desc *reset_gpio;
-
-	struct backlight_device *backlight;
 };
 
 static inline struct nt39016 *to_nt39016(struct drm_panel *panel)
@@ -180,14 +177,12 @@ static int nt39016_enable(struct drm_panel *drm_panel)
 		return ret;
 	}
 
-	if (panel->backlight) {
+	if (drm_panel->backlight) {
 		/* Wait for the picture to be ready before enabling backlight */
 		msleep(150);
-
-		ret = backlight_enable(panel->backlight);
 	}
 
-	return ret;
+	return 0;
 }
 
 static int nt39016_disable(struct drm_panel *drm_panel)
@@ -195,8 +190,6 @@ static int nt39016_disable(struct drm_panel *drm_panel)
 	struct nt39016 *panel = to_nt39016(drm_panel);
 	int err;
 
-	backlight_disable(panel->backlight);
-
 	err = regmap_write(panel->map, NT39016_REG_SYSTEM,
 			   NT39016_SYSTEM_RESET_N);
 	if (err) {
@@ -292,9 +285,8 @@ static int nt39016_probe(struct spi_device *spi)
 		return PTR_ERR(panel->map);
 	}
 
-	panel->backlight = devm_of_find_backlight(dev);
-	if (IS_ERR(panel->backlight)) {
-		err = PTR_ERR(panel->backlight);
+	err = drm_panel_of_backlight(&panel->drm_panel);
+	if (err) {
 		if (err != -EPROBE_DEFER)
 			dev_err(dev, "Failed to get backlight handle");
 		return err;
-- 
2.28.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/5] drm/panel: novatek,nt39016: Add missing CR to error messages
  2020-08-11  0:22 [PATCH 0/5] drm/panel: A few cleanups and improvements Paul Cercueil
  2020-08-11  0:22 ` [PATCH 1/5] drm/panel: novatek,nt39016: Handle backlight the standard way Paul Cercueil
@ 2020-08-11  0:22 ` Paul Cercueil
  2020-08-11  0:22 ` [PATCH 3/5] drm/panel: simple: Convert sharp,ls020b1dd01d from timings to videomode Paul Cercueil
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Paul Cercueil @ 2020-08-11  0:22 UTC (permalink / raw)
  To: Thierry Reding, Sam Ravnborg
  Cc: David Airlie, Daniel Vetter, od, dri-devel, linux-kernel, Paul Cercueil

If you pass a string that is not terminated with a carriage return to
dev_err(), it will eventually be printed with a carriage return, but
not right away, since the kernel will wait for a pr_cont().

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
 drivers/gpu/drm/panel/panel-novatek-nt39016.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/panel/panel-novatek-nt39016.c b/drivers/gpu/drm/panel/panel-novatek-nt39016.c
index ba05165b6050..39f7be679da5 100644
--- a/drivers/gpu/drm/panel/panel-novatek-nt39016.c
+++ b/drivers/gpu/drm/panel/panel-novatek-nt39016.c
@@ -124,7 +124,7 @@ static int nt39016_prepare(struct drm_panel *drm_panel)
 
 	err = regulator_enable(panel->supply);
 	if (err) {
-		dev_err(panel->dev, "Failed to enable power supply: %d", err);
+		dev_err(panel->dev, "Failed to enable power supply: %d\n", err);
 		return err;
 	}
 
@@ -143,7 +143,7 @@ static int nt39016_prepare(struct drm_panel *drm_panel)
 	err = regmap_multi_reg_write(panel->map, nt39016_panel_regs,
 				     ARRAY_SIZE(nt39016_panel_regs));
 	if (err) {
-		dev_err(panel->dev, "Failed to init registers: %d", err);
+		dev_err(panel->dev, "Failed to init registers: %d\n", err);
 		goto err_disable_regulator;
 	}
 
@@ -173,7 +173,7 @@ static int nt39016_enable(struct drm_panel *drm_panel)
 	ret = regmap_write(panel->map, NT39016_REG_SYSTEM,
 			   NT39016_SYSTEM_RESET_N | NT39016_SYSTEM_STANDBY);
 	if (ret) {
-		dev_err(panel->dev, "Unable to enable panel: %d", ret);
+		dev_err(panel->dev, "Unable to enable panel: %d\n", ret);
 		return ret;
 	}
 
@@ -193,7 +193,7 @@ static int nt39016_disable(struct drm_panel *drm_panel)
 	err = regmap_write(panel->map, NT39016_REG_SYSTEM,
 			   NT39016_SYSTEM_RESET_N);
 	if (err) {
-		dev_err(panel->dev, "Unable to disable panel: %d", err);
+		dev_err(panel->dev, "Unable to disable panel: %d\n", err);
 		return err;
 	}
 
@@ -261,13 +261,13 @@ static int nt39016_probe(struct spi_device *spi)
 
 	panel->supply = devm_regulator_get(dev, "power");
 	if (IS_ERR(panel->supply)) {
-		dev_err(dev, "Failed to get power supply");
+		dev_err(dev, "Failed to get power supply\n");
 		return PTR_ERR(panel->supply);
 	}
 
 	panel->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
 	if (IS_ERR(panel->reset_gpio)) {
-		dev_err(dev, "Failed to get reset GPIO");
+		dev_err(dev, "Failed to get reset GPIO\n");
 		return PTR_ERR(panel->reset_gpio);
 	}
 
@@ -275,20 +275,20 @@ static int nt39016_probe(struct spi_device *spi)
 	spi->mode = SPI_MODE_3 | SPI_3WIRE;
 	err = spi_setup(spi);
 	if (err) {
-		dev_err(dev, "Failed to setup SPI");
+		dev_err(dev, "Failed to setup SPI\n");
 		return err;
 	}
 
 	panel->map = devm_regmap_init_spi(spi, &nt39016_regmap_config);
 	if (IS_ERR(panel->map)) {
-		dev_err(dev, "Failed to init regmap");
+		dev_err(dev, "Failed to init regmap\n");
 		return PTR_ERR(panel->map);
 	}
 
 	err = drm_panel_of_backlight(&panel->drm_panel);
 	if (err) {
 		if (err != -EPROBE_DEFER)
-			dev_err(dev, "Failed to get backlight handle");
+			dev_err(dev, "Failed to get backlight handle\n");
 		return err;
 	}
 
-- 
2.28.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/5] drm/panel: simple: Convert sharp,ls020b1dd01d from timings to videomode
  2020-08-11  0:22 [PATCH 0/5] drm/panel: A few cleanups and improvements Paul Cercueil
  2020-08-11  0:22 ` [PATCH 1/5] drm/panel: novatek,nt39016: Handle backlight the standard way Paul Cercueil
  2020-08-11  0:22 ` [PATCH 2/5] drm/panel: novatek,nt39016: Add missing CR to error messages Paul Cercueil
@ 2020-08-11  0:22 ` Paul Cercueil
  2020-08-11  0:22 ` [PATCH 4/5] drm/panel: simple: Tweak timings of sharp,ls020b1dd01d for perfect 60Hz Paul Cercueil
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Paul Cercueil @ 2020-08-11  0:22 UTC (permalink / raw)
  To: Thierry Reding, Sam Ravnborg
  Cc: David Airlie, Daniel Vetter, od, dri-devel, linux-kernel, Paul Cercueil

Convert the Sharp LS020B1DD01D panel entry from using a struct
display_timing to using a struct drm_display_mode, as display_timing
seems to be the old and legacy format.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
 drivers/gpu/drm/panel/panel-simple.c | 28 +++++++++++++++-------------
 1 file changed, 15 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index 3787748b5bd0..60052976e616 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -3382,22 +3382,24 @@ static const struct panel_desc sharp_lq123p1jx31 = {
 	},
 };
 
-static const struct display_timing sharp_ls020b1dd01d_timing = {
-	.pixelclock = { 2000000, 4200000, 5000000 },
-	.hactive = { 240, 240, 240 },
-	.hfront_porch = { 66, 66, 66 },
-	.hback_porch = { 1, 1, 1 },
-	.hsync_len = { 1, 1, 1 },
-	.vactive = { 160, 160, 160 },
-	.vfront_porch = { 52, 52, 52 },
-	.vback_porch = { 6, 6, 6 },
-	.vsync_len = { 10, 10, 10 },
-	.flags = DISPLAY_FLAGS_HSYNC_HIGH | DISPLAY_FLAGS_VSYNC_LOW,
+static const struct drm_display_mode sharp_ls020b1dd01d_modes[] = {
+	{ /* 60 Hz */
+		.clock = 4200,
+		.hdisplay = 240,
+		.hsync_start = 240 + 66,
+		.hsync_end = 240 + 66 + 1,
+		.htotal = 240 + 66 + 1 + 1,
+		.vdisplay = 160,
+		.vsync_start = 160 + 52,
+		.vsync_end = 160 + 52 + 10,
+		.vtotal = 160 + 52 + 10 + 6,
+		.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC,
+	},
 };
 
 static const struct panel_desc sharp_ls020b1dd01d = {
-	.timings = &sharp_ls020b1dd01d_timing,
-	.num_timings = 1,
+	.modes = sharp_ls020b1dd01d_modes,
+	.num_modes = ARRAY_SIZE(sharp_ls020b1dd01d_modes),
 	.bpc = 6,
 	.size = {
 		.width = 42,
-- 
2.28.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 4/5] drm/panel: simple: Tweak timings of sharp,ls020b1dd01d for perfect 60Hz
  2020-08-11  0:22 [PATCH 0/5] drm/panel: A few cleanups and improvements Paul Cercueil
                   ` (2 preceding siblings ...)
  2020-08-11  0:22 ` [PATCH 3/5] drm/panel: simple: Convert sharp,ls020b1dd01d from timings to videomode Paul Cercueil
@ 2020-08-11  0:22 ` Paul Cercueil
  2020-08-11  0:22 ` [PATCH 5/5] drm/panel: simple: Add 50Hz mode for sharp,ls020b1dd01d Paul Cercueil
  2020-08-15 14:09 ` [PATCH 0/5] drm/panel: A few cleanups and improvements Sam Ravnborg
  5 siblings, 0 replies; 7+ messages in thread
From: Paul Cercueil @ 2020-08-11  0:22 UTC (permalink / raw)
  To: Thierry Reding, Sam Ravnborg
  Cc: David Airlie, Daniel Vetter, od, dri-devel, linux-kernel, Paul Cercueil

Modify the video mode in order to obtain a perfect 60.00 Hz frame rate
using a 3 MHz pixel clock.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
 drivers/gpu/drm/panel/panel-simple.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index 60052976e616..4aee7eca6ded 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -3384,15 +3384,15 @@ static const struct panel_desc sharp_lq123p1jx31 = {
 
 static const struct drm_display_mode sharp_ls020b1dd01d_modes[] = {
 	{ /* 60 Hz */
-		.clock = 4200,
+		.clock = 3000,
 		.hdisplay = 240,
-		.hsync_start = 240 + 66,
-		.hsync_end = 240 + 66 + 1,
-		.htotal = 240 + 66 + 1 + 1,
+		.hsync_start = 240 + 8,
+		.hsync_end = 240 + 8 + 1,
+		.htotal = 240 + 8 + 1 + 1,
 		.vdisplay = 160,
-		.vsync_start = 160 + 52,
-		.vsync_end = 160 + 52 + 10,
-		.vtotal = 160 + 52 + 10 + 6,
+		.vsync_start = 160 + 24,
+		.vsync_end = 160 + 24 + 10,
+		.vtotal = 160 + 24 + 10 + 6,
 		.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC,
 	},
 };
-- 
2.28.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 5/5] drm/panel: simple: Add 50Hz mode for sharp,ls020b1dd01d
  2020-08-11  0:22 [PATCH 0/5] drm/panel: A few cleanups and improvements Paul Cercueil
                   ` (3 preceding siblings ...)
  2020-08-11  0:22 ` [PATCH 4/5] drm/panel: simple: Tweak timings of sharp,ls020b1dd01d for perfect 60Hz Paul Cercueil
@ 2020-08-11  0:22 ` Paul Cercueil
  2020-08-15 14:09 ` [PATCH 0/5] drm/panel: A few cleanups and improvements Sam Ravnborg
  5 siblings, 0 replies; 7+ messages in thread
From: Paul Cercueil @ 2020-08-11  0:22 UTC (permalink / raw)
  To: Thierry Reding, Sam Ravnborg
  Cc: David Airlie, Daniel Vetter, od, dri-devel, linux-kernel, Paul Cercueil

Add a perfect 50.00 Hz frame rate mode to the list of available modes
for the Sharp LS020B1DD01D panel.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
 drivers/gpu/drm/panel/panel-simple.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index 4aee7eca6ded..1cf63582b5a2 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -3383,6 +3383,18 @@ static const struct panel_desc sharp_lq123p1jx31 = {
 };
 
 static const struct drm_display_mode sharp_ls020b1dd01d_modes[] = {
+	{ /* 50 Hz */
+		.clock = 3000,
+		.hdisplay = 240,
+		.hsync_start = 240 + 58,
+		.hsync_end = 240 + 58 + 1,
+		.htotal = 240 + 58 + 1 + 1,
+		.vdisplay = 160,
+		.vsync_start = 160 + 24,
+		.vsync_end = 160 + 24 + 10,
+		.vtotal = 160 + 24 + 10 + 6,
+		.flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC,
+	},
 	{ /* 60 Hz */
 		.clock = 3000,
 		.hdisplay = 240,
-- 
2.28.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/5] drm/panel: A few cleanups and improvements
  2020-08-11  0:22 [PATCH 0/5] drm/panel: A few cleanups and improvements Paul Cercueil
                   ` (4 preceding siblings ...)
  2020-08-11  0:22 ` [PATCH 5/5] drm/panel: simple: Add 50Hz mode for sharp,ls020b1dd01d Paul Cercueil
@ 2020-08-15 14:09 ` Sam Ravnborg
  5 siblings, 0 replies; 7+ messages in thread
From: Sam Ravnborg @ 2020-08-15 14:09 UTC (permalink / raw)
  To: Paul Cercueil
  Cc: Thierry Reding, David Airlie, Daniel Vetter, od, dri-devel, linux-kernel

Hi Paul.

On Tue, Aug 11, 2020 at 02:22:35AM +0200, Paul Cercueil wrote:
> Hi list,
> 
> Here's a list of 5 patches that bring some cleanups and improvements.
> 
> Patches 1-2 clean up the novatek,nt39016 code to remove custom handling
> of the backlight and to add the missing carriage returns on error
> messages.
> 
> Patches 3-5 updates the modes list of the sharp,ls020b1dd01d panel, to
> make it use 'struct drm_display_mode' instead of 'struct
> display_timing', modify the timings to get a perfect 60.00 Hz rate, and
> add a 50 Hz mode.

While touching logging stuff in panle/ I made the same fix adding
newlines. Glad to see you did it so I can drop one of my patches.

All patches applied to drm-misc-next.

	Sam

> 
> Cheers,
> -Paul
> 
> Paul Cercueil (5):
>   drm/panel: novatek,nt39016: Handle backlight the standard way
>   drm/panel: novatek,nt39016: Add missing CR to error messages
>   drm/panel: simple: Convert sharp,ls020b1dd01d from timings to
>     videomode
>   drm/panel: simple: Tweak timings of sharp,ls020b1dd01d for perfect
>     60Hz
>   drm/panel: simple: Add 50Hz mode for sharp,ls020b1dd01d
> 
>  drivers/gpu/drm/panel/panel-novatek-nt39016.c | 34 ++++++----------
>  drivers/gpu/drm/panel/panel-simple.c          | 40 +++++++++++++------
>  2 files changed, 40 insertions(+), 34 deletions(-)
> 
> -- 
> 2.28.0

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-08-15 22:28 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-11  0:22 [PATCH 0/5] drm/panel: A few cleanups and improvements Paul Cercueil
2020-08-11  0:22 ` [PATCH 1/5] drm/panel: novatek,nt39016: Handle backlight the standard way Paul Cercueil
2020-08-11  0:22 ` [PATCH 2/5] drm/panel: novatek,nt39016: Add missing CR to error messages Paul Cercueil
2020-08-11  0:22 ` [PATCH 3/5] drm/panel: simple: Convert sharp,ls020b1dd01d from timings to videomode Paul Cercueil
2020-08-11  0:22 ` [PATCH 4/5] drm/panel: simple: Tweak timings of sharp,ls020b1dd01d for perfect 60Hz Paul Cercueil
2020-08-11  0:22 ` [PATCH 5/5] drm/panel: simple: Add 50Hz mode for sharp,ls020b1dd01d Paul Cercueil
2020-08-15 14:09 ` [PATCH 0/5] drm/panel: A few cleanups and improvements Sam Ravnborg

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).