[Intel-gfx] [PATCH 16/22] drm/i915: Commit color correction to CRTC
Emil Velikov
emil.l.velikov at gmail.com
Fri Oct 9 16:24:16 PDT 2015
Hi Shashank,
On 9 October 2015 at 20:29, Shashank Sharma <shashank.sharma at intel.com> wrote:
> The color correction blob values are loaded during set_property
> calls. This patch adds a function to find the blob and apply the
> correction values to the display registers, during the atomic
> commit call.
>
> Signed-off-by: Shashank Sharma <shashank.sharma at intel.com>
> Signed-off-by: Kausal Malladi <kausalmalladi at gmail.com>
> ---
> drivers/gpu/drm/i915/intel_color_manager.c | 44 ++++++++++++++++++++++++++++++
> drivers/gpu/drm/i915/intel_display.c | 2 ++
> drivers/gpu/drm/i915/intel_drv.h | 3 ++
> 3 files changed, 49 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/intel_color_manager.c b/drivers/gpu/drm/i915/intel_color_manager.c
> index 433e50a..d5315b2 100644
> --- a/drivers/gpu/drm/i915/intel_color_manager.c
> +++ b/drivers/gpu/drm/i915/intel_color_manager.c
> @@ -307,6 +307,50 @@ static int chv_set_gamma(struct drm_device *dev, struct drm_property_blob *blob,
> return ret;
> }
>
> +void intel_color_manager_crtc_commit(struct drm_device *dev,
> + struct drm_crtc_state *crtc_state)
> +{
> + struct drm_property_blob *blob;
> + struct drm_crtc *crtc = crtc_state->crtc;
> + int ret = -EINVAL;
Most places/people advise against pre-emptively initializing ret.
> +
> + blob = crtc_state->palette_after_ctm_blob;
> + if (blob) {
> + /* Gamma correction is platform specific */
> + if (IS_CHERRYVIEW(dev))
> + ret = chv_set_gamma(dev, blob, crtc);
> +
> + if (ret)
> + DRM_ERROR("set Gamma correction failed\n");
Do we really want to spam dmesg on for each non Cherryview device ?
> + else
> + DRM_DEBUG_DRIVER("Gamma correction success\n");
> + }
> +
> + blob = crtc_state->palette_before_ctm_blob;
> + if (blob) {
> + /* Degamma correction */
> + if (IS_CHERRYVIEW(dev))
> + ret = chv_set_degamma(dev, blob, crtc);
> +
> + if (ret)
> + DRM_ERROR("set degamma correction failed\n");
> + else
> + DRM_DEBUG_DRIVER("degamma correction success\n");
> + }
> +
> + blob = crtc_state->ctm_blob;
> + if (blob) {
> + /* CSC correction */
> + if (IS_CHERRYVIEW(dev))
> + ret = chv_set_csc(dev, blob, crtc);
> +
> + if (ret)
> + DRM_ERROR("set CSC correction failed\n");
> + else
> + DRM_DEBUG_DRIVER("CSC correction success\n");
> + }
> +}
> +
> void intel_attach_color_properties_to_crtc(struct drm_device *dev,
> struct drm_crtc *crtc)
> {
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 98cc97a..8235341 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -13528,6 +13528,8 @@ static void intel_begin_crtc_commit(struct drm_crtc *crtc,
> intel_update_pipe_config(intel_crtc, old_intel_state);
> else if (INTEL_INFO(dev)->gen >= 9)
> skl_detach_scalers(intel_crtc);
> +
> + intel_color_manager_crtc_commit(dev, crtc->state);
> }
>
> static void intel_finish_crtc_commit(struct drm_crtc *crtc,
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index ed66a4f..d100e81 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -1469,4 +1469,7 @@ void intel_plane_destroy_state(struct drm_plane *plane,
> struct drm_plane_state *state);
> extern const struct drm_plane_helper_funcs intel_plane_helper_funcs;
>
> +/* intel_color_mnager.c */
Typo -> manager.
Regards,
Emil
More information about the Intel-gfx
mailing list