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