drm: Helper to read max bits per component
Helper routine to read out maximum supported bits per component for DisplayPort legay converters. v2: Return early if detailed port cap info is not available. Replace if-else ladder with switch-case (Ville) Reviewed-by: Jim Bride <jim.bride@linux.intel.com> Signed-off-by: Mika Kahola <mika.kahola@intel.com> Acked-by: Dave Airlie <airlied@gmail.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1473419458-17080-5-git-send-email-mika.kahola@intel.com
This commit is contained in:
@@ -471,6 +471,48 @@ int drm_dp_downstream_max_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_dp_downstream_max_clock);
|
EXPORT_SYMBOL(drm_dp_downstream_max_clock);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* drm_dp_downstream_max_bpc() - extract branch device max
|
||||||
|
* bits per component
|
||||||
|
* @dpcd: DisplayPort configuration data
|
||||||
|
* @port_cap: port capabilities
|
||||||
|
*
|
||||||
|
* 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],
|
||||||
|
const u8 port_cap[4])
|
||||||
|
{
|
||||||
|
int type = port_cap[0] & DP_DS_PORT_TYPE_MASK;
|
||||||
|
bool detailed_cap_info = dpcd[DP_DOWNSTREAMPORT_PRESENT] &
|
||||||
|
DP_DETAILED_CAP_INFO_AVAILABLE;
|
||||||
|
int bpc;
|
||||||
|
|
||||||
|
if (!detailed_cap_info)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case DP_DS_PORT_TYPE_VGA:
|
||||||
|
case DP_DS_PORT_TYPE_DVI:
|
||||||
|
case DP_DS_PORT_TYPE_HDMI:
|
||||||
|
case DP_DS_PORT_TYPE_DP_DUALMODE:
|
||||||
|
bpc = port_cap[2] & DP_DS_MAX_BPC_MASK;
|
||||||
|
|
||||||
|
switch (bpc) {
|
||||||
|
case DP_DS_8BPC:
|
||||||
|
return 8;
|
||||||
|
case DP_DS_10BPC:
|
||||||
|
return 10;
|
||||||
|
case DP_DS_12BPC:
|
||||||
|
return 12;
|
||||||
|
case DP_DS_16BPC:
|
||||||
|
return 16;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(drm_dp_downstream_max_bpc);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* I2C-over-AUX implementation
|
* I2C-over-AUX implementation
|
||||||
*/
|
*/
|
||||||
|
@@ -817,6 +817,8 @@ int drm_dp_link_power_down(struct drm_dp_aux *aux, struct drm_dp_link *link);
|
|||||||
int drm_dp_link_configure(struct drm_dp_aux *aux, struct drm_dp_link *link);
|
int drm_dp_link_configure(struct drm_dp_aux *aux, struct drm_dp_link *link);
|
||||||
int drm_dp_downstream_max_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
|
int drm_dp_downstream_max_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
|
||||||
const u8 port_cap[4]);
|
const u8 port_cap[4]);
|
||||||
|
int drm_dp_downstream_max_bpc(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
|
||||||
|
const u8 port_cap[4]);
|
||||||
|
|
||||||
void drm_dp_aux_init(struct drm_dp_aux *aux);
|
void drm_dp_aux_init(struct drm_dp_aux *aux);
|
||||||
int drm_dp_aux_register(struct drm_dp_aux *aux);
|
int drm_dp_aux_register(struct drm_dp_aux *aux);
|
||||||
|
Reference in New Issue
Block a user