drm/bridge: analogix_dp: properly handle zero sized AUX transactions
authorLucas Stach <l.stach@pengutronix.de>
Mon, 18 Mar 2024 20:39:23 +0000 (21:39 +0100)
committerRobert Foss <rfoss@kernel.org>
Tue, 4 Jun 2024 14:51:27 +0000 (16:51 +0200)
Address only transactions without any data are valid and should not
be flagged as short transactions. Simply return the message size when
no transaction errors occured.

CC: stable@vger.kernel.org
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Robert Foss <rfoss@kernel.org>
Signed-off-by: Robert Foss <rfoss@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240318203925.2837689-1-l.stach@pengutronix.de
drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c

index 6a4f20fccf84170ea5525d723361a157c15f7b45..7b0bc9704eacb182da6d2825b9279beb7fb7a4d1 100644 (file)
@@ -1027,7 +1027,6 @@ ssize_t analogix_dp_transfer(struct analogix_dp_device *dp,
        u32 status_reg;
        u8 *buffer = msg->buffer;
        unsigned int i;
-       int num_transferred = 0;
        int ret;
 
        /* Buffer size of AUX CH is 16 bytes */
@@ -1079,7 +1078,6 @@ ssize_t analogix_dp_transfer(struct analogix_dp_device *dp,
                        reg = buffer[i];
                        writel(reg, dp->reg_base + ANALOGIX_DP_BUF_DATA_0 +
                               4 * i);
-                       num_transferred++;
                }
        }
 
@@ -1127,7 +1125,6 @@ ssize_t analogix_dp_transfer(struct analogix_dp_device *dp,
                        reg = readl(dp->reg_base + ANALOGIX_DP_BUF_DATA_0 +
                                    4 * i);
                        buffer[i] = (unsigned char)reg;
-                       num_transferred++;
                }
        }
 
@@ -1144,7 +1141,7 @@ ssize_t analogix_dp_transfer(struct analogix_dp_device *dp,
                 (msg->request & ~DP_AUX_I2C_MOT) == DP_AUX_NATIVE_READ)
                msg->reply = DP_AUX_NATIVE_REPLY_ACK;
 
-       return num_transferred > 0 ? num_transferred : -EBUSY;
+       return msg->size;
 
 aux_error:
        /* if aux err happen, reset aux */