Lines Matching refs:connector

150 static void drm_connector_get_cmdline_mode(struct drm_connector *connector)  in drm_connector_get_cmdline_mode()  argument
152 struct drm_cmdline_mode *mode = &connector->cmdline_mode; in drm_connector_get_cmdline_mode()
155 if (fb_get_options(connector->name, &option)) in drm_connector_get_cmdline_mode()
159 connector, in drm_connector_get_cmdline_mode()
164 DRM_INFO("forcing %s connector %s\n", connector->name, in drm_connector_get_cmdline_mode()
166 connector->force = mode->force; in drm_connector_get_cmdline_mode()
171 connector->name, mode->panel_orientation); in drm_connector_get_cmdline_mode()
172 drm_connector_set_panel_orientation(connector, in drm_connector_get_cmdline_mode()
177 connector->name, mode->name, in drm_connector_get_cmdline_mode()
187 struct drm_connector *connector = in drm_connector_free() local
189 struct drm_device *dev = connector->dev; in drm_connector_free()
191 drm_mode_object_unregister(dev, &connector->base); in drm_connector_free()
192 connector->funcs->destroy(connector); in drm_connector_free()
197 struct drm_connector *connector, *n; in drm_connector_free_work_fn() local
208 llist_for_each_entry_safe(connector, n, freed, free_node) { in drm_connector_free_work_fn()
209 drm_mode_object_unregister(dev, &connector->base); in drm_connector_free_work_fn()
210 connector->funcs->destroy(connector); in drm_connector_free_work_fn()
228 struct drm_connector *connector, in drm_connector_init() argument
241 ret = __drm_mode_object_add(dev, &connector->base, in drm_connector_init()
247 connector->base.properties = &connector->properties; in drm_connector_init()
248 connector->dev = dev; in drm_connector_init()
249 connector->funcs = funcs; in drm_connector_init()
259 connector->index = ret; in drm_connector_init()
262 connector->connector_type = connector_type; in drm_connector_init()
263 connector->connector_type_id = in drm_connector_init()
265 if (connector->connector_type_id < 0) { in drm_connector_init()
266 ret = connector->connector_type_id; in drm_connector_init()
269 connector->name = in drm_connector_init()
272 connector->connector_type_id); in drm_connector_init()
273 if (!connector->name) { in drm_connector_init()
278 INIT_LIST_HEAD(&connector->global_connector_list_entry); in drm_connector_init()
279 INIT_LIST_HEAD(&connector->probed_modes); in drm_connector_init()
280 INIT_LIST_HEAD(&connector->modes); in drm_connector_init()
281 mutex_init(&connector->mutex); in drm_connector_init()
282 connector->edid_blob_ptr = NULL; in drm_connector_init()
283 connector->epoch_counter = 0; in drm_connector_init()
284 connector->tile_blob_ptr = NULL; in drm_connector_init()
285 connector->status = connector_status_unknown; in drm_connector_init()
286 connector->display_info.panel_orientation = in drm_connector_init()
289 drm_connector_get_cmdline_mode(connector); in drm_connector_init()
295 list_add_tail(&connector->head, &config->connector_list); in drm_connector_init()
301 drm_connector_attach_edid_property(connector); in drm_connector_init()
303 drm_object_attach_property(&connector->base, in drm_connector_init()
306 drm_object_attach_property(&connector->base, in drm_connector_init()
310 drm_object_attach_property(&connector->base, in drm_connector_init()
313 drm_object_attach_property(&connector->base, in drm_connector_init()
318 drm_object_attach_property(&connector->base, config->prop_crtc_id, 0); in drm_connector_init()
321 connector->debugfs_entry = NULL; in drm_connector_init()
324 ida_simple_remove(connector_ida, connector->connector_type_id); in drm_connector_init()
327 ida_simple_remove(&config->connector_ida, connector->index); in drm_connector_init()
330 drm_mode_object_unregister(dev, &connector->base); in drm_connector_init()
353 struct drm_connector *connector, in drm_connector_init_with_ddc() argument
360 ret = drm_connector_init(dev, connector, funcs, connector_type); in drm_connector_init_with_ddc()
365 connector->ddc = ddc; in drm_connector_init_with_ddc()
379 void drm_connector_attach_edid_property(struct drm_connector *connector) in drm_connector_attach_edid_property() argument
381 struct drm_mode_config *config = &connector->dev->mode_config; in drm_connector_attach_edid_property()
383 drm_object_attach_property(&connector->base, in drm_connector_attach_edid_property()
401 int drm_connector_attach_encoder(struct drm_connector *connector, in drm_connector_attach_encoder() argument
415 if (WARN_ON(connector->encoder)) in drm_connector_attach_encoder()
418 connector->possible_encoders |= drm_encoder_mask(encoder); in drm_connector_attach_encoder()
433 bool drm_connector_has_possible_encoder(struct drm_connector *connector, in drm_connector_has_possible_encoder() argument
436 return connector->possible_encoders & drm_encoder_mask(encoder); in drm_connector_has_possible_encoder()
440 static void drm_mode_remove(struct drm_connector *connector, in drm_mode_remove() argument
444 drm_mode_destroy(connector->dev, mode); in drm_mode_remove()
453 void drm_connector_cleanup(struct drm_connector *connector) in drm_connector_cleanup() argument
455 struct drm_device *dev = connector->dev; in drm_connector_cleanup()
461 if (WARN_ON(connector->registration_state == in drm_connector_cleanup()
463 drm_connector_unregister(connector); in drm_connector_cleanup()
465 if (connector->tile_group) { in drm_connector_cleanup()
466 drm_mode_put_tile_group(dev, connector->tile_group); in drm_connector_cleanup()
467 connector->tile_group = NULL; in drm_connector_cleanup()
470 list_for_each_entry_safe(mode, t, &connector->probed_modes, head) in drm_connector_cleanup()
471 drm_mode_remove(connector, mode); in drm_connector_cleanup()
473 list_for_each_entry_safe(mode, t, &connector->modes, head) in drm_connector_cleanup()
474 drm_mode_remove(connector, mode); in drm_connector_cleanup()
476 ida_simple_remove(&drm_connector_enum_list[connector->connector_type].ida, in drm_connector_cleanup()
477 connector->connector_type_id); in drm_connector_cleanup()
480 connector->index); in drm_connector_cleanup()
482 kfree(connector->display_info.bus_formats); in drm_connector_cleanup()
483 drm_mode_object_unregister(dev, &connector->base); in drm_connector_cleanup()
484 kfree(connector->name); in drm_connector_cleanup()
485 connector->name = NULL; in drm_connector_cleanup()
486 fwnode_handle_put(connector->fwnode); in drm_connector_cleanup()
487 connector->fwnode = NULL; in drm_connector_cleanup()
489 list_del(&connector->head); in drm_connector_cleanup()
493 WARN_ON(connector->state && !connector->funcs->atomic_destroy_state); in drm_connector_cleanup()
494 if (connector->state && connector->funcs->atomic_destroy_state) in drm_connector_cleanup()
495 connector->funcs->atomic_destroy_state(connector, in drm_connector_cleanup()
496 connector->state); in drm_connector_cleanup()
498 mutex_destroy(&connector->mutex); in drm_connector_cleanup()
500 memset(connector, 0, sizeof(*connector)); in drm_connector_cleanup()
516 int drm_connector_register(struct drm_connector *connector) in drm_connector_register() argument
520 if (!connector->dev->registered) in drm_connector_register()
523 mutex_lock(&connector->mutex); in drm_connector_register()
524 if (connector->registration_state != DRM_CONNECTOR_INITIALIZING) in drm_connector_register()
527 ret = drm_sysfs_connector_add(connector); in drm_connector_register()
531 drm_debugfs_connector_add(connector); in drm_connector_register()
533 if (connector->funcs->late_register) { in drm_connector_register()
534 ret = connector->funcs->late_register(connector); in drm_connector_register()
539 drm_mode_object_register(connector->dev, &connector->base); in drm_connector_register()
541 connector->registration_state = DRM_CONNECTOR_REGISTERED; in drm_connector_register()
544 drm_sysfs_hotplug_event(connector->dev); in drm_connector_register()
547 list_add_tail(&connector->global_connector_list_entry, &connector_list); in drm_connector_register()
552 drm_debugfs_connector_remove(connector); in drm_connector_register()
553 drm_sysfs_connector_remove(connector); in drm_connector_register()
555 mutex_unlock(&connector->mutex); in drm_connector_register()
569 void drm_connector_unregister(struct drm_connector *connector) in drm_connector_unregister() argument
571 mutex_lock(&connector->mutex); in drm_connector_unregister()
572 if (connector->registration_state != DRM_CONNECTOR_REGISTERED) { in drm_connector_unregister()
573 mutex_unlock(&connector->mutex); in drm_connector_unregister()
578 list_del_init(&connector->global_connector_list_entry); in drm_connector_unregister()
581 if (connector->funcs->early_unregister) in drm_connector_unregister()
582 connector->funcs->early_unregister(connector); in drm_connector_unregister()
584 drm_sysfs_connector_remove(connector); in drm_connector_unregister()
585 drm_debugfs_connector_remove(connector); in drm_connector_unregister()
587 connector->registration_state = DRM_CONNECTOR_UNREGISTERED; in drm_connector_unregister()
588 mutex_unlock(&connector->mutex); in drm_connector_unregister()
594 struct drm_connector *connector; in drm_connector_unregister_all() local
598 drm_for_each_connector_iter(connector, &conn_iter) in drm_connector_unregister_all()
599 drm_connector_unregister(connector); in drm_connector_unregister_all()
605 struct drm_connector *connector; in drm_connector_register_all() local
610 drm_for_each_connector_iter(connector, &conn_iter) { in drm_connector_register_all()
611 ret = drm_connector_register(connector); in drm_connector_register_all()
1370 void drm_connector_attach_dp_subconnector_property(struct drm_connector *connector) in drm_connector_attach_dp_subconnector_property() argument
1372 struct drm_mode_config *mode_config = &connector->dev->mode_config; in drm_connector_attach_dp_subconnector_property()
1376 drm_property_create_enum(connector->dev, in drm_connector_attach_dp_subconnector_property()
1382 drm_object_attach_property(&connector->base, in drm_connector_attach_dp_subconnector_property()
1424 int drm_connector_attach_content_type_property(struct drm_connector *connector) in drm_connector_attach_content_type_property() argument
1426 if (!drm_mode_create_content_type_property(connector->dev)) in drm_connector_attach_content_type_property()
1427 drm_object_attach_property(&connector->base, in drm_connector_attach_content_type_property()
1428 connector->dev->mode_config.content_type_property, in drm_connector_attach_content_type_property()
1476 void drm_connector_attach_tv_margin_properties(struct drm_connector *connector) in drm_connector_attach_tv_margin_properties() argument
1478 struct drm_device *dev = connector->dev; in drm_connector_attach_tv_margin_properties()
1480 drm_object_attach_property(&connector->base, in drm_connector_attach_tv_margin_properties()
1483 drm_object_attach_property(&connector->base, in drm_connector_attach_tv_margin_properties()
1486 drm_object_attach_property(&connector->base, in drm_connector_attach_tv_margin_properties()
1489 drm_object_attach_property(&connector->base, in drm_connector_attach_tv_margin_properties()
1739 struct drm_connector *connector) in drm_connector_attach_vrr_capable_property() argument
1741 struct drm_device *dev = connector->dev; in drm_connector_attach_vrr_capable_property()
1744 if (!connector->vrr_capable_property) { in drm_connector_attach_vrr_capable_property()
1750 connector->vrr_capable_property = prop; in drm_connector_attach_vrr_capable_property()
1751 drm_object_attach_property(&connector->base, prop, 0); in drm_connector_attach_vrr_capable_property()
1772 int drm_connector_attach_scaling_mode_property(struct drm_connector *connector, in drm_connector_attach_scaling_mode_property() argument
1775 struct drm_device *dev = connector->dev; in drm_connector_attach_scaling_mode_property()
1809 drm_object_attach_property(&connector->base, in drm_connector_attach_scaling_mode_property()
1812 connector->scaling_mode_property = scaling_mode_property; in drm_connector_attach_scaling_mode_property()
1883 int drm_mode_create_hdmi_colorspace_property(struct drm_connector *connector) in drm_mode_create_hdmi_colorspace_property() argument
1885 struct drm_device *dev = connector->dev; in drm_mode_create_hdmi_colorspace_property()
1887 if (connector->colorspace_property) in drm_mode_create_hdmi_colorspace_property()
1890 connector->colorspace_property = in drm_mode_create_hdmi_colorspace_property()
1895 if (!connector->colorspace_property) in drm_mode_create_hdmi_colorspace_property()
1912 int drm_mode_create_dp_colorspace_property(struct drm_connector *connector) in drm_mode_create_dp_colorspace_property() argument
1914 struct drm_device *dev = connector->dev; in drm_mode_create_dp_colorspace_property()
1916 if (connector->colorspace_property) in drm_mode_create_dp_colorspace_property()
1919 connector->colorspace_property = in drm_mode_create_dp_colorspace_property()
1924 if (!connector->colorspace_property) in drm_mode_create_dp_colorspace_property()
1998 int drm_connector_set_path_property(struct drm_connector *connector, in drm_connector_set_path_property() argument
2001 struct drm_device *dev = connector->dev; in drm_connector_set_path_property()
2005 &connector->path_blob_ptr, in drm_connector_set_path_property()
2008 &connector->base, in drm_connector_set_path_property()
2027 int drm_connector_set_tile_property(struct drm_connector *connector) in drm_connector_set_tile_property() argument
2029 struct drm_device *dev = connector->dev; in drm_connector_set_tile_property()
2033 if (!connector->has_tile) { in drm_connector_set_tile_property()
2035 &connector->tile_blob_ptr, in drm_connector_set_tile_property()
2038 &connector->base, in drm_connector_set_tile_property()
2044 connector->tile_group->id, connector->tile_is_single_monitor, in drm_connector_set_tile_property()
2045 connector->num_h_tile, connector->num_v_tile, in drm_connector_set_tile_property()
2046 connector->tile_h_loc, connector->tile_v_loc, in drm_connector_set_tile_property()
2047 connector->tile_h_size, connector->tile_v_size); in drm_connector_set_tile_property()
2050 &connector->tile_blob_ptr, in drm_connector_set_tile_property()
2053 &connector->base, in drm_connector_set_tile_property()
2073 int drm_connector_update_edid_property(struct drm_connector *connector, in drm_connector_update_edid_property() argument
2076 struct drm_device *dev = connector->dev; in drm_connector_update_edid_property()
2082 if (connector->override_edid) in drm_connector_update_edid_property()
2097 drm_add_display_info(connector, edid); in drm_connector_update_edid_property()
2099 drm_reset_display_info(connector); in drm_connector_update_edid_property()
2101 drm_update_tile_info(connector, edid); in drm_connector_update_edid_property()
2103 if (connector->edid_blob_ptr) { in drm_connector_update_edid_property()
2104 old_edid = (const struct edid *)connector->edid_blob_ptr->data; in drm_connector_update_edid_property()
2108 connector->base.id, connector->name); in drm_connector_update_edid_property()
2110 connector->epoch_counter += 1; in drm_connector_update_edid_property()
2112 connector->epoch_counter); in drm_connector_update_edid_property()
2117 drm_object_property_set_value(&connector->base, in drm_connector_update_edid_property()
2119 connector->display_info.non_desktop); in drm_connector_update_edid_property()
2122 &connector->edid_blob_ptr, in drm_connector_update_edid_property()
2125 &connector->base, in drm_connector_update_edid_property()
2129 return drm_connector_set_tile_property(connector); in drm_connector_update_edid_property()
2152 void drm_connector_set_link_status_property(struct drm_connector *connector, in drm_connector_set_link_status_property() argument
2155 struct drm_device *dev = connector->dev; in drm_connector_set_link_status_property()
2158 connector->state->link_status = link_status; in drm_connector_set_link_status_property()
2174 int drm_connector_attach_max_bpc_property(struct drm_connector *connector, in drm_connector_attach_max_bpc_property() argument
2177 struct drm_device *dev = connector->dev; in drm_connector_attach_max_bpc_property()
2180 prop = connector->max_bpc_property; in drm_connector_attach_max_bpc_property()
2186 connector->max_bpc_property = prop; in drm_connector_attach_max_bpc_property()
2189 drm_object_attach_property(&connector->base, prop, max); in drm_connector_attach_max_bpc_property()
2190 connector->state->max_requested_bpc = max; in drm_connector_attach_max_bpc_property()
2191 connector->state->max_bpc = max; in drm_connector_attach_max_bpc_property()
2207 int drm_connector_attach_hdr_output_metadata_property(struct drm_connector *connector) in drm_connector_attach_hdr_output_metadata_property() argument
2209 struct drm_device *dev = connector->dev; in drm_connector_attach_hdr_output_metadata_property()
2212 drm_object_attach_property(&connector->base, prop, 0); in drm_connector_attach_hdr_output_metadata_property()
2228 int drm_connector_attach_colorspace_property(struct drm_connector *connector) in drm_connector_attach_colorspace_property() argument
2230 struct drm_property *prop = connector->colorspace_property; in drm_connector_attach_colorspace_property()
2232 drm_object_attach_property(&connector->base, prop, DRM_MODE_COLORIMETRY_DEFAULT); in drm_connector_attach_colorspace_property()
2276 struct drm_connector *connector, bool capable) in drm_connector_set_vrr_capable_property() argument
2278 drm_object_property_set_value(&connector->base, in drm_connector_set_vrr_capable_property()
2279 connector->vrr_capable_property, in drm_connector_set_vrr_capable_property()
2303 struct drm_connector *connector, in drm_connector_set_panel_orientation() argument
2306 struct drm_device *dev = connector->dev; in drm_connector_set_panel_orientation()
2307 struct drm_display_info *info = &connector->display_info; in drm_connector_set_panel_orientation()
2332 drm_object_attach_property(&connector->base, prop, in drm_connector_set_panel_orientation()
2353 struct drm_connector *connector, in drm_connector_set_panel_orientation_with_quirk() argument
2363 return drm_connector_set_panel_orientation(connector, in drm_connector_set_panel_orientation_with_quirk()
2373 struct drm_connector *connector = obj_to_connector(obj); in drm_connector_set_obj_prop() local
2376 if (property == connector->dev->mode_config.dpms_property) { in drm_connector_set_obj_prop()
2377 ret = (*connector->funcs->dpms)(connector, (int)value); in drm_connector_set_obj_prop()
2378 } else if (connector->funcs->set_property) in drm_connector_set_obj_prop()
2379 ret = connector->funcs->set_property(connector, property, value); in drm_connector_set_obj_prop()
2382 drm_object_property_set_value(&connector->base, property, value); in drm_connector_set_obj_prop()
2401 static struct drm_encoder *drm_connector_get_encoder(struct drm_connector *connector) in drm_connector_get_encoder() argument
2406 if (connector->state) in drm_connector_get_encoder()
2407 return connector->state->best_encoder; in drm_connector_get_encoder()
2408 return connector->encoder; in drm_connector_get_encoder()
2449 struct drm_connector *connector; in drm_mode_getconnector() local
2466 connector = drm_connector_lookup(dev, file_priv, out_resp->connector_id); in drm_mode_getconnector()
2467 if (!connector) in drm_mode_getconnector()
2470 encoders_count = hweight32(connector->possible_encoders); in drm_mode_getconnector()
2476 drm_connector_for_each_possible_encoder(connector, encoder) { in drm_mode_getconnector()
2486 out_resp->connector_id = connector->base.id; in drm_mode_getconnector()
2487 out_resp->connector_type = connector->connector_type; in drm_mode_getconnector()
2488 out_resp->connector_type_id = connector->connector_type_id; in drm_mode_getconnector()
2495 connector->funcs->fill_modes(connector, in drm_mode_getconnector()
2500 connector->base.id, connector->name); in drm_mode_getconnector()
2503 out_resp->mm_width = connector->display_info.width_mm; in drm_mode_getconnector()
2504 out_resp->mm_height = connector->display_info.height_mm; in drm_mode_getconnector()
2505 out_resp->subpixel = connector->display_info.subpixel_order; in drm_mode_getconnector()
2506 out_resp->connection = connector->status; in drm_mode_getconnector()
2509 list_for_each_entry(mode, &connector->modes, head) { in drm_mode_getconnector()
2512 if (drm_mode_expose_to_userspace(mode, &connector->modes, in drm_mode_getconnector()
2526 list_for_each_entry(mode, &connector->modes, head) { in drm_mode_getconnector()
2548 list_for_each_entry_continue(mode, &connector->modes, head) in drm_mode_getconnector()
2559 list_for_each_entry(mode, &connector->modes, head) in drm_mode_getconnector()
2567 encoder = drm_connector_get_encoder(connector); in drm_mode_getconnector()
2576 ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic, in drm_mode_getconnector()
2583 drm_connector_put(connector); in drm_mode_getconnector()
2601 struct drm_connector *connector, *found = ERR_PTR(-ENODEV); in drm_connector_find_by_fwnode() local
2608 list_for_each_entry(connector, &connector_list, global_connector_list_entry) { in drm_connector_find_by_fwnode()
2609 if (connector->fwnode == fwnode || in drm_connector_find_by_fwnode()
2610 (connector->fwnode && connector->fwnode->secondary == fwnode)) { in drm_connector_find_by_fwnode()
2611 drm_connector_get(connector); in drm_connector_find_by_fwnode()
2612 found = connector; in drm_connector_find_by_fwnode()
2636 struct drm_connector *connector; in drm_connector_oob_hotplug_event() local
2638 connector = drm_connector_find_by_fwnode(connector_fwnode); in drm_connector_oob_hotplug_event()
2639 if (IS_ERR(connector)) in drm_connector_oob_hotplug_event()
2642 if (connector->funcs->oob_hotplug_event) in drm_connector_oob_hotplug_event()
2643 connector->funcs->oob_hotplug_event(connector); in drm_connector_oob_hotplug_event()
2645 drm_connector_put(connector); in drm_connector_oob_hotplug_event()