All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tomi Valkeinen <tomi.valkeinen-l0cyMroinI0@public.gmane.org>
To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org,
	Laurent Pinchart
	<laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
Cc: Jyri Sarha <jsarha-l0cyMroinI0@public.gmane.org>,
	Peter Ujfalusi <peter.ujfalusi-l0cyMroinI0@public.gmane.org>,
	Tomi Valkeinen <tomi.valkeinen-l0cyMroinI0@public.gmane.org>,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: [PATCHv4 25/29] drm/omap: displays: panel-dpi: Support for handling backlight devices
Date: Thu, 30 Mar 2017 14:15:25 +0300	[thread overview]
Message-ID: <1490872529-23084-26-git-send-email-tomi.valkeinen@ti.com> (raw)
In-Reply-To: <1490872529-23084-1-git-send-email-tomi.valkeinen-l0cyMroinI0@public.gmane.org>

From: Peter Ujfalusi <peter.ujfalusi-l0cyMroinI0@public.gmane.org>

The associated backlight device can be configured via DT by providing the
phandle to the device.

If the backlight device is configured, the driver can manage the backligt
along with the panel's power state, iow it can turn on the backlight when
the panel is enabled and turn it off when the panel is disabled.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi-l0cyMroinI0@public.gmane.org>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen-l0cyMroinI0@public.gmane.org>
Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
---
 .../bindings/display/panel/panel-dpi.txt           |  3 ++
 drivers/gpu/drm/omapdrm/displays/panel-dpi.c       | 37 ++++++++++++++++++++--
 2 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/display/panel/panel-dpi.txt b/Documentation/devicetree/bindings/display/panel/panel-dpi.txt
index d4add13e592d..6b203bc4d932 100644
--- a/Documentation/devicetree/bindings/display/panel/panel-dpi.txt
+++ b/Documentation/devicetree/bindings/display/panel/panel-dpi.txt
@@ -9,6 +9,7 @@ Optional properties:
 - enable-gpios: panel enable gpio
 - reset-gpios: GPIO to control the RESET pin
 - vcc-supply: phandle of regulator that will be used to enable power to the display
+- backlight: phandle of the backlight device
 
 Required nodes:
 - "panel-timing" containing video timings
@@ -22,6 +23,8 @@ lcd0: display@0 {
         compatible = "samsung,lte430wq-f0c", "panel-dpi";
         label = "lcd";
 
+        backlight = <&backlight>;
+
         port {
             lcd_in: endpoint {
                     remote-endpoint = <&dpi_out>;
diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
index 38003208d9ca..04ce8c5f2954 100644
--- a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
+++ b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c
@@ -16,6 +16,7 @@
 #include <linux/of.h>
 #include <linux/of_gpio.h>
 #include <linux/regulator/consumer.h>
+#include <linux/backlight.h>
 
 #include <video/omap-panel-data.h>
 #include <video/of_display_timing.h>
@@ -30,6 +31,8 @@ struct panel_drv_data {
 
 	struct videomode vm;
 
+	struct backlight_device *backlight;
+
 	/* used for non-DT boot, to be removed */
 	int backlight_gpio;
 
@@ -97,6 +100,11 @@ static int panel_dpi_enable(struct omap_dss_device *dssdev)
 	if (gpio_is_valid(ddata->backlight_gpio))
 		gpio_set_value_cansleep(ddata->backlight_gpio, 1);
 
+	if (ddata->backlight) {
+		ddata->backlight->props.power = FB_BLANK_UNBLANK;
+		backlight_update_status(ddata->backlight);
+	}
+
 	dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
 
 	return 0;
@@ -113,6 +121,11 @@ static void panel_dpi_disable(struct omap_dss_device *dssdev)
 	if (gpio_is_valid(ddata->backlight_gpio))
 		gpio_set_value_cansleep(ddata->backlight_gpio, 0);
 
+	if (ddata->backlight) {
+		ddata->backlight->props.power = FB_BLANK_POWERDOWN;
+		backlight_update_status(ddata->backlight);
+	}
+
 	gpiod_set_value_cansleep(ddata->enable_gpio, 0);
 	regulator_disable(ddata->vcc_supply);
 
@@ -209,6 +222,7 @@ static int panel_dpi_probe_of(struct platform_device *pdev)
 {
 	struct panel_drv_data *ddata = platform_get_drvdata(pdev);
 	struct device_node *node = pdev->dev.of_node;
+	struct device_node *bl_node;
 	struct omap_dss_device *in;
 	int r;
 	struct display_timing timing;
@@ -236,10 +250,19 @@ static int panel_dpi_probe_of(struct platform_device *pdev)
 
 	ddata->backlight_gpio = -ENOENT;
 
+	bl_node = of_parse_phandle(node, "backlight", 0);
+	if (bl_node) {
+		ddata->backlight = of_find_backlight_by_node(bl_node);
+		of_node_put(bl_node);
+
+		if (!ddata->backlight)
+			return -EPROBE_DEFER;
+	}
+
 	r = of_get_display_timing(node, "panel-timing", &timing);
 	if (r) {
 		dev_err(&pdev->dev, "failed to get video timing\n");
-		return r;
+		goto error_free_backlight;
 	}
 
 	videomode_from_timing(&timing, &ddata->vm);
@@ -247,12 +270,19 @@ static int panel_dpi_probe_of(struct platform_device *pdev)
 	in = omapdss_of_find_source_for_first_ep(node);
 	if (IS_ERR(in)) {
 		dev_err(&pdev->dev, "failed to find video source\n");
-		return PTR_ERR(in);
+		r = PTR_ERR(in);
+		goto error_free_backlight;
 	}
 
 	ddata->in = in;
 
 	return 0;
+
+error_free_backlight:
+	if (ddata->backlight)
+		put_device(&ddata->backlight->dev);
+
+	return r;
 }
 
 static int panel_dpi_probe(struct platform_device *pdev)
@@ -321,6 +351,9 @@ static int __exit panel_dpi_remove(struct platform_device *pdev)
 
 	omap_dss_put_device(in);
 
+	if (ddata->backlight)
+		put_device(&ddata->backlight->dev);
+
 	return 0;
 }
 
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2017-03-30 11:15 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-30 11:15 [PATCHv4 00/29] drm/omap: miscallaneous improvements Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 01/29] drm/omap: work-around for errata i886 Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 02/29] drm/omap: refactor CRTC HW property setup Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 03/29] drm/omap: remove divider constraint from hsdiv Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 04/29] drm/omap: decrease min width & height Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 05/29] drm/omap: improve DPI clock selection on DRA7xx Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 06/29] drm/omap: Add support for render nodes Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 07/29] drm/omap: fix HDMI sync polarities Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 08/29] drm/omap: add omapdss-base.ko Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 09/29] drm/omap: move dss_initialized to omapdss-base Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 10/29] drm/omap: output: use dev_err instead of DSSERR Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 11/29] drm/omap: display: don't use dsi_get_pixel_size() Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 12/29] drm/omap: move display, dss-of, output to omapdss-base Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 13/29] drm/omap: move dispc related dss-feat funcs to dispc Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 14/29] drm/omap: add dispc_ops Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 15/29] drm/omap: fill dispc_ops Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 16/29] drm/omap: use dispc_ops Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 17/29] drm/omap: remove all EXPORT_SYMBOLs from dispc.c Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 18/29] drm/omap: remove unused dispc_wb_enable & dispc_wb_is_enabled Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 19/29] drm/omap: fix replication logic Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 20/29] drm/omap: dss: Functions to check components in the display/output list Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 21/29] drm/omap: dss: Support for detecting display stack readiness Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 22/29] drm/omap: Use omapdss_stack_is_ready() to check that the display stack is up Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 23/29] drm/omap: display: Add displays in sorted order to the panel_list Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 24/29] drm/omap: poll only connectors where the connect/disconnect can be checked Tomi Valkeinen
     [not found] ` <1490872529-23084-1-git-send-email-tomi.valkeinen-l0cyMroinI0@public.gmane.org>
2017-03-30 11:15   ` Tomi Valkeinen [this message]
     [not found]     ` <1490872529-23084-26-git-send-email-tomi.valkeinen-l0cyMroinI0@public.gmane.org>
2017-04-03 15:58       ` [PATCHv4 25/29] drm/omap: displays: panel-dpi: Support for handling backlight devices Rob Herring
2017-03-30 11:15 ` [PATCHv4 26/29] drm/omap: dispc: improve debug print of display flags Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 27/29] drm/omap: fix display SYNC/DE flags Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 28/29] drm/omap: use drm_atomic_helper_shutdown() Tomi Valkeinen
2017-03-30 11:15 ` [PATCHv4 29/29] drm/omap: fix crash on module unload Tomi Valkeinen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1490872529-23084-26-git-send-email-tomi.valkeinen@ti.com \
    --to=tomi.valkeinen-l0cymroini0@public.gmane.org \
    --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    --cc=jsarha-l0cyMroinI0@public.gmane.org \
    --cc=laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org \
    --cc=peter.ujfalusi-l0cyMroinI0@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.