1 /* 2 * Copyright 2007-8 Advanced Micro Devices, Inc. 3 * Copyright 2008 Red Hat Inc. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice shall be included in 13 * all copies or substantial portions of the Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 19 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 20 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 21 * OTHER DEALINGS IN THE SOFTWARE. 22 * 23 * Authors: Dave Airlie 24 * Alex Deucher 25 */ 26 #include <drm/drmP.h> 27 #include <drm/drm_edid.h> 28 #include <drm/drm_crtc_helper.h> 29 #include <drm/drm_fb_helper.h> 30 #include <drm/drm_dp_mst_helper.h> 31 #include <drm/radeon_drm.h> 32 #include "radeon.h" 33 #include "radeon_audio.h" 34 #include "atom.h" 35 36 #include <linux/pm_runtime.h> 37 #include <linux/vga_switcheroo.h> 38 39 static int radeon_dp_handle_hpd(struct drm_connector *connector) 40 { 41 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 42 int ret; 43 44 ret = radeon_dp_mst_check_status(radeon_connector); 45 if (ret == -EINVAL) 46 return 1; 47 return 0; 48 } 49 void radeon_connector_hotplug(struct drm_connector *connector) 50 { 51 struct drm_device *dev = connector->dev; 52 struct radeon_device *rdev = dev->dev_private; 53 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 54 55 if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) { 56 struct radeon_connector_atom_dig *dig_connector = 57 radeon_connector->con_priv; 58 59 if (radeon_connector->is_mst_connector) 60 return; 61 if (dig_connector->is_mst) { 62 radeon_dp_handle_hpd(connector); 63 return; 64 } 65 } 66 /* bail if the connector does not have hpd pin, e.g., 67 * VGA, TV, etc. 68 */ 69 if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) 70 return; 71 72 radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd); 73 74 /* if the connector is already off, don't turn it back on */ 75 /* FIXME: This access isn't protected by any locks. */ 76 if (connector->dpms != DRM_MODE_DPMS_ON) 77 return; 78 79 /* just deal with DP (not eDP) here. */ 80 if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) { 81 struct radeon_connector_atom_dig *dig_connector = 82 radeon_connector->con_priv; 83 84 /* if existing sink type was not DP no need to retrain */ 85 if (dig_connector->dp_sink_type != CONNECTOR_OBJECT_ID_DISPLAYPORT) 86 return; 87 88 /* first get sink type as it may be reset after (un)plug */ 89 dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector); 90 /* don't do anything if sink is not display port, i.e., 91 * passive dp->(dvi|hdmi) adaptor 92 */ 93 if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT && 94 radeon_hpd_sense(rdev, radeon_connector->hpd.hpd) && 95 radeon_dp_needs_link_train(radeon_connector)) { 96 /* Don't start link training before we have the DPCD */ 97 if (!radeon_dp_getdpcd(radeon_connector)) 98 return; 99 100 /* Turn the connector off and back on immediately, which 101 * will trigger link training 102 */ 103 drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF); 104 drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON); 105 } 106 } 107 } 108 109 static void radeon_property_change_mode(struct drm_encoder *encoder) 110 { 111 struct drm_crtc *crtc = encoder->crtc; 112 113 if (crtc && crtc->enabled) { 114 drm_crtc_helper_set_mode(crtc, &crtc->mode, 115 crtc->x, crtc->y, crtc->primary->fb); 116 } 117 } 118 119 int radeon_get_monitor_bpc(struct drm_connector *connector) 120 { 121 struct drm_device *dev = connector->dev; 122 struct radeon_device *rdev = dev->dev_private; 123 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 124 struct radeon_connector_atom_dig *dig_connector; 125 int bpc = 8; 126 int mode_clock, max_tmds_clock; 127 128 switch (connector->connector_type) { 129 case DRM_MODE_CONNECTOR_DVII: 130 case DRM_MODE_CONNECTOR_HDMIB: 131 if (radeon_connector->use_digital) { 132 if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) { 133 if (connector->display_info.bpc) 134 bpc = connector->display_info.bpc; 135 } 136 } 137 break; 138 case DRM_MODE_CONNECTOR_DVID: 139 case DRM_MODE_CONNECTOR_HDMIA: 140 if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) { 141 if (connector->display_info.bpc) 142 bpc = connector->display_info.bpc; 143 } 144 break; 145 case DRM_MODE_CONNECTOR_DisplayPort: 146 dig_connector = radeon_connector->con_priv; 147 if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) || 148 (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) || 149 drm_detect_hdmi_monitor(radeon_connector_edid(connector))) { 150 if (connector->display_info.bpc) 151 bpc = connector->display_info.bpc; 152 } 153 break; 154 case DRM_MODE_CONNECTOR_eDP: 155 case DRM_MODE_CONNECTOR_LVDS: 156 if (connector->display_info.bpc) 157 bpc = connector->display_info.bpc; 158 else if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev)) { 159 const struct drm_connector_helper_funcs *connector_funcs = 160 connector->helper_private; 161 struct drm_encoder *encoder = connector_funcs->best_encoder(connector); 162 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 163 struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; 164 165 if (dig->lcd_misc & ATOM_PANEL_MISC_V13_6BIT_PER_COLOR) 166 bpc = 6; 167 else if (dig->lcd_misc & ATOM_PANEL_MISC_V13_8BIT_PER_COLOR) 168 bpc = 8; 169 } 170 break; 171 } 172 173 if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) { 174 /* hdmi deep color only implemented on DCE4+ */ 175 if ((bpc > 8) && !ASIC_IS_DCE4(rdev)) { 176 DRM_DEBUG("%s: HDMI deep color %d bpc unsupported. Using 8 bpc.\n", 177 connector->name, bpc); 178 bpc = 8; 179 } 180 181 /* 182 * Pre DCE-8 hw can't handle > 12 bpc, and more than 12 bpc doesn't make 183 * much sense without support for > 12 bpc framebuffers. RGB 4:4:4 at 184 * 12 bpc is always supported on hdmi deep color sinks, as this is 185 * required by the HDMI-1.3 spec. Clamp to a safe 12 bpc maximum. 186 */ 187 if (bpc > 12) { 188 DRM_DEBUG("%s: HDMI deep color %d bpc unsupported. Using 12 bpc.\n", 189 connector->name, bpc); 190 bpc = 12; 191 } 192 193 /* Any defined maximum tmds clock limit we must not exceed? */ 194 if (connector->display_info.max_tmds_clock > 0) { 195 /* mode_clock is clock in kHz for mode to be modeset on this connector */ 196 mode_clock = radeon_connector->pixelclock_for_modeset; 197 198 /* Maximum allowable input clock in kHz */ 199 max_tmds_clock = connector->display_info.max_tmds_clock; 200 201 DRM_DEBUG("%s: hdmi mode dotclock %d kHz, max tmds input clock %d kHz.\n", 202 connector->name, mode_clock, max_tmds_clock); 203 204 /* Check if bpc is within clock limit. Try to degrade gracefully otherwise */ 205 if ((bpc == 12) && (mode_clock * 3/2 > max_tmds_clock)) { 206 if ((connector->display_info.edid_hdmi_dc_modes & DRM_EDID_HDMI_DC_30) && 207 (mode_clock * 5/4 <= max_tmds_clock)) 208 bpc = 10; 209 else 210 bpc = 8; 211 212 DRM_DEBUG("%s: HDMI deep color 12 bpc exceeds max tmds clock. Using %d bpc.\n", 213 connector->name, bpc); 214 } 215 216 if ((bpc == 10) && (mode_clock * 5/4 > max_tmds_clock)) { 217 bpc = 8; 218 DRM_DEBUG("%s: HDMI deep color 10 bpc exceeds max tmds clock. Using %d bpc.\n", 219 connector->name, bpc); 220 } 221 } 222 else if (bpc > 8) { 223 /* max_tmds_clock missing, but hdmi spec mandates it for deep color. */ 224 DRM_DEBUG("%s: Required max tmds clock for HDMI deep color missing. Using 8 bpc.\n", 225 connector->name); 226 bpc = 8; 227 } 228 } 229 230 if ((radeon_deep_color == 0) && (bpc > 8)) { 231 DRM_DEBUG("%s: Deep color disabled. Set radeon module param deep_color=1 to enable.\n", 232 connector->name); 233 bpc = 8; 234 } 235 236 DRM_DEBUG("%s: Display bpc=%d, returned bpc=%d\n", 237 connector->name, connector->display_info.bpc, bpc); 238 239 return bpc; 240 } 241 242 static void 243 radeon_connector_update_scratch_regs(struct drm_connector *connector, enum drm_connector_status status) 244 { 245 struct drm_device *dev = connector->dev; 246 struct radeon_device *rdev = dev->dev_private; 247 struct drm_encoder *best_encoder = NULL; 248 struct drm_encoder *encoder = NULL; 249 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private; 250 bool connected; 251 int i; 252 253 best_encoder = connector_funcs->best_encoder(connector); 254 255 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { 256 if (connector->encoder_ids[i] == 0) 257 break; 258 259 encoder = drm_encoder_find(connector->dev, NULL, 260 connector->encoder_ids[i]); 261 if (!encoder) 262 continue; 263 264 if ((encoder == best_encoder) && (status == connector_status_connected)) 265 connected = true; 266 else 267 connected = false; 268 269 if (rdev->is_atom_bios) 270 radeon_atombios_connected_scratch_regs(connector, encoder, connected); 271 else 272 radeon_combios_connected_scratch_regs(connector, encoder, connected); 273 274 } 275 } 276 277 static struct drm_encoder *radeon_find_encoder(struct drm_connector *connector, int encoder_type) 278 { 279 struct drm_encoder *encoder; 280 int i; 281 282 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { 283 if (connector->encoder_ids[i] == 0) 284 break; 285 286 encoder = drm_encoder_find(connector->dev, NULL, connector->encoder_ids[i]); 287 if (!encoder) 288 continue; 289 290 if (encoder->encoder_type == encoder_type) 291 return encoder; 292 } 293 return NULL; 294 } 295 296 struct edid *radeon_connector_edid(struct drm_connector *connector) 297 { 298 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 299 struct drm_property_blob *edid_blob = connector->edid_blob_ptr; 300 301 if (radeon_connector->edid) { 302 return radeon_connector->edid; 303 } else if (edid_blob) { 304 struct edid *edid = kmemdup(edid_blob->data, edid_blob->length, GFP_KERNEL); 305 if (edid) 306 radeon_connector->edid = edid; 307 } 308 return radeon_connector->edid; 309 } 310 311 static void radeon_connector_get_edid(struct drm_connector *connector) 312 { 313 struct drm_device *dev = connector->dev; 314 struct radeon_device *rdev = dev->dev_private; 315 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 316 317 if (radeon_connector->edid) 318 return; 319 320 /* on hw with routers, select right port */ 321 if (radeon_connector->router.ddc_valid) 322 radeon_router_select_ddc_port(radeon_connector); 323 324 if ((radeon_connector_encoder_get_dp_bridge_encoder_id(connector) != 325 ENCODER_OBJECT_ID_NONE) && 326 radeon_connector->ddc_bus->has_aux) { 327 radeon_connector->edid = drm_get_edid(connector, 328 &radeon_connector->ddc_bus->aux.ddc); 329 } else if ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) || 330 (connector->connector_type == DRM_MODE_CONNECTOR_eDP)) { 331 struct radeon_connector_atom_dig *dig = radeon_connector->con_priv; 332 333 if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT || 334 dig->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) && 335 radeon_connector->ddc_bus->has_aux) 336 radeon_connector->edid = drm_get_edid(&radeon_connector->base, 337 &radeon_connector->ddc_bus->aux.ddc); 338 else if (radeon_connector->ddc_bus) 339 radeon_connector->edid = drm_get_edid(&radeon_connector->base, 340 &radeon_connector->ddc_bus->adapter); 341 } else if (vga_switcheroo_handler_flags() & VGA_SWITCHEROO_CAN_SWITCH_DDC && 342 connector->connector_type == DRM_MODE_CONNECTOR_LVDS && 343 radeon_connector->ddc_bus) { 344 radeon_connector->edid = drm_get_edid_switcheroo(&radeon_connector->base, 345 &radeon_connector->ddc_bus->adapter); 346 } else if (radeon_connector->ddc_bus) { 347 radeon_connector->edid = drm_get_edid(&radeon_connector->base, 348 &radeon_connector->ddc_bus->adapter); 349 } 350 351 if (!radeon_connector->edid) { 352 /* don't fetch the edid from the vbios if ddc fails and runpm is 353 * enabled so we report disconnected. 354 */ 355 if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0)) 356 return; 357 358 if (rdev->is_atom_bios) { 359 /* some laptops provide a hardcoded edid in rom for LCDs */ 360 if (((connector->connector_type == DRM_MODE_CONNECTOR_LVDS) || 361 (connector->connector_type == DRM_MODE_CONNECTOR_eDP))) 362 radeon_connector->edid = radeon_bios_get_hardcoded_edid(rdev); 363 } else { 364 /* some servers provide a hardcoded edid in rom for KVMs */ 365 radeon_connector->edid = radeon_bios_get_hardcoded_edid(rdev); 366 } 367 } 368 } 369 370 static void radeon_connector_free_edid(struct drm_connector *connector) 371 { 372 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 373 374 if (radeon_connector->edid) { 375 kfree(radeon_connector->edid); 376 radeon_connector->edid = NULL; 377 } 378 } 379 380 static int radeon_ddc_get_modes(struct drm_connector *connector) 381 { 382 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 383 int ret; 384 385 if (radeon_connector->edid) { 386 drm_mode_connector_update_edid_property(connector, radeon_connector->edid); 387 ret = drm_add_edid_modes(connector, radeon_connector->edid); 388 return ret; 389 } 390 drm_mode_connector_update_edid_property(connector, NULL); 391 return 0; 392 } 393 394 static struct drm_encoder *radeon_best_single_encoder(struct drm_connector *connector) 395 { 396 int enc_id = connector->encoder_ids[0]; 397 /* pick the encoder ids */ 398 if (enc_id) 399 return drm_encoder_find(connector->dev, NULL, enc_id); 400 return NULL; 401 } 402 403 static void radeon_get_native_mode(struct drm_connector *connector) 404 { 405 struct drm_encoder *encoder = radeon_best_single_encoder(connector); 406 struct radeon_encoder *radeon_encoder; 407 408 if (encoder == NULL) 409 return; 410 411 radeon_encoder = to_radeon_encoder(encoder); 412 413 if (!list_empty(&connector->probed_modes)) { 414 struct drm_display_mode *preferred_mode = 415 list_first_entry(&connector->probed_modes, 416 struct drm_display_mode, head); 417 418 radeon_encoder->native_mode = *preferred_mode; 419 } else { 420 radeon_encoder->native_mode.clock = 0; 421 } 422 } 423 424 /* 425 * radeon_connector_analog_encoder_conflict_solve 426 * - search for other connectors sharing this encoder 427 * if priority is true, then set them disconnected if this is connected 428 * if priority is false, set us disconnected if they are connected 429 */ 430 static enum drm_connector_status 431 radeon_connector_analog_encoder_conflict_solve(struct drm_connector *connector, 432 struct drm_encoder *encoder, 433 enum drm_connector_status current_status, 434 bool priority) 435 { 436 struct drm_device *dev = connector->dev; 437 struct drm_connector *conflict; 438 struct radeon_connector *radeon_conflict; 439 int i; 440 441 list_for_each_entry(conflict, &dev->mode_config.connector_list, head) { 442 if (conflict == connector) 443 continue; 444 445 radeon_conflict = to_radeon_connector(conflict); 446 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { 447 if (conflict->encoder_ids[i] == 0) 448 break; 449 450 /* if the IDs match */ 451 if (conflict->encoder_ids[i] == encoder->base.id) { 452 if (conflict->status != connector_status_connected) 453 continue; 454 455 if (radeon_conflict->use_digital) 456 continue; 457 458 if (priority == true) { 459 DRM_DEBUG_KMS("1: conflicting encoders switching off %s\n", 460 conflict->name); 461 DRM_DEBUG_KMS("in favor of %s\n", 462 connector->name); 463 conflict->status = connector_status_disconnected; 464 radeon_connector_update_scratch_regs(conflict, connector_status_disconnected); 465 } else { 466 DRM_DEBUG_KMS("2: conflicting encoders switching off %s\n", 467 connector->name); 468 DRM_DEBUG_KMS("in favor of %s\n", 469 conflict->name); 470 current_status = connector_status_disconnected; 471 } 472 break; 473 } 474 } 475 } 476 return current_status; 477 478 } 479 480 static struct drm_display_mode *radeon_fp_native_mode(struct drm_encoder *encoder) 481 { 482 struct drm_device *dev = encoder->dev; 483 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 484 struct drm_display_mode *mode = NULL; 485 struct drm_display_mode *native_mode = &radeon_encoder->native_mode; 486 487 if (native_mode->hdisplay != 0 && 488 native_mode->vdisplay != 0 && 489 native_mode->clock != 0) { 490 mode = drm_mode_duplicate(dev, native_mode); 491 mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER; 492 drm_mode_set_name(mode); 493 494 DRM_DEBUG_KMS("Adding native panel mode %s\n", mode->name); 495 } else if (native_mode->hdisplay != 0 && 496 native_mode->vdisplay != 0) { 497 /* mac laptops without an edid */ 498 /* Note that this is not necessarily the exact panel mode, 499 * but an approximation based on the cvt formula. For these 500 * systems we should ideally read the mode info out of the 501 * registers or add a mode table, but this works and is much 502 * simpler. 503 */ 504 mode = drm_cvt_mode(dev, native_mode->hdisplay, native_mode->vdisplay, 60, true, false, false); 505 mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER; 506 DRM_DEBUG_KMS("Adding cvt approximation of native panel mode %s\n", mode->name); 507 } 508 return mode; 509 } 510 511 static void radeon_add_common_modes(struct drm_encoder *encoder, struct drm_connector *connector) 512 { 513 struct drm_device *dev = encoder->dev; 514 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 515 struct drm_display_mode *mode = NULL; 516 struct drm_display_mode *native_mode = &radeon_encoder->native_mode; 517 int i; 518 struct mode_size { 519 int w; 520 int h; 521 } common_modes[17] = { 522 { 640, 480}, 523 { 720, 480}, 524 { 800, 600}, 525 { 848, 480}, 526 {1024, 768}, 527 {1152, 768}, 528 {1280, 720}, 529 {1280, 800}, 530 {1280, 854}, 531 {1280, 960}, 532 {1280, 1024}, 533 {1440, 900}, 534 {1400, 1050}, 535 {1680, 1050}, 536 {1600, 1200}, 537 {1920, 1080}, 538 {1920, 1200} 539 }; 540 541 for (i = 0; i < 17; i++) { 542 if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT)) { 543 if (common_modes[i].w > 1024 || 544 common_modes[i].h > 768) 545 continue; 546 } 547 if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) { 548 if (common_modes[i].w > native_mode->hdisplay || 549 common_modes[i].h > native_mode->vdisplay || 550 (common_modes[i].w == native_mode->hdisplay && 551 common_modes[i].h == native_mode->vdisplay)) 552 continue; 553 } 554 if (common_modes[i].w < 320 || common_modes[i].h < 200) 555 continue; 556 557 mode = drm_cvt_mode(dev, common_modes[i].w, common_modes[i].h, 60, false, false, false); 558 drm_mode_probed_add(connector, mode); 559 } 560 } 561 562 static int radeon_connector_set_property(struct drm_connector *connector, struct drm_property *property, 563 uint64_t val) 564 { 565 struct drm_device *dev = connector->dev; 566 struct radeon_device *rdev = dev->dev_private; 567 struct drm_encoder *encoder; 568 struct radeon_encoder *radeon_encoder; 569 570 if (property == rdev->mode_info.coherent_mode_property) { 571 struct radeon_encoder_atom_dig *dig; 572 bool new_coherent_mode; 573 574 /* need to find digital encoder on connector */ 575 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); 576 if (!encoder) 577 return 0; 578 579 radeon_encoder = to_radeon_encoder(encoder); 580 581 if (!radeon_encoder->enc_priv) 582 return 0; 583 584 dig = radeon_encoder->enc_priv; 585 new_coherent_mode = val ? true : false; 586 if (dig->coherent_mode != new_coherent_mode) { 587 dig->coherent_mode = new_coherent_mode; 588 radeon_property_change_mode(&radeon_encoder->base); 589 } 590 } 591 592 if (property == rdev->mode_info.audio_property) { 593 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 594 /* need to find digital encoder on connector */ 595 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); 596 if (!encoder) 597 return 0; 598 599 radeon_encoder = to_radeon_encoder(encoder); 600 601 if (radeon_connector->audio != val) { 602 radeon_connector->audio = val; 603 radeon_property_change_mode(&radeon_encoder->base); 604 } 605 } 606 607 if (property == rdev->mode_info.dither_property) { 608 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 609 /* need to find digital encoder on connector */ 610 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); 611 if (!encoder) 612 return 0; 613 614 radeon_encoder = to_radeon_encoder(encoder); 615 616 if (radeon_connector->dither != val) { 617 radeon_connector->dither = val; 618 radeon_property_change_mode(&radeon_encoder->base); 619 } 620 } 621 622 if (property == rdev->mode_info.underscan_property) { 623 /* need to find digital encoder on connector */ 624 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); 625 if (!encoder) 626 return 0; 627 628 radeon_encoder = to_radeon_encoder(encoder); 629 630 if (radeon_encoder->underscan_type != val) { 631 radeon_encoder->underscan_type = val; 632 radeon_property_change_mode(&radeon_encoder->base); 633 } 634 } 635 636 if (property == rdev->mode_info.underscan_hborder_property) { 637 /* need to find digital encoder on connector */ 638 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); 639 if (!encoder) 640 return 0; 641 642 radeon_encoder = to_radeon_encoder(encoder); 643 644 if (radeon_encoder->underscan_hborder != val) { 645 radeon_encoder->underscan_hborder = val; 646 radeon_property_change_mode(&radeon_encoder->base); 647 } 648 } 649 650 if (property == rdev->mode_info.underscan_vborder_property) { 651 /* need to find digital encoder on connector */ 652 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); 653 if (!encoder) 654 return 0; 655 656 radeon_encoder = to_radeon_encoder(encoder); 657 658 if (radeon_encoder->underscan_vborder != val) { 659 radeon_encoder->underscan_vborder = val; 660 radeon_property_change_mode(&radeon_encoder->base); 661 } 662 } 663 664 if (property == rdev->mode_info.tv_std_property) { 665 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TVDAC); 666 if (!encoder) { 667 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_DAC); 668 } 669 670 if (!encoder) 671 return 0; 672 673 radeon_encoder = to_radeon_encoder(encoder); 674 if (!radeon_encoder->enc_priv) 675 return 0; 676 if (ASIC_IS_AVIVO(rdev) || radeon_r4xx_atom) { 677 struct radeon_encoder_atom_dac *dac_int; 678 dac_int = radeon_encoder->enc_priv; 679 dac_int->tv_std = val; 680 } else { 681 struct radeon_encoder_tv_dac *dac_int; 682 dac_int = radeon_encoder->enc_priv; 683 dac_int->tv_std = val; 684 } 685 radeon_property_change_mode(&radeon_encoder->base); 686 } 687 688 if (property == rdev->mode_info.load_detect_property) { 689 struct radeon_connector *radeon_connector = 690 to_radeon_connector(connector); 691 692 if (val == 0) 693 radeon_connector->dac_load_detect = false; 694 else 695 radeon_connector->dac_load_detect = true; 696 } 697 698 if (property == rdev->mode_info.tmds_pll_property) { 699 struct radeon_encoder_int_tmds *tmds = NULL; 700 bool ret = false; 701 /* need to find digital encoder on connector */ 702 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); 703 if (!encoder) 704 return 0; 705 706 radeon_encoder = to_radeon_encoder(encoder); 707 708 tmds = radeon_encoder->enc_priv; 709 if (!tmds) 710 return 0; 711 712 if (val == 0) { 713 if (rdev->is_atom_bios) 714 ret = radeon_atombios_get_tmds_info(radeon_encoder, tmds); 715 else 716 ret = radeon_legacy_get_tmds_info_from_combios(radeon_encoder, tmds); 717 } 718 if (val == 1 || ret == false) { 719 radeon_legacy_get_tmds_info_from_table(radeon_encoder, tmds); 720 } 721 radeon_property_change_mode(&radeon_encoder->base); 722 } 723 724 if (property == dev->mode_config.scaling_mode_property) { 725 enum radeon_rmx_type rmx_type; 726 727 if (connector->encoder) 728 radeon_encoder = to_radeon_encoder(connector->encoder); 729 else { 730 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private; 731 radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector)); 732 } 733 734 switch (val) { 735 default: 736 case DRM_MODE_SCALE_NONE: rmx_type = RMX_OFF; break; 737 case DRM_MODE_SCALE_CENTER: rmx_type = RMX_CENTER; break; 738 case DRM_MODE_SCALE_ASPECT: rmx_type = RMX_ASPECT; break; 739 case DRM_MODE_SCALE_FULLSCREEN: rmx_type = RMX_FULL; break; 740 } 741 if (radeon_encoder->rmx_type == rmx_type) 742 return 0; 743 744 if ((rmx_type != DRM_MODE_SCALE_NONE) && 745 (radeon_encoder->native_mode.clock == 0)) 746 return 0; 747 748 radeon_encoder->rmx_type = rmx_type; 749 750 radeon_property_change_mode(&radeon_encoder->base); 751 } 752 753 if (property == rdev->mode_info.output_csc_property) { 754 if (connector->encoder) 755 radeon_encoder = to_radeon_encoder(connector->encoder); 756 else { 757 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private; 758 radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector)); 759 } 760 761 if (radeon_encoder->output_csc == val) 762 return 0; 763 764 radeon_encoder->output_csc = val; 765 766 if (connector->encoder->crtc) { 767 struct drm_crtc *crtc = connector->encoder->crtc; 768 struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc); 769 770 radeon_crtc->output_csc = radeon_encoder->output_csc; 771 772 /* 773 * Our .gamma_set assumes the .gamma_store has been 774 * prefilled and don't care about its arguments. 775 */ 776 crtc->funcs->gamma_set(crtc, NULL, NULL, NULL, 0, NULL); 777 } 778 } 779 780 return 0; 781 } 782 783 static void radeon_fixup_lvds_native_mode(struct drm_encoder *encoder, 784 struct drm_connector *connector) 785 { 786 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 787 struct drm_display_mode *native_mode = &radeon_encoder->native_mode; 788 struct drm_display_mode *t, *mode; 789 790 /* If the EDID preferred mode doesn't match the native mode, use it */ 791 list_for_each_entry_safe(mode, t, &connector->probed_modes, head) { 792 if (mode->type & DRM_MODE_TYPE_PREFERRED) { 793 if (mode->hdisplay != native_mode->hdisplay || 794 mode->vdisplay != native_mode->vdisplay) 795 memcpy(native_mode, mode, sizeof(*mode)); 796 } 797 } 798 799 /* Try to get native mode details from EDID if necessary */ 800 if (!native_mode->clock) { 801 list_for_each_entry_safe(mode, t, &connector->probed_modes, head) { 802 if (mode->hdisplay == native_mode->hdisplay && 803 mode->vdisplay == native_mode->vdisplay) { 804 *native_mode = *mode; 805 drm_mode_set_crtcinfo(native_mode, CRTC_INTERLACE_HALVE_V); 806 DRM_DEBUG_KMS("Determined LVDS native mode details from EDID\n"); 807 break; 808 } 809 } 810 } 811 812 if (!native_mode->clock) { 813 DRM_DEBUG_KMS("No LVDS native mode details, disabling RMX\n"); 814 radeon_encoder->rmx_type = RMX_OFF; 815 } 816 } 817 818 static int radeon_lvds_get_modes(struct drm_connector *connector) 819 { 820 struct drm_encoder *encoder; 821 int ret = 0; 822 struct drm_display_mode *mode; 823 824 radeon_connector_get_edid(connector); 825 ret = radeon_ddc_get_modes(connector); 826 if (ret > 0) { 827 encoder = radeon_best_single_encoder(connector); 828 if (encoder) { 829 radeon_fixup_lvds_native_mode(encoder, connector); 830 /* add scaled modes */ 831 radeon_add_common_modes(encoder, connector); 832 } 833 return ret; 834 } 835 836 encoder = radeon_best_single_encoder(connector); 837 if (!encoder) 838 return 0; 839 840 /* we have no EDID modes */ 841 mode = radeon_fp_native_mode(encoder); 842 if (mode) { 843 ret = 1; 844 drm_mode_probed_add(connector, mode); 845 /* add the width/height from vbios tables if available */ 846 connector->display_info.width_mm = mode->width_mm; 847 connector->display_info.height_mm = mode->height_mm; 848 /* add scaled modes */ 849 radeon_add_common_modes(encoder, connector); 850 } 851 852 return ret; 853 } 854 855 static int radeon_lvds_mode_valid(struct drm_connector *connector, 856 struct drm_display_mode *mode) 857 { 858 struct drm_encoder *encoder = radeon_best_single_encoder(connector); 859 860 if ((mode->hdisplay < 320) || (mode->vdisplay < 240)) 861 return MODE_PANEL; 862 863 if (encoder) { 864 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 865 struct drm_display_mode *native_mode = &radeon_encoder->native_mode; 866 867 /* AVIVO hardware supports downscaling modes larger than the panel 868 * to the panel size, but I'm not sure this is desirable. 869 */ 870 if ((mode->hdisplay > native_mode->hdisplay) || 871 (mode->vdisplay > native_mode->vdisplay)) 872 return MODE_PANEL; 873 874 /* if scaling is disabled, block non-native modes */ 875 if (radeon_encoder->rmx_type == RMX_OFF) { 876 if ((mode->hdisplay != native_mode->hdisplay) || 877 (mode->vdisplay != native_mode->vdisplay)) 878 return MODE_PANEL; 879 } 880 } 881 882 return MODE_OK; 883 } 884 885 static enum drm_connector_status 886 radeon_lvds_detect(struct drm_connector *connector, bool force) 887 { 888 struct drm_device *dev = connector->dev; 889 struct radeon_device *rdev = dev->dev_private; 890 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 891 struct drm_encoder *encoder = radeon_best_single_encoder(connector); 892 enum drm_connector_status ret = connector_status_disconnected; 893 int r; 894 895 r = pm_runtime_get_sync(connector->dev->dev); 896 if (r < 0) 897 return connector_status_disconnected; 898 899 if (encoder) { 900 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 901 struct drm_display_mode *native_mode = &radeon_encoder->native_mode; 902 903 /* check if panel is valid */ 904 if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240) 905 ret = connector_status_connected; 906 /* don't fetch the edid from the vbios if ddc fails and runpm is 907 * enabled so we report disconnected. 908 */ 909 if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0)) 910 ret = connector_status_disconnected; 911 } 912 913 /* check for edid as well */ 914 radeon_connector_get_edid(connector); 915 if (radeon_connector->edid) 916 ret = connector_status_connected; 917 /* check acpi lid status ??? */ 918 919 radeon_connector_update_scratch_regs(connector, ret); 920 pm_runtime_mark_last_busy(connector->dev->dev); 921 pm_runtime_put_autosuspend(connector->dev->dev); 922 return ret; 923 } 924 925 static void radeon_connector_unregister(struct drm_connector *connector) 926 { 927 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 928 929 if (radeon_connector->ddc_bus && radeon_connector->ddc_bus->has_aux) { 930 drm_dp_aux_unregister(&radeon_connector->ddc_bus->aux); 931 radeon_connector->ddc_bus->has_aux = false; 932 } 933 } 934 935 static void radeon_connector_destroy(struct drm_connector *connector) 936 { 937 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 938 939 radeon_connector_free_edid(connector); 940 kfree(radeon_connector->con_priv); 941 drm_connector_unregister(connector); 942 drm_connector_cleanup(connector); 943 kfree(connector); 944 } 945 946 static int radeon_lvds_set_property(struct drm_connector *connector, 947 struct drm_property *property, 948 uint64_t value) 949 { 950 struct drm_device *dev = connector->dev; 951 struct radeon_encoder *radeon_encoder; 952 enum radeon_rmx_type rmx_type; 953 954 DRM_DEBUG_KMS("\n"); 955 if (property != dev->mode_config.scaling_mode_property) 956 return 0; 957 958 if (connector->encoder) 959 radeon_encoder = to_radeon_encoder(connector->encoder); 960 else { 961 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private; 962 radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector)); 963 } 964 965 switch (value) { 966 case DRM_MODE_SCALE_NONE: rmx_type = RMX_OFF; break; 967 case DRM_MODE_SCALE_CENTER: rmx_type = RMX_CENTER; break; 968 case DRM_MODE_SCALE_ASPECT: rmx_type = RMX_ASPECT; break; 969 default: 970 case DRM_MODE_SCALE_FULLSCREEN: rmx_type = RMX_FULL; break; 971 } 972 if (radeon_encoder->rmx_type == rmx_type) 973 return 0; 974 975 radeon_encoder->rmx_type = rmx_type; 976 977 radeon_property_change_mode(&radeon_encoder->base); 978 return 0; 979 } 980 981 982 static const struct drm_connector_helper_funcs radeon_lvds_connector_helper_funcs = { 983 .get_modes = radeon_lvds_get_modes, 984 .mode_valid = radeon_lvds_mode_valid, 985 .best_encoder = radeon_best_single_encoder, 986 }; 987 988 static const struct drm_connector_funcs radeon_lvds_connector_funcs = { 989 .dpms = drm_helper_connector_dpms, 990 .detect = radeon_lvds_detect, 991 .fill_modes = drm_helper_probe_single_connector_modes, 992 .early_unregister = radeon_connector_unregister, 993 .destroy = radeon_connector_destroy, 994 .set_property = radeon_lvds_set_property, 995 }; 996 997 static int radeon_vga_get_modes(struct drm_connector *connector) 998 { 999 int ret; 1000 1001 radeon_connector_get_edid(connector); 1002 ret = radeon_ddc_get_modes(connector); 1003 1004 radeon_get_native_mode(connector); 1005 1006 return ret; 1007 } 1008 1009 static int radeon_vga_mode_valid(struct drm_connector *connector, 1010 struct drm_display_mode *mode) 1011 { 1012 struct drm_device *dev = connector->dev; 1013 struct radeon_device *rdev = dev->dev_private; 1014 1015 /* XXX check mode bandwidth */ 1016 1017 if ((mode->clock / 10) > rdev->clock.max_pixel_clock) 1018 return MODE_CLOCK_HIGH; 1019 1020 return MODE_OK; 1021 } 1022 1023 static enum drm_connector_status 1024 radeon_vga_detect(struct drm_connector *connector, bool force) 1025 { 1026 struct drm_device *dev = connector->dev; 1027 struct radeon_device *rdev = dev->dev_private; 1028 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 1029 struct drm_encoder *encoder; 1030 const struct drm_encoder_helper_funcs *encoder_funcs; 1031 bool dret = false; 1032 enum drm_connector_status ret = connector_status_disconnected; 1033 int r; 1034 1035 r = pm_runtime_get_sync(connector->dev->dev); 1036 if (r < 0) 1037 return connector_status_disconnected; 1038 1039 encoder = radeon_best_single_encoder(connector); 1040 if (!encoder) 1041 ret = connector_status_disconnected; 1042 1043 if (radeon_connector->ddc_bus) 1044 dret = radeon_ddc_probe(radeon_connector, false); 1045 if (dret) { 1046 radeon_connector->detected_by_load = false; 1047 radeon_connector_free_edid(connector); 1048 radeon_connector_get_edid(connector); 1049 1050 if (!radeon_connector->edid) { 1051 DRM_ERROR("%s: probed a monitor but no|invalid EDID\n", 1052 connector->name); 1053 ret = connector_status_connected; 1054 } else { 1055 radeon_connector->use_digital = 1056 !!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL); 1057 1058 /* some oems have boards with separate digital and analog connectors 1059 * with a shared ddc line (often vga + hdmi) 1060 */ 1061 if (radeon_connector->use_digital && radeon_connector->shared_ddc) { 1062 radeon_connector_free_edid(connector); 1063 ret = connector_status_disconnected; 1064 } else { 1065 ret = connector_status_connected; 1066 } 1067 } 1068 } else { 1069 1070 /* if we aren't forcing don't do destructive polling */ 1071 if (!force) { 1072 /* only return the previous status if we last 1073 * detected a monitor via load. 1074 */ 1075 if (radeon_connector->detected_by_load) 1076 ret = connector->status; 1077 goto out; 1078 } 1079 1080 if (radeon_connector->dac_load_detect && encoder) { 1081 encoder_funcs = encoder->helper_private; 1082 ret = encoder_funcs->detect(encoder, connector); 1083 if (ret != connector_status_disconnected) 1084 radeon_connector->detected_by_load = true; 1085 } 1086 } 1087 1088 if (ret == connector_status_connected) 1089 ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true); 1090 1091 /* RN50 and some RV100 asics in servers often have a hardcoded EDID in the 1092 * vbios to deal with KVMs. If we have one and are not able to detect a monitor 1093 * by other means, assume the CRT is connected and use that EDID. 1094 */ 1095 if ((!rdev->is_atom_bios) && 1096 (ret == connector_status_disconnected) && 1097 rdev->mode_info.bios_hardcoded_edid_size) { 1098 ret = connector_status_connected; 1099 } 1100 1101 radeon_connector_update_scratch_regs(connector, ret); 1102 1103 out: 1104 pm_runtime_mark_last_busy(connector->dev->dev); 1105 pm_runtime_put_autosuspend(connector->dev->dev); 1106 1107 return ret; 1108 } 1109 1110 static const struct drm_connector_helper_funcs radeon_vga_connector_helper_funcs = { 1111 .get_modes = radeon_vga_get_modes, 1112 .mode_valid = radeon_vga_mode_valid, 1113 .best_encoder = radeon_best_single_encoder, 1114 }; 1115 1116 static const struct drm_connector_funcs radeon_vga_connector_funcs = { 1117 .dpms = drm_helper_connector_dpms, 1118 .detect = radeon_vga_detect, 1119 .fill_modes = drm_helper_probe_single_connector_modes, 1120 .early_unregister = radeon_connector_unregister, 1121 .destroy = radeon_connector_destroy, 1122 .set_property = radeon_connector_set_property, 1123 }; 1124 1125 static int radeon_tv_get_modes(struct drm_connector *connector) 1126 { 1127 struct drm_device *dev = connector->dev; 1128 struct radeon_device *rdev = dev->dev_private; 1129 struct drm_display_mode *tv_mode; 1130 struct drm_encoder *encoder; 1131 1132 encoder = radeon_best_single_encoder(connector); 1133 if (!encoder) 1134 return 0; 1135 1136 /* avivo chips can scale any mode */ 1137 if (rdev->family >= CHIP_RS600) 1138 /* add scaled modes */ 1139 radeon_add_common_modes(encoder, connector); 1140 else { 1141 /* only 800x600 is supported right now on pre-avivo chips */ 1142 tv_mode = drm_cvt_mode(dev, 800, 600, 60, false, false, false); 1143 tv_mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; 1144 drm_mode_probed_add(connector, tv_mode); 1145 } 1146 return 1; 1147 } 1148 1149 static int radeon_tv_mode_valid(struct drm_connector *connector, 1150 struct drm_display_mode *mode) 1151 { 1152 if ((mode->hdisplay > 1024) || (mode->vdisplay > 768)) 1153 return MODE_CLOCK_RANGE; 1154 return MODE_OK; 1155 } 1156 1157 static enum drm_connector_status 1158 radeon_tv_detect(struct drm_connector *connector, bool force) 1159 { 1160 struct drm_encoder *encoder; 1161 const struct drm_encoder_helper_funcs *encoder_funcs; 1162 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 1163 enum drm_connector_status ret = connector_status_disconnected; 1164 int r; 1165 1166 if (!radeon_connector->dac_load_detect) 1167 return ret; 1168 1169 r = pm_runtime_get_sync(connector->dev->dev); 1170 if (r < 0) 1171 return connector_status_disconnected; 1172 1173 encoder = radeon_best_single_encoder(connector); 1174 if (!encoder) 1175 ret = connector_status_disconnected; 1176 else { 1177 encoder_funcs = encoder->helper_private; 1178 ret = encoder_funcs->detect(encoder, connector); 1179 } 1180 if (ret == connector_status_connected) 1181 ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, false); 1182 radeon_connector_update_scratch_regs(connector, ret); 1183 pm_runtime_mark_last_busy(connector->dev->dev); 1184 pm_runtime_put_autosuspend(connector->dev->dev); 1185 return ret; 1186 } 1187 1188 static const struct drm_connector_helper_funcs radeon_tv_connector_helper_funcs = { 1189 .get_modes = radeon_tv_get_modes, 1190 .mode_valid = radeon_tv_mode_valid, 1191 .best_encoder = radeon_best_single_encoder, 1192 }; 1193 1194 static const struct drm_connector_funcs radeon_tv_connector_funcs = { 1195 .dpms = drm_helper_connector_dpms, 1196 .detect = radeon_tv_detect, 1197 .fill_modes = drm_helper_probe_single_connector_modes, 1198 .early_unregister = radeon_connector_unregister, 1199 .destroy = radeon_connector_destroy, 1200 .set_property = radeon_connector_set_property, 1201 }; 1202 1203 static bool radeon_check_hpd_status_unchanged(struct drm_connector *connector) 1204 { 1205 struct drm_device *dev = connector->dev; 1206 struct radeon_device *rdev = dev->dev_private; 1207 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 1208 enum drm_connector_status status; 1209 1210 /* We only trust HPD on R600 and newer ASICS. */ 1211 if (rdev->family >= CHIP_R600 1212 && radeon_connector->hpd.hpd != RADEON_HPD_NONE) { 1213 if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) 1214 status = connector_status_connected; 1215 else 1216 status = connector_status_disconnected; 1217 if (connector->status == status) 1218 return true; 1219 } 1220 1221 return false; 1222 } 1223 1224 /* 1225 * DVI is complicated 1226 * Do a DDC probe, if DDC probe passes, get the full EDID so 1227 * we can do analog/digital monitor detection at this point. 1228 * If the monitor is an analog monitor or we got no DDC, 1229 * we need to find the DAC encoder object for this connector. 1230 * If we got no DDC, we do load detection on the DAC encoder object. 1231 * If we got analog DDC or load detection passes on the DAC encoder 1232 * we have to check if this analog encoder is shared with anyone else (TV) 1233 * if its shared we have to set the other connector to disconnected. 1234 */ 1235 static enum drm_connector_status 1236 radeon_dvi_detect(struct drm_connector *connector, bool force) 1237 { 1238 struct drm_device *dev = connector->dev; 1239 struct radeon_device *rdev = dev->dev_private; 1240 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 1241 struct drm_encoder *encoder = NULL; 1242 const struct drm_encoder_helper_funcs *encoder_funcs; 1243 int i, r; 1244 enum drm_connector_status ret = connector_status_disconnected; 1245 bool dret = false, broken_edid = false; 1246 1247 r = pm_runtime_get_sync(connector->dev->dev); 1248 if (r < 0) 1249 return connector_status_disconnected; 1250 1251 if (radeon_connector->detected_hpd_without_ddc) { 1252 force = true; 1253 radeon_connector->detected_hpd_without_ddc = false; 1254 } 1255 1256 if (!force && radeon_check_hpd_status_unchanged(connector)) { 1257 ret = connector->status; 1258 goto exit; 1259 } 1260 1261 if (radeon_connector->ddc_bus) { 1262 dret = radeon_ddc_probe(radeon_connector, false); 1263 1264 /* Sometimes the pins required for the DDC probe on DVI 1265 * connectors don't make contact at the same time that the ones 1266 * for HPD do. If the DDC probe fails even though we had an HPD 1267 * signal, try again later */ 1268 if (!dret && !force && 1269 connector->status != connector_status_connected) { 1270 DRM_DEBUG_KMS("hpd detected without ddc, retrying in 1 second\n"); 1271 radeon_connector->detected_hpd_without_ddc = true; 1272 schedule_delayed_work(&rdev->hotplug_work, 1273 msecs_to_jiffies(1000)); 1274 goto exit; 1275 } 1276 } 1277 if (dret) { 1278 radeon_connector->detected_by_load = false; 1279 radeon_connector_free_edid(connector); 1280 radeon_connector_get_edid(connector); 1281 1282 if (!radeon_connector->edid) { 1283 DRM_ERROR("%s: probed a monitor but no|invalid EDID\n", 1284 connector->name); 1285 /* rs690 seems to have a problem with connectors not existing and always 1286 * return a block of 0's. If we see this just stop polling on this output */ 1287 if ((rdev->family == CHIP_RS690 || rdev->family == CHIP_RS740) && 1288 radeon_connector->base.null_edid_counter) { 1289 ret = connector_status_disconnected; 1290 DRM_ERROR("%s: detected RS690 floating bus bug, stopping ddc detect\n", 1291 connector->name); 1292 radeon_connector->ddc_bus = NULL; 1293 } else { 1294 ret = connector_status_connected; 1295 broken_edid = true; /* defer use_digital to later */ 1296 } 1297 } else { 1298 radeon_connector->use_digital = 1299 !!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL); 1300 1301 /* some oems have boards with separate digital and analog connectors 1302 * with a shared ddc line (often vga + hdmi) 1303 */ 1304 if ((!radeon_connector->use_digital) && radeon_connector->shared_ddc) { 1305 radeon_connector_free_edid(connector); 1306 ret = connector_status_disconnected; 1307 } else { 1308 ret = connector_status_connected; 1309 } 1310 /* This gets complicated. We have boards with VGA + HDMI with a 1311 * shared DDC line and we have boards with DVI-D + HDMI with a shared 1312 * DDC line. The latter is more complex because with DVI<->HDMI adapters 1313 * you don't really know what's connected to which port as both are digital. 1314 */ 1315 if (radeon_connector->shared_ddc && (ret == connector_status_connected)) { 1316 struct drm_connector *list_connector; 1317 struct radeon_connector *list_radeon_connector; 1318 list_for_each_entry(list_connector, &dev->mode_config.connector_list, head) { 1319 if (connector == list_connector) 1320 continue; 1321 list_radeon_connector = to_radeon_connector(list_connector); 1322 if (list_radeon_connector->shared_ddc && 1323 (list_radeon_connector->ddc_bus->rec.i2c_id == 1324 radeon_connector->ddc_bus->rec.i2c_id)) { 1325 /* cases where both connectors are digital */ 1326 if (list_connector->connector_type != DRM_MODE_CONNECTOR_VGA) { 1327 /* hpd is our only option in this case */ 1328 if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) { 1329 radeon_connector_free_edid(connector); 1330 ret = connector_status_disconnected; 1331 } 1332 } 1333 } 1334 } 1335 } 1336 } 1337 } 1338 1339 if ((ret == connector_status_connected) && (radeon_connector->use_digital == true)) 1340 goto out; 1341 1342 /* DVI-D and HDMI-A are digital only */ 1343 if ((connector->connector_type == DRM_MODE_CONNECTOR_DVID) || 1344 (connector->connector_type == DRM_MODE_CONNECTOR_HDMIA)) 1345 goto out; 1346 1347 /* if we aren't forcing don't do destructive polling */ 1348 if (!force) { 1349 /* only return the previous status if we last 1350 * detected a monitor via load. 1351 */ 1352 if (radeon_connector->detected_by_load) 1353 ret = connector->status; 1354 goto out; 1355 } 1356 1357 /* find analog encoder */ 1358 if (radeon_connector->dac_load_detect) { 1359 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { 1360 if (connector->encoder_ids[i] == 0) 1361 break; 1362 1363 encoder = drm_encoder_find(connector->dev, NULL, 1364 connector->encoder_ids[i]); 1365 if (!encoder) 1366 continue; 1367 1368 if (encoder->encoder_type != DRM_MODE_ENCODER_DAC && 1369 encoder->encoder_type != DRM_MODE_ENCODER_TVDAC) 1370 continue; 1371 1372 encoder_funcs = encoder->helper_private; 1373 if (encoder_funcs->detect) { 1374 if (!broken_edid) { 1375 if (ret != connector_status_connected) { 1376 /* deal with analog monitors without DDC */ 1377 ret = encoder_funcs->detect(encoder, connector); 1378 if (ret == connector_status_connected) { 1379 radeon_connector->use_digital = false; 1380 } 1381 if (ret != connector_status_disconnected) 1382 radeon_connector->detected_by_load = true; 1383 } 1384 } else { 1385 enum drm_connector_status lret; 1386 /* assume digital unless load detected otherwise */ 1387 radeon_connector->use_digital = true; 1388 lret = encoder_funcs->detect(encoder, connector); 1389 DRM_DEBUG_KMS("load_detect %x returned: %x\n",encoder->encoder_type,lret); 1390 if (lret == connector_status_connected) 1391 radeon_connector->use_digital = false; 1392 } 1393 break; 1394 } 1395 } 1396 } 1397 1398 if ((ret == connector_status_connected) && (radeon_connector->use_digital == false) && 1399 encoder) { 1400 ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true); 1401 } 1402 1403 /* RN50 and some RV100 asics in servers often have a hardcoded EDID in the 1404 * vbios to deal with KVMs. If we have one and are not able to detect a monitor 1405 * by other means, assume the DFP is connected and use that EDID. In most 1406 * cases the DVI port is actually a virtual KVM port connected to the service 1407 * processor. 1408 */ 1409 out: 1410 if ((!rdev->is_atom_bios) && 1411 (ret == connector_status_disconnected) && 1412 rdev->mode_info.bios_hardcoded_edid_size) { 1413 radeon_connector->use_digital = true; 1414 ret = connector_status_connected; 1415 } 1416 1417 /* updated in get modes as well since we need to know if it's analog or digital */ 1418 radeon_connector_update_scratch_regs(connector, ret); 1419 1420 if ((radeon_audio != 0) && radeon_connector->use_digital) { 1421 const struct drm_connector_helper_funcs *connector_funcs = 1422 connector->helper_private; 1423 1424 encoder = connector_funcs->best_encoder(connector); 1425 if (encoder && (encoder->encoder_type == DRM_MODE_ENCODER_TMDS)) { 1426 radeon_connector_get_edid(connector); 1427 radeon_audio_detect(connector, encoder, ret); 1428 } 1429 } 1430 1431 exit: 1432 pm_runtime_mark_last_busy(connector->dev->dev); 1433 pm_runtime_put_autosuspend(connector->dev->dev); 1434 1435 return ret; 1436 } 1437 1438 /* okay need to be smart in here about which encoder to pick */ 1439 static struct drm_encoder *radeon_dvi_encoder(struct drm_connector *connector) 1440 { 1441 int enc_id = connector->encoder_ids[0]; 1442 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 1443 struct drm_encoder *encoder; 1444 int i; 1445 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { 1446 if (connector->encoder_ids[i] == 0) 1447 break; 1448 1449 encoder = drm_encoder_find(connector->dev, NULL, connector->encoder_ids[i]); 1450 if (!encoder) 1451 continue; 1452 1453 if (radeon_connector->use_digital == true) { 1454 if (encoder->encoder_type == DRM_MODE_ENCODER_TMDS) 1455 return encoder; 1456 } else { 1457 if (encoder->encoder_type == DRM_MODE_ENCODER_DAC || 1458 encoder->encoder_type == DRM_MODE_ENCODER_TVDAC) 1459 return encoder; 1460 } 1461 } 1462 1463 /* see if we have a default encoder TODO */ 1464 1465 /* then check use digitial */ 1466 /* pick the first one */ 1467 if (enc_id) 1468 return drm_encoder_find(connector->dev, NULL, enc_id); 1469 return NULL; 1470 } 1471 1472 static void radeon_dvi_force(struct drm_connector *connector) 1473 { 1474 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 1475 if (connector->force == DRM_FORCE_ON) 1476 radeon_connector->use_digital = false; 1477 if (connector->force == DRM_FORCE_ON_DIGITAL) 1478 radeon_connector->use_digital = true; 1479 } 1480 1481 static int radeon_dvi_mode_valid(struct drm_connector *connector, 1482 struct drm_display_mode *mode) 1483 { 1484 struct drm_device *dev = connector->dev; 1485 struct radeon_device *rdev = dev->dev_private; 1486 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 1487 1488 /* XXX check mode bandwidth */ 1489 1490 /* clocks over 135 MHz have heat issues with DVI on RV100 */ 1491 if (radeon_connector->use_digital && 1492 (rdev->family == CHIP_RV100) && 1493 (mode->clock > 135000)) 1494 return MODE_CLOCK_HIGH; 1495 1496 if (radeon_connector->use_digital && (mode->clock > 165000)) { 1497 if ((radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I) || 1498 (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D) || 1499 (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_B)) 1500 return MODE_OK; 1501 else if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) { 1502 /* HDMI 1.3+ supports max clock of 340 Mhz */ 1503 if (mode->clock > 340000) 1504 return MODE_CLOCK_HIGH; 1505 else 1506 return MODE_OK; 1507 } else { 1508 return MODE_CLOCK_HIGH; 1509 } 1510 } 1511 1512 /* check against the max pixel clock */ 1513 if ((mode->clock / 10) > rdev->clock.max_pixel_clock) 1514 return MODE_CLOCK_HIGH; 1515 1516 return MODE_OK; 1517 } 1518 1519 static const struct drm_connector_helper_funcs radeon_dvi_connector_helper_funcs = { 1520 .get_modes = radeon_vga_get_modes, 1521 .mode_valid = radeon_dvi_mode_valid, 1522 .best_encoder = radeon_dvi_encoder, 1523 }; 1524 1525 static const struct drm_connector_funcs radeon_dvi_connector_funcs = { 1526 .dpms = drm_helper_connector_dpms, 1527 .detect = radeon_dvi_detect, 1528 .fill_modes = drm_helper_probe_single_connector_modes, 1529 .set_property = radeon_connector_set_property, 1530 .early_unregister = radeon_connector_unregister, 1531 .destroy = radeon_connector_destroy, 1532 .force = radeon_dvi_force, 1533 }; 1534 1535 static int radeon_dp_get_modes(struct drm_connector *connector) 1536 { 1537 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 1538 struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; 1539 struct drm_encoder *encoder = radeon_best_single_encoder(connector); 1540 int ret; 1541 1542 if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) || 1543 (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) { 1544 struct drm_display_mode *mode; 1545 1546 if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) { 1547 if (!radeon_dig_connector->edp_on) 1548 atombios_set_edp_panel_power(connector, 1549 ATOM_TRANSMITTER_ACTION_POWER_ON); 1550 radeon_connector_get_edid(connector); 1551 ret = radeon_ddc_get_modes(connector); 1552 if (!radeon_dig_connector->edp_on) 1553 atombios_set_edp_panel_power(connector, 1554 ATOM_TRANSMITTER_ACTION_POWER_OFF); 1555 } else { 1556 /* need to setup ddc on the bridge */ 1557 if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) != 1558 ENCODER_OBJECT_ID_NONE) { 1559 if (encoder) 1560 radeon_atom_ext_encoder_setup_ddc(encoder); 1561 } 1562 radeon_connector_get_edid(connector); 1563 ret = radeon_ddc_get_modes(connector); 1564 } 1565 1566 if (ret > 0) { 1567 if (encoder) { 1568 radeon_fixup_lvds_native_mode(encoder, connector); 1569 /* add scaled modes */ 1570 radeon_add_common_modes(encoder, connector); 1571 } 1572 return ret; 1573 } 1574 1575 if (!encoder) 1576 return 0; 1577 1578 /* we have no EDID modes */ 1579 mode = radeon_fp_native_mode(encoder); 1580 if (mode) { 1581 ret = 1; 1582 drm_mode_probed_add(connector, mode); 1583 /* add the width/height from vbios tables if available */ 1584 connector->display_info.width_mm = mode->width_mm; 1585 connector->display_info.height_mm = mode->height_mm; 1586 /* add scaled modes */ 1587 radeon_add_common_modes(encoder, connector); 1588 } 1589 } else { 1590 /* need to setup ddc on the bridge */ 1591 if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) != 1592 ENCODER_OBJECT_ID_NONE) { 1593 if (encoder) 1594 radeon_atom_ext_encoder_setup_ddc(encoder); 1595 } 1596 radeon_connector_get_edid(connector); 1597 ret = radeon_ddc_get_modes(connector); 1598 1599 radeon_get_native_mode(connector); 1600 } 1601 1602 return ret; 1603 } 1604 1605 u16 radeon_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *connector) 1606 { 1607 struct drm_encoder *encoder; 1608 struct radeon_encoder *radeon_encoder; 1609 int i; 1610 1611 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { 1612 if (connector->encoder_ids[i] == 0) 1613 break; 1614 1615 encoder = drm_encoder_find(connector->dev, NULL, connector->encoder_ids[i]); 1616 if (!encoder) 1617 continue; 1618 1619 radeon_encoder = to_radeon_encoder(encoder); 1620 1621 switch (radeon_encoder->encoder_id) { 1622 case ENCODER_OBJECT_ID_TRAVIS: 1623 case ENCODER_OBJECT_ID_NUTMEG: 1624 return radeon_encoder->encoder_id; 1625 default: 1626 break; 1627 } 1628 } 1629 1630 return ENCODER_OBJECT_ID_NONE; 1631 } 1632 1633 static bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector) 1634 { 1635 struct drm_encoder *encoder; 1636 struct radeon_encoder *radeon_encoder; 1637 int i; 1638 bool found = false; 1639 1640 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { 1641 if (connector->encoder_ids[i] == 0) 1642 break; 1643 1644 encoder = drm_encoder_find(connector->dev, NULL, connector->encoder_ids[i]); 1645 if (!encoder) 1646 continue; 1647 1648 radeon_encoder = to_radeon_encoder(encoder); 1649 if (radeon_encoder->caps & ATOM_ENCODER_CAP_RECORD_HBR2) 1650 found = true; 1651 } 1652 1653 return found; 1654 } 1655 1656 bool radeon_connector_is_dp12_capable(struct drm_connector *connector) 1657 { 1658 struct drm_device *dev = connector->dev; 1659 struct radeon_device *rdev = dev->dev_private; 1660 1661 if (ASIC_IS_DCE5(rdev) && 1662 (rdev->clock.default_dispclk >= 53900) && 1663 radeon_connector_encoder_is_hbr2(connector)) { 1664 return true; 1665 } 1666 1667 return false; 1668 } 1669 1670 static enum drm_connector_status 1671 radeon_dp_detect(struct drm_connector *connector, bool force) 1672 { 1673 struct drm_device *dev = connector->dev; 1674 struct radeon_device *rdev = dev->dev_private; 1675 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 1676 enum drm_connector_status ret = connector_status_disconnected; 1677 struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; 1678 struct drm_encoder *encoder = radeon_best_single_encoder(connector); 1679 int r; 1680 1681 if (radeon_dig_connector->is_mst) 1682 return connector_status_disconnected; 1683 1684 r = pm_runtime_get_sync(connector->dev->dev); 1685 if (r < 0) 1686 return connector_status_disconnected; 1687 1688 if (!force && radeon_check_hpd_status_unchanged(connector)) { 1689 ret = connector->status; 1690 goto out; 1691 } 1692 1693 radeon_connector_free_edid(connector); 1694 1695 if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) || 1696 (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) { 1697 if (encoder) { 1698 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 1699 struct drm_display_mode *native_mode = &radeon_encoder->native_mode; 1700 1701 /* check if panel is valid */ 1702 if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240) 1703 ret = connector_status_connected; 1704 /* don't fetch the edid from the vbios if ddc fails and runpm is 1705 * enabled so we report disconnected. 1706 */ 1707 if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0)) 1708 ret = connector_status_disconnected; 1709 } 1710 /* eDP is always DP */ 1711 radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT; 1712 if (!radeon_dig_connector->edp_on) 1713 atombios_set_edp_panel_power(connector, 1714 ATOM_TRANSMITTER_ACTION_POWER_ON); 1715 if (radeon_dp_getdpcd(radeon_connector)) 1716 ret = connector_status_connected; 1717 if (!radeon_dig_connector->edp_on) 1718 atombios_set_edp_panel_power(connector, 1719 ATOM_TRANSMITTER_ACTION_POWER_OFF); 1720 } else if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) != 1721 ENCODER_OBJECT_ID_NONE) { 1722 /* DP bridges are always DP */ 1723 radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT; 1724 /* get the DPCD from the bridge */ 1725 radeon_dp_getdpcd(radeon_connector); 1726 1727 if (encoder) { 1728 /* setup ddc on the bridge */ 1729 radeon_atom_ext_encoder_setup_ddc(encoder); 1730 /* bridge chips are always aux */ 1731 if (radeon_ddc_probe(radeon_connector, true)) /* try DDC */ 1732 ret = connector_status_connected; 1733 else if (radeon_connector->dac_load_detect) { /* try load detection */ 1734 const struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; 1735 ret = encoder_funcs->detect(encoder, connector); 1736 } 1737 } 1738 } else { 1739 radeon_dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector); 1740 if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) { 1741 ret = connector_status_connected; 1742 if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) { 1743 radeon_dp_getdpcd(radeon_connector); 1744 r = radeon_dp_mst_probe(radeon_connector); 1745 if (r == 1) 1746 ret = connector_status_disconnected; 1747 } 1748 } else { 1749 if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) { 1750 if (radeon_dp_getdpcd(radeon_connector)) { 1751 r = radeon_dp_mst_probe(radeon_connector); 1752 if (r == 1) 1753 ret = connector_status_disconnected; 1754 else 1755 ret = connector_status_connected; 1756 } 1757 } else { 1758 /* try non-aux ddc (DP to DVI/HDMI/etc. adapter) */ 1759 if (radeon_ddc_probe(radeon_connector, false)) 1760 ret = connector_status_connected; 1761 } 1762 } 1763 } 1764 1765 radeon_connector_update_scratch_regs(connector, ret); 1766 1767 if ((radeon_audio != 0) && encoder) { 1768 radeon_connector_get_edid(connector); 1769 radeon_audio_detect(connector, encoder, ret); 1770 } 1771 1772 out: 1773 pm_runtime_mark_last_busy(connector->dev->dev); 1774 pm_runtime_put_autosuspend(connector->dev->dev); 1775 1776 return ret; 1777 } 1778 1779 static int radeon_dp_mode_valid(struct drm_connector *connector, 1780 struct drm_display_mode *mode) 1781 { 1782 struct drm_device *dev = connector->dev; 1783 struct radeon_device *rdev = dev->dev_private; 1784 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 1785 struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; 1786 1787 /* XXX check mode bandwidth */ 1788 1789 if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) || 1790 (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) { 1791 struct drm_encoder *encoder = radeon_best_single_encoder(connector); 1792 1793 if ((mode->hdisplay < 320) || (mode->vdisplay < 240)) 1794 return MODE_PANEL; 1795 1796 if (encoder) { 1797 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 1798 struct drm_display_mode *native_mode = &radeon_encoder->native_mode; 1799 1800 /* AVIVO hardware supports downscaling modes larger than the panel 1801 * to the panel size, but I'm not sure this is desirable. 1802 */ 1803 if ((mode->hdisplay > native_mode->hdisplay) || 1804 (mode->vdisplay > native_mode->vdisplay)) 1805 return MODE_PANEL; 1806 1807 /* if scaling is disabled, block non-native modes */ 1808 if (radeon_encoder->rmx_type == RMX_OFF) { 1809 if ((mode->hdisplay != native_mode->hdisplay) || 1810 (mode->vdisplay != native_mode->vdisplay)) 1811 return MODE_PANEL; 1812 } 1813 } 1814 } else { 1815 if ((radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) || 1816 (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) { 1817 return radeon_dp_mode_valid_helper(connector, mode); 1818 } else { 1819 if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) { 1820 /* HDMI 1.3+ supports max clock of 340 Mhz */ 1821 if (mode->clock > 340000) 1822 return MODE_CLOCK_HIGH; 1823 } else { 1824 if (mode->clock > 165000) 1825 return MODE_CLOCK_HIGH; 1826 } 1827 } 1828 } 1829 1830 return MODE_OK; 1831 } 1832 1833 static const struct drm_connector_helper_funcs radeon_dp_connector_helper_funcs = { 1834 .get_modes = radeon_dp_get_modes, 1835 .mode_valid = radeon_dp_mode_valid, 1836 .best_encoder = radeon_dvi_encoder, 1837 }; 1838 1839 static const struct drm_connector_funcs radeon_dp_connector_funcs = { 1840 .dpms = drm_helper_connector_dpms, 1841 .detect = radeon_dp_detect, 1842 .fill_modes = drm_helper_probe_single_connector_modes, 1843 .set_property = radeon_connector_set_property, 1844 .early_unregister = radeon_connector_unregister, 1845 .destroy = radeon_connector_destroy, 1846 .force = radeon_dvi_force, 1847 }; 1848 1849 static const struct drm_connector_funcs radeon_edp_connector_funcs = { 1850 .dpms = drm_helper_connector_dpms, 1851 .detect = radeon_dp_detect, 1852 .fill_modes = drm_helper_probe_single_connector_modes, 1853 .set_property = radeon_lvds_set_property, 1854 .early_unregister = radeon_connector_unregister, 1855 .destroy = radeon_connector_destroy, 1856 .force = radeon_dvi_force, 1857 }; 1858 1859 static const struct drm_connector_funcs radeon_lvds_bridge_connector_funcs = { 1860 .dpms = drm_helper_connector_dpms, 1861 .detect = radeon_dp_detect, 1862 .fill_modes = drm_helper_probe_single_connector_modes, 1863 .set_property = radeon_lvds_set_property, 1864 .early_unregister = radeon_connector_unregister, 1865 .destroy = radeon_connector_destroy, 1866 .force = radeon_dvi_force, 1867 }; 1868 1869 void 1870 radeon_add_atom_connector(struct drm_device *dev, 1871 uint32_t connector_id, 1872 uint32_t supported_device, 1873 int connector_type, 1874 struct radeon_i2c_bus_rec *i2c_bus, 1875 uint32_t igp_lane_info, 1876 uint16_t connector_object_id, 1877 struct radeon_hpd *hpd, 1878 struct radeon_router *router) 1879 { 1880 struct radeon_device *rdev = dev->dev_private; 1881 struct drm_connector *connector; 1882 struct radeon_connector *radeon_connector; 1883 struct radeon_connector_atom_dig *radeon_dig_connector; 1884 struct drm_encoder *encoder; 1885 struct radeon_encoder *radeon_encoder; 1886 uint32_t subpixel_order = SubPixelNone; 1887 bool shared_ddc = false; 1888 bool is_dp_bridge = false; 1889 bool has_aux = false; 1890 1891 if (connector_type == DRM_MODE_CONNECTOR_Unknown) 1892 return; 1893 1894 /* if the user selected tv=0 don't try and add the connector */ 1895 if (((connector_type == DRM_MODE_CONNECTOR_SVIDEO) || 1896 (connector_type == DRM_MODE_CONNECTOR_Composite) || 1897 (connector_type == DRM_MODE_CONNECTOR_9PinDIN)) && 1898 (radeon_tv == 0)) 1899 return; 1900 1901 /* see if we already added it */ 1902 list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 1903 radeon_connector = to_radeon_connector(connector); 1904 if (radeon_connector->connector_id == connector_id) { 1905 radeon_connector->devices |= supported_device; 1906 return; 1907 } 1908 if (radeon_connector->ddc_bus && i2c_bus->valid) { 1909 if (radeon_connector->ddc_bus->rec.i2c_id == i2c_bus->i2c_id) { 1910 radeon_connector->shared_ddc = true; 1911 shared_ddc = true; 1912 } 1913 if (radeon_connector->router_bus && router->ddc_valid && 1914 (radeon_connector->router.router_id == router->router_id)) { 1915 radeon_connector->shared_ddc = false; 1916 shared_ddc = false; 1917 } 1918 } 1919 } 1920 1921 /* check if it's a dp bridge */ 1922 list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { 1923 radeon_encoder = to_radeon_encoder(encoder); 1924 if (radeon_encoder->devices & supported_device) { 1925 switch (radeon_encoder->encoder_id) { 1926 case ENCODER_OBJECT_ID_TRAVIS: 1927 case ENCODER_OBJECT_ID_NUTMEG: 1928 is_dp_bridge = true; 1929 break; 1930 default: 1931 break; 1932 } 1933 } 1934 } 1935 1936 radeon_connector = kzalloc(sizeof(struct radeon_connector), GFP_KERNEL); 1937 if (!radeon_connector) 1938 return; 1939 1940 connector = &radeon_connector->base; 1941 1942 radeon_connector->connector_id = connector_id; 1943 radeon_connector->devices = supported_device; 1944 radeon_connector->shared_ddc = shared_ddc; 1945 radeon_connector->connector_object_id = connector_object_id; 1946 radeon_connector->hpd = *hpd; 1947 1948 radeon_connector->router = *router; 1949 if (router->ddc_valid || router->cd_valid) { 1950 radeon_connector->router_bus = radeon_i2c_lookup(rdev, &router->i2c_info); 1951 if (!radeon_connector->router_bus) 1952 DRM_ERROR("Failed to assign router i2c bus! Check dmesg for i2c errors.\n"); 1953 } 1954 1955 if (is_dp_bridge) { 1956 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); 1957 if (!radeon_dig_connector) 1958 goto failed; 1959 radeon_dig_connector->igp_lane_info = igp_lane_info; 1960 radeon_connector->con_priv = radeon_dig_connector; 1961 if (i2c_bus->valid) { 1962 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); 1963 if (radeon_connector->ddc_bus) 1964 has_aux = true; 1965 else 1966 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); 1967 } 1968 switch (connector_type) { 1969 case DRM_MODE_CONNECTOR_VGA: 1970 case DRM_MODE_CONNECTOR_DVIA: 1971 default: 1972 drm_connector_init(dev, &radeon_connector->base, 1973 &radeon_dp_connector_funcs, connector_type); 1974 drm_connector_helper_add(&radeon_connector->base, 1975 &radeon_dp_connector_helper_funcs); 1976 connector->interlace_allowed = true; 1977 connector->doublescan_allowed = true; 1978 radeon_connector->dac_load_detect = true; 1979 drm_object_attach_property(&radeon_connector->base.base, 1980 rdev->mode_info.load_detect_property, 1981 1); 1982 drm_object_attach_property(&radeon_connector->base.base, 1983 dev->mode_config.scaling_mode_property, 1984 DRM_MODE_SCALE_NONE); 1985 if (ASIC_IS_DCE5(rdev)) 1986 drm_object_attach_property(&radeon_connector->base.base, 1987 rdev->mode_info.output_csc_property, 1988 RADEON_OUTPUT_CSC_BYPASS); 1989 break; 1990 case DRM_MODE_CONNECTOR_DVII: 1991 case DRM_MODE_CONNECTOR_DVID: 1992 case DRM_MODE_CONNECTOR_HDMIA: 1993 case DRM_MODE_CONNECTOR_HDMIB: 1994 case DRM_MODE_CONNECTOR_DisplayPort: 1995 drm_connector_init(dev, &radeon_connector->base, 1996 &radeon_dp_connector_funcs, connector_type); 1997 drm_connector_helper_add(&radeon_connector->base, 1998 &radeon_dp_connector_helper_funcs); 1999 drm_object_attach_property(&radeon_connector->base.base, 2000 rdev->mode_info.underscan_property, 2001 UNDERSCAN_OFF); 2002 drm_object_attach_property(&radeon_connector->base.base, 2003 rdev->mode_info.underscan_hborder_property, 2004 0); 2005 drm_object_attach_property(&radeon_connector->base.base, 2006 rdev->mode_info.underscan_vborder_property, 2007 0); 2008 2009 drm_object_attach_property(&radeon_connector->base.base, 2010 dev->mode_config.scaling_mode_property, 2011 DRM_MODE_SCALE_NONE); 2012 2013 drm_object_attach_property(&radeon_connector->base.base, 2014 rdev->mode_info.dither_property, 2015 RADEON_FMT_DITHER_DISABLE); 2016 2017 if (radeon_audio != 0) { 2018 drm_object_attach_property(&radeon_connector->base.base, 2019 rdev->mode_info.audio_property, 2020 RADEON_AUDIO_AUTO); 2021 radeon_connector->audio = RADEON_AUDIO_AUTO; 2022 } 2023 if (ASIC_IS_DCE5(rdev)) 2024 drm_object_attach_property(&radeon_connector->base.base, 2025 rdev->mode_info.output_csc_property, 2026 RADEON_OUTPUT_CSC_BYPASS); 2027 2028 subpixel_order = SubPixelHorizontalRGB; 2029 connector->interlace_allowed = true; 2030 if (connector_type == DRM_MODE_CONNECTOR_HDMIB) 2031 connector->doublescan_allowed = true; 2032 else 2033 connector->doublescan_allowed = false; 2034 if (connector_type == DRM_MODE_CONNECTOR_DVII) { 2035 radeon_connector->dac_load_detect = true; 2036 drm_object_attach_property(&radeon_connector->base.base, 2037 rdev->mode_info.load_detect_property, 2038 1); 2039 } 2040 break; 2041 case DRM_MODE_CONNECTOR_LVDS: 2042 case DRM_MODE_CONNECTOR_eDP: 2043 drm_connector_init(dev, &radeon_connector->base, 2044 &radeon_lvds_bridge_connector_funcs, connector_type); 2045 drm_connector_helper_add(&radeon_connector->base, 2046 &radeon_dp_connector_helper_funcs); 2047 drm_object_attach_property(&radeon_connector->base.base, 2048 dev->mode_config.scaling_mode_property, 2049 DRM_MODE_SCALE_FULLSCREEN); 2050 subpixel_order = SubPixelHorizontalRGB; 2051 connector->interlace_allowed = false; 2052 connector->doublescan_allowed = false; 2053 break; 2054 } 2055 } else { 2056 switch (connector_type) { 2057 case DRM_MODE_CONNECTOR_VGA: 2058 drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); 2059 drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); 2060 if (i2c_bus->valid) { 2061 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); 2062 if (!radeon_connector->ddc_bus) 2063 DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); 2064 } 2065 radeon_connector->dac_load_detect = true; 2066 drm_object_attach_property(&radeon_connector->base.base, 2067 rdev->mode_info.load_detect_property, 2068 1); 2069 if (ASIC_IS_AVIVO(rdev)) 2070 drm_object_attach_property(&radeon_connector->base.base, 2071 dev->mode_config.scaling_mode_property, 2072 DRM_MODE_SCALE_NONE); 2073 if (ASIC_IS_DCE5(rdev)) 2074 drm_object_attach_property(&radeon_connector->base.base, 2075 rdev->mode_info.output_csc_property, 2076 RADEON_OUTPUT_CSC_BYPASS); 2077 /* no HPD on analog connectors */ 2078 radeon_connector->hpd.hpd = RADEON_HPD_NONE; 2079 connector->interlace_allowed = true; 2080 connector->doublescan_allowed = true; 2081 break; 2082 case DRM_MODE_CONNECTOR_DVIA: 2083 drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); 2084 drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); 2085 if (i2c_bus->valid) { 2086 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); 2087 if (!radeon_connector->ddc_bus) 2088 DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); 2089 } 2090 radeon_connector->dac_load_detect = true; 2091 drm_object_attach_property(&radeon_connector->base.base, 2092 rdev->mode_info.load_detect_property, 2093 1); 2094 if (ASIC_IS_AVIVO(rdev)) 2095 drm_object_attach_property(&radeon_connector->base.base, 2096 dev->mode_config.scaling_mode_property, 2097 DRM_MODE_SCALE_NONE); 2098 if (ASIC_IS_DCE5(rdev)) 2099 drm_object_attach_property(&radeon_connector->base.base, 2100 rdev->mode_info.output_csc_property, 2101 RADEON_OUTPUT_CSC_BYPASS); 2102 /* no HPD on analog connectors */ 2103 radeon_connector->hpd.hpd = RADEON_HPD_NONE; 2104 connector->interlace_allowed = true; 2105 connector->doublescan_allowed = true; 2106 break; 2107 case DRM_MODE_CONNECTOR_DVII: 2108 case DRM_MODE_CONNECTOR_DVID: 2109 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); 2110 if (!radeon_dig_connector) 2111 goto failed; 2112 radeon_dig_connector->igp_lane_info = igp_lane_info; 2113 radeon_connector->con_priv = radeon_dig_connector; 2114 drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type); 2115 drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs); 2116 if (i2c_bus->valid) { 2117 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); 2118 if (!radeon_connector->ddc_bus) 2119 DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); 2120 } 2121 subpixel_order = SubPixelHorizontalRGB; 2122 drm_object_attach_property(&radeon_connector->base.base, 2123 rdev->mode_info.coherent_mode_property, 2124 1); 2125 if (ASIC_IS_AVIVO(rdev)) { 2126 drm_object_attach_property(&radeon_connector->base.base, 2127 rdev->mode_info.underscan_property, 2128 UNDERSCAN_OFF); 2129 drm_object_attach_property(&radeon_connector->base.base, 2130 rdev->mode_info.underscan_hborder_property, 2131 0); 2132 drm_object_attach_property(&radeon_connector->base.base, 2133 rdev->mode_info.underscan_vborder_property, 2134 0); 2135 drm_object_attach_property(&radeon_connector->base.base, 2136 rdev->mode_info.dither_property, 2137 RADEON_FMT_DITHER_DISABLE); 2138 drm_object_attach_property(&radeon_connector->base.base, 2139 dev->mode_config.scaling_mode_property, 2140 DRM_MODE_SCALE_NONE); 2141 } 2142 if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) { 2143 drm_object_attach_property(&radeon_connector->base.base, 2144 rdev->mode_info.audio_property, 2145 RADEON_AUDIO_AUTO); 2146 radeon_connector->audio = RADEON_AUDIO_AUTO; 2147 } 2148 if (connector_type == DRM_MODE_CONNECTOR_DVII) { 2149 radeon_connector->dac_load_detect = true; 2150 drm_object_attach_property(&radeon_connector->base.base, 2151 rdev->mode_info.load_detect_property, 2152 1); 2153 } 2154 if (ASIC_IS_DCE5(rdev)) 2155 drm_object_attach_property(&radeon_connector->base.base, 2156 rdev->mode_info.output_csc_property, 2157 RADEON_OUTPUT_CSC_BYPASS); 2158 connector->interlace_allowed = true; 2159 if (connector_type == DRM_MODE_CONNECTOR_DVII) 2160 connector->doublescan_allowed = true; 2161 else 2162 connector->doublescan_allowed = false; 2163 break; 2164 case DRM_MODE_CONNECTOR_HDMIA: 2165 case DRM_MODE_CONNECTOR_HDMIB: 2166 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); 2167 if (!radeon_dig_connector) 2168 goto failed; 2169 radeon_dig_connector->igp_lane_info = igp_lane_info; 2170 radeon_connector->con_priv = radeon_dig_connector; 2171 drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type); 2172 drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs); 2173 if (i2c_bus->valid) { 2174 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); 2175 if (!radeon_connector->ddc_bus) 2176 DRM_ERROR("HDMI: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); 2177 } 2178 drm_object_attach_property(&radeon_connector->base.base, 2179 rdev->mode_info.coherent_mode_property, 2180 1); 2181 if (ASIC_IS_AVIVO(rdev)) { 2182 drm_object_attach_property(&radeon_connector->base.base, 2183 rdev->mode_info.underscan_property, 2184 UNDERSCAN_OFF); 2185 drm_object_attach_property(&radeon_connector->base.base, 2186 rdev->mode_info.underscan_hborder_property, 2187 0); 2188 drm_object_attach_property(&radeon_connector->base.base, 2189 rdev->mode_info.underscan_vborder_property, 2190 0); 2191 drm_object_attach_property(&radeon_connector->base.base, 2192 rdev->mode_info.dither_property, 2193 RADEON_FMT_DITHER_DISABLE); 2194 drm_object_attach_property(&radeon_connector->base.base, 2195 dev->mode_config.scaling_mode_property, 2196 DRM_MODE_SCALE_NONE); 2197 } 2198 if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) { 2199 drm_object_attach_property(&radeon_connector->base.base, 2200 rdev->mode_info.audio_property, 2201 RADEON_AUDIO_AUTO); 2202 radeon_connector->audio = RADEON_AUDIO_AUTO; 2203 } 2204 if (ASIC_IS_DCE5(rdev)) 2205 drm_object_attach_property(&radeon_connector->base.base, 2206 rdev->mode_info.output_csc_property, 2207 RADEON_OUTPUT_CSC_BYPASS); 2208 subpixel_order = SubPixelHorizontalRGB; 2209 connector->interlace_allowed = true; 2210 if (connector_type == DRM_MODE_CONNECTOR_HDMIB) 2211 connector->doublescan_allowed = true; 2212 else 2213 connector->doublescan_allowed = false; 2214 break; 2215 case DRM_MODE_CONNECTOR_DisplayPort: 2216 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); 2217 if (!radeon_dig_connector) 2218 goto failed; 2219 radeon_dig_connector->igp_lane_info = igp_lane_info; 2220 radeon_connector->con_priv = radeon_dig_connector; 2221 drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type); 2222 drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs); 2223 if (i2c_bus->valid) { 2224 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); 2225 if (radeon_connector->ddc_bus) 2226 has_aux = true; 2227 else 2228 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); 2229 } 2230 subpixel_order = SubPixelHorizontalRGB; 2231 drm_object_attach_property(&radeon_connector->base.base, 2232 rdev->mode_info.coherent_mode_property, 2233 1); 2234 if (ASIC_IS_AVIVO(rdev)) { 2235 drm_object_attach_property(&radeon_connector->base.base, 2236 rdev->mode_info.underscan_property, 2237 UNDERSCAN_OFF); 2238 drm_object_attach_property(&radeon_connector->base.base, 2239 rdev->mode_info.underscan_hborder_property, 2240 0); 2241 drm_object_attach_property(&radeon_connector->base.base, 2242 rdev->mode_info.underscan_vborder_property, 2243 0); 2244 drm_object_attach_property(&radeon_connector->base.base, 2245 rdev->mode_info.dither_property, 2246 RADEON_FMT_DITHER_DISABLE); 2247 drm_object_attach_property(&radeon_connector->base.base, 2248 dev->mode_config.scaling_mode_property, 2249 DRM_MODE_SCALE_NONE); 2250 } 2251 if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) { 2252 drm_object_attach_property(&radeon_connector->base.base, 2253 rdev->mode_info.audio_property, 2254 RADEON_AUDIO_AUTO); 2255 radeon_connector->audio = RADEON_AUDIO_AUTO; 2256 } 2257 if (ASIC_IS_DCE5(rdev)) 2258 drm_object_attach_property(&radeon_connector->base.base, 2259 rdev->mode_info.output_csc_property, 2260 RADEON_OUTPUT_CSC_BYPASS); 2261 connector->interlace_allowed = true; 2262 /* in theory with a DP to VGA converter... */ 2263 connector->doublescan_allowed = false; 2264 break; 2265 case DRM_MODE_CONNECTOR_eDP: 2266 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); 2267 if (!radeon_dig_connector) 2268 goto failed; 2269 radeon_dig_connector->igp_lane_info = igp_lane_info; 2270 radeon_connector->con_priv = radeon_dig_connector; 2271 drm_connector_init(dev, &radeon_connector->base, &radeon_edp_connector_funcs, connector_type); 2272 drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs); 2273 if (i2c_bus->valid) { 2274 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); 2275 if (radeon_connector->ddc_bus) 2276 has_aux = true; 2277 else 2278 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); 2279 } 2280 drm_object_attach_property(&radeon_connector->base.base, 2281 dev->mode_config.scaling_mode_property, 2282 DRM_MODE_SCALE_FULLSCREEN); 2283 subpixel_order = SubPixelHorizontalRGB; 2284 connector->interlace_allowed = false; 2285 connector->doublescan_allowed = false; 2286 break; 2287 case DRM_MODE_CONNECTOR_SVIDEO: 2288 case DRM_MODE_CONNECTOR_Composite: 2289 case DRM_MODE_CONNECTOR_9PinDIN: 2290 drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type); 2291 drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs); 2292 radeon_connector->dac_load_detect = true; 2293 drm_object_attach_property(&radeon_connector->base.base, 2294 rdev->mode_info.load_detect_property, 2295 1); 2296 drm_object_attach_property(&radeon_connector->base.base, 2297 rdev->mode_info.tv_std_property, 2298 radeon_atombios_get_tv_info(rdev)); 2299 /* no HPD on analog connectors */ 2300 radeon_connector->hpd.hpd = RADEON_HPD_NONE; 2301 connector->interlace_allowed = false; 2302 connector->doublescan_allowed = false; 2303 break; 2304 case DRM_MODE_CONNECTOR_LVDS: 2305 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); 2306 if (!radeon_dig_connector) 2307 goto failed; 2308 radeon_dig_connector->igp_lane_info = igp_lane_info; 2309 radeon_connector->con_priv = radeon_dig_connector; 2310 drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type); 2311 drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs); 2312 if (i2c_bus->valid) { 2313 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); 2314 if (!radeon_connector->ddc_bus) 2315 DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); 2316 } 2317 drm_object_attach_property(&radeon_connector->base.base, 2318 dev->mode_config.scaling_mode_property, 2319 DRM_MODE_SCALE_FULLSCREEN); 2320 subpixel_order = SubPixelHorizontalRGB; 2321 connector->interlace_allowed = false; 2322 connector->doublescan_allowed = false; 2323 break; 2324 } 2325 } 2326 2327 if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) { 2328 if (i2c_bus->valid) { 2329 connector->polled = DRM_CONNECTOR_POLL_CONNECT | 2330 DRM_CONNECTOR_POLL_DISCONNECT; 2331 } 2332 } else 2333 connector->polled = DRM_CONNECTOR_POLL_HPD; 2334 2335 connector->display_info.subpixel_order = subpixel_order; 2336 drm_connector_register(connector); 2337 2338 if (has_aux) 2339 radeon_dp_aux_init(radeon_connector); 2340 2341 return; 2342 2343 failed: 2344 drm_connector_cleanup(connector); 2345 kfree(connector); 2346 } 2347 2348 void 2349 radeon_add_legacy_connector(struct drm_device *dev, 2350 uint32_t connector_id, 2351 uint32_t supported_device, 2352 int connector_type, 2353 struct radeon_i2c_bus_rec *i2c_bus, 2354 uint16_t connector_object_id, 2355 struct radeon_hpd *hpd) 2356 { 2357 struct radeon_device *rdev = dev->dev_private; 2358 struct drm_connector *connector; 2359 struct radeon_connector *radeon_connector; 2360 uint32_t subpixel_order = SubPixelNone; 2361 2362 if (connector_type == DRM_MODE_CONNECTOR_Unknown) 2363 return; 2364 2365 /* if the user selected tv=0 don't try and add the connector */ 2366 if (((connector_type == DRM_MODE_CONNECTOR_SVIDEO) || 2367 (connector_type == DRM_MODE_CONNECTOR_Composite) || 2368 (connector_type == DRM_MODE_CONNECTOR_9PinDIN)) && 2369 (radeon_tv == 0)) 2370 return; 2371 2372 /* see if we already added it */ 2373 list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 2374 radeon_connector = to_radeon_connector(connector); 2375 if (radeon_connector->connector_id == connector_id) { 2376 radeon_connector->devices |= supported_device; 2377 return; 2378 } 2379 } 2380 2381 radeon_connector = kzalloc(sizeof(struct radeon_connector), GFP_KERNEL); 2382 if (!radeon_connector) 2383 return; 2384 2385 connector = &radeon_connector->base; 2386 2387 radeon_connector->connector_id = connector_id; 2388 radeon_connector->devices = supported_device; 2389 radeon_connector->connector_object_id = connector_object_id; 2390 radeon_connector->hpd = *hpd; 2391 2392 switch (connector_type) { 2393 case DRM_MODE_CONNECTOR_VGA: 2394 drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); 2395 drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); 2396 if (i2c_bus->valid) { 2397 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); 2398 if (!radeon_connector->ddc_bus) 2399 DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); 2400 } 2401 radeon_connector->dac_load_detect = true; 2402 drm_object_attach_property(&radeon_connector->base.base, 2403 rdev->mode_info.load_detect_property, 2404 1); 2405 /* no HPD on analog connectors */ 2406 radeon_connector->hpd.hpd = RADEON_HPD_NONE; 2407 connector->interlace_allowed = true; 2408 connector->doublescan_allowed = true; 2409 break; 2410 case DRM_MODE_CONNECTOR_DVIA: 2411 drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); 2412 drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); 2413 if (i2c_bus->valid) { 2414 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); 2415 if (!radeon_connector->ddc_bus) 2416 DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); 2417 } 2418 radeon_connector->dac_load_detect = true; 2419 drm_object_attach_property(&radeon_connector->base.base, 2420 rdev->mode_info.load_detect_property, 2421 1); 2422 /* no HPD on analog connectors */ 2423 radeon_connector->hpd.hpd = RADEON_HPD_NONE; 2424 connector->interlace_allowed = true; 2425 connector->doublescan_allowed = true; 2426 break; 2427 case DRM_MODE_CONNECTOR_DVII: 2428 case DRM_MODE_CONNECTOR_DVID: 2429 drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type); 2430 drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs); 2431 if (i2c_bus->valid) { 2432 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); 2433 if (!radeon_connector->ddc_bus) 2434 DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); 2435 } 2436 if (connector_type == DRM_MODE_CONNECTOR_DVII) { 2437 radeon_connector->dac_load_detect = true; 2438 drm_object_attach_property(&radeon_connector->base.base, 2439 rdev->mode_info.load_detect_property, 2440 1); 2441 } 2442 subpixel_order = SubPixelHorizontalRGB; 2443 connector->interlace_allowed = true; 2444 if (connector_type == DRM_MODE_CONNECTOR_DVII) 2445 connector->doublescan_allowed = true; 2446 else 2447 connector->doublescan_allowed = false; 2448 break; 2449 case DRM_MODE_CONNECTOR_SVIDEO: 2450 case DRM_MODE_CONNECTOR_Composite: 2451 case DRM_MODE_CONNECTOR_9PinDIN: 2452 drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type); 2453 drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs); 2454 radeon_connector->dac_load_detect = true; 2455 /* RS400,RC410,RS480 chipset seems to report a lot 2456 * of false positive on load detect, we haven't yet 2457 * found a way to make load detect reliable on those 2458 * chipset, thus just disable it for TV. 2459 */ 2460 if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480) 2461 radeon_connector->dac_load_detect = false; 2462 drm_object_attach_property(&radeon_connector->base.base, 2463 rdev->mode_info.load_detect_property, 2464 radeon_connector->dac_load_detect); 2465 drm_object_attach_property(&radeon_connector->base.base, 2466 rdev->mode_info.tv_std_property, 2467 radeon_combios_get_tv_info(rdev)); 2468 /* no HPD on analog connectors */ 2469 radeon_connector->hpd.hpd = RADEON_HPD_NONE; 2470 connector->interlace_allowed = false; 2471 connector->doublescan_allowed = false; 2472 break; 2473 case DRM_MODE_CONNECTOR_LVDS: 2474 drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type); 2475 drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs); 2476 if (i2c_bus->valid) { 2477 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); 2478 if (!radeon_connector->ddc_bus) 2479 DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); 2480 } 2481 drm_object_attach_property(&radeon_connector->base.base, 2482 dev->mode_config.scaling_mode_property, 2483 DRM_MODE_SCALE_FULLSCREEN); 2484 subpixel_order = SubPixelHorizontalRGB; 2485 connector->interlace_allowed = false; 2486 connector->doublescan_allowed = false; 2487 break; 2488 } 2489 2490 if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) { 2491 if (i2c_bus->valid) { 2492 connector->polled = DRM_CONNECTOR_POLL_CONNECT | 2493 DRM_CONNECTOR_POLL_DISCONNECT; 2494 } 2495 } else 2496 connector->polled = DRM_CONNECTOR_POLL_HPD; 2497 2498 connector->display_info.subpixel_order = subpixel_order; 2499 drm_connector_register(connector); 2500 } 2501 2502 void radeon_setup_mst_connector(struct drm_device *dev) 2503 { 2504 struct radeon_device *rdev = dev->dev_private; 2505 struct drm_connector *connector; 2506 struct radeon_connector *radeon_connector; 2507 2508 if (!ASIC_IS_DCE5(rdev)) 2509 return; 2510 2511 if (radeon_mst == 0) 2512 return; 2513 2514 list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 2515 int ret; 2516 2517 radeon_connector = to_radeon_connector(connector); 2518 2519 if (connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort) 2520 continue; 2521 2522 ret = radeon_dp_mst_init(radeon_connector); 2523 } 2524 } 2525