All of lore.kernel.org
 help / color / mirror / Atom feed
From: Abhinav Kumar <abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org,
	freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org,
	linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: architt-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org,
	jeykumar-jfJNa2p1gH1BDgjK7y7TUQ@public.gmane.org,
	Abhinav Kumar <abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
	robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org,
	seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org,
	hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
	jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org,
	chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org
Subject: [DPU PATCH v2 2/2] drm/panel: add backlight control support for truly panel
Date: Sat, 14 Apr 2018 00:25:13 -0700	[thread overview]
Message-ID: <1523690713-22543-2-git-send-email-abhinavk@codeaurora.org> (raw)
In-Reply-To: <1523690713-22543-1-git-send-email-abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>

Register truly panel as a backlight led device and
provide methods to control its backlight operation.

Changes in v2:
- Removed redundant NULL checks
- Arranged headers alphabetically
- Formatting fixes

Signed-off-by: Abhinav Kumar <abhinavk@codeaurora.org>
---
 drivers/gpu/drm/panel/panel-truly-nt35597.c | 91 +++++++++++++++++++++++++++++
 1 file changed, 91 insertions(+)

diff --git a/drivers/gpu/drm/panel/panel-truly-nt35597.c b/drivers/gpu/drm/panel/panel-truly-nt35597.c
index 5bd5fdc..ec9f973 100644
--- a/drivers/gpu/drm/panel/panel-truly-nt35597.c
+++ b/drivers/gpu/drm/panel/panel-truly-nt35597.c
@@ -13,6 +13,7 @@
  */
 
 #include <linux/gpio/consumer.h>
+#include <linux/leds.h>
 #include <linux/of_graph.h>
 #include <linux/regulator/consumer.h>
 #include <linux/pinctrl/consumer.h>
@@ -25,6 +26,9 @@
 #include <drm/drm_panel.h>
 #include <drm/drm_mipi_dsi.h>
 
+#define BL_NODE_NAME_SIZE 32
+#define PRIM_DISPLAY_NODE 0
+
 static const char * const regulator_names[] = {
 	"vdda",
 	"vdispp",
@@ -51,6 +55,8 @@ struct truly_wqxga {
 	struct gpio_desc *mode_gpio;
 
 	struct backlight_device *backlight;
+	/* WLED params */
+	struct led_trigger *wled;
 	struct videomode vm;
 
 	struct mipi_dsi_device *dsi[2];
@@ -454,6 +460,82 @@ static void truly_wqxga_panel_del(struct truly_wqxga *ctx)
 		drm_panel_remove(&ctx->panel);
 }
 
+static void truly_wqxga_bkl_unregister(struct truly_wqxga *ctx)
+{
+	if (ctx->backlight)
+		put_device(&ctx->backlight->dev);
+}
+
+static int truly_backlight_device_update_status(struct backlight_device *bd)
+{
+	int brightness;
+	int max_brightness;
+	int rc = 0;
+	struct truly_wqxga *ctx = dev_get_drvdata(&bd->dev);
+
+	brightness = bd->props.brightness;
+	max_brightness = bd->props.max_brightness;
+
+	if ((bd->props.power != FB_BLANK_UNBLANK) ||
+		(bd->props.state & BL_CORE_FBBLANK) ||
+		  (bd->props.state & BL_CORE_SUSPENDED))
+		brightness = 0;
+
+	if (brightness > max_brightness)
+		brightness = max_brightness;
+
+	if (ctx->wled)
+		led_trigger_event(ctx->wled, brightness);
+
+	return rc;
+}
+
+static int truly_backlight_device_get_brightness(struct backlight_device *bd)
+{
+	return bd->props.brightness;
+}
+
+static const struct backlight_ops truly_backlight_device_ops = {
+	.update_status = truly_backlight_device_update_status,
+	.get_brightness = truly_backlight_device_get_brightness,
+};
+
+static int truly_backlight_setup(struct truly_wqxga *ctx)
+{
+	struct backlight_properties props;
+	char bl_node_name[BL_NODE_NAME_SIZE];
+
+	if (!ctx->backlight) {
+		memset(&props, 0, sizeof(props));
+		props.type = BACKLIGHT_RAW;
+		props.power = FB_BLANK_UNBLANK;
+		props.max_brightness = 4096;
+
+		snprintf(bl_node_name, BL_NODE_NAME_SIZE, "panel%u-backlight",
+				 PRIM_DISPLAY_NODE);
+
+		ctx->backlight =  backlight_device_register(bl_node_name,
+				ctx->dev, ctx,
+				&truly_backlight_device_ops, &props);
+
+		if (IS_ERR_OR_NULL(ctx->backlight)) {
+			pr_err("Failed to register backlight\n");
+			ctx->backlight = NULL;
+			return -ENODEV;
+		}
+
+		/* Register with the LED driver interface */
+		led_trigger_register_simple("bkl-trigger", &ctx->wled);
+
+		if (!ctx->wled) {
+			pr_err("backlight led registration failed\n");
+			return -ENODEV;
+		}
+	}
+
+	return 0;
+}
+
 static int truly_wqxga_probe(struct mipi_dsi_device *dsi)
 {
 	struct device *dev = &dsi->dev;
@@ -530,6 +612,12 @@ static int truly_wqxga_probe(struct mipi_dsi_device *dsi)
 		goto err_panel_add;
 	}
 
+	ret = truly_backlight_setup(ctx);
+	if (ret) {
+		dev_err(dev, "backlight setup failed\n");
+		goto err_backlight;
+	}
+
 	ret = mipi_dsi_attach(dsi);
 	if (ret < 0) {
 		dev_err(dev, "master dsi attach failed\n");
@@ -549,6 +637,8 @@ static int truly_wqxga_probe(struct mipi_dsi_device *dsi)
 err_dsi_attach_sec:
 	mipi_dsi_detach(ctx->dsi[0]);
 err_dsi_attach:
+	truly_wqxga_bkl_unregister(ctx);
+err_backlight:
 	truly_wqxga_panel_del(ctx);
 err_panel_add:
 	mipi_dsi_device_unregister(secondary);
@@ -570,6 +660,7 @@ static int truly_wqxga_remove(struct mipi_dsi_device *dsi)
 			mipi_dsi_detach(ctx->dsi[1]);
 			mipi_dsi_device_unregister(ctx->dsi[1]);
 		}
+		truly_wqxga_bkl_unregister(ctx);
 		truly_wqxga_panel_del(ctx);
 		kfree(ctx);
 	}
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project

_______________________________________________
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno

  parent reply	other threads:[~2018-04-14  7:25 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-14  7:25 [DPU PATCH v2 1/2] drm/panel: Add Truly NT35597 panel Abhinav Kumar
     [not found] ` <1523690713-22543-1-git-send-email-abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-04-14  7:25   ` Abhinav Kumar [this message]
     [not found]     ` <1523690713-22543-2-git-send-email-abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-04-16 16:41       ` [DPU PATCH v2 2/2] drm/panel: add backlight control support for truly panel Bjorn Andersson
2018-04-16 16:51         ` Sean Paul
2018-04-16 22:45         ` abhinavk-sgV2jX0FEOL9JmXXK+q4OQ
     [not found]           ` <d50c2a2dac7d6541d78eee60c2ff4739-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-04-17  6:13             ` Bjorn Andersson
2018-04-17 18:21               ` [Freedreno] " abhinavk
     [not found]                 ` <e220ca93282a7d942d4144ac2313efc0-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-04-17 18:57                   ` Sujeev Dias
2018-04-17 21:29                   ` Bjorn Andersson
2018-04-18  0:04                     ` abhinavk-sgV2jX0FEOL9JmXXK+q4OQ
2018-04-18  0:42                       ` [Freedreno] " abhinavk
2018-04-18 10:52                         ` Daniel Thompson
     [not found]                           ` <20180418105218.oja4gogmcx32ym5a-SoAo7ar8mTX/PtFMR13I2A@public.gmane.org>
2018-04-18 13:42                             ` Sean Paul
2018-04-18 22:08                               ` abhinavk-sgV2jX0FEOL9JmXXK+q4OQ
     [not found]                         ` <be0fa84101458da4cd6d77b963189baf-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-04-19  4:24                           ` Bjorn Andersson
2018-04-18 13:32                       ` [Freedreno] " Sean Paul
     [not found]                       ` <7cb250765fbf7b633fd54e4338cc433d-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-04-19  4:00                         ` Bjorn Andersson
2018-04-19  4:23                           ` abhinavk-sgV2jX0FEOL9JmXXK+q4OQ
     [not found]                             ` <b2e4e39d6911d4ab89fa753d194392b6-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-04-19  4:42                               ` Bjorn Andersson
2018-05-24  1:37                                 ` abhinavk-sgV2jX0FEOL9JmXXK+q4OQ
2018-04-19 17:44   ` [DPU PATCH v2 1/2] drm/panel: Add Truly NT35597 panel Archit Taneja
2018-05-24  1:28     ` abhinavk

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=1523690713-22543-2-git-send-email-abhinavk@codeaurora.org \
    --to=abhinavk-sgv2jx0feol9jmxxk+q4oq@public.gmane.org \
    --cc=architt-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
    --cc=chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
    --cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    --cc=freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    --cc=hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    --cc=jeykumar-jfJNa2p1gH1BDgjK7y7TUQ@public.gmane.org \
    --cc=jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
    --cc=linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
    --cc=robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=seanpaul-F7+t8E8rja9g9hUCZPvPmw@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.