Add into intel_encoder constant pointer to intel_ddi_buf_trans. Track with it VS/PE-O buffer from corresponding BIOS encoder.
Add helper function into intel_bios.[ch] to extract port's intel_ddi_buf_trans pointer. Cache the pointer by default into each intel_encoder during intel_ddi_init(). This is needed as devdata->buf_trans has been allocated per each port during parsing DDI ports in intel_bios.c. Meanwhile every encoder will need to know if VS/PE overriding is requested during intel_ddi_buf_trans_init(). Signed-off-by: Michał Grzelak <[email protected]> --- drivers/gpu/drm/i915/display/intel_bios.c | 6 ++++++ drivers/gpu/drm/i915/display/intel_bios.h | 2 ++ drivers/gpu/drm/i915/display/intel_ddi.c | 1 + drivers/gpu/drm/i915/display/intel_display_types.h | 1 + 4 files changed, 10 insertions(+) diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c index 1b813a3dff245..6893aa9f01aec 100644 --- a/drivers/gpu/drm/i915/display/intel_bios.c +++ b/drivers/gpu/drm/i915/display/intel_bios.c @@ -3851,6 +3851,12 @@ bool intel_bios_encoder_supports_tbt(const struct intel_bios_encoder_data *devda return devdata->display->vbt.version >= 209 && devdata->child.tbt; } +const struct intel_ddi_buf_trans * +intel_bios_encoder_extract_vswing(const struct intel_bios_encoder_data *devdata) +{ + return devdata->buf_trans; +} + bool intel_bios_encoder_overrides_vswing(const struct intel_bios_encoder_data *devdata) { return devdata->display->vbt.version >= 218 && diff --git a/drivers/gpu/drm/i915/display/intel_bios.h b/drivers/gpu/drm/i915/display/intel_bios.h index 50c8fc91fbe85..cf040b9b7915b 100644 --- a/drivers/gpu/drm/i915/display/intel_bios.h +++ b/drivers/gpu/drm/i915/display/intel_bios.h @@ -73,6 +73,8 @@ bool intel_bios_get_dsc_params(struct intel_encoder *encoder, const struct intel_bios_encoder_data * intel_bios_encoder_data_lookup(struct intel_display *display, enum port port); +const struct intel_ddi_buf_trans * +intel_bios_encoder_extract_vswing(const struct intel_bios_encoder_data *devdata); bool intel_bios_encoder_overrides_vswing(const struct intel_bios_encoder_data *devdata); bool intel_bios_encoder_supports_dvi(const struct intel_bios_encoder_data *devdata); bool intel_bios_encoder_supports_hdmi(const struct intel_bios_encoder_data *devdata); diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c index 2681940a5cfe3..eb188b27ec96b 100644 --- a/drivers/gpu/drm/i915/display/intel_ddi.c +++ b/drivers/gpu/drm/i915/display/intel_ddi.c @@ -5249,6 +5249,7 @@ void intel_ddi_init(struct intel_display *display, encoder = &dig_port->base; encoder->devdata = devdata; + encoder->vspeo = intel_bios_encoder_extract_vswing(devdata); drm_encoder_init(display->drm, &encoder->base, &intel_ddi_funcs, DRM_MODE_ENCODER_TMDS, "%s", diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h index 26e59110e7435..0f27bcfb69223 100644 --- a/drivers/gpu/drm/i915/display/intel_display_types.h +++ b/drivers/gpu/drm/i915/display/intel_display_types.h @@ -297,6 +297,7 @@ struct intel_encoder { /* VBT information for this encoder (may be NULL for older platforms) */ const struct intel_bios_encoder_data *devdata; + const struct intel_ddi_buf_trans *vspeo; }; struct intel_panel_bl_funcs { -- 2.45.2
