]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
drm/bridge: analogix_dp: handle AUX transfer timeouts
authorLucas Stach <l.stach@pengutronix.de>
Wed, 19 Jun 2024 18:22:00 +0000 (20:22 +0200)
committerRobert Foss <rfoss@kernel.org>
Thu, 27 Jun 2024 09:52:19 +0000 (11:52 +0200)
Timeouts on the AUX bus are to be expected in certain normal operating
conditions. There is no need to raise an error log or re-initialize the
whole AUX state machine. Simply acknowledge the AUX_ERR interrupt and
let upper layers know about the timeout.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Robert Foss <rfoss@kernel.org>
Tested-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Robert Foss <rfoss@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240619182200.3752465-14-l.stach@pengutronix.de
drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c
drivers/gpu/drm/bridge/analogix/analogix_dp_reg.h

index 0f016dca9f3dfc2e39f92c61066ee80511de6ed8..3afc73c858c4f7419619c72773c32e54c357d6f5 100644 (file)
@@ -1016,6 +1016,9 @@ ssize_t analogix_dp_transfer(struct analogix_dp_device *dp,
 
                writel(AUX_ERR, dp->reg_base + ANALOGIX_DP_INT_STA);
 
+               if (aux_status == AUX_STATUS_TIMEOUT_ERROR)
+                       return -ETIMEDOUT;
+
                dev_warn(dp->dev, "AUX CH error happened: %#x (%d)\n",
                         aux_status, !!(reg & AUX_ERR));
                goto aux_error;
index e284ee8da58ba4cc39b41f87834502327546150a..12735139046ced0fb1012cbff28f800b983f924a 100644 (file)
 /* ANALOGIX_DP_AUX_CH_STA */
 #define AUX_BUSY                               (0x1 << 4)
 #define AUX_STATUS_MASK                                (0xf << 0)
+#define AUX_STATUS_OK                          (0x0 << 0)
+#define AUX_STATUS_NACK_ERROR                  (0x1 << 0)
+#define AUX_STATUS_TIMEOUT_ERROR               (0x2 << 0)
+#define AUX_STATUS_UNKNOWN_ERROR               (0x3 << 0)
+#define AUX_STATUS_MUCH_DEFER_ERROR            (0x4 << 0)
+#define AUX_STATUS_TX_SHORT_ERROR              (0x5 << 0)
+#define AUX_STATUS_RX_SHORT_ERROR              (0x6 << 0)
+#define AUX_STATUS_NACK_WITHOUT_M_ERROR                (0x7 << 0)
+#define AUX_STATUS_I2C_NACK_ERROR              (0x8 << 0)
 
 /* ANALOGIX_DP_AUX_CH_DEFER_CTL */
 #define DEFER_CTRL_EN                          (0x1 << 7)