|
@@ -132,6 +132,7 @@ static bool lspcon_wake_native_aux_ch(struct intel_lspcon *lspcon)
|
|
|
|
|
|
static bool lspcon_probe(struct intel_lspcon *lspcon)
|
|
|
{
|
|
|
+ int retry;
|
|
|
enum drm_dp_dual_mode_type adaptor_type;
|
|
|
struct i2c_adapter *adapter = &lspcon_to_intel_dp(lspcon)->aux.ddc;
|
|
|
enum drm_lspcon_mode expected_mode;
|
|
@@ -140,10 +141,18 @@ static bool lspcon_probe(struct intel_lspcon *lspcon)
|
|
|
DRM_LSPCON_MODE_PCON : DRM_LSPCON_MODE_LS;
|
|
|
|
|
|
/* Lets probe the adaptor and check its type */
|
|
|
- adaptor_type = drm_dp_dual_mode_detect(adapter);
|
|
|
+ for (retry = 0; retry < 6; retry++) {
|
|
|
+ if (retry)
|
|
|
+ usleep_range(500, 1000);
|
|
|
+
|
|
|
+ adaptor_type = drm_dp_dual_mode_detect(adapter);
|
|
|
+ if (adaptor_type == DRM_DP_DUAL_MODE_LSPCON)
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
if (adaptor_type != DRM_DP_DUAL_MODE_LSPCON) {
|
|
|
DRM_DEBUG_KMS("No LSPCON detected, found %s\n",
|
|
|
- drm_dp_get_dual_mode_type_name(adaptor_type));
|
|
|
+ drm_dp_get_dual_mode_type_name(adaptor_type));
|
|
|
return false;
|
|
|
}
|
|
|
|