cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

radeon_connectors.c (86367B)


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