1 /*
2  * Copyright 2007-8 Advanced Micro Devices, Inc.
3  * Copyright 2008 Red Hat Inc.
4  *
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:
11  *
12  * The above copyright notice and this permission notice shall be included in
13  * all copies or substantial portions of the Software.
14  *
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.
22  *
23  * Authors: Dave Airlie
24  *          Alex Deucher
25  */
26 #include <drm/drmP.h>
27 #include <drm/drm_edid.h>
28 #include <drm/drm_crtc_helper.h>
29 #include <drm/drm_fb_helper.h>
30 #include <drm/drm_dp_mst_helper.h>
31 #include <drm/radeon_drm.h>
32 #include "radeon.h"
33 #include "radeon_audio.h"
34 #include "atom.h"
35 
36 #include <linux/pm_runtime.h>
37 
38 static int radeon_dp_handle_hpd(struct drm_connector *connector)
39 {
40 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
41 	int ret;
42 
43 	ret = radeon_dp_mst_check_status(radeon_connector);
44 	if (ret == -EINVAL)
45 		return 1;
46 	return 0;
47 }
48 void radeon_connector_hotplug(struct drm_connector *connector)
49 {
50 	struct drm_device *dev = connector->dev;
51 	struct radeon_device *rdev = dev->dev_private;
52 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
53 
54 	if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
55 		struct radeon_connector_atom_dig *dig_connector =
56 			radeon_connector->con_priv;
57 
58 		if (radeon_connector->is_mst_connector)
59 			return;
60 		if (dig_connector->is_mst) {
61 			radeon_dp_handle_hpd(connector);
62 			return;
63 		}
64 	}
65 	/* bail if the connector does not have hpd pin, e.g.,
66 	 * VGA, TV, etc.
67 	 */
68 	if (radeon_connector->hpd.hpd == RADEON_HPD_NONE)
69 		return;
70 
71 	radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
72 
73 	/* if the connector is already off, don't turn it back on */
74 	/* FIXME: This access isn't protected by any locks. */
75 	if (connector->dpms != DRM_MODE_DPMS_ON)
76 		return;
77 
78 	/* just deal with DP (not eDP) here. */
79 	if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
80 		struct radeon_connector_atom_dig *dig_connector =
81 			radeon_connector->con_priv;
82 
83 		/* if existing sink type was not DP no need to retrain */
84 		if (dig_connector->dp_sink_type != CONNECTOR_OBJECT_ID_DISPLAYPORT)
85 			return;
86 
87 		/* first get sink type as it may be reset after (un)plug */
88 		dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector);
89 		/* don't do anything if sink is not display port, i.e.,
90 		 * passive dp->(dvi|hdmi) adaptor
91 		 */
92 		if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT &&
93 		    radeon_hpd_sense(rdev, radeon_connector->hpd.hpd) &&
94 		    radeon_dp_needs_link_train(radeon_connector)) {
95 			/* Don't start link training before we have the DPCD */
96 			if (!radeon_dp_getdpcd(radeon_connector))
97 				return;
98 
99 			/* Turn the connector off and back on immediately, which
100 			 * will trigger link training
101 			 */
102 			drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
103 			drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
104 		}
105 	}
106 }
107 
108 static void radeon_property_change_mode(struct drm_encoder *encoder)
109 {
110 	struct drm_crtc *crtc = encoder->crtc;
111 
112 	if (crtc && crtc->enabled) {
113 		drm_crtc_helper_set_mode(crtc, &crtc->mode,
114 					 crtc->x, crtc->y, crtc->primary->fb);
115 	}
116 }
117 
118 int radeon_get_monitor_bpc(struct drm_connector *connector)
119 {
120 	struct drm_device *dev = connector->dev;
121 	struct radeon_device *rdev = dev->dev_private;
122 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
123 	struct radeon_connector_atom_dig *dig_connector;
124 	int bpc = 8;
125 	int mode_clock, max_tmds_clock;
126 
127 	switch (connector->connector_type) {
128 	case DRM_MODE_CONNECTOR_DVII:
129 	case DRM_MODE_CONNECTOR_HDMIB:
130 		if (radeon_connector->use_digital) {
131 			if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
132 				if (connector->display_info.bpc)
133 					bpc = connector->display_info.bpc;
134 			}
135 		}
136 		break;
137 	case DRM_MODE_CONNECTOR_DVID:
138 	case DRM_MODE_CONNECTOR_HDMIA:
139 		if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
140 			if (connector->display_info.bpc)
141 				bpc = connector->display_info.bpc;
142 		}
143 		break;
144 	case DRM_MODE_CONNECTOR_DisplayPort:
145 		dig_connector = radeon_connector->con_priv;
146 		if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
147 		    (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) ||
148 		    drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
149 			if (connector->display_info.bpc)
150 				bpc = connector->display_info.bpc;
151 		}
152 		break;
153 	case DRM_MODE_CONNECTOR_eDP:
154 	case DRM_MODE_CONNECTOR_LVDS:
155 		if (connector->display_info.bpc)
156 			bpc = connector->display_info.bpc;
157 		else if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE5(rdev)) {
158 			const struct drm_connector_helper_funcs *connector_funcs =
159 				connector->helper_private;
160 			struct drm_encoder *encoder = connector_funcs->best_encoder(connector);
161 			struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
162 			struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
163 
164 			if (dig->lcd_misc & ATOM_PANEL_MISC_V13_6BIT_PER_COLOR)
165 				bpc = 6;
166 			else if (dig->lcd_misc & ATOM_PANEL_MISC_V13_8BIT_PER_COLOR)
167 				bpc = 8;
168 		}
169 		break;
170 	}
171 
172 	if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
173 		/* hdmi deep color only implemented on DCE4+ */
174 		if ((bpc > 8) && !ASIC_IS_DCE4(rdev)) {
175 			DRM_DEBUG("%s: HDMI deep color %d bpc unsupported. Using 8 bpc.\n",
176 					  connector->name, bpc);
177 			bpc = 8;
178 		}
179 
180 		/*
181 		 * Pre DCE-8 hw can't handle > 12 bpc, and more than 12 bpc doesn't make
182 		 * much sense without support for > 12 bpc framebuffers. RGB 4:4:4 at
183 		 * 12 bpc is always supported on hdmi deep color sinks, as this is
184 		 * required by the HDMI-1.3 spec. Clamp to a safe 12 bpc maximum.
185 		 */
186 		if (bpc > 12) {
187 			DRM_DEBUG("%s: HDMI deep color %d bpc unsupported. Using 12 bpc.\n",
188 					  connector->name, bpc);
189 			bpc = 12;
190 		}
191 
192 		/* Any defined maximum tmds clock limit we must not exceed? */
193 		if (connector->max_tmds_clock > 0) {
194 			/* mode_clock is clock in kHz for mode to be modeset on this connector */
195 			mode_clock = radeon_connector->pixelclock_for_modeset;
196 
197 			/* Maximum allowable input clock in kHz */
198 			max_tmds_clock = connector->max_tmds_clock * 1000;
199 
200 			DRM_DEBUG("%s: hdmi mode dotclock %d kHz, max tmds input clock %d kHz.\n",
201 					  connector->name, mode_clock, max_tmds_clock);
202 
203 			/* Check if bpc is within clock limit. Try to degrade gracefully otherwise */
204 			if ((bpc == 12) && (mode_clock * 3/2 > max_tmds_clock)) {
205 				if ((connector->display_info.edid_hdmi_dc_modes & DRM_EDID_HDMI_DC_30) &&
206 					(mode_clock * 5/4 <= max_tmds_clock))
207 					bpc = 10;
208 				else
209 					bpc = 8;
210 
211 				DRM_DEBUG("%s: HDMI deep color 12 bpc exceeds max tmds clock. Using %d bpc.\n",
212 						  connector->name, bpc);
213 			}
214 
215 			if ((bpc == 10) && (mode_clock * 5/4 > max_tmds_clock)) {
216 				bpc = 8;
217 				DRM_DEBUG("%s: HDMI deep color 10 bpc exceeds max tmds clock. Using %d bpc.\n",
218 						  connector->name, bpc);
219 			}
220 		}
221 		else if (bpc > 8) {
222 			/* max_tmds_clock missing, but hdmi spec mandates it for deep color. */
223 			DRM_DEBUG("%s: Required max tmds clock for HDMI deep color missing. Using 8 bpc.\n",
224 					  connector->name);
225 			bpc = 8;
226 		}
227 	}
228 
229 	if ((radeon_deep_color == 0) && (bpc > 8)) {
230 		DRM_DEBUG("%s: Deep color disabled. Set radeon module param deep_color=1 to enable.\n",
231 				  connector->name);
232 		bpc = 8;
233 	}
234 
235 	DRM_DEBUG("%s: Display bpc=%d, returned bpc=%d\n",
236 			  connector->name, connector->display_info.bpc, bpc);
237 
238 	return bpc;
239 }
240 
241 static void
242 radeon_connector_update_scratch_regs(struct drm_connector *connector, enum drm_connector_status status)
243 {
244 	struct drm_device *dev = connector->dev;
245 	struct radeon_device *rdev = dev->dev_private;
246 	struct drm_encoder *best_encoder = NULL;
247 	struct drm_encoder *encoder = NULL;
248 	const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
249 	bool connected;
250 	int i;
251 
252 	best_encoder = connector_funcs->best_encoder(connector);
253 
254 	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
255 		if (connector->encoder_ids[i] == 0)
256 			break;
257 
258 		encoder = drm_encoder_find(connector->dev,
259 					   connector->encoder_ids[i]);
260 		if (!encoder)
261 			continue;
262 
263 		if ((encoder == best_encoder) && (status == connector_status_connected))
264 			connected = true;
265 		else
266 			connected = false;
267 
268 		if (rdev->is_atom_bios)
269 			radeon_atombios_connected_scratch_regs(connector, encoder, connected);
270 		else
271 			radeon_combios_connected_scratch_regs(connector, encoder, connected);
272 
273 	}
274 }
275 
276 static struct drm_encoder *radeon_find_encoder(struct drm_connector *connector, int encoder_type)
277 {
278 	struct drm_encoder *encoder;
279 	int i;
280 
281 	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
282 		if (connector->encoder_ids[i] == 0)
283 			break;
284 
285 		encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]);
286 		if (!encoder)
287 			continue;
288 
289 		if (encoder->encoder_type == encoder_type)
290 			return encoder;
291 	}
292 	return NULL;
293 }
294 
295 struct edid *radeon_connector_edid(struct drm_connector *connector)
296 {
297 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
298 	struct drm_property_blob *edid_blob = connector->edid_blob_ptr;
299 
300 	if (radeon_connector->edid) {
301 		return radeon_connector->edid;
302 	} else if (edid_blob) {
303 		struct edid *edid = kmemdup(edid_blob->data, edid_blob->length, GFP_KERNEL);
304 		if (edid)
305 			radeon_connector->edid = edid;
306 	}
307 	return radeon_connector->edid;
308 }
309 
310 static void radeon_connector_get_edid(struct drm_connector *connector)
311 {
312 	struct drm_device *dev = connector->dev;
313 	struct radeon_device *rdev = dev->dev_private;
314 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
315 
316 	if (radeon_connector->edid)
317 		return;
318 
319 	/* on hw with routers, select right port */
320 	if (radeon_connector->router.ddc_valid)
321 		radeon_router_select_ddc_port(radeon_connector);
322 
323 	if ((radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
324 	     ENCODER_OBJECT_ID_NONE) &&
325 	    radeon_connector->ddc_bus->has_aux) {
326 		radeon_connector->edid = drm_get_edid(connector,
327 						      &radeon_connector->ddc_bus->aux.ddc);
328 	} else if ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
329 		   (connector->connector_type == DRM_MODE_CONNECTOR_eDP)) {
330 		struct radeon_connector_atom_dig *dig = radeon_connector->con_priv;
331 
332 		if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT ||
333 		     dig->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) &&
334 		    radeon_connector->ddc_bus->has_aux)
335 			radeon_connector->edid = drm_get_edid(&radeon_connector->base,
336 							      &radeon_connector->ddc_bus->aux.ddc);
337 		else if (radeon_connector->ddc_bus)
338 			radeon_connector->edid = drm_get_edid(&radeon_connector->base,
339 							      &radeon_connector->ddc_bus->adapter);
340 	} else if (radeon_connector->ddc_bus) {
341 		radeon_connector->edid = drm_get_edid(&radeon_connector->base,
342 						      &radeon_connector->ddc_bus->adapter);
343 	}
344 
345 	if (!radeon_connector->edid) {
346 		/* don't fetch the edid from the vbios if ddc fails and runpm is
347 		 * enabled so we report disconnected.
348 		 */
349 		if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0))
350 			return;
351 
352 		if (rdev->is_atom_bios) {
353 			/* some laptops provide a hardcoded edid in rom for LCDs */
354 			if (((connector->connector_type == DRM_MODE_CONNECTOR_LVDS) ||
355 			     (connector->connector_type == DRM_MODE_CONNECTOR_eDP)))
356 				radeon_connector->edid = radeon_bios_get_hardcoded_edid(rdev);
357 		} else {
358 			/* some servers provide a hardcoded edid in rom for KVMs */
359 			radeon_connector->edid = radeon_bios_get_hardcoded_edid(rdev);
360 		}
361 	}
362 }
363 
364 static void radeon_connector_free_edid(struct drm_connector *connector)
365 {
366 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
367 
368 	if (radeon_connector->edid) {
369 		kfree(radeon_connector->edid);
370 		radeon_connector->edid = NULL;
371 	}
372 }
373 
374 static int radeon_ddc_get_modes(struct drm_connector *connector)
375 {
376 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
377 	int ret;
378 
379 	if (radeon_connector->edid) {
380 		drm_mode_connector_update_edid_property(connector, radeon_connector->edid);
381 		ret = drm_add_edid_modes(connector, radeon_connector->edid);
382 		drm_edid_to_eld(connector, radeon_connector->edid);
383 		return ret;
384 	}
385 	drm_mode_connector_update_edid_property(connector, NULL);
386 	return 0;
387 }
388 
389 static struct drm_encoder *radeon_best_single_encoder(struct drm_connector *connector)
390 {
391 	int enc_id = connector->encoder_ids[0];
392 	/* pick the encoder ids */
393 	if (enc_id)
394 		return drm_encoder_find(connector->dev, enc_id);
395 	return NULL;
396 }
397 
398 static void radeon_get_native_mode(struct drm_connector *connector)
399 {
400 	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
401 	struct radeon_encoder *radeon_encoder;
402 
403 	if (encoder == NULL)
404 		return;
405 
406 	radeon_encoder = to_radeon_encoder(encoder);
407 
408 	if (!list_empty(&connector->probed_modes)) {
409 		struct drm_display_mode *preferred_mode =
410 			list_first_entry(&connector->probed_modes,
411 					 struct drm_display_mode, head);
412 
413 		radeon_encoder->native_mode = *preferred_mode;
414 	} else {
415 		radeon_encoder->native_mode.clock = 0;
416 	}
417 }
418 
419 /*
420  * radeon_connector_analog_encoder_conflict_solve
421  * - search for other connectors sharing this encoder
422  *   if priority is true, then set them disconnected if this is connected
423  *   if priority is false, set us disconnected if they are connected
424  */
425 static enum drm_connector_status
426 radeon_connector_analog_encoder_conflict_solve(struct drm_connector *connector,
427 					       struct drm_encoder *encoder,
428 					       enum drm_connector_status current_status,
429 					       bool priority)
430 {
431 	struct drm_device *dev = connector->dev;
432 	struct drm_connector *conflict;
433 	struct radeon_connector *radeon_conflict;
434 	int i;
435 
436 	list_for_each_entry(conflict, &dev->mode_config.connector_list, head) {
437 		if (conflict == connector)
438 			continue;
439 
440 		radeon_conflict = to_radeon_connector(conflict);
441 		for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
442 			if (conflict->encoder_ids[i] == 0)
443 				break;
444 
445 			/* if the IDs match */
446 			if (conflict->encoder_ids[i] == encoder->base.id) {
447 				if (conflict->status != connector_status_connected)
448 					continue;
449 
450 				if (radeon_conflict->use_digital)
451 					continue;
452 
453 				if (priority == true) {
454 					DRM_DEBUG_KMS("1: conflicting encoders switching off %s\n",
455 						      conflict->name);
456 					DRM_DEBUG_KMS("in favor of %s\n",
457 						      connector->name);
458 					conflict->status = connector_status_disconnected;
459 					radeon_connector_update_scratch_regs(conflict, connector_status_disconnected);
460 				} else {
461 					DRM_DEBUG_KMS("2: conflicting encoders switching off %s\n",
462 						      connector->name);
463 					DRM_DEBUG_KMS("in favor of %s\n",
464 						      conflict->name);
465 					current_status = connector_status_disconnected;
466 				}
467 				break;
468 			}
469 		}
470 	}
471 	return current_status;
472 
473 }
474 
475 static struct drm_display_mode *radeon_fp_native_mode(struct drm_encoder *encoder)
476 {
477 	struct drm_device *dev = encoder->dev;
478 	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
479 	struct drm_display_mode *mode = NULL;
480 	struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
481 
482 	if (native_mode->hdisplay != 0 &&
483 	    native_mode->vdisplay != 0 &&
484 	    native_mode->clock != 0) {
485 		mode = drm_mode_duplicate(dev, native_mode);
486 		mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
487 		drm_mode_set_name(mode);
488 
489 		DRM_DEBUG_KMS("Adding native panel mode %s\n", mode->name);
490 	} else if (native_mode->hdisplay != 0 &&
491 		   native_mode->vdisplay != 0) {
492 		/* mac laptops without an edid */
493 		/* Note that this is not necessarily the exact panel mode,
494 		 * but an approximation based on the cvt formula.  For these
495 		 * systems we should ideally read the mode info out of the
496 		 * registers or add a mode table, but this works and is much
497 		 * simpler.
498 		 */
499 		mode = drm_cvt_mode(dev, native_mode->hdisplay, native_mode->vdisplay, 60, true, false, false);
500 		mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
501 		DRM_DEBUG_KMS("Adding cvt approximation of native panel mode %s\n", mode->name);
502 	}
503 	return mode;
504 }
505 
506 static void radeon_add_common_modes(struct drm_encoder *encoder, struct drm_connector *connector)
507 {
508 	struct drm_device *dev = encoder->dev;
509 	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
510 	struct drm_display_mode *mode = NULL;
511 	struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
512 	int i;
513 	struct mode_size {
514 		int w;
515 		int h;
516 	} common_modes[17] = {
517 		{ 640,  480},
518 		{ 720,  480},
519 		{ 800,  600},
520 		{ 848,  480},
521 		{1024,  768},
522 		{1152,  768},
523 		{1280,  720},
524 		{1280,  800},
525 		{1280,  854},
526 		{1280,  960},
527 		{1280, 1024},
528 		{1440,  900},
529 		{1400, 1050},
530 		{1680, 1050},
531 		{1600, 1200},
532 		{1920, 1080},
533 		{1920, 1200}
534 	};
535 
536 	for (i = 0; i < 17; i++) {
537 		if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT)) {
538 			if (common_modes[i].w > 1024 ||
539 			    common_modes[i].h > 768)
540 				continue;
541 		}
542 		if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
543 			if (common_modes[i].w > native_mode->hdisplay ||
544 			    common_modes[i].h > native_mode->vdisplay ||
545 			    (common_modes[i].w == native_mode->hdisplay &&
546 			     common_modes[i].h == native_mode->vdisplay))
547 				continue;
548 		}
549 		if (common_modes[i].w < 320 || common_modes[i].h < 200)
550 			continue;
551 
552 		mode = drm_cvt_mode(dev, common_modes[i].w, common_modes[i].h, 60, false, false, false);
553 		drm_mode_probed_add(connector, mode);
554 	}
555 }
556 
557 static int radeon_connector_set_property(struct drm_connector *connector, struct drm_property *property,
558 				  uint64_t val)
559 {
560 	struct drm_device *dev = connector->dev;
561 	struct radeon_device *rdev = dev->dev_private;
562 	struct drm_encoder *encoder;
563 	struct radeon_encoder *radeon_encoder;
564 
565 	if (property == rdev->mode_info.coherent_mode_property) {
566 		struct radeon_encoder_atom_dig *dig;
567 		bool new_coherent_mode;
568 
569 		/* need to find digital encoder on connector */
570 		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
571 		if (!encoder)
572 			return 0;
573 
574 		radeon_encoder = to_radeon_encoder(encoder);
575 
576 		if (!radeon_encoder->enc_priv)
577 			return 0;
578 
579 		dig = radeon_encoder->enc_priv;
580 		new_coherent_mode = val ? true : false;
581 		if (dig->coherent_mode != new_coherent_mode) {
582 			dig->coherent_mode = new_coherent_mode;
583 			radeon_property_change_mode(&radeon_encoder->base);
584 		}
585 	}
586 
587 	if (property == rdev->mode_info.audio_property) {
588 		struct radeon_connector *radeon_connector = to_radeon_connector(connector);
589 		/* need to find digital encoder on connector */
590 		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
591 		if (!encoder)
592 			return 0;
593 
594 		radeon_encoder = to_radeon_encoder(encoder);
595 
596 		if (radeon_connector->audio != val) {
597 			radeon_connector->audio = val;
598 			radeon_property_change_mode(&radeon_encoder->base);
599 		}
600 	}
601 
602 	if (property == rdev->mode_info.dither_property) {
603 		struct radeon_connector *radeon_connector = to_radeon_connector(connector);
604 		/* need to find digital encoder on connector */
605 		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
606 		if (!encoder)
607 			return 0;
608 
609 		radeon_encoder = to_radeon_encoder(encoder);
610 
611 		if (radeon_connector->dither != val) {
612 			radeon_connector->dither = val;
613 			radeon_property_change_mode(&radeon_encoder->base);
614 		}
615 	}
616 
617 	if (property == rdev->mode_info.underscan_property) {
618 		/* need to find digital encoder on connector */
619 		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
620 		if (!encoder)
621 			return 0;
622 
623 		radeon_encoder = to_radeon_encoder(encoder);
624 
625 		if (radeon_encoder->underscan_type != val) {
626 			radeon_encoder->underscan_type = val;
627 			radeon_property_change_mode(&radeon_encoder->base);
628 		}
629 	}
630 
631 	if (property == rdev->mode_info.underscan_hborder_property) {
632 		/* need to find digital encoder on connector */
633 		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
634 		if (!encoder)
635 			return 0;
636 
637 		radeon_encoder = to_radeon_encoder(encoder);
638 
639 		if (radeon_encoder->underscan_hborder != val) {
640 			radeon_encoder->underscan_hborder = val;
641 			radeon_property_change_mode(&radeon_encoder->base);
642 		}
643 	}
644 
645 	if (property == rdev->mode_info.underscan_vborder_property) {
646 		/* need to find digital encoder on connector */
647 		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
648 		if (!encoder)
649 			return 0;
650 
651 		radeon_encoder = to_radeon_encoder(encoder);
652 
653 		if (radeon_encoder->underscan_vborder != val) {
654 			radeon_encoder->underscan_vborder = val;
655 			radeon_property_change_mode(&radeon_encoder->base);
656 		}
657 	}
658 
659 	if (property == rdev->mode_info.tv_std_property) {
660 		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TVDAC);
661 		if (!encoder) {
662 			encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_DAC);
663 		}
664 
665 		if (!encoder)
666 			return 0;
667 
668 		radeon_encoder = to_radeon_encoder(encoder);
669 		if (!radeon_encoder->enc_priv)
670 			return 0;
671 		if (ASIC_IS_AVIVO(rdev) || radeon_r4xx_atom) {
672 			struct radeon_encoder_atom_dac *dac_int;
673 			dac_int = radeon_encoder->enc_priv;
674 			dac_int->tv_std = val;
675 		} else {
676 			struct radeon_encoder_tv_dac *dac_int;
677 			dac_int = radeon_encoder->enc_priv;
678 			dac_int->tv_std = val;
679 		}
680 		radeon_property_change_mode(&radeon_encoder->base);
681 	}
682 
683 	if (property == rdev->mode_info.load_detect_property) {
684 		struct radeon_connector *radeon_connector =
685 			to_radeon_connector(connector);
686 
687 		if (val == 0)
688 			radeon_connector->dac_load_detect = false;
689 		else
690 			radeon_connector->dac_load_detect = true;
691 	}
692 
693 	if (property == rdev->mode_info.tmds_pll_property) {
694 		struct radeon_encoder_int_tmds *tmds = NULL;
695 		bool ret = false;
696 		/* need to find digital encoder on connector */
697 		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
698 		if (!encoder)
699 			return 0;
700 
701 		radeon_encoder = to_radeon_encoder(encoder);
702 
703 		tmds = radeon_encoder->enc_priv;
704 		if (!tmds)
705 			return 0;
706 
707 		if (val == 0) {
708 			if (rdev->is_atom_bios)
709 				ret = radeon_atombios_get_tmds_info(radeon_encoder, tmds);
710 			else
711 				ret = radeon_legacy_get_tmds_info_from_combios(radeon_encoder, tmds);
712 		}
713 		if (val == 1 || ret == false) {
714 			radeon_legacy_get_tmds_info_from_table(radeon_encoder, tmds);
715 		}
716 		radeon_property_change_mode(&radeon_encoder->base);
717 	}
718 
719 	if (property == dev->mode_config.scaling_mode_property) {
720 		enum radeon_rmx_type rmx_type;
721 
722 		if (connector->encoder)
723 			radeon_encoder = to_radeon_encoder(connector->encoder);
724 		else {
725 			const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
726 			radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
727 		}
728 
729 		switch (val) {
730 		default:
731 		case DRM_MODE_SCALE_NONE: rmx_type = RMX_OFF; break;
732 		case DRM_MODE_SCALE_CENTER: rmx_type = RMX_CENTER; break;
733 		case DRM_MODE_SCALE_ASPECT: rmx_type = RMX_ASPECT; break;
734 		case DRM_MODE_SCALE_FULLSCREEN: rmx_type = RMX_FULL; break;
735 		}
736 		if (radeon_encoder->rmx_type == rmx_type)
737 			return 0;
738 
739 		if ((rmx_type != DRM_MODE_SCALE_NONE) &&
740 		    (radeon_encoder->native_mode.clock == 0))
741 			return 0;
742 
743 		radeon_encoder->rmx_type = rmx_type;
744 
745 		radeon_property_change_mode(&radeon_encoder->base);
746 	}
747 
748 	if (property == rdev->mode_info.output_csc_property) {
749 		if (connector->encoder)
750 			radeon_encoder = to_radeon_encoder(connector->encoder);
751 		else {
752 			const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
753 			radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
754 		}
755 
756 		if (radeon_encoder->output_csc == val)
757 			return 0;
758 
759 		radeon_encoder->output_csc = val;
760 
761 		if (connector->encoder->crtc) {
762 			struct drm_crtc *crtc  = connector->encoder->crtc;
763 			const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
764 			struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
765 
766 			radeon_crtc->output_csc = radeon_encoder->output_csc;
767 
768 			(*crtc_funcs->load_lut)(crtc);
769 		}
770 	}
771 
772 	return 0;
773 }
774 
775 static void radeon_fixup_lvds_native_mode(struct drm_encoder *encoder,
776 					  struct drm_connector *connector)
777 {
778 	struct radeon_encoder *radeon_encoder =	to_radeon_encoder(encoder);
779 	struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
780 	struct drm_display_mode *t, *mode;
781 
782 	/* If the EDID preferred mode doesn't match the native mode, use it */
783 	list_for_each_entry_safe(mode, t, &connector->probed_modes, head) {
784 		if (mode->type & DRM_MODE_TYPE_PREFERRED) {
785 			if (mode->hdisplay != native_mode->hdisplay ||
786 			    mode->vdisplay != native_mode->vdisplay)
787 				memcpy(native_mode, mode, sizeof(*mode));
788 		}
789 	}
790 
791 	/* Try to get native mode details from EDID if necessary */
792 	if (!native_mode->clock) {
793 		list_for_each_entry_safe(mode, t, &connector->probed_modes, head) {
794 			if (mode->hdisplay == native_mode->hdisplay &&
795 			    mode->vdisplay == native_mode->vdisplay) {
796 				*native_mode = *mode;
797 				drm_mode_set_crtcinfo(native_mode, CRTC_INTERLACE_HALVE_V);
798 				DRM_DEBUG_KMS("Determined LVDS native mode details from EDID\n");
799 				break;
800 			}
801 		}
802 	}
803 
804 	if (!native_mode->clock) {
805 		DRM_DEBUG_KMS("No LVDS native mode details, disabling RMX\n");
806 		radeon_encoder->rmx_type = RMX_OFF;
807 	}
808 }
809 
810 static int radeon_lvds_get_modes(struct drm_connector *connector)
811 {
812 	struct drm_encoder *encoder;
813 	int ret = 0;
814 	struct drm_display_mode *mode;
815 
816 	radeon_connector_get_edid(connector);
817 	ret = radeon_ddc_get_modes(connector);
818 	if (ret > 0) {
819 		encoder = radeon_best_single_encoder(connector);
820 		if (encoder) {
821 			radeon_fixup_lvds_native_mode(encoder, connector);
822 			/* add scaled modes */
823 			radeon_add_common_modes(encoder, connector);
824 		}
825 		return ret;
826 	}
827 
828 	encoder = radeon_best_single_encoder(connector);
829 	if (!encoder)
830 		return 0;
831 
832 	/* we have no EDID modes */
833 	mode = radeon_fp_native_mode(encoder);
834 	if (mode) {
835 		ret = 1;
836 		drm_mode_probed_add(connector, mode);
837 		/* add the width/height from vbios tables if available */
838 		connector->display_info.width_mm = mode->width_mm;
839 		connector->display_info.height_mm = mode->height_mm;
840 		/* add scaled modes */
841 		radeon_add_common_modes(encoder, connector);
842 	}
843 
844 	return ret;
845 }
846 
847 static enum drm_mode_status radeon_lvds_mode_valid(struct drm_connector *connector,
848 				  struct drm_display_mode *mode)
849 {
850 	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
851 
852 	if ((mode->hdisplay < 320) || (mode->vdisplay < 240))
853 		return MODE_PANEL;
854 
855 	if (encoder) {
856 		struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
857 		struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
858 
859 		/* AVIVO hardware supports downscaling modes larger than the panel
860 		 * to the panel size, but I'm not sure this is desirable.
861 		 */
862 		if ((mode->hdisplay > native_mode->hdisplay) ||
863 		    (mode->vdisplay > native_mode->vdisplay))
864 			return MODE_PANEL;
865 
866 		/* if scaling is disabled, block non-native modes */
867 		if (radeon_encoder->rmx_type == RMX_OFF) {
868 			if ((mode->hdisplay != native_mode->hdisplay) ||
869 			    (mode->vdisplay != native_mode->vdisplay))
870 				return MODE_PANEL;
871 		}
872 	}
873 
874 	return MODE_OK;
875 }
876 
877 static enum drm_connector_status
878 radeon_lvds_detect(struct drm_connector *connector, bool force)
879 {
880 	struct drm_device *dev = connector->dev;
881 	struct radeon_device *rdev = dev->dev_private;
882 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
883 	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
884 	enum drm_connector_status ret = connector_status_disconnected;
885 #ifdef PM_TODO
886 	int r;
887 
888 	r = pm_runtime_get_sync(connector->dev->dev);
889 	if (r < 0)
890 		return connector_status_disconnected;
891 #endif
892 
893 	if (encoder) {
894 		struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
895 		struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
896 
897 		/* check if panel is valid */
898 		if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240)
899 			ret = connector_status_connected;
900 		/* don't fetch the edid from the vbios if ddc fails and runpm is
901 		 * enabled so we report disconnected.
902 		 */
903 		if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0))
904 			ret = connector_status_disconnected;
905 	}
906 
907 	/* check for edid as well */
908 	radeon_connector_get_edid(connector);
909 	if (radeon_connector->edid)
910 		ret = connector_status_connected;
911 	/* check acpi lid status ??? */
912 
913 	radeon_connector_update_scratch_regs(connector, ret);
914 #ifdef PM_TODO
915 	pm_runtime_mark_last_busy(connector->dev->dev);
916 	pm_runtime_put_autosuspend(connector->dev->dev);
917 #endif
918 	return ret;
919 }
920 
921 static void radeon_connector_destroy(struct drm_connector *connector)
922 {
923 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
924 
925 	radeon_connector_free_edid(connector);
926 	kfree(radeon_connector->con_priv);
927 	drm_connector_unregister(connector);
928 	drm_connector_cleanup(connector);
929 	kfree(connector);
930 }
931 
932 static int radeon_lvds_set_property(struct drm_connector *connector,
933 				    struct drm_property *property,
934 				    uint64_t value)
935 {
936 	struct drm_device *dev = connector->dev;
937 	struct radeon_encoder *radeon_encoder;
938 	enum radeon_rmx_type rmx_type;
939 
940 	DRM_DEBUG_KMS("\n");
941 	if (property != dev->mode_config.scaling_mode_property)
942 		return 0;
943 
944 	if (connector->encoder)
945 		radeon_encoder = to_radeon_encoder(connector->encoder);
946 	else {
947 		const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
948 		radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
949 	}
950 
951 	switch (value) {
952 	case DRM_MODE_SCALE_NONE: rmx_type = RMX_OFF; break;
953 	case DRM_MODE_SCALE_CENTER: rmx_type = RMX_CENTER; break;
954 	case DRM_MODE_SCALE_ASPECT: rmx_type = RMX_ASPECT; break;
955 	default:
956 	case DRM_MODE_SCALE_FULLSCREEN: rmx_type = RMX_FULL; break;
957 	}
958 	if (radeon_encoder->rmx_type == rmx_type)
959 		return 0;
960 
961 	radeon_encoder->rmx_type = rmx_type;
962 
963 	radeon_property_change_mode(&radeon_encoder->base);
964 	return 0;
965 }
966 
967 
968 static const struct drm_connector_helper_funcs radeon_lvds_connector_helper_funcs = {
969 	.get_modes = radeon_lvds_get_modes,
970 	.mode_valid = radeon_lvds_mode_valid,
971 	.best_encoder = radeon_best_single_encoder,
972 };
973 
974 static const struct drm_connector_funcs radeon_lvds_connector_funcs = {
975 	.dpms = drm_helper_connector_dpms,
976 	.detect = radeon_lvds_detect,
977 	.fill_modes = drm_helper_probe_single_connector_modes,
978 	.destroy = radeon_connector_destroy,
979 	.set_property = radeon_lvds_set_property,
980 };
981 
982 static int radeon_vga_get_modes(struct drm_connector *connector)
983 {
984 	int ret;
985 
986 	radeon_connector_get_edid(connector);
987 	ret = radeon_ddc_get_modes(connector);
988 
989 	radeon_get_native_mode(connector);
990 
991 	return ret;
992 }
993 
994 static enum drm_mode_status radeon_vga_mode_valid(struct drm_connector *connector,
995 				  struct drm_display_mode *mode)
996 {
997 	struct drm_device *dev = connector->dev;
998 	struct radeon_device *rdev = dev->dev_private;
999 
1000 	/* XXX check mode bandwidth */
1001 
1002 	if ((mode->clock / 10) > rdev->clock.max_pixel_clock)
1003 		return MODE_CLOCK_HIGH;
1004 
1005 	return MODE_OK;
1006 }
1007 
1008 static enum drm_connector_status
1009 radeon_vga_detect(struct drm_connector *connector, bool force)
1010 {
1011 	struct drm_device *dev = connector->dev;
1012 	struct radeon_device *rdev = dev->dev_private;
1013 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1014 	struct drm_encoder *encoder;
1015 	const struct drm_encoder_helper_funcs *encoder_funcs;
1016 	bool dret = false;
1017 	enum drm_connector_status ret = connector_status_disconnected;
1018 #ifdef PM_TODO
1019 	int r;
1020 
1021 	r = pm_runtime_get_sync(connector->dev->dev);
1022 	if (r < 0)
1023 		return connector_status_disconnected;
1024 #endif
1025 
1026 	encoder = radeon_best_single_encoder(connector);
1027 	if (!encoder)
1028 		ret = connector_status_disconnected;
1029 
1030 	if (radeon_connector->ddc_bus)
1031 		dret = radeon_ddc_probe(radeon_connector, false);
1032 	if (dret) {
1033 		radeon_connector->detected_by_load = false;
1034 		radeon_connector_free_edid(connector);
1035 		radeon_connector_get_edid(connector);
1036 
1037 		if (!radeon_connector->edid) {
1038 			DRM_ERROR("%s: probed a monitor but no|invalid EDID\n",
1039 					connector->name);
1040 			ret = connector_status_connected;
1041 		} else {
1042 			radeon_connector->use_digital =
1043 				!!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
1044 
1045 			/* some oems have boards with separate digital and analog connectors
1046 			 * with a shared ddc line (often vga + hdmi)
1047 			 */
1048 			if (radeon_connector->use_digital && radeon_connector->shared_ddc) {
1049 				radeon_connector_free_edid(connector);
1050 				ret = connector_status_disconnected;
1051 			} else {
1052 				ret = connector_status_connected;
1053 			}
1054 		}
1055 	} else {
1056 
1057 		/* if we aren't forcing don't do destructive polling */
1058 		if (!force) {
1059 			/* only return the previous status if we last
1060 			 * detected a monitor via load.
1061 			 */
1062 			if (radeon_connector->detected_by_load)
1063 				ret = connector->status;
1064 			goto out;
1065 		}
1066 
1067 		if (radeon_connector->dac_load_detect && encoder) {
1068 			encoder_funcs = encoder->helper_private;
1069 			ret = encoder_funcs->detect(encoder, connector);
1070 			if (ret != connector_status_disconnected)
1071 				radeon_connector->detected_by_load = true;
1072 		}
1073 	}
1074 
1075 	if (ret == connector_status_connected)
1076 		ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
1077 
1078 	/* RN50 and some RV100 asics in servers often have a hardcoded EDID in the
1079 	 * vbios to deal with KVMs. If we have one and are not able to detect a monitor
1080 	 * by other means, assume the CRT is connected and use that EDID.
1081 	 */
1082 	if ((!rdev->is_atom_bios) &&
1083 	    (ret == connector_status_disconnected) &&
1084 	    rdev->mode_info.bios_hardcoded_edid_size) {
1085 		ret = connector_status_connected;
1086 	}
1087 
1088 	radeon_connector_update_scratch_regs(connector, ret);
1089 
1090 out:
1091 #ifdef PM_TODO
1092 	pm_runtime_mark_last_busy(connector->dev->dev);
1093 	pm_runtime_put_autosuspend(connector->dev->dev);
1094 #endif
1095 
1096 	return ret;
1097 }
1098 
1099 static const struct drm_connector_helper_funcs radeon_vga_connector_helper_funcs = {
1100 	.get_modes = radeon_vga_get_modes,
1101 	.mode_valid = radeon_vga_mode_valid,
1102 	.best_encoder = radeon_best_single_encoder,
1103 };
1104 
1105 static const struct drm_connector_funcs radeon_vga_connector_funcs = {
1106 	.dpms = drm_helper_connector_dpms,
1107 	.detect = radeon_vga_detect,
1108 	.fill_modes = drm_helper_probe_single_connector_modes,
1109 	.destroy = radeon_connector_destroy,
1110 	.set_property = radeon_connector_set_property,
1111 };
1112 
1113 static int radeon_tv_get_modes(struct drm_connector *connector)
1114 {
1115 	struct drm_device *dev = connector->dev;
1116 	struct radeon_device *rdev = dev->dev_private;
1117 	struct drm_display_mode *tv_mode;
1118 	struct drm_encoder *encoder;
1119 
1120 	encoder = radeon_best_single_encoder(connector);
1121 	if (!encoder)
1122 		return 0;
1123 
1124 	/* avivo chips can scale any mode */
1125 	if (rdev->family >= CHIP_RS600)
1126 		/* add scaled modes */
1127 		radeon_add_common_modes(encoder, connector);
1128 	else {
1129 		/* only 800x600 is supported right now on pre-avivo chips */
1130 		tv_mode = drm_cvt_mode(dev, 800, 600, 60, false, false, false);
1131 		tv_mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
1132 		drm_mode_probed_add(connector, tv_mode);
1133 	}
1134 	return 1;
1135 }
1136 
1137 static enum drm_mode_status radeon_tv_mode_valid(struct drm_connector *connector,
1138 				struct drm_display_mode *mode)
1139 {
1140 	if ((mode->hdisplay > 1024) || (mode->vdisplay > 768))
1141 		return MODE_CLOCK_RANGE;
1142 	return MODE_OK;
1143 }
1144 
1145 static enum drm_connector_status
1146 radeon_tv_detect(struct drm_connector *connector, bool force)
1147 {
1148 	struct drm_encoder *encoder;
1149 	const struct drm_encoder_helper_funcs *encoder_funcs;
1150 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1151 	enum drm_connector_status ret = connector_status_disconnected;
1152 #ifdef PM_TODO
1153 	int r;
1154 #endif
1155 
1156 	if (!radeon_connector->dac_load_detect)
1157 		return ret;
1158 
1159 #ifdef PM_TODO
1160 	r = pm_runtime_get_sync(connector->dev->dev);
1161 	if (r < 0)
1162 		return connector_status_disconnected;
1163 #endif
1164 
1165 	encoder = radeon_best_single_encoder(connector);
1166 	if (!encoder)
1167 		ret = connector_status_disconnected;
1168 	else {
1169 		encoder_funcs = encoder->helper_private;
1170 		ret = encoder_funcs->detect(encoder, connector);
1171 	}
1172 	if (ret == connector_status_connected)
1173 		ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, false);
1174 	radeon_connector_update_scratch_regs(connector, ret);
1175 #ifdef PM_TODO
1176 	pm_runtime_mark_last_busy(connector->dev->dev);
1177 	pm_runtime_put_autosuspend(connector->dev->dev);
1178 #endif
1179 	return ret;
1180 }
1181 
1182 static const struct drm_connector_helper_funcs radeon_tv_connector_helper_funcs = {
1183 	.get_modes = radeon_tv_get_modes,
1184 	.mode_valid = radeon_tv_mode_valid,
1185 	.best_encoder = radeon_best_single_encoder,
1186 };
1187 
1188 static const struct drm_connector_funcs radeon_tv_connector_funcs = {
1189 	.dpms = drm_helper_connector_dpms,
1190 	.detect = radeon_tv_detect,
1191 	.fill_modes = drm_helper_probe_single_connector_modes,
1192 	.destroy = radeon_connector_destroy,
1193 	.set_property = radeon_connector_set_property,
1194 };
1195 
1196 static bool radeon_check_hpd_status_unchanged(struct drm_connector *connector)
1197 {
1198 	struct drm_device *dev = connector->dev;
1199 	struct radeon_device *rdev = dev->dev_private;
1200 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1201 	enum drm_connector_status status;
1202 
1203 	/* We only trust HPD on R600 and newer ASICS. */
1204 	if (rdev->family >= CHIP_R600
1205 	  && radeon_connector->hpd.hpd != RADEON_HPD_NONE) {
1206 		if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd))
1207 			status = connector_status_connected;
1208 		else
1209 			status = connector_status_disconnected;
1210 		if (connector->status == status)
1211 			return true;
1212 	}
1213 
1214 	return false;
1215 }
1216 
1217 /*
1218  * DVI is complicated
1219  * Do a DDC probe, if DDC probe passes, get the full EDID so
1220  * we can do analog/digital monitor detection at this point.
1221  * If the monitor is an analog monitor or we got no DDC,
1222  * we need to find the DAC encoder object for this connector.
1223  * If we got no DDC, we do load detection on the DAC encoder object.
1224  * If we got analog DDC or load detection passes on the DAC encoder
1225  * we have to check if this analog encoder is shared with anyone else (TV)
1226  * if its shared we have to set the other connector to disconnected.
1227  */
1228 static enum drm_connector_status
1229 radeon_dvi_detect(struct drm_connector *connector, bool force)
1230 {
1231 	struct drm_device *dev = connector->dev;
1232 	struct radeon_device *rdev = dev->dev_private;
1233 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1234 	struct drm_encoder *encoder = NULL;
1235 	const struct drm_encoder_helper_funcs *encoder_funcs;
1236 	int i;
1237 	enum drm_connector_status ret = connector_status_disconnected;
1238 	bool dret = false, broken_edid = false;
1239 
1240 #ifdef PM_TODO
1241 	r = pm_runtime_get_sync(connector->dev->dev);
1242 	if (r < 0)
1243 		return connector_status_disconnected;
1244 #endif
1245 
1246 	if (radeon_connector->detected_hpd_without_ddc) {
1247 		force = true;
1248 		radeon_connector->detected_hpd_without_ddc = false;
1249 	}
1250 
1251 	if (!force && radeon_check_hpd_status_unchanged(connector)) {
1252 		ret = connector->status;
1253 		goto exit;
1254 	}
1255 
1256 	if (radeon_connector->ddc_bus) {
1257 		dret = radeon_ddc_probe(radeon_connector, false);
1258 
1259 		/* Sometimes the pins required for the DDC probe on DVI
1260 		 * connectors don't make contact at the same time that the ones
1261 		 * for HPD do. If the DDC probe fails even though we had an HPD
1262 		 * signal, try again later */
1263 		if (!dret && !force &&
1264 		    connector->status != connector_status_connected) {
1265 			DRM_DEBUG_KMS("hpd detected without ddc, retrying in 1 second\n");
1266 			radeon_connector->detected_hpd_without_ddc = true;
1267 			schedule_delayed_work(&rdev->hotplug_work,
1268 					      msecs_to_jiffies(1000));
1269 			goto exit;
1270 		}
1271 	}
1272 	if (dret) {
1273 		radeon_connector->detected_by_load = false;
1274 		radeon_connector_free_edid(connector);
1275 		radeon_connector_get_edid(connector);
1276 
1277 		if (!radeon_connector->edid) {
1278 			DRM_ERROR("%s: probed a monitor but no|invalid EDID\n",
1279 					connector->name);
1280 			/* rs690 seems to have a problem with connectors not existing and always
1281 			 * return a block of 0's. If we see this just stop polling on this output */
1282 			if ((rdev->family == CHIP_RS690 || rdev->family == CHIP_RS740) &&
1283 			    radeon_connector->base.null_edid_counter) {
1284 				ret = connector_status_disconnected;
1285 				DRM_ERROR("%s: detected RS690 floating bus bug, stopping ddc detect\n",
1286 					  connector->name);
1287 				radeon_connector->ddc_bus = NULL;
1288 			} else {
1289 				ret = connector_status_connected;
1290 				broken_edid = true; /* defer use_digital to later */
1291 			}
1292 		} else {
1293 			radeon_connector->use_digital =
1294 				!!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
1295 
1296 			/* some oems have boards with separate digital and analog connectors
1297 			 * with a shared ddc line (often vga + hdmi)
1298 			 */
1299 			if ((!radeon_connector->use_digital) && radeon_connector->shared_ddc) {
1300 				radeon_connector_free_edid(connector);
1301 				ret = connector_status_disconnected;
1302 			} else {
1303 				ret = connector_status_connected;
1304 			}
1305 			/* This gets complicated.  We have boards with VGA + HDMI with a
1306 			 * shared DDC line and we have boards with DVI-D + HDMI with a shared
1307 			 * DDC line.  The latter is more complex because with DVI<->HDMI adapters
1308 			 * you don't really know what's connected to which port as both are digital.
1309 			 */
1310 			if (radeon_connector->shared_ddc && (ret == connector_status_connected)) {
1311 				struct drm_connector *list_connector;
1312 				struct radeon_connector *list_radeon_connector;
1313 				list_for_each_entry(list_connector, &dev->mode_config.connector_list, head) {
1314 					if (connector == list_connector)
1315 						continue;
1316 					list_radeon_connector = to_radeon_connector(list_connector);
1317 					if (list_radeon_connector->shared_ddc &&
1318 					    (list_radeon_connector->ddc_bus->rec.i2c_id ==
1319 					     radeon_connector->ddc_bus->rec.i2c_id)) {
1320 						/* cases where both connectors are digital */
1321 						if (list_connector->connector_type != DRM_MODE_CONNECTOR_VGA) {
1322 							/* hpd is our only option in this case */
1323 							if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
1324 								radeon_connector_free_edid(connector);
1325 								ret = connector_status_disconnected;
1326 							}
1327 						}
1328 					}
1329 				}
1330 			}
1331 		}
1332 	}
1333 
1334 	if ((ret == connector_status_connected) && (radeon_connector->use_digital == true))
1335 		goto out;
1336 
1337 	/* DVI-D and HDMI-A are digital only */
1338 	if ((connector->connector_type == DRM_MODE_CONNECTOR_DVID) ||
1339 	    (connector->connector_type == DRM_MODE_CONNECTOR_HDMIA))
1340 		goto out;
1341 
1342 	/* if we aren't forcing don't do destructive polling */
1343 	if (!force) {
1344 		/* only return the previous status if we last
1345 		 * detected a monitor via load.
1346 		 */
1347 		if (radeon_connector->detected_by_load)
1348 			ret = connector->status;
1349 		goto out;
1350 	}
1351 
1352 	/* find analog encoder */
1353 	if (radeon_connector->dac_load_detect) {
1354 		for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1355 			if (connector->encoder_ids[i] == 0)
1356 				break;
1357 
1358 			encoder = drm_encoder_find(connector->dev,
1359 						   connector->encoder_ids[i]);
1360 			if (!encoder)
1361 				continue;
1362 
1363 			if (encoder->encoder_type != DRM_MODE_ENCODER_DAC &&
1364 			    encoder->encoder_type != DRM_MODE_ENCODER_TVDAC)
1365 				continue;
1366 
1367 			encoder_funcs = encoder->helper_private;
1368 			if (encoder_funcs->detect) {
1369 				if (!broken_edid) {
1370 					if (ret != connector_status_connected) {
1371 						/* deal with analog monitors without DDC */
1372 						ret = encoder_funcs->detect(encoder, connector);
1373 						if (ret == connector_status_connected) {
1374 							radeon_connector->use_digital = false;
1375 						}
1376 						if (ret != connector_status_disconnected)
1377 							radeon_connector->detected_by_load = true;
1378 					}
1379 				} else {
1380 					enum drm_connector_status lret;
1381 					/* assume digital unless load detected otherwise */
1382 					radeon_connector->use_digital = true;
1383 					lret = encoder_funcs->detect(encoder, connector);
1384 					DRM_DEBUG_KMS("load_detect %x returned: %x\n",encoder->encoder_type,lret);
1385 					if (lret == connector_status_connected)
1386 						radeon_connector->use_digital = false;
1387 				}
1388 				break;
1389 			}
1390 		}
1391 	}
1392 
1393 	if ((ret == connector_status_connected) && (radeon_connector->use_digital == false) &&
1394 	    encoder) {
1395 		ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
1396 	}
1397 
1398 	/* RN50 and some RV100 asics in servers often have a hardcoded EDID in the
1399 	 * vbios to deal with KVMs. If we have one and are not able to detect a monitor
1400 	 * by other means, assume the DFP is connected and use that EDID.  In most
1401 	 * cases the DVI port is actually a virtual KVM port connected to the service
1402 	 * processor.
1403 	 */
1404 out:
1405 	if ((!rdev->is_atom_bios) &&
1406 	    (ret == connector_status_disconnected) &&
1407 	    rdev->mode_info.bios_hardcoded_edid_size) {
1408 		radeon_connector->use_digital = true;
1409 		ret = connector_status_connected;
1410 	}
1411 
1412 	/* updated in get modes as well since we need to know if it's analog or digital */
1413 	radeon_connector_update_scratch_regs(connector, ret);
1414 
1415 	if ((radeon_audio != 0) && radeon_connector->use_digital) {
1416 		const struct drm_connector_helper_funcs *connector_funcs =
1417 			connector->helper_private;
1418 
1419 		encoder = connector_funcs->best_encoder(connector);
1420 		if (encoder && (encoder->encoder_type == DRM_MODE_ENCODER_TMDS)) {
1421 			radeon_connector_get_edid(connector);
1422 			radeon_audio_detect(connector, encoder, ret);
1423 		}
1424 	}
1425 
1426 exit:
1427 #ifdef PM_TODO
1428 	pm_runtime_mark_last_busy(connector->dev->dev);
1429 	pm_runtime_put_autosuspend(connector->dev->dev);
1430 #endif
1431 
1432 	return ret;
1433 }
1434 
1435 /* okay need to be smart in here about which encoder to pick */
1436 static struct drm_encoder *radeon_dvi_encoder(struct drm_connector *connector)
1437 {
1438 	int enc_id = connector->encoder_ids[0];
1439 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1440 	struct drm_encoder *encoder;
1441 	int i;
1442 	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1443 		if (connector->encoder_ids[i] == 0)
1444 			break;
1445 
1446 		encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]);
1447 		if (!encoder)
1448 			continue;
1449 
1450 		if (radeon_connector->use_digital == true) {
1451 			if (encoder->encoder_type == DRM_MODE_ENCODER_TMDS)
1452 				return encoder;
1453 		} else {
1454 			if (encoder->encoder_type == DRM_MODE_ENCODER_DAC ||
1455 			    encoder->encoder_type == DRM_MODE_ENCODER_TVDAC)
1456 				return encoder;
1457 		}
1458 	}
1459 
1460 	/* see if we have a default encoder  TODO */
1461 
1462 	/* then check use digitial */
1463 	/* pick the first one */
1464 	if (enc_id)
1465 		return drm_encoder_find(connector->dev, enc_id);
1466 	return NULL;
1467 }
1468 
1469 static void radeon_dvi_force(struct drm_connector *connector)
1470 {
1471 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1472 	if (connector->force == DRM_FORCE_ON)
1473 		radeon_connector->use_digital = false;
1474 	if (connector->force == DRM_FORCE_ON_DIGITAL)
1475 		radeon_connector->use_digital = true;
1476 }
1477 
1478 static enum drm_mode_status radeon_dvi_mode_valid(struct drm_connector *connector,
1479 				  struct drm_display_mode *mode)
1480 {
1481 	struct drm_device *dev = connector->dev;
1482 	struct radeon_device *rdev = dev->dev_private;
1483 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1484 
1485 	/* XXX check mode bandwidth */
1486 
1487 	/* clocks over 135 MHz have heat issues with DVI on RV100 */
1488 	if (radeon_connector->use_digital &&
1489 	    (rdev->family == CHIP_RV100) &&
1490 	    (mode->clock > 135000))
1491 		return MODE_CLOCK_HIGH;
1492 
1493 	if (radeon_connector->use_digital && (mode->clock > 165000)) {
1494 		if ((radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I) ||
1495 		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D) ||
1496 		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_B))
1497 			return MODE_OK;
1498 		else if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
1499 			/* HDMI 1.3+ supports max clock of 340 Mhz */
1500 			if (mode->clock > 340000)
1501 				return MODE_CLOCK_HIGH;
1502 			else
1503 				return MODE_OK;
1504 		} else {
1505 			return MODE_CLOCK_HIGH;
1506 		}
1507 	}
1508 
1509 	/* check against the max pixel clock */
1510 	if ((mode->clock / 10) > rdev->clock.max_pixel_clock)
1511 		return MODE_CLOCK_HIGH;
1512 
1513 	return MODE_OK;
1514 }
1515 
1516 static const struct drm_connector_helper_funcs radeon_dvi_connector_helper_funcs = {
1517 	.get_modes = radeon_vga_get_modes,
1518 	.mode_valid = radeon_dvi_mode_valid,
1519 	.best_encoder = radeon_dvi_encoder,
1520 };
1521 
1522 static const struct drm_connector_funcs radeon_dvi_connector_funcs = {
1523 	.dpms = drm_helper_connector_dpms,
1524 	.detect = radeon_dvi_detect,
1525 	.fill_modes = drm_helper_probe_single_connector_modes,
1526 	.set_property = radeon_connector_set_property,
1527 	.destroy = radeon_connector_destroy,
1528 	.force = radeon_dvi_force,
1529 };
1530 
1531 static int radeon_dp_get_modes(struct drm_connector *connector)
1532 {
1533 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1534 	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1535 	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1536 	int ret;
1537 
1538 	if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1539 	    (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1540 		struct drm_display_mode *mode;
1541 
1542 		if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
1543 			if (!radeon_dig_connector->edp_on)
1544 				atombios_set_edp_panel_power(connector,
1545 							     ATOM_TRANSMITTER_ACTION_POWER_ON);
1546 			radeon_connector_get_edid(connector);
1547 			ret = radeon_ddc_get_modes(connector);
1548 			if (!radeon_dig_connector->edp_on)
1549 				atombios_set_edp_panel_power(connector,
1550 							     ATOM_TRANSMITTER_ACTION_POWER_OFF);
1551 		} else {
1552 			/* need to setup ddc on the bridge */
1553 			if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1554 			    ENCODER_OBJECT_ID_NONE) {
1555 				if (encoder)
1556 					radeon_atom_ext_encoder_setup_ddc(encoder);
1557 			}
1558 			radeon_connector_get_edid(connector);
1559 			ret = radeon_ddc_get_modes(connector);
1560 		}
1561 
1562 		if (ret > 0) {
1563 			if (encoder) {
1564 				radeon_fixup_lvds_native_mode(encoder, connector);
1565 				/* add scaled modes */
1566 				radeon_add_common_modes(encoder, connector);
1567 			}
1568 			return ret;
1569 		}
1570 
1571 		if (!encoder)
1572 			return 0;
1573 
1574 		/* we have no EDID modes */
1575 		mode = radeon_fp_native_mode(encoder);
1576 		if (mode) {
1577 			ret = 1;
1578 			drm_mode_probed_add(connector, mode);
1579 			/* add the width/height from vbios tables if available */
1580 			connector->display_info.width_mm = mode->width_mm;
1581 			connector->display_info.height_mm = mode->height_mm;
1582 			/* add scaled modes */
1583 			radeon_add_common_modes(encoder, connector);
1584 		}
1585 	} else {
1586 		/* need to setup ddc on the bridge */
1587 		if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1588 			ENCODER_OBJECT_ID_NONE) {
1589 			if (encoder)
1590 				radeon_atom_ext_encoder_setup_ddc(encoder);
1591 		}
1592 		radeon_connector_get_edid(connector);
1593 		ret = radeon_ddc_get_modes(connector);
1594 
1595 		radeon_get_native_mode(connector);
1596 	}
1597 
1598 	return ret;
1599 }
1600 
1601 u16 radeon_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *connector)
1602 {
1603 	struct drm_encoder *encoder;
1604 	struct radeon_encoder *radeon_encoder;
1605 	int i;
1606 
1607 	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1608 		if (connector->encoder_ids[i] == 0)
1609 			break;
1610 
1611 		encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]);
1612 		if (!encoder)
1613 			continue;
1614 
1615 		radeon_encoder = to_radeon_encoder(encoder);
1616 
1617 		switch (radeon_encoder->encoder_id) {
1618 		case ENCODER_OBJECT_ID_TRAVIS:
1619 		case ENCODER_OBJECT_ID_NUTMEG:
1620 			return radeon_encoder->encoder_id;
1621 		default:
1622 			break;
1623 		}
1624 	}
1625 
1626 	return ENCODER_OBJECT_ID_NONE;
1627 }
1628 
1629 static bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector)
1630 {
1631 	struct drm_encoder *encoder;
1632 	struct radeon_encoder *radeon_encoder;
1633 	int i;
1634 	bool found = false;
1635 
1636 	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1637 		if (connector->encoder_ids[i] == 0)
1638 			break;
1639 
1640 		encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]);
1641 		if (!encoder)
1642 			continue;
1643 
1644 		radeon_encoder = to_radeon_encoder(encoder);
1645 		if (radeon_encoder->caps & ATOM_ENCODER_CAP_RECORD_HBR2)
1646 			found = true;
1647 	}
1648 
1649 	return found;
1650 }
1651 
1652 bool radeon_connector_is_dp12_capable(struct drm_connector *connector)
1653 {
1654 	struct drm_device *dev = connector->dev;
1655 	struct radeon_device *rdev = dev->dev_private;
1656 
1657 	if (ASIC_IS_DCE5(rdev) &&
1658 	    (rdev->clock.default_dispclk >= 53900) &&
1659 	    radeon_connector_encoder_is_hbr2(connector)) {
1660 		return true;
1661 	}
1662 
1663 	return false;
1664 }
1665 
1666 static enum drm_connector_status
1667 radeon_dp_detect(struct drm_connector *connector, bool force)
1668 {
1669 	struct drm_device *dev = connector->dev;
1670 	struct radeon_device *rdev = dev->dev_private;
1671 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1672 	enum drm_connector_status ret = connector_status_disconnected;
1673 	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1674 	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1675 	int r;
1676 
1677 	if (radeon_dig_connector->is_mst)
1678 		return connector_status_disconnected;
1679 
1680 #ifdef PM_TODO
1681 	r = pm_runtime_get_sync(connector->dev->dev);
1682 	if (r < 0)
1683 		return connector_status_disconnected;
1684 #endif
1685 
1686 	if (!force && radeon_check_hpd_status_unchanged(connector)) {
1687 		ret = connector->status;
1688 		goto out;
1689 	}
1690 
1691 	radeon_connector_free_edid(connector);
1692 
1693 	if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1694 	    (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1695 		if (encoder) {
1696 			struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
1697 			struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
1698 
1699 			/* check if panel is valid */
1700 			if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240)
1701 				ret = connector_status_connected;
1702 			/* don't fetch the edid from the vbios if ddc fails and runpm is
1703 			 * enabled so we report disconnected.
1704 			 */
1705 			if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0))
1706 				ret = connector_status_disconnected;
1707 		}
1708 		/* eDP is always DP */
1709 		radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT;
1710 		if (!radeon_dig_connector->edp_on)
1711 			atombios_set_edp_panel_power(connector,
1712 						     ATOM_TRANSMITTER_ACTION_POWER_ON);
1713 		if (radeon_dp_getdpcd(radeon_connector))
1714 			ret = connector_status_connected;
1715 		if (!radeon_dig_connector->edp_on)
1716 			atombios_set_edp_panel_power(connector,
1717 						     ATOM_TRANSMITTER_ACTION_POWER_OFF);
1718 	} else if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1719 		   ENCODER_OBJECT_ID_NONE) {
1720 		/* DP bridges are always DP */
1721 		radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT;
1722 		/* get the DPCD from the bridge */
1723 		radeon_dp_getdpcd(radeon_connector);
1724 
1725 		if (encoder) {
1726 			/* setup ddc on the bridge */
1727 			radeon_atom_ext_encoder_setup_ddc(encoder);
1728 			/* bridge chips are always aux */
1729 			if (radeon_ddc_probe(radeon_connector, true)) /* try DDC */
1730 				ret = connector_status_connected;
1731 			else if (radeon_connector->dac_load_detect) { /* try load detection */
1732 				const struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
1733 				ret = encoder_funcs->detect(encoder, connector);
1734 			}
1735 		}
1736 	} else {
1737 		radeon_dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector);
1738 		if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
1739 			ret = connector_status_connected;
1740 			if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
1741 				radeon_dp_getdpcd(radeon_connector);
1742 				r = radeon_dp_mst_probe(radeon_connector);
1743 				if (r == 1)
1744 					ret = connector_status_disconnected;
1745 			}
1746 		} else {
1747 			if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
1748 				if (radeon_dp_getdpcd(radeon_connector)) {
1749 					r = radeon_dp_mst_probe(radeon_connector);
1750 					if (r == 1)
1751 						ret = connector_status_disconnected;
1752 					else
1753 						ret = connector_status_connected;
1754 				}
1755 			} else {
1756 				/* try non-aux ddc (DP to DVI/HDMI/etc. adapter) */
1757 				if (radeon_ddc_probe(radeon_connector, false))
1758 					ret = connector_status_connected;
1759 			}
1760 		}
1761 	}
1762 
1763 	radeon_connector_update_scratch_regs(connector, ret);
1764 
1765 	if ((radeon_audio != 0) && encoder) {
1766 		radeon_connector_get_edid(connector);
1767 		radeon_audio_detect(connector, encoder, ret);
1768 	}
1769 
1770 out:
1771 #ifdef PM_TODO
1772 	pm_runtime_mark_last_busy(connector->dev->dev);
1773 	pm_runtime_put_autosuspend(connector->dev->dev);
1774 #endif
1775 
1776 	return ret;
1777 }
1778 
1779 static enum drm_mode_status radeon_dp_mode_valid(struct drm_connector *connector,
1780 				  struct drm_display_mode *mode)
1781 {
1782 	struct drm_device *dev = connector->dev;
1783 	struct radeon_device *rdev = dev->dev_private;
1784 	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1785 	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1786 
1787 	/* XXX check mode bandwidth */
1788 
1789 	if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1790 	    (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1791 		struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1792 
1793 		if ((mode->hdisplay < 320) || (mode->vdisplay < 240))
1794 			return MODE_PANEL;
1795 
1796 		if (encoder) {
1797 			struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
1798 			struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
1799 
1800 			/* AVIVO hardware supports downscaling modes larger than the panel
1801 			 * to the panel size, but I'm not sure this is desirable.
1802 			 */
1803 			if ((mode->hdisplay > native_mode->hdisplay) ||
1804 			    (mode->vdisplay > native_mode->vdisplay))
1805 				return MODE_PANEL;
1806 
1807 			/* if scaling is disabled, block non-native modes */
1808 			if (radeon_encoder->rmx_type == RMX_OFF) {
1809 				if ((mode->hdisplay != native_mode->hdisplay) ||
1810 				    (mode->vdisplay != native_mode->vdisplay))
1811 					return MODE_PANEL;
1812 			}
1813 		}
1814 	} else {
1815 		if ((radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
1816 		    (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) {
1817 			return radeon_dp_mode_valid_helper(connector, mode);
1818 		} else {
1819 			if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
1820 				/* HDMI 1.3+ supports max clock of 340 Mhz */
1821 				if (mode->clock > 340000)
1822 					return MODE_CLOCK_HIGH;
1823 			} else {
1824 				if (mode->clock > 165000)
1825 					return MODE_CLOCK_HIGH;
1826 			}
1827 		}
1828 	}
1829 
1830 	return MODE_OK;
1831 }
1832 
1833 static const struct drm_connector_helper_funcs radeon_dp_connector_helper_funcs = {
1834 	.get_modes = radeon_dp_get_modes,
1835 	.mode_valid = radeon_dp_mode_valid,
1836 	.best_encoder = radeon_dvi_encoder,
1837 };
1838 
1839 static const struct drm_connector_funcs radeon_dp_connector_funcs = {
1840 	.dpms = drm_helper_connector_dpms,
1841 	.detect = radeon_dp_detect,
1842 	.fill_modes = drm_helper_probe_single_connector_modes,
1843 	.set_property = radeon_connector_set_property,
1844 	.destroy = radeon_connector_destroy,
1845 	.force = radeon_dvi_force,
1846 };
1847 
1848 static const struct drm_connector_funcs radeon_edp_connector_funcs = {
1849 	.dpms = drm_helper_connector_dpms,
1850 	.detect = radeon_dp_detect,
1851 	.fill_modes = drm_helper_probe_single_connector_modes,
1852 	.set_property = radeon_lvds_set_property,
1853 	.destroy = radeon_connector_destroy,
1854 	.force = radeon_dvi_force,
1855 };
1856 
1857 static const struct drm_connector_funcs radeon_lvds_bridge_connector_funcs = {
1858 	.dpms = drm_helper_connector_dpms,
1859 	.detect = radeon_dp_detect,
1860 	.fill_modes = drm_helper_probe_single_connector_modes,
1861 	.set_property = radeon_lvds_set_property,
1862 	.destroy = radeon_connector_destroy,
1863 	.force = radeon_dvi_force,
1864 };
1865 
1866 void
1867 radeon_add_atom_connector(struct drm_device *dev,
1868 			  uint32_t connector_id,
1869 			  uint32_t supported_device,
1870 			  int connector_type,
1871 			  struct radeon_i2c_bus_rec *i2c_bus,
1872 			  uint32_t igp_lane_info,
1873 			  uint16_t connector_object_id,
1874 			  struct radeon_hpd *hpd,
1875 			  struct radeon_router *router)
1876 {
1877 	struct radeon_device *rdev = dev->dev_private;
1878 	struct drm_connector *connector;
1879 	struct radeon_connector *radeon_connector;
1880 	struct radeon_connector_atom_dig *radeon_dig_connector;
1881 	struct drm_encoder *encoder;
1882 	struct radeon_encoder *radeon_encoder;
1883 	uint32_t subpixel_order = SubPixelNone;
1884 	bool shared_ddc = false;
1885 	bool is_dp_bridge = false;
1886 	bool has_aux = false;
1887 
1888 	if (connector_type == DRM_MODE_CONNECTOR_Unknown)
1889 		return;
1890 
1891 	/* if the user selected tv=0 don't try and add the connector */
1892 	if (((connector_type == DRM_MODE_CONNECTOR_SVIDEO) ||
1893 	     (connector_type == DRM_MODE_CONNECTOR_Composite) ||
1894 	     (connector_type == DRM_MODE_CONNECTOR_9PinDIN)) &&
1895 	    (radeon_tv == 0))
1896 		return;
1897 
1898 	/* see if we already added it */
1899 	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
1900 		radeon_connector = to_radeon_connector(connector);
1901 		if (radeon_connector->connector_id == connector_id) {
1902 			radeon_connector->devices |= supported_device;
1903 			return;
1904 		}
1905 		if (radeon_connector->ddc_bus && i2c_bus->valid) {
1906 			if (radeon_connector->ddc_bus->rec.i2c_id == i2c_bus->i2c_id) {
1907 				radeon_connector->shared_ddc = true;
1908 				shared_ddc = true;
1909 			}
1910 			if (radeon_connector->router_bus && router->ddc_valid &&
1911 			    (radeon_connector->router.router_id == router->router_id)) {
1912 				radeon_connector->shared_ddc = false;
1913 				shared_ddc = false;
1914 			}
1915 		}
1916 	}
1917 
1918 	/* check if it's a dp bridge */
1919 	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
1920 		radeon_encoder = to_radeon_encoder(encoder);
1921 		if (radeon_encoder->devices & supported_device) {
1922 			switch (radeon_encoder->encoder_id) {
1923 			case ENCODER_OBJECT_ID_TRAVIS:
1924 			case ENCODER_OBJECT_ID_NUTMEG:
1925 				is_dp_bridge = true;
1926 				break;
1927 			default:
1928 				break;
1929 			}
1930 		}
1931 	}
1932 
1933 	radeon_connector = kzalloc(sizeof(struct radeon_connector), GFP_KERNEL);
1934 	if (!radeon_connector)
1935 		return;
1936 
1937 	connector = &radeon_connector->base;
1938 
1939 	radeon_connector->connector_id = connector_id;
1940 	radeon_connector->devices = supported_device;
1941 	radeon_connector->shared_ddc = shared_ddc;
1942 	radeon_connector->connector_object_id = connector_object_id;
1943 	radeon_connector->hpd = *hpd;
1944 
1945 	radeon_connector->router = *router;
1946 	if (router->ddc_valid || router->cd_valid) {
1947 		radeon_connector->router_bus = radeon_i2c_lookup(rdev, &router->i2c_info);
1948 		if (!radeon_connector->router_bus)
1949 			DRM_ERROR("Failed to assign router i2c bus! Check dmesg for i2c errors.\n");
1950 	}
1951 
1952 	if (is_dp_bridge) {
1953 		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1954 		if (!radeon_dig_connector)
1955 			goto failed;
1956 		radeon_dig_connector->igp_lane_info = igp_lane_info;
1957 		radeon_connector->con_priv = radeon_dig_connector;
1958 		if (i2c_bus->valid) {
1959 			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1960 			if (radeon_connector->ddc_bus)
1961 				has_aux = true;
1962 			else
1963 				DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1964 		}
1965 		switch (connector_type) {
1966 		case DRM_MODE_CONNECTOR_VGA:
1967 		case DRM_MODE_CONNECTOR_DVIA:
1968 		default:
1969 			drm_connector_init(dev, &radeon_connector->base,
1970 					   &radeon_dp_connector_funcs, connector_type);
1971 			drm_connector_helper_add(&radeon_connector->base,
1972 						 &radeon_dp_connector_helper_funcs);
1973 			connector->interlace_allowed = true;
1974 			connector->doublescan_allowed = true;
1975 			radeon_connector->dac_load_detect = true;
1976 			drm_object_attach_property(&radeon_connector->base.base,
1977 						      rdev->mode_info.load_detect_property,
1978 						      1);
1979 			drm_object_attach_property(&radeon_connector->base.base,
1980 						   dev->mode_config.scaling_mode_property,
1981 						   DRM_MODE_SCALE_NONE);
1982 			if (ASIC_IS_DCE5(rdev))
1983 				drm_object_attach_property(&radeon_connector->base.base,
1984 							   rdev->mode_info.output_csc_property,
1985 							   RADEON_OUTPUT_CSC_BYPASS);
1986 			break;
1987 		case DRM_MODE_CONNECTOR_DVII:
1988 		case DRM_MODE_CONNECTOR_DVID:
1989 		case DRM_MODE_CONNECTOR_HDMIA:
1990 		case DRM_MODE_CONNECTOR_HDMIB:
1991 		case DRM_MODE_CONNECTOR_DisplayPort:
1992 			drm_connector_init(dev, &radeon_connector->base,
1993 					   &radeon_dp_connector_funcs, connector_type);
1994 			drm_connector_helper_add(&radeon_connector->base,
1995 						 &radeon_dp_connector_helper_funcs);
1996 			drm_object_attach_property(&radeon_connector->base.base,
1997 						      rdev->mode_info.underscan_property,
1998 						      UNDERSCAN_OFF);
1999 			drm_object_attach_property(&radeon_connector->base.base,
2000 						      rdev->mode_info.underscan_hborder_property,
2001 						      0);
2002 			drm_object_attach_property(&radeon_connector->base.base,
2003 						      rdev->mode_info.underscan_vborder_property,
2004 						      0);
2005 
2006 			drm_object_attach_property(&radeon_connector->base.base,
2007 						      dev->mode_config.scaling_mode_property,
2008 						      DRM_MODE_SCALE_NONE);
2009 
2010 			drm_object_attach_property(&radeon_connector->base.base,
2011 						   rdev->mode_info.dither_property,
2012 						   RADEON_FMT_DITHER_DISABLE);
2013 
2014 			if (radeon_audio != 0) {
2015 				drm_object_attach_property(&radeon_connector->base.base,
2016 							   rdev->mode_info.audio_property,
2017 							   RADEON_AUDIO_AUTO);
2018 				radeon_connector->audio = RADEON_AUDIO_AUTO;
2019 			}
2020 			if (ASIC_IS_DCE5(rdev))
2021 				drm_object_attach_property(&radeon_connector->base.base,
2022 							   rdev->mode_info.output_csc_property,
2023 							   RADEON_OUTPUT_CSC_BYPASS);
2024 
2025 			subpixel_order = SubPixelHorizontalRGB;
2026 			connector->interlace_allowed = true;
2027 			if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
2028 				connector->doublescan_allowed = true;
2029 			else
2030 				connector->doublescan_allowed = false;
2031 			if (connector_type == DRM_MODE_CONNECTOR_DVII) {
2032 				radeon_connector->dac_load_detect = true;
2033 				drm_object_attach_property(&radeon_connector->base.base,
2034 							      rdev->mode_info.load_detect_property,
2035 							      1);
2036 			}
2037 			break;
2038 		case DRM_MODE_CONNECTOR_LVDS:
2039 		case DRM_MODE_CONNECTOR_eDP:
2040 			drm_connector_init(dev, &radeon_connector->base,
2041 					   &radeon_lvds_bridge_connector_funcs, connector_type);
2042 			drm_connector_helper_add(&radeon_connector->base,
2043 						 &radeon_dp_connector_helper_funcs);
2044 			drm_object_attach_property(&radeon_connector->base.base,
2045 						      dev->mode_config.scaling_mode_property,
2046 						      DRM_MODE_SCALE_FULLSCREEN);
2047 			subpixel_order = SubPixelHorizontalRGB;
2048 			connector->interlace_allowed = false;
2049 			connector->doublescan_allowed = false;
2050 			break;
2051 		}
2052 	} else {
2053 		switch (connector_type) {
2054 		case DRM_MODE_CONNECTOR_VGA:
2055 			drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
2056 			drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
2057 			if (i2c_bus->valid) {
2058 				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2059 				if (!radeon_connector->ddc_bus)
2060 					DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2061 			}
2062 			radeon_connector->dac_load_detect = true;
2063 			drm_object_attach_property(&radeon_connector->base.base,
2064 						      rdev->mode_info.load_detect_property,
2065 						      1);
2066 			if (ASIC_IS_AVIVO(rdev))
2067 				drm_object_attach_property(&radeon_connector->base.base,
2068 							   dev->mode_config.scaling_mode_property,
2069 							   DRM_MODE_SCALE_NONE);
2070 			if (ASIC_IS_DCE5(rdev))
2071 				drm_object_attach_property(&radeon_connector->base.base,
2072 							   rdev->mode_info.output_csc_property,
2073 							   RADEON_OUTPUT_CSC_BYPASS);
2074 			/* no HPD on analog connectors */
2075 			radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2076 			connector->interlace_allowed = true;
2077 			connector->doublescan_allowed = true;
2078 			break;
2079 		case DRM_MODE_CONNECTOR_DVIA:
2080 			drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
2081 			drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
2082 			if (i2c_bus->valid) {
2083 				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2084 				if (!radeon_connector->ddc_bus)
2085 					DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2086 			}
2087 			radeon_connector->dac_load_detect = true;
2088 			drm_object_attach_property(&radeon_connector->base.base,
2089 						      rdev->mode_info.load_detect_property,
2090 						      1);
2091 			if (ASIC_IS_AVIVO(rdev))
2092 				drm_object_attach_property(&radeon_connector->base.base,
2093 							   dev->mode_config.scaling_mode_property,
2094 							   DRM_MODE_SCALE_NONE);
2095 			if (ASIC_IS_DCE5(rdev))
2096 				drm_object_attach_property(&radeon_connector->base.base,
2097 							   rdev->mode_info.output_csc_property,
2098 							   RADEON_OUTPUT_CSC_BYPASS);
2099 			/* no HPD on analog connectors */
2100 			radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2101 			connector->interlace_allowed = true;
2102 			connector->doublescan_allowed = true;
2103 			break;
2104 		case DRM_MODE_CONNECTOR_DVII:
2105 		case DRM_MODE_CONNECTOR_DVID:
2106 			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2107 			if (!radeon_dig_connector)
2108 				goto failed;
2109 			radeon_dig_connector->igp_lane_info = igp_lane_info;
2110 			radeon_connector->con_priv = radeon_dig_connector;
2111 			drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
2112 			drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
2113 			if (i2c_bus->valid) {
2114 				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2115 				if (!radeon_connector->ddc_bus)
2116 					DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2117 			}
2118 			subpixel_order = SubPixelHorizontalRGB;
2119 			drm_object_attach_property(&radeon_connector->base.base,
2120 						      rdev->mode_info.coherent_mode_property,
2121 						      1);
2122 			if (ASIC_IS_AVIVO(rdev)) {
2123 				drm_object_attach_property(&radeon_connector->base.base,
2124 							      rdev->mode_info.underscan_property,
2125 							      UNDERSCAN_OFF);
2126 				drm_object_attach_property(&radeon_connector->base.base,
2127 							      rdev->mode_info.underscan_hborder_property,
2128 							      0);
2129 				drm_object_attach_property(&radeon_connector->base.base,
2130 							      rdev->mode_info.underscan_vborder_property,
2131 							      0);
2132 				drm_object_attach_property(&radeon_connector->base.base,
2133 							   rdev->mode_info.dither_property,
2134 							   RADEON_FMT_DITHER_DISABLE);
2135 				drm_object_attach_property(&radeon_connector->base.base,
2136 							   dev->mode_config.scaling_mode_property,
2137 							   DRM_MODE_SCALE_NONE);
2138 			}
2139 			if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
2140 				drm_object_attach_property(&radeon_connector->base.base,
2141 							   rdev->mode_info.audio_property,
2142 							   RADEON_AUDIO_AUTO);
2143 				radeon_connector->audio = RADEON_AUDIO_AUTO;
2144 			}
2145 			if (connector_type == DRM_MODE_CONNECTOR_DVII) {
2146 				radeon_connector->dac_load_detect = true;
2147 				drm_object_attach_property(&radeon_connector->base.base,
2148 							      rdev->mode_info.load_detect_property,
2149 							      1);
2150 			}
2151 			if (ASIC_IS_DCE5(rdev))
2152 				drm_object_attach_property(&radeon_connector->base.base,
2153 							   rdev->mode_info.output_csc_property,
2154 							   RADEON_OUTPUT_CSC_BYPASS);
2155 			connector->interlace_allowed = true;
2156 			if (connector_type == DRM_MODE_CONNECTOR_DVII)
2157 				connector->doublescan_allowed = true;
2158 			else
2159 				connector->doublescan_allowed = false;
2160 			break;
2161 		case DRM_MODE_CONNECTOR_HDMIA:
2162 		case DRM_MODE_CONNECTOR_HDMIB:
2163 			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2164 			if (!radeon_dig_connector)
2165 				goto failed;
2166 			radeon_dig_connector->igp_lane_info = igp_lane_info;
2167 			radeon_connector->con_priv = radeon_dig_connector;
2168 			drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
2169 			drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
2170 			if (i2c_bus->valid) {
2171 				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2172 				if (!radeon_connector->ddc_bus)
2173 					DRM_ERROR("HDMI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2174 			}
2175 			drm_object_attach_property(&radeon_connector->base.base,
2176 						      rdev->mode_info.coherent_mode_property,
2177 						      1);
2178 			if (ASIC_IS_AVIVO(rdev)) {
2179 				drm_object_attach_property(&radeon_connector->base.base,
2180 							      rdev->mode_info.underscan_property,
2181 							      UNDERSCAN_OFF);
2182 				drm_object_attach_property(&radeon_connector->base.base,
2183 							      rdev->mode_info.underscan_hborder_property,
2184 							      0);
2185 				drm_object_attach_property(&radeon_connector->base.base,
2186 							      rdev->mode_info.underscan_vborder_property,
2187 							      0);
2188 				drm_object_attach_property(&radeon_connector->base.base,
2189 							   rdev->mode_info.dither_property,
2190 							   RADEON_FMT_DITHER_DISABLE);
2191 				drm_object_attach_property(&radeon_connector->base.base,
2192 							   dev->mode_config.scaling_mode_property,
2193 							   DRM_MODE_SCALE_NONE);
2194 			}
2195 			if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
2196 				drm_object_attach_property(&radeon_connector->base.base,
2197 							   rdev->mode_info.audio_property,
2198 							   RADEON_AUDIO_AUTO);
2199 				radeon_connector->audio = RADEON_AUDIO_AUTO;
2200 			}
2201 			if (ASIC_IS_DCE5(rdev))
2202 				drm_object_attach_property(&radeon_connector->base.base,
2203 							   rdev->mode_info.output_csc_property,
2204 							   RADEON_OUTPUT_CSC_BYPASS);
2205 			subpixel_order = SubPixelHorizontalRGB;
2206 			connector->interlace_allowed = true;
2207 			if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
2208 				connector->doublescan_allowed = true;
2209 			else
2210 				connector->doublescan_allowed = false;
2211 			break;
2212 		case DRM_MODE_CONNECTOR_DisplayPort:
2213 			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2214 			if (!radeon_dig_connector)
2215 				goto failed;
2216 			radeon_dig_connector->igp_lane_info = igp_lane_info;
2217 			radeon_connector->con_priv = radeon_dig_connector;
2218 			drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
2219 			drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
2220 			if (i2c_bus->valid) {
2221 				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2222 				if (radeon_connector->ddc_bus)
2223 					has_aux = true;
2224 				else
2225 					DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2226 			}
2227 			subpixel_order = SubPixelHorizontalRGB;
2228 			drm_object_attach_property(&radeon_connector->base.base,
2229 						      rdev->mode_info.coherent_mode_property,
2230 						      1);
2231 			if (ASIC_IS_AVIVO(rdev)) {
2232 				drm_object_attach_property(&radeon_connector->base.base,
2233 							      rdev->mode_info.underscan_property,
2234 							      UNDERSCAN_OFF);
2235 				drm_object_attach_property(&radeon_connector->base.base,
2236 							      rdev->mode_info.underscan_hborder_property,
2237 							      0);
2238 				drm_object_attach_property(&radeon_connector->base.base,
2239 							      rdev->mode_info.underscan_vborder_property,
2240 							      0);
2241 				drm_object_attach_property(&radeon_connector->base.base,
2242 							   rdev->mode_info.dither_property,
2243 							   RADEON_FMT_DITHER_DISABLE);
2244 				drm_object_attach_property(&radeon_connector->base.base,
2245 							   dev->mode_config.scaling_mode_property,
2246 							   DRM_MODE_SCALE_NONE);
2247 			}
2248 			if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
2249 				drm_object_attach_property(&radeon_connector->base.base,
2250 							   rdev->mode_info.audio_property,
2251 							   RADEON_AUDIO_AUTO);
2252 				radeon_connector->audio = RADEON_AUDIO_AUTO;
2253 			}
2254 			if (ASIC_IS_DCE5(rdev))
2255 				drm_object_attach_property(&radeon_connector->base.base,
2256 							   rdev->mode_info.output_csc_property,
2257 							   RADEON_OUTPUT_CSC_BYPASS);
2258 			connector->interlace_allowed = true;
2259 			/* in theory with a DP to VGA converter... */
2260 			connector->doublescan_allowed = false;
2261 			break;
2262 		case DRM_MODE_CONNECTOR_eDP:
2263 			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2264 			if (!radeon_dig_connector)
2265 				goto failed;
2266 			radeon_dig_connector->igp_lane_info = igp_lane_info;
2267 			radeon_connector->con_priv = radeon_dig_connector;
2268 			drm_connector_init(dev, &radeon_connector->base, &radeon_edp_connector_funcs, connector_type);
2269 			drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
2270 			if (i2c_bus->valid) {
2271 				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2272 				if (radeon_connector->ddc_bus)
2273 					has_aux = true;
2274 				else
2275 					DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2276 			}
2277 			drm_object_attach_property(&radeon_connector->base.base,
2278 						      dev->mode_config.scaling_mode_property,
2279 						      DRM_MODE_SCALE_FULLSCREEN);
2280 			subpixel_order = SubPixelHorizontalRGB;
2281 			connector->interlace_allowed = false;
2282 			connector->doublescan_allowed = false;
2283 			break;
2284 		case DRM_MODE_CONNECTOR_SVIDEO:
2285 		case DRM_MODE_CONNECTOR_Composite:
2286 		case DRM_MODE_CONNECTOR_9PinDIN:
2287 			drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
2288 			drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
2289 			radeon_connector->dac_load_detect = true;
2290 			drm_object_attach_property(&radeon_connector->base.base,
2291 						      rdev->mode_info.load_detect_property,
2292 						      1);
2293 			drm_object_attach_property(&radeon_connector->base.base,
2294 						      rdev->mode_info.tv_std_property,
2295 						      radeon_atombios_get_tv_info(rdev));
2296 			/* no HPD on analog connectors */
2297 			radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2298 			connector->interlace_allowed = false;
2299 			connector->doublescan_allowed = false;
2300 			break;
2301 		case DRM_MODE_CONNECTOR_LVDS:
2302 			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2303 			if (!radeon_dig_connector)
2304 				goto failed;
2305 			radeon_dig_connector->igp_lane_info = igp_lane_info;
2306 			radeon_connector->con_priv = radeon_dig_connector;
2307 			drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
2308 			drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
2309 			if (i2c_bus->valid) {
2310 				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2311 				if (!radeon_connector->ddc_bus)
2312 					DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2313 			}
2314 			drm_object_attach_property(&radeon_connector->base.base,
2315 						      dev->mode_config.scaling_mode_property,
2316 						      DRM_MODE_SCALE_FULLSCREEN);
2317 			subpixel_order = SubPixelHorizontalRGB;
2318 			connector->interlace_allowed = false;
2319 			connector->doublescan_allowed = false;
2320 			break;
2321 		}
2322 	}
2323 
2324 	if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) {
2325 		if (i2c_bus->valid) {
2326 			connector->polled = DRM_CONNECTOR_POLL_CONNECT |
2327 			                    DRM_CONNECTOR_POLL_DISCONNECT;
2328 		}
2329 	} else
2330 		connector->polled = DRM_CONNECTOR_POLL_HPD;
2331 
2332 	connector->display_info.subpixel_order = subpixel_order;
2333 	drm_connector_register(connector);
2334 
2335 	if (has_aux)
2336 		radeon_dp_aux_init(radeon_connector);
2337 
2338 	return;
2339 
2340 failed:
2341 	drm_connector_cleanup(connector);
2342 	kfree(connector);
2343 }
2344 
2345 void
2346 radeon_add_legacy_connector(struct drm_device *dev,
2347 			    uint32_t connector_id,
2348 			    uint32_t supported_device,
2349 			    int connector_type,
2350 			    struct radeon_i2c_bus_rec *i2c_bus,
2351 			    uint16_t connector_object_id,
2352 			    struct radeon_hpd *hpd)
2353 {
2354 	struct radeon_device *rdev = dev->dev_private;
2355 	struct drm_connector *connector;
2356 	struct radeon_connector *radeon_connector;
2357 	uint32_t subpixel_order = SubPixelNone;
2358 
2359 	if (connector_type == DRM_MODE_CONNECTOR_Unknown)
2360 		return;
2361 
2362 	/* if the user selected tv=0 don't try and add the connector */
2363 	if (((connector_type == DRM_MODE_CONNECTOR_SVIDEO) ||
2364 	     (connector_type == DRM_MODE_CONNECTOR_Composite) ||
2365 	     (connector_type == DRM_MODE_CONNECTOR_9PinDIN)) &&
2366 	    (radeon_tv == 0))
2367 		return;
2368 
2369 	/* see if we already added it */
2370 	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
2371 		radeon_connector = to_radeon_connector(connector);
2372 		if (radeon_connector->connector_id == connector_id) {
2373 			radeon_connector->devices |= supported_device;
2374 			return;
2375 		}
2376 	}
2377 
2378 	radeon_connector = kzalloc(sizeof(struct radeon_connector), GFP_KERNEL);
2379 	if (!radeon_connector)
2380 		return;
2381 
2382 	connector = &radeon_connector->base;
2383 
2384 	radeon_connector->connector_id = connector_id;
2385 	radeon_connector->devices = supported_device;
2386 	radeon_connector->connector_object_id = connector_object_id;
2387 	radeon_connector->hpd = *hpd;
2388 
2389 	switch (connector_type) {
2390 	case DRM_MODE_CONNECTOR_VGA:
2391 		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
2392 		drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
2393 		if (i2c_bus->valid) {
2394 			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2395 			if (!radeon_connector->ddc_bus)
2396 				DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2397 		}
2398 		radeon_connector->dac_load_detect = true;
2399 		drm_object_attach_property(&radeon_connector->base.base,
2400 					      rdev->mode_info.load_detect_property,
2401 					      1);
2402 		/* no HPD on analog connectors */
2403 		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2404 		connector->interlace_allowed = true;
2405 		connector->doublescan_allowed = true;
2406 		break;
2407 	case DRM_MODE_CONNECTOR_DVIA:
2408 		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
2409 		drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
2410 		if (i2c_bus->valid) {
2411 			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2412 			if (!radeon_connector->ddc_bus)
2413 				DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2414 		}
2415 		radeon_connector->dac_load_detect = true;
2416 		drm_object_attach_property(&radeon_connector->base.base,
2417 					      rdev->mode_info.load_detect_property,
2418 					      1);
2419 		/* no HPD on analog connectors */
2420 		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2421 		connector->interlace_allowed = true;
2422 		connector->doublescan_allowed = true;
2423 		break;
2424 	case DRM_MODE_CONNECTOR_DVII:
2425 	case DRM_MODE_CONNECTOR_DVID:
2426 		drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
2427 		drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
2428 		if (i2c_bus->valid) {
2429 			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2430 			if (!radeon_connector->ddc_bus)
2431 				DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2432 		}
2433 		if (connector_type == DRM_MODE_CONNECTOR_DVII) {
2434 			radeon_connector->dac_load_detect = true;
2435 			drm_object_attach_property(&radeon_connector->base.base,
2436 						      rdev->mode_info.load_detect_property,
2437 						      1);
2438 		}
2439 		subpixel_order = SubPixelHorizontalRGB;
2440 		connector->interlace_allowed = true;
2441 		if (connector_type == DRM_MODE_CONNECTOR_DVII)
2442 			connector->doublescan_allowed = true;
2443 		else
2444 			connector->doublescan_allowed = false;
2445 		break;
2446 	case DRM_MODE_CONNECTOR_SVIDEO:
2447 	case DRM_MODE_CONNECTOR_Composite:
2448 	case DRM_MODE_CONNECTOR_9PinDIN:
2449 		drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
2450 		drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
2451 		radeon_connector->dac_load_detect = true;
2452 		/* RS400,RC410,RS480 chipset seems to report a lot
2453 		 * of false positive on load detect, we haven't yet
2454 		 * found a way to make load detect reliable on those
2455 		 * chipset, thus just disable it for TV.
2456 		 */
2457 		if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480)
2458 			radeon_connector->dac_load_detect = false;
2459 		drm_object_attach_property(&radeon_connector->base.base,
2460 					      rdev->mode_info.load_detect_property,
2461 					      radeon_connector->dac_load_detect);
2462 		drm_object_attach_property(&radeon_connector->base.base,
2463 					      rdev->mode_info.tv_std_property,
2464 					      radeon_combios_get_tv_info(rdev));
2465 		/* no HPD on analog connectors */
2466 		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
2467 		connector->interlace_allowed = false;
2468 		connector->doublescan_allowed = false;
2469 		break;
2470 	case DRM_MODE_CONNECTOR_LVDS:
2471 		drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
2472 		drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
2473 		if (i2c_bus->valid) {
2474 			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2475 			if (!radeon_connector->ddc_bus)
2476 				DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2477 		}
2478 		drm_object_attach_property(&radeon_connector->base.base,
2479 					      dev->mode_config.scaling_mode_property,
2480 					      DRM_MODE_SCALE_FULLSCREEN);
2481 		subpixel_order = SubPixelHorizontalRGB;
2482 		connector->interlace_allowed = false;
2483 		connector->doublescan_allowed = false;
2484 		break;
2485 	}
2486 
2487 	if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) {
2488 		if (i2c_bus->valid) {
2489 			connector->polled = DRM_CONNECTOR_POLL_CONNECT |
2490 			                    DRM_CONNECTOR_POLL_DISCONNECT;
2491 		}
2492 	} else
2493 		connector->polled = DRM_CONNECTOR_POLL_HPD;
2494 
2495 	connector->display_info.subpixel_order = subpixel_order;
2496 	drm_connector_register(connector);
2497 }
2498 
2499 void radeon_setup_mst_connector(struct drm_device *dev)
2500 {
2501 	struct radeon_device *rdev = dev->dev_private;
2502 	struct drm_connector *connector;
2503 	struct radeon_connector *radeon_connector;
2504 
2505 	if (!ASIC_IS_DCE5(rdev))
2506 		return;
2507 
2508 	if (radeon_mst == 0)
2509 		return;
2510 
2511 	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
2512 		int ret;
2513 
2514 		radeon_connector = to_radeon_connector(connector);
2515 
2516 		if (connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort)
2517 			continue;
2518 
2519 		ret = radeon_dp_mst_init(radeon_connector);
2520 	}
2521 }
2522