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: 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
This commit is contained in:
parent
e857142bbb
commit
61bfcd1908
@ -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;
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user