aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_dp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp.c')
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c258
1 files changed, 112 insertions, 146 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 3c2293bd24bf..9df331b3305b 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -213,6 +213,81 @@ intel_dp_downstream_max_dotclock(struct intel_dp *intel_dp)
213 return max_dotclk; 213 return max_dotclk;
214} 214}
215 215
216static int
217intel_dp_sink_rates(struct intel_dp *intel_dp, const int **sink_rates)
218{
219 if (intel_dp->num_sink_rates) {
220 *sink_rates = intel_dp->sink_rates;
221 return intel_dp->num_sink_rates;
222 }
223
224 *sink_rates = default_rates;
225
226 return (intel_dp_max_link_bw(intel_dp) >> 3) + 1;
227}
228
229static int
230intel_dp_source_rates(struct intel_dp *intel_dp, const int **source_rates)
231{
232 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
233 struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
234 int size;
235
236 if (IS_BROXTON(dev_priv)) {
237 *source_rates = bxt_rates;
238 size = ARRAY_SIZE(bxt_rates);
239 } else if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
240 *source_rates = skl_rates;
241 size = ARRAY_SIZE(skl_rates);
242 } else {
243 *source_rates = default_rates;
244 size = ARRAY_SIZE(default_rates);
245 }
246
247 /* This depends on the fact that 5.4 is last value in the array */
248 if (!intel_dp_source_supports_hbr2(intel_dp))
249 size--;
250
251 return size;
252}
253
254static int intersect_rates(const int *source_rates, int source_len,
255 const int *sink_rates, int sink_len,
256 int *common_rates)
257{
258 int i = 0, j = 0, k = 0;
259
260 while (i < source_len && j < sink_len) {
261 if (source_rates[i] == sink_rates[j]) {
262 if (WARN_ON(k >= DP_MAX_SUPPORTED_RATES))
263 return k;
264 common_rates[k] = source_rates[i];
265 ++k;
266 ++i;
267 ++j;
268 } else if (source_rates[i] < sink_rates[j]) {
269 ++i;
270 } else {
271 ++j;
272 }
273 }
274 return k;
275}
276
277static int intel_dp_common_rates(struct intel_dp *intel_dp,
278 int *common_rates)
279{
280 const int *source_rates, *sink_rates;
281 int source_len, sink_len;
282
283 sink_len = intel_dp_sink_rates(intel_dp, &sink_rates);
284 source_len = intel_dp_source_rates(intel_dp, &source_rates);
285
286 return intersect_rates(source_rates, source_len,
287 sink_rates, sink_len,
288 common_rates);
289}
290
216static enum drm_mode_status 291static enum drm_mode_status
217intel_dp_mode_valid(struct drm_connector *connector, 292intel_dp_mode_valid(struct drm_connector *connector,
218 struct drm_display_mode *mode) 293 struct drm_display_mode *mode)
@@ -320,8 +395,7 @@ static void
320vlv_power_sequencer_kick(struct intel_dp *intel_dp) 395vlv_power_sequencer_kick(struct intel_dp *intel_dp)
321{ 396{
322 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp); 397 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
323 struct drm_device *dev = intel_dig_port->base.base.dev; 398 struct drm_i915_private *dev_priv = to_i915(intel_dig_port->base.base.dev);
324 struct drm_i915_private *dev_priv = to_i915(dev);
325 enum pipe pipe = intel_dp->pps_pipe; 399 enum pipe pipe = intel_dp->pps_pipe;
326 bool pll_enabled, release_cl_override = false; 400 bool pll_enabled, release_cl_override = false;
327 enum dpio_phy phy = DPIO_PHY(pipe); 401 enum dpio_phy phy = DPIO_PHY(pipe);
@@ -359,7 +433,7 @@ vlv_power_sequencer_kick(struct intel_dp *intel_dp)
359 release_cl_override = IS_CHERRYVIEW(dev_priv) && 433 release_cl_override = IS_CHERRYVIEW(dev_priv) &&
360 !chv_phy_powergate_ch(dev_priv, phy, ch, true); 434 !chv_phy_powergate_ch(dev_priv, phy, ch, true);
361 435
362 if (vlv_force_pll_on(dev, pipe, IS_CHERRYVIEW(dev_priv) ? 436 if (vlv_force_pll_on(dev_priv, pipe, IS_CHERRYVIEW(dev_priv) ?
363 &chv_dpll[0].dpll : &vlv_dpll[0].dpll)) { 437 &chv_dpll[0].dpll : &vlv_dpll[0].dpll)) {
364 DRM_ERROR("Failed to force on pll for pipe %c!\n", 438 DRM_ERROR("Failed to force on pll for pipe %c!\n",
365 pipe_name(pipe)); 439 pipe_name(pipe));
@@ -383,7 +457,7 @@ vlv_power_sequencer_kick(struct intel_dp *intel_dp)
383 POSTING_READ(intel_dp->output_reg); 457 POSTING_READ(intel_dp->output_reg);
384 458
385 if (!pll_enabled) { 459 if (!pll_enabled) {
386 vlv_force_pll_off(dev, pipe); 460 vlv_force_pll_off(dev_priv, pipe);
387 461
388 if (release_cl_override) 462 if (release_cl_override)
389 chv_phy_powergate_ch(dev_priv, phy, ch, false); 463 chv_phy_powergate_ch(dev_priv, phy, ch, false);
@@ -1291,19 +1365,6 @@ intel_dp_aux_init(struct intel_dp *intel_dp)
1291 intel_dp->aux.transfer = intel_dp_aux_transfer; 1365 intel_dp->aux.transfer = intel_dp_aux_transfer;
1292} 1366}
1293 1367
1294static int
1295intel_dp_sink_rates(struct intel_dp *intel_dp, const int **sink_rates)
1296{
1297 if (intel_dp->num_sink_rates) {
1298 *sink_rates = intel_dp->sink_rates;
1299 return intel_dp->num_sink_rates;
1300 }
1301
1302 *sink_rates = default_rates;
1303
1304 return (intel_dp_max_link_bw(intel_dp) >> 3) + 1;
1305}
1306
1307bool intel_dp_source_supports_hbr2(struct intel_dp *intel_dp) 1368bool intel_dp_source_supports_hbr2(struct intel_dp *intel_dp)
1308{ 1369{
1309 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); 1370 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
@@ -1316,31 +1377,6 @@ bool intel_dp_source_supports_hbr2(struct intel_dp *intel_dp)
1316 return false; 1377 return false;
1317} 1378}
1318 1379
1319static int
1320intel_dp_source_rates(struct intel_dp *intel_dp, const int **source_rates)
1321{
1322 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
1323 struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
1324 int size;
1325
1326 if (IS_BROXTON(dev_priv)) {
1327 *source_rates = bxt_rates;
1328 size = ARRAY_SIZE(bxt_rates);
1329 } else if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
1330 *source_rates = skl_rates;
1331 size = ARRAY_SIZE(skl_rates);
1332 } else {
1333 *source_rates = default_rates;
1334 size = ARRAY_SIZE(default_rates);
1335 }
1336
1337 /* This depends on the fact that 5.4 is last value in the array */
1338 if (!intel_dp_source_supports_hbr2(intel_dp))
1339 size--;
1340
1341 return size;
1342}
1343
1344static void 1380static void
1345intel_dp_set_clock(struct intel_encoder *encoder, 1381intel_dp_set_clock(struct intel_encoder *encoder,
1346 struct intel_crtc_state *pipe_config) 1382 struct intel_crtc_state *pipe_config)
@@ -1375,43 +1411,6 @@ intel_dp_set_clock(struct intel_encoder *encoder,
1375 } 1411 }
1376} 1412}
1377 1413
1378static int intersect_rates(const int *source_rates, int source_len,
1379 const int *sink_rates, int sink_len,
1380 int *common_rates)
1381{
1382 int i = 0, j = 0, k = 0;
1383
1384 while (i < source_len && j < sink_len) {
1385 if (source_rates[i] == sink_rates[j]) {
1386 if (WARN_ON(k >= DP_MAX_SUPPORTED_RATES))
1387 return k;
1388 common_rates[k] = source_rates[i];
1389 ++k;
1390 ++i;
1391 ++j;
1392 } else if (source_rates[i] < sink_rates[j]) {
1393 ++i;
1394 } else {
1395 ++j;
1396 }
1397 }
1398 return k;
1399}
1400
1401static int intel_dp_common_rates(struct intel_dp *intel_dp,
1402 int *common_rates)
1403{
1404 const int *source_rates, *sink_rates;
1405 int source_len, sink_len;
1406
1407 sink_len = intel_dp_sink_rates(intel_dp, &sink_rates);
1408 source_len = intel_dp_source_rates(intel_dp, &source_rates);
1409
1410 return intersect_rates(source_rates, source_len,
1411 sink_rates, sink_len,
1412 common_rates);
1413}
1414
1415static void snprintf_int_array(char *str, size_t len, 1414static void snprintf_int_array(char *str, size_t len,
1416 const int *array, int nelem) 1415 const int *array, int nelem)
1417{ 1416{
@@ -1451,40 +1450,35 @@ static void intel_dp_print_rates(struct intel_dp *intel_dp)
1451 DRM_DEBUG_KMS("common rates: %s\n", str); 1450 DRM_DEBUG_KMS("common rates: %s\n", str);
1452} 1451}
1453 1452
1454static void intel_dp_print_hw_revision(struct intel_dp *intel_dp) 1453bool
1454__intel_dp_read_desc(struct intel_dp *intel_dp, struct intel_dp_desc *desc)
1455{ 1455{
1456 uint8_t rev; 1456 u32 base = drm_dp_is_branch(intel_dp->dpcd) ? DP_BRANCH_OUI :
1457 int len; 1457 DP_SINK_OUI;
1458
1459 if ((drm_debug & DRM_UT_KMS) == 0)
1460 return;
1461 1458
1462 if (!drm_dp_is_branch(intel_dp->dpcd)) 1459 return drm_dp_dpcd_read(&intel_dp->aux, base, desc, sizeof(*desc)) ==
1463 return; 1460 sizeof(*desc);
1464
1465 len = drm_dp_dpcd_read(&intel_dp->aux, DP_BRANCH_HW_REV, &rev, 1);
1466 if (len < 0)
1467 return;
1468
1469 DRM_DEBUG_KMS("sink hw revision: %d.%d\n", (rev & 0xf0) >> 4, rev & 0xf);
1470} 1461}
1471 1462
1472static void intel_dp_print_sw_revision(struct intel_dp *intel_dp) 1463bool intel_dp_read_desc(struct intel_dp *intel_dp)
1473{ 1464{
1474 uint8_t rev[2]; 1465 struct intel_dp_desc *desc = &intel_dp->desc;
1475 int len; 1466 bool oui_sup = intel_dp->dpcd[DP_DOWN_STREAM_PORT_COUNT] &
1467 DP_OUI_SUPPORT;
1468 int dev_id_len;
1476 1469
1477 if ((drm_debug & DRM_UT_KMS) == 0) 1470 if (!__intel_dp_read_desc(intel_dp, desc))
1478 return; 1471 return false;
1479
1480 if (!drm_dp_is_branch(intel_dp->dpcd))
1481 return;
1482 1472
1483 len = drm_dp_dpcd_read(&intel_dp->aux, DP_BRANCH_SW_REV, &rev, 2); 1473 dev_id_len = strnlen(desc->device_id, sizeof(desc->device_id));
1484 if (len < 0) 1474 DRM_DEBUG_KMS("DP %s: OUI %*phD%s dev-ID %*pE HW-rev %d.%d SW-rev %d.%d\n",
1485 return; 1475 drm_dp_is_branch(intel_dp->dpcd) ? "branch" : "sink",
1476 (int)sizeof(desc->oui), desc->oui, oui_sup ? "" : "(NS)",
1477 dev_id_len, desc->device_id,
1478 desc->hw_rev >> 4, desc->hw_rev & 0xf,
1479 desc->sw_major_rev, desc->sw_minor_rev);
1486 1480
1487 DRM_DEBUG_KMS("sink sw revision: %d.%d\n", rev[0], rev[1]); 1481 return true;
1488} 1482}
1489 1483
1490static int rate_to_index(int find, const int *rates) 1484static int rate_to_index(int find, const int *rates)
@@ -2369,7 +2363,7 @@ static void ironlake_edp_pll_on(struct intel_dp *intel_dp,
2369 * 2. Program DP PLL enable 2363 * 2. Program DP PLL enable
2370 */ 2364 */
2371 if (IS_GEN5(dev_priv)) 2365 if (IS_GEN5(dev_priv))
2372 intel_wait_for_vblank_if_active(&dev_priv->drm, !crtc->pipe); 2366 intel_wait_for_vblank_if_active(dev_priv, !crtc->pipe);
2373 2367
2374 intel_dp->DP |= DP_PLL_ENABLE; 2368 intel_dp->DP |= DP_PLL_ENABLE;
2375 2369
@@ -3492,7 +3486,7 @@ intel_dp_link_down(struct intel_dp *intel_dp)
3492 I915_WRITE(intel_dp->output_reg, DP); 3486 I915_WRITE(intel_dp->output_reg, DP);
3493 POSTING_READ(intel_dp->output_reg); 3487 POSTING_READ(intel_dp->output_reg);
3494 3488
3495 intel_wait_for_vblank_if_active(&dev_priv->drm, PIPE_A); 3489 intel_wait_for_vblank_if_active(dev_priv, PIPE_A);
3496 intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, true); 3490 intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, true);
3497 intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true); 3491 intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true);
3498 } 3492 }
@@ -3502,7 +3496,7 @@ intel_dp_link_down(struct intel_dp *intel_dp)
3502 intel_dp->DP = DP; 3496 intel_dp->DP = DP;
3503} 3497}
3504 3498
3505static bool 3499bool
3506intel_dp_read_dpcd(struct intel_dp *intel_dp) 3500intel_dp_read_dpcd(struct intel_dp *intel_dp)
3507{ 3501{
3508 if (drm_dp_dpcd_read(&intel_dp->aux, 0x000, intel_dp->dpcd, 3502 if (drm_dp_dpcd_read(&intel_dp->aux, 0x000, intel_dp->dpcd,
@@ -3526,6 +3520,8 @@ intel_edp_init_dpcd(struct intel_dp *intel_dp)
3526 if (!intel_dp_read_dpcd(intel_dp)) 3520 if (!intel_dp_read_dpcd(intel_dp))
3527 return false; 3521 return false;
3528 3522
3523 intel_dp_read_desc(intel_dp);
3524
3529 if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11) 3525 if (intel_dp->dpcd[DP_DPCD_REV] >= 0x11)
3530 dev_priv->no_aux_handshake = intel_dp->dpcd[DP_MAX_DOWNSPREAD] & 3526 dev_priv->no_aux_handshake = intel_dp->dpcd[DP_MAX_DOWNSPREAD] &
3531 DP_NO_AUX_HANDSHAKE_LINK_TRAINING; 3527 DP_NO_AUX_HANDSHAKE_LINK_TRAINING;
@@ -3627,23 +3623,6 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp)
3627 return true; 3623 return true;
3628} 3624}
3629 3625
3630static void
3631intel_dp_probe_oui(struct intel_dp *intel_dp)
3632{
3633 u8 buf[3];
3634
3635 if (!(intel_dp->dpcd[DP_DOWN_STREAM_PORT_COUNT] & DP_OUI_SUPPORT))
3636 return;
3637
3638 if (drm_dp_dpcd_read(&intel_dp->aux, DP_SINK_OUI, buf, 3) == 3)
3639 DRM_DEBUG_KMS("Sink OUI: %02hx%02hx%02hx\n",
3640 buf[0], buf[1], buf[2]);
3641
3642 if (drm_dp_dpcd_read(&intel_dp->aux, DP_BRANCH_OUI, buf, 3) == 3)
3643 DRM_DEBUG_KMS("Branch OUI: %02hx%02hx%02hx\n",
3644 buf[0], buf[1], buf[2]);
3645}
3646
3647static bool 3626static bool
3648intel_dp_can_mst(struct intel_dp *intel_dp) 3627intel_dp_can_mst(struct intel_dp *intel_dp)
3649{ 3628{
@@ -3687,7 +3666,7 @@ intel_dp_configure_mst(struct intel_dp *intel_dp)
3687static int intel_dp_sink_crc_stop(struct intel_dp *intel_dp) 3666static int intel_dp_sink_crc_stop(struct intel_dp *intel_dp)
3688{ 3667{
3689 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); 3668 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
3690 struct drm_device *dev = dig_port->base.base.dev; 3669 struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
3691 struct intel_crtc *intel_crtc = to_intel_crtc(dig_port->base.base.crtc); 3670 struct intel_crtc *intel_crtc = to_intel_crtc(dig_port->base.base.crtc);
3692 u8 buf; 3671 u8 buf;
3693 int ret = 0; 3672 int ret = 0;
@@ -3708,7 +3687,7 @@ static int intel_dp_sink_crc_stop(struct intel_dp *intel_dp)
3708 } 3687 }
3709 3688
3710 do { 3689 do {
3711 intel_wait_for_vblank(dev, intel_crtc->pipe); 3690 intel_wait_for_vblank(dev_priv, intel_crtc->pipe);
3712 3691
3713 if (drm_dp_dpcd_readb(&intel_dp->aux, 3692 if (drm_dp_dpcd_readb(&intel_dp->aux,
3714 DP_TEST_SINK_MISC, &buf) < 0) { 3693 DP_TEST_SINK_MISC, &buf) < 0) {
@@ -3731,7 +3710,7 @@ static int intel_dp_sink_crc_stop(struct intel_dp *intel_dp)
3731static int intel_dp_sink_crc_start(struct intel_dp *intel_dp) 3710static int intel_dp_sink_crc_start(struct intel_dp *intel_dp)
3732{ 3711{
3733 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); 3712 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
3734 struct drm_device *dev = dig_port->base.base.dev; 3713 struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
3735 struct intel_crtc *intel_crtc = to_intel_crtc(dig_port->base.base.crtc); 3714 struct intel_crtc *intel_crtc = to_intel_crtc(dig_port->base.base.crtc);
3736 u8 buf; 3715 u8 buf;
3737 int ret; 3716 int ret;
@@ -3759,14 +3738,14 @@ static int intel_dp_sink_crc_start(struct intel_dp *intel_dp)
3759 return -EIO; 3738 return -EIO;
3760 } 3739 }
3761 3740
3762 intel_wait_for_vblank(dev, intel_crtc->pipe); 3741 intel_wait_for_vblank(dev_priv, intel_crtc->pipe);
3763 return 0; 3742 return 0;
3764} 3743}
3765 3744
3766int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc) 3745int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc)
3767{ 3746{
3768 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp); 3747 struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
3769 struct drm_device *dev = dig_port->base.base.dev; 3748 struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
3770 struct intel_crtc *intel_crtc = to_intel_crtc(dig_port->base.base.crtc); 3749 struct intel_crtc *intel_crtc = to_intel_crtc(dig_port->base.base.crtc);
3771 u8 buf; 3750 u8 buf;
3772 int count, ret; 3751 int count, ret;
@@ -3777,7 +3756,7 @@ int intel_dp_sink_crc(struct intel_dp *intel_dp, u8 *crc)
3777 return ret; 3756 return ret;
3778 3757
3779 do { 3758 do {
3780 intel_wait_for_vblank(dev, intel_crtc->pipe); 3759 intel_wait_for_vblank(dev_priv, intel_crtc->pipe);
3781 3760
3782 if (drm_dp_dpcd_readb(&intel_dp->aux, 3761 if (drm_dp_dpcd_readb(&intel_dp->aux,
3783 DP_TEST_SINK_MISC, &buf) < 0) { 3762 DP_TEST_SINK_MISC, &buf) < 0) {
@@ -4010,7 +3989,7 @@ intel_dp_retrain_link(struct intel_dp *intel_dp)
4010 intel_dp_stop_link_train(intel_dp); 3989 intel_dp_stop_link_train(intel_dp);
4011 3990
4012 /* Keep underrun reporting disabled until things are stable */ 3991 /* Keep underrun reporting disabled until things are stable */
4013 intel_wait_for_vblank(&dev_priv->drm, crtc->pipe); 3992 intel_wait_for_vblank(dev_priv, crtc->pipe);
4014 3993
4015 intel_set_cpu_fifo_underrun_reporting(dev_priv, crtc->pipe, true); 3994 intel_set_cpu_fifo_underrun_reporting(dev_priv, crtc->pipe, true);
4016 if (crtc->config->has_pch_encoder) 3995 if (crtc->config->has_pch_encoder)
@@ -4422,10 +4401,7 @@ intel_dp_long_pulse(struct intel_connector *intel_connector)
4422 4401
4423 intel_dp_print_rates(intel_dp); 4402 intel_dp_print_rates(intel_dp);
4424 4403
4425 intel_dp_probe_oui(intel_dp); 4404 intel_dp_read_desc(intel_dp);
4426
4427 intel_dp_print_hw_revision(intel_dp);
4428 intel_dp_print_sw_revision(intel_dp);
4429 4405
4430 intel_dp_configure_mst(intel_dp); 4406 intel_dp_configure_mst(intel_dp);
4431 4407
@@ -4489,21 +4465,11 @@ static enum drm_connector_status
4489intel_dp_detect(struct drm_connector *connector, bool force) 4465intel_dp_detect(struct drm_connector *connector, bool force)
4490{ 4466{
4491 struct intel_dp *intel_dp = intel_attached_dp(connector); 4467 struct intel_dp *intel_dp = intel_attached_dp(connector);
4492 struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
4493 struct intel_encoder *intel_encoder = &intel_dig_port->base;
4494 enum drm_connector_status status = connector->status; 4468 enum drm_connector_status status = connector->status;
4495 4469
4496 DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", 4470 DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
4497 connector->base.id, connector->name); 4471 connector->base.id, connector->name);
4498 4472
4499 if (intel_dp->is_mst) {
4500 /* MST devices are disconnected from a monitor POV */
4501 intel_dp_unset_edid(intel_dp);
4502 if (intel_encoder->type != INTEL_OUTPUT_EDP)
4503 intel_encoder->type = INTEL_OUTPUT_DP;
4504 return connector_status_disconnected;
4505 }
4506
4507 /* If full detect is not performed yet, do a full detect */ 4473 /* If full detect is not performed yet, do a full detect */
4508 if (!intel_dp->detect_done) 4474 if (!intel_dp->detect_done)
4509 status = intel_dp_long_pulse(intel_dp->attached_connector); 4475 status = intel_dp_long_pulse(intel_dp->attached_connector);