2 * Copyright 2007-8 Advanced Micro Devices, Inc.
3 * Copyright 2008 Red Hat Inc.
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice shall be included in
13 * all copies or substantial portions of the Software.
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
19 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21 * OTHER DEALINGS IN THE SOFTWARE.
23 * Authors: Dave Airlie
27 #include <drm/drm_edid.h>
28 #include <drm/drm_crtc_helper.h>
29 #include <drm/drm_fb_helper.h>
30 #include <drm/radeon_drm.h>
34 #include <linux/string.h>
37 #include <linux/pm_runtime.h>
40 void radeon_connector_hotplug(struct drm_connector *connector)
42 struct drm_device *dev = connector->dev;
43 struct radeon_device *rdev = dev->dev_private;
44 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
46 /* bail if the connector does not have hpd pin, e.g.,
49 if (radeon_connector->hpd.hpd == RADEON_HPD_NONE)
52 radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
54 /* if the connector is already off, don't turn it back on */
55 /* FIXME: This access isn't protected by any locks. */
56 if (connector->dpms != DRM_MODE_DPMS_ON)
59 /* just deal with DP (not eDP) here. */
60 if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
61 struct radeon_connector_atom_dig *dig_connector =
62 radeon_connector->con_priv;
64 /* if existing sink type was not DP no need to retrain */
65 if (dig_connector->dp_sink_type != CONNECTOR_OBJECT_ID_DISPLAYPORT)
68 /* first get sink type as it may be reset after (un)plug */
69 dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector);
70 /* don't do anything if sink is not display port, i.e.,
71 * passive dp->(dvi|hdmi) adaptor
73 if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
74 int saved_dpms = connector->dpms;
75 /* Only turn off the display if it's physically disconnected */
76 if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
77 drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
78 } else if (radeon_dp_needs_link_train(radeon_connector)) {
79 /* set it to OFF so that drm_helper_connector_dpms()
80 * won't return immediately since the current state
81 * is ON at this point.
83 connector->dpms = DRM_MODE_DPMS_OFF;
84 drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
86 connector->dpms = saved_dpms;
91 static void radeon_property_change_mode(struct drm_encoder *encoder)
93 struct drm_crtc *crtc = encoder->crtc;
95 if (crtc && crtc->enabled) {
96 drm_crtc_helper_set_mode(crtc, &crtc->mode,
97 crtc->x, crtc->y, crtc->primary->fb);
101 int radeon_get_monitor_bpc(struct drm_connector *connector)
103 struct drm_device *dev = connector->dev;
104 struct radeon_device *rdev = dev->dev_private;
105 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
106 struct radeon_connector_atom_dig *dig_connector;
108 int mode_clock, max_tmds_clock;
110 switch (connector->connector_type) {
111 case DRM_MODE_CONNECTOR_DVII:
112 case DRM_MODE_CONNECTOR_HDMIB:
113 if (radeon_connector->use_digital) {
114 if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
115 if (connector->display_info.bpc)
116 bpc = connector->display_info.bpc;
120 case DRM_MODE_CONNECTOR_DVID:
121 case DRM_MODE_CONNECTOR_HDMIA:
122 if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
123 if (connector->display_info.bpc)
124 bpc = connector->display_info.bpc;
127 case DRM_MODE_CONNECTOR_DisplayPort:
128 dig_connector = radeon_connector->con_priv;
129 if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
130 (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) ||
131 drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
132 if (connector->display_info.bpc)
133 bpc = connector->display_info.bpc;
136 case DRM_MODE_CONNECTOR_eDP:
137 case DRM_MODE_CONNECTOR_LVDS:
138 if (connector->display_info.bpc)
139 bpc = connector->display_info.bpc;
140 else if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev)) {
141 const struct drm_connector_helper_funcs *connector_funcs =
142 connector->helper_private;
143 struct drm_encoder *encoder = connector_funcs->best_encoder(connector);
144 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
145 struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
147 if (dig->lcd_misc & ATOM_PANEL_MISC_V13_6BIT_PER_COLOR)
149 else if (dig->lcd_misc & ATOM_PANEL_MISC_V13_8BIT_PER_COLOR)
155 if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
156 /* hdmi deep color only implemented on DCE4+ */
157 if ((bpc > 8) && !ASIC_IS_DCE4(rdev)) {
158 DRM_DEBUG("%s: HDMI deep color %d bpc unsupported. Using 8 bpc.\n",
159 connector->name, bpc);
164 * Pre DCE-8 hw can't handle > 12 bpc, and more than 12 bpc doesn't make
165 * much sense without support for > 12 bpc framebuffers. RGB 4:4:4 at
166 * 12 bpc is always supported on hdmi deep color sinks, as this is
167 * required by the HDMI-1.3 spec. Clamp to a safe 12 bpc maximum.
170 DRM_DEBUG("%s: HDMI deep color %d bpc unsupported. Using 12 bpc.\n",
171 connector->name, bpc);
175 /* Any defined maximum tmds clock limit we must not exceed? */
176 if (connector->max_tmds_clock > 0) {
177 /* mode_clock is clock in kHz for mode to be modeset on this connector */
178 mode_clock = radeon_connector->pixelclock_for_modeset;
180 /* Maximum allowable input clock in kHz */
181 max_tmds_clock = connector->max_tmds_clock * 1000;
183 DRM_DEBUG("%s: hdmi mode dotclock %d kHz, max tmds input clock %d kHz.\n",
184 connector->name, mode_clock, max_tmds_clock);
186 /* Check if bpc is within clock limit. Try to degrade gracefully otherwise */
187 if ((bpc == 12) && (mode_clock * 3/2 > max_tmds_clock)) {
188 if ((connector->display_info.edid_hdmi_dc_modes & DRM_EDID_HDMI_DC_30) &&
189 (mode_clock * 5/4 <= max_tmds_clock))
194 DRM_DEBUG("%s: HDMI deep color 12 bpc exceeds max tmds clock. Using %d bpc.\n",
195 connector->name, bpc);
198 if ((bpc == 10) && (mode_clock * 5/4 > max_tmds_clock)) {
200 DRM_DEBUG("%s: HDMI deep color 10 bpc exceeds max tmds clock. Using %d bpc.\n",
201 connector->name, bpc);
205 /* max_tmds_clock missing, but hdmi spec mandates it for deep color. */
206 DRM_DEBUG("%s: Required max tmds clock for HDMI deep color missing. Using 8 bpc.\n",
212 if ((radeon_deep_color == 0) && (bpc > 8)) {
213 DRM_DEBUG("%s: Deep color disabled. Set radeon module param deep_color=1 to enable.\n",
218 DRM_DEBUG("%s: Display bpc=%d, returned bpc=%d\n",
219 connector->name, connector->display_info.bpc, bpc);
225 radeon_connector_update_scratch_regs(struct drm_connector *connector, enum drm_connector_status status)
227 struct drm_device *dev = connector->dev;
228 struct radeon_device *rdev = dev->dev_private;
229 struct drm_encoder *best_encoder = NULL;
230 struct drm_encoder *encoder = NULL;
231 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
235 best_encoder = connector_funcs->best_encoder(connector);
237 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
238 if (connector->encoder_ids[i] == 0)
241 encoder = drm_encoder_find(connector->dev,
242 connector->encoder_ids[i]);
246 if ((encoder == best_encoder) && (status == connector_status_connected))
251 if (rdev->is_atom_bios)
252 radeon_atombios_connected_scratch_regs(connector, encoder, connected);
254 radeon_combios_connected_scratch_regs(connector, encoder, connected);
259 static struct drm_encoder *radeon_find_encoder(struct drm_connector *connector, int encoder_type)
261 struct drm_encoder *encoder;
264 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
265 if (connector->encoder_ids[i] == 0)
268 encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]);
272 if (encoder->encoder_type == encoder_type)
278 struct edid *radeon_connector_edid(struct drm_connector *connector)
280 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
281 struct drm_property_blob *edid_blob = connector->edid_blob_ptr;
283 if (radeon_connector->edid) {
284 return radeon_connector->edid;
285 } else if (edid_blob) {
286 struct edid *edid = kmemdup(edid_blob->data, edid_blob->length, GFP_KERNEL);
288 radeon_connector->edid = edid;
290 return radeon_connector->edid;
293 static void radeon_connector_get_edid(struct radeon_connector *radeon_connector)
295 struct drm_device *dev = radeon_connector->base.dev;
296 struct radeon_device *rdev = dev->dev_private;
298 if (radeon_connector->edid)
301 /* on hw with routers, select right port */
302 if (radeon_connector->router.ddc_valid)
303 radeon_router_select_ddc_port(radeon_connector);
305 if (radeon_connector_encoder_get_dp_bridge_encoder_id(&radeon_connector->base) !=
306 ENCODER_OBJECT_ID_NONE) {
307 struct radeon_connector_atom_dig *dig = radeon_connector->con_priv;
310 radeon_connector->edid = drm_get_edid_iic(&radeon_connector->base,
311 dig->dp_i2c_bus->adapter);
312 } else if ((radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
313 (radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP)) {
314 struct radeon_connector_atom_dig *dig = radeon_connector->con_priv;
316 if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT ||
317 dig->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) && dig->dp_i2c_bus)
318 radeon_connector->edid = drm_get_edid_iic(&radeon_connector->base,
319 dig->dp_i2c_bus->adapter);
320 else if (radeon_connector->ddc_bus && !radeon_connector->edid)
321 radeon_connector->edid = drm_get_edid_iic(&radeon_connector->base,
322 radeon_connector->ddc_bus->adapter);
323 } else if (radeon_connector->ddc_bus) {
324 radeon_connector->edid = drm_get_edid_iic(&radeon_connector->base,
325 radeon_connector->ddc_bus->adapter);
328 if (!radeon_connector->edid) {
329 /* don't fetch the edid from the vbios if ddc fails and runpm is
330 * enabled so we report disconnected.
332 if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0))
335 if (rdev->is_atom_bios) {
336 /* some laptops provide a hardcoded edid in rom for LCDs */
337 if (((radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_LVDS) ||
338 (radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP)))
339 radeon_connector->edid = radeon_bios_get_hardcoded_edid(rdev);
341 /* some servers provide a hardcoded edid in rom for KVMs */
342 radeon_connector->edid = radeon_bios_get_hardcoded_edid(rdev);
347 static void radeon_connector_free_edid(struct radeon_connector *radeon_connector)
349 if (radeon_connector->edid) {
350 kfree(radeon_connector->edid);
351 radeon_connector->edid = NULL;
355 static int radeon_ddc_get_modes(struct radeon_connector *radeon_connector)
359 if (radeon_connector->edid) {
360 drm_mode_connector_update_edid_property(&radeon_connector->base, radeon_connector->edid);
361 ret = drm_add_edid_modes(&radeon_connector->base, radeon_connector->edid);
362 drm_edid_to_eld(&radeon_connector->base, radeon_connector->edid);
365 drm_mode_connector_update_edid_property(&radeon_connector->base, NULL);
369 static struct drm_encoder *radeon_best_single_encoder(struct drm_connector *connector)
371 int enc_id = connector->encoder_ids[0];
372 /* pick the encoder ids */
374 return drm_encoder_find(connector->dev, enc_id);
378 static void radeon_get_native_mode(struct drm_connector *connector)
380 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
381 struct radeon_encoder *radeon_encoder;
386 radeon_encoder = to_radeon_encoder(encoder);
388 if (!list_empty(&connector->probed_modes)) {
389 struct drm_display_mode *preferred_mode =
390 list_first_entry(&connector->probed_modes,
391 struct drm_display_mode, head);
393 radeon_encoder->native_mode = *preferred_mode;
395 radeon_encoder->native_mode.clock = 0;
400 * radeon_connector_analog_encoder_conflict_solve
401 * - search for other connectors sharing this encoder
402 * if priority is true, then set them disconnected if this is connected
403 * if priority is false, set us disconnected if they are connected
405 static enum drm_connector_status
406 radeon_connector_analog_encoder_conflict_solve(struct drm_connector *connector,
407 struct drm_encoder *encoder,
408 enum drm_connector_status current_status,
411 struct drm_device *dev = connector->dev;
412 struct drm_connector *conflict;
413 struct radeon_connector *radeon_conflict;
416 list_for_each_entry(conflict, &dev->mode_config.connector_list, head) {
417 if (conflict == connector)
420 radeon_conflict = to_radeon_connector(conflict);
421 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
422 if (conflict->encoder_ids[i] == 0)
425 /* if the IDs match */
426 if (conflict->encoder_ids[i] == encoder->base.id) {
427 if (conflict->status != connector_status_connected)
430 if (radeon_conflict->use_digital)
433 if (priority == true) {
434 DRM_DEBUG_KMS("1: conflicting encoders switching off %s\n",
436 DRM_DEBUG_KMS("in favor of %s\n",
438 conflict->status = connector_status_disconnected;
439 radeon_connector_update_scratch_regs(conflict, connector_status_disconnected);
441 DRM_DEBUG_KMS("2: conflicting encoders switching off %s\n",
443 DRM_DEBUG_KMS("in favor of %s\n",
445 current_status = connector_status_disconnected;
451 return current_status;
455 static struct drm_display_mode *radeon_fp_native_mode(struct drm_encoder *encoder)
457 struct drm_device *dev = encoder->dev;
458 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
459 struct drm_display_mode *mode = NULL;
460 struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
462 if (native_mode->hdisplay != 0 &&
463 native_mode->vdisplay != 0 &&
464 native_mode->clock != 0) {
465 mode = drm_mode_duplicate(dev, native_mode);
466 mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
467 drm_mode_set_name(mode);
469 DRM_DEBUG_KMS("Adding native panel mode %s\n", mode->name);
470 } else if (native_mode->hdisplay != 0 &&
471 native_mode->vdisplay != 0) {
472 /* mac laptops without an edid */
473 /* Note that this is not necessarily the exact panel mode,
474 * but an approximation based on the cvt formula. For these
475 * systems we should ideally read the mode info out of the
476 * registers or add a mode table, but this works and is much
479 mode = drm_cvt_mode(dev, native_mode->hdisplay, native_mode->vdisplay, 60, true, false, false);
480 mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
481 DRM_DEBUG_KMS("Adding cvt approximation of native panel mode %s\n", mode->name);
486 static void radeon_add_common_modes(struct drm_encoder *encoder, struct drm_connector *connector)
488 struct drm_device *dev = encoder->dev;
489 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
490 struct drm_display_mode *mode = NULL;
491 struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
496 } common_modes[17] = {
516 for (i = 0; i < 17; i++) {
517 if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT)) {
518 if (common_modes[i].w > 1024 ||
519 common_modes[i].h > 768)
522 if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
523 if (common_modes[i].w > native_mode->hdisplay ||
524 common_modes[i].h > native_mode->vdisplay ||
525 (common_modes[i].w == native_mode->hdisplay &&
526 common_modes[i].h == native_mode->vdisplay))
529 if (common_modes[i].w < 320 || common_modes[i].h < 200)
532 mode = drm_cvt_mode(dev, common_modes[i].w, common_modes[i].h, 60, false, false, false);
533 drm_mode_probed_add(connector, mode);
537 static int radeon_connector_set_property(struct drm_connector *connector, struct drm_property *property,
540 struct drm_device *dev = connector->dev;
541 struct radeon_device *rdev = dev->dev_private;
542 struct drm_encoder *encoder;
543 struct radeon_encoder *radeon_encoder;
545 if (property == rdev->mode_info.coherent_mode_property) {
546 struct radeon_encoder_atom_dig *dig;
547 bool new_coherent_mode;
549 /* need to find digital encoder on connector */
550 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
554 radeon_encoder = to_radeon_encoder(encoder);
556 if (!radeon_encoder->enc_priv)
559 dig = radeon_encoder->enc_priv;
560 new_coherent_mode = val ? true : false;
561 if (dig->coherent_mode != new_coherent_mode) {
562 dig->coherent_mode = new_coherent_mode;
563 radeon_property_change_mode(&radeon_encoder->base);
567 if (property == rdev->mode_info.audio_property) {
568 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
569 /* need to find digital encoder on connector */
570 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
574 radeon_encoder = to_radeon_encoder(encoder);
576 if (radeon_connector->audio != val) {
577 radeon_connector->audio = val;
578 radeon_property_change_mode(&radeon_encoder->base);
582 if (property == rdev->mode_info.dither_property) {
583 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
584 /* need to find digital encoder on connector */
585 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
589 radeon_encoder = to_radeon_encoder(encoder);
591 if (radeon_connector->dither != val) {
592 radeon_connector->dither = val;
593 radeon_property_change_mode(&radeon_encoder->base);
597 if (property == rdev->mode_info.underscan_property) {
598 /* need to find digital encoder on connector */
599 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
603 radeon_encoder = to_radeon_encoder(encoder);
605 if (radeon_encoder->underscan_type != val) {
606 radeon_encoder->underscan_type = val;
607 radeon_property_change_mode(&radeon_encoder->base);
611 if (property == rdev->mode_info.underscan_hborder_property) {
612 /* need to find digital encoder on connector */
613 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
617 radeon_encoder = to_radeon_encoder(encoder);
619 if (radeon_encoder->underscan_hborder != val) {
620 radeon_encoder->underscan_hborder = val;
621 radeon_property_change_mode(&radeon_encoder->base);
625 if (property == rdev->mode_info.underscan_vborder_property) {
626 /* need to find digital encoder on connector */
627 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
631 radeon_encoder = to_radeon_encoder(encoder);
633 if (radeon_encoder->underscan_vborder != val) {
634 radeon_encoder->underscan_vborder = val;
635 radeon_property_change_mode(&radeon_encoder->base);
639 if (property == rdev->mode_info.tv_std_property) {
640 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TVDAC);
642 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_DAC);
648 radeon_encoder = to_radeon_encoder(encoder);
649 if (!radeon_encoder->enc_priv)
651 if (ASIC_IS_AVIVO(rdev) || radeon_r4xx_atom) {
652 struct radeon_encoder_atom_dac *dac_int;
653 dac_int = radeon_encoder->enc_priv;
654 dac_int->tv_std = val;
656 struct radeon_encoder_tv_dac *dac_int;
657 dac_int = radeon_encoder->enc_priv;
658 dac_int->tv_std = val;
660 radeon_property_change_mode(&radeon_encoder->base);
663 if (property == rdev->mode_info.load_detect_property) {
664 struct radeon_connector *radeon_connector =
665 to_radeon_connector(connector);
668 radeon_connector->dac_load_detect = false;
670 radeon_connector->dac_load_detect = true;
673 if (property == rdev->mode_info.tmds_pll_property) {
674 struct radeon_encoder_int_tmds *tmds = NULL;
676 /* need to find digital encoder on connector */
677 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
681 radeon_encoder = to_radeon_encoder(encoder);
683 tmds = radeon_encoder->enc_priv;
688 if (rdev->is_atom_bios)
689 ret = radeon_atombios_get_tmds_info(radeon_encoder, tmds);
691 ret = radeon_legacy_get_tmds_info_from_combios(radeon_encoder, tmds);
693 if (val == 1 || ret == false) {
694 radeon_legacy_get_tmds_info_from_table(radeon_encoder, tmds);
696 radeon_property_change_mode(&radeon_encoder->base);
699 if (property == dev->mode_config.scaling_mode_property) {
700 enum radeon_rmx_type rmx_type;
702 if (connector->encoder)
703 radeon_encoder = to_radeon_encoder(connector->encoder);
705 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
706 radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
711 case DRM_MODE_SCALE_NONE: rmx_type = RMX_OFF; break;
712 case DRM_MODE_SCALE_CENTER: rmx_type = RMX_CENTER; break;
713 case DRM_MODE_SCALE_ASPECT: rmx_type = RMX_ASPECT; break;
714 case DRM_MODE_SCALE_FULLSCREEN: rmx_type = RMX_FULL; break;
716 if (radeon_encoder->rmx_type == rmx_type)
719 if ((rmx_type != DRM_MODE_SCALE_NONE) &&
720 (radeon_encoder->native_mode.clock == 0))
723 radeon_encoder->rmx_type = rmx_type;
725 radeon_property_change_mode(&radeon_encoder->base);
731 static void radeon_fixup_lvds_native_mode(struct drm_encoder *encoder,
732 struct drm_connector *connector)
734 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
735 struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
736 struct drm_display_mode *t, *mode;
738 /* If the EDID preferred mode doesn't match the native mode, use it */
739 list_for_each_entry_safe(mode, t, &connector->probed_modes, head) {
740 if (mode->type & DRM_MODE_TYPE_PREFERRED) {
741 if (mode->hdisplay != native_mode->hdisplay ||
742 mode->vdisplay != native_mode->vdisplay)
743 memcpy(native_mode, mode, sizeof(*mode));
747 /* Try to get native mode details from EDID if necessary */
748 if (!native_mode->clock) {
749 list_for_each_entry_safe(mode, t, &connector->probed_modes, head) {
750 if (mode->hdisplay == native_mode->hdisplay &&
751 mode->vdisplay == native_mode->vdisplay) {
752 *native_mode = *mode;
753 drm_mode_set_crtcinfo(native_mode, CRTC_INTERLACE_HALVE_V);
754 DRM_DEBUG_KMS("Determined LVDS native mode details from EDID\n");
760 if (!native_mode->clock) {
761 DRM_DEBUG_KMS("No LVDS native mode details, disabling RMX\n");
762 radeon_encoder->rmx_type = RMX_OFF;
766 static int radeon_lvds_get_modes(struct drm_connector *connector)
768 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
769 struct drm_encoder *encoder;
771 struct drm_display_mode *mode;
773 if (radeon_connector->ddc_bus) {
774 radeon_connector_get_edid(radeon_connector);
775 ret = radeon_ddc_get_modes(radeon_connector);
777 encoder = radeon_best_single_encoder(connector);
779 radeon_fixup_lvds_native_mode(encoder, connector);
780 /* add scaled modes */
781 radeon_add_common_modes(encoder, connector);
787 encoder = radeon_best_single_encoder(connector);
791 /* we have no EDID modes */
792 mode = radeon_fp_native_mode(encoder);
795 drm_mode_probed_add(connector, mode);
796 /* add the width/height from vbios tables if available */
797 connector->display_info.width_mm = mode->width_mm;
798 connector->display_info.height_mm = mode->height_mm;
799 /* add scaled modes */
800 radeon_add_common_modes(encoder, connector);
806 static int radeon_lvds_mode_valid(struct drm_connector *connector,
807 struct drm_display_mode *mode)
809 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
811 if ((mode->hdisplay < 320) || (mode->vdisplay < 240))
815 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
816 struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
818 /* AVIVO hardware supports downscaling modes larger than the panel
819 * to the panel size, but I'm not sure this is desirable.
821 if ((mode->hdisplay > native_mode->hdisplay) ||
822 (mode->vdisplay > native_mode->vdisplay))
825 /* if scaling is disabled, block non-native modes */
826 if (radeon_encoder->rmx_type == RMX_OFF) {
827 if ((mode->hdisplay != native_mode->hdisplay) ||
828 (mode->vdisplay != native_mode->vdisplay))
836 static enum drm_connector_status
837 radeon_lvds_detect(struct drm_connector *connector, bool force)
839 struct drm_device *dev = connector->dev;
840 struct radeon_device *rdev = dev->dev_private;
841 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
842 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
843 enum drm_connector_status ret = connector_status_disconnected;
847 r = pm_runtime_get_sync(connector->dev->dev);
849 return connector_status_disconnected;
853 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
854 struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
856 /* check if panel is valid */
857 if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240)
858 ret = connector_status_connected;
859 /* don't fetch the edid from the vbios if ddc fails and runpm is
860 * enabled so we report disconnected.
862 if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0))
863 ret = connector_status_disconnected;
866 /* check for edid as well */
867 radeon_connector_get_edid(radeon_connector);
868 if (radeon_connector->edid)
869 ret = connector_status_connected;
871 if (radeon_connector->ddc_bus) {
872 radeon_connector->edid = drm_get_edid_iic(&radeon_connector->base,
873 radeon_connector->ddc_bus->adapter);
874 if (radeon_connector->edid)
875 ret = connector_status_connected;
878 /* check acpi lid status ??? */
880 radeon_connector_update_scratch_regs(connector, ret);
882 pm_runtime_mark_last_busy(connector->dev->dev);
883 pm_runtime_put_autosuspend(connector->dev->dev);
888 static void radeon_connector_destroy(struct drm_connector *connector)
890 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
892 radeon_connector_free_edid(radeon_connector);
893 kfree(radeon_connector->con_priv);
894 drm_connector_unregister(connector);
895 drm_connector_cleanup(connector);
899 static int radeon_lvds_set_property(struct drm_connector *connector,
900 struct drm_property *property,
903 struct drm_device *dev = connector->dev;
904 struct radeon_encoder *radeon_encoder;
905 enum radeon_rmx_type rmx_type;
908 if (property != dev->mode_config.scaling_mode_property)
911 if (connector->encoder)
912 radeon_encoder = to_radeon_encoder(connector->encoder);
914 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
915 radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
919 case DRM_MODE_SCALE_NONE: rmx_type = RMX_OFF; break;
920 case DRM_MODE_SCALE_CENTER: rmx_type = RMX_CENTER; break;
921 case DRM_MODE_SCALE_ASPECT: rmx_type = RMX_ASPECT; break;
923 case DRM_MODE_SCALE_FULLSCREEN: rmx_type = RMX_FULL; break;
925 if (radeon_encoder->rmx_type == rmx_type)
928 radeon_encoder->rmx_type = rmx_type;
930 radeon_property_change_mode(&radeon_encoder->base);
935 static const struct drm_connector_helper_funcs radeon_lvds_connector_helper_funcs = {
936 .get_modes = radeon_lvds_get_modes,
937 .mode_valid = radeon_lvds_mode_valid,
938 .best_encoder = radeon_best_single_encoder,
941 static const struct drm_connector_funcs radeon_lvds_connector_funcs = {
942 .dpms = drm_helper_connector_dpms,
943 .detect = radeon_lvds_detect,
944 .fill_modes = drm_helper_probe_single_connector_modes,
945 .destroy = radeon_connector_destroy,
946 .set_property = radeon_lvds_set_property,
949 static int radeon_vga_get_modes(struct drm_connector *connector)
951 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
954 radeon_connector_get_edid(radeon_connector);
955 ret = radeon_ddc_get_modes(radeon_connector);
957 radeon_get_native_mode(connector);
962 static int radeon_vga_mode_valid(struct drm_connector *connector,
963 struct drm_display_mode *mode)
965 struct drm_device *dev = connector->dev;
966 struct radeon_device *rdev = dev->dev_private;
968 /* XXX check mode bandwidth */
970 if ((mode->clock / 10) > rdev->clock.max_pixel_clock)
971 return MODE_CLOCK_HIGH;
976 static enum drm_connector_status
977 radeon_vga_detect(struct drm_connector *connector, bool force)
979 struct drm_device *dev = connector->dev;
980 struct radeon_device *rdev = dev->dev_private;
981 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
982 struct drm_encoder *encoder;
983 const struct drm_encoder_helper_funcs *encoder_funcs;
985 enum drm_connector_status ret = connector_status_disconnected;
989 r = pm_runtime_get_sync(connector->dev->dev);
991 return connector_status_disconnected;
994 encoder = radeon_best_single_encoder(connector);
996 ret = connector_status_disconnected;
998 if (radeon_connector->ddc_bus)
999 dret = radeon_ddc_probe(radeon_connector, false);
1001 radeon_connector->detected_by_load = false;
1002 radeon_connector_free_edid(radeon_connector);
1003 radeon_connector_get_edid(radeon_connector);
1005 if (!radeon_connector->edid) {
1006 DRM_ERROR("%s: probed a monitor but no|invalid EDID\n",
1008 ret = connector_status_connected;
1010 radeon_connector->use_digital =
1011 !!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
1013 /* some oems have boards with separate digital and analog connectors
1014 * with a shared ddc line (often vga + hdmi)
1016 if (radeon_connector->use_digital && radeon_connector->shared_ddc) {
1017 radeon_connector_free_edid(radeon_connector);
1018 ret = connector_status_disconnected;
1020 ret = connector_status_connected;
1025 /* if we aren't forcing don't do destructive polling */
1027 /* only return the previous status if we last
1028 * detected a monitor via load.
1030 if (radeon_connector->detected_by_load)
1031 ret = connector->status;
1035 if (radeon_connector->dac_load_detect && encoder) {
1036 encoder_funcs = encoder->helper_private;
1037 ret = encoder_funcs->detect(encoder, connector);
1038 if (ret != connector_status_disconnected)
1039 radeon_connector->detected_by_load = true;
1043 if (ret == connector_status_connected)
1044 ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
1046 /* RN50 and some RV100 asics in servers often have a hardcoded EDID in the
1047 * vbios to deal with KVMs. If we have one and are not able to detect a monitor
1048 * by other means, assume the CRT is connected and use that EDID.
1050 if ((!rdev->is_atom_bios) &&
1051 (ret == connector_status_disconnected) &&
1052 rdev->mode_info.bios_hardcoded_edid_size) {
1053 ret = connector_status_connected;
1056 radeon_connector_update_scratch_regs(connector, ret);
1060 pm_runtime_mark_last_busy(connector->dev->dev);
1061 pm_runtime_put_autosuspend(connector->dev->dev);
1067 static const struct drm_connector_helper_funcs radeon_vga_connector_helper_funcs = {
1068 .get_modes = radeon_vga_get_modes,
1069 .mode_valid = radeon_vga_mode_valid,
1070 .best_encoder = radeon_best_single_encoder,
1073 static const struct drm_connector_funcs radeon_vga_connector_funcs = {
1074 .dpms = drm_helper_connector_dpms,
1075 .detect = radeon_vga_detect,
1076 .fill_modes = drm_helper_probe_single_connector_modes,
1077 .destroy = radeon_connector_destroy,
1078 .set_property = radeon_connector_set_property,
1081 static int radeon_tv_get_modes(struct drm_connector *connector)
1083 struct drm_device *dev = connector->dev;
1084 struct radeon_device *rdev = dev->dev_private;
1085 struct drm_display_mode *tv_mode;
1086 struct drm_encoder *encoder;
1088 encoder = radeon_best_single_encoder(connector);
1092 /* avivo chips can scale any mode */
1093 if (rdev->family >= CHIP_RS600)
1094 /* add scaled modes */
1095 radeon_add_common_modes(encoder, connector);
1097 /* only 800x600 is supported right now on pre-avivo chips */
1098 tv_mode = drm_cvt_mode(dev, 800, 600, 60, false, false, false);
1099 tv_mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
1100 drm_mode_probed_add(connector, tv_mode);
1105 static int radeon_tv_mode_valid(struct drm_connector *connector,
1106 struct drm_display_mode *mode)
1108 if ((mode->hdisplay > 1024) || (mode->vdisplay > 768))
1109 return MODE_CLOCK_RANGE;
1113 static enum drm_connector_status
1114 radeon_tv_detect(struct drm_connector *connector, bool force)
1116 struct drm_encoder *encoder;
1117 const struct drm_encoder_helper_funcs *encoder_funcs;
1118 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1119 enum drm_connector_status ret = connector_status_disconnected;
1124 if (!radeon_connector->dac_load_detect)
1128 r = pm_runtime_get_sync(connector->dev->dev);
1130 return connector_status_disconnected;
1133 encoder = radeon_best_single_encoder(connector);
1135 ret = connector_status_disconnected;
1137 encoder_funcs = encoder->helper_private;
1138 ret = encoder_funcs->detect(encoder, connector);
1140 if (ret == connector_status_connected)
1141 ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, false);
1142 radeon_connector_update_scratch_regs(connector, ret);
1144 pm_runtime_mark_last_busy(connector->dev->dev);
1145 pm_runtime_put_autosuspend(connector->dev->dev);
1150 static const struct drm_connector_helper_funcs radeon_tv_connector_helper_funcs = {
1151 .get_modes = radeon_tv_get_modes,
1152 .mode_valid = radeon_tv_mode_valid,
1153 .best_encoder = radeon_best_single_encoder,
1156 static const struct drm_connector_funcs radeon_tv_connector_funcs = {
1157 .dpms = drm_helper_connector_dpms,
1158 .detect = radeon_tv_detect,
1159 .fill_modes = drm_helper_probe_single_connector_modes,
1160 .destroy = radeon_connector_destroy,
1161 .set_property = radeon_connector_set_property,
1164 static bool radeon_check_hpd_status_unchanged(struct drm_connector *connector)
1166 struct drm_device *dev = connector->dev;
1167 struct radeon_device *rdev = dev->dev_private;
1168 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1169 enum drm_connector_status status;
1171 /* We only trust HPD on R600 and newer ASICS. */
1172 if (rdev->family >= CHIP_R600
1173 && radeon_connector->hpd.hpd != RADEON_HPD_NONE) {
1174 if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd))
1175 status = connector_status_connected;
1177 status = connector_status_disconnected;
1178 if (connector->status == status)
1186 * DVI is complicated
1187 * Do a DDC probe, if DDC probe passes, get the full EDID so
1188 * we can do analog/digital monitor detection at this point.
1189 * If the monitor is an analog monitor or we got no DDC,
1190 * we need to find the DAC encoder object for this connector.
1191 * If we got no DDC, we do load detection on the DAC encoder object.
1192 * If we got analog DDC or load detection passes on the DAC encoder
1193 * we have to check if this analog encoder is shared with anyone else (TV)
1194 * if its shared we have to set the other connector to disconnected.
1196 static enum drm_connector_status
1197 radeon_dvi_detect(struct drm_connector *connector, bool force)
1199 struct drm_device *dev = connector->dev;
1200 struct radeon_device *rdev = dev->dev_private;
1201 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1202 struct drm_encoder *encoder = NULL;
1203 const struct drm_encoder_helper_funcs *encoder_funcs;
1205 enum drm_connector_status ret = connector_status_disconnected;
1206 bool dret = false, broken_edid = false;
1209 r = pm_runtime_get_sync(connector->dev->dev);
1211 return connector_status_disconnected;
1214 if (!force && radeon_check_hpd_status_unchanged(connector)) {
1215 ret = connector->status;
1219 if (radeon_connector->ddc_bus)
1220 dret = radeon_ddc_probe(radeon_connector, false);
1222 radeon_connector->detected_by_load = false;
1223 radeon_connector_free_edid(radeon_connector);
1224 radeon_connector_get_edid(radeon_connector);
1226 if (!radeon_connector->edid) {
1227 DRM_ERROR("%s: probed a monitor but no|invalid EDID\n",
1229 /* rs690 seems to have a problem with connectors not existing and always
1230 * return a block of 0's. If we see this just stop polling on this output */
1231 if ((rdev->family == CHIP_RS690 || rdev->family == CHIP_RS740) &&
1232 radeon_connector->base.null_edid_counter) {
1233 ret = connector_status_disconnected;
1234 DRM_ERROR("%s: detected RS690 floating bus bug, stopping ddc detect\n",
1236 radeon_connector->ddc_bus = NULL;
1238 ret = connector_status_connected;
1239 broken_edid = true; /* defer use_digital to later */
1242 radeon_connector->use_digital =
1243 !!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
1245 /* some oems have boards with separate digital and analog connectors
1246 * with a shared ddc line (often vga + hdmi)
1248 if ((!radeon_connector->use_digital) && radeon_connector->shared_ddc) {
1249 radeon_connector_free_edid(radeon_connector);
1250 ret = connector_status_disconnected;
1252 ret = connector_status_connected;
1254 /* This gets complicated. We have boards with VGA + HDMI with a
1255 * shared DDC line and we have boards with DVI-D + HDMI with a shared
1256 * DDC line. The latter is more complex because with DVI<->HDMI adapters
1257 * you don't really know what's connected to which port as both are digital.
1259 if (radeon_connector->shared_ddc && (ret == connector_status_connected)) {
1260 struct drm_connector *list_connector;
1261 struct radeon_connector *list_radeon_connector;
1262 list_for_each_entry(list_connector, &dev->mode_config.connector_list, head) {
1263 if (connector == list_connector)
1265 list_radeon_connector = to_radeon_connector(list_connector);
1266 if (list_radeon_connector->shared_ddc &&
1267 (list_radeon_connector->ddc_bus->rec.i2c_id ==
1268 radeon_connector->ddc_bus->rec.i2c_id)) {
1269 /* cases where both connectors are digital */
1270 if (list_connector->connector_type != DRM_MODE_CONNECTOR_VGA) {
1271 /* hpd is our only option in this case */
1272 if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
1273 radeon_connector_free_edid(radeon_connector);
1274 ret = connector_status_disconnected;
1283 if ((ret == connector_status_connected) && (radeon_connector->use_digital == true))
1286 /* DVI-D and HDMI-A are digital only */
1287 if ((connector->connector_type == DRM_MODE_CONNECTOR_DVID) ||
1288 (connector->connector_type == DRM_MODE_CONNECTOR_HDMIA))
1291 /* if we aren't forcing don't do destructive polling */
1293 /* only return the previous status if we last
1294 * detected a monitor via load.
1296 if (radeon_connector->detected_by_load)
1297 ret = connector->status;
1301 /* find analog encoder */
1302 if (radeon_connector->dac_load_detect) {
1303 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1304 if (connector->encoder_ids[i] == 0)
1307 encoder = drm_encoder_find(connector->dev,
1308 connector->encoder_ids[i]);
1312 if (encoder->encoder_type != DRM_MODE_ENCODER_DAC &&
1313 encoder->encoder_type != DRM_MODE_ENCODER_TVDAC)
1316 encoder_funcs = encoder->helper_private;
1317 if (encoder_funcs->detect) {
1319 if (ret != connector_status_connected) {
1320 /* deal with analog monitors without DDC */
1321 ret = encoder_funcs->detect(encoder, connector);
1322 if (ret == connector_status_connected) {
1323 radeon_connector->use_digital = false;
1325 if (ret != connector_status_disconnected)
1326 radeon_connector->detected_by_load = true;
1329 enum drm_connector_status lret;
1330 /* assume digital unless load detected otherwise */
1331 radeon_connector->use_digital = true;
1332 lret = encoder_funcs->detect(encoder, connector);
1333 DRM_DEBUG_KMS("load_detect %x returned: %x\n",encoder->encoder_type,lret);
1334 if (lret == connector_status_connected)
1335 radeon_connector->use_digital = false;
1342 if ((ret == connector_status_connected) && (radeon_connector->use_digital == false) &&
1344 ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
1347 /* RN50 and some RV100 asics in servers often have a hardcoded EDID in the
1348 * vbios to deal with KVMs. If we have one and are not able to detect a monitor
1349 * by other means, assume the DFP is connected and use that EDID. In most
1350 * cases the DVI port is actually a virtual KVM port connected to the service
1354 if ((!rdev->is_atom_bios) &&
1355 (ret == connector_status_disconnected) &&
1356 rdev->mode_info.bios_hardcoded_edid_size) {
1357 radeon_connector->use_digital = true;
1358 ret = connector_status_connected;
1361 /* updated in get modes as well since we need to know if it's analog or digital */
1362 radeon_connector_update_scratch_regs(connector, ret);
1366 pm_runtime_mark_last_busy(connector->dev->dev);
1367 pm_runtime_put_autosuspend(connector->dev->dev);
1373 /* okay need to be smart in here about which encoder to pick */
1374 static struct drm_encoder *radeon_dvi_encoder(struct drm_connector *connector)
1376 int enc_id = connector->encoder_ids[0];
1377 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1378 struct drm_encoder *encoder;
1380 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1381 if (connector->encoder_ids[i] == 0)
1384 encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]);
1388 if (radeon_connector->use_digital == true) {
1389 if (encoder->encoder_type == DRM_MODE_ENCODER_TMDS)
1392 if (encoder->encoder_type == DRM_MODE_ENCODER_DAC ||
1393 encoder->encoder_type == DRM_MODE_ENCODER_TVDAC)
1398 /* see if we have a default encoder TODO */
1400 /* then check use digitial */
1401 /* pick the first one */
1403 return drm_encoder_find(connector->dev, enc_id);
1407 static void radeon_dvi_force(struct drm_connector *connector)
1409 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1410 if (connector->force == DRM_FORCE_ON)
1411 radeon_connector->use_digital = false;
1412 if (connector->force == DRM_FORCE_ON_DIGITAL)
1413 radeon_connector->use_digital = true;
1416 static int radeon_dvi_mode_valid(struct drm_connector *connector,
1417 struct drm_display_mode *mode)
1419 struct drm_device *dev = connector->dev;
1420 struct radeon_device *rdev = dev->dev_private;
1421 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1423 /* XXX check mode bandwidth */
1425 /* clocks over 135 MHz have heat issues with DVI on RV100 */
1426 if (radeon_connector->use_digital &&
1427 (rdev->family == CHIP_RV100) &&
1428 (mode->clock > 135000))
1429 return MODE_CLOCK_HIGH;
1431 if (radeon_connector->use_digital && (mode->clock > 165000)) {
1432 if ((radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I) ||
1433 (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D) ||
1434 (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_B))
1436 else if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
1437 /* HDMI 1.3+ supports max clock of 340 Mhz */
1438 if (mode->clock > 340000)
1439 return MODE_CLOCK_HIGH;
1443 return MODE_CLOCK_HIGH;
1447 /* check against the max pixel clock */
1448 if ((mode->clock / 10) > rdev->clock.max_pixel_clock)
1449 return MODE_CLOCK_HIGH;
1454 static const struct drm_connector_helper_funcs radeon_dvi_connector_helper_funcs = {
1455 .get_modes = radeon_vga_get_modes,
1456 .mode_valid = radeon_dvi_mode_valid,
1457 .best_encoder = radeon_dvi_encoder,
1460 static const struct drm_connector_funcs radeon_dvi_connector_funcs = {
1461 .dpms = drm_helper_connector_dpms,
1462 .detect = radeon_dvi_detect,
1463 .fill_modes = drm_helper_probe_single_connector_modes,
1464 .set_property = radeon_connector_set_property,
1465 .destroy = radeon_connector_destroy,
1466 .force = radeon_dvi_force,
1469 static void radeon_dp_connector_destroy(struct drm_connector *connector)
1471 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1472 struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1474 radeon_connector_free_edid(radeon_connector);
1475 if (radeon_dig_connector->dp_i2c_bus)
1476 radeon_i2c_destroy(radeon_dig_connector->dp_i2c_bus);
1477 kfree(radeon_connector->con_priv);
1478 drm_connector_unregister(connector);
1479 drm_connector_cleanup(connector);
1483 static int radeon_dp_get_modes(struct drm_connector *connector)
1485 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1486 struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1487 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1490 if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1491 (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1492 struct drm_display_mode *mode;
1494 if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
1495 if (!radeon_dig_connector->edp_on)
1496 atombios_set_edp_panel_power(connector,
1497 ATOM_TRANSMITTER_ACTION_POWER_ON);
1498 radeon_connector_get_edid(radeon_connector);
1499 ret = radeon_ddc_get_modes(radeon_connector);
1500 if (!radeon_dig_connector->edp_on)
1501 atombios_set_edp_panel_power(connector,
1502 ATOM_TRANSMITTER_ACTION_POWER_OFF);
1504 /* need to setup ddc on the bridge */
1505 if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1506 ENCODER_OBJECT_ID_NONE) {
1508 radeon_atom_ext_encoder_setup_ddc(encoder);
1510 radeon_connector_get_edid(radeon_connector);
1511 ret = radeon_ddc_get_modes(radeon_connector);
1516 radeon_fixup_lvds_native_mode(encoder, connector);
1517 /* add scaled modes */
1518 radeon_add_common_modes(encoder, connector);
1526 /* we have no EDID modes */
1527 mode = radeon_fp_native_mode(encoder);
1530 drm_mode_probed_add(connector, mode);
1531 /* add the width/height from vbios tables if available */
1532 connector->display_info.width_mm = mode->width_mm;
1533 connector->display_info.height_mm = mode->height_mm;
1534 /* add scaled modes */
1535 radeon_add_common_modes(encoder, connector);
1538 /* need to setup ddc on the bridge */
1539 if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1540 ENCODER_OBJECT_ID_NONE) {
1542 radeon_atom_ext_encoder_setup_ddc(encoder);
1544 radeon_connector_get_edid(radeon_connector);
1545 ret = radeon_ddc_get_modes(radeon_connector);
1547 radeon_get_native_mode(connector);
1553 u16 radeon_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *connector)
1555 struct drm_encoder *encoder;
1556 struct radeon_encoder *radeon_encoder;
1559 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1560 if (connector->encoder_ids[i] == 0)
1563 encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]);
1567 radeon_encoder = to_radeon_encoder(encoder);
1569 switch (radeon_encoder->encoder_id) {
1570 case ENCODER_OBJECT_ID_TRAVIS:
1571 case ENCODER_OBJECT_ID_NUTMEG:
1572 return radeon_encoder->encoder_id;
1578 return ENCODER_OBJECT_ID_NONE;
1581 static bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector)
1583 struct drm_encoder *encoder;
1584 struct radeon_encoder *radeon_encoder;
1588 for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1589 if (connector->encoder_ids[i] == 0)
1592 encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]);
1596 radeon_encoder = to_radeon_encoder(encoder);
1597 if (radeon_encoder->caps & ATOM_ENCODER_CAP_RECORD_HBR2)
1604 bool radeon_connector_is_dp12_capable(struct drm_connector *connector)
1606 struct drm_device *dev = connector->dev;
1607 struct radeon_device *rdev = dev->dev_private;
1609 if (ASIC_IS_DCE5(rdev) &&
1610 (rdev->clock.default_dispclk >= 53900) &&
1611 radeon_connector_encoder_is_hbr2(connector)) {
1618 static enum drm_connector_status
1619 radeon_dp_detect(struct drm_connector *connector, bool force)
1621 struct drm_device *dev = connector->dev;
1622 struct radeon_device *rdev = dev->dev_private;
1623 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1624 enum drm_connector_status ret = connector_status_disconnected;
1625 struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1626 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1630 r = pm_runtime_get_sync(connector->dev->dev);
1632 return connector_status_disconnected;
1635 if (!force && radeon_check_hpd_status_unchanged(connector)) {
1636 ret = connector->status;
1640 radeon_connector_free_edid(radeon_connector);
1642 if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1643 (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1645 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
1646 struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
1648 /* check if panel is valid */
1649 if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240)
1650 ret = connector_status_connected;
1651 /* don't fetch the edid from the vbios if ddc fails and runpm is
1652 * enabled so we report disconnected.
1654 if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0))
1655 ret = connector_status_disconnected;
1657 /* eDP is always DP */
1658 radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT;
1659 if (!radeon_dig_connector->edp_on)
1660 atombios_set_edp_panel_power(connector,
1661 ATOM_TRANSMITTER_ACTION_POWER_ON);
1662 if (radeon_dp_getdpcd(radeon_connector))
1663 ret = connector_status_connected;
1664 if (!radeon_dig_connector->edp_on)
1665 atombios_set_edp_panel_power(connector,
1666 ATOM_TRANSMITTER_ACTION_POWER_OFF);
1667 } else if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1668 ENCODER_OBJECT_ID_NONE) {
1669 /* DP bridges are always DP */
1670 radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT;
1671 /* get the DPCD from the bridge */
1672 radeon_dp_getdpcd(radeon_connector);
1675 /* setup ddc on the bridge */
1676 radeon_atom_ext_encoder_setup_ddc(encoder);
1677 /* bridge chips are always aux */
1678 if (radeon_ddc_probe(radeon_connector, true)) /* try DDC */
1679 ret = connector_status_connected;
1680 else if (radeon_connector->dac_load_detect) { /* try load detection */
1681 const struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
1682 ret = encoder_funcs->detect(encoder, connector);
1686 radeon_dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector);
1687 if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
1688 ret = connector_status_connected;
1689 if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT)
1690 radeon_dp_getdpcd(radeon_connector);
1692 if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
1693 if (radeon_dp_getdpcd(radeon_connector))
1694 ret = connector_status_connected;
1696 /* try non-aux ddc (DP to DVI/HDMI/etc. adapter) */
1697 if (radeon_ddc_probe(radeon_connector, false))
1698 ret = connector_status_connected;
1703 radeon_connector_update_scratch_regs(connector, ret);
1706 pm_runtime_mark_last_busy(connector->dev->dev);
1707 pm_runtime_put_autosuspend(connector->dev->dev);
1713 static int radeon_dp_mode_valid(struct drm_connector *connector,
1714 struct drm_display_mode *mode)
1716 struct drm_device *dev = connector->dev;
1717 struct radeon_device *rdev = dev->dev_private;
1718 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1719 struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1721 /* XXX check mode bandwidth */
1723 if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1724 (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1725 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1727 if ((mode->hdisplay < 320) || (mode->vdisplay < 240))
1731 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
1732 struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
1734 /* AVIVO hardware supports downscaling modes larger than the panel
1735 * to the panel size, but I'm not sure this is desirable.
1737 if ((mode->hdisplay > native_mode->hdisplay) ||
1738 (mode->vdisplay > native_mode->vdisplay))
1741 /* if scaling is disabled, block non-native modes */
1742 if (radeon_encoder->rmx_type == RMX_OFF) {
1743 if ((mode->hdisplay != native_mode->hdisplay) ||
1744 (mode->vdisplay != native_mode->vdisplay))
1749 if ((radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
1750 (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) {
1751 return radeon_dp_mode_valid_helper(connector, mode);
1753 if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
1754 /* HDMI 1.3+ supports max clock of 340 Mhz */
1755 if (mode->clock > 340000)
1756 return MODE_CLOCK_HIGH;
1758 if (mode->clock > 165000)
1759 return MODE_CLOCK_HIGH;
1767 static const struct drm_connector_helper_funcs radeon_dp_connector_helper_funcs = {
1768 .get_modes = radeon_dp_get_modes,
1769 .mode_valid = radeon_dp_mode_valid,
1770 .best_encoder = radeon_dvi_encoder,
1773 static const struct drm_connector_funcs radeon_dp_connector_funcs = {
1774 .dpms = drm_helper_connector_dpms,
1775 .detect = radeon_dp_detect,
1776 .fill_modes = drm_helper_probe_single_connector_modes,
1777 .set_property = radeon_connector_set_property,
1778 .destroy = radeon_dp_connector_destroy,
1779 .force = radeon_dvi_force,
1782 static const struct drm_connector_funcs radeon_edp_connector_funcs = {
1783 .dpms = drm_helper_connector_dpms,
1784 .detect = radeon_dp_detect,
1785 .fill_modes = drm_helper_probe_single_connector_modes,
1786 .set_property = radeon_lvds_set_property,
1787 .destroy = radeon_dp_connector_destroy,
1788 .force = radeon_dvi_force,
1791 static const struct drm_connector_funcs radeon_lvds_bridge_connector_funcs = {
1792 .dpms = drm_helper_connector_dpms,
1793 .detect = radeon_dp_detect,
1794 .fill_modes = drm_helper_probe_single_connector_modes,
1795 .set_property = radeon_lvds_set_property,
1796 .destroy = radeon_dp_connector_destroy,
1797 .force = radeon_dvi_force,
1801 radeon_add_atom_connector(struct drm_device *dev,
1802 uint32_t connector_id,
1803 uint32_t supported_device,
1805 struct radeon_i2c_bus_rec *i2c_bus,
1806 uint32_t igp_lane_info,
1807 uint16_t connector_object_id,
1808 struct radeon_hpd *hpd,
1809 struct radeon_router *router)
1811 struct radeon_device *rdev = dev->dev_private;
1812 struct drm_connector *connector;
1813 struct radeon_connector *radeon_connector;
1814 struct radeon_connector_atom_dig *radeon_dig_connector;
1815 struct drm_encoder *encoder;
1816 struct radeon_encoder *radeon_encoder;
1817 uint32_t subpixel_order = SubPixelNone;
1818 bool shared_ddc = false;
1819 bool is_dp_bridge = false;
1820 bool has_aux = false;
1822 if (connector_type == DRM_MODE_CONNECTOR_Unknown)
1825 /* if the user selected tv=0 don't try and add the connector */
1826 if (((connector_type == DRM_MODE_CONNECTOR_SVIDEO) ||
1827 (connector_type == DRM_MODE_CONNECTOR_Composite) ||
1828 (connector_type == DRM_MODE_CONNECTOR_9PinDIN)) &&
1832 /* see if we already added it */
1833 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
1834 radeon_connector = to_radeon_connector(connector);
1835 if (radeon_connector->connector_id == connector_id) {
1836 radeon_connector->devices |= supported_device;
1839 if (radeon_connector->ddc_bus && i2c_bus->valid) {
1840 if (radeon_connector->ddc_bus->rec.i2c_id == i2c_bus->i2c_id) {
1841 radeon_connector->shared_ddc = true;
1844 if (radeon_connector->router_bus && router->ddc_valid &&
1845 (radeon_connector->router.router_id == router->router_id)) {
1846 radeon_connector->shared_ddc = false;
1852 /* check if it's a dp bridge */
1853 list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
1854 radeon_encoder = to_radeon_encoder(encoder);
1855 if (radeon_encoder->devices & supported_device) {
1856 switch (radeon_encoder->encoder_id) {
1857 case ENCODER_OBJECT_ID_TRAVIS:
1858 case ENCODER_OBJECT_ID_NUTMEG:
1859 is_dp_bridge = true;
1867 radeon_connector = kzalloc(sizeof(struct radeon_connector), GFP_KERNEL);
1868 if (!radeon_connector)
1871 connector = &radeon_connector->base;
1873 radeon_connector->connector_id = connector_id;
1874 radeon_connector->devices = supported_device;
1875 radeon_connector->shared_ddc = shared_ddc;
1876 radeon_connector->connector_object_id = connector_object_id;
1877 radeon_connector->hpd = *hpd;
1879 radeon_connector->router = *router;
1880 if (router->ddc_valid || router->cd_valid) {
1881 radeon_connector->router_bus = radeon_i2c_lookup(rdev, &router->i2c_info);
1882 if (!radeon_connector->router_bus)
1883 DRM_ERROR("Failed to assign router i2c bus! Check dmesg for i2c errors.\n");
1887 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1888 if (!radeon_dig_connector)
1890 radeon_dig_connector->igp_lane_info = igp_lane_info;
1891 radeon_connector->con_priv = radeon_dig_connector;
1892 if (i2c_bus->valid) {
1893 /* add DP i2c bus */
1894 if (connector_type == DRM_MODE_CONNECTOR_eDP)
1895 radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch");
1897 radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch");
1898 if (radeon_dig_connector->dp_i2c_bus)
1901 DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
1902 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1903 if (!radeon_connector->ddc_bus)
1904 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1906 switch (connector_type) {
1907 case DRM_MODE_CONNECTOR_VGA:
1908 case DRM_MODE_CONNECTOR_DVIA:
1910 drm_connector_init(dev, &radeon_connector->base,
1911 &radeon_dp_connector_funcs, connector_type);
1912 drm_connector_helper_add(&radeon_connector->base,
1913 &radeon_dp_connector_helper_funcs);
1914 connector->interlace_allowed = true;
1915 connector->doublescan_allowed = true;
1916 radeon_connector->dac_load_detect = true;
1917 drm_object_attach_property(&radeon_connector->base.base,
1918 rdev->mode_info.load_detect_property,
1920 drm_object_attach_property(&radeon_connector->base.base,
1921 dev->mode_config.scaling_mode_property,
1922 DRM_MODE_SCALE_NONE);
1924 case DRM_MODE_CONNECTOR_DVII:
1925 case DRM_MODE_CONNECTOR_DVID:
1926 case DRM_MODE_CONNECTOR_HDMIA:
1927 case DRM_MODE_CONNECTOR_HDMIB:
1928 case DRM_MODE_CONNECTOR_DisplayPort:
1929 drm_connector_init(dev, &radeon_connector->base,
1930 &radeon_dp_connector_funcs, connector_type);
1931 drm_connector_helper_add(&radeon_connector->base,
1932 &radeon_dp_connector_helper_funcs);
1933 drm_object_attach_property(&radeon_connector->base.base,
1934 rdev->mode_info.underscan_property,
1936 drm_object_attach_property(&radeon_connector->base.base,
1937 rdev->mode_info.underscan_hborder_property,
1939 drm_object_attach_property(&radeon_connector->base.base,
1940 rdev->mode_info.underscan_vborder_property,
1943 drm_object_attach_property(&radeon_connector->base.base,
1944 dev->mode_config.scaling_mode_property,
1945 DRM_MODE_SCALE_NONE);
1947 drm_object_attach_property(&radeon_connector->base.base,
1948 rdev->mode_info.dither_property,
1949 RADEON_FMT_DITHER_DISABLE);
1951 if (radeon_audio != 0)
1952 drm_object_attach_property(&radeon_connector->base.base,
1953 rdev->mode_info.audio_property,
1956 subpixel_order = SubPixelHorizontalRGB;
1957 connector->interlace_allowed = true;
1958 if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
1959 connector->doublescan_allowed = true;
1961 connector->doublescan_allowed = false;
1962 if (connector_type == DRM_MODE_CONNECTOR_DVII) {
1963 radeon_connector->dac_load_detect = true;
1964 drm_object_attach_property(&radeon_connector->base.base,
1965 rdev->mode_info.load_detect_property,
1969 case DRM_MODE_CONNECTOR_LVDS:
1970 case DRM_MODE_CONNECTOR_eDP:
1971 drm_connector_init(dev, &radeon_connector->base,
1972 &radeon_lvds_bridge_connector_funcs, connector_type);
1973 drm_connector_helper_add(&radeon_connector->base,
1974 &radeon_dp_connector_helper_funcs);
1975 drm_object_attach_property(&radeon_connector->base.base,
1976 dev->mode_config.scaling_mode_property,
1977 DRM_MODE_SCALE_FULLSCREEN);
1978 subpixel_order = SubPixelHorizontalRGB;
1979 connector->interlace_allowed = false;
1980 connector->doublescan_allowed = false;
1984 switch (connector_type) {
1985 case DRM_MODE_CONNECTOR_VGA:
1986 drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1987 drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1988 if (i2c_bus->valid) {
1989 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1990 if (!radeon_connector->ddc_bus)
1991 DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1993 radeon_connector->dac_load_detect = true;
1994 drm_object_attach_property(&radeon_connector->base.base,
1995 rdev->mode_info.load_detect_property,
1997 if (ASIC_IS_AVIVO(rdev))
1998 drm_object_attach_property(&radeon_connector->base.base,
1999 dev->mode_config.scaling_mode_property,
2000 DRM_MODE_SCALE_NONE);
2001 /* no HPD on analog connectors */
2002 radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2003 connector->polled = DRM_CONNECTOR_POLL_CONNECT;
2004 connector->interlace_allowed = true;
2005 connector->doublescan_allowed = true;
2007 case DRM_MODE_CONNECTOR_DVIA:
2008 drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
2009 drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
2010 if (i2c_bus->valid) {
2011 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2012 if (!radeon_connector->ddc_bus)
2013 DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2015 radeon_connector->dac_load_detect = true;
2016 drm_object_attach_property(&radeon_connector->base.base,
2017 rdev->mode_info.load_detect_property,
2019 if (ASIC_IS_AVIVO(rdev))
2020 drm_object_attach_property(&radeon_connector->base.base,
2021 dev->mode_config.scaling_mode_property,
2022 DRM_MODE_SCALE_NONE);
2023 /* no HPD on analog connectors */
2024 radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2025 connector->interlace_allowed = true;
2026 connector->doublescan_allowed = true;
2028 case DRM_MODE_CONNECTOR_DVII:
2029 case DRM_MODE_CONNECTOR_DVID:
2030 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2031 if (!radeon_dig_connector)
2033 radeon_dig_connector->igp_lane_info = igp_lane_info;
2034 radeon_connector->con_priv = radeon_dig_connector;
2035 drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
2036 drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
2037 if (i2c_bus->valid) {
2038 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2039 if (!radeon_connector->ddc_bus)
2040 DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2042 subpixel_order = SubPixelHorizontalRGB;
2043 drm_object_attach_property(&radeon_connector->base.base,
2044 rdev->mode_info.coherent_mode_property,
2046 if (ASIC_IS_AVIVO(rdev)) {
2047 drm_object_attach_property(&radeon_connector->base.base,
2048 rdev->mode_info.underscan_property,
2050 drm_object_attach_property(&radeon_connector->base.base,
2051 rdev->mode_info.underscan_hborder_property,
2053 drm_object_attach_property(&radeon_connector->base.base,
2054 rdev->mode_info.underscan_vborder_property,
2056 drm_object_attach_property(&radeon_connector->base.base,
2057 rdev->mode_info.dither_property,
2058 RADEON_FMT_DITHER_DISABLE);
2059 drm_object_attach_property(&radeon_connector->base.base,
2060 dev->mode_config.scaling_mode_property,
2061 DRM_MODE_SCALE_NONE);
2063 if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
2064 drm_object_attach_property(&radeon_connector->base.base,
2065 rdev->mode_info.audio_property,
2068 if (connector_type == DRM_MODE_CONNECTOR_DVII) {
2069 radeon_connector->dac_load_detect = true;
2070 drm_object_attach_property(&radeon_connector->base.base,
2071 rdev->mode_info.load_detect_property,
2074 connector->interlace_allowed = true;
2075 if (connector_type == DRM_MODE_CONNECTOR_DVII)
2076 connector->doublescan_allowed = true;
2078 connector->doublescan_allowed = false;
2080 case DRM_MODE_CONNECTOR_HDMIA:
2081 case DRM_MODE_CONNECTOR_HDMIB:
2082 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2083 if (!radeon_dig_connector)
2085 radeon_dig_connector->igp_lane_info = igp_lane_info;
2086 radeon_connector->con_priv = radeon_dig_connector;
2087 drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
2088 drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
2089 if (i2c_bus->valid) {
2090 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2091 if (!radeon_connector->ddc_bus)
2092 DRM_ERROR("HDMI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2094 drm_object_attach_property(&radeon_connector->base.base,
2095 rdev->mode_info.coherent_mode_property,
2097 if (ASIC_IS_AVIVO(rdev)) {
2098 drm_object_attach_property(&radeon_connector->base.base,
2099 rdev->mode_info.underscan_property,
2101 drm_object_attach_property(&radeon_connector->base.base,
2102 rdev->mode_info.underscan_hborder_property,
2104 drm_object_attach_property(&radeon_connector->base.base,
2105 rdev->mode_info.underscan_vborder_property,
2107 drm_object_attach_property(&radeon_connector->base.base,
2108 rdev->mode_info.dither_property,
2109 RADEON_FMT_DITHER_DISABLE);
2110 drm_object_attach_property(&radeon_connector->base.base,
2111 dev->mode_config.scaling_mode_property,
2112 DRM_MODE_SCALE_NONE);
2114 if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
2115 drm_object_attach_property(&radeon_connector->base.base,
2116 rdev->mode_info.audio_property,
2119 subpixel_order = SubPixelHorizontalRGB;
2120 connector->interlace_allowed = true;
2121 if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
2122 connector->doublescan_allowed = true;
2124 connector->doublescan_allowed = false;
2126 case DRM_MODE_CONNECTOR_DisplayPort:
2127 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2128 if (!radeon_dig_connector)
2130 radeon_dig_connector->igp_lane_info = igp_lane_info;
2131 radeon_connector->con_priv = radeon_dig_connector;
2132 drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
2133 drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
2134 if (i2c_bus->valid) {
2135 /* add DP i2c bus */
2136 radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch");
2137 if (!radeon_dig_connector->dp_i2c_bus)
2138 DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
2139 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2140 if (radeon_connector->ddc_bus)
2143 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2145 subpixel_order = SubPixelHorizontalRGB;
2146 drm_object_attach_property(&radeon_connector->base.base,
2147 rdev->mode_info.coherent_mode_property,
2149 if (ASIC_IS_AVIVO(rdev)) {
2150 drm_object_attach_property(&radeon_connector->base.base,
2151 rdev->mode_info.underscan_property,
2153 drm_object_attach_property(&radeon_connector->base.base,
2154 rdev->mode_info.underscan_hborder_property,
2156 drm_object_attach_property(&radeon_connector->base.base,
2157 rdev->mode_info.underscan_vborder_property,
2159 drm_object_attach_property(&radeon_connector->base.base,
2160 rdev->mode_info.dither_property,
2161 RADEON_FMT_DITHER_DISABLE);
2162 drm_object_attach_property(&radeon_connector->base.base,
2163 dev->mode_config.scaling_mode_property,
2164 DRM_MODE_SCALE_NONE);
2166 if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
2167 drm_object_attach_property(&radeon_connector->base.base,
2168 rdev->mode_info.audio_property,
2171 connector->interlace_allowed = true;
2172 /* in theory with a DP to VGA converter... */
2173 connector->doublescan_allowed = false;
2175 case DRM_MODE_CONNECTOR_eDP:
2176 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2177 if (!radeon_dig_connector)
2179 radeon_dig_connector->igp_lane_info = igp_lane_info;
2180 radeon_connector->con_priv = radeon_dig_connector;
2181 drm_connector_init(dev, &radeon_connector->base, &radeon_edp_connector_funcs, connector_type);
2182 drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
2183 if (i2c_bus->valid) {
2184 /* add DP i2c bus */
2185 radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch");
2186 if (radeon_dig_connector->dp_i2c_bus)
2189 DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
2190 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2191 if (!radeon_connector->ddc_bus)
2192 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2194 drm_object_attach_property(&radeon_connector->base.base,
2195 dev->mode_config.scaling_mode_property,
2196 DRM_MODE_SCALE_FULLSCREEN);
2197 subpixel_order = SubPixelHorizontalRGB;
2198 connector->interlace_allowed = false;
2199 connector->doublescan_allowed = false;
2201 case DRM_MODE_CONNECTOR_SVIDEO:
2202 case DRM_MODE_CONNECTOR_Composite:
2203 case DRM_MODE_CONNECTOR_9PinDIN:
2204 drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
2205 drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
2206 radeon_connector->dac_load_detect = true;
2207 drm_object_attach_property(&radeon_connector->base.base,
2208 rdev->mode_info.load_detect_property,
2210 drm_object_attach_property(&radeon_connector->base.base,
2211 rdev->mode_info.tv_std_property,
2212 radeon_atombios_get_tv_info(rdev));
2213 /* no HPD on analog connectors */
2214 radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2215 connector->interlace_allowed = false;
2216 connector->doublescan_allowed = false;
2218 case DRM_MODE_CONNECTOR_LVDS:
2219 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2220 if (!radeon_dig_connector)
2222 radeon_dig_connector->igp_lane_info = igp_lane_info;
2223 radeon_connector->con_priv = radeon_dig_connector;
2224 drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
2225 drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
2226 if (i2c_bus->valid) {
2227 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2228 if (!radeon_connector->ddc_bus)
2229 DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2231 drm_object_attach_property(&radeon_connector->base.base,
2232 dev->mode_config.scaling_mode_property,
2233 DRM_MODE_SCALE_FULLSCREEN);
2234 subpixel_order = SubPixelHorizontalRGB;
2235 connector->interlace_allowed = false;
2236 connector->doublescan_allowed = false;
2241 if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) {
2243 connector->polled = DRM_CONNECTOR_POLL_CONNECT;
2245 connector->polled = DRM_CONNECTOR_POLL_HPD;
2247 connector->display_info.subpixel_order = subpixel_order;
2248 drm_connector_register(connector);
2251 radeon_dp_aux_init(radeon_connector);
2256 drm_connector_cleanup(connector);
2261 radeon_add_legacy_connector(struct drm_device *dev,
2262 uint32_t connector_id,
2263 uint32_t supported_device,
2265 struct radeon_i2c_bus_rec *i2c_bus,
2266 uint16_t connector_object_id,
2267 struct radeon_hpd *hpd)
2269 struct radeon_device *rdev = dev->dev_private;
2270 struct drm_connector *connector;
2271 struct radeon_connector *radeon_connector;
2272 uint32_t subpixel_order = SubPixelNone;
2274 if (connector_type == DRM_MODE_CONNECTOR_Unknown)
2277 /* if the user selected tv=0 don't try and add the connector */
2278 if (((connector_type == DRM_MODE_CONNECTOR_SVIDEO) ||
2279 (connector_type == DRM_MODE_CONNECTOR_Composite) ||
2280 (connector_type == DRM_MODE_CONNECTOR_9PinDIN)) &&
2284 /* see if we already added it */
2285 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
2286 radeon_connector = to_radeon_connector(connector);
2287 if (radeon_connector->connector_id == connector_id) {
2288 radeon_connector->devices |= supported_device;
2293 radeon_connector = kzalloc(sizeof(struct radeon_connector), GFP_KERNEL);
2294 if (!radeon_connector)
2297 connector = &radeon_connector->base;
2299 radeon_connector->connector_id = connector_id;
2300 radeon_connector->devices = supported_device;
2301 radeon_connector->connector_object_id = connector_object_id;
2302 radeon_connector->hpd = *hpd;
2304 switch (connector_type) {
2305 case DRM_MODE_CONNECTOR_VGA:
2306 drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
2307 drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
2308 if (i2c_bus->valid) {
2309 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2310 if (!radeon_connector->ddc_bus)
2311 DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2313 radeon_connector->dac_load_detect = true;
2314 drm_object_attach_property(&radeon_connector->base.base,
2315 rdev->mode_info.load_detect_property,
2317 /* no HPD on analog connectors */
2318 radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2319 connector->polled = DRM_CONNECTOR_POLL_CONNECT;
2320 connector->interlace_allowed = true;
2321 connector->doublescan_allowed = true;
2323 case DRM_MODE_CONNECTOR_DVIA:
2324 drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
2325 drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
2326 if (i2c_bus->valid) {
2327 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2328 if (!radeon_connector->ddc_bus)
2329 DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2331 radeon_connector->dac_load_detect = true;
2332 drm_object_attach_property(&radeon_connector->base.base,
2333 rdev->mode_info.load_detect_property,
2335 /* no HPD on analog connectors */
2336 radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2337 connector->interlace_allowed = true;
2338 connector->doublescan_allowed = true;
2340 case DRM_MODE_CONNECTOR_DVII:
2341 case DRM_MODE_CONNECTOR_DVID:
2342 drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
2343 drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
2344 if (i2c_bus->valid) {
2345 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2346 if (!radeon_connector->ddc_bus)
2347 DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2349 if (connector_type == DRM_MODE_CONNECTOR_DVII) {
2350 radeon_connector->dac_load_detect = true;
2351 drm_object_attach_property(&radeon_connector->base.base,
2352 rdev->mode_info.load_detect_property,
2355 subpixel_order = SubPixelHorizontalRGB;
2356 connector->interlace_allowed = true;
2357 if (connector_type == DRM_MODE_CONNECTOR_DVII)
2358 connector->doublescan_allowed = true;
2360 connector->doublescan_allowed = false;
2362 case DRM_MODE_CONNECTOR_SVIDEO:
2363 case DRM_MODE_CONNECTOR_Composite:
2364 case DRM_MODE_CONNECTOR_9PinDIN:
2365 drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
2366 drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
2367 radeon_connector->dac_load_detect = true;
2368 /* RS400,RC410,RS480 chipset seems to report a lot
2369 * of false positive on load detect, we haven't yet
2370 * found a way to make load detect reliable on those
2371 * chipset, thus just disable it for TV.
2373 if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480)
2374 radeon_connector->dac_load_detect = false;
2375 drm_object_attach_property(&radeon_connector->base.base,
2376 rdev->mode_info.load_detect_property,
2377 radeon_connector->dac_load_detect);
2378 drm_object_attach_property(&radeon_connector->base.base,
2379 rdev->mode_info.tv_std_property,
2380 radeon_combios_get_tv_info(rdev));
2381 /* no HPD on analog connectors */
2382 radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2383 connector->interlace_allowed = false;
2384 connector->doublescan_allowed = false;
2386 case DRM_MODE_CONNECTOR_LVDS:
2387 drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
2388 drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
2389 if (i2c_bus->valid) {
2390 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2391 if (!radeon_connector->ddc_bus)
2392 DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2394 drm_object_attach_property(&radeon_connector->base.base,
2395 dev->mode_config.scaling_mode_property,
2396 DRM_MODE_SCALE_FULLSCREEN);
2397 subpixel_order = SubPixelHorizontalRGB;
2398 connector->interlace_allowed = false;
2399 connector->doublescan_allowed = false;
2403 if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) {
2405 connector->polled = DRM_CONNECTOR_POLL_CONNECT;
2407 connector->polled = DRM_CONNECTOR_POLL_HPD;
2408 connector->display_info.subpixel_order = subpixel_order;
2409 drm_connector_register(connector);