From 69c1d655b4d9b8a09d957d8e0160b6d23f9c98d3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ga=C3=ABtan=20Andr=C3=A9?= <rvlander@gaetanandre.eu>
Date: Sun, 8 Mar 2020 09:46:41 +0100
Subject: [PATCH 50/78] FIXME: drm/panel: samsung-tc358764-ltl101al06: Add PWM
 clock

The brightness of the panel is controlled through a special clock
that emits a PWM signal. It is not yet clear how to change the brightness,
but the clock needs to be kept on for the backlight to work.
---
 .../panel-samsung-tc358764-ltl101al06.c       | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/panel/msm8916-generated/panel-samsung-tc358764-ltl101al06.c b/drivers/gpu/drm/panel/msm8916-generated/panel-samsung-tc358764-ltl101al06.c
index 404128e11..08ced2d09 100644
--- a/drivers/gpu/drm/panel/msm8916-generated/panel-samsung-tc358764-ltl101al06.c
+++ b/drivers/gpu/drm/panel/msm8916-generated/panel-samsung-tc358764-ltl101al06.c
@@ -3,6 +3,7 @@
 // Generated with linux-mdss-dsi-panel-driver-generator from vendor device tree:
 //   Copyright (c) 2013, The Linux Foundation. All rights reserved. (FIXME)
 
+#include <linux/clk.h>
 #include <linux/delay.h>
 #include <linux/gpio/consumer.h>
 #include <linux/module.h>
@@ -18,6 +19,7 @@ struct tc358764_ltl101a106 {
 	struct mipi_dsi_device *dsi;
 	struct regulator_bulk_data supplies[2];
 	struct gpio_desc *reset_gpio;
+	struct clk *pwm_clk;
 	bool prepared;
 };
 
@@ -123,6 +125,12 @@ static int tc358764_ltl101a106_prepare(struct drm_panel *panel)
 		return ret;
 	}
 
+	ret = clk_prepare_enable(ctx->pwm_clk);
+	if (ret < 0) {
+		dev_err(dev, "Failed to enable pwm clock: %d\n", ret);
+		return ret;
+	}
+
 	ctx->prepared = true;
 	return 0;
 }
@@ -136,6 +144,8 @@ static int tc358764_ltl101a106_unprepare(struct drm_panel *panel)
 	if (!ctx->prepared)
 		return 0;
 
+	clk_disable_unprepare(ctx->pwm_clk);
+
 	ret = tc358764_ltl101a106_off(ctx);
 	if (ret < 0)
 		dev_err(dev, "Failed to un-initialize panel: %d\n", ret);
@@ -208,6 +218,11 @@ static int tc358764_ltl101a106_probe(struct mipi_dsi_device *dsi)
 		return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio),
 				     "Failed to get reset-gpios\n");
 
+	ctx->pwm_clk = devm_clk_get(dev, "pwm");
+	if (IS_ERR(ctx->pwm_clk))
+		return dev_err_probe(dev, PTR_ERR(ctx->pwm_clk),
+				     "Failed to get pwm clock\n");
+
 	ctx->dsi = dsi;
 	mipi_dsi_set_drvdata(dsi, ctx);
 
@@ -219,10 +234,6 @@ static int tc358764_ltl101a106_probe(struct mipi_dsi_device *dsi)
 	drm_panel_init(&ctx->panel, dev, &tc358764_ltl101a106_panel_funcs,
 		       DRM_MODE_CONNECTOR_DSI);
 
-	ret = drm_panel_of_backlight(&ctx->panel);
-	if (ret)
-		return dev_err_probe(dev, ret, "Failed to get backlight\n");
-
 	drm_panel_add(&ctx->panel);
 
 	ret = mipi_dsi_attach(dsi);
-- 
2.31.1

