2 * Copyright (C) 2008 Maarten Maathuis.
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:
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.
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.
27 #include <acpi/button.h>
29 #include <linux/pm_runtime.h>
30 #include <linux/vga_switcheroo.h>
33 #include <drm/drm_edid.h>
34 #include <drm/drm_crtc_helper.h>
36 #include "nouveau_reg.h"
37 #include "nouveau_drm.h"
38 #include "dispnv04/hw.h"
39 #include "nouveau_acpi.h"
41 #include "nouveau_display.h"
42 #include "nouveau_connector.h"
43 #include "nouveau_encoder.h"
44 #include "nouveau_crtc.h"
46 #include <nvif/class.h>
47 #include <nvif/cl0046.h>
48 #include <nvif/event.h>
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);
54 MODULE_PARM_DESC(ignorelid
, "Ignore ACPI lid status");
55 int nouveau_ignorelid
= 0;
56 module_param_named(ignorelid
, nouveau_ignorelid
, int, 0400);
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);
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);
66 struct nouveau_encoder
*
67 find_encoder(struct drm_connector
*connector
, int type
)
69 struct drm_device
*dev
= connector
->dev
;
70 struct nouveau_encoder
*nv_encoder
;
71 struct drm_encoder
*enc
;
74 for (i
= 0; i
< DRM_CONNECTOR_MAX_ENCODER
; i
++) {
75 id
= connector
->encoder_ids
[i
];
79 enc
= drm_encoder_find(dev
, id
);
82 nv_encoder
= nouveau_encoder(enc
);
84 if (type
== DCB_OUTPUT_ANY
||
85 (nv_encoder
->dcb
&& nv_encoder
->dcb
->type
== type
))
92 struct nouveau_connector
*
93 nouveau_encoder_connector_get(struct nouveau_encoder
*encoder
)
95 struct drm_device
*dev
= to_drm_encoder(encoder
)->dev
;
96 struct drm_connector
*drm_connector
;
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
);
107 nouveau_connector_destroy(struct drm_connector
*connector
)
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
);
119 static struct nouveau_encoder
*
120 nouveau_connector_ddc_detect(struct drm_connector
*connector
)
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
;
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.
134 if (nv_connector
->type
== DCB_CONNECTOR_eDP
) {
135 panel
= nvkm_gpio_get(gpio
, 0, DCB_GPIO_PANEL_POWER
, 0xff);
137 nvkm_gpio_set(gpio
, 0, DCB_GPIO_PANEL_POWER
, 0xff, 1);
142 for (i
= 0; nv_encoder
= NULL
, i
< DRM_CONNECTOR_MAX_ENCODER
; i
++) {
143 int id
= connector
->encoder_ids
[i
];
147 encoder
= drm_encoder_find(dev
, id
);
150 nv_encoder
= nouveau_encoder(encoder
);
152 if (nv_encoder
->dcb
->type
== DCB_OUTPUT_DP
) {
153 int ret
= nouveau_dp_detect(nv_encoder
);
157 if ((vga_switcheroo_handler_flags() &
158 VGA_SWITCHEROO_CAN_SWITCH_DDC
) &&
159 nv_encoder
->dcb
->type
== DCB_OUTPUT_LVDS
&&
162 vga_switcheroo_lock_ddc(dev
->pdev
);
163 ret
= nvkm_probe_i2c(nv_encoder
->i2c
, 0x50);
164 vga_switcheroo_unlock_ddc(dev
->pdev
);
168 if (nv_encoder
->i2c
) {
169 if (nvkm_probe_i2c(nv_encoder
->i2c
, 0x50))
174 /* eDP panel not detected, restore panel power GPIO to previous
175 * state to avoid confusing the SOR for other output types.
177 if (!nv_encoder
&& panel
== 0)
178 nvkm_gpio_set(gpio
, 0, DCB_GPIO_PANEL_POWER
, 0xff, panel
);
183 static struct nouveau_encoder
*
184 nouveau_connector_of_detect(struct drm_connector
*connector
)
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
);
193 !((nv_encoder
= find_encoder(connector
, DCB_OUTPUT_TMDS
)) ||
194 (nv_encoder
= find_encoder(connector
, DCB_OUTPUT_ANALOG
))))
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;
202 if (nv_encoder
->dcb
->i2c_index
== idx
&& edid
) {
204 kmemdup(edid
, EDID_LENGTH
, GFP_KERNEL
);
214 nouveau_connector_set_encoder(struct drm_connector
*connector
,
215 struct nouveau_encoder
*nv_encoder
)
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
;
221 if (nv_connector
->detected_encoder
== nv_encoder
)
223 nv_connector
->detected_encoder
= nv_encoder
;
225 if (drm
->device
.info
.family
>= NV_DEVICE_INFO_V0_TESLA
) {
226 connector
->interlace_allowed
= true;
227 connector
->doublescan_allowed
= true;
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;
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))
240 connector
->interlace_allowed
= false;
242 connector
->interlace_allowed
= true;
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
);
254 static enum drm_connector_status
255 nouveau_connector_detect(struct drm_connector
*connector
, bool force
)
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
;
265 enum drm_connector_status conn_status
= connector_status_disconnected
;
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
;
274 ret
= pm_runtime_get_sync(connector
->dev
->dev
);
275 if (ret
< 0 && ret
!= -EACCES
)
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
,
286 nv_connector
->edid
= drm_get_edid(connector
, i2c
);
288 drm_mode_connector_update_edid_property(connector
,
290 if (!nv_connector
->edid
) {
291 NV_ERROR(drm
, "DDC responded, but no EDID for %s\n",
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.
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
);
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
;
314 type
= DCB_OUTPUT_ANALOG
;
316 nv_encoder
= find_encoder(connector
, type
);
319 nouveau_connector_set_encoder(connector
, nv_encoder
);
320 conn_status
= connector_status_connected
;
324 nv_encoder
= nouveau_connector_of_detect(connector
);
326 nouveau_connector_set_encoder(connector
, nv_encoder
);
327 conn_status
= connector_status_connected
;
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
;
340 if (helper
->detect(encoder
, connector
) ==
341 connector_status_connected
) {
342 nouveau_connector_set_encoder(connector
, nv_encoder
);
343 conn_status
= connector_status_connected
;
351 pm_runtime_mark_last_busy(connector
->dev
->dev
);
352 pm_runtime_put_autosuspend(connector
->dev
->dev
);
357 static enum drm_connector_status
358 nouveau_connector_detect_lvds(struct drm_connector
*connector
, bool force
)
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
;
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
;
373 nv_encoder
= find_encoder(connector
, DCB_OUTPUT_LVDS
);
375 return connector_status_disconnected
;
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
)
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..
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)
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
;
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.
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
;
410 /* Still nothing, some VBIOS images have a hardcoded EDID block
411 * stored for the panel stored in them.
413 if (!drm
->vbios
.fp_no_ddc
) {
415 (struct edid
*)nouveau_bios_embedded_edid(dev
);
418 kmemdup(edid
, EDID_LENGTH
, GFP_KERNEL
);
419 if (nv_connector
->edid
)
420 status
= connector_status_connected
;
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
;
432 drm_mode_connector_update_edid_property(connector
, nv_connector
->edid
);
433 nouveau_connector_set_encoder(connector
, nv_encoder
);
438 nouveau_connector_force(struct drm_connector
*connector
)
440 struct nouveau_drm
*drm
= nouveau_drm(connector
->dev
);
441 struct nouveau_connector
*nv_connector
= nouveau_connector(connector
);
442 struct nouveau_encoder
*nv_encoder
;
445 if (nv_connector
->type
== DCB_CONNECTOR_DVI_I
) {
446 if (connector
->force
== DRM_FORCE_ON_DIGITAL
)
447 type
= DCB_OUTPUT_TMDS
;
449 type
= DCB_OUTPUT_ANALOG
;
451 type
= DCB_OUTPUT_ANY
;
453 nv_encoder
= find_encoder(connector
, type
);
455 NV_ERROR(drm
, "can't find encoder to force %s on!\n",
457 connector
->status
= connector_status_disconnected
;
461 nouveau_connector_set_encoder(connector
, nv_encoder
);
465 nouveau_connector_set_property(struct drm_connector
*connector
,
466 struct drm_property
*property
, uint64_t value
)
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
;
477 if (connector
->encoder
&& connector
->encoder
->crtc
)
478 nv_crtc
= nouveau_crtc(connector
->encoder
->crtc
);
481 if (property
== dev
->mode_config
.scaling_mode_property
) {
482 bool modeset
= false;
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
491 * Non-EDID modes will force the use of GPU scaling
492 * to the native mode regardless of this setting.
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.
501 if (disp
->disp
.oclass
< NV50_DISP
)
508 case DRM_MODE_SCALE_FULLSCREEN
:
509 case DRM_MODE_SCALE_CENTER
:
510 case DRM_MODE_SCALE_ASPECT
:
516 /* Changing between GPU and panel scaling requires a full
519 if ((nv_connector
->scaling_mode
== DRM_MODE_SCALE_NONE
) ||
520 (value
== DRM_MODE_SCALE_NONE
))
522 nv_connector
->scaling_mode
= value
;
527 if (modeset
|| !nv_crtc
->set_scale
) {
528 ret
= drm_crtc_helper_set_mode(&nv_crtc
->base
,
531 nv_crtc
->base
.y
, NULL
);
535 ret
= nv_crtc
->set_scale(nv_crtc
, true);
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
)
550 return nv_crtc
->set_scale(nv_crtc
, true);
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
)
562 return nv_crtc
->set_scale(nv_crtc
, true);
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
)
574 return nv_crtc
->set_scale(nv_crtc
, true);
581 if (property
== disp
->dithering_mode
) {
582 nv_connector
->dithering_mode
= value
;
583 if (!nv_crtc
|| !nv_crtc
->set_dither
)
586 return nv_crtc
->set_dither(nv_crtc
, true);
589 if (property
== disp
->dithering_depth
) {
590 nv_connector
->dithering_depth
= value
;
591 if (!nv_crtc
|| !nv_crtc
->set_dither
)
594 return nv_crtc
->set_dither(nv_crtc
, true);
597 if (nv_crtc
&& nv_crtc
->set_color_vibrance
) {
599 if (property
== disp
->vibrant_hue_property
) {
600 nv_crtc
->vibrant_hue
= value
- 90;
601 return nv_crtc
->set_color_vibrance(nv_crtc
, true);
604 if (property
== disp
->color_vibrance_property
) {
605 nv_crtc
->color_vibrance
= value
- 100;
606 return nv_crtc
->set_color_vibrance(nv_crtc
, true);
610 if (nv_encoder
&& nv_encoder
->dcb
->type
== DCB_OUTPUT_TV
)
611 return get_slave_funcs(encoder
)->set_property(
612 encoder
, connector
, property
, value
);
617 static struct drm_display_mode
*
618 nouveau_connector_native_mode(struct drm_connector
*connector
)
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;
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
))
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
);
639 /* Otherwise, take the resolution with the largest width, then
640 * height, then vertical refresh
642 if (mode
->hdisplay
< high_w
)
645 if (mode
->hdisplay
== high_w
&& mode
->vdisplay
< high_h
)
648 if (mode
->hdisplay
== high_w
&& mode
->vdisplay
== high_h
&&
649 mode
->vrefresh
< high_v
)
652 high_w
= mode
->hdisplay
;
653 high_h
= mode
->vdisplay
;
654 high_v
= mode
->vrefresh
;
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
;
668 static struct moderec scaler_modes
[] = {
687 nouveau_connector_scaler_modes_add(struct drm_connector
*connector
)
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];
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,
709 drm_mode_probed_add(connector
, m
);
720 nouveau_connector_detect_depth(struct drm_connector
*connector
)
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
;
729 /* if the edid is feeling nice enough to provide this info, use it */
730 if (nv_connector
->edid
&& connector
->display_info
.bpc
)
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;
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;
745 connector
->display_info
.bpc
= 6;
747 /* LVDS: panel straps */
748 if (bios
->fp_no_ddc
) {
749 if (bios
->fp
.if_is_24bit
)
750 connector
->display_info
.bpc
= 8;
754 /* LVDS: DDC panel, need to first determine the number of links to
755 * know which if_is_24bit flag to check...
757 if (nv_connector
->edid
&&
758 nv_connector
->type
== DCB_CONNECTOR_LVDS_SPWG
)
759 duallink
= ((u8
*)nv_connector
->edid
)[121] == 2;
761 duallink
= mode
->clock
>= bios
->fp
.duallink_transition_clk
;
763 if ((!duallink
&& (bios
->fp
.strapless_is_24bit
& 1)) ||
764 ( duallink
&& (bios
->fp
.strapless_is_24bit
& 2)))
765 connector
->display_info
.bpc
= 8;
769 nouveau_connector_get_modes(struct drm_connector
*connector
)
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
);
778 /* destroy the native mode, the attached monitor could have changed.
780 if (nv_connector
->native_mode
) {
781 drm_mode_destroy(dev
, nv_connector
->native_mode
);
782 nv_connector
->native_mode
= NULL
;
785 if (nv_connector
->edid
)
786 ret
= drm_add_edid_modes(connector
, nv_connector
->edid
);
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
;
793 nouveau_bios_fp_mode(dev
, &mode
);
794 nv_connector
->native_mode
= drm_mode_duplicate(dev
, &mode
);
797 /* Determine display colour depth for everything except LVDS now,
798 * DP requires this before mode_valid() is called.
800 if (connector
->connector_type
!= DRM_MODE_CONNECTOR_LVDS
)
801 nouveau_connector_detect_depth(connector
);
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
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
;
813 mode
= drm_mode_duplicate(dev
, nv_connector
->native_mode
);
814 drm_mode_probed_add(connector
, mode
);
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...
822 if (connector
->connector_type
== DRM_MODE_CONNECTOR_LVDS
)
823 nouveau_connector_detect_depth(connector
);
825 if (nv_encoder
->dcb
->type
== DCB_OUTPUT_TV
)
826 ret
= get_slave_funcs(encoder
)->get_modes(encoder
, connector
);
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
);
837 get_tmds_link_bandwidth(struct drm_connector
*connector
, bool hdmi
)
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
;
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.
849 if (drm
->device
.info
.family
>= NV_DEVICE_INFO_V0_KEPLER
)
851 if (drm
->device
.info
.family
>= NV_DEVICE_INFO_V0_FERMI
)
854 if (dcb
->location
!= DCB_LOC_ON_CHIP
||
855 drm
->device
.info
.chipset
>= 0x46)
857 else if (drm
->device
.info
.chipset
>= 0x40)
859 else if (drm
->device
.info
.chipset
>= 0x18)
866 nouveau_connector_mode_valid(struct drm_connector
*connector
,
867 struct drm_display_mode
*mode
)
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
;
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
))
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
)
893 case DCB_OUTPUT_ANALOG
:
894 max_clock
= nv_encoder
->dcb
->crtconf
.maxfreq
;
899 return get_slave_funcs(encoder
)->mode_valid(encoder
, mode
);
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;
910 if (clock
< min_clock
)
911 return MODE_CLOCK_LOW
;
913 if (clock
> max_clock
)
914 return MODE_CLOCK_HIGH
;
919 static struct drm_encoder
*
920 nouveau_connector_best_encoder(struct drm_connector
*connector
)
922 struct nouveau_connector
*nv_connector
= nouveau_connector(connector
);
924 if (nv_connector
->detected_encoder
)
925 return to_drm_encoder(nv_connector
->detected_encoder
);
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
,
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
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
958 nouveau_connector_dp_dpms(struct drm_connector
*connector
, int mode
)
960 struct nouveau_encoder
*nv_encoder
= NULL
;
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);
971 u8 data
= DP_SET_POWER_D3
;
972 nvkm_wraux(nv_encoder
->aux
, DP_SET_POWER
, &data
, 1);
976 return drm_helper_connector_dpms(connector
, mode
);
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
990 nouveau_connector_hotplug(struct nvif_notify
*notify
)
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
;
999 if (rep
->mask
& NVIF_NOTIFY_CONN_V0_IRQ
) {
1001 bool plugged
= (rep
->mask
!= NVIF_NOTIFY_CONN_V0_UNPLUG
);
1003 NV_DEBUG(drm
, "%splugged %s\n", plugged
? "" : "un", name
);
1005 mutex_lock(&drm
->dev
->mode_config
.mutex
);
1007 drm_helper_connector_dpms(connector
, DRM_MODE_DPMS_ON
);
1009 drm_helper_connector_dpms(connector
, DRM_MODE_DPMS_OFF
);
1010 mutex_unlock(&drm
->dev
->mode_config
.mutex
);
1012 drm_helper_hpd_irq_event(connector
->dev
);
1015 return NVIF_NOTIFY_KEEP
;
1019 nouveau_connector_aux_xfer(struct drm_dp_aux
*obj
, struct drm_dp_aux_msg
*msg
)
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
;
1027 nv_encoder
= find_encoder(&nv_connector
->base
, DCB_OUTPUT_DP
);
1028 if (!nv_encoder
|| !(aux
= nv_encoder
->aux
))
1030 if (WARN_ON(msg
->size
> 16))
1035 ret
= nvkm_i2c_aux_acquire(aux
);
1039 ret
= nvkm_i2c_aux_xfer(aux
, false, msg
->request
, msg
->address
,
1040 msg
->buffer
, msg
->size
);
1041 nvkm_i2c_aux_release(aux
);
1051 drm_conntype_from_dcb(enum dcb_connector_type 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
;
1075 return DRM_MODE_CONNECTOR_Unknown
;
1078 struct drm_connector
*
1079 nouveau_connector_create(struct drm_device
*dev
, int index
)
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
;
1089 list_for_each_entry(connector
, &dev
->mode_config
.connector_list
, head
) {
1090 nv_connector
= nouveau_connector(connector
);
1091 if (nv_connector
->index
== index
)
1095 nv_connector
= kzalloc(sizeof(*nv_connector
), GFP_KERNEL
);
1097 return ERR_PTR(-ENOMEM
);
1099 connector
= &nv_connector
->base
;
1100 nv_connector
->index
= index
;
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;
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
;
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
;
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
;
1129 nv_connector
->type
= DCB_CONNECTOR_NONE
;
1132 /* no vbios data, or an unknown dcb connector type - attempt to
1133 * figure out something suitable ourselves
1135 if (nv_connector
->type
== DCB_CONNECTOR_NONE
) {
1136 struct nouveau_drm
*drm
= nouveau_drm(dev
);
1137 struct dcb_table
*dcbt
= &drm
->vbios
.dcb
;
1141 for (i
= 0; i
< dcbt
->entries
; i
++) {
1142 if (dcbt
->entry
[i
].connector
== nv_connector
->index
)
1143 encoders
|= (1 << dcbt
->entry
[i
].type
);
1146 if (encoders
& (1 << DCB_OUTPUT_DP
)) {
1147 if (encoders
& (1 << DCB_OUTPUT_TMDS
))
1148 nv_connector
->type
= DCB_CONNECTOR_DP
;
1150 nv_connector
->type
= DCB_CONNECTOR_eDP
;
1152 if (encoders
& (1 << DCB_OUTPUT_TMDS
)) {
1153 if (encoders
& (1 << DCB_OUTPUT_ANALOG
))
1154 nv_connector
->type
= DCB_CONNECTOR_DVI_I
;
1156 nv_connector
->type
= DCB_CONNECTOR_DVI_D
;
1158 if (encoders
& (1 << DCB_OUTPUT_ANALOG
)) {
1159 nv_connector
->type
= DCB_CONNECTOR_VGA
;
1161 if (encoders
& (1 << DCB_OUTPUT_LVDS
)) {
1162 nv_connector
->type
= DCB_CONNECTOR_LVDS
;
1164 if (encoders
& (1 << DCB_OUTPUT_TV
)) {
1165 nv_connector
->type
= DCB_CONNECTOR_TV_0
;
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
);
1173 NV_ERROR(drm
, "Error parsing LVDS table, disabling\n");
1174 kfree(nv_connector
);
1175 return ERR_PTR(ret
);
1178 funcs
= &nouveau_connector_funcs_lvds
;
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
);
1186 NV_ERROR(drm
, "failed to register aux channel\n");
1187 kfree(nv_connector
);
1188 return ERR_PTR(ret
);
1191 funcs
= &nouveau_connector_funcs_dp
;
1194 funcs
= &nouveau_connector_funcs
;
1198 /* defaults, will get overridden in detect() */
1199 connector
->interlace_allowed
= false;
1200 connector
->doublescan_allowed
= false;
1202 drm_connector_init(dev
, connector
, funcs
, type
);
1203 drm_connector_helper_add(connector
, &nouveau_connector_helper_funcs
);
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);
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
,
1218 drm_object_attach_property(&connector
->base
,
1219 disp
->underscan_hborder_property
,
1221 drm_object_attach_property(&connector
->base
,
1222 disp
->underscan_vborder_property
,
1226 /* Add hue and saturation options */
1227 if (disp
->vibrant_hue_property
)
1228 drm_object_attach_property(&connector
->base
,
1229 disp
->vibrant_hue_property
,
1231 if (disp
->color_vibrance_property
)
1232 drm_object_attach_property(&connector
->base
,
1233 disp
->color_vibrance_property
,
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
;
1246 nv_connector
->scaling_mode
= DRM_MODE_SCALE_NONE
;
1249 nv_connector
->scaling_mode
= DRM_MODE_SCALE_NONE
;
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
:
1259 case DCB_CONNECTOR_VGA
:
1260 if (disp
->disp
.oclass
< NV50_DISP
)
1261 break; /* can only scale on DFPs */
1264 drm_object_attach_property(&connector
->base
, dev
->mode_config
.
1265 scaling_mode_property
,
1266 nv_connector
->scaling_mode
);
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
:
1278 if (disp
->dithering_mode
) {
1279 nv_connector
->dithering_mode
= DITHERING_MODE_AUTO
;
1280 drm_object_attach_property(&connector
->base
,
1281 disp
->dithering_mode
,
1285 if (disp
->dithering_depth
) {
1286 nv_connector
->dithering_depth
= DITHERING_DEPTH_AUTO
;
1287 drm_object_attach_property(&connector
->base
,
1288 disp
->dithering_depth
,
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
,
1301 sizeof(struct nvif_notify_conn_req_v0
),
1302 sizeof(struct nvif_notify_conn_rep_v0
),
1303 &nv_connector
->hpd
);
1305 connector
->polled
= DRM_CONNECTOR_POLL_CONNECT
;
1307 connector
->polled
= DRM_CONNECTOR_POLL_HPD
;
1309 drm_connector_register(connector
);