1 /* 2 * Copyright (C) 2008 Maarten Maathuis. 3 * All Rights Reserved. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining 6 * a copy of this software and associated documentation files (the 7 * "Software"), to deal in the Software without restriction, including 8 * without limitation the rights to use, copy, modify, merge, publish, 9 * distribute, sublicense, and/or sell copies of the Software, and to 10 * permit persons to whom the Software is furnished to do so, subject to 11 * the following conditions: 12 * 13 * The above copyright notice and this permission notice (including the 14 * next paragraph) shall be included in all copies or substantial 15 * portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 20 * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 21 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 22 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 23 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24 * 25 */ 26 27 #include <acpi/button.h> 28 29 #include <linux/pm_runtime.h> 30 31 #include <drm/drmP.h> 32 #include <drm/drm_edid.h> 33 #include <drm/drm_crtc_helper.h> 34 35 #include "nouveau_reg.h" 36 #include "nouveau_drm.h" 37 #include "dispnv04/hw.h" 38 #include "nouveau_acpi.h" 39 40 #include "nouveau_display.h" 41 #include "nouveau_connector.h" 42 #include "nouveau_encoder.h" 43 #include "nouveau_crtc.h" 44 45 #include <nvif/event.h> 46 47 MODULE_PARM_DESC(tv_disable, "Disable TV-out detection"); 48 static int nouveau_tv_disable = 0; 49 module_param_named(tv_disable, nouveau_tv_disable, int, 0400); 50 51 MODULE_PARM_DESC(ignorelid, "Ignore ACPI lid status"); 52 static int nouveau_ignorelid = 0; 53 module_param_named(ignorelid, nouveau_ignorelid, int, 0400); 54 55 MODULE_PARM_DESC(duallink, "Allow dual-link TMDS (default: enabled)"); 56 static int nouveau_duallink = 1; 57 module_param_named(duallink, nouveau_duallink, int, 0400); 58 59 struct nouveau_encoder * 60 find_encoder(struct drm_connector *connector, int type) 61 { 62 struct drm_device *dev = connector->dev; 63 struct nouveau_encoder *nv_encoder; 64 struct drm_encoder *enc; 65 int i, id; 66 67 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { 68 id = connector->encoder_ids[i]; 69 if (!id) 70 break; 71 72 enc = drm_encoder_find(dev, id); 73 if (!enc) 74 continue; 75 nv_encoder = nouveau_encoder(enc); 76 77 if (type == DCB_OUTPUT_ANY || 78 (nv_encoder->dcb && nv_encoder->dcb->type == type)) 79 return nv_encoder; 80 } 81 82 return NULL; 83 } 84 85 struct nouveau_connector * 86 nouveau_encoder_connector_get(struct nouveau_encoder *encoder) 87 { 88 struct drm_device *dev = to_drm_encoder(encoder)->dev; 89 struct drm_connector *drm_connector; 90 91 list_for_each_entry(drm_connector, &dev->mode_config.connector_list, head) { 92 if (drm_connector->encoder == to_drm_encoder(encoder)) 93 return nouveau_connector(drm_connector); 94 } 95 96 return NULL; 97 } 98 99 static void 100 nouveau_connector_destroy(struct drm_connector *connector) 101 { 102 struct nouveau_connector *nv_connector = nouveau_connector(connector); 103 nvif_notify_fini(&nv_connector->hpd); 104 kfree(nv_connector->edid); 105 drm_connector_unregister(connector); 106 drm_connector_cleanup(connector); 107 if (nv_connector->aux.transfer) 108 drm_dp_aux_unregister(&nv_connector->aux); 109 kfree(connector); 110 } 111 112 static struct nouveau_encoder * 113 nouveau_connector_ddc_detect(struct drm_connector *connector) 114 { 115 struct drm_device *dev = connector->dev; 116 struct nouveau_connector *nv_connector = nouveau_connector(connector); 117 struct nouveau_drm *drm = nouveau_drm(dev); 118 struct nouveau_gpio *gpio = nvkm_gpio(&drm->device); 119 struct nouveau_encoder *nv_encoder; 120 struct drm_encoder *encoder; 121 int i, panel = -ENODEV; 122 123 /* eDP panels need powering on by us (if the VBIOS doesn't default it 124 * to on) before doing any AUX channel transactions. LVDS panel power 125 * is handled by the SOR itself, and not required for LVDS DDC. 126 */ 127 if (nv_connector->type == DCB_CONNECTOR_eDP) { 128 panel = gpio->get(gpio, 0, DCB_GPIO_PANEL_POWER, 0xff); 129 if (panel == 0) { 130 gpio->set(gpio, 0, DCB_GPIO_PANEL_POWER, 0xff, 1); 131 msleep(300); 132 } 133 } 134 135 for (i = 0; nv_encoder = NULL, i < DRM_CONNECTOR_MAX_ENCODER; i++) { 136 int id = connector->encoder_ids[i]; 137 if (id == 0) 138 break; 139 140 encoder = drm_encoder_find(dev, id); 141 if (!encoder) 142 continue; 143 nv_encoder = nouveau_encoder(encoder); 144 145 if (nv_encoder->dcb->type == DCB_OUTPUT_DP) { 146 int ret = nouveau_dp_detect(nv_encoder); 147 if (ret == 0) 148 break; 149 } else 150 if (nv_encoder->i2c) { 151 if (nv_probe_i2c(nv_encoder->i2c, 0x50)) 152 break; 153 } 154 } 155 156 /* eDP panel not detected, restore panel power GPIO to previous 157 * state to avoid confusing the SOR for other output types. 158 */ 159 if (!nv_encoder && panel == 0) 160 gpio->set(gpio, 0, DCB_GPIO_PANEL_POWER, 0xff, panel); 161 162 return nv_encoder; 163 } 164 165 static struct nouveau_encoder * 166 nouveau_connector_of_detect(struct drm_connector *connector) 167 { 168 #ifdef __powerpc__ 169 struct drm_device *dev = connector->dev; 170 struct nouveau_connector *nv_connector = nouveau_connector(connector); 171 struct nouveau_encoder *nv_encoder; 172 struct device_node *cn, *dn = pci_device_to_OF_node(dev->pdev); 173 174 if (!dn || 175 !((nv_encoder = find_encoder(connector, DCB_OUTPUT_TMDS)) || 176 (nv_encoder = find_encoder(connector, DCB_OUTPUT_ANALOG)))) 177 return NULL; 178 179 for_each_child_of_node(dn, cn) { 180 const char *name = of_get_property(cn, "name", NULL); 181 const void *edid = of_get_property(cn, "EDID", NULL); 182 int idx = name ? name[strlen(name) - 1] - 'A' : 0; 183 184 if (nv_encoder->dcb->i2c_index == idx && edid) { 185 nv_connector->edid = 186 kmemdup(edid, EDID_LENGTH, GFP_KERNEL); 187 of_node_put(cn); 188 return nv_encoder; 189 } 190 } 191 #endif 192 return NULL; 193 } 194 195 static void 196 nouveau_connector_set_encoder(struct drm_connector *connector, 197 struct nouveau_encoder *nv_encoder) 198 { 199 struct nouveau_connector *nv_connector = nouveau_connector(connector); 200 struct nouveau_drm *drm = nouveau_drm(connector->dev); 201 struct drm_device *dev = connector->dev; 202 203 if (nv_connector->detected_encoder == nv_encoder) 204 return; 205 nv_connector->detected_encoder = nv_encoder; 206 207 if (drm->device.info.family >= NV_DEVICE_INFO_V0_TESLA) { 208 connector->interlace_allowed = true; 209 connector->doublescan_allowed = true; 210 } else 211 if (nv_encoder->dcb->type == DCB_OUTPUT_LVDS || 212 nv_encoder->dcb->type == DCB_OUTPUT_TMDS) { 213 connector->doublescan_allowed = false; 214 connector->interlace_allowed = false; 215 } else { 216 connector->doublescan_allowed = true; 217 if (drm->device.info.family == NV_DEVICE_INFO_V0_KELVIN || 218 (drm->device.info.family == NV_DEVICE_INFO_V0_CELSIUS && 219 (dev->pdev->device & 0x0ff0) != 0x0100 && 220 (dev->pdev->device & 0x0ff0) != 0x0150)) 221 /* HW is broken */ 222 connector->interlace_allowed = false; 223 else 224 connector->interlace_allowed = true; 225 } 226 227 if (nv_connector->type == DCB_CONNECTOR_DVI_I) { 228 drm_object_property_set_value(&connector->base, 229 dev->mode_config.dvi_i_subconnector_property, 230 nv_encoder->dcb->type == DCB_OUTPUT_TMDS ? 231 DRM_MODE_SUBCONNECTOR_DVID : 232 DRM_MODE_SUBCONNECTOR_DVIA); 233 } 234 } 235 236 static enum drm_connector_status 237 nouveau_connector_detect(struct drm_connector *connector, bool force) 238 { 239 struct drm_device *dev = connector->dev; 240 struct nouveau_drm *drm = nouveau_drm(dev); 241 struct nouveau_connector *nv_connector = nouveau_connector(connector); 242 struct nouveau_encoder *nv_encoder = NULL; 243 struct nouveau_encoder *nv_partner; 244 struct nouveau_i2c_port *i2c; 245 int type; 246 int ret; 247 enum drm_connector_status conn_status = connector_status_disconnected; 248 249 /* Cleanup the previous EDID block. */ 250 if (nv_connector->edid) { 251 drm_mode_connector_update_edid_property(connector, NULL); 252 kfree(nv_connector->edid); 253 nv_connector->edid = NULL; 254 } 255 256 ret = pm_runtime_get_sync(connector->dev->dev); 257 if (ret < 0 && ret != -EACCES) 258 return conn_status; 259 260 nv_encoder = nouveau_connector_ddc_detect(connector); 261 if (nv_encoder && (i2c = nv_encoder->i2c) != NULL) { 262 nv_connector->edid = drm_get_edid(connector, &i2c->adapter); 263 drm_mode_connector_update_edid_property(connector, 264 nv_connector->edid); 265 if (!nv_connector->edid) { 266 NV_ERROR(drm, "DDC responded, but no EDID for %s\n", 267 connector->name); 268 goto detect_analog; 269 } 270 271 /* Override encoder type for DVI-I based on whether EDID 272 * says the display is digital or analog, both use the 273 * same i2c channel so the value returned from ddc_detect 274 * isn't necessarily correct. 275 */ 276 nv_partner = NULL; 277 if (nv_encoder->dcb->type == DCB_OUTPUT_TMDS) 278 nv_partner = find_encoder(connector, DCB_OUTPUT_ANALOG); 279 if (nv_encoder->dcb->type == DCB_OUTPUT_ANALOG) 280 nv_partner = find_encoder(connector, DCB_OUTPUT_TMDS); 281 282 if (nv_partner && ((nv_encoder->dcb->type == DCB_OUTPUT_ANALOG && 283 nv_partner->dcb->type == DCB_OUTPUT_TMDS) || 284 (nv_encoder->dcb->type == DCB_OUTPUT_TMDS && 285 nv_partner->dcb->type == DCB_OUTPUT_ANALOG))) { 286 if (nv_connector->edid->input & DRM_EDID_INPUT_DIGITAL) 287 type = DCB_OUTPUT_TMDS; 288 else 289 type = DCB_OUTPUT_ANALOG; 290 291 nv_encoder = find_encoder(connector, type); 292 } 293 294 nouveau_connector_set_encoder(connector, nv_encoder); 295 conn_status = connector_status_connected; 296 goto out; 297 } 298 299 nv_encoder = nouveau_connector_of_detect(connector); 300 if (nv_encoder) { 301 nouveau_connector_set_encoder(connector, nv_encoder); 302 conn_status = connector_status_connected; 303 goto out; 304 } 305 306 detect_analog: 307 nv_encoder = find_encoder(connector, DCB_OUTPUT_ANALOG); 308 if (!nv_encoder && !nouveau_tv_disable) 309 nv_encoder = find_encoder(connector, DCB_OUTPUT_TV); 310 if (nv_encoder && force) { 311 struct drm_encoder *encoder = to_drm_encoder(nv_encoder); 312 struct drm_encoder_helper_funcs *helper = 313 encoder->helper_private; 314 315 if (helper->detect(encoder, connector) == 316 connector_status_connected) { 317 nouveau_connector_set_encoder(connector, nv_encoder); 318 conn_status = connector_status_connected; 319 goto out; 320 } 321 322 } 323 324 out: 325 326 pm_runtime_mark_last_busy(connector->dev->dev); 327 pm_runtime_put_autosuspend(connector->dev->dev); 328 329 return conn_status; 330 } 331 332 static enum drm_connector_status 333 nouveau_connector_detect_lvds(struct drm_connector *connector, bool force) 334 { 335 struct drm_device *dev = connector->dev; 336 struct nouveau_drm *drm = nouveau_drm(dev); 337 struct nouveau_connector *nv_connector = nouveau_connector(connector); 338 struct nouveau_encoder *nv_encoder = NULL; 339 enum drm_connector_status status = connector_status_disconnected; 340 341 /* Cleanup the previous EDID block. */ 342 if (nv_connector->edid) { 343 drm_mode_connector_update_edid_property(connector, NULL); 344 kfree(nv_connector->edid); 345 nv_connector->edid = NULL; 346 } 347 348 nv_encoder = find_encoder(connector, DCB_OUTPUT_LVDS); 349 if (!nv_encoder) 350 return connector_status_disconnected; 351 352 /* Try retrieving EDID via DDC */ 353 if (!drm->vbios.fp_no_ddc) { 354 status = nouveau_connector_detect(connector, force); 355 if (status == connector_status_connected) 356 goto out; 357 } 358 359 /* On some laptops (Sony, i'm looking at you) there appears to 360 * be no direct way of accessing the panel's EDID. The only 361 * option available to us appears to be to ask ACPI for help.. 362 * 363 * It's important this check's before trying straps, one of the 364 * said manufacturer's laptops are configured in such a way 365 * the nouveau decides an entry in the VBIOS FP mode table is 366 * valid - it's not (rh#613284) 367 */ 368 if (nv_encoder->dcb->lvdsconf.use_acpi_for_edid) { 369 if ((nv_connector->edid = nouveau_acpi_edid(dev, connector))) { 370 status = connector_status_connected; 371 goto out; 372 } 373 } 374 375 /* If no EDID found above, and the VBIOS indicates a hardcoded 376 * modeline is avalilable for the panel, set it as the panel's 377 * native mode and exit. 378 */ 379 if (nouveau_bios_fp_mode(dev, NULL) && (drm->vbios.fp_no_ddc || 380 nv_encoder->dcb->lvdsconf.use_straps_for_mode)) { 381 status = connector_status_connected; 382 goto out; 383 } 384 385 /* Still nothing, some VBIOS images have a hardcoded EDID block 386 * stored for the panel stored in them. 387 */ 388 if (!drm->vbios.fp_no_ddc) { 389 struct edid *edid = 390 (struct edid *)nouveau_bios_embedded_edid(dev); 391 if (edid) { 392 nv_connector->edid = 393 kmemdup(edid, EDID_LENGTH, GFP_KERNEL); 394 if (nv_connector->edid) 395 status = connector_status_connected; 396 } 397 } 398 399 out: 400 #if defined(CONFIG_ACPI_BUTTON) || \ 401 (defined(CONFIG_ACPI_BUTTON_MODULE) && defined(MODULE)) 402 if (status == connector_status_connected && 403 !nouveau_ignorelid && !acpi_lid_open()) 404 status = connector_status_unknown; 405 #endif 406 407 drm_mode_connector_update_edid_property(connector, nv_connector->edid); 408 nouveau_connector_set_encoder(connector, nv_encoder); 409 return status; 410 } 411 412 static void 413 nouveau_connector_force(struct drm_connector *connector) 414 { 415 struct nouveau_drm *drm = nouveau_drm(connector->dev); 416 struct nouveau_connector *nv_connector = nouveau_connector(connector); 417 struct nouveau_encoder *nv_encoder; 418 int type; 419 420 if (nv_connector->type == DCB_CONNECTOR_DVI_I) { 421 if (connector->force == DRM_FORCE_ON_DIGITAL) 422 type = DCB_OUTPUT_TMDS; 423 else 424 type = DCB_OUTPUT_ANALOG; 425 } else 426 type = DCB_OUTPUT_ANY; 427 428 nv_encoder = find_encoder(connector, type); 429 if (!nv_encoder) { 430 NV_ERROR(drm, "can't find encoder to force %s on!\n", 431 connector->name); 432 connector->status = connector_status_disconnected; 433 return; 434 } 435 436 nouveau_connector_set_encoder(connector, nv_encoder); 437 } 438 439 static int 440 nouveau_connector_set_property(struct drm_connector *connector, 441 struct drm_property *property, uint64_t value) 442 { 443 struct nouveau_display *disp = nouveau_display(connector->dev); 444 struct nouveau_connector *nv_connector = nouveau_connector(connector); 445 struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder; 446 struct drm_encoder *encoder = to_drm_encoder(nv_encoder); 447 struct drm_device *dev = connector->dev; 448 struct nouveau_crtc *nv_crtc; 449 int ret; 450 451 nv_crtc = NULL; 452 if (connector->encoder && connector->encoder->crtc) 453 nv_crtc = nouveau_crtc(connector->encoder->crtc); 454 455 /* Scaling mode */ 456 if (property == dev->mode_config.scaling_mode_property) { 457 bool modeset = false; 458 459 switch (value) { 460 case DRM_MODE_SCALE_NONE: 461 case DRM_MODE_SCALE_FULLSCREEN: 462 case DRM_MODE_SCALE_CENTER: 463 case DRM_MODE_SCALE_ASPECT: 464 break; 465 default: 466 return -EINVAL; 467 } 468 469 /* LVDS always needs gpu scaling */ 470 if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS && 471 value == DRM_MODE_SCALE_NONE) 472 return -EINVAL; 473 474 /* Changing between GPU and panel scaling requires a full 475 * modeset 476 */ 477 if ((nv_connector->scaling_mode == DRM_MODE_SCALE_NONE) || 478 (value == DRM_MODE_SCALE_NONE)) 479 modeset = true; 480 nv_connector->scaling_mode = value; 481 482 if (!nv_crtc) 483 return 0; 484 485 if (modeset || !nv_crtc->set_scale) { 486 ret = drm_crtc_helper_set_mode(&nv_crtc->base, 487 &nv_crtc->base.mode, 488 nv_crtc->base.x, 489 nv_crtc->base.y, NULL); 490 if (!ret) 491 return -EINVAL; 492 } else { 493 ret = nv_crtc->set_scale(nv_crtc, true); 494 if (ret) 495 return ret; 496 } 497 498 return 0; 499 } 500 501 /* Underscan */ 502 if (property == disp->underscan_property) { 503 if (nv_connector->underscan != value) { 504 nv_connector->underscan = value; 505 if (!nv_crtc || !nv_crtc->set_scale) 506 return 0; 507 508 return nv_crtc->set_scale(nv_crtc, true); 509 } 510 511 return 0; 512 } 513 514 if (property == disp->underscan_hborder_property) { 515 if (nv_connector->underscan_hborder != value) { 516 nv_connector->underscan_hborder = value; 517 if (!nv_crtc || !nv_crtc->set_scale) 518 return 0; 519 520 return nv_crtc->set_scale(nv_crtc, true); 521 } 522 523 return 0; 524 } 525 526 if (property == disp->underscan_vborder_property) { 527 if (nv_connector->underscan_vborder != value) { 528 nv_connector->underscan_vborder = value; 529 if (!nv_crtc || !nv_crtc->set_scale) 530 return 0; 531 532 return nv_crtc->set_scale(nv_crtc, true); 533 } 534 535 return 0; 536 } 537 538 /* Dithering */ 539 if (property == disp->dithering_mode) { 540 nv_connector->dithering_mode = value; 541 if (!nv_crtc || !nv_crtc->set_dither) 542 return 0; 543 544 return nv_crtc->set_dither(nv_crtc, true); 545 } 546 547 if (property == disp->dithering_depth) { 548 nv_connector->dithering_depth = value; 549 if (!nv_crtc || !nv_crtc->set_dither) 550 return 0; 551 552 return nv_crtc->set_dither(nv_crtc, true); 553 } 554 555 if (nv_crtc && nv_crtc->set_color_vibrance) { 556 /* Hue */ 557 if (property == disp->vibrant_hue_property) { 558 nv_crtc->vibrant_hue = value - 90; 559 return nv_crtc->set_color_vibrance(nv_crtc, true); 560 } 561 /* Saturation */ 562 if (property == disp->color_vibrance_property) { 563 nv_crtc->color_vibrance = value - 100; 564 return nv_crtc->set_color_vibrance(nv_crtc, true); 565 } 566 } 567 568 if (nv_encoder && nv_encoder->dcb->type == DCB_OUTPUT_TV) 569 return get_slave_funcs(encoder)->set_property( 570 encoder, connector, property, value); 571 572 return -EINVAL; 573 } 574 575 static struct drm_display_mode * 576 nouveau_connector_native_mode(struct drm_connector *connector) 577 { 578 struct drm_connector_helper_funcs *helper = connector->helper_private; 579 struct nouveau_drm *drm = nouveau_drm(connector->dev); 580 struct nouveau_connector *nv_connector = nouveau_connector(connector); 581 struct drm_device *dev = connector->dev; 582 struct drm_display_mode *mode, *largest = NULL; 583 int high_w = 0, high_h = 0, high_v = 0; 584 585 list_for_each_entry(mode, &nv_connector->base.probed_modes, head) { 586 mode->vrefresh = drm_mode_vrefresh(mode); 587 if (helper->mode_valid(connector, mode) != MODE_OK || 588 (mode->flags & DRM_MODE_FLAG_INTERLACE)) 589 continue; 590 591 /* Use preferred mode if there is one.. */ 592 if (mode->type & DRM_MODE_TYPE_PREFERRED) { 593 NV_DEBUG(drm, "native mode from preferred\n"); 594 return drm_mode_duplicate(dev, mode); 595 } 596 597 /* Otherwise, take the resolution with the largest width, then 598 * height, then vertical refresh 599 */ 600 if (mode->hdisplay < high_w) 601 continue; 602 603 if (mode->hdisplay == high_w && mode->vdisplay < high_h) 604 continue; 605 606 if (mode->hdisplay == high_w && mode->vdisplay == high_h && 607 mode->vrefresh < high_v) 608 continue; 609 610 high_w = mode->hdisplay; 611 high_h = mode->vdisplay; 612 high_v = mode->vrefresh; 613 largest = mode; 614 } 615 616 NV_DEBUG(drm, "native mode from largest: %dx%d@%d\n", 617 high_w, high_h, high_v); 618 return largest ? drm_mode_duplicate(dev, largest) : NULL; 619 } 620 621 struct moderec { 622 int hdisplay; 623 int vdisplay; 624 }; 625 626 static struct moderec scaler_modes[] = { 627 { 1920, 1200 }, 628 { 1920, 1080 }, 629 { 1680, 1050 }, 630 { 1600, 1200 }, 631 { 1400, 1050 }, 632 { 1280, 1024 }, 633 { 1280, 960 }, 634 { 1152, 864 }, 635 { 1024, 768 }, 636 { 800, 600 }, 637 { 720, 400 }, 638 { 640, 480 }, 639 { 640, 400 }, 640 { 640, 350 }, 641 {} 642 }; 643 644 static int 645 nouveau_connector_scaler_modes_add(struct drm_connector *connector) 646 { 647 struct nouveau_connector *nv_connector = nouveau_connector(connector); 648 struct drm_display_mode *native = nv_connector->native_mode, *m; 649 struct drm_device *dev = connector->dev; 650 struct moderec *mode = &scaler_modes[0]; 651 int modes = 0; 652 653 if (!native) 654 return 0; 655 656 while (mode->hdisplay) { 657 if (mode->hdisplay <= native->hdisplay && 658 mode->vdisplay <= native->vdisplay) { 659 m = drm_cvt_mode(dev, mode->hdisplay, mode->vdisplay, 660 drm_mode_vrefresh(native), false, 661 false, false); 662 if (!m) 663 continue; 664 665 m->type |= DRM_MODE_TYPE_DRIVER; 666 667 drm_mode_probed_add(connector, m); 668 modes++; 669 } 670 671 mode++; 672 } 673 674 return modes; 675 } 676 677 static void 678 nouveau_connector_detect_depth(struct drm_connector *connector) 679 { 680 struct nouveau_drm *drm = nouveau_drm(connector->dev); 681 struct nouveau_connector *nv_connector = nouveau_connector(connector); 682 struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder; 683 struct nvbios *bios = &drm->vbios; 684 struct drm_display_mode *mode = nv_connector->native_mode; 685 bool duallink; 686 687 /* if the edid is feeling nice enough to provide this info, use it */ 688 if (nv_connector->edid && connector->display_info.bpc) 689 return; 690 691 /* EDID 1.4 is *supposed* to be supported on eDP, but, Apple... */ 692 if (nv_connector->type == DCB_CONNECTOR_eDP) { 693 connector->display_info.bpc = 6; 694 return; 695 } 696 697 /* we're out of options unless we're LVDS, default to 8bpc */ 698 if (nv_encoder->dcb->type != DCB_OUTPUT_LVDS) { 699 connector->display_info.bpc = 8; 700 return; 701 } 702 703 connector->display_info.bpc = 6; 704 705 /* LVDS: panel straps */ 706 if (bios->fp_no_ddc) { 707 if (bios->fp.if_is_24bit) 708 connector->display_info.bpc = 8; 709 return; 710 } 711 712 /* LVDS: DDC panel, need to first determine the number of links to 713 * know which if_is_24bit flag to check... 714 */ 715 if (nv_connector->edid && 716 nv_connector->type == DCB_CONNECTOR_LVDS_SPWG) 717 duallink = ((u8 *)nv_connector->edid)[121] == 2; 718 else 719 duallink = mode->clock >= bios->fp.duallink_transition_clk; 720 721 if ((!duallink && (bios->fp.strapless_is_24bit & 1)) || 722 ( duallink && (bios->fp.strapless_is_24bit & 2))) 723 connector->display_info.bpc = 8; 724 } 725 726 static int 727 nouveau_connector_get_modes(struct drm_connector *connector) 728 { 729 struct drm_device *dev = connector->dev; 730 struct nouveau_drm *drm = nouveau_drm(dev); 731 struct nouveau_connector *nv_connector = nouveau_connector(connector); 732 struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder; 733 struct drm_encoder *encoder = to_drm_encoder(nv_encoder); 734 int ret = 0; 735 736 /* destroy the native mode, the attached monitor could have changed. 737 */ 738 if (nv_connector->native_mode) { 739 drm_mode_destroy(dev, nv_connector->native_mode); 740 nv_connector->native_mode = NULL; 741 } 742 743 if (nv_connector->edid) 744 ret = drm_add_edid_modes(connector, nv_connector->edid); 745 else 746 if (nv_encoder->dcb->type == DCB_OUTPUT_LVDS && 747 (nv_encoder->dcb->lvdsconf.use_straps_for_mode || 748 drm->vbios.fp_no_ddc) && nouveau_bios_fp_mode(dev, NULL)) { 749 struct drm_display_mode mode; 750 751 nouveau_bios_fp_mode(dev, &mode); 752 nv_connector->native_mode = drm_mode_duplicate(dev, &mode); 753 } 754 755 /* Determine display colour depth for everything except LVDS now, 756 * DP requires this before mode_valid() is called. 757 */ 758 if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS) 759 nouveau_connector_detect_depth(connector); 760 761 /* Find the native mode if this is a digital panel, if we didn't 762 * find any modes through DDC previously add the native mode to 763 * the list of modes. 764 */ 765 if (!nv_connector->native_mode) 766 nv_connector->native_mode = 767 nouveau_connector_native_mode(connector); 768 if (ret == 0 && nv_connector->native_mode) { 769 struct drm_display_mode *mode; 770 771 mode = drm_mode_duplicate(dev, nv_connector->native_mode); 772 drm_mode_probed_add(connector, mode); 773 ret = 1; 774 } 775 776 /* Determine LVDS colour depth, must happen after determining 777 * "native" mode as some VBIOS tables require us to use the 778 * pixel clock as part of the lookup... 779 */ 780 if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS) 781 nouveau_connector_detect_depth(connector); 782 783 if (nv_encoder->dcb->type == DCB_OUTPUT_TV) 784 ret = get_slave_funcs(encoder)->get_modes(encoder, connector); 785 786 if (nv_connector->type == DCB_CONNECTOR_LVDS || 787 nv_connector->type == DCB_CONNECTOR_LVDS_SPWG || 788 nv_connector->type == DCB_CONNECTOR_eDP) 789 ret += nouveau_connector_scaler_modes_add(connector); 790 791 return ret; 792 } 793 794 static unsigned 795 get_tmds_link_bandwidth(struct drm_connector *connector) 796 { 797 struct nouveau_connector *nv_connector = nouveau_connector(connector); 798 struct nouveau_drm *drm = nouveau_drm(connector->dev); 799 struct dcb_output *dcb = nv_connector->detected_encoder->dcb; 800 801 if (dcb->location != DCB_LOC_ON_CHIP || 802 drm->device.info.chipset >= 0x46) 803 return 165000; 804 else if (drm->device.info.chipset >= 0x40) 805 return 155000; 806 else if (drm->device.info.chipset >= 0x18) 807 return 135000; 808 else 809 return 112000; 810 } 811 812 static int 813 nouveau_connector_mode_valid(struct drm_connector *connector, 814 struct drm_display_mode *mode) 815 { 816 struct nouveau_connector *nv_connector = nouveau_connector(connector); 817 struct nouveau_encoder *nv_encoder = nv_connector->detected_encoder; 818 struct drm_encoder *encoder = to_drm_encoder(nv_encoder); 819 unsigned min_clock = 25000, max_clock = min_clock; 820 unsigned clock = mode->clock; 821 822 switch (nv_encoder->dcb->type) { 823 case DCB_OUTPUT_LVDS: 824 if (nv_connector->native_mode && 825 (mode->hdisplay > nv_connector->native_mode->hdisplay || 826 mode->vdisplay > nv_connector->native_mode->vdisplay)) 827 return MODE_PANEL; 828 829 min_clock = 0; 830 max_clock = 400000; 831 break; 832 case DCB_OUTPUT_TMDS: 833 max_clock = get_tmds_link_bandwidth(connector); 834 if (nouveau_duallink && nv_encoder->dcb->duallink_possible) 835 max_clock *= 2; 836 break; 837 case DCB_OUTPUT_ANALOG: 838 max_clock = nv_encoder->dcb->crtconf.maxfreq; 839 if (!max_clock) 840 max_clock = 350000; 841 break; 842 case DCB_OUTPUT_TV: 843 return get_slave_funcs(encoder)->mode_valid(encoder, mode); 844 case DCB_OUTPUT_DP: 845 max_clock = nv_encoder->dp.link_nr; 846 max_clock *= nv_encoder->dp.link_bw; 847 clock = clock * (connector->display_info.bpc * 3) / 10; 848 break; 849 default: 850 BUG_ON(1); 851 return MODE_BAD; 852 } 853 854 if (clock < min_clock) 855 return MODE_CLOCK_LOW; 856 857 if (clock > max_clock) 858 return MODE_CLOCK_HIGH; 859 860 return MODE_OK; 861 } 862 863 static struct drm_encoder * 864 nouveau_connector_best_encoder(struct drm_connector *connector) 865 { 866 struct nouveau_connector *nv_connector = nouveau_connector(connector); 867 868 if (nv_connector->detected_encoder) 869 return to_drm_encoder(nv_connector->detected_encoder); 870 871 return NULL; 872 } 873 874 static const struct drm_connector_helper_funcs 875 nouveau_connector_helper_funcs = { 876 .get_modes = nouveau_connector_get_modes, 877 .mode_valid = nouveau_connector_mode_valid, 878 .best_encoder = nouveau_connector_best_encoder, 879 }; 880 881 static const struct drm_connector_funcs 882 nouveau_connector_funcs = { 883 .dpms = drm_helper_connector_dpms, 884 .save = NULL, 885 .restore = NULL, 886 .detect = nouveau_connector_detect, 887 .destroy = nouveau_connector_destroy, 888 .fill_modes = drm_helper_probe_single_connector_modes, 889 .set_property = nouveau_connector_set_property, 890 .force = nouveau_connector_force 891 }; 892 893 static const struct drm_connector_funcs 894 nouveau_connector_funcs_lvds = { 895 .dpms = drm_helper_connector_dpms, 896 .save = NULL, 897 .restore = NULL, 898 .detect = nouveau_connector_detect_lvds, 899 .destroy = nouveau_connector_destroy, 900 .fill_modes = drm_helper_probe_single_connector_modes, 901 .set_property = nouveau_connector_set_property, 902 .force = nouveau_connector_force 903 }; 904 905 static void 906 nouveau_connector_dp_dpms(struct drm_connector *connector, int mode) 907 { 908 struct nouveau_encoder *nv_encoder = NULL; 909 910 if (connector->encoder) 911 nv_encoder = nouveau_encoder(connector->encoder); 912 if (nv_encoder && nv_encoder->dcb && 913 nv_encoder->dcb->type == DCB_OUTPUT_DP) { 914 if (mode == DRM_MODE_DPMS_ON) { 915 u8 data = DP_SET_POWER_D0; 916 nv_wraux(nv_encoder->i2c, DP_SET_POWER, &data, 1); 917 usleep_range(1000, 2000); 918 } else { 919 u8 data = DP_SET_POWER_D3; 920 nv_wraux(nv_encoder->i2c, DP_SET_POWER, &data, 1); 921 } 922 } 923 924 drm_helper_connector_dpms(connector, mode); 925 } 926 927 static const struct drm_connector_funcs 928 nouveau_connector_funcs_dp = { 929 .dpms = nouveau_connector_dp_dpms, 930 .save = NULL, 931 .restore = NULL, 932 .detect = nouveau_connector_detect, 933 .destroy = nouveau_connector_destroy, 934 .fill_modes = drm_helper_probe_single_connector_modes, 935 .set_property = nouveau_connector_set_property, 936 .force = nouveau_connector_force 937 }; 938 939 static int 940 nouveau_connector_hotplug(struct nvif_notify *notify) 941 { 942 struct nouveau_connector *nv_connector = 943 container_of(notify, typeof(*nv_connector), hpd); 944 struct drm_connector *connector = &nv_connector->base; 945 struct nouveau_drm *drm = nouveau_drm(connector->dev); 946 const struct nvif_notify_conn_rep_v0 *rep = notify->data; 947 const char *name = connector->name; 948 949 if (rep->mask & NVIF_NOTIFY_CONN_V0_IRQ) { 950 } else { 951 bool plugged = (rep->mask != NVIF_NOTIFY_CONN_V0_UNPLUG); 952 953 NV_DEBUG(drm, "%splugged %s\n", plugged ? "" : "un", name); 954 955 if (plugged) 956 drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON); 957 else 958 drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF); 959 drm_helper_hpd_irq_event(connector->dev); 960 } 961 962 return NVIF_NOTIFY_KEEP; 963 } 964 965 static ssize_t 966 nouveau_connector_aux_xfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg) 967 { 968 struct nouveau_connector *nv_connector = 969 container_of(aux, typeof(*nv_connector), aux); 970 struct nouveau_encoder *nv_encoder; 971 struct nouveau_i2c_port *port; 972 int ret; 973 974 nv_encoder = find_encoder(&nv_connector->base, DCB_OUTPUT_DP); 975 if (!nv_encoder || !(port = nv_encoder->i2c)) 976 return -ENODEV; 977 if (WARN_ON(msg->size > 16)) 978 return -E2BIG; 979 if (msg->size == 0) 980 return msg->size; 981 982 ret = nouveau_i2c(port)->acquire(port, 0); 983 if (ret) 984 return ret; 985 986 ret = port->func->aux(port, false, msg->request, msg->address, 987 msg->buffer, msg->size); 988 nouveau_i2c(port)->release(port); 989 if (ret >= 0) { 990 msg->reply = ret; 991 return msg->size; 992 } 993 994 return ret; 995 } 996 997 static int 998 drm_conntype_from_dcb(enum dcb_connector_type dcb) 999 { 1000 switch (dcb) { 1001 case DCB_CONNECTOR_VGA : return DRM_MODE_CONNECTOR_VGA; 1002 case DCB_CONNECTOR_TV_0 : 1003 case DCB_CONNECTOR_TV_1 : 1004 case DCB_CONNECTOR_TV_3 : return DRM_MODE_CONNECTOR_TV; 1005 case DCB_CONNECTOR_DMS59_0 : 1006 case DCB_CONNECTOR_DMS59_1 : 1007 case DCB_CONNECTOR_DVI_I : return DRM_MODE_CONNECTOR_DVII; 1008 case DCB_CONNECTOR_DVI_D : return DRM_MODE_CONNECTOR_DVID; 1009 case DCB_CONNECTOR_LVDS : 1010 case DCB_CONNECTOR_LVDS_SPWG: return DRM_MODE_CONNECTOR_LVDS; 1011 case DCB_CONNECTOR_DMS59_DP0: 1012 case DCB_CONNECTOR_DMS59_DP1: 1013 case DCB_CONNECTOR_DP : return DRM_MODE_CONNECTOR_DisplayPort; 1014 case DCB_CONNECTOR_eDP : return DRM_MODE_CONNECTOR_eDP; 1015 case DCB_CONNECTOR_HDMI_0 : 1016 case DCB_CONNECTOR_HDMI_1 : 1017 case DCB_CONNECTOR_HDMI_C : return DRM_MODE_CONNECTOR_HDMIA; 1018 default: 1019 break; 1020 } 1021 1022 return DRM_MODE_CONNECTOR_Unknown; 1023 } 1024 1025 struct drm_connector * 1026 nouveau_connector_create(struct drm_device *dev, int index) 1027 { 1028 const struct drm_connector_funcs *funcs = &nouveau_connector_funcs; 1029 struct nouveau_drm *drm = nouveau_drm(dev); 1030 struct nouveau_display *disp = nouveau_display(dev); 1031 struct nouveau_connector *nv_connector = NULL; 1032 struct drm_connector *connector; 1033 int type, ret = 0; 1034 bool dummy; 1035 1036 list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 1037 nv_connector = nouveau_connector(connector); 1038 if (nv_connector->index == index) 1039 return connector; 1040 } 1041 1042 nv_connector = kzalloc(sizeof(*nv_connector), GFP_KERNEL); 1043 if (!nv_connector) 1044 return ERR_PTR(-ENOMEM); 1045 1046 connector = &nv_connector->base; 1047 nv_connector->index = index; 1048 1049 /* attempt to parse vbios connector type and hotplug gpio */ 1050 nv_connector->dcb = olddcb_conn(dev, index); 1051 if (nv_connector->dcb) { 1052 u32 entry = ROM16(nv_connector->dcb[0]); 1053 if (olddcb_conntab(dev)[3] >= 4) 1054 entry |= (u32)ROM16(nv_connector->dcb[2]) << 16; 1055 1056 nv_connector->type = nv_connector->dcb[0]; 1057 if (drm_conntype_from_dcb(nv_connector->type) == 1058 DRM_MODE_CONNECTOR_Unknown) { 1059 NV_WARN(drm, "unknown connector type %02x\n", 1060 nv_connector->type); 1061 nv_connector->type = DCB_CONNECTOR_NONE; 1062 } 1063 1064 /* Gigabyte NX85T */ 1065 if (nv_match_device(dev, 0x0421, 0x1458, 0x344c)) { 1066 if (nv_connector->type == DCB_CONNECTOR_HDMI_1) 1067 nv_connector->type = DCB_CONNECTOR_DVI_I; 1068 } 1069 1070 /* Gigabyte GV-NX86T512H */ 1071 if (nv_match_device(dev, 0x0402, 0x1458, 0x3455)) { 1072 if (nv_connector->type == DCB_CONNECTOR_HDMI_1) 1073 nv_connector->type = DCB_CONNECTOR_DVI_I; 1074 } 1075 } else { 1076 nv_connector->type = DCB_CONNECTOR_NONE; 1077 } 1078 1079 /* no vbios data, or an unknown dcb connector type - attempt to 1080 * figure out something suitable ourselves 1081 */ 1082 if (nv_connector->type == DCB_CONNECTOR_NONE) { 1083 struct nouveau_drm *drm = nouveau_drm(dev); 1084 struct dcb_table *dcbt = &drm->vbios.dcb; 1085 u32 encoders = 0; 1086 int i; 1087 1088 for (i = 0; i < dcbt->entries; i++) { 1089 if (dcbt->entry[i].connector == nv_connector->index) 1090 encoders |= (1 << dcbt->entry[i].type); 1091 } 1092 1093 if (encoders & (1 << DCB_OUTPUT_DP)) { 1094 if (encoders & (1 << DCB_OUTPUT_TMDS)) 1095 nv_connector->type = DCB_CONNECTOR_DP; 1096 else 1097 nv_connector->type = DCB_CONNECTOR_eDP; 1098 } else 1099 if (encoders & (1 << DCB_OUTPUT_TMDS)) { 1100 if (encoders & (1 << DCB_OUTPUT_ANALOG)) 1101 nv_connector->type = DCB_CONNECTOR_DVI_I; 1102 else 1103 nv_connector->type = DCB_CONNECTOR_DVI_D; 1104 } else 1105 if (encoders & (1 << DCB_OUTPUT_ANALOG)) { 1106 nv_connector->type = DCB_CONNECTOR_VGA; 1107 } else 1108 if (encoders & (1 << DCB_OUTPUT_LVDS)) { 1109 nv_connector->type = DCB_CONNECTOR_LVDS; 1110 } else 1111 if (encoders & (1 << DCB_OUTPUT_TV)) { 1112 nv_connector->type = DCB_CONNECTOR_TV_0; 1113 } 1114 } 1115 1116 switch ((type = drm_conntype_from_dcb(nv_connector->type))) { 1117 case DRM_MODE_CONNECTOR_LVDS: 1118 ret = nouveau_bios_parse_lvds_table(dev, 0, &dummy, &dummy); 1119 if (ret) { 1120 NV_ERROR(drm, "Error parsing LVDS table, disabling\n"); 1121 kfree(nv_connector); 1122 return ERR_PTR(ret); 1123 } 1124 1125 funcs = &nouveau_connector_funcs_lvds; 1126 break; 1127 case DRM_MODE_CONNECTOR_DisplayPort: 1128 case DRM_MODE_CONNECTOR_eDP: 1129 nv_connector->aux.dev = dev->dev; 1130 nv_connector->aux.transfer = nouveau_connector_aux_xfer; 1131 ret = drm_dp_aux_register(&nv_connector->aux); 1132 if (ret) { 1133 NV_ERROR(drm, "failed to register aux channel\n"); 1134 kfree(nv_connector); 1135 return ERR_PTR(ret); 1136 } 1137 1138 funcs = &nouveau_connector_funcs_dp; 1139 break; 1140 default: 1141 funcs = &nouveau_connector_funcs; 1142 break; 1143 } 1144 1145 /* defaults, will get overridden in detect() */ 1146 connector->interlace_allowed = false; 1147 connector->doublescan_allowed = false; 1148 1149 drm_connector_init(dev, connector, funcs, type); 1150 drm_connector_helper_add(connector, &nouveau_connector_helper_funcs); 1151 1152 /* Init DVI-I specific properties */ 1153 if (nv_connector->type == DCB_CONNECTOR_DVI_I) 1154 drm_object_attach_property(&connector->base, dev->mode_config.dvi_i_subconnector_property, 0); 1155 1156 /* Add overscan compensation options to digital outputs */ 1157 if (disp->underscan_property && 1158 (type == DRM_MODE_CONNECTOR_DVID || 1159 type == DRM_MODE_CONNECTOR_DVII || 1160 type == DRM_MODE_CONNECTOR_HDMIA || 1161 type == DRM_MODE_CONNECTOR_DisplayPort)) { 1162 drm_object_attach_property(&connector->base, 1163 disp->underscan_property, 1164 UNDERSCAN_OFF); 1165 drm_object_attach_property(&connector->base, 1166 disp->underscan_hborder_property, 1167 0); 1168 drm_object_attach_property(&connector->base, 1169 disp->underscan_vborder_property, 1170 0); 1171 } 1172 1173 /* Add hue and saturation options */ 1174 if (disp->vibrant_hue_property) 1175 drm_object_attach_property(&connector->base, 1176 disp->vibrant_hue_property, 1177 90); 1178 if (disp->color_vibrance_property) 1179 drm_object_attach_property(&connector->base, 1180 disp->color_vibrance_property, 1181 150); 1182 1183 switch (nv_connector->type) { 1184 case DCB_CONNECTOR_VGA: 1185 if (drm->device.info.family >= NV_DEVICE_INFO_V0_TESLA) { 1186 drm_object_attach_property(&connector->base, 1187 dev->mode_config.scaling_mode_property, 1188 nv_connector->scaling_mode); 1189 } 1190 /* fall-through */ 1191 case DCB_CONNECTOR_TV_0: 1192 case DCB_CONNECTOR_TV_1: 1193 case DCB_CONNECTOR_TV_3: 1194 nv_connector->scaling_mode = DRM_MODE_SCALE_NONE; 1195 break; 1196 default: 1197 nv_connector->scaling_mode = DRM_MODE_SCALE_FULLSCREEN; 1198 1199 drm_object_attach_property(&connector->base, 1200 dev->mode_config.scaling_mode_property, 1201 nv_connector->scaling_mode); 1202 if (disp->dithering_mode) { 1203 nv_connector->dithering_mode = DITHERING_MODE_AUTO; 1204 drm_object_attach_property(&connector->base, 1205 disp->dithering_mode, 1206 nv_connector->dithering_mode); 1207 } 1208 if (disp->dithering_depth) { 1209 nv_connector->dithering_depth = DITHERING_DEPTH_AUTO; 1210 drm_object_attach_property(&connector->base, 1211 disp->dithering_depth, 1212 nv_connector->dithering_depth); 1213 } 1214 break; 1215 } 1216 1217 ret = nvif_notify_init(&disp->disp, NULL, nouveau_connector_hotplug, 1218 true, NV04_DISP_NTFY_CONN, 1219 &(struct nvif_notify_conn_req_v0) { 1220 .mask = NVIF_NOTIFY_CONN_V0_ANY, 1221 .conn = index, 1222 }, 1223 sizeof(struct nvif_notify_conn_req_v0), 1224 sizeof(struct nvif_notify_conn_rep_v0), 1225 &nv_connector->hpd); 1226 if (ret) 1227 connector->polled = DRM_CONNECTOR_POLL_CONNECT; 1228 else 1229 connector->polled = DRM_CONNECTOR_POLL_HPD; 1230 1231 drm_connector_register(connector); 1232 return connector; 1233 } 1234