@@ -476,6 +476,7 @@ static void vc4_hdmi_handle_hotplug(struct vc4_hdmi *vc4_hdmi,
476
476
}
477
477
}
478
478
479
+ static uint32_t toggle [2 ];
479
480
static int vc4_hdmi_connector_detect_ctx (struct drm_connector * connector ,
480
481
struct drm_modeset_acquire_ctx * ctx ,
481
482
bool force )
@@ -498,6 +499,10 @@ static int vc4_hdmi_connector_detect_ctx(struct drm_connector *connector,
498
499
499
500
if (force_hotplug & BIT (vc4_hdmi -> encoder .type - VC4_ENCODER_TYPE_HDMI0 ))
500
501
status = connector_status_connected ;
502
+ else if (force_hotplug & BIT (2 + vc4_hdmi -> encoder .type - VC4_ENCODER_TYPE_HDMI0 )) {
503
+ status = (toggle [vc4_hdmi -> encoder .type - VC4_ENCODER_TYPE_HDMI0 ] & 2 ) ? connector_status_disconnected : connector_status_connected ;
504
+ toggle [vc4_hdmi -> encoder .type - VC4_ENCODER_TYPE_HDMI0 ]++ ;
505
+ }
501
506
else if (vc4_hdmi -> hpd_gpio ) {
502
507
if (gpiod_get_value_cansleep (vc4_hdmi -> hpd_gpio ))
503
508
status = connector_status_connected ;
@@ -507,6 +512,7 @@ static int vc4_hdmi_connector_detect_ctx(struct drm_connector *connector,
507
512
status = connector_status_connected ;
508
513
}
509
514
515
+ printk ("%s:%d: %d (%d)\n" , __func__ , vc4_hdmi -> encoder .type - VC4_ENCODER_TYPE_HDMI0 , status , toggle [vc4_hdmi -> encoder .type - VC4_ENCODER_TYPE_HDMI0 ]);
510
516
vc4_hdmi_handle_hotplug (vc4_hdmi , ctx , status );
511
517
pm_runtime_put (& vc4_hdmi -> pdev -> dev );
512
518
@@ -3005,7 +3011,7 @@ static int vc4_hdmi_hotplug_init(struct vc4_hdmi *vc4_hdmi)
3005
3011
if (ret )
3006
3012
return ret ;
3007
3013
3008
- connector -> polled = DRM_CONNECTOR_POLL_HPD ;
3014
+ connector -> polled = connector -> polled ;
3009
3015
}
3010
3016
3011
3017
return 0 ;
0 commit comments