Lines Matching defs:connector

40 void radeon_connector_hotplug(struct drm_connector *connector)
42 struct drm_device *dev = connector->dev;
44 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
46 /* bail if the connector does not have hpd pin, e.g.,
54 /* if the connector is already off, don't turn it back on */
56 if (connector->dpms != DRM_MODE_DPMS_ON)
60 if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
80 /* Turn the connector off and back on immediately, which
83 drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
84 drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
99 int radeon_get_monitor_bpc(struct drm_connector *connector)
101 struct drm_device *dev = connector->dev;
103 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
108 switch (connector->connector_type) {
112 if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
113 if (connector->display_info.bpc)
114 bpc = connector->display_info.bpc;
120 if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
121 if (connector->display_info.bpc)
122 bpc = connector->display_info.bpc;
129 drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
130 if (connector->display_info.bpc)
131 bpc = connector->display_info.bpc;
136 if (connector->display_info.bpc)
137 bpc = connector->display_info.bpc;
140 connector->helper_private;
141 struct drm_encoder *encoder = connector_funcs->best_encoder(connector);
153 if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
157 connector->name, bpc);
169 connector->name, bpc);
174 if (connector->display_info.max_tmds_clock > 0) {
175 /* mode_clock is clock in kHz for mode to be modeset on this connector */
179 max_tmds_clock = connector->display_info.max_tmds_clock;
182 connector->name, mode_clock, max_tmds_clock);
186 if ((connector->display_info.edid_hdmi_rgb444_dc_modes & DRM_EDID_HDMI_DC_30) &&
193 connector->name, bpc);
199 connector->name, bpc);
204 connector->name);
211 connector->name);
216 connector->name, connector->display_info.bpc, bpc);
222 radeon_connector_update_scratch_regs(struct drm_connector *connector, enum drm_connector_status status)
224 struct drm_device *dev = connector->dev;
228 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
231 best_encoder = connector_funcs->best_encoder(connector);
233 drm_connector_for_each_possible_encoder(connector, encoder) {
240 radeon_atombios_connected_scratch_regs(connector, encoder, connected);
242 radeon_combios_connected_scratch_regs(connector, encoder, connected);
246 static struct drm_encoder *radeon_find_encoder(struct drm_connector *connector, int encoder_type)
250 drm_connector_for_each_possible_encoder(connector, encoder) {
258 struct edid *radeon_connector_edid(struct drm_connector *connector)
260 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
261 struct drm_property_blob *edid_blob = connector->edid_blob_ptr;
273 static void radeon_connector_get_edid(struct drm_connector *connector)
275 struct drm_device *dev = connector->dev;
277 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
286 if ((radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
289 radeon_connector->edid = drm_get_edid(connector,
291 } else if ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
292 (connector->connector_type == DRM_MODE_CONNECTOR_eDP)) {
304 connector->connector_type == DRM_MODE_CONNECTOR_LVDS &&
322 if (((connector->connector_type == DRM_MODE_CONNECTOR_LVDS) ||
323 (connector->connector_type == DRM_MODE_CONNECTOR_eDP)))
332 static void radeon_connector_free_edid(struct drm_connector *connector)
334 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
340 static int radeon_ddc_get_modes(struct drm_connector *connector)
342 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
346 drm_connector_update_edid_property(connector, radeon_connector->edid);
347 ret = drm_add_edid_modes(connector, radeon_connector->edid);
350 drm_connector_update_edid_property(connector, NULL);
354 static struct drm_encoder *radeon_best_single_encoder(struct drm_connector *connector)
359 drm_connector_for_each_possible_encoder(connector, encoder)
365 static void radeon_get_native_mode(struct drm_connector *connector)
367 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
375 if (!list_empty(&connector->probed_modes)) {
377 list_first_entry(&connector->probed_modes,
393 radeon_connector_analog_encoder_conflict_solve(struct drm_connector *connector,
398 struct drm_device *dev = connector->dev;
405 if (conflict == connector)
423 connector->name);
428 connector->name);
476 static void radeon_add_common_modes(struct drm_encoder *encoder, struct drm_connector *connector)
523 drm_mode_probed_add(connector, mode);
527 static int radeon_connector_set_property(struct drm_connector *connector, struct drm_property *property,
530 struct drm_device *dev = connector->dev;
539 /* need to find digital encoder on connector */
540 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
558 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
559 /* need to find digital encoder on connector */
560 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
573 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
574 /* need to find digital encoder on connector */
575 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
588 /* need to find digital encoder on connector */
589 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
602 /* need to find digital encoder on connector */
603 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
616 /* need to find digital encoder on connector */
617 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
630 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TVDAC);
632 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_DAC);
655 to_radeon_connector(connector);
666 /* need to find digital encoder on connector */
667 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
692 if (connector->encoder)
693 radeon_encoder = to_radeon_encoder(connector->encoder);
695 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
696 radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
719 if (connector->encoder)
720 radeon_encoder = to_radeon_encoder(connector->encoder);
722 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
723 radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
731 if (connector->encoder && connector->encoder->crtc) {
732 struct drm_crtc *crtc = connector->encoder->crtc;
749 struct drm_connector *connector)
756 list_for_each_entry_safe(mode, t, &connector->probed_modes, head) {
766 list_for_each_entry_safe(mode, t, &connector->probed_modes, head) {
783 static int radeon_lvds_get_modes(struct drm_connector *connector)
789 radeon_connector_get_edid(connector);
790 ret = radeon_ddc_get_modes(connector);
792 encoder = radeon_best_single_encoder(connector);
794 radeon_fixup_lvds_native_mode(encoder, connector);
796 radeon_add_common_modes(encoder, connector);
801 encoder = radeon_best_single_encoder(connector);
809 drm_mode_probed_add(connector, mode);
811 connector->display_info.width_mm = mode->width_mm;
812 connector->display_info.height_mm = mode->height_mm;
814 radeon_add_common_modes(encoder, connector);
820 static enum drm_mode_status radeon_lvds_mode_valid(struct drm_connector *connector,
823 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
851 radeon_lvds_detect(struct drm_connector *connector, bool force)
853 struct drm_device *dev = connector->dev;
855 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
856 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
861 r = pm_runtime_get_sync(connector->dev->dev);
863 pm_runtime_put_autosuspend(connector->dev->dev);
883 radeon_connector_get_edid(connector);
888 radeon_connector_update_scratch_regs(connector, ret);
891 pm_runtime_mark_last_busy(connector->dev->dev);
892 pm_runtime_put_autosuspend(connector->dev->dev);
898 static void radeon_connector_unregister(struct drm_connector *connector)
900 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
908 static void radeon_connector_destroy(struct drm_connector *connector)
910 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
912 radeon_connector_free_edid(connector);
914 drm_connector_unregister(connector);
915 drm_connector_cleanup(connector);
916 kfree(connector);
919 static int radeon_lvds_set_property(struct drm_connector *connector,
923 struct drm_device *dev = connector->dev;
931 if (connector->encoder)
932 radeon_encoder = to_radeon_encoder(connector->encoder);
934 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
935 radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
970 static int radeon_vga_get_modes(struct drm_connector *connector)
974 radeon_connector_get_edid(connector);
975 ret = radeon_ddc_get_modes(connector);
977 radeon_get_native_mode(connector);
982 static enum drm_mode_status radeon_vga_mode_valid(struct drm_connector *connector,
985 struct drm_device *dev = connector->dev;
997 radeon_vga_detect(struct drm_connector *connector, bool force)
999 struct drm_device *dev = connector->dev;
1001 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1009 r = pm_runtime_get_sync(connector->dev->dev);
1011 pm_runtime_put_autosuspend(connector->dev->dev);
1016 encoder = radeon_best_single_encoder(connector);
1024 radeon_connector_free_edid(connector);
1025 radeon_connector_get_edid(connector);
1029 connector->name);
1039 radeon_connector_free_edid(connector);
1053 ret = connector->status;
1059 ret = encoder_funcs->detect(encoder, connector);
1066 ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
1078 radeon_connector_update_scratch_regs(connector, ret);
1082 pm_runtime_mark_last_busy(connector->dev->dev);
1083 pm_runtime_put_autosuspend(connector->dev->dev);
1104 static int radeon_tv_get_modes(struct drm_connector *connector)
1106 struct drm_device *dev = connector->dev;
1111 encoder = radeon_best_single_encoder(connector);
1118 radeon_add_common_modes(encoder, connector);
1125 drm_mode_probed_add(connector, tv_mode);
1130 static enum drm_mode_status radeon_tv_mode_valid(struct drm_connector *connector,
1139 radeon_tv_detect(struct drm_connector *connector, bool force)
1143 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1151 r = pm_runtime_get_sync(connector->dev->dev);
1153 pm_runtime_put_autosuspend(connector->dev->dev);
1158 encoder = radeon_best_single_encoder(connector);
1163 ret = encoder_funcs->detect(encoder, connector);
1166 ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, false);
1167 radeon_connector_update_scratch_regs(connector, ret);
1170 pm_runtime_mark_last_busy(connector->dev->dev);
1171 pm_runtime_put_autosuspend(connector->dev->dev);
1192 static bool radeon_check_hpd_status_unchanged(struct drm_connector *connector)
1194 struct drm_device *dev = connector->dev;
1196 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1206 if (connector->status == status)
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)
1227 struct drm_device *dev = connector->dev;
1229 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1237 r = pm_runtime_get_sync(connector->dev->dev);
1239 pm_runtime_put_autosuspend(connector->dev->dev);
1249 if (!force && radeon_check_hpd_status_unchanged(connector)) {
1250 ret = connector->status;
1262 connector->status != connector_status_connected) {
1272 radeon_connector_free_edid(connector);
1273 radeon_connector_get_edid(connector);
1277 connector->name);
1284 connector->name);
1298 radeon_connector_free_edid(connector);
1312 if (connector == list_connector)
1322 radeon_connector_free_edid(connector);
1336 if ((connector->connector_type == DRM_MODE_CONNECTOR_DVID) ||
1337 (connector->connector_type == DRM_MODE_CONNECTOR_HDMIA))
1346 ret = connector->status;
1352 drm_connector_for_each_possible_encoder(connector, encoder) {
1362 ret = encoder_funcs->detect(encoder, connector);
1373 lret = encoder_funcs->detect(encoder, connector);
1385 ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
1403 radeon_connector_update_scratch_regs(connector, ret);
1407 connector->helper_private;
1409 encoder = connector_funcs->best_encoder(connector);
1411 radeon_connector_get_edid(connector);
1412 radeon_audio_detect(connector, encoder, ret);
1418 pm_runtime_mark_last_busy(connector->dev->dev);
1419 pm_runtime_put_autosuspend(connector->dev->dev);
1426 static struct drm_encoder *radeon_dvi_encoder(struct drm_connector *connector)
1428 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1431 drm_connector_for_each_possible_encoder(connector, encoder) {
1446 drm_connector_for_each_possible_encoder(connector, encoder)
1452 static void radeon_dvi_force(struct drm_connector *connector)
1454 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1455 if (connector->force == DRM_FORCE_ON)
1457 if (connector->force == DRM_FORCE_ON_DIGITAL)
1461 static enum drm_mode_status radeon_dvi_mode_valid(struct drm_connector *connector,
1464 struct drm_device *dev = connector->dev;
1466 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1481 else if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
1515 static int radeon_dp_get_modes(struct drm_connector *connector)
1517 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1519 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1522 if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1523 (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1526 if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
1528 atombios_set_edp_panel_power(connector,
1530 radeon_connector_get_edid(connector);
1531 ret = radeon_ddc_get_modes(connector);
1533 atombios_set_edp_panel_power(connector,
1537 if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1542 radeon_connector_get_edid(connector);
1543 ret = radeon_ddc_get_modes(connector);
1548 radeon_fixup_lvds_native_mode(encoder, connector);
1550 radeon_add_common_modes(encoder, connector);
1562 drm_mode_probed_add(connector, mode);
1564 connector->display_info.width_mm = mode->width_mm;
1565 connector->display_info.height_mm = mode->height_mm;
1567 radeon_add_common_modes(encoder, connector);
1571 if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1576 radeon_connector_get_edid(connector);
1577 ret = radeon_ddc_get_modes(connector);
1579 radeon_get_native_mode(connector);
1585 u16 radeon_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *connector)
1590 drm_connector_for_each_possible_encoder(connector, encoder) {
1605 static bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector)
1611 drm_connector_for_each_possible_encoder(connector, encoder) {
1620 bool radeon_connector_is_dp12_capable(struct drm_connector *connector)
1622 struct drm_device *dev = connector->dev;
1627 radeon_connector_encoder_is_hbr2(connector)) {
1635 radeon_dp_detect(struct drm_connector *connector, bool force)
1637 struct drm_device *dev = connector->dev;
1639 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1642 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1646 r = pm_runtime_get_sync(connector->dev->dev);
1648 pm_runtime_put_autosuspend(connector->dev->dev);
1653 if (!force && radeon_check_hpd_status_unchanged(connector)) {
1654 ret = connector->status;
1658 radeon_connector_free_edid(connector);
1660 if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1661 (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1678 atombios_set_edp_panel_power(connector,
1683 atombios_set_edp_panel_power(connector,
1685 } else if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1700 ret = encoder_funcs->detect(encoder, connector);
1721 radeon_connector_update_scratch_regs(connector, ret);
1724 radeon_connector_get_edid(connector);
1725 radeon_audio_detect(connector, encoder, ret);
1730 pm_runtime_mark_last_busy(connector->dev->dev);
1731 pm_runtime_put_autosuspend(connector->dev->dev);
1737 static enum drm_mode_status radeon_dp_mode_valid(struct drm_connector *connector,
1740 struct drm_device *dev = connector->dev;
1742 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1747 if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1748 (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1749 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1775 return radeon_dp_mode_valid_helper(connector, mode);
1777 if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
1839 struct drm_connector *connector;
1853 /* if the user selected tv=0 don't try and add the connector */
1861 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
1862 radeon_connector = to_radeon_connector(connector);
1899 connector = &radeon_connector->base;
1939 connector->interlace_allowed = true;
1940 connector->doublescan_allowed = true;
1994 connector->interlace_allowed = true;
1996 connector->doublescan_allowed = true;
1998 connector->doublescan_allowed = false;
2018 connector->interlace_allowed = false;
2019 connector->doublescan_allowed = false;
2051 connector->interlace_allowed = true;
2052 connector->doublescan_allowed = true;
2081 connector->interlace_allowed = true;
2082 connector->doublescan_allowed = true;
2140 connector->interlace_allowed = true;
2142 connector->doublescan_allowed = true;
2144 connector->doublescan_allowed = false;
2196 connector->interlace_allowed = true;
2198 connector->doublescan_allowed = true;
2200 connector->doublescan_allowed = false;
2253 connector->interlace_allowed = true;
2255 connector->doublescan_allowed = false;
2281 connector->interlace_allowed = false;
2282 connector->doublescan_allowed = false;
2301 connector->interlace_allowed = false;
2302 connector->doublescan_allowed = false;
2326 connector->interlace_allowed = false;
2327 connector->doublescan_allowed = false;
2334 connector->polled = DRM_CONNECTOR_POLL_CONNECT |
2338 connector->polled = DRM_CONNECTOR_POLL_HPD;
2340 connector->display_info.subpixel_order = subpixel_order;
2341 drm_connector_register(connector);
2349 drm_connector_cleanup(connector);
2350 kfree(connector);
2363 struct drm_connector *connector;
2371 /* if the user selected tv=0 don't try and add the connector */
2379 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
2380 radeon_connector = to_radeon_connector(connector);
2391 connector = &radeon_connector->base;
2418 connector->interlace_allowed = true;
2419 connector->doublescan_allowed = true;
2440 connector->interlace_allowed = true;
2441 connector->doublescan_allowed = true;
2464 connector->interlace_allowed = true;
2466 connector->doublescan_allowed = true;
2468 connector->doublescan_allowed = false;
2494 connector->interlace_allowed = false;
2495 connector->doublescan_allowed = false;
2514 connector->interlace_allowed = false;
2515 connector->doublescan_allowed = false;
2521 connector->polled = DRM_CONNECTOR_POLL_CONNECT |
2525 connector->polled = DRM_CONNECTOR_POLL_HPD;
2527 connector->display_info.subpixel_order = subpixel_order;
2528 drm_connector_register(connector);