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