[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20190825135154.11488-14-jacopo+renesas@jmondi.org>
Date: Sun, 25 Aug 2019 15:51:53 +0200
From: Jacopo Mondi <jacopo+renesas@...ndi.org>
To: laurent.pinchart@...asonboard.com,
kieran.bingham+renesas@...asonboard.com, geert@...ux-m68k.org,
horms@...ge.net.au, uli@...nd.eu, airlied@...ux.ie, daniel@...ll.ch
Cc: Jacopo Mondi <jacopo+renesas@...ndi.org>,
koji.matsuoka.xm@...esas.com, muroya@....co.jp,
VenkataRajesh.Kalakodima@...bosch.com,
Harsha.ManjulaMallikarjun@...bosch.com,
linux-renesas-soc@...r.kernel.org, dri-devel@...ts.freedesktop.org,
linux-kernel@...r.kernel.org, Ulrich Hecht <uli+renesas@...nd.eu>
Subject: [PATCH v3 13/14] drm: rcar-du: kms: Update CMM in atomic commit tail
Update CMM settings at in the atomic commit tail helper method.
The CMM is updated with new gamma values provided to the driver
in the GAMMA_LUT blob property.
Reviewed-by: Ulrich Hecht <uli+renesas@...nd.eu>
Reviewed-by: Laurent Pinchart <laurent.pinchart@...asonboard.com>
Signed-off-by: Jacopo Mondi <jacopo+renesas@...ndi.org>
---
drivers/gpu/drm/rcar-du/rcar_du_kms.c | 35 +++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
index 61ca1d3c379a..047fdb982a11 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
@@ -22,6 +22,7 @@
#include <linux/of_platform.h>
#include <linux/wait.h>
+#include "rcar_cmm.h"
#include "rcar_du_crtc.h"
#include "rcar_du_drv.h"
#include "rcar_du_encoder.h"
@@ -368,6 +369,37 @@ rcar_du_fb_create(struct drm_device *dev, struct drm_file *file_priv,
* Atomic Check and Update
*/
+static void rcar_du_atomic_commit_update_cmm(struct drm_crtc *crtc,
+ struct drm_crtc_state *old_state)
+{
+ struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc);
+ struct rcar_cmm_config cmm_config = {};
+
+ if (!rcrtc->cmm || !crtc->state->color_mgmt_changed)
+ return;
+
+ if (!crtc->state->gamma_lut) {
+ cmm_config.lut.enable = false;
+ rcar_cmm_setup(rcrtc->cmm, &cmm_config);
+
+ return;
+ }
+
+ cmm_config.lut.enable = true;
+ cmm_config.lut.table = (struct drm_color_lut *)
+ crtc->state->gamma_lut->data;
+
+ /* Set LUT table size to 0 if entries should not be updated. */
+ if (!old_state->gamma_lut ||
+ old_state->gamma_lut->base.id != crtc->state->gamma_lut->base.id)
+ cmm_config.lut.size = crtc->state->gamma_lut->length
+ / sizeof(cmm_config.lut.table[0]);
+ else
+ cmm_config.lut.size = 0;
+
+ rcar_cmm_setup(rcrtc->cmm, &cmm_config);
+}
+
static int rcar_du_atomic_check(struct drm_device *dev,
struct drm_atomic_state *state)
{
@@ -410,6 +442,9 @@ static void rcar_du_atomic_commit_tail(struct drm_atomic_state *old_state)
rcdu->dpad1_source = rcrtc->index;
}
+ for_each_old_crtc_in_state(old_state, crtc, crtc_state, i)
+ rcar_du_atomic_commit_update_cmm(crtc, crtc_state);
+
/* Apply the atomic update. */
drm_atomic_helper_commit_modeset_disables(dev, old_state);
drm_atomic_helper_commit_planes(dev, old_state,
--
2.22.0
Powered by blists - more mailing lists