Choosing correct table for Vswing / Pre-emphasis Override is platform
specific. It also requires different checks that are already used for
choosing predefined tables.

Add new get_buf_trans_override() vfunc into intel_encoder returning
deparsed table from VBT#57. In next patches, set it inside already
present if-ladder from intel_ddi_buf_trans_init() instead of duplicating
it.

Note that get_buf_trans() cannot be overwritten since there are cases
when we need to rollback although VS/PE-O was requested, eg. DP is not
connected or feature is not yet implemented for the platform. Assume
that vfunc returns NULL on rollback and return predefined tables.

Suggested-by: Jani Nikula <[email protected]>
Signed-off-by: Michał Grzelak <[email protected]>
---
 drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c | 8 ++++++++
 drivers/gpu/drm/i915/display/intel_display_types.h | 3 +++
 2 files changed, 11 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c 
b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
index 4cd1e4d76c7a..f31283a0331b 100644
--- a/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
+++ b/drivers/gpu/drm/i915/display/intel_ddi_buf_trans.c
@@ -1857,5 +1857,13 @@ const struct intel_ddi_buf_trans 
*intel_ddi_buf_trans_get(struct intel_encoder *
                                                          const struct 
intel_crtc_state *crtc_state,
                                                          int *n_entries)
 {
+       if (encoder->get_buf_trans_override) {
+               const struct intel_ddi_buf_trans *override;
+
+               override = encoder->get_buf_trans_override(encoder, crtc_state, 
n_entries);
+               if (override)
+                       return intel_get_buf_trans(override, n_entries);
+       }
+
        return encoder->get_buf_trans(encoder, crtc_state, n_entries);
 }
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
b/drivers/gpu/drm/i915/display/intel_display_types.h
index c048da7d6fea..881226a1eda3 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -289,6 +289,9 @@ struct intel_encoder {
         */
        enum icl_port_dpll_id (*port_pll_type)(struct intel_encoder *encoder,
                                               const struct intel_crtc_state 
*crtc_state);
+       const struct intel_ddi_buf_trans *(*get_buf_trans_override)(struct 
intel_encoder *encoder,
+                                                                   const 
struct intel_crtc_state *crtc_state,
+                                                                   int 
*n_entries);
        const struct intel_ddi_buf_trans *(*get_buf_trans)(struct intel_encoder 
*encoder,
                                                           const struct 
intel_crtc_state *crtc_state,
                                                           int *n_entries);
-- 
2.45.2

Reply via email to