Unverified Commit 61bfcd19 authored by Lucas Stach's avatar Lucas Stach Committed by Robert Foss
Browse files

drm/bridge: analogix_dp: handle AUX transfer timeouts



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: default avatarLucas Stach <l.stach@pengutronix.de>
Reviewed-by: default avatarRobert Foss <rfoss@kernel.org>
Tested-by: default avatarHeiko Stuebner <heiko@sntech.de>
Signed-off-by: default avatarRobert Foss <rfoss@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240619182200.3752465-14-l.stach@pengutronix.de
parent e857142b
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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;
+9 −0
Original line number Diff line number Diff line
@@ -361,6 +361,15 @@
/* 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)