Lines Matching refs: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 (connector->display_info.is_hdmi) {
113 if (connector->display_info.bpc)
114 bpc = connector->display_info.bpc;
120 if (connector->display_info.is_hdmi) {
121 if (connector->display_info.bpc)
122 bpc = connector->display_info.bpc;
129 connector->display_info.is_hdmi) {
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 (connector->display_info.is_hdmi) {
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 static void radeon_connector_get_edid(struct drm_connector *connector)
260 struct drm_device *dev = connector->dev;
262 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
271 if ((radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
274 radeon_connector->edid = drm_get_edid(connector,
276 } else if ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
277 (connector->connector_type == DRM_MODE_CONNECTOR_eDP)) {
289 connector->connector_type == DRM_MODE_CONNECTOR_LVDS &&
307 if (((connector->connector_type == DRM_MODE_CONNECTOR_LVDS) ||
308 (connector->connector_type == DRM_MODE_CONNECTOR_eDP)))
317 static void radeon_connector_free_edid(struct drm_connector *connector)
319 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
325 static int radeon_ddc_get_modes(struct drm_connector *connector)
327 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
331 drm_connector_update_edid_property(connector, radeon_connector->edid);
332 ret = drm_add_edid_modes(connector, radeon_connector->edid);
335 drm_connector_update_edid_property(connector, NULL);
339 static struct drm_encoder *radeon_best_single_encoder(struct drm_connector *connector)
344 drm_connector_for_each_possible_encoder(connector, encoder)
350 static void radeon_get_native_mode(struct drm_connector *connector)
352 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
360 if (!list_empty(&connector->probed_modes)) {
362 list_first_entry(&connector->probed_modes,
378 radeon_connector_analog_encoder_conflict_solve(struct drm_connector *connector,
383 struct drm_device *dev = connector->dev;
390 if (conflict == connector)
408 connector->name);
413 connector->name);
461 static void radeon_add_common_modes(struct drm_encoder *encoder, struct drm_connector *connector)
511 drm_mode_probed_add(connector, mode);
515 static int radeon_connector_set_property(struct drm_connector *connector, struct drm_property *property,
518 struct drm_device *dev = connector->dev;
527 /* need to find digital encoder on connector */
528 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
546 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
547 /* need to find digital encoder on connector */
548 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
561 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
562 /* need to find digital encoder on connector */
563 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
576 /* need to find digital encoder on connector */
577 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
590 /* need to find digital encoder on connector */
591 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
604 /* need to find digital encoder on connector */
605 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
618 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TVDAC);
620 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_DAC);
643 to_radeon_connector(connector);
654 /* need to find digital encoder on connector */
655 encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
680 if (connector->encoder)
681 radeon_encoder = to_radeon_encoder(connector->encoder);
683 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
684 radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
707 if (connector->encoder)
708 radeon_encoder = to_radeon_encoder(connector->encoder);
710 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
711 radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
719 if (connector->encoder && connector->encoder->crtc) {
720 struct drm_crtc *crtc = connector->encoder->crtc;
737 struct drm_connector *connector)
744 list_for_each_entry_safe(mode, t, &connector->probed_modes, head) {
754 list_for_each_entry_safe(mode, t, &connector->probed_modes, head) {
771 static int radeon_lvds_get_modes(struct drm_connector *connector)
777 radeon_connector_get_edid(connector);
778 ret = radeon_ddc_get_modes(connector);
780 encoder = radeon_best_single_encoder(connector);
782 radeon_fixup_lvds_native_mode(encoder, connector);
784 radeon_add_common_modes(encoder, connector);
789 encoder = radeon_best_single_encoder(connector);
797 drm_mode_probed_add(connector, mode);
799 connector->display_info.width_mm = mode->width_mm;
800 connector->display_info.height_mm = mode->height_mm;
802 radeon_add_common_modes(encoder, connector);
808 static enum drm_mode_status radeon_lvds_mode_valid(struct drm_connector *connector,
811 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
839 radeon_lvds_detect(struct drm_connector *connector, bool force)
841 struct drm_device *dev = connector->dev;
843 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
844 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
849 r = pm_runtime_get_sync(connector->dev->dev);
851 pm_runtime_put_autosuspend(connector->dev->dev);
871 radeon_connector_get_edid(connector);
876 radeon_connector_update_scratch_regs(connector, ret);
879 pm_runtime_mark_last_busy(connector->dev->dev);
880 pm_runtime_put_autosuspend(connector->dev->dev);
886 static void radeon_connector_unregister(struct drm_connector *connector)
888 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
896 static void radeon_connector_destroy(struct drm_connector *connector)
898 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
900 radeon_connector_free_edid(connector);
902 drm_connector_unregister(connector);
903 drm_connector_cleanup(connector);
904 kfree(connector);
907 static int radeon_lvds_set_property(struct drm_connector *connector,
911 struct drm_device *dev = connector->dev;
919 if (connector->encoder)
920 radeon_encoder = to_radeon_encoder(connector->encoder);
922 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
923 radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
958 static int radeon_vga_get_modes(struct drm_connector *connector)
962 radeon_connector_get_edid(connector);
963 ret = radeon_ddc_get_modes(connector);
965 radeon_get_native_mode(connector);
970 static enum drm_mode_status radeon_vga_mode_valid(struct drm_connector *connector,
973 struct drm_device *dev = connector->dev;
985 radeon_vga_detect(struct drm_connector *connector, bool force)
987 struct drm_device *dev = connector->dev;
989 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
997 r = pm_runtime_get_sync(connector->dev->dev);
999 pm_runtime_put_autosuspend(connector->dev->dev);
1004 encoder = radeon_best_single_encoder(connector);
1012 radeon_connector_free_edid(connector);
1013 radeon_connector_get_edid(connector);
1017 connector->name);
1027 radeon_connector_free_edid(connector);
1041 ret = connector->status;
1047 ret = encoder_funcs->detect(encoder, connector);
1054 ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
1066 radeon_connector_update_scratch_regs(connector, ret);
1070 pm_runtime_mark_last_busy(connector->dev->dev);
1071 pm_runtime_put_autosuspend(connector->dev->dev);
1092 static int radeon_tv_get_modes(struct drm_connector *connector)
1094 struct drm_device *dev = connector->dev;
1099 encoder = radeon_best_single_encoder(connector);
1106 radeon_add_common_modes(encoder, connector);
1113 drm_mode_probed_add(connector, tv_mode);
1118 static enum drm_mode_status radeon_tv_mode_valid(struct drm_connector *connector,
1127 radeon_tv_detect(struct drm_connector *connector, bool force)
1131 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1139 r = pm_runtime_get_sync(connector->dev->dev);
1141 pm_runtime_put_autosuspend(connector->dev->dev);
1146 encoder = radeon_best_single_encoder(connector);
1151 ret = encoder_funcs->detect(encoder, connector);
1154 ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, false);
1155 radeon_connector_update_scratch_regs(connector, ret);
1158 pm_runtime_mark_last_busy(connector->dev->dev);
1159 pm_runtime_put_autosuspend(connector->dev->dev);
1180 static bool radeon_check_hpd_status_unchanged(struct drm_connector *connector)
1182 struct drm_device *dev = connector->dev;
1184 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1194 if (connector->status == status)
1206 * we need to find the DAC encoder object for this connector.
1210 * if its shared we have to set the other connector to disconnected.
1213 radeon_dvi_detect(struct drm_connector *connector, bool force)
1215 struct drm_device *dev = connector->dev;
1217 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1225 r = pm_runtime_get_sync(connector->dev->dev);
1227 pm_runtime_put_autosuspend(connector->dev->dev);
1237 if (!force && radeon_check_hpd_status_unchanged(connector)) {
1238 ret = connector->status;
1250 connector->status != connector_status_connected) {
1260 radeon_connector_free_edid(connector);
1261 radeon_connector_get_edid(connector);
1265 connector->name);
1272 connector->name);
1286 radeon_connector_free_edid(connector);
1300 if (connector == list_connector)
1310 radeon_connector_free_edid(connector);
1324 if ((connector->connector_type == DRM_MODE_CONNECTOR_DVID) ||
1325 (connector->connector_type == DRM_MODE_CONNECTOR_HDMIA))
1334 ret = connector->status;
1340 drm_connector_for_each_possible_encoder(connector, encoder) {
1350 ret = encoder_funcs->detect(encoder, connector);
1361 lret = encoder_funcs->detect(encoder, connector);
1373 ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
1391 radeon_connector_update_scratch_regs(connector, ret);
1395 connector->helper_private;
1397 encoder = connector_funcs->best_encoder(connector);
1399 radeon_connector_get_edid(connector);
1400 radeon_audio_detect(connector, encoder, ret);
1406 pm_runtime_mark_last_busy(connector->dev->dev);
1407 pm_runtime_put_autosuspend(connector->dev->dev);
1414 static struct drm_encoder *radeon_dvi_encoder(struct drm_connector *connector)
1416 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1419 drm_connector_for_each_possible_encoder(connector, encoder) {
1434 drm_connector_for_each_possible_encoder(connector, encoder)
1440 static void radeon_dvi_force(struct drm_connector *connector)
1442 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1443 if (connector->force == DRM_FORCE_ON)
1445 if (connector->force == DRM_FORCE_ON_DIGITAL)
1449 static enum drm_mode_status radeon_dvi_mode_valid(struct drm_connector *connector,
1452 struct drm_device *dev = connector->dev;
1454 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1469 else if (ASIC_IS_DCE6(rdev) && connector->display_info.is_hdmi) {
1503 static int radeon_dp_get_modes(struct drm_connector *connector)
1505 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1507 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1510 if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1511 (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1514 if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
1516 atombios_set_edp_panel_power(connector,
1518 radeon_connector_get_edid(connector);
1519 ret = radeon_ddc_get_modes(connector);
1521 atombios_set_edp_panel_power(connector,
1525 if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1530 radeon_connector_get_edid(connector);
1531 ret = radeon_ddc_get_modes(connector);
1536 radeon_fixup_lvds_native_mode(encoder, connector);
1538 radeon_add_common_modes(encoder, connector);
1550 drm_mode_probed_add(connector, mode);
1552 connector->display_info.width_mm = mode->width_mm;
1553 connector->display_info.height_mm = mode->height_mm;
1555 radeon_add_common_modes(encoder, connector);
1559 if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1564 radeon_connector_get_edid(connector);
1565 ret = radeon_ddc_get_modes(connector);
1567 radeon_get_native_mode(connector);
1573 u16 radeon_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *connector)
1578 drm_connector_for_each_possible_encoder(connector, encoder) {
1593 static bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector)
1599 drm_connector_for_each_possible_encoder(connector, encoder) {
1608 bool radeon_connector_is_dp12_capable(struct drm_connector *connector)
1610 struct drm_device *dev = connector->dev;
1615 radeon_connector_encoder_is_hbr2(connector)) {
1623 radeon_dp_detect(struct drm_connector *connector, bool force)
1625 struct drm_device *dev = connector->dev;
1627 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1630 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1634 r = pm_runtime_get_sync(connector->dev->dev);
1636 pm_runtime_put_autosuspend(connector->dev->dev);
1641 if (!force && radeon_check_hpd_status_unchanged(connector)) {
1642 ret = connector->status;
1646 radeon_connector_free_edid(connector);
1648 if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1649 (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1666 atombios_set_edp_panel_power(connector,
1671 atombios_set_edp_panel_power(connector,
1673 } else if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1688 ret = encoder_funcs->detect(encoder, connector);
1709 radeon_connector_update_scratch_regs(connector, ret);
1712 radeon_connector_get_edid(connector);
1713 radeon_audio_detect(connector, encoder, ret);
1718 pm_runtime_mark_last_busy(connector->dev->dev);
1719 pm_runtime_put_autosuspend(connector->dev->dev);
1725 static enum drm_mode_status radeon_dp_mode_valid(struct drm_connector *connector,
1728 struct drm_device *dev = connector->dev;
1730 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1735 if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1736 (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1737 struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1763 return radeon_dp_mode_valid_helper(connector, mode);
1765 if (ASIC_IS_DCE6(rdev) && connector->display_info.is_hdmi) {
1780 radeon_connector_late_register(struct drm_connector *connector)
1782 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1844 struct drm_connector *connector;
1858 /* if the user selected tv=0 don't try and add the connector */
1866 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
1867 radeon_connector = to_radeon_connector(connector);
1904 connector = &radeon_connector->base;
1944 connector->interlace_allowed = true;
1945 connector->doublescan_allowed = true;
1999 connector->interlace_allowed = true;
2001 connector->doublescan_allowed = true;
2003 connector->doublescan_allowed = false;
2023 connector->interlace_allowed = false;
2024 connector->doublescan_allowed = false;
2056 connector->interlace_allowed = true;
2057 connector->doublescan_allowed = true;
2086 connector->interlace_allowed = true;
2087 connector->doublescan_allowed = true;
2145 connector->interlace_allowed = true;
2147 connector->doublescan_allowed = true;
2149 connector->doublescan_allowed = false;
2201 connector->interlace_allowed = true;
2203 connector->doublescan_allowed = true;
2205 connector->doublescan_allowed = false;
2258 connector->interlace_allowed = true;
2260 connector->doublescan_allowed = false;
2286 connector->interlace_allowed = false;
2287 connector->doublescan_allowed = false;
2306 connector->interlace_allowed = false;
2307 connector->doublescan_allowed = false;
2331 connector->interlace_allowed = false;
2332 connector->doublescan_allowed = false;
2339 connector->polled = DRM_CONNECTOR_POLL_CONNECT |
2343 connector->polled = DRM_CONNECTOR_POLL_HPD;
2345 connector->display_info.subpixel_order = subpixel_order;
2346 drm_connector_register(connector);
2354 drm_connector_cleanup(connector);
2355 kfree(connector);
2368 struct drm_connector *connector;
2376 /* if the user selected tv=0 don't try and add the connector */
2384 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
2385 radeon_connector = to_radeon_connector(connector);
2396 connector = &radeon_connector->base;
2423 connector->interlace_allowed = true;
2424 connector->doublescan_allowed = true;
2445 connector->interlace_allowed = true;
2446 connector->doublescan_allowed = true;
2469 connector->interlace_allowed = true;
2471 connector->doublescan_allowed = true;
2473 connector->doublescan_allowed = false;
2499 connector->interlace_allowed = false;
2500 connector->doublescan_allowed = false;
2519 connector->interlace_allowed = false;
2520 connector->doublescan_allowed = false;
2526 connector->polled = DRM_CONNECTOR_POLL_CONNECT |
2530 connector->polled = DRM_CONNECTOR_POLL_HPD;
2532 connector->display_info.subpixel_order = subpixel_order;
2533 drm_connector_register(connector);