Hello Sebastian,

At 2026-08-07 01:02:13, "Sebastian Reichel" <[email protected]> 
wrote:
>The transfer functions returns the amount of bytes read for
>DP_AUX_I2C_READ. By returning -EBUSY for short reads, the caller has
>less information available what is going wrong and possibly simply
>resends the read request. On sinks not supporting long reads, this will
>simply run into the same issue again.
>
>Instead it makes more sense to return the data from the short read with
>the length information, which allows drm_dp_i2c_do_msg() to read data in
>smaller chunks and succeed in the end.
>
>Due to lack of a sink, which only supports short reads, this change is
>effectively untested.
>
>Fixes: 86eecc3a9c2e ("drm/bridge: synopsys: Add DW DPTX Controller support 
>library")
>Reported-by: Sashiko <[email protected]>
>Signed-off-by: Sebastian Reichel <[email protected]>

   Reviewed-by: Andy Yan <[email protected]>

>---
> drivers/gpu/drm/bridge/synopsys/dw-dp.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
>diff --git a/drivers/gpu/drm/bridge/synopsys/dw-dp.c 
>b/drivers/gpu/drm/bridge/synopsys/dw-dp.c
>index 2573ea2bb574..8ceb139f1a72 100644
>--- a/drivers/gpu/drm/bridge/synopsys/dw-dp.c
>+++ b/drivers/gpu/drm/bridge/synopsys/dw-dp.c
>@@ -1513,7 +1513,7 @@ static ssize_t dw_dp_aux_transfer(struct drm_dp_aux *aux,
>               if (msg->request & DP_AUX_I2C_READ) {
>                       size_t count = FIELD_GET(AUX_BYTES_READ, value) - 1;
> 
>-                      if (count != msg->size)
>+                      if (!count || count > msg->size)
>                               return -EBUSY;
> 
>                       ret = dw_dp_aux_read_data(dp, msg->buffer, count);
>
>-- 
>2.53.0

Reply via email to