diff options
Diffstat (limited to 'drivers/gpu/drm/drm_dp_aux_dev.c')
| -rw-r--r-- | drivers/gpu/drm/drm_dp_aux_dev.c | 18 | 
1 files changed, 14 insertions, 4 deletions
diff --git a/drivers/gpu/drm/drm_dp_aux_dev.c b/drivers/gpu/drm/drm_dp_aux_dev.c index 5be28e3295f3..0cfb386754c3 100644 --- a/drivers/gpu/drm/drm_dp_aux_dev.c +++ b/drivers/gpu/drm/drm_dp_aux_dev.c @@ -37,6 +37,7 @@  #include <drm/drm_crtc.h>  #include <drm/drm_dp_helper.h> +#include <drm/drm_dp_mst_helper.h>  #include <drm/drm_print.h>  #include "drm_crtc_helper_internal.h" @@ -82,8 +83,7 @@ static struct drm_dp_aux_dev *alloc_drm_dp_aux_dev(struct drm_dp_aux *aux)  	kref_init(&aux_dev->refcount);  	mutex_lock(&aux_idr_mutex); -	index = idr_alloc_cyclic(&aux_idr, aux_dev, 0, DRM_AUX_MINORS, -				 GFP_KERNEL); +	index = idr_alloc(&aux_idr, aux_dev, 0, DRM_AUX_MINORS, GFP_KERNEL);  	mutex_unlock(&aux_idr_mutex);  	if (index < 0) {  		kfree(aux_dev); @@ -163,7 +163,12 @@ static ssize_t auxdev_read_iter(struct kiocb *iocb, struct iov_iter *to)  			break;  		} -		res = drm_dp_dpcd_read(aux_dev->aux, pos, buf, todo); +		if (aux_dev->aux->is_remote) +			res = drm_dp_mst_dpcd_read(aux_dev->aux, pos, buf, +						   todo); +		else +			res = drm_dp_dpcd_read(aux_dev->aux, pos, buf, todo); +  		if (res <= 0)  			break; @@ -210,7 +215,12 @@ static ssize_t auxdev_write_iter(struct kiocb *iocb, struct iov_iter *from)  			break;  		} -		res = drm_dp_dpcd_write(aux_dev->aux, pos, buf, todo); +		if (aux_dev->aux->is_remote) +			res = drm_dp_mst_dpcd_write(aux_dev->aux, pos, buf, +						    todo); +		else +			res = drm_dp_dpcd_write(aux_dev->aux, pos, buf, todo); +  		if (res <= 0)  			break;  |