Add field into VBT data structure for pointer to Block 57. Cache the pointer into it during VBT parsing.
In case firmware lacks Block 57 it will not be found during init_bdb_blocks(). In turn it will not be appended to ->vbt.bdb_blocks list. Thus bdb_find_section() will set .vswing to NULL. Init the field to NULL when no VBT was provided. Signed-off-by: Michał Grzelak <[email protected]> --- drivers/gpu/drm/i915/display/intel_bios.c | 11 +++++++++++ drivers/gpu/drm/i915/display/intel_display_core.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c index 5700de438fdf..ae33b93772ef 100644 --- a/drivers/gpu/drm/i915/display/intel_bios.c +++ b/drivers/gpu/drm/i915/display/intel_bios.c @@ -2185,6 +2185,15 @@ parse_compression_parameters(struct intel_display *display) } } +static void +cache_vswing_preemph_block(struct intel_display *display) +{ + const u32 *block; + + block = bdb_find_section(display, BDB_VSWING_PREEMPH); + display->vbt.override_vswing = block; +} + static u8 translate_iboost(struct intel_display *display, u8 val) { static const u8 mapping[] = { 1, 3, 7 }; /* See VBT spec */ @@ -3046,6 +3055,7 @@ init_vbt_missing_defaults(struct intel_display *display) child->device_type, port_name(port)); } + display->vbt.override_vswing = NULL; /* Bypass some minimum baseline VBT version checks */ display->vbt.version = 155; } @@ -3276,6 +3286,7 @@ void intel_bios_init(struct intel_display *display) /* Depends on child device list */ parse_compression_parameters(display); + cache_vswing_preemph_block(display); out: if (!vbt) { diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h index d708d322aa85..f974df3becef 100644 --- a/drivers/gpu/drm/i915/display/intel_display_core.h +++ b/drivers/gpu/drm/i915/display/intel_display_core.h @@ -233,6 +233,8 @@ struct intel_vbt_data { struct list_head display_devices; struct list_head bdb_blocks; + const u32 *override_vswing; + struct sdvo_device_mapping { u8 initialized; u8 dvo_port; -- 2.45.2
