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