Lines Matching refs:connector

53 nouveau_conn_native_mode(struct drm_connector *connector)
55 const struct drm_connector_helper_funcs *helper = connector->helper_private;
56 struct nouveau_drm *drm = nouveau_drm(connector->dev);
57 struct drm_device *dev = connector->dev;
61 list_for_each_entry(mode, &connector->probed_modes, head) {
62 if (helper->mode_valid(connector, mode) != MODE_OK ||
97 nouveau_conn_atomic_get_property(struct drm_connector *connector,
102 struct nouveau_display *disp = nouveau_display(connector->dev);
103 struct drm_device *dev = connector->dev;
128 nouveau_conn_atomic_set_property(struct drm_connector *connector,
132 struct drm_device *dev = connector->dev;
147 switch (connector->connector_type) {
222 nouveau_conn_atomic_destroy_state(struct drm_connector *connector,
231 nouveau_conn_atomic_duplicate_state(struct drm_connector *connector)
233 struct nouveau_conn_atom *armc = nouveau_conn_atom(connector->state);
237 __drm_atomic_helper_connector_duplicate_state(connector, &asyc->state);
246 nouveau_conn_reset(struct drm_connector *connector)
248 struct nouveau_connector *nv_connector = nouveau_connector(connector);
251 if (drm_drv_uses_atomic_modeset(connector->dev)) {
255 if (connector->state)
256 nouveau_conn_atomic_destroy_state(connector,
257 connector->state);
259 __drm_atomic_helper_connector_reset(connector, &asyc->state);
271 if (nouveau_display(connector->dev)->disp.object.oclass < NV50_DISP) {
272 switch (connector->connector_type) {
284 nouveau_conn_attach_properties(struct drm_connector *connector)
286 struct drm_device *dev = connector->dev;
288 struct nouveau_connector *nv_connector = nouveau_connector(connector);
291 if (drm_drv_uses_atomic_modeset(connector->dev))
292 armc = nouveau_conn_atom(connector->state);
297 if (connector->connector_type == DRM_MODE_CONNECTOR_DVII)
298 drm_object_attach_property(&connector->base, dev->mode_config.
303 (connector->connector_type == DRM_MODE_CONNECTOR_DVID ||
304 connector->connector_type == DRM_MODE_CONNECTOR_DVII ||
305 connector->connector_type == DRM_MODE_CONNECTOR_HDMIA ||
306 connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort)) {
307 drm_object_attach_property(&connector->base,
310 drm_object_attach_property(&connector->base,
312 drm_object_attach_property(&connector->base,
318 drm_object_attach_property(&connector->base,
322 drm_object_attach_property(&connector->base,
327 switch (connector->connector_type) {
335 drm_object_attach_property(&connector->base, dev->mode_config.
342 switch (connector->connector_type) {
348 drm_object_attach_property(&connector->base,
353 drm_object_attach_property(&connector->base,
378 find_encoder(struct drm_connector *connector, int type)
383 drm_connector_for_each_possible_encoder(connector, enc) {
395 nouveau_connector_destroy(struct drm_connector *connector)
397 struct nouveau_connector *nv_connector = nouveau_connector(connector);
401 drm_connector_unregister(connector);
402 drm_connector_cleanup(connector);
406 kfree(connector);
410 nouveau_connector_ddc_detect(struct drm_connector *connector)
412 struct drm_device *dev = connector->dev;
414 struct nouveau_connector *conn = nouveau_connector(connector);
420 drm_connector_for_each_possible_encoder(connector, encoder) {
473 nouveau_connector_of_detect(struct drm_connector *connector)
476 struct drm_device *dev = connector->dev;
477 struct nouveau_connector *nv_connector = nouveau_connector(connector);
483 !((nv_encoder = find_encoder(connector, DCB_OUTPUT_TMDS)) ||
484 (nv_encoder = find_encoder(connector, DCB_OUTPUT_ANALOG))))
504 nouveau_connector_set_encoder(struct drm_connector *connector,
507 struct nouveau_connector *nv_connector = nouveau_connector(connector);
508 struct nouveau_drm *drm = nouveau_drm(connector->dev);
509 struct drm_device *dev = connector->dev;
518 connector->interlace_allowed =
521 connector->interlace_allowed =
523 connector->doublescan_allowed = true;
527 connector->doublescan_allowed = false;
528 connector->interlace_allowed = false;
530 connector->doublescan_allowed = true;
536 connector->interlace_allowed = false;
538 connector->interlace_allowed = true;
542 drm_object_property_set_value(&connector->base,
564 nouveau_connector_detect(struct drm_connector *connector, bool force)
566 struct drm_device *dev = connector->dev;
568 struct nouveau_connector *nv_connector = nouveau_connector(connector);
592 nv_encoder = nouveau_connector_ddc_detect(connector);
599 new_edid = drm_get_edid_switcheroo(connector, nv_encoder->i2c);
601 new_edid = drm_get_edid(connector, nv_encoder->i2c);
611 connector->name);
622 nv_partner = find_encoder(connector, DCB_OUTPUT_ANALOG);
624 nv_partner = find_encoder(connector, DCB_OUTPUT_TMDS);
635 nv_encoder = find_encoder(connector, type);
638 nouveau_connector_set_encoder(connector, nv_encoder);
649 nv_encoder = nouveau_connector_of_detect(connector);
651 nouveau_connector_set_encoder(connector, nv_encoder);
657 nv_encoder = find_encoder(connector, DCB_OUTPUT_ANALOG);
659 nv_encoder = find_encoder(connector, DCB_OUTPUT_TV);
665 if (helper->detect(encoder, connector) ==
667 nouveau_connector_set_encoder(connector, nv_encoder);
684 nouveau_connector_detect_lvds(struct drm_connector *connector, bool force)
686 struct drm_device *dev = connector->dev;
688 struct nouveau_connector *nv_connector = nouveau_connector(connector);
693 nv_encoder = find_encoder(connector, DCB_OUTPUT_LVDS);
699 status = nouveau_connector_detect(connector, force);
716 edid = nouveau_acpi_edid(dev, connector);
755 nouveau_connector_set_encoder(connector, nv_encoder);
760 nouveau_connector_force(struct drm_connector *connector)
762 struct nouveau_drm *drm = nouveau_drm(connector->dev);
763 struct nouveau_connector *nv_connector = nouveau_connector(connector);
768 if (connector->force == DRM_FORCE_ON_DIGITAL)
775 nv_encoder = find_encoder(connector, type);
778 connector->name);
779 connector->status = connector_status_disconnected;
783 nouveau_connector_set_encoder(connector, nv_encoder);
787 nouveau_connector_set_property(struct drm_connector *connector,
790 struct nouveau_connector *nv_connector = nouveau_connector(connector);
796 ret = connector->funcs->atomic_set_property(&nv_connector->base,
802 encoder, connector, property, value);
809 if (connector->encoder && connector->encoder->crtc) {
810 ret = drm_crtc_helper_set_mode(connector->encoder->crtc,
811 &connector->encoder->crtc->mode,
812 connector->encoder->crtc->x,
813 connector->encoder->crtc->y,
846 nouveau_connector_scaler_modes_add(struct drm_connector *connector)
848 struct nouveau_connector *nv_connector = nouveau_connector(connector);
850 struct drm_device *dev = connector->dev;
868 drm_mode_probed_add(connector, m);
879 nouveau_connector_detect_depth(struct drm_connector *connector)
881 struct nouveau_drm *drm = nouveau_drm(connector->dev);
882 struct nouveau_connector *nv_connector = nouveau_connector(connector);
889 if (nv_connector->edid && connector->display_info.bpc)
894 connector->display_info.bpc = 6;
900 connector->display_info.bpc = 8;
904 connector->display_info.bpc = 6;
909 connector->display_info.bpc = 8;
924 connector->display_info.bpc = 8;
928 nouveau_connector_late_register(struct drm_connector *connector)
932 ret = nouveau_backlight_init(connector);
936 if (connector->connector_type == DRM_MODE_CONNECTOR_eDP ||
937 connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
938 ret = drm_dp_aux_register(&nouveau_connector(connector)->aux);
945 nouveau_backlight_fini(connector);
950 nouveau_connector_early_unregister(struct drm_connector *connector)
952 if (connector->connector_type == DRM_MODE_CONNECTOR_eDP ||
953 connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort)
954 drm_dp_aux_unregister(&nouveau_connector(connector)->aux);
956 nouveau_backlight_fini(connector);
960 nouveau_connector_get_modes(struct drm_connector *connector)
962 struct drm_device *dev = connector->dev;
964 struct nouveau_connector *nv_connector = nouveau_connector(connector);
977 ret = drm_add_edid_modes(connector, nv_connector->edid);
991 if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS)
992 nouveau_connector_detect_depth(connector);
999 nv_connector->native_mode = nouveau_conn_native_mode(connector);
1004 drm_mode_probed_add(connector, mode);
1012 if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS && nv_connector->native_mode)
1013 nouveau_connector_detect_depth(connector);
1016 ret = get_slave_funcs(encoder)->get_modes(encoder, connector);
1021 ret += nouveau_connector_scaler_modes_add(connector);
1027 get_tmds_link_bandwidth(struct drm_connector *connector)
1029 struct nouveau_connector *nv_connector = nouveau_connector(connector);
1031 struct nouveau_drm *drm = nouveau_drm(connector->dev);
1074 nouveau_connector_mode_valid(struct drm_connector *connector,
1077 struct nouveau_connector *nv_connector = nouveau_connector(connector);
1093 max_clock = get_tmds_link_bandwidth(connector);
1121 nouveau_connector_best_encoder(struct drm_connector *connector)
1123 struct nouveau_connector *nv_connector = nouveau_connector(connector);
1132 nouveau_connector_atomic_check(struct drm_connector *connector, struct drm_atomic_state *state)
1134 struct nouveau_connector *nv_conn = nouveau_connector(connector);
1136 drm_atomic_get_new_connector_state(state, connector);
1283 struct drm_connector *connector;
1289 nouveau_for_each_non_mst_connector_iter(connector, &conn_iter) {
1290 nv_connector = nouveau_connector(connector);
1293 return connector;
1302 connector = &nv_connector->base;
1337 /* attempt to parse vbios connector type and hotplug gpio */
1341 NV_WARN(drm, "unknown connector type %02x\n",
1347 /* no vbios data, or an unknown dcb connector type - attempt to
1357 if (dcbt->entry[i].connector == nv_connector->index)
1381 drm_connector_init(dev, connector, &nouveau_connector_funcs_lvds, type);
1383 drm_connector_init(dev, connector, &nouveau_connector_funcs, type);
1397 nv_connector->aux.dev = connector->kdev;
1400 nv_connector->aux.name = connector->name;
1412 connector->stereo_allowed = true;
1415 connector->interlace_allowed = false;
1416 connector->doublescan_allowed = false;
1418 drm_connector_helper_add(connector, &nouveau_connector_helper_funcs);
1419 connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1427 connector->polled = DRM_CONNECTOR_POLL_HPD;
1441 connector->funcs->reset(connector);
1442 nouveau_conn_attach_properties(connector);
1478 drm_dp_cec_register_connector(&nv_connector->aux, connector);
1482 drm_connector_register(connector);
1483 return connector;
1486 drm_connector_cleanup(connector);