aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
diff options
context:
space:
mode:
authorSamson Tam <Samson.Tam@amd.com>2018-03-01 11:06:34 -0500
committerAlex Deucher <alexander.deucher@amd.com>2018-03-14 16:16:34 -0400
commit5231f5d1124eef853573cb3d2e3dc3c4ddc43e22 (patch)
treee4b05557f79a3c2b9f42fd29eca99e3d7cb9870f /drivers/gpu/drm/amd/display/modules/freesync/freesync.c
parentdf534fff0d23ba55a5880e592ec2901fdc09fdf6 (diff)
drm/amd/display: add support for regkey "LCDFreeSyncDefault"
Signed-off-by: Samson Tam <Samson.Tam@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/modules/freesync/freesync.c')
-rw-r--r--drivers/gpu/drm/amd/display/modules/freesync/freesync.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
index e849b704f2f6..27d4003aa2c7 100644
--- a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
+++ b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
@@ -46,6 +46,8 @@
46 46
47#define FREESYNC_NO_STATIC_FOR_INTERNAL_REGKEY "DalFreeSyncNoStaticForInternal" 47#define FREESYNC_NO_STATIC_FOR_INTERNAL_REGKEY "DalFreeSyncNoStaticForInternal"
48 48
49#define FREESYNC_DEFAULT_REGKEY "LCDFreeSyncDefault"
50
49struct gradual_static_ramp { 51struct gradual_static_ramp {
50 bool ramp_is_active; 52 bool ramp_is_active;
51 bool ramp_direction_is_up; 53 bool ramp_direction_is_up;
@@ -125,6 +127,8 @@ struct freesync_entity {
125struct freesync_registry_options { 127struct freesync_registry_options {
126 bool drr_external_supported; 128 bool drr_external_supported;
127 bool drr_internal_supported; 129 bool drr_internal_supported;
130 bool lcd_freesync_default_set;
131 int lcd_freesync_default_value;
128}; 132};
129 133
130struct core_freesync { 134struct core_freesync {
@@ -189,6 +193,16 @@ struct mod_freesync *mod_freesync_create(struct dc *dc)
189 (data & 1) ? false : true; 193 (data & 1) ? false : true;
190 } 194 }
191 195
196 if (dm_read_persistent_data(dc->ctx, NULL, NULL,
197 FREESYNC_DEFAULT_REGKEY,
198 &data, sizeof(data), &flag)) {
199 core_freesync->opts.lcd_freesync_default_set = true;
200 core_freesync->opts.lcd_freesync_default_value = data;
201 } else {
202 core_freesync->opts.lcd_freesync_default_set = false;
203 core_freesync->opts.lcd_freesync_default_value = 0;
204 }
205
192 return &core_freesync->public; 206 return &core_freesync->public;
193 207
194fail_construct: 208fail_construct:
@@ -294,6 +308,18 @@ bool mod_freesync_add_stream(struct mod_freesync *mod_freesync,
294 core_freesync->map[core_freesync->num_entities].user_enable. 308 core_freesync->map[core_freesync->num_entities].user_enable.
295 enable_for_video = 309 enable_for_video =
296 (persistent_freesync_enable & 4) ? true : false; 310 (persistent_freesync_enable & 4) ? true : false;
311 /* If FreeSync display and LCDFreeSyncDefault is set, use as default values write back to userenable */
312 } else if (caps->supported && (core_freesync->opts.lcd_freesync_default_set)) {
313 core_freesync->map[core_freesync->num_entities].user_enable.enable_for_gaming =
314 (core_freesync->opts.lcd_freesync_default_value & 1) ? true : false;
315 core_freesync->map[core_freesync->num_entities].user_enable.enable_for_static =
316 (core_freesync->opts.lcd_freesync_default_value & 2) ? true : false;
317 core_freesync->map[core_freesync->num_entities].user_enable.enable_for_video =
318 (core_freesync->opts.lcd_freesync_default_value & 4) ? true : false;
319 dm_write_persistent_data(dc->ctx, stream->sink,
320 FREESYNC_REGISTRY_NAME,
321 "userenable", &core_freesync->opts.lcd_freesync_default_value,
322 sizeof(int), &flag);
297 } else { 323 } else {
298 core_freesync->map[core_freesync->num_entities].user_enable. 324 core_freesync->map[core_freesync->num_entities].user_enable.
299 enable_for_gaming = false; 325 enable_for_gaming = false;