mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00
84 lines
2.6 KiB
Diff
84 lines
2.6 KiB
Diff
From 33d1d04ba47ab79e38400038347b1ef04aca10fc Mon Sep 17 00:00:00 2001
|
|
From: Hector Martin <marcan@marcan.st>
|
|
Date: Fri, 4 Mar 2022 19:19:38 +0900
|
|
Subject: [PATCH 058/171] drm/simpledrm: Add backlight support
|
|
|
|
Allows devicetrees to link the simplefb node to a backlight device,
|
|
and toggles power to the backlight when the display pipe is
|
|
enabled/disabled. This is sufficient for basic DPMS style functionality
|
|
in trivial devices.
|
|
|
|
Signed-off-by: Hector Martin <marcan@marcan.st>
|
|
---
|
|
drivers/gpu/drm/tiny/Kconfig | 1 +
|
|
drivers/gpu/drm/tiny/simpledrm.c | 14 ++++++++++++++
|
|
2 files changed, 15 insertions(+)
|
|
|
|
diff --git a/drivers/gpu/drm/tiny/Kconfig b/drivers/gpu/drm/tiny/Kconfig
|
|
index 627d637a1e7e..20c78bb1365d 100644
|
|
--- a/drivers/gpu/drm/tiny/Kconfig
|
|
+++ b/drivers/gpu/drm/tiny/Kconfig
|
|
@@ -71,6 +71,7 @@ config DRM_SIMPLEDRM
|
|
depends on DRM && MMU
|
|
select DRM_GEM_SHMEM_HELPER
|
|
select DRM_KMS_HELPER
|
|
+ select BACKLIGHT_CLASS_DEVICE
|
|
help
|
|
DRM driver for simple platform-provided framebuffers.
|
|
|
|
diff --git a/drivers/gpu/drm/tiny/simpledrm.c b/drivers/gpu/drm/tiny/simpledrm.c
|
|
index 5422363690e7..40de01efbbd9 100644
|
|
--- a/drivers/gpu/drm/tiny/simpledrm.c
|
|
+++ b/drivers/gpu/drm/tiny/simpledrm.c
|
|
@@ -1,5 +1,6 @@
|
|
// SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
+#include <linux/backlight.h>
|
|
#include <linux/clk.h>
|
|
#include <linux/of_clk.h>
|
|
#include <linux/minmax.h>
|
|
@@ -225,6 +226,9 @@ struct simpledrm_device {
|
|
size_t nformats;
|
|
struct drm_connector connector;
|
|
struct drm_simple_display_pipe pipe;
|
|
+
|
|
+ /* backlight */
|
|
+ struct backlight_device *backlight;
|
|
};
|
|
|
|
static struct simpledrm_device *simpledrm_device_of_dev(struct drm_device *dev)
|
|
@@ -673,6 +677,9 @@ simpledrm_simple_display_pipe_enable(struct drm_simple_display_pipe *pipe,
|
|
dst += drm_fb_clip_offset(sdev->pitch, sdev->format, &dst_clip);
|
|
drm_fb_blit_toio(dst, sdev->pitch, sdev->format->format, vmap, fb, &src_clip);
|
|
|
|
+ if (sdev->backlight)
|
|
+ backlight_enable(sdev->backlight);
|
|
+
|
|
drm_dev_exit(idx);
|
|
}
|
|
|
|
@@ -686,6 +693,9 @@ simpledrm_simple_display_pipe_disable(struct drm_simple_display_pipe *pipe)
|
|
if (!drm_dev_enter(dev, &idx))
|
|
return;
|
|
|
|
+ if (sdev->backlight)
|
|
+ backlight_disable(sdev->backlight);
|
|
+
|
|
/* Clear screen to black if disabled */
|
|
memset_io(sdev->screen_base, 0, sdev->pitch * sdev->mode.vdisplay);
|
|
|
|
@@ -845,6 +855,10 @@ simpledrm_device_create(struct drm_driver *drv, struct platform_device *pdev)
|
|
sdev->pdev = pdev;
|
|
platform_set_drvdata(pdev, sdev);
|
|
|
|
+ sdev->backlight = devm_of_find_backlight(&pdev->dev);
|
|
+ if (IS_ERR(sdev->backlight))
|
|
+ sdev->backlight = NULL;
|
|
+
|
|
ret = simpledrm_device_init_clocks(sdev);
|
|
if (ret)
|
|
return ERR_PTR(ret);
|
|
--
|
|
2.34.1
|
|
|