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