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