@@ -668,23 +668,24 @@ static void wait_panel_power_cycle(struct intel_dp *intel_dp)
668
668
struct intel_display * display = to_intel_display (intel_dp );
669
669
struct intel_digital_port * dig_port = dp_to_dig_port (intel_dp );
670
670
ktime_t panel_power_on_time ;
671
- s64 panel_power_off_duration ;
672
-
673
- drm_dbg_kms (display -> drm ,
674
- "[ENCODER:%d:%s] %s wait for panel power cycle\n" ,
675
- dig_port -> base .base .base .id , dig_port -> base .base .name ,
676
- pps_name (intel_dp ));
671
+ s64 panel_power_off_duration , remaining ;
677
672
678
673
/* take the difference of current time and panel power off time
679
674
* and then make panel wait for power_cycle if needed. */
680
675
panel_power_on_time = ktime_get_boottime ();
681
676
panel_power_off_duration = ktime_ms_delta (panel_power_on_time , intel_dp -> pps .panel_power_off_time );
682
677
678
+ remaining = max (0 , intel_dp -> pps .panel_power_cycle_delay - panel_power_off_duration );
679
+
680
+ drm_dbg_kms (display -> drm ,
681
+ "[ENCODER:%d:%s] %s wait for panel power cycle (%lld ms remaining)\n" ,
682
+ dig_port -> base .base .base .id , dig_port -> base .base .name ,
683
+ pps_name (intel_dp ), remaining );
684
+
683
685
/* When we disable the VDD override bit last we have to do the manual
684
686
* wait. */
685
- if (panel_power_off_duration < (s64 )intel_dp -> pps .panel_power_cycle_delay )
686
- wait_remaining_ms_from_jiffies (jiffies ,
687
- intel_dp -> pps .panel_power_cycle_delay - panel_power_off_duration );
687
+ if (remaining )
688
+ wait_remaining_ms_from_jiffies (jiffies , remaining );
688
689
689
690
wait_panel_status (intel_dp , IDLE_CYCLE_MASK , IDLE_CYCLE_VALUE );
690
691
}
0 commit comments