Commit e2272bfb authored by Jani Nikula's avatar Jani Nikula

drm/dp: switch drm_dp_downstream_*() helpers to struct drm_edid

Prefer struct drm_edid where possible. With limited users for the
drm_dp_downstream_*() helpers, this is fairly straightforward.
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231004162149.2802113-1-jani.nikula@intel.com
parent 9586e240
...@@ -746,8 +746,11 @@ int drm_dp_dpcd_read_phy_link_status(struct drm_dp_aux *aux, ...@@ -746,8 +746,11 @@ int drm_dp_dpcd_read_phy_link_status(struct drm_dp_aux *aux,
} }
EXPORT_SYMBOL(drm_dp_dpcd_read_phy_link_status); EXPORT_SYMBOL(drm_dp_dpcd_read_phy_link_status);
static bool is_edid_digital_input_dp(const struct edid *edid) static bool is_edid_digital_input_dp(const struct drm_edid *drm_edid)
{ {
/* FIXME: get rid of drm_edid_raw() */
const struct edid *edid = drm_edid_raw(drm_edid);
return edid && edid->revision >= 4 && return edid && edid->revision >= 4 &&
edid->input & DRM_EDID_INPUT_DIGITAL && edid->input & DRM_EDID_INPUT_DIGITAL &&
(edid->input & DRM_EDID_DIGITAL_TYPE_MASK) == DRM_EDID_DIGITAL_TYPE_DP; (edid->input & DRM_EDID_DIGITAL_TYPE_MASK) == DRM_EDID_DIGITAL_TYPE_DP;
...@@ -779,13 +782,13 @@ EXPORT_SYMBOL(drm_dp_downstream_is_type); ...@@ -779,13 +782,13 @@ EXPORT_SYMBOL(drm_dp_downstream_is_type);
* drm_dp_downstream_is_tmds() - is the downstream facing port TMDS? * drm_dp_downstream_is_tmds() - is the downstream facing port TMDS?
* @dpcd: DisplayPort configuration data * @dpcd: DisplayPort configuration data
* @port_cap: port capabilities * @port_cap: port capabilities
* @edid: EDID * @drm_edid: EDID
* *
* Returns: whether the downstream facing port is TMDS (HDMI/DVI). * Returns: whether the downstream facing port is TMDS (HDMI/DVI).
*/ */
bool drm_dp_downstream_is_tmds(const u8 dpcd[DP_RECEIVER_CAP_SIZE], bool drm_dp_downstream_is_tmds(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
const u8 port_cap[4], const u8 port_cap[4],
const struct edid *edid) const struct drm_edid *drm_edid)
{ {
if (dpcd[DP_DPCD_REV] < 0x11) { if (dpcd[DP_DPCD_REV] < 0x11) {
switch (dpcd[DP_DOWNSTREAMPORT_PRESENT] & DP_DWN_STRM_PORT_TYPE_MASK) { switch (dpcd[DP_DOWNSTREAMPORT_PRESENT] & DP_DWN_STRM_PORT_TYPE_MASK) {
...@@ -798,7 +801,7 @@ bool drm_dp_downstream_is_tmds(const u8 dpcd[DP_RECEIVER_CAP_SIZE], ...@@ -798,7 +801,7 @@ bool drm_dp_downstream_is_tmds(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
switch (port_cap[0] & DP_DS_PORT_TYPE_MASK) { switch (port_cap[0] & DP_DS_PORT_TYPE_MASK) {
case DP_DS_PORT_TYPE_DP_DUALMODE: case DP_DS_PORT_TYPE_DP_DUALMODE:
if (is_edid_digital_input_dp(edid)) if (is_edid_digital_input_dp(drm_edid))
return false; return false;
fallthrough; fallthrough;
case DP_DS_PORT_TYPE_DVI: case DP_DS_PORT_TYPE_DVI:
...@@ -1036,14 +1039,14 @@ EXPORT_SYMBOL(drm_dp_downstream_max_dotclock); ...@@ -1036,14 +1039,14 @@ EXPORT_SYMBOL(drm_dp_downstream_max_dotclock);
* drm_dp_downstream_max_tmds_clock() - extract downstream facing port max TMDS clock * drm_dp_downstream_max_tmds_clock() - extract downstream facing port max TMDS clock
* @dpcd: DisplayPort configuration data * @dpcd: DisplayPort configuration data
* @port_cap: port capabilities * @port_cap: port capabilities
* @edid: EDID * @drm_edid: EDID
* *
* Returns: HDMI/DVI downstream facing port max TMDS clock in kHz on success, * Returns: HDMI/DVI downstream facing port max TMDS clock in kHz on success,
* or 0 if max TMDS clock not defined * or 0 if max TMDS clock not defined
*/ */
int drm_dp_downstream_max_tmds_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE], int drm_dp_downstream_max_tmds_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
const u8 port_cap[4], const u8 port_cap[4],
const struct edid *edid) const struct drm_edid *drm_edid)
{ {
if (!drm_dp_is_branch(dpcd)) if (!drm_dp_is_branch(dpcd))
return 0; return 0;
...@@ -1059,7 +1062,7 @@ int drm_dp_downstream_max_tmds_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE], ...@@ -1059,7 +1062,7 @@ int drm_dp_downstream_max_tmds_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
switch (port_cap[0] & DP_DS_PORT_TYPE_MASK) { switch (port_cap[0] & DP_DS_PORT_TYPE_MASK) {
case DP_DS_PORT_TYPE_DP_DUALMODE: case DP_DS_PORT_TYPE_DP_DUALMODE:
if (is_edid_digital_input_dp(edid)) if (is_edid_digital_input_dp(drm_edid))
return 0; return 0;
/* /*
* It's left up to the driver to check the * It's left up to the driver to check the
...@@ -1101,14 +1104,14 @@ EXPORT_SYMBOL(drm_dp_downstream_max_tmds_clock); ...@@ -1101,14 +1104,14 @@ EXPORT_SYMBOL(drm_dp_downstream_max_tmds_clock);
* drm_dp_downstream_min_tmds_clock() - extract downstream facing port min TMDS clock * drm_dp_downstream_min_tmds_clock() - extract downstream facing port min TMDS clock
* @dpcd: DisplayPort configuration data * @dpcd: DisplayPort configuration data
* @port_cap: port capabilities * @port_cap: port capabilities
* @edid: EDID * @drm_edid: EDID
* *
* Returns: HDMI/DVI downstream facing port min TMDS clock in kHz on success, * Returns: HDMI/DVI downstream facing port min TMDS clock in kHz on success,
* or 0 if max TMDS clock not defined * or 0 if max TMDS clock not defined
*/ */
int drm_dp_downstream_min_tmds_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE], int drm_dp_downstream_min_tmds_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
const u8 port_cap[4], const u8 port_cap[4],
const struct edid *edid) const struct drm_edid *drm_edid)
{ {
if (!drm_dp_is_branch(dpcd)) if (!drm_dp_is_branch(dpcd))
return 0; return 0;
...@@ -1124,7 +1127,7 @@ int drm_dp_downstream_min_tmds_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE], ...@@ -1124,7 +1127,7 @@ int drm_dp_downstream_min_tmds_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
switch (port_cap[0] & DP_DS_PORT_TYPE_MASK) { switch (port_cap[0] & DP_DS_PORT_TYPE_MASK) {
case DP_DS_PORT_TYPE_DP_DUALMODE: case DP_DS_PORT_TYPE_DP_DUALMODE:
if (is_edid_digital_input_dp(edid)) if (is_edid_digital_input_dp(drm_edid))
return 0; return 0;
fallthrough; fallthrough;
case DP_DS_PORT_TYPE_DVI: case DP_DS_PORT_TYPE_DVI:
...@@ -1145,13 +1148,13 @@ EXPORT_SYMBOL(drm_dp_downstream_min_tmds_clock); ...@@ -1145,13 +1148,13 @@ EXPORT_SYMBOL(drm_dp_downstream_min_tmds_clock);
* bits per component * bits per component
* @dpcd: DisplayPort configuration data * @dpcd: DisplayPort configuration data
* @port_cap: downstream facing port capabilities * @port_cap: downstream facing port capabilities
* @edid: EDID * @drm_edid: EDID
* *
* Returns: Max bpc on success or 0 if max bpc not defined * Returns: Max bpc on success or 0 if max bpc not defined
*/ */
int drm_dp_downstream_max_bpc(const u8 dpcd[DP_RECEIVER_CAP_SIZE], int drm_dp_downstream_max_bpc(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
const u8 port_cap[4], const u8 port_cap[4],
const struct edid *edid) const struct drm_edid *drm_edid)
{ {
if (!drm_dp_is_branch(dpcd)) if (!drm_dp_is_branch(dpcd))
return 0; return 0;
...@@ -1169,7 +1172,7 @@ int drm_dp_downstream_max_bpc(const u8 dpcd[DP_RECEIVER_CAP_SIZE], ...@@ -1169,7 +1172,7 @@ int drm_dp_downstream_max_bpc(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
case DP_DS_PORT_TYPE_DP: case DP_DS_PORT_TYPE_DP:
return 0; return 0;
case DP_DS_PORT_TYPE_DP_DUALMODE: case DP_DS_PORT_TYPE_DP_DUALMODE:
if (is_edid_digital_input_dp(edid)) if (is_edid_digital_input_dp(drm_edid))
return 0; return 0;
fallthrough; fallthrough;
case DP_DS_PORT_TYPE_HDMI: case DP_DS_PORT_TYPE_HDMI:
...@@ -1362,14 +1365,14 @@ EXPORT_SYMBOL(drm_dp_downstream_id); ...@@ -1362,14 +1365,14 @@ EXPORT_SYMBOL(drm_dp_downstream_id);
* @m: pointer for debugfs file * @m: pointer for debugfs file
* @dpcd: DisplayPort configuration data * @dpcd: DisplayPort configuration data
* @port_cap: port capabilities * @port_cap: port capabilities
* @edid: EDID * @drm_edid: EDID
* @aux: DisplayPort AUX channel * @aux: DisplayPort AUX channel
* *
*/ */
void drm_dp_downstream_debug(struct seq_file *m, void drm_dp_downstream_debug(struct seq_file *m,
const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 dpcd[DP_RECEIVER_CAP_SIZE],
const u8 port_cap[4], const u8 port_cap[4],
const struct edid *edid, const struct drm_edid *drm_edid,
struct drm_dp_aux *aux) struct drm_dp_aux *aux)
{ {
bool detailed_cap_info = dpcd[DP_DOWNSTREAMPORT_PRESENT] & bool detailed_cap_info = dpcd[DP_DOWNSTREAMPORT_PRESENT] &
...@@ -1432,15 +1435,15 @@ void drm_dp_downstream_debug(struct seq_file *m, ...@@ -1432,15 +1435,15 @@ void drm_dp_downstream_debug(struct seq_file *m,
if (clk > 0) if (clk > 0)
seq_printf(m, "\t\tMax dot clock: %d kHz\n", clk); seq_printf(m, "\t\tMax dot clock: %d kHz\n", clk);
clk = drm_dp_downstream_max_tmds_clock(dpcd, port_cap, edid); clk = drm_dp_downstream_max_tmds_clock(dpcd, port_cap, drm_edid);
if (clk > 0) if (clk > 0)
seq_printf(m, "\t\tMax TMDS clock: %d kHz\n", clk); seq_printf(m, "\t\tMax TMDS clock: %d kHz\n", clk);
clk = drm_dp_downstream_min_tmds_clock(dpcd, port_cap, edid); clk = drm_dp_downstream_min_tmds_clock(dpcd, port_cap, drm_edid);
if (clk > 0) if (clk > 0)
seq_printf(m, "\t\tMin TMDS clock: %d kHz\n", clk); seq_printf(m, "\t\tMin TMDS clock: %d kHz\n", clk);
bpc = drm_dp_downstream_max_bpc(dpcd, port_cap, edid); bpc = drm_dp_downstream_max_bpc(dpcd, port_cap, drm_edid);
if (bpc > 0) if (bpc > 0)
seq_printf(m, "\t\tMax bpc: %d\n", bpc); seq_printf(m, "\t\tMax bpc: %d\n", bpc);
......
...@@ -233,14 +233,13 @@ static void intel_dp_info(struct seq_file *m, struct intel_connector *connector) ...@@ -233,14 +233,13 @@ static void intel_dp_info(struct seq_file *m, struct intel_connector *connector)
{ {
struct intel_encoder *intel_encoder = intel_attached_encoder(connector); struct intel_encoder *intel_encoder = intel_attached_encoder(connector);
struct intel_dp *intel_dp = enc_to_intel_dp(intel_encoder); struct intel_dp *intel_dp = enc_to_intel_dp(intel_encoder);
const struct edid *edid = drm_edid_raw(connector->detect_edid);
seq_printf(m, "\tDPCD rev: %x\n", intel_dp->dpcd[DP_DPCD_REV]); seq_printf(m, "\tDPCD rev: %x\n", intel_dp->dpcd[DP_DPCD_REV]);
seq_printf(m, "\taudio support: %s\n", seq_printf(m, "\taudio support: %s\n",
str_yes_no(connector->base.display_info.has_audio)); str_yes_no(connector->base.display_info.has_audio));
drm_dp_downstream_debug(m, intel_dp->dpcd, intel_dp->downstream_ports, drm_dp_downstream_debug(m, intel_dp->dpcd, intel_dp->downstream_ports,
edid, &intel_dp->aux); connector->detect_edid, &intel_dp->aux);
} }
static void intel_dp_mst_info(struct seq_file *m, static void intel_dp_mst_info(struct seq_file *m,
......
...@@ -4708,14 +4708,10 @@ intel_dp_update_dfp(struct intel_dp *intel_dp, ...@@ -4708,14 +4708,10 @@ intel_dp_update_dfp(struct intel_dp *intel_dp,
{ {
struct drm_i915_private *i915 = dp_to_i915(intel_dp); struct drm_i915_private *i915 = dp_to_i915(intel_dp);
struct intel_connector *connector = intel_dp->attached_connector; struct intel_connector *connector = intel_dp->attached_connector;
const struct edid *edid;
/* FIXME: Get rid of drm_edid_raw() */
edid = drm_edid_raw(drm_edid);
intel_dp->dfp.max_bpc = intel_dp->dfp.max_bpc =
drm_dp_downstream_max_bpc(intel_dp->dpcd, drm_dp_downstream_max_bpc(intel_dp->dpcd,
intel_dp->downstream_ports, edid); intel_dp->downstream_ports, drm_edid);
intel_dp->dfp.max_dotclock = intel_dp->dfp.max_dotclock =
drm_dp_downstream_max_dotclock(intel_dp->dpcd, drm_dp_downstream_max_dotclock(intel_dp->dpcd,
...@@ -4724,11 +4720,11 @@ intel_dp_update_dfp(struct intel_dp *intel_dp, ...@@ -4724,11 +4720,11 @@ intel_dp_update_dfp(struct intel_dp *intel_dp,
intel_dp->dfp.min_tmds_clock = intel_dp->dfp.min_tmds_clock =
drm_dp_downstream_min_tmds_clock(intel_dp->dpcd, drm_dp_downstream_min_tmds_clock(intel_dp->dpcd,
intel_dp->downstream_ports, intel_dp->downstream_ports,
edid); drm_edid);
intel_dp->dfp.max_tmds_clock = intel_dp->dfp.max_tmds_clock =
drm_dp_downstream_max_tmds_clock(intel_dp->dpcd, drm_dp_downstream_max_tmds_clock(intel_dp->dpcd,
intel_dp->downstream_ports, intel_dp->downstream_ports,
edid); drm_edid);
intel_dp->dfp.pcon_max_frl_bw = intel_dp->dfp.pcon_max_frl_bw =
drm_dp_get_pcon_max_frl_bw(intel_dp->dpcd, drm_dp_get_pcon_max_frl_bw(intel_dp->dpcd,
......
...@@ -272,8 +272,8 @@ struct drm_dp_aux_msg { ...@@ -272,8 +272,8 @@ struct drm_dp_aux_msg {
}; };
struct cec_adapter; struct cec_adapter;
struct edid;
struct drm_connector; struct drm_connector;
struct drm_edid;
/** /**
* struct drm_dp_aux_cec - DisplayPort CEC-Tunneling-over-AUX * struct drm_dp_aux_cec - DisplayPort CEC-Tunneling-over-AUX
...@@ -507,18 +507,18 @@ bool drm_dp_downstream_is_type(const u8 dpcd[DP_RECEIVER_CAP_SIZE], ...@@ -507,18 +507,18 @@ bool drm_dp_downstream_is_type(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
const u8 port_cap[4], u8 type); const u8 port_cap[4], u8 type);
bool drm_dp_downstream_is_tmds(const u8 dpcd[DP_RECEIVER_CAP_SIZE], bool drm_dp_downstream_is_tmds(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
const u8 port_cap[4], const u8 port_cap[4],
const struct edid *edid); const struct drm_edid *drm_edid);
int drm_dp_downstream_max_dotclock(const u8 dpcd[DP_RECEIVER_CAP_SIZE], int drm_dp_downstream_max_dotclock(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
const u8 port_cap[4]); const u8 port_cap[4]);
int drm_dp_downstream_max_tmds_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE], int drm_dp_downstream_max_tmds_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
const u8 port_cap[4], const u8 port_cap[4],
const struct edid *edid); const struct drm_edid *drm_edid);
int drm_dp_downstream_min_tmds_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE], int drm_dp_downstream_min_tmds_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
const u8 port_cap[4], const u8 port_cap[4],
const struct edid *edid); const struct drm_edid *drm_edid);
int drm_dp_downstream_max_bpc(const u8 dpcd[DP_RECEIVER_CAP_SIZE], int drm_dp_downstream_max_bpc(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
const u8 port_cap[4], const u8 port_cap[4],
const struct edid *edid); const struct drm_edid *drm_edid);
bool drm_dp_downstream_420_passthrough(const u8 dpcd[DP_RECEIVER_CAP_SIZE], bool drm_dp_downstream_420_passthrough(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
const u8 port_cap[4]); const u8 port_cap[4]);
bool drm_dp_downstream_444_to_420_conversion(const u8 dpcd[DP_RECEIVER_CAP_SIZE], bool drm_dp_downstream_444_to_420_conversion(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
...@@ -530,7 +530,7 @@ int drm_dp_downstream_id(struct drm_dp_aux *aux, char id[6]); ...@@ -530,7 +530,7 @@ int drm_dp_downstream_id(struct drm_dp_aux *aux, char id[6]);
void drm_dp_downstream_debug(struct seq_file *m, void drm_dp_downstream_debug(struct seq_file *m,
const u8 dpcd[DP_RECEIVER_CAP_SIZE], const u8 dpcd[DP_RECEIVER_CAP_SIZE],
const u8 port_cap[4], const u8 port_cap[4],
const struct edid *edid, const struct drm_edid *drm_edid,
struct drm_dp_aux *aux); struct drm_dp_aux *aux);
enum drm_mode_subconnector enum drm_mode_subconnector
drm_dp_subconnector_type(const u8 dpcd[DP_RECEIVER_CAP_SIZE], drm_dp_subconnector_type(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment