mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-01 10:13:58 +08:00
drm/i915/dp: Extract drm_dp_read_sink_count()
And of course, we'll also need to read the sink count from other drivers as well if we're checking whether or not it's supported. So, let's extract the code for this into another helper. v2: * Fix drm_dp_dpcd_readb() ret check * Add back comment and move back sink_count assignment in intel_dp_get_dpcd() v5: * Change name from drm_dp_get_sink_count() to drm_dp_read_sink_count() * Also, add "See also:" section to kdocs Signed-off-by: Lyude Paul <lyude@redhat.com> Reviewed-by: Sean Paul <sean@poorly.run> Link: https://patchwork.freedesktop.org/patch/msgid/20200826182456.322681-17-lyude@redhat.com
This commit is contained in:
parent
693c3ec597
commit
4778ff0528
@ -733,6 +733,8 @@ EXPORT_SYMBOL(drm_dp_set_subconnector_property);
|
|||||||
* @dpcd: A cached copy of the connector's DPCD RX capabilities
|
* @dpcd: A cached copy of the connector's DPCD RX capabilities
|
||||||
* @desc: A cached copy of the connector's DP descriptor
|
* @desc: A cached copy of the connector's DP descriptor
|
||||||
*
|
*
|
||||||
|
* See also: drm_dp_read_sink_count()
|
||||||
|
*
|
||||||
* Returns: %True if the (e)DP connector has a valid sink count that should
|
* Returns: %True if the (e)DP connector has a valid sink count that should
|
||||||
* be probed, %false otherwise.
|
* be probed, %false otherwise.
|
||||||
*/
|
*/
|
||||||
@ -748,6 +750,30 @@ bool drm_dp_read_sink_count_cap(struct drm_connector *connector,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_dp_read_sink_count_cap);
|
EXPORT_SYMBOL(drm_dp_read_sink_count_cap);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* drm_dp_read_sink_count() - Retrieve the sink count for a given sink
|
||||||
|
* @aux: The DP AUX channel to use
|
||||||
|
*
|
||||||
|
* See also: drm_dp_read_sink_count_cap()
|
||||||
|
*
|
||||||
|
* Returns: The current sink count reported by @aux, or a negative error code
|
||||||
|
* otherwise.
|
||||||
|
*/
|
||||||
|
int drm_dp_read_sink_count(struct drm_dp_aux *aux)
|
||||||
|
{
|
||||||
|
u8 count;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = drm_dp_dpcd_readb(aux, DP_SINK_COUNT, &count);
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
if (ret != 1)
|
||||||
|
return -EIO;
|
||||||
|
|
||||||
|
return DP_GET_SINK_COUNT(count);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(drm_dp_read_sink_count);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* I2C-over-AUX implementation
|
* I2C-over-AUX implementation
|
||||||
*/
|
*/
|
||||||
|
@ -4648,6 +4648,8 @@ intel_dp_has_sink_count(struct intel_dp *intel_dp)
|
|||||||
static bool
|
static bool
|
||||||
intel_dp_get_dpcd(struct intel_dp *intel_dp)
|
intel_dp_get_dpcd(struct intel_dp *intel_dp)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (!intel_dp_read_dpcd(intel_dp))
|
if (!intel_dp_read_dpcd(intel_dp))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -4664,11 +4666,8 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (intel_dp_has_sink_count(intel_dp)) {
|
if (intel_dp_has_sink_count(intel_dp)) {
|
||||||
u8 count;
|
ret = drm_dp_read_sink_count(&intel_dp->aux);
|
||||||
ssize_t r;
|
if (ret < 0)
|
||||||
|
|
||||||
r = drm_dp_dpcd_readb(&intel_dp->aux, DP_SINK_COUNT, &count);
|
|
||||||
if (r < 1)
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -4676,7 +4675,7 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp)
|
|||||||
* a member variable in intel_dp will track any changes
|
* a member variable in intel_dp will track any changes
|
||||||
* between short pulse interrupts.
|
* between short pulse interrupts.
|
||||||
*/
|
*/
|
||||||
intel_dp->sink_count = DP_GET_SINK_COUNT(count);
|
intel_dp->sink_count = ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SINK_COUNT == 0 and DOWNSTREAM_PORT_PRESENT == 1 implies that
|
* SINK_COUNT == 0 and DOWNSTREAM_PORT_PRESENT == 1 implies that
|
||||||
|
@ -1635,6 +1635,7 @@ struct drm_dp_desc;
|
|||||||
bool drm_dp_read_sink_count_cap(struct drm_connector *connector,
|
bool drm_dp_read_sink_count_cap(struct drm_connector *connector,
|
||||||
const u8 dpcd[DP_RECEIVER_CAP_SIZE],
|
const u8 dpcd[DP_RECEIVER_CAP_SIZE],
|
||||||
const struct drm_dp_desc *desc);
|
const struct drm_dp_desc *desc);
|
||||||
|
int drm_dp_read_sink_count(struct drm_dp_aux *aux);
|
||||||
|
|
||||||
void drm_dp_remote_aux_init(struct drm_dp_aux *aux);
|
void drm_dp_remote_aux_init(struct drm_dp_aux *aux);
|
||||||
void drm_dp_aux_init(struct drm_dp_aux *aux);
|
void drm_dp_aux_init(struct drm_dp_aux *aux);
|
||||||
|
Loading…
Reference in New Issue
Block a user