|
@@ -410,6 +410,7 @@ int drm_lspcon_get_mode(struct i2c_adapter *adapter,
|
|
|
{
|
|
|
u8 data;
|
|
|
int ret = 0;
|
|
|
+ int retry;
|
|
|
|
|
|
if (!mode) {
|
|
|
DRM_ERROR("NULL input\n");
|
|
@@ -417,10 +418,19 @@ int drm_lspcon_get_mode(struct i2c_adapter *adapter,
|
|
|
}
|
|
|
|
|
|
/* Read Status: i2c over aux */
|
|
|
- ret = drm_dp_dual_mode_read(adapter, DP_DUAL_MODE_LSPCON_CURRENT_MODE,
|
|
|
- &data, sizeof(data));
|
|
|
+ for (retry = 0; retry < 6; retry++) {
|
|
|
+ if (retry)
|
|
|
+ usleep_range(500, 1000);
|
|
|
+
|
|
|
+ ret = drm_dp_dual_mode_read(adapter,
|
|
|
+ DP_DUAL_MODE_LSPCON_CURRENT_MODE,
|
|
|
+ &data, sizeof(data));
|
|
|
+ if (!ret)
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
if (ret < 0) {
|
|
|
- DRM_ERROR("LSPCON read(0x80, 0x41) failed\n");
|
|
|
+ DRM_DEBUG_KMS("LSPCON read(0x80, 0x41) failed\n");
|
|
|
return -EFAULT;
|
|
|
}
|
|
|
|