Lines Matching +full:vga +full:- +full:connector

2  * Copyright 2007-8 Advanced Micro Devices, Inc.
40 void radeon_connector_hotplug(struct drm_connector *connector) in radeon_connector_hotplug() argument
42 struct drm_device *dev = connector->dev; in radeon_connector_hotplug()
43 struct radeon_device *rdev = dev->dev_private; in radeon_connector_hotplug()
44 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_connector_hotplug()
46 /* bail if the connector does not have hpd pin, e.g., in radeon_connector_hotplug()
47 * VGA, TV, etc. in radeon_connector_hotplug()
49 if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) in radeon_connector_hotplug()
52 radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd); in radeon_connector_hotplug()
54 /* if the connector is already off, don't turn it back on */ in radeon_connector_hotplug()
56 if (connector->dpms != DRM_MODE_DPMS_ON) in radeon_connector_hotplug()
60 if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) { in radeon_connector_hotplug()
62 radeon_connector->con_priv; in radeon_connector_hotplug()
65 if (dig_connector->dp_sink_type != CONNECTOR_OBJECT_ID_DISPLAYPORT) in radeon_connector_hotplug()
69 dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector); in radeon_connector_hotplug()
71 * passive dp->(dvi|hdmi) adaptor in radeon_connector_hotplug()
73 if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT && in radeon_connector_hotplug()
74 radeon_hpd_sense(rdev, radeon_connector->hpd.hpd) && in radeon_connector_hotplug()
80 /* Turn the connector off and back on immediately, which in radeon_connector_hotplug()
83 drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF); in radeon_connector_hotplug()
84 drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON); in radeon_connector_hotplug()
91 struct drm_crtc *crtc = encoder->crtc; in radeon_property_change_mode()
93 if (crtc && crtc->enabled) { in radeon_property_change_mode()
94 drm_crtc_helper_set_mode(crtc, &crtc->mode, in radeon_property_change_mode()
95 crtc->x, crtc->y, crtc->primary->fb); in radeon_property_change_mode()
99 int radeon_get_monitor_bpc(struct drm_connector *connector) in radeon_get_monitor_bpc() argument
101 struct drm_device *dev = connector->dev; in radeon_get_monitor_bpc()
102 struct radeon_device *rdev = dev->dev_private; in radeon_get_monitor_bpc()
103 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_get_monitor_bpc()
108 switch (connector->connector_type) { in radeon_get_monitor_bpc()
111 if (radeon_connector->use_digital) { in radeon_get_monitor_bpc()
112 if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) { in radeon_get_monitor_bpc()
113 if (connector->display_info.bpc) in radeon_get_monitor_bpc()
114 bpc = connector->display_info.bpc; in radeon_get_monitor_bpc()
120 if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) { in radeon_get_monitor_bpc()
121 if (connector->display_info.bpc) in radeon_get_monitor_bpc()
122 bpc = connector->display_info.bpc; in radeon_get_monitor_bpc()
126 dig_connector = radeon_connector->con_priv; in radeon_get_monitor_bpc()
127 if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) || in radeon_get_monitor_bpc()
128 (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) || in radeon_get_monitor_bpc()
129 drm_detect_hdmi_monitor(radeon_connector_edid(connector))) { in radeon_get_monitor_bpc()
130 if (connector->display_info.bpc) in radeon_get_monitor_bpc()
131 bpc = connector->display_info.bpc; in radeon_get_monitor_bpc()
136 if (connector->display_info.bpc) in radeon_get_monitor_bpc()
137 bpc = connector->display_info.bpc; in radeon_get_monitor_bpc()
140 connector->helper_private; in radeon_get_monitor_bpc()
141 struct drm_encoder *encoder = connector_funcs->best_encoder(connector); in radeon_get_monitor_bpc()
143 struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; in radeon_get_monitor_bpc()
145 if (dig->lcd_misc & ATOM_PANEL_MISC_V13_6BIT_PER_COLOR) in radeon_get_monitor_bpc()
147 else if (dig->lcd_misc & ATOM_PANEL_MISC_V13_8BIT_PER_COLOR) in radeon_get_monitor_bpc()
153 if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) { in radeon_get_monitor_bpc()
157 connector->name, bpc); in radeon_get_monitor_bpc()
162 * Pre DCE-8 hw can't handle > 12 bpc, and more than 12 bpc doesn't make in radeon_get_monitor_bpc()
165 * required by the HDMI-1.3 spec. Clamp to a safe 12 bpc maximum. in radeon_get_monitor_bpc()
169 connector->name, bpc); in radeon_get_monitor_bpc()
174 if (connector->display_info.max_tmds_clock > 0) { in radeon_get_monitor_bpc()
175 /* mode_clock is clock in kHz for mode to be modeset on this connector */ in radeon_get_monitor_bpc()
176 mode_clock = radeon_connector->pixelclock_for_modeset; in radeon_get_monitor_bpc()
179 max_tmds_clock = connector->display_info.max_tmds_clock; in radeon_get_monitor_bpc()
182 connector->name, mode_clock, max_tmds_clock); in radeon_get_monitor_bpc()
186 if ((connector->display_info.edid_hdmi_rgb444_dc_modes & DRM_EDID_HDMI_DC_30) && in radeon_get_monitor_bpc()
193 connector->name, bpc); in radeon_get_monitor_bpc()
199 connector->name, bpc); in radeon_get_monitor_bpc()
204 connector->name); in radeon_get_monitor_bpc()
211 connector->name); in radeon_get_monitor_bpc()
216 connector->name, connector->display_info.bpc, bpc); in radeon_get_monitor_bpc()
222 radeon_connector_update_scratch_regs(struct drm_connector *connector, enum drm_connector_status sta… in radeon_connector_update_scratch_regs() argument
224 struct drm_device *dev = connector->dev; in radeon_connector_update_scratch_regs()
225 struct radeon_device *rdev = dev->dev_private; in radeon_connector_update_scratch_regs()
228 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private; in radeon_connector_update_scratch_regs()
231 best_encoder = connector_funcs->best_encoder(connector); in radeon_connector_update_scratch_regs()
233 drm_connector_for_each_possible_encoder(connector, encoder) { in radeon_connector_update_scratch_regs()
239 if (rdev->is_atom_bios) in radeon_connector_update_scratch_regs()
240 radeon_atombios_connected_scratch_regs(connector, encoder, connected); in radeon_connector_update_scratch_regs()
242 radeon_combios_connected_scratch_regs(connector, encoder, connected); in radeon_connector_update_scratch_regs()
246 static struct drm_encoder *radeon_find_encoder(struct drm_connector *connector, int encoder_type) in radeon_find_encoder() argument
250 drm_connector_for_each_possible_encoder(connector, encoder) { in radeon_find_encoder()
251 if (encoder->encoder_type == encoder_type) in radeon_find_encoder()
258 struct edid *radeon_connector_edid(struct drm_connector *connector) in radeon_connector_edid() argument
260 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_connector_edid()
261 struct drm_property_blob *edid_blob = connector->edid_blob_ptr; in radeon_connector_edid()
263 if (radeon_connector->edid) { in radeon_connector_edid()
264 return radeon_connector->edid; in radeon_connector_edid()
266 struct edid *edid = kmemdup(edid_blob->data, edid_blob->length, GFP_KERNEL); in radeon_connector_edid()
268 radeon_connector->edid = edid; in radeon_connector_edid()
270 return radeon_connector->edid; in radeon_connector_edid()
273 static void radeon_connector_get_edid(struct drm_connector *connector) in radeon_connector_get_edid() argument
275 struct drm_device *dev = connector->dev; in radeon_connector_get_edid()
276 struct radeon_device *rdev = dev->dev_private; in radeon_connector_get_edid()
277 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_connector_get_edid()
279 if (radeon_connector->edid) in radeon_connector_get_edid()
283 if (radeon_connector->router.ddc_valid) in radeon_connector_get_edid()
286 if ((radeon_connector_encoder_get_dp_bridge_encoder_id(connector) != in radeon_connector_get_edid()
288 radeon_connector->ddc_bus->has_aux) { in radeon_connector_get_edid()
289 radeon_connector->edid = drm_get_edid(connector, in radeon_connector_get_edid()
290 &radeon_connector->ddc_bus->aux.ddc); in radeon_connector_get_edid()
291 } else if ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) || in radeon_connector_get_edid()
292 (connector->connector_type == DRM_MODE_CONNECTOR_eDP)) { in radeon_connector_get_edid()
293 struct radeon_connector_atom_dig *dig = radeon_connector->con_priv; in radeon_connector_get_edid()
295 if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT || in radeon_connector_get_edid()
296 dig->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) && in radeon_connector_get_edid()
297 radeon_connector->ddc_bus->has_aux) in radeon_connector_get_edid()
298 radeon_connector->edid = drm_get_edid(&radeon_connector->base, in radeon_connector_get_edid()
299 &radeon_connector->ddc_bus->aux.ddc); in radeon_connector_get_edid()
300 else if (radeon_connector->ddc_bus) in radeon_connector_get_edid()
301 radeon_connector->edid = drm_get_edid(&radeon_connector->base, in radeon_connector_get_edid()
302 &radeon_connector->ddc_bus->adapter); in radeon_connector_get_edid()
304 connector->connector_type == DRM_MODE_CONNECTOR_LVDS && in radeon_connector_get_edid()
305 radeon_connector->ddc_bus) { in radeon_connector_get_edid()
306 radeon_connector->edid = drm_get_edid_switcheroo(&radeon_connector->base, in radeon_connector_get_edid()
307 &radeon_connector->ddc_bus->adapter); in radeon_connector_get_edid()
308 } else if (radeon_connector->ddc_bus) { in radeon_connector_get_edid()
309 radeon_connector->edid = drm_get_edid(&radeon_connector->base, in radeon_connector_get_edid()
310 &radeon_connector->ddc_bus->adapter); in radeon_connector_get_edid()
313 if (!radeon_connector->edid) { in radeon_connector_get_edid()
317 if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0)) in radeon_connector_get_edid()
320 if (rdev->is_atom_bios) { in radeon_connector_get_edid()
322 if (((connector->connector_type == DRM_MODE_CONNECTOR_LVDS) || in radeon_connector_get_edid()
323 (connector->connector_type == DRM_MODE_CONNECTOR_eDP))) in radeon_connector_get_edid()
324 radeon_connector->edid = radeon_bios_get_hardcoded_edid(rdev); in radeon_connector_get_edid()
327 radeon_connector->edid = radeon_bios_get_hardcoded_edid(rdev); in radeon_connector_get_edid()
332 static void radeon_connector_free_edid(struct drm_connector *connector) in radeon_connector_free_edid() argument
334 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_connector_free_edid()
336 kfree(radeon_connector->edid); in radeon_connector_free_edid()
337 radeon_connector->edid = NULL; in radeon_connector_free_edid()
340 static int radeon_ddc_get_modes(struct drm_connector *connector) in radeon_ddc_get_modes() argument
342 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_ddc_get_modes()
345 if (radeon_connector->edid) { in radeon_ddc_get_modes()
346 drm_connector_update_edid_property(connector, radeon_connector->edid); in radeon_ddc_get_modes()
347 ret = drm_add_edid_modes(connector, radeon_connector->edid); in radeon_ddc_get_modes()
350 drm_connector_update_edid_property(connector, NULL); in radeon_ddc_get_modes()
354 static struct drm_encoder *radeon_best_single_encoder(struct drm_connector *connector) in radeon_best_single_encoder() argument
359 drm_connector_for_each_possible_encoder(connector, encoder) in radeon_best_single_encoder()
365 static void radeon_get_native_mode(struct drm_connector *connector) in radeon_get_native_mode() argument
367 struct drm_encoder *encoder = radeon_best_single_encoder(connector); in radeon_get_native_mode()
375 if (!list_empty(&connector->probed_modes)) { in radeon_get_native_mode()
377 list_first_entry(&connector->probed_modes, in radeon_get_native_mode()
380 radeon_encoder->native_mode = *preferred_mode; in radeon_get_native_mode()
382 radeon_encoder->native_mode.clock = 0; in radeon_get_native_mode()
388 * - search for other connectors sharing this encoder
393 radeon_connector_analog_encoder_conflict_solve(struct drm_connector *connector, in radeon_connector_analog_encoder_conflict_solve() argument
398 struct drm_device *dev = connector->dev; in radeon_connector_analog_encoder_conflict_solve()
402 list_for_each_entry(conflict, &dev->mode_config.connector_list, head) { in radeon_connector_analog_encoder_conflict_solve()
405 if (conflict == connector) in radeon_connector_analog_encoder_conflict_solve()
413 if (conflict->status != connector_status_connected) in radeon_connector_analog_encoder_conflict_solve()
416 if (radeon_conflict->use_digital) in radeon_connector_analog_encoder_conflict_solve()
421 conflict->name); in radeon_connector_analog_encoder_conflict_solve()
423 connector->name); in radeon_connector_analog_encoder_conflict_solve()
424 conflict->status = connector_status_disconnected; in radeon_connector_analog_encoder_conflict_solve()
428 connector->name); in radeon_connector_analog_encoder_conflict_solve()
430 conflict->name); in radeon_connector_analog_encoder_conflict_solve()
443 struct drm_device *dev = encoder->dev; in radeon_fp_native_mode()
446 struct drm_display_mode *native_mode = &radeon_encoder->native_mode; in radeon_fp_native_mode()
448 if (native_mode->hdisplay != 0 && in radeon_fp_native_mode()
449 native_mode->vdisplay != 0 && in radeon_fp_native_mode()
450 native_mode->clock != 0) { in radeon_fp_native_mode()
454 mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER; in radeon_fp_native_mode()
457 DRM_DEBUG_KMS("Adding native panel mode %s\n", mode->name); in radeon_fp_native_mode()
458 } else if (native_mode->hdisplay != 0 && in radeon_fp_native_mode()
459 native_mode->vdisplay != 0) { in radeon_fp_native_mode()
467 mode = drm_cvt_mode(dev, native_mode->hdisplay, native_mode->vdisplay, 60, true, false, false); in radeon_fp_native_mode()
470 mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER; in radeon_fp_native_mode()
471 DRM_DEBUG_KMS("Adding cvt approximation of native panel mode %s\n", mode->name); in radeon_fp_native_mode()
476 static void radeon_add_common_modes(struct drm_encoder *encoder, struct drm_connector *connector) in radeon_add_common_modes() argument
478 struct drm_device *dev = encoder->dev; in radeon_add_common_modes()
481 struct drm_display_mode *native_mode = &radeon_encoder->native_mode; in radeon_add_common_modes()
507 if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT)) { in radeon_add_common_modes()
512 if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) { in radeon_add_common_modes()
513 if (common_modes[i].w > native_mode->hdisplay || in radeon_add_common_modes()
514 common_modes[i].h > native_mode->vdisplay || in radeon_add_common_modes()
515 (common_modes[i].w == native_mode->hdisplay && in radeon_add_common_modes()
516 common_modes[i].h == native_mode->vdisplay)) in radeon_add_common_modes()
523 drm_mode_probed_add(connector, mode); in radeon_add_common_modes()
527 static int radeon_connector_set_property(struct drm_connector *connector, struct drm_property *prop… in radeon_connector_set_property() argument
530 struct drm_device *dev = connector->dev; in radeon_connector_set_property()
531 struct radeon_device *rdev = dev->dev_private; in radeon_connector_set_property()
535 if (property == rdev->mode_info.coherent_mode_property) { in radeon_connector_set_property()
539 /* need to find digital encoder on connector */ in radeon_connector_set_property()
540 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); in radeon_connector_set_property()
546 if (!radeon_encoder->enc_priv) in radeon_connector_set_property()
549 dig = radeon_encoder->enc_priv; in radeon_connector_set_property()
551 if (dig->coherent_mode != new_coherent_mode) { in radeon_connector_set_property()
552 dig->coherent_mode = new_coherent_mode; in radeon_connector_set_property()
553 radeon_property_change_mode(&radeon_encoder->base); in radeon_connector_set_property()
557 if (property == rdev->mode_info.audio_property) { in radeon_connector_set_property()
558 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_connector_set_property()
559 /* need to find digital encoder on connector */ in radeon_connector_set_property()
560 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); in radeon_connector_set_property()
566 if (radeon_connector->audio != val) { in radeon_connector_set_property()
567 radeon_connector->audio = val; in radeon_connector_set_property()
568 radeon_property_change_mode(&radeon_encoder->base); in radeon_connector_set_property()
572 if (property == rdev->mode_info.dither_property) { in radeon_connector_set_property()
573 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_connector_set_property()
574 /* need to find digital encoder on connector */ in radeon_connector_set_property()
575 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); in radeon_connector_set_property()
581 if (radeon_connector->dither != val) { in radeon_connector_set_property()
582 radeon_connector->dither = val; in radeon_connector_set_property()
583 radeon_property_change_mode(&radeon_encoder->base); in radeon_connector_set_property()
587 if (property == rdev->mode_info.underscan_property) { in radeon_connector_set_property()
588 /* need to find digital encoder on connector */ in radeon_connector_set_property()
589 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); in radeon_connector_set_property()
595 if (radeon_encoder->underscan_type != val) { in radeon_connector_set_property()
596 radeon_encoder->underscan_type = val; in radeon_connector_set_property()
597 radeon_property_change_mode(&radeon_encoder->base); in radeon_connector_set_property()
601 if (property == rdev->mode_info.underscan_hborder_property) { in radeon_connector_set_property()
602 /* need to find digital encoder on connector */ in radeon_connector_set_property()
603 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); in radeon_connector_set_property()
609 if (radeon_encoder->underscan_hborder != val) { in radeon_connector_set_property()
610 radeon_encoder->underscan_hborder = val; in radeon_connector_set_property()
611 radeon_property_change_mode(&radeon_encoder->base); in radeon_connector_set_property()
615 if (property == rdev->mode_info.underscan_vborder_property) { in radeon_connector_set_property()
616 /* need to find digital encoder on connector */ in radeon_connector_set_property()
617 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); in radeon_connector_set_property()
623 if (radeon_encoder->underscan_vborder != val) { in radeon_connector_set_property()
624 radeon_encoder->underscan_vborder = val; in radeon_connector_set_property()
625 radeon_property_change_mode(&radeon_encoder->base); in radeon_connector_set_property()
629 if (property == rdev->mode_info.tv_std_property) { in radeon_connector_set_property()
630 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TVDAC); in radeon_connector_set_property()
632 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_DAC); in radeon_connector_set_property()
639 if (!radeon_encoder->enc_priv) in radeon_connector_set_property()
643 dac_int = radeon_encoder->enc_priv; in radeon_connector_set_property()
644 dac_int->tv_std = val; in radeon_connector_set_property()
647 dac_int = radeon_encoder->enc_priv; in radeon_connector_set_property()
648 dac_int->tv_std = val; in radeon_connector_set_property()
650 radeon_property_change_mode(&radeon_encoder->base); in radeon_connector_set_property()
653 if (property == rdev->mode_info.load_detect_property) { in radeon_connector_set_property()
655 to_radeon_connector(connector); in radeon_connector_set_property()
658 radeon_connector->dac_load_detect = false; in radeon_connector_set_property()
660 radeon_connector->dac_load_detect = true; in radeon_connector_set_property()
663 if (property == rdev->mode_info.tmds_pll_property) { in radeon_connector_set_property()
666 /* need to find digital encoder on connector */ in radeon_connector_set_property()
667 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); in radeon_connector_set_property()
673 tmds = radeon_encoder->enc_priv; in radeon_connector_set_property()
678 if (rdev->is_atom_bios) in radeon_connector_set_property()
686 radeon_property_change_mode(&radeon_encoder->base); in radeon_connector_set_property()
689 if (property == dev->mode_config.scaling_mode_property) { in radeon_connector_set_property()
692 if (connector->encoder) in radeon_connector_set_property()
693 radeon_encoder = to_radeon_encoder(connector->encoder); in radeon_connector_set_property()
695 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private; in radeon_connector_set_property()
696 radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector)); in radeon_connector_set_property()
706 if (radeon_encoder->rmx_type == rmx_type) in radeon_connector_set_property()
710 (radeon_encoder->native_mode.clock == 0)) in radeon_connector_set_property()
713 radeon_encoder->rmx_type = rmx_type; in radeon_connector_set_property()
715 radeon_property_change_mode(&radeon_encoder->base); in radeon_connector_set_property()
718 if (property == rdev->mode_info.output_csc_property) { in radeon_connector_set_property()
719 if (connector->encoder) in radeon_connector_set_property()
720 radeon_encoder = to_radeon_encoder(connector->encoder); in radeon_connector_set_property()
722 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private; in radeon_connector_set_property()
723 radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector)); in radeon_connector_set_property()
726 if (radeon_encoder->output_csc == val) in radeon_connector_set_property()
729 radeon_encoder->output_csc = val; in radeon_connector_set_property()
731 if (connector->encoder && connector->encoder->crtc) { in radeon_connector_set_property()
732 struct drm_crtc *crtc = connector->encoder->crtc; in radeon_connector_set_property()
735 radeon_crtc->output_csc = radeon_encoder->output_csc; in radeon_connector_set_property()
741 crtc->funcs->gamma_set(crtc, NULL, NULL, NULL, 0, NULL); in radeon_connector_set_property()
749 struct drm_connector *connector) in radeon_fixup_lvds_native_mode() argument
752 struct drm_display_mode *native_mode = &radeon_encoder->native_mode; in radeon_fixup_lvds_native_mode()
756 list_for_each_entry_safe(mode, t, &connector->probed_modes, head) { in radeon_fixup_lvds_native_mode()
757 if (mode->type & DRM_MODE_TYPE_PREFERRED) { in radeon_fixup_lvds_native_mode()
758 if (mode->hdisplay != native_mode->hdisplay || in radeon_fixup_lvds_native_mode()
759 mode->vdisplay != native_mode->vdisplay) in radeon_fixup_lvds_native_mode()
765 if (!native_mode->clock) { in radeon_fixup_lvds_native_mode()
766 list_for_each_entry_safe(mode, t, &connector->probed_modes, head) { in radeon_fixup_lvds_native_mode()
767 if (mode->hdisplay == native_mode->hdisplay && in radeon_fixup_lvds_native_mode()
768 mode->vdisplay == native_mode->vdisplay) { in radeon_fixup_lvds_native_mode()
777 if (!native_mode->clock) { in radeon_fixup_lvds_native_mode()
779 radeon_encoder->rmx_type = RMX_OFF; in radeon_fixup_lvds_native_mode()
783 static int radeon_lvds_get_modes(struct drm_connector *connector) in radeon_lvds_get_modes() argument
789 radeon_connector_get_edid(connector); in radeon_lvds_get_modes()
790 ret = radeon_ddc_get_modes(connector); in radeon_lvds_get_modes()
792 encoder = radeon_best_single_encoder(connector); in radeon_lvds_get_modes()
794 radeon_fixup_lvds_native_mode(encoder, connector); in radeon_lvds_get_modes()
796 radeon_add_common_modes(encoder, connector); in radeon_lvds_get_modes()
801 encoder = radeon_best_single_encoder(connector); in radeon_lvds_get_modes()
809 drm_mode_probed_add(connector, mode); in radeon_lvds_get_modes()
811 connector->display_info.width_mm = mode->width_mm; in radeon_lvds_get_modes()
812 connector->display_info.height_mm = mode->height_mm; in radeon_lvds_get_modes()
814 radeon_add_common_modes(encoder, connector); in radeon_lvds_get_modes()
820 static enum drm_mode_status radeon_lvds_mode_valid(struct drm_connector *connector, in radeon_lvds_mode_valid() argument
823 struct drm_encoder *encoder = radeon_best_single_encoder(connector); in radeon_lvds_mode_valid()
825 if ((mode->hdisplay < 320) || (mode->vdisplay < 240)) in radeon_lvds_mode_valid()
830 struct drm_display_mode *native_mode = &radeon_encoder->native_mode; in radeon_lvds_mode_valid()
835 if ((mode->hdisplay > native_mode->hdisplay) || in radeon_lvds_mode_valid()
836 (mode->vdisplay > native_mode->vdisplay)) in radeon_lvds_mode_valid()
839 /* if scaling is disabled, block non-native modes */ in radeon_lvds_mode_valid()
840 if (radeon_encoder->rmx_type == RMX_OFF) { in radeon_lvds_mode_valid()
841 if ((mode->hdisplay != native_mode->hdisplay) || in radeon_lvds_mode_valid()
842 (mode->vdisplay != native_mode->vdisplay)) in radeon_lvds_mode_valid()
851 radeon_lvds_detect(struct drm_connector *connector, bool force) in radeon_lvds_detect() argument
853 struct drm_device *dev = connector->dev; in radeon_lvds_detect()
854 struct radeon_device *rdev = dev->dev_private; in radeon_lvds_detect()
855 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_lvds_detect()
856 struct drm_encoder *encoder = radeon_best_single_encoder(connector); in radeon_lvds_detect()
861 r = pm_runtime_get_sync(connector->dev->dev); in radeon_lvds_detect()
863 pm_runtime_put_autosuspend(connector->dev->dev); in radeon_lvds_detect()
870 struct drm_display_mode *native_mode = &radeon_encoder->native_mode; in radeon_lvds_detect()
873 if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240) in radeon_lvds_detect()
878 if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0)) in radeon_lvds_detect()
883 radeon_connector_get_edid(connector); in radeon_lvds_detect()
884 if (radeon_connector->edid) in radeon_lvds_detect()
888 radeon_connector_update_scratch_regs(connector, ret); in radeon_lvds_detect()
891 pm_runtime_mark_last_busy(connector->dev->dev); in radeon_lvds_detect()
892 pm_runtime_put_autosuspend(connector->dev->dev); in radeon_lvds_detect()
898 static void radeon_connector_unregister(struct drm_connector *connector) in radeon_connector_unregister() argument
900 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_connector_unregister()
902 if (radeon_connector->ddc_bus && radeon_connector->ddc_bus->has_aux) { in radeon_connector_unregister()
903 drm_dp_aux_unregister(&radeon_connector->ddc_bus->aux); in radeon_connector_unregister()
904 radeon_connector->ddc_bus->has_aux = false; in radeon_connector_unregister()
908 static void radeon_connector_destroy(struct drm_connector *connector) in radeon_connector_destroy() argument
910 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_connector_destroy()
912 radeon_connector_free_edid(connector); in radeon_connector_destroy()
913 kfree(radeon_connector->con_priv); in radeon_connector_destroy()
914 drm_connector_unregister(connector); in radeon_connector_destroy()
915 drm_connector_cleanup(connector); in radeon_connector_destroy()
916 kfree(connector); in radeon_connector_destroy()
919 static int radeon_lvds_set_property(struct drm_connector *connector, in radeon_lvds_set_property() argument
923 struct drm_device *dev = connector->dev; in radeon_lvds_set_property()
928 if (property != dev->mode_config.scaling_mode_property) in radeon_lvds_set_property()
931 if (connector->encoder) in radeon_lvds_set_property()
932 radeon_encoder = to_radeon_encoder(connector->encoder); in radeon_lvds_set_property()
934 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private; in radeon_lvds_set_property()
935 radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector)); in radeon_lvds_set_property()
945 if (radeon_encoder->rmx_type == rmx_type) in radeon_lvds_set_property()
948 radeon_encoder->rmx_type = rmx_type; in radeon_lvds_set_property()
950 radeon_property_change_mode(&radeon_encoder->base); in radeon_lvds_set_property()
970 static int radeon_vga_get_modes(struct drm_connector *connector) in radeon_vga_get_modes() argument
974 radeon_connector_get_edid(connector); in radeon_vga_get_modes()
975 ret = radeon_ddc_get_modes(connector); in radeon_vga_get_modes()
977 radeon_get_native_mode(connector); in radeon_vga_get_modes()
982 static enum drm_mode_status radeon_vga_mode_valid(struct drm_connector *connector, in radeon_vga_mode_valid() argument
985 struct drm_device *dev = connector->dev; in radeon_vga_mode_valid()
986 struct radeon_device *rdev = dev->dev_private; in radeon_vga_mode_valid()
990 if ((mode->clock / 10) > rdev->clock.max_pixel_clock) in radeon_vga_mode_valid()
997 radeon_vga_detect(struct drm_connector *connector, bool force) in radeon_vga_detect() argument
999 struct drm_device *dev = connector->dev; in radeon_vga_detect()
1000 struct radeon_device *rdev = dev->dev_private; in radeon_vga_detect()
1001 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_vga_detect()
1009 r = pm_runtime_get_sync(connector->dev->dev); in radeon_vga_detect()
1011 pm_runtime_put_autosuspend(connector->dev->dev); in radeon_vga_detect()
1016 encoder = radeon_best_single_encoder(connector); in radeon_vga_detect()
1020 if (radeon_connector->ddc_bus) in radeon_vga_detect()
1023 radeon_connector->detected_by_load = false; in radeon_vga_detect()
1024 radeon_connector_free_edid(connector); in radeon_vga_detect()
1025 radeon_connector_get_edid(connector); in radeon_vga_detect()
1027 if (!radeon_connector->edid) { in radeon_vga_detect()
1029 connector->name); in radeon_vga_detect()
1032 radeon_connector->use_digital = in radeon_vga_detect()
1033 !!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL); in radeon_vga_detect()
1036 * with a shared ddc line (often vga + hdmi) in radeon_vga_detect()
1038 if (radeon_connector->use_digital && radeon_connector->shared_ddc) { in radeon_vga_detect()
1039 radeon_connector_free_edid(connector); in radeon_vga_detect()
1052 if (radeon_connector->detected_by_load) in radeon_vga_detect()
1053 ret = connector->status; in radeon_vga_detect()
1057 if (radeon_connector->dac_load_detect && encoder) { in radeon_vga_detect()
1058 encoder_funcs = encoder->helper_private; in radeon_vga_detect()
1059 ret = encoder_funcs->detect(encoder, connector); in radeon_vga_detect()
1061 radeon_connector->detected_by_load = true; in radeon_vga_detect()
1066 ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true); in radeon_vga_detect()
1072 if ((!rdev->is_atom_bios) && in radeon_vga_detect()
1074 rdev->mode_info.bios_hardcoded_edid_size) { in radeon_vga_detect()
1078 radeon_connector_update_scratch_regs(connector, ret); in radeon_vga_detect()
1082 pm_runtime_mark_last_busy(connector->dev->dev); in radeon_vga_detect()
1083 pm_runtime_put_autosuspend(connector->dev->dev); in radeon_vga_detect()
1104 static int radeon_tv_get_modes(struct drm_connector *connector) in radeon_tv_get_modes() argument
1106 struct drm_device *dev = connector->dev; in radeon_tv_get_modes()
1107 struct radeon_device *rdev = dev->dev_private; in radeon_tv_get_modes()
1111 encoder = radeon_best_single_encoder(connector); in radeon_tv_get_modes()
1116 if (rdev->family >= CHIP_RS600) in radeon_tv_get_modes()
1118 radeon_add_common_modes(encoder, connector); in radeon_tv_get_modes()
1120 /* only 800x600 is supported right now on pre-avivo chips */ in radeon_tv_get_modes()
1124 tv_mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; in radeon_tv_get_modes()
1125 drm_mode_probed_add(connector, tv_mode); in radeon_tv_get_modes()
1130 static enum drm_mode_status radeon_tv_mode_valid(struct drm_connector *connector, in radeon_tv_mode_valid() argument
1133 if ((mode->hdisplay > 1024) || (mode->vdisplay > 768)) in radeon_tv_mode_valid()
1139 radeon_tv_detect(struct drm_connector *connector, bool force) in radeon_tv_detect() argument
1143 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_tv_detect()
1147 if (!radeon_connector->dac_load_detect) in radeon_tv_detect()
1151 r = pm_runtime_get_sync(connector->dev->dev); in radeon_tv_detect()
1153 pm_runtime_put_autosuspend(connector->dev->dev); in radeon_tv_detect()
1158 encoder = radeon_best_single_encoder(connector); in radeon_tv_detect()
1162 encoder_funcs = encoder->helper_private; in radeon_tv_detect()
1163 ret = encoder_funcs->detect(encoder, connector); in radeon_tv_detect()
1166 ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, false); in radeon_tv_detect()
1167 radeon_connector_update_scratch_regs(connector, ret); in radeon_tv_detect()
1170 pm_runtime_mark_last_busy(connector->dev->dev); in radeon_tv_detect()
1171 pm_runtime_put_autosuspend(connector->dev->dev); in radeon_tv_detect()
1192 static bool radeon_check_hpd_status_unchanged(struct drm_connector *connector) in radeon_check_hpd_status_unchanged() argument
1194 struct drm_device *dev = connector->dev; in radeon_check_hpd_status_unchanged()
1195 struct radeon_device *rdev = dev->dev_private; in radeon_check_hpd_status_unchanged()
1196 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_check_hpd_status_unchanged()
1200 if (rdev->family >= CHIP_R600 in radeon_check_hpd_status_unchanged()
1201 && radeon_connector->hpd.hpd != RADEON_HPD_NONE) { in radeon_check_hpd_status_unchanged()
1202 if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) in radeon_check_hpd_status_unchanged()
1206 if (connector->status == status) in radeon_check_hpd_status_unchanged()
1218 * we need to find the DAC encoder object for this connector.
1222 * if its shared we have to set the other connector to disconnected.
1225 radeon_dvi_detect(struct drm_connector *connector, bool force) in radeon_dvi_detect() argument
1227 struct drm_device *dev = connector->dev; in radeon_dvi_detect()
1228 struct radeon_device *rdev = dev->dev_private; in radeon_dvi_detect()
1229 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_dvi_detect()
1237 r = pm_runtime_get_sync(connector->dev->dev); in radeon_dvi_detect()
1239 pm_runtime_put_autosuspend(connector->dev->dev); in radeon_dvi_detect()
1244 if (radeon_connector->detected_hpd_without_ddc) { in radeon_dvi_detect()
1246 radeon_connector->detected_hpd_without_ddc = false; in radeon_dvi_detect()
1249 if (!force && radeon_check_hpd_status_unchanged(connector)) { in radeon_dvi_detect()
1250 ret = connector->status; in radeon_dvi_detect()
1254 if (radeon_connector->ddc_bus) { in radeon_dvi_detect()
1262 connector->status != connector_status_connected) { in radeon_dvi_detect()
1264 radeon_connector->detected_hpd_without_ddc = true; in radeon_dvi_detect()
1265 schedule_delayed_work(&rdev->hotplug_work, in radeon_dvi_detect()
1271 radeon_connector->detected_by_load = false; in radeon_dvi_detect()
1272 radeon_connector_free_edid(connector); in radeon_dvi_detect()
1273 radeon_connector_get_edid(connector); in radeon_dvi_detect()
1275 if (!radeon_connector->edid) { in radeon_dvi_detect()
1277 connector->name); in radeon_dvi_detect()
1280 if ((rdev->family == CHIP_RS690 || rdev->family == CHIP_RS740) && in radeon_dvi_detect()
1281 radeon_connector->base.null_edid_counter) { in radeon_dvi_detect()
1284 connector->name); in radeon_dvi_detect()
1285 radeon_connector->ddc_bus = NULL; in radeon_dvi_detect()
1291 radeon_connector->use_digital = in radeon_dvi_detect()
1292 !!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL); in radeon_dvi_detect()
1295 * with a shared ddc line (often vga + hdmi) in radeon_dvi_detect()
1297 if ((!radeon_connector->use_digital) && radeon_connector->shared_ddc) { in radeon_dvi_detect()
1298 radeon_connector_free_edid(connector); in radeon_dvi_detect()
1303 /* This gets complicated. We have boards with VGA + HDMI with a in radeon_dvi_detect()
1304 * shared DDC line and we have boards with DVI-D + HDMI with a shared in radeon_dvi_detect()
1305 * DDC line. The latter is more complex because with DVI<->HDMI adapters in radeon_dvi_detect()
1308 if (radeon_connector->shared_ddc && (ret == connector_status_connected)) { in radeon_dvi_detect()
1311 list_for_each_entry(list_connector, &dev->mode_config.connector_list, head) { in radeon_dvi_detect()
1312 if (connector == list_connector) in radeon_dvi_detect()
1315 if (list_radeon_connector->shared_ddc && in radeon_dvi_detect()
1316 (list_radeon_connector->ddc_bus->rec.i2c_id == in radeon_dvi_detect()
1317 radeon_connector->ddc_bus->rec.i2c_id)) { in radeon_dvi_detect()
1319 if (list_connector->connector_type != DRM_MODE_CONNECTOR_VGA) { in radeon_dvi_detect()
1321 if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) { in radeon_dvi_detect()
1322 radeon_connector_free_edid(connector); in radeon_dvi_detect()
1332 if ((ret == connector_status_connected) && (radeon_connector->use_digital == true)) in radeon_dvi_detect()
1335 /* DVI-D and HDMI-A are digital only */ in radeon_dvi_detect()
1336 if ((connector->connector_type == DRM_MODE_CONNECTOR_DVID) || in radeon_dvi_detect()
1337 (connector->connector_type == DRM_MODE_CONNECTOR_HDMIA)) in radeon_dvi_detect()
1345 if (radeon_connector->detected_by_load) in radeon_dvi_detect()
1346 ret = connector->status; in radeon_dvi_detect()
1351 if (radeon_connector->dac_load_detect) { in radeon_dvi_detect()
1352 drm_connector_for_each_possible_encoder(connector, encoder) { in radeon_dvi_detect()
1353 if (encoder->encoder_type != DRM_MODE_ENCODER_DAC && in radeon_dvi_detect()
1354 encoder->encoder_type != DRM_MODE_ENCODER_TVDAC) in radeon_dvi_detect()
1357 encoder_funcs = encoder->helper_private; in radeon_dvi_detect()
1358 if (encoder_funcs->detect) { in radeon_dvi_detect()
1362 ret = encoder_funcs->detect(encoder, connector); in radeon_dvi_detect()
1364 radeon_connector->use_digital = false; in radeon_dvi_detect()
1367 radeon_connector->detected_by_load = true; in radeon_dvi_detect()
1372 radeon_connector->use_digital = true; in radeon_dvi_detect()
1373 lret = encoder_funcs->detect(encoder, connector); in radeon_dvi_detect()
1374 DRM_DEBUG_KMS("load_detect %x returned: %x\n", encoder->encoder_type, lret); in radeon_dvi_detect()
1376 radeon_connector->use_digital = false; in radeon_dvi_detect()
1383 if ((ret == connector_status_connected) && (radeon_connector->use_digital == false) && in radeon_dvi_detect()
1385 ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true); in radeon_dvi_detect()
1395 if ((!rdev->is_atom_bios) && in radeon_dvi_detect()
1397 rdev->mode_info.bios_hardcoded_edid_size) { in radeon_dvi_detect()
1398 radeon_connector->use_digital = true; in radeon_dvi_detect()
1403 radeon_connector_update_scratch_regs(connector, ret); in radeon_dvi_detect()
1405 if ((radeon_audio != 0) && radeon_connector->use_digital) { in radeon_dvi_detect()
1407 connector->helper_private; in radeon_dvi_detect()
1409 encoder = connector_funcs->best_encoder(connector); in radeon_dvi_detect()
1410 if (encoder && (encoder->encoder_type == DRM_MODE_ENCODER_TMDS)) { in radeon_dvi_detect()
1411 radeon_connector_get_edid(connector); in radeon_dvi_detect()
1412 radeon_audio_detect(connector, encoder, ret); in radeon_dvi_detect()
1418 pm_runtime_mark_last_busy(connector->dev->dev); in radeon_dvi_detect()
1419 pm_runtime_put_autosuspend(connector->dev->dev); in radeon_dvi_detect()
1426 static struct drm_encoder *radeon_dvi_encoder(struct drm_connector *connector) in radeon_dvi_encoder() argument
1428 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_dvi_encoder()
1431 drm_connector_for_each_possible_encoder(connector, encoder) { in radeon_dvi_encoder()
1432 if (radeon_connector->use_digital == true) { in radeon_dvi_encoder()
1433 if (encoder->encoder_type == DRM_MODE_ENCODER_TMDS) in radeon_dvi_encoder()
1436 if (encoder->encoder_type == DRM_MODE_ENCODER_DAC || in radeon_dvi_encoder()
1437 encoder->encoder_type == DRM_MODE_ENCODER_TVDAC) in radeon_dvi_encoder()
1446 drm_connector_for_each_possible_encoder(connector, encoder) in radeon_dvi_encoder()
1452 static void radeon_dvi_force(struct drm_connector *connector) in radeon_dvi_force() argument
1454 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_dvi_force()
1455 if (connector->force == DRM_FORCE_ON) in radeon_dvi_force()
1456 radeon_connector->use_digital = false; in radeon_dvi_force()
1457 if (connector->force == DRM_FORCE_ON_DIGITAL) in radeon_dvi_force()
1458 radeon_connector->use_digital = true; in radeon_dvi_force()
1461 static enum drm_mode_status radeon_dvi_mode_valid(struct drm_connector *connector, in radeon_dvi_mode_valid() argument
1464 struct drm_device *dev = connector->dev; in radeon_dvi_mode_valid()
1465 struct radeon_device *rdev = dev->dev_private; in radeon_dvi_mode_valid()
1466 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_dvi_mode_valid()
1471 if (radeon_connector->use_digital && in radeon_dvi_mode_valid()
1472 (rdev->family == CHIP_RV100) && in radeon_dvi_mode_valid()
1473 (mode->clock > 135000)) in radeon_dvi_mode_valid()
1476 if (radeon_connector->use_digital && (mode->clock > 165000)) { in radeon_dvi_mode_valid()
1477 if ((radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I) || in radeon_dvi_mode_valid()
1478 (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D) || in radeon_dvi_mode_valid()
1479 (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_B)) in radeon_dvi_mode_valid()
1481 else if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) { in radeon_dvi_mode_valid()
1483 if (mode->clock > 340000) in radeon_dvi_mode_valid()
1493 if ((mode->clock / 10) > rdev->clock.max_pixel_clock) in radeon_dvi_mode_valid()
1515 static int radeon_dp_get_modes(struct drm_connector *connector) in radeon_dp_get_modes() argument
1517 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_dp_get_modes()
1518 struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; in radeon_dp_get_modes()
1519 struct drm_encoder *encoder = radeon_best_single_encoder(connector); in radeon_dp_get_modes()
1522 if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) || in radeon_dp_get_modes()
1523 (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) { in radeon_dp_get_modes()
1526 if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) { in radeon_dp_get_modes()
1527 if (!radeon_dig_connector->edp_on) in radeon_dp_get_modes()
1528 atombios_set_edp_panel_power(connector, in radeon_dp_get_modes()
1530 radeon_connector_get_edid(connector); in radeon_dp_get_modes()
1531 ret = radeon_ddc_get_modes(connector); in radeon_dp_get_modes()
1532 if (!radeon_dig_connector->edp_on) in radeon_dp_get_modes()
1533 atombios_set_edp_panel_power(connector, in radeon_dp_get_modes()
1537 if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) != in radeon_dp_get_modes()
1542 radeon_connector_get_edid(connector); in radeon_dp_get_modes()
1543 ret = radeon_ddc_get_modes(connector); in radeon_dp_get_modes()
1548 radeon_fixup_lvds_native_mode(encoder, connector); in radeon_dp_get_modes()
1550 radeon_add_common_modes(encoder, connector); in radeon_dp_get_modes()
1562 drm_mode_probed_add(connector, mode); in radeon_dp_get_modes()
1564 connector->display_info.width_mm = mode->width_mm; in radeon_dp_get_modes()
1565 connector->display_info.height_mm = mode->height_mm; in radeon_dp_get_modes()
1567 radeon_add_common_modes(encoder, connector); in radeon_dp_get_modes()
1571 if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) != in radeon_dp_get_modes()
1576 radeon_connector_get_edid(connector); in radeon_dp_get_modes()
1577 ret = radeon_ddc_get_modes(connector); in radeon_dp_get_modes()
1579 radeon_get_native_mode(connector); in radeon_dp_get_modes()
1585 u16 radeon_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *connector) in radeon_connector_encoder_get_dp_bridge_encoder_id() argument
1590 drm_connector_for_each_possible_encoder(connector, encoder) { in radeon_connector_encoder_get_dp_bridge_encoder_id()
1593 switch (radeon_encoder->encoder_id) { in radeon_connector_encoder_get_dp_bridge_encoder_id()
1596 return radeon_encoder->encoder_id; in radeon_connector_encoder_get_dp_bridge_encoder_id()
1605 static bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector) in radeon_connector_encoder_is_hbr2() argument
1611 drm_connector_for_each_possible_encoder(connector, encoder) { in radeon_connector_encoder_is_hbr2()
1613 if (radeon_encoder->caps & ATOM_ENCODER_CAP_RECORD_HBR2) in radeon_connector_encoder_is_hbr2()
1620 bool radeon_connector_is_dp12_capable(struct drm_connector *connector) in radeon_connector_is_dp12_capable() argument
1622 struct drm_device *dev = connector->dev; in radeon_connector_is_dp12_capable()
1623 struct radeon_device *rdev = dev->dev_private; in radeon_connector_is_dp12_capable()
1626 (rdev->clock.default_dispclk >= 53900) && in radeon_connector_is_dp12_capable()
1627 radeon_connector_encoder_is_hbr2(connector)) { in radeon_connector_is_dp12_capable()
1635 radeon_dp_detect(struct drm_connector *connector, bool force) in radeon_dp_detect() argument
1637 struct drm_device *dev = connector->dev; in radeon_dp_detect()
1638 struct radeon_device *rdev = dev->dev_private; in radeon_dp_detect()
1639 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_dp_detect()
1641 struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; in radeon_dp_detect()
1642 struct drm_encoder *encoder = radeon_best_single_encoder(connector); in radeon_dp_detect()
1646 r = pm_runtime_get_sync(connector->dev->dev); in radeon_dp_detect()
1648 pm_runtime_put_autosuspend(connector->dev->dev); in radeon_dp_detect()
1653 if (!force && radeon_check_hpd_status_unchanged(connector)) { in radeon_dp_detect()
1654 ret = connector->status; in radeon_dp_detect()
1658 radeon_connector_free_edid(connector); in radeon_dp_detect()
1660 if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) || in radeon_dp_detect()
1661 (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) { in radeon_dp_detect()
1664 struct drm_display_mode *native_mode = &radeon_encoder->native_mode; in radeon_dp_detect()
1667 if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240) in radeon_dp_detect()
1672 if ((rdev->flags & RADEON_IS_PX) && (radeon_runtime_pm != 0)) in radeon_dp_detect()
1676 radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT; in radeon_dp_detect()
1677 if (!radeon_dig_connector->edp_on) in radeon_dp_detect()
1678 atombios_set_edp_panel_power(connector, in radeon_dp_detect()
1682 if (!radeon_dig_connector->edp_on) in radeon_dp_detect()
1683 atombios_set_edp_panel_power(connector, in radeon_dp_detect()
1685 } else if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) != in radeon_dp_detect()
1688 radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT; in radeon_dp_detect()
1698 else if (radeon_connector->dac_load_detect) { /* try load detection */ in radeon_dp_detect()
1699 const struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; in radeon_dp_detect()
1700 ret = encoder_funcs->detect(encoder, connector); in radeon_dp_detect()
1704 radeon_dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector); in radeon_dp_detect()
1705 if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) { in radeon_dp_detect()
1707 if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) in radeon_dp_detect()
1710 if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) { in radeon_dp_detect()
1714 /* try non-aux ddc (DP to DVI/HDMI/etc. adapter) */ in radeon_dp_detect()
1721 radeon_connector_update_scratch_regs(connector, ret); in radeon_dp_detect()
1724 radeon_connector_get_edid(connector); in radeon_dp_detect()
1725 radeon_audio_detect(connector, encoder, ret); in radeon_dp_detect()
1730 pm_runtime_mark_last_busy(connector->dev->dev); in radeon_dp_detect()
1731 pm_runtime_put_autosuspend(connector->dev->dev); in radeon_dp_detect()
1737 static enum drm_mode_status radeon_dp_mode_valid(struct drm_connector *connector, in radeon_dp_mode_valid() argument
1740 struct drm_device *dev = connector->dev; in radeon_dp_mode_valid()
1741 struct radeon_device *rdev = dev->dev_private; in radeon_dp_mode_valid()
1742 struct radeon_connector *radeon_connector = to_radeon_connector(connector); in radeon_dp_mode_valid()
1743 struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; in radeon_dp_mode_valid()
1747 if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) || in radeon_dp_mode_valid()
1748 (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) { in radeon_dp_mode_valid()
1749 struct drm_encoder *encoder = radeon_best_single_encoder(connector); in radeon_dp_mode_valid()
1751 if ((mode->hdisplay < 320) || (mode->vdisplay < 240)) in radeon_dp_mode_valid()
1756 struct drm_display_mode *native_mode = &radeon_encoder->native_mode; in radeon_dp_mode_valid()
1761 if ((mode->hdisplay > native_mode->hdisplay) || in radeon_dp_mode_valid()
1762 (mode->vdisplay > native_mode->vdisplay)) in radeon_dp_mode_valid()
1765 /* if scaling is disabled, block non-native modes */ in radeon_dp_mode_valid()
1766 if (radeon_encoder->rmx_type == RMX_OFF) { in radeon_dp_mode_valid()
1767 if ((mode->hdisplay != native_mode->hdisplay) || in radeon_dp_mode_valid()
1768 (mode->vdisplay != native_mode->vdisplay)) in radeon_dp_mode_valid()
1773 if ((radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) || in radeon_dp_mode_valid()
1774 (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) { in radeon_dp_mode_valid()
1775 return radeon_dp_mode_valid_helper(connector, mode); in radeon_dp_mode_valid()
1777 if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) { in radeon_dp_mode_valid()
1779 if (mode->clock > 340000) in radeon_dp_mode_valid()
1782 if (mode->clock > 165000) in radeon_dp_mode_valid()
1838 struct radeon_device *rdev = dev->dev_private; in radeon_add_atom_connector()
1839 struct drm_connector *connector; in radeon_add_atom_connector() local
1853 /* if the user selected tv=0 don't try and add the connector */ in radeon_add_atom_connector()
1861 list_for_each_entry(connector, &dev->mode_config.connector_list, head) { in radeon_add_atom_connector()
1862 radeon_connector = to_radeon_connector(connector); in radeon_add_atom_connector()
1863 if (radeon_connector->connector_id == connector_id) { in radeon_add_atom_connector()
1864 radeon_connector->devices |= supported_device; in radeon_add_atom_connector()
1867 if (radeon_connector->ddc_bus && i2c_bus->valid) { in radeon_add_atom_connector()
1868 if (radeon_connector->ddc_bus->rec.i2c_id == i2c_bus->i2c_id) { in radeon_add_atom_connector()
1869 radeon_connector->shared_ddc = true; in radeon_add_atom_connector()
1872 if (radeon_connector->router_bus && router->ddc_valid && in radeon_add_atom_connector()
1873 (radeon_connector->router.router_id == router->router_id)) { in radeon_add_atom_connector()
1874 radeon_connector->shared_ddc = false; in radeon_add_atom_connector()
1881 list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { in radeon_add_atom_connector()
1883 if (radeon_encoder->devices & supported_device) { in radeon_add_atom_connector()
1884 switch (radeon_encoder->encoder_id) { in radeon_add_atom_connector()
1899 connector = &radeon_connector->base; in radeon_add_atom_connector()
1901 radeon_connector->connector_id = connector_id; in radeon_add_atom_connector()
1902 radeon_connector->devices = supported_device; in radeon_add_atom_connector()
1903 radeon_connector->shared_ddc = shared_ddc; in radeon_add_atom_connector()
1904 radeon_connector->connector_object_id = connector_object_id; in radeon_add_atom_connector()
1905 radeon_connector->hpd = *hpd; in radeon_add_atom_connector()
1907 radeon_connector->router = *router; in radeon_add_atom_connector()
1908 if (router->ddc_valid || router->cd_valid) { in radeon_add_atom_connector()
1909 radeon_connector->router_bus = radeon_i2c_lookup(rdev, &router->i2c_info); in radeon_add_atom_connector()
1910 if (!radeon_connector->router_bus) in radeon_add_atom_connector()
1918 radeon_dig_connector->igp_lane_info = igp_lane_info; in radeon_add_atom_connector()
1919 radeon_connector->con_priv = radeon_dig_connector; in radeon_add_atom_connector()
1920 if (i2c_bus->valid) { in radeon_add_atom_connector()
1921 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); in radeon_add_atom_connector()
1922 if (radeon_connector->ddc_bus) { in radeon_add_atom_connector()
1924 ddc = &radeon_connector->ddc_bus->adapter; in radeon_add_atom_connector()
1933 drm_connector_init_with_ddc(dev, &radeon_connector->base, in radeon_add_atom_connector()
1937 drm_connector_helper_add(&radeon_connector->base, in radeon_add_atom_connector()
1939 connector->interlace_allowed = true; in radeon_add_atom_connector()
1940 connector->doublescan_allowed = true; in radeon_add_atom_connector()
1941 radeon_connector->dac_load_detect = true; in radeon_add_atom_connector()
1942 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
1943 rdev->mode_info.load_detect_property, in radeon_add_atom_connector()
1945 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
1946 dev->mode_config.scaling_mode_property, in radeon_add_atom_connector()
1949 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
1950 rdev->mode_info.output_csc_property, in radeon_add_atom_connector()
1958 drm_connector_init_with_ddc(dev, &radeon_connector->base, in radeon_add_atom_connector()
1962 drm_connector_helper_add(&radeon_connector->base, in radeon_add_atom_connector()
1964 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
1965 rdev->mode_info.underscan_property, in radeon_add_atom_connector()
1967 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
1968 rdev->mode_info.underscan_hborder_property, in radeon_add_atom_connector()
1970 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
1971 rdev->mode_info.underscan_vborder_property, in radeon_add_atom_connector()
1974 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
1975 dev->mode_config.scaling_mode_property, in radeon_add_atom_connector()
1978 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
1979 rdev->mode_info.dither_property, in radeon_add_atom_connector()
1983 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
1984 rdev->mode_info.audio_property, in radeon_add_atom_connector()
1986 radeon_connector->audio = RADEON_AUDIO_AUTO; in radeon_add_atom_connector()
1989 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
1990 rdev->mode_info.output_csc_property, in radeon_add_atom_connector()
1994 connector->interlace_allowed = true; in radeon_add_atom_connector()
1996 connector->doublescan_allowed = true; in radeon_add_atom_connector()
1998 connector->doublescan_allowed = false; in radeon_add_atom_connector()
2000 radeon_connector->dac_load_detect = true; in radeon_add_atom_connector()
2001 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2002 rdev->mode_info.load_detect_property, in radeon_add_atom_connector()
2008 drm_connector_init_with_ddc(dev, &radeon_connector->base, in radeon_add_atom_connector()
2012 drm_connector_helper_add(&radeon_connector->base, in radeon_add_atom_connector()
2014 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2015 dev->mode_config.scaling_mode_property, in radeon_add_atom_connector()
2018 connector->interlace_allowed = false; in radeon_add_atom_connector()
2019 connector->doublescan_allowed = false; in radeon_add_atom_connector()
2025 if (i2c_bus->valid) { in radeon_add_atom_connector()
2026 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); in radeon_add_atom_connector()
2027 if (!radeon_connector->ddc_bus) in radeon_add_atom_connector()
2028 DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); in radeon_add_atom_connector()
2030 ddc = &radeon_connector->ddc_bus->adapter; in radeon_add_atom_connector()
2032 drm_connector_init_with_ddc(dev, &radeon_connector->base, in radeon_add_atom_connector()
2036 drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); in radeon_add_atom_connector()
2037 radeon_connector->dac_load_detect = true; in radeon_add_atom_connector()
2038 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2039 rdev->mode_info.load_detect_property, in radeon_add_atom_connector()
2042 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2043 dev->mode_config.scaling_mode_property, in radeon_add_atom_connector()
2046 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2047 rdev->mode_info.output_csc_property, in radeon_add_atom_connector()
2050 radeon_connector->hpd.hpd = RADEON_HPD_NONE; in radeon_add_atom_connector()
2051 connector->interlace_allowed = true; in radeon_add_atom_connector()
2052 connector->doublescan_allowed = true; in radeon_add_atom_connector()
2055 if (i2c_bus->valid) { in radeon_add_atom_connector()
2056 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); in radeon_add_atom_connector()
2057 if (!radeon_connector->ddc_bus) in radeon_add_atom_connector()
2060 ddc = &radeon_connector->ddc_bus->adapter; in radeon_add_atom_connector()
2062 drm_connector_init_with_ddc(dev, &radeon_connector->base, in radeon_add_atom_connector()
2066 drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); in radeon_add_atom_connector()
2067 radeon_connector->dac_load_detect = true; in radeon_add_atom_connector()
2068 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2069 rdev->mode_info.load_detect_property, in radeon_add_atom_connector()
2072 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2073 dev->mode_config.scaling_mode_property, in radeon_add_atom_connector()
2076 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2077 rdev->mode_info.output_csc_property, in radeon_add_atom_connector()
2080 radeon_connector->hpd.hpd = RADEON_HPD_NONE; in radeon_add_atom_connector()
2081 connector->interlace_allowed = true; in radeon_add_atom_connector()
2082 connector->doublescan_allowed = true; in radeon_add_atom_connector()
2089 radeon_dig_connector->igp_lane_info = igp_lane_info; in radeon_add_atom_connector()
2090 radeon_connector->con_priv = radeon_dig_connector; in radeon_add_atom_connector()
2091 if (i2c_bus->valid) { in radeon_add_atom_connector()
2092 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); in radeon_add_atom_connector()
2093 if (!radeon_connector->ddc_bus) in radeon_add_atom_connector()
2096 ddc = &radeon_connector->ddc_bus->adapter; in radeon_add_atom_connector()
2098 drm_connector_init_with_ddc(dev, &radeon_connector->base, in radeon_add_atom_connector()
2102 drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs); in radeon_add_atom_connector()
2104 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2105 rdev->mode_info.coherent_mode_property, in radeon_add_atom_connector()
2108 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2109 rdev->mode_info.underscan_property, in radeon_add_atom_connector()
2111 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2112 rdev->mode_info.underscan_hborder_property, in radeon_add_atom_connector()
2114 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2115 rdev->mode_info.underscan_vborder_property, in radeon_add_atom_connector()
2117 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2118 rdev->mode_info.dither_property, in radeon_add_atom_connector()
2120 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2121 dev->mode_config.scaling_mode_property, in radeon_add_atom_connector()
2125 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2126 rdev->mode_info.audio_property, in radeon_add_atom_connector()
2128 radeon_connector->audio = RADEON_AUDIO_AUTO; in radeon_add_atom_connector()
2131 radeon_connector->dac_load_detect = true; in radeon_add_atom_connector()
2132 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2133 rdev->mode_info.load_detect_property, in radeon_add_atom_connector()
2137 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2138 rdev->mode_info.output_csc_property, in radeon_add_atom_connector()
2140 connector->interlace_allowed = true; in radeon_add_atom_connector()
2142 connector->doublescan_allowed = true; in radeon_add_atom_connector()
2144 connector->doublescan_allowed = false; in radeon_add_atom_connector()
2151 radeon_dig_connector->igp_lane_info = igp_lane_info; in radeon_add_atom_connector()
2152 radeon_connector->con_priv = radeon_dig_connector; in radeon_add_atom_connector()
2153 if (i2c_bus->valid) { in radeon_add_atom_connector()
2154 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); in radeon_add_atom_connector()
2155 if (!radeon_connector->ddc_bus) in radeon_add_atom_connector()
2158 ddc = &radeon_connector->ddc_bus->adapter; in radeon_add_atom_connector()
2160 drm_connector_init_with_ddc(dev, &radeon_connector->base, in radeon_add_atom_connector()
2164 drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs); in radeon_add_atom_connector()
2165 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2166 rdev->mode_info.coherent_mode_property, in radeon_add_atom_connector()
2169 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2170 rdev->mode_info.underscan_property, in radeon_add_atom_connector()
2172 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2173 rdev->mode_info.underscan_hborder_property, in radeon_add_atom_connector()
2175 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2176 rdev->mode_info.underscan_vborder_property, in radeon_add_atom_connector()
2178 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2179 rdev->mode_info.dither_property, in radeon_add_atom_connector()
2181 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2182 dev->mode_config.scaling_mode_property, in radeon_add_atom_connector()
2186 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2187 rdev->mode_info.audio_property, in radeon_add_atom_connector()
2189 radeon_connector->audio = RADEON_AUDIO_AUTO; in radeon_add_atom_connector()
2192 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2193 rdev->mode_info.output_csc_property, in radeon_add_atom_connector()
2196 connector->interlace_allowed = true; in radeon_add_atom_connector()
2198 connector->doublescan_allowed = true; in radeon_add_atom_connector()
2200 connector->doublescan_allowed = false; in radeon_add_atom_connector()
2206 radeon_dig_connector->igp_lane_info = igp_lane_info; in radeon_add_atom_connector()
2207 radeon_connector->con_priv = radeon_dig_connector; in radeon_add_atom_connector()
2208 if (i2c_bus->valid) { in radeon_add_atom_connector()
2209 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); in radeon_add_atom_connector()
2210 if (radeon_connector->ddc_bus) { in radeon_add_atom_connector()
2212 ddc = &radeon_connector->ddc_bus->adapter; in radeon_add_atom_connector()
2217 drm_connector_init_with_ddc(dev, &radeon_connector->base, in radeon_add_atom_connector()
2221 drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs); in radeon_add_atom_connector()
2223 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2224 rdev->mode_info.coherent_mode_property, in radeon_add_atom_connector()
2227 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2228 rdev->mode_info.underscan_property, in radeon_add_atom_connector()
2230 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2231 rdev->mode_info.underscan_hborder_property, in radeon_add_atom_connector()
2233 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2234 rdev->mode_info.underscan_vborder_property, in radeon_add_atom_connector()
2236 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2237 rdev->mode_info.dither_property, in radeon_add_atom_connector()
2239 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2240 dev->mode_config.scaling_mode_property, in radeon_add_atom_connector()
2244 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2245 rdev->mode_info.audio_property, in radeon_add_atom_connector()
2247 radeon_connector->audio = RADEON_AUDIO_AUTO; in radeon_add_atom_connector()
2250 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2251 rdev->mode_info.output_csc_property, in radeon_add_atom_connector()
2253 connector->interlace_allowed = true; in radeon_add_atom_connector()
2254 /* in theory with a DP to VGA converter... */ in radeon_add_atom_connector()
2255 connector->doublescan_allowed = false; in radeon_add_atom_connector()
2261 radeon_dig_connector->igp_lane_info = igp_lane_info; in radeon_add_atom_connector()
2262 radeon_connector->con_priv = radeon_dig_connector; in radeon_add_atom_connector()
2263 if (i2c_bus->valid) { in radeon_add_atom_connector()
2264 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); in radeon_add_atom_connector()
2265 if (radeon_connector->ddc_bus) { in radeon_add_atom_connector()
2267 ddc = &radeon_connector->ddc_bus->adapter; in radeon_add_atom_connector()
2272 drm_connector_init_with_ddc(dev, &radeon_connector->base, in radeon_add_atom_connector()
2276 drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs); in radeon_add_atom_connector()
2277 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2278 dev->mode_config.scaling_mode_property, in radeon_add_atom_connector()
2281 connector->interlace_allowed = false; in radeon_add_atom_connector()
2282 connector->doublescan_allowed = false; in radeon_add_atom_connector()
2287 drm_connector_init_with_ddc(dev, &radeon_connector->base, in radeon_add_atom_connector()
2291 drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs); in radeon_add_atom_connector()
2292 radeon_connector->dac_load_detect = true; in radeon_add_atom_connector()
2293 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2294 rdev->mode_info.load_detect_property, in radeon_add_atom_connector()
2296 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2297 rdev->mode_info.tv_std_property, in radeon_add_atom_connector()
2300 radeon_connector->hpd.hpd = RADEON_HPD_NONE; in radeon_add_atom_connector()
2301 connector->interlace_allowed = false; in radeon_add_atom_connector()
2302 connector->doublescan_allowed = false; in radeon_add_atom_connector()
2308 radeon_dig_connector->igp_lane_info = igp_lane_info; in radeon_add_atom_connector()
2309 radeon_connector->con_priv = radeon_dig_connector; in radeon_add_atom_connector()
2310 if (i2c_bus->valid) { in radeon_add_atom_connector()
2311 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); in radeon_add_atom_connector()
2312 if (!radeon_connector->ddc_bus) in radeon_add_atom_connector()
2315 ddc = &radeon_connector->ddc_bus->adapter; in radeon_add_atom_connector()
2317 drm_connector_init_with_ddc(dev, &radeon_connector->base, in radeon_add_atom_connector()
2321 drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs); in radeon_add_atom_connector()
2322 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_atom_connector()
2323 dev->mode_config.scaling_mode_property, in radeon_add_atom_connector()
2326 connector->interlace_allowed = false; in radeon_add_atom_connector()
2327 connector->doublescan_allowed = false; in radeon_add_atom_connector()
2332 if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) { in radeon_add_atom_connector()
2333 if (i2c_bus->valid) { in radeon_add_atom_connector()
2334 connector->polled = DRM_CONNECTOR_POLL_CONNECT | in radeon_add_atom_connector()
2338 connector->polled = DRM_CONNECTOR_POLL_HPD; in radeon_add_atom_connector()
2340 connector->display_info.subpixel_order = subpixel_order; in radeon_add_atom_connector()
2341 drm_connector_register(connector); in radeon_add_atom_connector()
2349 drm_connector_cleanup(connector); in radeon_add_atom_connector()
2350 kfree(connector); in radeon_add_atom_connector()
2362 struct radeon_device *rdev = dev->dev_private; in radeon_add_legacy_connector()
2363 struct drm_connector *connector; in radeon_add_legacy_connector() local
2371 /* if the user selected tv=0 don't try and add the connector */ in radeon_add_legacy_connector()
2379 list_for_each_entry(connector, &dev->mode_config.connector_list, head) { in radeon_add_legacy_connector()
2380 radeon_connector = to_radeon_connector(connector); in radeon_add_legacy_connector()
2381 if (radeon_connector->connector_id == connector_id) { in radeon_add_legacy_connector()
2382 radeon_connector->devices |= supported_device; in radeon_add_legacy_connector()
2391 connector = &radeon_connector->base; in radeon_add_legacy_connector()
2393 radeon_connector->connector_id = connector_id; in radeon_add_legacy_connector()
2394 radeon_connector->devices = supported_device; in radeon_add_legacy_connector()
2395 radeon_connector->connector_object_id = connector_object_id; in radeon_add_legacy_connector()
2396 radeon_connector->hpd = *hpd; in radeon_add_legacy_connector()
2400 if (i2c_bus->valid) { in radeon_add_legacy_connector()
2401 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); in radeon_add_legacy_connector()
2402 if (!radeon_connector->ddc_bus) in radeon_add_legacy_connector()
2403 DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); in radeon_add_legacy_connector()
2405 ddc = &radeon_connector->ddc_bus->adapter; in radeon_add_legacy_connector()
2407 drm_connector_init_with_ddc(dev, &radeon_connector->base, in radeon_add_legacy_connector()
2411 drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); in radeon_add_legacy_connector()
2412 radeon_connector->dac_load_detect = true; in radeon_add_legacy_connector()
2413 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_legacy_connector()
2414 rdev->mode_info.load_detect_property, in radeon_add_legacy_connector()
2417 radeon_connector->hpd.hpd = RADEON_HPD_NONE; in radeon_add_legacy_connector()
2418 connector->interlace_allowed = true; in radeon_add_legacy_connector()
2419 connector->doublescan_allowed = true; in radeon_add_legacy_connector()
2422 if (i2c_bus->valid) { in radeon_add_legacy_connector()
2423 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); in radeon_add_legacy_connector()
2424 if (!radeon_connector->ddc_bus) in radeon_add_legacy_connector()
2427 ddc = &radeon_connector->ddc_bus->adapter; in radeon_add_legacy_connector()
2429 drm_connector_init_with_ddc(dev, &radeon_connector->base, in radeon_add_legacy_connector()
2433 drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); in radeon_add_legacy_connector()
2434 radeon_connector->dac_load_detect = true; in radeon_add_legacy_connector()
2435 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_legacy_connector()
2436 rdev->mode_info.load_detect_property, in radeon_add_legacy_connector()
2439 radeon_connector->hpd.hpd = RADEON_HPD_NONE; in radeon_add_legacy_connector()
2440 connector->interlace_allowed = true; in radeon_add_legacy_connector()
2441 connector->doublescan_allowed = true; in radeon_add_legacy_connector()
2445 if (i2c_bus->valid) { in radeon_add_legacy_connector()
2446 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); in radeon_add_legacy_connector()
2447 if (!radeon_connector->ddc_bus) in radeon_add_legacy_connector()
2450 ddc = &radeon_connector->ddc_bus->adapter; in radeon_add_legacy_connector()
2452 drm_connector_init_with_ddc(dev, &radeon_connector->base, in radeon_add_legacy_connector()
2456 drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs); in radeon_add_legacy_connector()
2458 radeon_connector->dac_load_detect = true; in radeon_add_legacy_connector()
2459 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_legacy_connector()
2460 rdev->mode_info.load_detect_property, in radeon_add_legacy_connector()
2464 connector->interlace_allowed = true; in radeon_add_legacy_connector()
2466 connector->doublescan_allowed = true; in radeon_add_legacy_connector()
2468 connector->doublescan_allowed = false; in radeon_add_legacy_connector()
2473 drm_connector_init_with_ddc(dev, &radeon_connector->base, in radeon_add_legacy_connector()
2477 drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs); in radeon_add_legacy_connector()
2478 radeon_connector->dac_load_detect = true; in radeon_add_legacy_connector()
2484 if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480) in radeon_add_legacy_connector()
2485 radeon_connector->dac_load_detect = false; in radeon_add_legacy_connector()
2486 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_legacy_connector()
2487 rdev->mode_info.load_detect_property, in radeon_add_legacy_connector()
2488 radeon_connector->dac_load_detect); in radeon_add_legacy_connector()
2489 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_legacy_connector()
2490 rdev->mode_info.tv_std_property, in radeon_add_legacy_connector()
2493 radeon_connector->hpd.hpd = RADEON_HPD_NONE; in radeon_add_legacy_connector()
2494 connector->interlace_allowed = false; in radeon_add_legacy_connector()
2495 connector->doublescan_allowed = false; in radeon_add_legacy_connector()
2498 if (i2c_bus->valid) { in radeon_add_legacy_connector()
2499 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); in radeon_add_legacy_connector()
2500 if (!radeon_connector->ddc_bus) in radeon_add_legacy_connector()
2503 ddc = &radeon_connector->ddc_bus->adapter; in radeon_add_legacy_connector()
2505 drm_connector_init_with_ddc(dev, &radeon_connector->base, in radeon_add_legacy_connector()
2509 drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs); in radeon_add_legacy_connector()
2510 drm_object_attach_property(&radeon_connector->base.base, in radeon_add_legacy_connector()
2511 dev->mode_config.scaling_mode_property, in radeon_add_legacy_connector()
2514 connector->interlace_allowed = false; in radeon_add_legacy_connector()
2515 connector->doublescan_allowed = false; in radeon_add_legacy_connector()
2519 if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) { in radeon_add_legacy_connector()
2520 if (i2c_bus->valid) { in radeon_add_legacy_connector()
2521 connector->polled = DRM_CONNECTOR_POLL_CONNECT | in radeon_add_legacy_connector()
2525 connector->polled = DRM_CONNECTOR_POLL_HPD; in radeon_add_legacy_connector()
2527 connector->display_info.subpixel_order = subpixel_order; in radeon_add_legacy_connector()
2528 drm_connector_register(connector); in radeon_add_legacy_connector()