aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_dp.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2011-09-28 19:48:10 -0400
committerKeith Packard <keithp@keithp.com>2011-10-06 11:37:15 -0400
commitf01eca2e52169eaf3a485cbd9752435489fbfba9 (patch)
tree4caceb2da4b1f2276b3574a792496fc221d72e0b /drivers/gpu/drm/i915/intel_dp.c
parentf58ff8549ec0dba61aa7f2510559bce814507316 (diff)
drm/i915: Correct eDP panel power sequencing delay computations
Store the panel power sequencing delays in the dp private structure, rather than the global device structure. Who knows, maybe we'll get more than one eDP device in the future. From the eDP spec, we need the following numbers: T1 + T3 Power on to Aux Channel operation (panel_power_up_delay) This marks how long it takes the panel to boot up and get ready to receive aux channel communications. T8 Video signal to backlight on (backlight_on_delay) Once a valid video signal is being sent to the device, it can take a while before the panel is actuall showing useful data. This delay allows the panel to get something reasonable up before the backlight is turned on. T9 Backlight off to video off (backlight_off_delay) Turning the backlight off can take a moment, so this delay makes sure there is still valid video data on the screen. T10 Video off to power off (panel_power_down_delay) Presumably this delay allows the panel to perform an orderly shutdown of the display. T11 + T12 Power off to power on (panel_power_cycle_delay) So, once you turn the panel off, you have to wait a while before you can turn it back on. This delay is usually the longest in the entire sequence. Neither the VBIOS source code nor the hardware documentation has a clear mapping between the delay values they provide and those required by the eDP spec. The VBIOS code actually uses two different labels for the delay values in the five words of the relevant VBT table. **** MORE LATER *** Look at both the current hardware register settings and the VBT specified panel power sequencing timings. Use the maximum of the two delays, to make sure things work reliably. If there is no VBT data, then those values will be initialized to zero, so we'll just use the values as programmed in the hardware. Note that the BIOS just fetches delays from the VBT table to place in the hardware registers, so we should get the same values from both places, except for rounding. VBT doesn't provide any values for T1 or T2, so we'll always just use the hardware value for that. The panel power up delay is thus T1 + T2 + T3, which should be sufficient in all cases. The panel power down delay is T1 + T2 + T12, using T1+T2 as a proxy for T11, which isn't available anywhere. For the backlight delays, the eDP spec says T6 + T8 is the delay from the end of link training to backlight on and T9 is the delay from backlight off until video off. The hardware provides a 'backlight on' delay, which I'm taking to be T6 + T8 while the VBT provides something called 'T7', which I'm assuming is s On the macbook air I'm testing with, this yields a power-up delay of over 200ms and a power-down delay of over 600ms. It all works now, but we're frobbing these power controls several times during mode setting, making the whole process take an awfully long time. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp.c')
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c135
1 files changed, 100 insertions, 35 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index a178414d5d67..ad682a5ffe8c 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -59,6 +59,11 @@ struct intel_dp {
59 bool is_pch_edp; 59 bool is_pch_edp;
60 uint8_t train_set[4]; 60 uint8_t train_set[4];
61 uint8_t link_status[DP_LINK_STATUS_SIZE]; 61 uint8_t link_status[DP_LINK_STATUS_SIZE];
62 int panel_power_up_delay;
63 int panel_power_down_delay;
64 int panel_power_cycle_delay;
65 int backlight_on_delay;
66 int backlight_off_delay;
62}; 67};
63 68
64/** 69/**
@@ -770,6 +775,9 @@ intel_dp_set_m_n(struct drm_crtc *crtc, struct drm_display_mode *mode,
770 } 775 }
771} 776}
772 777
778static void ironlake_edp_pll_on(struct drm_encoder *encoder);
779static void ironlake_edp_pll_off(struct drm_encoder *encoder);
780
773static void 781static void
774intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode, 782intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
775 struct drm_display_mode *adjusted_mode) 783 struct drm_display_mode *adjusted_mode)
@@ -779,6 +787,14 @@ intel_dp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
779 struct drm_crtc *crtc = intel_dp->base.base.crtc; 787 struct drm_crtc *crtc = intel_dp->base.base.crtc;
780 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 788 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
781 789
790 /* Turn on the eDP PLL if needed */
791 if (is_edp(intel_dp)) {
792 if (!is_pch_edp(intel_dp))
793 ironlake_edp_pll_on(encoder);
794 else
795 ironlake_edp_pll_off(encoder);
796 }
797
782 intel_dp->DP = DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0; 798 intel_dp->DP = DP_VOLTAGE_0_4 | DP_PRE_EMPHASIS_0;
783 intel_dp->DP |= intel_dp->color_range; 799 intel_dp->DP |= intel_dp->color_range;
784 800
@@ -838,16 +854,16 @@ static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp)
838{ 854{
839 struct drm_device *dev = intel_dp->base.base.dev; 855 struct drm_device *dev = intel_dp->base.base.dev;
840 struct drm_i915_private *dev_priv = dev->dev_private; 856 struct drm_i915_private *dev_priv = dev->dev_private;
841 u32 pp; 857 u32 pp, pp_status;
842 858
843 if (!is_edp(intel_dp)) 859 if (!is_edp(intel_dp))
844 return; 860 return;
861 DRM_DEBUG_KMS("Turn eDP VDD on\n");
845 /* 862 /*
846 * If the panel wasn't on, make sure there's not a currently 863 * If the panel wasn't on, make sure there's not a currently
847 * active PP sequence before enabling AUX VDD. 864 * active PP sequence before enabling AUX VDD.
848 */ 865 */
849 if (!(I915_READ(PCH_PP_STATUS) & PP_ON)) 866 pp_status = I915_READ(PCH_PP_STATUS);
850 msleep(dev_priv->panel_t3);
851 867
852 pp = I915_READ(PCH_PP_CONTROL); 868 pp = I915_READ(PCH_PP_CONTROL);
853 pp &= ~PANEL_UNLOCK_MASK; 869 pp &= ~PANEL_UNLOCK_MASK;
@@ -855,6 +871,12 @@ static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp)
855 pp |= EDP_FORCE_VDD; 871 pp |= EDP_FORCE_VDD;
856 I915_WRITE(PCH_PP_CONTROL, pp); 872 I915_WRITE(PCH_PP_CONTROL, pp);
857 POSTING_READ(PCH_PP_CONTROL); 873 POSTING_READ(PCH_PP_CONTROL);
874 DRM_DEBUG_KMS("PCH_PP_STATUS: 0x%08x PCH_PP_CONTROL: 0x%08x\n",
875 I915_READ(PCH_PP_STATUS), I915_READ(PCH_PP_CONTROL));
876 if (!(pp_status & PP_ON)) {
877 msleep(intel_dp->panel_power_up_delay);
878 DRM_DEBUG_KMS("eDP VDD was not on\n");
879 }
858} 880}
859 881
860static void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp) 882static void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp)
@@ -865,6 +887,7 @@ static void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp)
865 887
866 if (!is_edp(intel_dp)) 888 if (!is_edp(intel_dp))
867 return; 889 return;
890 DRM_DEBUG_KMS("Turn eDP VDD off\n");
868 pp = I915_READ(PCH_PP_CONTROL); 891 pp = I915_READ(PCH_PP_CONTROL);
869 pp &= ~PANEL_UNLOCK_MASK; 892 pp &= ~PANEL_UNLOCK_MASK;
870 pp |= PANEL_UNLOCK_REGS; 893 pp |= PANEL_UNLOCK_REGS;
@@ -873,7 +896,9 @@ static void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp)
873 POSTING_READ(PCH_PP_CONTROL); 896 POSTING_READ(PCH_PP_CONTROL);
874 897
875 /* Make sure sequencer is idle before allowing subsequent activity */ 898 /* Make sure sequencer is idle before allowing subsequent activity */
876 msleep(dev_priv->panel_t12); 899 DRM_DEBUG_KMS("PCH_PP_STATUS: 0x%08x PCH_PP_CONTROL: 0x%08x\n",
900 I915_READ(PCH_PP_STATUS), I915_READ(PCH_PP_CONTROL));
901 msleep(intel_dp->panel_power_cycle_delay);
877} 902}
878 903
879/* Returns true if the panel was already on when called */ 904/* Returns true if the panel was already on when called */
@@ -884,7 +909,7 @@ static bool ironlake_edp_panel_on (struct intel_dp *intel_dp)
884 u32 pp, idle_on_mask = PP_ON | PP_SEQUENCE_STATE_ON_IDLE; 909 u32 pp, idle_on_mask = PP_ON | PP_SEQUENCE_STATE_ON_IDLE;
885 910
886 if (!is_edp(intel_dp)) 911 if (!is_edp(intel_dp))
887 return; 912 return true;
888 if (I915_READ(PCH_PP_STATUS) & PP_ON) 913 if (I915_READ(PCH_PP_STATUS) & PP_ON)
889 return true; 914 return true;
890 915
@@ -913,8 +938,10 @@ static bool ironlake_edp_panel_on (struct intel_dp *intel_dp)
913 return false; 938 return false;
914} 939}
915 940
916static void ironlake_edp_panel_off (struct drm_device *dev) 941static void ironlake_edp_panel_off(struct drm_encoder *encoder)
917{ 942{
943 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
944 struct drm_device *dev = encoder->dev;
918 struct drm_i915_private *dev_priv = dev->dev_private; 945 struct drm_i915_private *dev_priv = dev->dev_private;
919 u32 pp, idle_off_mask = PP_ON | PP_SEQUENCE_MASK | 946 u32 pp, idle_off_mask = PP_ON | PP_SEQUENCE_MASK |
920 PP_CYCLE_DELAY_ACTIVE | PP_SEQUENCE_STATE_MASK; 947 PP_CYCLE_DELAY_ACTIVE | PP_SEQUENCE_STATE_MASK;
@@ -933,6 +960,7 @@ static void ironlake_edp_panel_off (struct drm_device *dev)
933 pp &= ~POWER_TARGET_ON; 960 pp &= ~POWER_TARGET_ON;
934 I915_WRITE(PCH_PP_CONTROL, pp); 961 I915_WRITE(PCH_PP_CONTROL, pp);
935 POSTING_READ(PCH_PP_CONTROL); 962 POSTING_READ(PCH_PP_CONTROL);
963 msleep(intel_dp->panel_power_cycle_delay);
936 964
937 if (wait_for((I915_READ(PCH_PP_STATUS) & idle_off_mask) == 0, 5000)) 965 if (wait_for((I915_READ(PCH_PP_STATUS) & idle_off_mask) == 0, 5000))
938 DRM_ERROR("panel off wait timed out: 0x%08x\n", 966 DRM_ERROR("panel off wait timed out: 0x%08x\n",
@@ -943,11 +971,15 @@ static void ironlake_edp_panel_off (struct drm_device *dev)
943 POSTING_READ(PCH_PP_CONTROL); 971 POSTING_READ(PCH_PP_CONTROL);
944} 972}
945 973
946static void ironlake_edp_backlight_on (struct drm_device *dev) 974static void ironlake_edp_backlight_on (struct intel_dp *intel_dp)
947{ 975{
976 struct drm_device *dev = intel_dp->base.base.dev;
948 struct drm_i915_private *dev_priv = dev->dev_private; 977 struct drm_i915_private *dev_priv = dev->dev_private;
949 u32 pp; 978 u32 pp;
950 979
980 if (!is_edp(intel_dp))
981 return;
982
951 DRM_DEBUG_KMS("\n"); 983 DRM_DEBUG_KMS("\n");
952 /* 984 /*
953 * If we enable the backlight right away following a panel power 985 * If we enable the backlight right away following a panel power
@@ -955,25 +987,32 @@ static void ironlake_edp_backlight_on (struct drm_device *dev)
955 * link. So delay a bit to make sure the image is solid before 987 * link. So delay a bit to make sure the image is solid before
956 * allowing it to appear. 988 * allowing it to appear.
957 */ 989 */
958 msleep(300); 990 msleep(intel_dp->backlight_on_delay);
959 pp = I915_READ(PCH_PP_CONTROL); 991 pp = I915_READ(PCH_PP_CONTROL);
960 pp &= ~PANEL_UNLOCK_MASK; 992 pp &= ~PANEL_UNLOCK_MASK;
961 pp |= PANEL_UNLOCK_REGS; 993 pp |= PANEL_UNLOCK_REGS;
962 pp |= EDP_BLC_ENABLE; 994 pp |= EDP_BLC_ENABLE;
963 I915_WRITE(PCH_PP_CONTROL, pp); 995 I915_WRITE(PCH_PP_CONTROL, pp);
996 POSTING_READ(PCH_PP_CONTROL);
964} 997}
965 998
966static void ironlake_edp_backlight_off (struct drm_device *dev) 999static void ironlake_edp_backlight_off (struct intel_dp *intel_dp)
967{ 1000{
1001 struct drm_device *dev = intel_dp->base.base.dev;
968 struct drm_i915_private *dev_priv = dev->dev_private; 1002 struct drm_i915_private *dev_priv = dev->dev_private;
969 u32 pp; 1003 u32 pp;
970 1004
1005 if (!is_edp(intel_dp))
1006 return;
1007
971 DRM_DEBUG_KMS("\n"); 1008 DRM_DEBUG_KMS("\n");
972 pp = I915_READ(PCH_PP_CONTROL); 1009 pp = I915_READ(PCH_PP_CONTROL);
973 pp &= ~PANEL_UNLOCK_MASK; 1010 pp &= ~PANEL_UNLOCK_MASK;
974 pp |= PANEL_UNLOCK_REGS; 1011 pp |= PANEL_UNLOCK_REGS;
975 pp &= ~EDP_BLC_ENABLE; 1012 pp &= ~EDP_BLC_ENABLE;
976 I915_WRITE(PCH_PP_CONTROL, pp); 1013 I915_WRITE(PCH_PP_CONTROL, pp);
1014 POSTING_READ(PCH_PP_CONTROL);
1015 msleep(intel_dp->backlight_off_delay);
977} 1016}
978 1017
979static void ironlake_edp_pll_on(struct drm_encoder *encoder) 1018static void ironlake_edp_pll_on(struct drm_encoder *encoder)
@@ -1036,40 +1075,31 @@ static void intel_dp_sink_dpms(struct intel_dp *intel_dp, int mode)
1036static void intel_dp_prepare(struct drm_encoder *encoder) 1075static void intel_dp_prepare(struct drm_encoder *encoder)
1037{ 1076{
1038 struct intel_dp *intel_dp = enc_to_intel_dp(encoder); 1077 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1039 struct drm_device *dev = encoder->dev;
1040 1078
1041 /* Wake up the sink first */ 1079 /* Wake up the sink first */
1042 ironlake_edp_panel_vdd_on(intel_dp); 1080 ironlake_edp_panel_vdd_on(intel_dp);
1043 intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON); 1081 intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
1044 ironlake_edp_panel_vdd_off(intel_dp); 1082 ironlake_edp_panel_vdd_off(intel_dp);
1045 1083
1046 if (is_edp(intel_dp)) { 1084 /* Make sure the panel is off before trying to
1047 ironlake_edp_backlight_off(dev); 1085 * change the mode
1048 ironlake_edp_panel_off(dev); 1086 */
1049 if (!is_pch_edp(intel_dp)) 1087 ironlake_edp_backlight_off(intel_dp);
1050 ironlake_edp_pll_on(encoder);
1051 else
1052 ironlake_edp_pll_off(encoder);
1053 }
1054 intel_dp_link_down(intel_dp); 1088 intel_dp_link_down(intel_dp);
1089 ironlake_edp_panel_off(encoder);
1055} 1090}
1056 1091
1057static void intel_dp_commit(struct drm_encoder *encoder) 1092static void intel_dp_commit(struct drm_encoder *encoder)
1058{ 1093{
1059 struct intel_dp *intel_dp = enc_to_intel_dp(encoder); 1094 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1060 struct drm_device *dev = encoder->dev;
1061 1095
1062 ironlake_edp_panel_vdd_on(intel_dp); 1096 ironlake_edp_panel_vdd_on(intel_dp);
1063 1097 intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
1064 intel_dp_start_link_train(intel_dp); 1098 intel_dp_start_link_train(intel_dp);
1065
1066 ironlake_edp_panel_on(intel_dp); 1099 ironlake_edp_panel_on(intel_dp);
1067 ironlake_edp_panel_vdd_off(intel_dp); 1100 ironlake_edp_panel_vdd_off(intel_dp);
1068
1069 intel_dp_complete_link_train(intel_dp); 1101 intel_dp_complete_link_train(intel_dp);
1070 1102 ironlake_edp_backlight_on(intel_dp);
1071 if (is_edp(intel_dp))
1072 ironlake_edp_backlight_on(dev);
1073 1103
1074 intel_dp->dpms_mode = DRM_MODE_DPMS_ON; 1104 intel_dp->dpms_mode = DRM_MODE_DPMS_ON;
1075} 1105}
@@ -1085,10 +1115,10 @@ intel_dp_dpms(struct drm_encoder *encoder, int mode)
1085 if (mode != DRM_MODE_DPMS_ON) { 1115 if (mode != DRM_MODE_DPMS_ON) {
1086 ironlake_edp_panel_vdd_on(intel_dp); 1116 ironlake_edp_panel_vdd_on(intel_dp);
1087 if (is_edp(intel_dp)) 1117 if (is_edp(intel_dp))
1088 ironlake_edp_backlight_off(dev); 1118 ironlake_edp_backlight_off(intel_dp);
1089 intel_dp_sink_dpms(intel_dp, mode); 1119 intel_dp_sink_dpms(intel_dp, mode);
1090 intel_dp_link_down(intel_dp); 1120 intel_dp_link_down(intel_dp);
1091 ironlake_edp_panel_off(dev); 1121 ironlake_edp_panel_off(encoder);
1092 if (is_edp(intel_dp) && !is_pch_edp(intel_dp)) 1122 if (is_edp(intel_dp) && !is_pch_edp(intel_dp))
1093 ironlake_edp_pll_off(encoder); 1123 ironlake_edp_pll_off(encoder);
1094 ironlake_edp_panel_vdd_off(intel_dp); 1124 ironlake_edp_panel_vdd_off(intel_dp);
@@ -1100,10 +1130,9 @@ intel_dp_dpms(struct drm_encoder *encoder, int mode)
1100 ironlake_edp_panel_on(intel_dp); 1130 ironlake_edp_panel_on(intel_dp);
1101 ironlake_edp_panel_vdd_off(intel_dp); 1131 ironlake_edp_panel_vdd_off(intel_dp);
1102 intel_dp_complete_link_train(intel_dp); 1132 intel_dp_complete_link_train(intel_dp);
1133 ironlake_edp_backlight_on(intel_dp);
1103 } else 1134 } else
1104 ironlake_edp_panel_vdd_off(intel_dp); 1135 ironlake_edp_panel_vdd_off(intel_dp);
1105 if (is_edp(intel_dp))
1106 ironlake_edp_backlight_on(dev);
1107 } 1136 }
1108 intel_dp->dpms_mode = mode; 1137 intel_dp->dpms_mode = mode;
1109} 1138}
@@ -1626,6 +1655,7 @@ intel_dp_link_down(struct intel_dp *intel_dp)
1626 1655
1627 I915_WRITE(intel_dp->output_reg, DP & ~DP_PORT_EN); 1656 I915_WRITE(intel_dp->output_reg, DP & ~DP_PORT_EN);
1628 POSTING_READ(intel_dp->output_reg); 1657 POSTING_READ(intel_dp->output_reg);
1658 msleep(intel_dp->panel_power_down_delay);
1629} 1659}
1630 1660
1631static bool 1661static bool
@@ -2117,16 +2147,51 @@ intel_dp_init(struct drm_device *dev, int output_reg)
2117 /* Cache some DPCD data in the eDP case */ 2147 /* Cache some DPCD data in the eDP case */
2118 if (is_edp(intel_dp)) { 2148 if (is_edp(intel_dp)) {
2119 bool ret; 2149 bool ret;
2120 u32 pp_on, pp_div; 2150 struct edp_power_seq cur, vbt;
2151 u32 pp_on, pp_off, pp_div;
2121 2152
2122 pp_on = I915_READ(PCH_PP_ON_DELAYS); 2153 pp_on = I915_READ(PCH_PP_ON_DELAYS);
2154 pp_off = I915_READ(PCH_PP_OFF_DELAYS);
2123 pp_div = I915_READ(PCH_PP_DIVISOR); 2155 pp_div = I915_READ(PCH_PP_DIVISOR);
2124 2156
2125 /* Get T3 & T12 values (note: VESA not bspec terminology) */ 2157 /* Pull timing values out of registers */
2126 dev_priv->panel_t3 = (pp_on & 0x1fff0000) >> 16; 2158 cur.t1_t3 = (pp_on & PANEL_POWER_UP_DELAY_MASK) >>
2127 dev_priv->panel_t3 /= 10; /* t3 in 100us units */ 2159 PANEL_POWER_UP_DELAY_SHIFT;
2128 dev_priv->panel_t12 = pp_div & 0xf; 2160
2129 dev_priv->panel_t12 *= 100; /* t12 in 100ms units */ 2161 cur.t8 = (pp_on & PANEL_LIGHT_ON_DELAY_MASK) >>
2162 PANEL_LIGHT_ON_DELAY_SHIFT;
2163
2164 cur.t9 = (pp_off & PANEL_LIGHT_OFF_DELAY_MASK) >>
2165 PANEL_LIGHT_OFF_DELAY_SHIFT;
2166
2167 cur.t10 = (pp_off & PANEL_POWER_DOWN_DELAY_MASK) >>
2168 PANEL_POWER_DOWN_DELAY_SHIFT;
2169
2170 cur.t11_t12 = ((pp_div & PANEL_POWER_CYCLE_DELAY_MASK) >>
2171 PANEL_POWER_CYCLE_DELAY_SHIFT) * 1000;
2172
2173 DRM_DEBUG_KMS("cur t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n",
2174 cur.t1_t3, cur.t8, cur.t9, cur.t10, cur.t11_t12);
2175
2176 vbt = dev_priv->edp.pps;
2177
2178 DRM_DEBUG_KMS("vbt t1_t3 %d t8 %d t9 %d t10 %d t11_t12 %d\n",
2179 vbt.t1_t3, vbt.t8, vbt.t9, vbt.t10, vbt.t11_t12);
2180
2181#define get_delay(field) ((max(cur.field, vbt.field) + 9) / 10)
2182
2183 intel_dp->panel_power_up_delay = get_delay(t1_t3);
2184 intel_dp->backlight_on_delay = get_delay(t8);
2185 intel_dp->backlight_off_delay = get_delay(t9);
2186 intel_dp->panel_power_down_delay = get_delay(t10);
2187 intel_dp->panel_power_cycle_delay = get_delay(t11_t12);
2188
2189 DRM_DEBUG_KMS("panel power up delay %d, power down delay %d, power cycle delay %d\n",
2190 intel_dp->panel_power_up_delay, intel_dp->panel_power_down_delay,
2191 intel_dp->panel_power_cycle_delay);
2192
2193 DRM_DEBUG_KMS("backlight on delay %d, off delay %d\n",
2194 intel_dp->backlight_on_delay, intel_dp->backlight_off_delay);
2130 2195
2131 ironlake_edp_panel_vdd_on(intel_dp); 2196 ironlake_edp_panel_vdd_on(intel_dp);
2132 ret = intel_dp_get_dpcd(intel_dp); 2197 ret = intel_dp_get_dpcd(intel_dp);