summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/display/dc/core
diff options
context:
space:
mode:
authorAmy Zhang <Amy.Zhang@amd.com>2016-12-12 10:32:24 -0500
committerAlex Deucher <alexander.deucher@amd.com>2017-09-26 17:04:48 -0400
commit89e8963036085e4e0e9a993d2e1bdbb931d53794 (patch)
tree48bd4ccc7ce371d0536aeff8a29eb88764688e34 /drivers/gpu/drm/amd/display/dc/core
parent9474980ac470a20d244318db9a7c12be01437805 (diff)
downloadop-kernel-dev-89e8963036085e4e0e9a993d2e1bdbb931d53794.zip
op-kernel-dev-89e8963036085e4e0e9a993d2e1bdbb931d53794.tar.gz
drm/amd/display: Fix Gamma Adjustment
- Gamma correction is not properly copied to the surface after refactor - Make sure gamma correction is copied with correct retain Signed-off-by: Amy Zhang <Amy.Zhang@amd.com> Reviewed-by: Anthony Koo <Anthony.Koo@amd.com> Acked-by: Harry Wentland <Harry.Wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/display/dc/core')
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc.c14
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc_surface.c3
2 files changed, 14 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
index de99d71..41df500 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -1302,8 +1302,8 @@ bool dc_commit_surfaces_to_target(
for (i = 0; i < new_surface_count; i++) {
updates[i].surface = new_surfaces[i];
- updates[i].gamma = (struct dc_gamma *)new_surfaces[i]->gamma_correction;
-
+ updates[i].gamma =
+ (struct dc_gamma *)new_surfaces[i]->gamma_correction;
flip_addr[i].address = new_surfaces[i]->address;
flip_addr[i].flip_immediate = new_surfaces[i]->flip_immediate;
plane_info[i].color_space = new_surfaces[i]->color_space;
@@ -1444,6 +1444,16 @@ void dc_update_surfaces_for_target(struct dc *dc, struct dc_surface_update *upda
pipe_ctx->scl_data.recout.width -= 2;
}
}
+
+ if (updates[i].gamma) {
+ if (surface->public.gamma_correction != NULL)
+ dc_gamma_release(surface->public.
+ gamma_correction);
+
+ dc_gamma_retain(updates[i].gamma);
+ surface->public.gamma_correction =
+ updates[i].gamma;
+ }
}
}
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_surface.c b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c
index b89d3b5..06d8b32 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_surface.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c
@@ -64,7 +64,8 @@ static bool construct(struct dc_context *ctx, struct surface *surface)
static void destruct(struct surface *surface)
{
-
+ if (surface->protected.public.gamma_correction != NULL)
+ dc_gamma_release(surface->protected.public.gamma_correction);
}
/*******************************************************************************
OpenPOWER on IntegriCloud