Lines Matching refs:intel_dp
20 static void pps_init_delays(struct intel_dp *intel_dp);
21 static void pps_init_registers(struct intel_dp *intel_dp, bool force_disable_vdd);
23 intel_wakeref_t intel_pps_lock(struct intel_dp *intel_dp) in intel_pps_lock() argument
25 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in intel_pps_lock()
37 intel_wakeref_t intel_pps_unlock(struct intel_dp *intel_dp, in intel_pps_unlock() argument
40 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in intel_pps_unlock()
49 vlv_power_sequencer_kick(struct intel_dp *intel_dp) in vlv_power_sequencer_kick() argument
51 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in vlv_power_sequencer_kick()
52 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); in vlv_power_sequencer_kick()
53 enum pipe pipe = intel_dp->pps.pps_pipe; in vlv_power_sequencer_kick()
60 intel_de_read(dev_priv, intel_dp->output_reg) & DP_PORT_EN, in vlv_power_sequencer_kick()
74 DP = intel_de_read(dev_priv, intel_dp->output_reg) & DP_DETECTED; in vlv_power_sequencer_kick()
108 intel_de_write(dev_priv, intel_dp->output_reg, DP); in vlv_power_sequencer_kick()
109 intel_de_posting_read(dev_priv, intel_dp->output_reg); in vlv_power_sequencer_kick()
111 intel_de_write(dev_priv, intel_dp->output_reg, DP | DP_PORT_EN); in vlv_power_sequencer_kick()
112 intel_de_posting_read(dev_priv, intel_dp->output_reg); in vlv_power_sequencer_kick()
114 intel_de_write(dev_priv, intel_dp->output_reg, DP & ~DP_PORT_EN); in vlv_power_sequencer_kick()
115 intel_de_posting_read(dev_priv, intel_dp->output_reg); in vlv_power_sequencer_kick()
135 struct intel_dp *intel_dp = enc_to_intel_dp(encoder); in vlv_find_free_pps() local
139 intel_dp->pps.active_pipe != INVALID_PIPE && in vlv_find_free_pps()
140 intel_dp->pps.active_pipe != in vlv_find_free_pps()
141 intel_dp->pps.pps_pipe); in vlv_find_free_pps()
143 if (intel_dp->pps.pps_pipe != INVALID_PIPE) in vlv_find_free_pps()
144 pipes &= ~(1 << intel_dp->pps.pps_pipe); in vlv_find_free_pps()
147 intel_dp->pps.pps_pipe != INVALID_PIPE); in vlv_find_free_pps()
149 if (intel_dp->pps.active_pipe != INVALID_PIPE) in vlv_find_free_pps()
150 pipes &= ~(1 << intel_dp->pps.active_pipe); in vlv_find_free_pps()
161 vlv_power_sequencer_pipe(struct intel_dp *intel_dp) in vlv_power_sequencer_pipe() argument
163 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in vlv_power_sequencer_pipe()
164 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); in vlv_power_sequencer_pipe()
170 drm_WARN_ON(&dev_priv->drm, !intel_dp_is_edp(intel_dp)); in vlv_power_sequencer_pipe()
172 drm_WARN_ON(&dev_priv->drm, intel_dp->pps.active_pipe != INVALID_PIPE && in vlv_power_sequencer_pipe()
173 intel_dp->pps.active_pipe != intel_dp->pps.pps_pipe); in vlv_power_sequencer_pipe()
175 if (intel_dp->pps.pps_pipe != INVALID_PIPE) in vlv_power_sequencer_pipe()
176 return intel_dp->pps.pps_pipe; in vlv_power_sequencer_pipe()
188 intel_dp->pps.pps_pipe = pipe; in vlv_power_sequencer_pipe()
192 pipe_name(intel_dp->pps.pps_pipe), in vlv_power_sequencer_pipe()
197 pps_init_delays(intel_dp); in vlv_power_sequencer_pipe()
198 pps_init_registers(intel_dp, true); in vlv_power_sequencer_pipe()
204 vlv_power_sequencer_kick(intel_dp); in vlv_power_sequencer_pipe()
206 return intel_dp->pps.pps_pipe; in vlv_power_sequencer_pipe()
210 bxt_power_sequencer_idx(struct intel_dp *intel_dp) in bxt_power_sequencer_idx() argument
212 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in bxt_power_sequencer_idx()
213 struct intel_connector *connector = intel_dp->attached_connector; in bxt_power_sequencer_idx()
219 drm_WARN_ON(&dev_priv->drm, !intel_dp_is_edp(intel_dp)); in bxt_power_sequencer_idx()
221 if (!intel_dp->pps.pps_reset) in bxt_power_sequencer_idx()
224 intel_dp->pps.pps_reset = false; in bxt_power_sequencer_idx()
230 pps_init_registers(intel_dp, false); in bxt_power_sequencer_idx()
280 vlv_initial_power_sequencer_setup(struct intel_dp *intel_dp) in vlv_initial_power_sequencer_setup() argument
282 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in vlv_initial_power_sequencer_setup()
283 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); in vlv_initial_power_sequencer_setup()
290 intel_dp->pps.pps_pipe = vlv_initial_pps_pipe(dev_priv, port, in vlv_initial_power_sequencer_setup()
293 if (intel_dp->pps.pps_pipe == INVALID_PIPE) in vlv_initial_power_sequencer_setup()
294 intel_dp->pps.pps_pipe = vlv_initial_pps_pipe(dev_priv, port, in vlv_initial_power_sequencer_setup()
297 if (intel_dp->pps.pps_pipe == INVALID_PIPE) in vlv_initial_power_sequencer_setup()
298 intel_dp->pps.pps_pipe = vlv_initial_pps_pipe(dev_priv, port, in vlv_initial_power_sequencer_setup()
302 if (intel_dp->pps.pps_pipe == INVALID_PIPE) { in vlv_initial_power_sequencer_setup()
314 pipe_name(intel_dp->pps.pps_pipe)); in vlv_initial_power_sequencer_setup()
338 struct intel_dp *intel_dp = enc_to_intel_dp(encoder); in intel_pps_reset_all() local
341 intel_dp->pps.active_pipe != INVALID_PIPE); in intel_pps_reset_all()
347 intel_dp->pps.pps_reset = true; in intel_pps_reset_all()
349 intel_dp->pps.pps_pipe = INVALID_PIPE; in intel_pps_reset_all()
361 static void intel_pps_get_registers(struct intel_dp *intel_dp, in intel_pps_get_registers() argument
364 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in intel_pps_get_registers()
370 pps_idx = bxt_power_sequencer_idx(intel_dp); in intel_pps_get_registers()
372 pps_idx = vlv_power_sequencer_pipe(intel_dp); in intel_pps_get_registers()
388 _pp_ctrl_reg(struct intel_dp *intel_dp) in _pp_ctrl_reg() argument
392 intel_pps_get_registers(intel_dp, ®s); in _pp_ctrl_reg()
398 _pp_stat_reg(struct intel_dp *intel_dp) in _pp_stat_reg() argument
402 intel_pps_get_registers(intel_dp, ®s); in _pp_stat_reg()
407 static bool edp_have_panel_power(struct intel_dp *intel_dp) in edp_have_panel_power() argument
409 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in edp_have_panel_power()
414 intel_dp->pps.pps_pipe == INVALID_PIPE) in edp_have_panel_power()
417 return (intel_de_read(dev_priv, _pp_stat_reg(intel_dp)) & PP_ON) != 0; in edp_have_panel_power()
420 static bool edp_have_panel_vdd(struct intel_dp *intel_dp) in edp_have_panel_vdd() argument
422 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in edp_have_panel_vdd()
427 intel_dp->pps.pps_pipe == INVALID_PIPE) in edp_have_panel_vdd()
430 return intel_de_read(dev_priv, _pp_ctrl_reg(intel_dp)) & EDP_FORCE_VDD; in edp_have_panel_vdd()
433 void intel_pps_check_power_unlocked(struct intel_dp *intel_dp) in intel_pps_check_power_unlocked() argument
435 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in intel_pps_check_power_unlocked()
437 if (!intel_dp_is_edp(intel_dp)) in intel_pps_check_power_unlocked()
440 if (!edp_have_panel_power(intel_dp) && !edp_have_panel_vdd(intel_dp)) { in intel_pps_check_power_unlocked()
444 intel_de_read(dev_priv, _pp_stat_reg(intel_dp)), in intel_pps_check_power_unlocked()
445 intel_de_read(dev_priv, _pp_ctrl_reg(intel_dp))); in intel_pps_check_power_unlocked()
458 static void intel_pps_verify_state(struct intel_dp *intel_dp);
460 static void wait_panel_status(struct intel_dp *intel_dp, in wait_panel_status() argument
464 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in wait_panel_status()
469 intel_pps_verify_state(intel_dp); in wait_panel_status()
471 pp_stat_reg = _pp_stat_reg(intel_dp); in wait_panel_status()
472 pp_ctrl_reg = _pp_ctrl_reg(intel_dp); in wait_panel_status()
490 static void wait_panel_on(struct intel_dp *intel_dp) in wait_panel_on() argument
492 struct drm_i915_private *i915 = dp_to_i915(intel_dp); in wait_panel_on()
495 wait_panel_status(intel_dp, IDLE_ON_MASK, IDLE_ON_VALUE); in wait_panel_on()
498 static void wait_panel_off(struct intel_dp *intel_dp) in wait_panel_off() argument
500 struct drm_i915_private *i915 = dp_to_i915(intel_dp); in wait_panel_off()
503 wait_panel_status(intel_dp, IDLE_OFF_MASK, IDLE_OFF_VALUE); in wait_panel_off()
506 static void wait_panel_power_cycle(struct intel_dp *intel_dp) in wait_panel_power_cycle() argument
508 struct drm_i915_private *i915 = dp_to_i915(intel_dp); in wait_panel_power_cycle()
517 panel_power_off_duration = ktime_ms_delta(panel_power_on_time, intel_dp->pps.panel_power_off_time); in wait_panel_power_cycle()
521 if (panel_power_off_duration < (s64)intel_dp->pps.panel_power_cycle_delay) in wait_panel_power_cycle()
523 intel_dp->pps.panel_power_cycle_delay - panel_power_off_duration); in wait_panel_power_cycle()
525 wait_panel_status(intel_dp, IDLE_CYCLE_MASK, IDLE_CYCLE_VALUE); in wait_panel_power_cycle()
528 void intel_pps_wait_power_cycle(struct intel_dp *intel_dp) in intel_pps_wait_power_cycle() argument
532 if (!intel_dp_is_edp(intel_dp)) in intel_pps_wait_power_cycle()
535 with_intel_pps_lock(intel_dp, wakeref) in intel_pps_wait_power_cycle()
536 wait_panel_power_cycle(intel_dp); in intel_pps_wait_power_cycle()
539 static void wait_backlight_on(struct intel_dp *intel_dp) in wait_backlight_on() argument
541 wait_remaining_ms_from_jiffies(intel_dp->pps.last_power_on, in wait_backlight_on()
542 intel_dp->pps.backlight_on_delay); in wait_backlight_on()
545 static void edp_wait_backlight_off(struct intel_dp *intel_dp) in edp_wait_backlight_off() argument
547 wait_remaining_ms_from_jiffies(intel_dp->pps.last_backlight_off, in edp_wait_backlight_off()
548 intel_dp->pps.backlight_off_delay); in edp_wait_backlight_off()
555 static u32 ilk_get_pp_control(struct intel_dp *intel_dp) in ilk_get_pp_control() argument
557 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in ilk_get_pp_control()
562 control = intel_de_read(dev_priv, _pp_ctrl_reg(intel_dp)); in ilk_get_pp_control()
576 bool intel_pps_vdd_on_unlocked(struct intel_dp *intel_dp) in intel_pps_vdd_on_unlocked() argument
578 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in intel_pps_vdd_on_unlocked()
579 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); in intel_pps_vdd_on_unlocked()
582 bool need_to_disable = !intel_dp->pps.want_panel_vdd; in intel_pps_vdd_on_unlocked()
586 if (!intel_dp_is_edp(intel_dp)) in intel_pps_vdd_on_unlocked()
589 cancel_delayed_work(&intel_dp->pps.panel_vdd_work); in intel_pps_vdd_on_unlocked()
590 intel_dp->pps.want_panel_vdd = true; in intel_pps_vdd_on_unlocked()
592 if (edp_have_panel_vdd(intel_dp)) in intel_pps_vdd_on_unlocked()
595 drm_WARN_ON(&dev_priv->drm, intel_dp->pps.vdd_wakeref); in intel_pps_vdd_on_unlocked()
596 intel_dp->pps.vdd_wakeref = intel_display_power_get(dev_priv, in intel_pps_vdd_on_unlocked()
603 if (!edp_have_panel_power(intel_dp)) in intel_pps_vdd_on_unlocked()
604 wait_panel_power_cycle(intel_dp); in intel_pps_vdd_on_unlocked()
606 pp = ilk_get_pp_control(intel_dp); in intel_pps_vdd_on_unlocked()
609 pp_stat_reg = _pp_stat_reg(intel_dp); in intel_pps_vdd_on_unlocked()
610 pp_ctrl_reg = _pp_ctrl_reg(intel_dp); in intel_pps_vdd_on_unlocked()
620 if (!edp_have_panel_power(intel_dp)) { in intel_pps_vdd_on_unlocked()
625 msleep(intel_dp->pps.panel_power_up_delay); in intel_pps_vdd_on_unlocked()
637 void intel_pps_vdd_on(struct intel_dp *intel_dp) in intel_pps_vdd_on() argument
642 if (!intel_dp_is_edp(intel_dp)) in intel_pps_vdd_on()
646 with_intel_pps_lock(intel_dp, wakeref) in intel_pps_vdd_on()
647 vdd = intel_pps_vdd_on_unlocked(intel_dp); in intel_pps_vdd_on()
649 dp_to_dig_port(intel_dp)->base.base.base.id, in intel_pps_vdd_on()
650 dp_to_dig_port(intel_dp)->base.base.name); in intel_pps_vdd_on()
653 static void intel_pps_vdd_off_sync_unlocked(struct intel_dp *intel_dp) in intel_pps_vdd_off_sync_unlocked() argument
655 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in intel_pps_vdd_off_sync_unlocked()
657 dp_to_dig_port(intel_dp); in intel_pps_vdd_off_sync_unlocked()
663 drm_WARN_ON(&dev_priv->drm, intel_dp->pps.want_panel_vdd); in intel_pps_vdd_off_sync_unlocked()
665 if (!edp_have_panel_vdd(intel_dp)) in intel_pps_vdd_off_sync_unlocked()
672 pp = ilk_get_pp_control(intel_dp); in intel_pps_vdd_off_sync_unlocked()
675 pp_ctrl_reg = _pp_ctrl_reg(intel_dp); in intel_pps_vdd_off_sync_unlocked()
676 pp_stat_reg = _pp_stat_reg(intel_dp); in intel_pps_vdd_off_sync_unlocked()
687 intel_dp->pps.panel_power_off_time = ktime_get_boottime(); in intel_pps_vdd_off_sync_unlocked()
691 fetch_and_zero(&intel_dp->pps.vdd_wakeref)); in intel_pps_vdd_off_sync_unlocked()
694 void intel_pps_vdd_off_sync(struct intel_dp *intel_dp) in intel_pps_vdd_off_sync() argument
698 if (!intel_dp_is_edp(intel_dp)) in intel_pps_vdd_off_sync()
701 cancel_delayed_work_sync(&intel_dp->pps.panel_vdd_work); in intel_pps_vdd_off_sync()
706 with_intel_pps_lock(intel_dp, wakeref) in intel_pps_vdd_off_sync()
707 intel_pps_vdd_off_sync_unlocked(intel_dp); in intel_pps_vdd_off_sync()
714 struct intel_dp *intel_dp = container_of(pps, struct intel_dp, pps); in edp_panel_vdd_work() local
717 with_intel_pps_lock(intel_dp, wakeref) { in edp_panel_vdd_work()
718 if (!intel_dp->pps.want_panel_vdd) in edp_panel_vdd_work()
719 intel_pps_vdd_off_sync_unlocked(intel_dp); in edp_panel_vdd_work()
723 static void edp_panel_vdd_schedule_off(struct intel_dp *intel_dp) in edp_panel_vdd_schedule_off() argument
731 if (intel_dp->pps.initializing) in edp_panel_vdd_schedule_off()
739 delay = msecs_to_jiffies(intel_dp->pps.panel_power_cycle_delay * 5); in edp_panel_vdd_schedule_off()
740 schedule_delayed_work(&intel_dp->pps.panel_vdd_work, delay); in edp_panel_vdd_schedule_off()
748 void intel_pps_vdd_off_unlocked(struct intel_dp *intel_dp, bool sync) in intel_pps_vdd_off_unlocked() argument
750 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in intel_pps_vdd_off_unlocked()
754 if (!intel_dp_is_edp(intel_dp)) in intel_pps_vdd_off_unlocked()
757 I915_STATE_WARN(!intel_dp->pps.want_panel_vdd, "[ENCODER:%d:%s] VDD not forced on", in intel_pps_vdd_off_unlocked()
758 dp_to_dig_port(intel_dp)->base.base.base.id, in intel_pps_vdd_off_unlocked()
759 dp_to_dig_port(intel_dp)->base.base.name); in intel_pps_vdd_off_unlocked()
761 intel_dp->pps.want_panel_vdd = false; in intel_pps_vdd_off_unlocked()
764 intel_pps_vdd_off_sync_unlocked(intel_dp); in intel_pps_vdd_off_unlocked()
766 edp_panel_vdd_schedule_off(intel_dp); in intel_pps_vdd_off_unlocked()
769 void intel_pps_on_unlocked(struct intel_dp *intel_dp) in intel_pps_on_unlocked() argument
771 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in intel_pps_on_unlocked()
777 if (!intel_dp_is_edp(intel_dp)) in intel_pps_on_unlocked()
781 dp_to_dig_port(intel_dp)->base.base.base.id, in intel_pps_on_unlocked()
782 dp_to_dig_port(intel_dp)->base.base.name); in intel_pps_on_unlocked()
784 if (drm_WARN(&dev_priv->drm, edp_have_panel_power(intel_dp), in intel_pps_on_unlocked()
786 dp_to_dig_port(intel_dp)->base.base.base.id, in intel_pps_on_unlocked()
787 dp_to_dig_port(intel_dp)->base.base.name)) in intel_pps_on_unlocked()
790 wait_panel_power_cycle(intel_dp); in intel_pps_on_unlocked()
792 pp_ctrl_reg = _pp_ctrl_reg(intel_dp); in intel_pps_on_unlocked()
793 pp = ilk_get_pp_control(intel_dp); in intel_pps_on_unlocked()
808 wait_panel_on(intel_dp); in intel_pps_on_unlocked()
809 intel_dp->pps.last_power_on = jiffies; in intel_pps_on_unlocked()
818 void intel_pps_on(struct intel_dp *intel_dp) in intel_pps_on() argument
822 if (!intel_dp_is_edp(intel_dp)) in intel_pps_on()
825 with_intel_pps_lock(intel_dp, wakeref) in intel_pps_on()
826 intel_pps_on_unlocked(intel_dp); in intel_pps_on()
829 void intel_pps_off_unlocked(struct intel_dp *intel_dp) in intel_pps_off_unlocked() argument
831 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in intel_pps_off_unlocked()
832 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); in intel_pps_off_unlocked()
838 if (!intel_dp_is_edp(intel_dp)) in intel_pps_off_unlocked()
844 drm_WARN(&dev_priv->drm, !intel_dp->pps.want_panel_vdd, in intel_pps_off_unlocked()
848 pp = ilk_get_pp_control(intel_dp); in intel_pps_off_unlocked()
854 pp_ctrl_reg = _pp_ctrl_reg(intel_dp); in intel_pps_off_unlocked()
856 intel_dp->pps.want_panel_vdd = false; in intel_pps_off_unlocked()
861 wait_panel_off(intel_dp); in intel_pps_off_unlocked()
862 intel_dp->pps.panel_power_off_time = ktime_get_boottime(); in intel_pps_off_unlocked()
867 fetch_and_zero(&intel_dp->pps.vdd_wakeref)); in intel_pps_off_unlocked()
870 void intel_pps_off(struct intel_dp *intel_dp) in intel_pps_off() argument
874 if (!intel_dp_is_edp(intel_dp)) in intel_pps_off()
877 with_intel_pps_lock(intel_dp, wakeref) in intel_pps_off()
878 intel_pps_off_unlocked(intel_dp); in intel_pps_off()
882 void intel_pps_backlight_on(struct intel_dp *intel_dp) in intel_pps_backlight_on() argument
884 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in intel_pps_backlight_on()
893 wait_backlight_on(intel_dp); in intel_pps_backlight_on()
895 with_intel_pps_lock(intel_dp, wakeref) { in intel_pps_backlight_on()
896 i915_reg_t pp_ctrl_reg = _pp_ctrl_reg(intel_dp); in intel_pps_backlight_on()
899 pp = ilk_get_pp_control(intel_dp); in intel_pps_backlight_on()
908 void intel_pps_backlight_off(struct intel_dp *intel_dp) in intel_pps_backlight_off() argument
910 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in intel_pps_backlight_off()
913 if (!intel_dp_is_edp(intel_dp)) in intel_pps_backlight_off()
916 with_intel_pps_lock(intel_dp, wakeref) { in intel_pps_backlight_off()
917 i915_reg_t pp_ctrl_reg = _pp_ctrl_reg(intel_dp); in intel_pps_backlight_off()
920 pp = ilk_get_pp_control(intel_dp); in intel_pps_backlight_off()
927 intel_dp->pps.last_backlight_off = jiffies; in intel_pps_backlight_off()
928 edp_wait_backlight_off(intel_dp); in intel_pps_backlight_off()
938 struct intel_dp *intel_dp = intel_attached_dp(connector); in intel_pps_backlight_power() local
943 with_intel_pps_lock(intel_dp, wakeref) in intel_pps_backlight_power()
944 is_enabled = ilk_get_pp_control(intel_dp) & EDP_BLC_ENABLE; in intel_pps_backlight_power()
952 intel_pps_backlight_on(intel_dp); in intel_pps_backlight_power()
954 intel_pps_backlight_off(intel_dp); in intel_pps_backlight_power()
957 static void vlv_detach_power_sequencer(struct intel_dp *intel_dp) in vlv_detach_power_sequencer() argument
959 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); in vlv_detach_power_sequencer()
961 enum pipe pipe = intel_dp->pps.pps_pipe; in vlv_detach_power_sequencer()
964 drm_WARN_ON(&dev_priv->drm, intel_dp->pps.active_pipe != INVALID_PIPE); in vlv_detach_power_sequencer()
969 intel_pps_vdd_off_sync_unlocked(intel_dp); in vlv_detach_power_sequencer()
987 intel_dp->pps.pps_pipe = INVALID_PIPE; in vlv_detach_power_sequencer()
998 struct intel_dp *intel_dp = enc_to_intel_dp(encoder); in vlv_steal_power_sequencer() local
1000 drm_WARN(&dev_priv->drm, intel_dp->pps.active_pipe == pipe, in vlv_steal_power_sequencer()
1005 if (intel_dp->pps.pps_pipe != pipe) in vlv_steal_power_sequencer()
1014 vlv_detach_power_sequencer(intel_dp); in vlv_steal_power_sequencer()
1022 struct intel_dp *intel_dp = enc_to_intel_dp(encoder); in vlv_pps_init() local
1027 drm_WARN_ON(&dev_priv->drm, intel_dp->pps.active_pipe != INVALID_PIPE); in vlv_pps_init()
1029 if (intel_dp->pps.pps_pipe != INVALID_PIPE && in vlv_pps_init()
1030 intel_dp->pps.pps_pipe != crtc->pipe) { in vlv_pps_init()
1036 vlv_detach_power_sequencer(intel_dp); in vlv_pps_init()
1045 intel_dp->pps.active_pipe = crtc->pipe; in vlv_pps_init()
1047 if (!intel_dp_is_edp(intel_dp)) in vlv_pps_init()
1051 intel_dp->pps.pps_pipe = crtc->pipe; in vlv_pps_init()
1055 pipe_name(intel_dp->pps.pps_pipe), encoder->base.base.id, in vlv_pps_init()
1059 pps_init_delays(intel_dp); in vlv_pps_init()
1060 pps_init_registers(intel_dp, true); in vlv_pps_init()
1063 static void pps_vdd_init(struct intel_dp *intel_dp) in pps_vdd_init() argument
1065 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in pps_vdd_init()
1066 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); in pps_vdd_init()
1070 if (!edp_have_panel_vdd(intel_dp)) in pps_vdd_init()
1081 drm_WARN_ON(&dev_priv->drm, intel_dp->pps.vdd_wakeref); in pps_vdd_init()
1082 intel_dp->pps.vdd_wakeref = intel_display_power_get(dev_priv, in pps_vdd_init()
1086 bool intel_pps_have_panel_power_or_vdd(struct intel_dp *intel_dp) in intel_pps_have_panel_power_or_vdd() argument
1091 with_intel_pps_lock(intel_dp, wakeref) { in intel_pps_have_panel_power_or_vdd()
1092 have_power = edp_have_panel_power(intel_dp) || in intel_pps_have_panel_power_or_vdd()
1093 edp_have_panel_vdd(intel_dp); in intel_pps_have_panel_power_or_vdd()
1099 static void pps_init_timestamps(struct intel_dp *intel_dp) in pps_init_timestamps() argument
1101 intel_dp->pps.panel_power_off_time = ktime_get_boottime(); in pps_init_timestamps()
1102 intel_dp->pps.last_power_on = jiffies; in pps_init_timestamps()
1103 intel_dp->pps.last_backlight_off = jiffies; in pps_init_timestamps()
1107 intel_pps_readout_hw_state(struct intel_dp *intel_dp, struct edp_power_seq *seq) in intel_pps_readout_hw_state() argument
1109 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in intel_pps_readout_hw_state()
1113 intel_pps_get_registers(intel_dp, ®s); in intel_pps_readout_hw_state()
1115 pp_ctl = ilk_get_pp_control(intel_dp); in intel_pps_readout_hw_state()
1142 intel_pps_dump_state(struct intel_dp *intel_dp, const char *state_name, in intel_pps_dump_state() argument
1145 struct drm_i915_private *i915 = dp_to_i915(intel_dp); in intel_pps_dump_state()
1153 intel_pps_verify_state(struct intel_dp *intel_dp) in intel_pps_verify_state() argument
1155 struct drm_i915_private *i915 = dp_to_i915(intel_dp); in intel_pps_verify_state()
1157 struct edp_power_seq *sw = &intel_dp->pps.pps_delays; in intel_pps_verify_state()
1159 intel_pps_readout_hw_state(intel_dp, &hw); in intel_pps_verify_state()
1164 intel_pps_dump_state(intel_dp, "sw", sw); in intel_pps_verify_state()
1165 intel_pps_dump_state(intel_dp, "hw", &hw); in intel_pps_verify_state()
1175 static void pps_init_delays_bios(struct intel_dp *intel_dp, in pps_init_delays_bios() argument
1178 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in pps_init_delays_bios()
1182 if (!pps_delays_valid(&intel_dp->pps.bios_pps_delays)) in pps_init_delays_bios()
1183 intel_pps_readout_hw_state(intel_dp, &intel_dp->pps.bios_pps_delays); in pps_init_delays_bios()
1185 *bios = intel_dp->pps.bios_pps_delays; in pps_init_delays_bios()
1187 intel_pps_dump_state(intel_dp, "bios", bios); in pps_init_delays_bios()
1190 static void pps_init_delays_vbt(struct intel_dp *intel_dp, in pps_init_delays_vbt() argument
1193 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in pps_init_delays_vbt()
1194 struct intel_connector *connector = intel_dp->attached_connector; in pps_init_delays_vbt()
1219 intel_pps_dump_state(intel_dp, "vbt", vbt); in pps_init_delays_vbt()
1222 static void pps_init_delays_spec(struct intel_dp *intel_dp, in pps_init_delays_spec() argument
1225 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in pps_init_delays_spec()
1241 intel_pps_dump_state(intel_dp, "spec", spec); in pps_init_delays_spec()
1244 static void pps_init_delays(struct intel_dp *intel_dp) in pps_init_delays() argument
1246 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in pps_init_delays()
1248 *final = &intel_dp->pps.pps_delays; in pps_init_delays()
1256 pps_init_delays_bios(intel_dp, &cur); in pps_init_delays()
1257 pps_init_delays_vbt(intel_dp, &vbt); in pps_init_delays()
1258 pps_init_delays_spec(intel_dp, &spec); in pps_init_delays()
1273 intel_dp->pps.panel_power_up_delay = get_delay(t1_t3); in pps_init_delays()
1274 intel_dp->pps.backlight_on_delay = get_delay(t8); in pps_init_delays()
1275 intel_dp->pps.backlight_off_delay = get_delay(t9); in pps_init_delays()
1276 intel_dp->pps.panel_power_down_delay = get_delay(t10); in pps_init_delays()
1277 intel_dp->pps.panel_power_cycle_delay = get_delay(t11_t12); in pps_init_delays()
1282 intel_dp->pps.panel_power_up_delay, in pps_init_delays()
1283 intel_dp->pps.panel_power_down_delay, in pps_init_delays()
1284 intel_dp->pps.panel_power_cycle_delay); in pps_init_delays()
1287 intel_dp->pps.backlight_on_delay, in pps_init_delays()
1288 intel_dp->pps.backlight_off_delay); in pps_init_delays()
1307 static void pps_init_registers(struct intel_dp *intel_dp, bool force_disable_vdd) in pps_init_registers() argument
1309 struct drm_i915_private *dev_priv = dp_to_i915(intel_dp); in pps_init_registers()
1313 enum port port = dp_to_dig_port(intel_dp)->base.port; in pps_init_registers()
1314 const struct edp_power_seq *seq = &intel_dp->pps.pps_delays; in pps_init_registers()
1318 intel_pps_get_registers(intel_dp, ®s); in pps_init_registers()
1333 u32 pp = ilk_get_pp_control(intel_dp); in pps_init_registers()
1402 void intel_pps_encoder_reset(struct intel_dp *intel_dp) in intel_pps_encoder_reset() argument
1404 struct drm_i915_private *i915 = dp_to_i915(intel_dp); in intel_pps_encoder_reset()
1407 if (!intel_dp_is_edp(intel_dp)) in intel_pps_encoder_reset()
1410 with_intel_pps_lock(intel_dp, wakeref) { in intel_pps_encoder_reset()
1416 vlv_initial_power_sequencer_setup(intel_dp); in intel_pps_encoder_reset()
1418 pps_init_delays(intel_dp); in intel_pps_encoder_reset()
1419 pps_init_registers(intel_dp, false); in intel_pps_encoder_reset()
1420 pps_vdd_init(intel_dp); in intel_pps_encoder_reset()
1422 if (edp_have_panel_vdd(intel_dp)) in intel_pps_encoder_reset()
1423 edp_panel_vdd_schedule_off(intel_dp); in intel_pps_encoder_reset()
1427 void intel_pps_init(struct intel_dp *intel_dp) in intel_pps_init() argument
1429 struct drm_i915_private *i915 = dp_to_i915(intel_dp); in intel_pps_init()
1432 intel_dp->pps.initializing = true; in intel_pps_init()
1433 INIT_DELAYED_WORK(&intel_dp->pps.panel_vdd_work, edp_panel_vdd_work); in intel_pps_init()
1435 pps_init_timestamps(intel_dp); in intel_pps_init()
1437 with_intel_pps_lock(intel_dp, wakeref) { in intel_pps_init()
1439 vlv_initial_power_sequencer_setup(intel_dp); in intel_pps_init()
1441 pps_init_delays(intel_dp); in intel_pps_init()
1442 pps_init_registers(intel_dp, false); in intel_pps_init()
1443 pps_vdd_init(intel_dp); in intel_pps_init()
1447 void intel_pps_init_late(struct intel_dp *intel_dp) in intel_pps_init_late() argument
1451 with_intel_pps_lock(intel_dp, wakeref) { in intel_pps_init_late()
1453 memset(&intel_dp->pps.pps_delays, 0, sizeof(intel_dp->pps.pps_delays)); in intel_pps_init_late()
1454 pps_init_delays(intel_dp); in intel_pps_init_late()
1455 pps_init_registers(intel_dp, false); in intel_pps_init_late()
1457 intel_dp->pps.initializing = false; in intel_pps_init_late()
1459 if (edp_have_panel_vdd(intel_dp)) in intel_pps_init_late()
1460 edp_panel_vdd_schedule_off(intel_dp); in intel_pps_init_late()