mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-16 11:34:38 -04:00
drm/i915/tc: Fix target TC mode for a disconnected legacy port
Atm, the target TC mode - which the PHY should be switched to at any point it's used - is TBT in case there is no sink connected. However legacy ports are only used in the legacy mode regardless of the sink connected state. Fix the mode returned by intel_tc_port_get_target_mode() accordingly. Despite of the above issue, the PHY got disconnected as expected in response to a sink disconnect event, causing only a redundant PHY disconnect->reconnect sequence whenever the port was used. Signed-off-by: Imre Deak <imre.deak@intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230316131724.359612-8-imre.deak@intel.com
This commit is contained in:
@@ -635,15 +635,23 @@ intel_tc_port_get_current_mode(struct intel_digital_port *dig_port)
|
||||
return mode;
|
||||
}
|
||||
|
||||
static enum tc_port_mode default_tc_mode(struct intel_digital_port *dig_port)
|
||||
{
|
||||
if (dig_port->tc_legacy_port)
|
||||
return TC_PORT_LEGACY;
|
||||
|
||||
return TC_PORT_TBT_ALT;
|
||||
}
|
||||
|
||||
static enum tc_port_mode
|
||||
hpd_mask_to_target_mode(u32 live_status_mask)
|
||||
hpd_mask_to_target_mode(struct intel_digital_port *dig_port, u32 live_status_mask)
|
||||
{
|
||||
enum tc_port_mode mode = hpd_mask_to_tc_mode(live_status_mask);
|
||||
|
||||
if (mode != TC_PORT_DISCONNECTED)
|
||||
return mode;
|
||||
|
||||
return TC_PORT_TBT_ALT;
|
||||
return default_tc_mode(dig_port);
|
||||
}
|
||||
|
||||
static enum tc_port_mode
|
||||
@@ -651,7 +659,7 @@ intel_tc_port_get_target_mode(struct intel_digital_port *dig_port)
|
||||
{
|
||||
u32 live_status_mask = tc_port_live_status_mask(dig_port);
|
||||
|
||||
return hpd_mask_to_target_mode(live_status_mask);
|
||||
return hpd_mask_to_target_mode(dig_port, live_status_mask);
|
||||
}
|
||||
|
||||
static void intel_tc_port_reset_mode(struct intel_digital_port *dig_port,
|
||||
|
||||
Reference in New Issue
Block a user