mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
drm/i915/display: Extend i915_display_info with Type-C port details
Expose key Type-C port data in i915_display_info to make it easier to understand the port configuration and active mode, especially whether the link is in DP-Alt or TBT-Alt, without having to scan kernel logs. Tested in DP-Alt, TBT-Alt, SST, and MST. Expected output: [CONNECTOR:290:DP-2]: status: connected TC Port: E/TC#2 mode: tbt-alt pin assignment: - max lanes: 4 physical dimensions: 600x340mm ... [CONNECTOR:263:DP-5]: status: connected TC Port: G/TC#4 mode: dp-alt pin assignment: C max lanes: 4 physical dimensions: 610x350mm v2: Use drm_printer (Ville) Lock/Unlock around the printf (Imre) v3: Forward Declaration drm_printer struct (Jani) v4: Handle MST connector with no active encoder (Imre) Add a delimiter between fields and ":" after the port name (Imre) v5: Init dig_port and use it in intel_encorder_is_tc and tc_info (Imre) Move tc->port_name to a newline (Imre) v6: Use intel_tc_port_lock/Unlock (Imre) Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Imre Deak <imre.deak@intel.com> Cc: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Khaled Almahallawy <khaled.almahallawy@intel.com> Reviewed-by: Imre Deak <imre.deak@intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> Link: https://patch.msgid.link/20251028190753.3089937-1-khaled.almahallawy@intel.com
This commit is contained in:
committed by
Imre Deak
parent
44fde50912
commit
c4227e1609
@@ -47,6 +47,7 @@
|
|||||||
#include "intel_psr_regs.h"
|
#include "intel_psr_regs.h"
|
||||||
#include "intel_vdsc.h"
|
#include "intel_vdsc.h"
|
||||||
#include "intel_wm.h"
|
#include "intel_wm.h"
|
||||||
|
#include "intel_tc.h"
|
||||||
|
|
||||||
static struct intel_display *node_to_intel_display(struct drm_info_node *node)
|
static struct intel_display *node_to_intel_display(struct drm_info_node *node)
|
||||||
{
|
{
|
||||||
@@ -246,6 +247,8 @@ static void intel_connector_info(struct seq_file *m,
|
|||||||
{
|
{
|
||||||
struct intel_connector *intel_connector = to_intel_connector(connector);
|
struct intel_connector *intel_connector = to_intel_connector(connector);
|
||||||
const struct drm_display_mode *mode;
|
const struct drm_display_mode *mode;
|
||||||
|
struct drm_printer p = drm_seq_file_printer(m);
|
||||||
|
struct intel_digital_port *dig_port = NULL;
|
||||||
|
|
||||||
seq_printf(m, "[CONNECTOR:%d:%s]: status: %s\n",
|
seq_printf(m, "[CONNECTOR:%d:%s]: status: %s\n",
|
||||||
connector->base.id, connector->name,
|
connector->base.id, connector->name,
|
||||||
@@ -268,14 +271,19 @@ static void intel_connector_info(struct seq_file *m,
|
|||||||
intel_dp_mst_info(m, intel_connector);
|
intel_dp_mst_info(m, intel_connector);
|
||||||
else
|
else
|
||||||
intel_dp_info(m, intel_connector);
|
intel_dp_info(m, intel_connector);
|
||||||
|
dig_port = dp_to_dig_port(intel_attached_dp(intel_connector));
|
||||||
break;
|
break;
|
||||||
case DRM_MODE_CONNECTOR_HDMIA:
|
case DRM_MODE_CONNECTOR_HDMIA:
|
||||||
intel_hdmi_info(m, intel_connector);
|
intel_hdmi_info(m, intel_connector);
|
||||||
|
dig_port = hdmi_to_dig_port(intel_attached_hdmi(intel_connector));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dig_port != NULL && intel_encoder_is_tc(&dig_port->base))
|
||||||
|
intel_tc_info(&p, dig_port);
|
||||||
|
|
||||||
intel_hdcp_info(m, intel_connector);
|
intel_hdcp_info(m, intel_connector);
|
||||||
|
|
||||||
seq_printf(m, "\tmax bpc: %u\n", connector->display_info.bpc);
|
seq_printf(m, "\tmax bpc: %u\n", connector->display_info.bpc);
|
||||||
|
|||||||
@@ -1703,6 +1703,19 @@ void intel_tc_port_sanitize_mode(struct intel_digital_port *dig_port,
|
|||||||
mutex_unlock(&tc->lock);
|
mutex_unlock(&tc->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void intel_tc_info(struct drm_printer *p, struct intel_digital_port *dig_port)
|
||||||
|
{
|
||||||
|
struct intel_tc_port *tc = to_tc_port(dig_port);
|
||||||
|
|
||||||
|
intel_tc_port_lock(dig_port);
|
||||||
|
drm_printf(p, "\tTC Port %s: mode: %s, pin assignment: %c, max lanes: %d\n",
|
||||||
|
tc->port_name,
|
||||||
|
tc_port_mode_name(tc->mode),
|
||||||
|
pin_assignment_name(tc->pin_assignment),
|
||||||
|
tc->max_lane_count);
|
||||||
|
intel_tc_port_unlock(dig_port);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The type-C ports are different because even when they are connected, they may
|
* The type-C ports are different because even when they are connected, they may
|
||||||
* not be available/usable by the graphics driver: see the comment on
|
* not be available/usable by the graphics driver: see the comment on
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
|
struct drm_printer;
|
||||||
struct intel_crtc_state;
|
struct intel_crtc_state;
|
||||||
struct intel_digital_port;
|
struct intel_digital_port;
|
||||||
struct intel_encoder;
|
struct intel_encoder;
|
||||||
@@ -113,4 +114,6 @@ void intel_tc_port_cleanup(struct intel_digital_port *dig_port);
|
|||||||
|
|
||||||
bool intel_tc_cold_requires_aux_pw(struct intel_digital_port *dig_port);
|
bool intel_tc_cold_requires_aux_pw(struct intel_digital_port *dig_port);
|
||||||
|
|
||||||
|
void intel_tc_info(struct drm_printer *p, struct intel_digital_port *dig_port);
|
||||||
|
|
||||||
#endif /* __INTEL_TC_H__ */
|
#endif /* __INTEL_TC_H__ */
|
||||||
|
|||||||
Reference in New Issue
Block a user