Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Samson Tam and committed by
Alex Deucher
5231f5d1 df534fff

+26
+26
drivers/gpu/drm/amd/display/modules/freesync/freesync.c
··· 46 46 47 47 #define FREESYNC_NO_STATIC_FOR_INTERNAL_REGKEY "DalFreeSyncNoStaticForInternal" 48 48 49 + #define FREESYNC_DEFAULT_REGKEY "LCDFreeSyncDefault" 50 + 49 51 struct gradual_static_ramp { 50 52 bool ramp_is_active; 51 53 bool ramp_direction_is_up; ··· 127 125 struct freesync_registry_options { 128 126 bool drr_external_supported; 129 127 bool drr_internal_supported; 128 + bool lcd_freesync_default_set; 129 + int lcd_freesync_default_value; 130 130 }; 131 131 132 132 struct core_freesync { ··· 191 187 &data, sizeof(data), &flag)) { 192 188 core_freesync->opts.drr_external_supported = 193 189 (data & 1) ? false : true; 190 + } 191 + 192 + if (dm_read_persistent_data(dc->ctx, NULL, NULL, 193 + FREESYNC_DEFAULT_REGKEY, 194 + &data, sizeof(data), &flag)) { 195 + core_freesync->opts.lcd_freesync_default_set = true; 196 + core_freesync->opts.lcd_freesync_default_value = data; 197 + } else { 198 + core_freesync->opts.lcd_freesync_default_set = false; 199 + core_freesync->opts.lcd_freesync_default_value = 0; 194 200 } 195 201 196 202 return &core_freesync->public; ··· 308 294 core_freesync->map[core_freesync->num_entities].user_enable. 309 295 enable_for_video = 310 296 (persistent_freesync_enable & 4) ? true : false; 297 + /* If FreeSync display and LCDFreeSyncDefault is set, use as default values write back to userenable */ 298 + } else if (caps->supported && (core_freesync->opts.lcd_freesync_default_set)) { 299 + core_freesync->map[core_freesync->num_entities].user_enable.enable_for_gaming = 300 + (core_freesync->opts.lcd_freesync_default_value & 1) ? true : false; 301 + core_freesync->map[core_freesync->num_entities].user_enable.enable_for_static = 302 + (core_freesync->opts.lcd_freesync_default_value & 2) ? true : false; 303 + core_freesync->map[core_freesync->num_entities].user_enable.enable_for_video = 304 + (core_freesync->opts.lcd_freesync_default_value & 4) ? true : false; 305 + dm_write_persistent_data(dc->ctx, stream->sink, 306 + FREESYNC_REGISTRY_NAME, 307 + "userenable", &core_freesync->opts.lcd_freesync_default_value, 308 + sizeof(int), &flag); 311 309 } else { 312 310 core_freesync->map[core_freesync->num_entities].user_enable. 313 311 enable_for_gaming = false;