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