Pipe joiner is used only with FRL mode, so allow it only when the platform and the sink both support FRL.
Signed-off-by: Ankit Nautiyal <[email protected]> --- drivers/gpu/drm/i915/display/intel_hdmi.c | 8 ++++++++ drivers/gpu/drm/i915/display/intel_hdmi.h | 1 + drivers/gpu/drm/i915/display/intel_joiner.c | 4 ++++ 3 files changed, 13 insertions(+) diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c index 2c7c47a3c61d..2955ab5880fe 100644 --- a/drivers/gpu/drm/i915/display/intel_hdmi.c +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c @@ -4378,3 +4378,11 @@ void intel_hdmi_frl_get_config(struct intel_crtc_state *crtc_state) intel_hdmi_frl_dfm_read(crtc_state); } + +bool intel_hdmi_has_joiner(struct intel_hdmi *intel_hdmi) +{ + struct intel_display *display = to_intel_display(intel_hdmi); + struct intel_encoder *encoder = &hdmi_to_dig_port(intel_hdmi)->base; + + return HAS_HDMI_FRL(display) && intel_bios_hdmi_max_frl_rate(encoder->devdata); +} diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.h b/drivers/gpu/drm/i915/display/intel_hdmi.h index 71b12f557d75..b0b40e46b568 100644 --- a/drivers/gpu/drm/i915/display/intel_hdmi.h +++ b/drivers/gpu/drm/i915/display/intel_hdmi.h @@ -87,6 +87,7 @@ int intel_hdmi_sink_max_frl_rate(struct drm_connector *connector); int intel_hdmi_sink_dsc_max_frl_rate(struct drm_connector *connector); void intel_hdmi_frl_cfg_write(const struct intel_crtc_state *crtc_state); void intel_hdmi_frl_get_config(struct intel_crtc_state *crtc_state); +bool intel_hdmi_has_joiner(struct intel_hdmi *intel_hdmi); /* FRL rate per lane (Gbps) -> PHY PLL table units (10 kbps) */ #define FRL_GBPS_TO_10KBPS(rate) ((rate) * 100000) diff --git a/drivers/gpu/drm/i915/display/intel_joiner.c b/drivers/gpu/drm/i915/display/intel_joiner.c index 9dfe855f5668..9330d53e3cb4 100644 --- a/drivers/gpu/drm/i915/display/intel_joiner.c +++ b/drivers/gpu/drm/i915/display/intel_joiner.c @@ -6,6 +6,7 @@ #include "intel_display_core.h" #include "intel_display_types.h" #include "intel_dp.h" +#include "intel_hdmi.h" #include "intel_joiner.h" bool intel_joiner_needs_dsc(struct intel_display *display, @@ -33,6 +34,9 @@ bool intel_joiner_connector_can_join(struct intel_connector *connector) case DRM_MODE_CONNECTOR_DisplayPort: case DRM_MODE_CONNECTOR_eDP: return intel_dp_has_joiner(intel_attached_dp(connector)); + case DRM_MODE_CONNECTOR_HDMIA: + case DRM_MODE_CONNECTOR_HDMIB: + return intel_hdmi_has_joiner(intel_attached_hdmi(connector)); default: return false; } -- 2.50.1
