Lines Matching full:connector

56  * objects and initialized by setting the following fields. The connector is
58 * &struct drm_connector_funcs and a connector type, and then exposed to
62 * connectors to encoders 1:1, the connector should be attached at
75 * Global connector list for drm_connector_find_by_fwnode().
76 * Note drm_connector_[un]register() first take connector->lock and then
89 * Connector and encoder types.
132 * drm_get_connector_type_name - return a string for connector type
133 * @type: The connector type (DRM_MODE_CONNECTOR_*)
135 * Returns: the name of the connector type, or NULL if the type is not valid.
148 * @connector: connector to query
150 * The kernel supports per-connector configuration of its consoles through
153 * particular connector. This is typically only used during the early fbdev
156 static void drm_connector_get_cmdline_mode(struct drm_connector *connector) in drm_connector_get_cmdline_mode() argument
158 struct drm_cmdline_mode *mode = &connector->cmdline_mode; in drm_connector_get_cmdline_mode()
161 option = video_get_options(connector->name); in drm_connector_get_cmdline_mode()
166 connector, in drm_connector_get_cmdline_mode()
171 DRM_INFO("forcing %s connector %s\n", connector->name, in drm_connector_get_cmdline_mode()
173 connector->force = mode->force; in drm_connector_get_cmdline_mode()
177 DRM_INFO("cmdline forces connector %s panel_orientation to %d\n", in drm_connector_get_cmdline_mode()
178 connector->name, mode->panel_orientation); in drm_connector_get_cmdline_mode()
179 drm_connector_set_panel_orientation(connector, in drm_connector_get_cmdline_mode()
183 DRM_DEBUG_KMS("cmdline mode for connector %s %s %dx%d@%dHz%s%s%s\n", in drm_connector_get_cmdline_mode()
184 connector->name, mode->name, in drm_connector_get_cmdline_mode()
194 struct drm_connector *connector = in drm_connector_free() local
196 struct drm_device *dev = connector->dev; in drm_connector_free()
198 drm_mode_object_unregister(dev, &connector->base); in drm_connector_free()
199 connector->funcs->destroy(connector); in drm_connector_free()
204 struct drm_connector *connector, *n; in drm_connector_free_work_fn() local
215 llist_for_each_entry_safe(connector, n, freed, free_node) { in drm_connector_free_work_fn()
216 drm_mode_object_unregister(dev, &connector->base); in drm_connector_free_work_fn()
217 connector->funcs->destroy(connector); in drm_connector_free_work_fn()
222 struct drm_connector *connector, in __drm_connector_init() argument
236 ret = __drm_mode_object_add(dev, &connector->base, in __drm_connector_init()
242 connector->base.properties = &connector->properties; in __drm_connector_init()
243 connector->dev = dev; in __drm_connector_init()
244 connector->funcs = funcs; in __drm_connector_init()
246 /* connector index is used with 32bit bitmasks */ in __drm_connector_init()
249 DRM_DEBUG_KMS("Failed to allocate %s connector index: %d\n", in __drm_connector_init()
254 connector->index = ret; in __drm_connector_init()
257 connector->connector_type = connector_type; in __drm_connector_init()
258 connector->connector_type_id = in __drm_connector_init()
260 if (connector->connector_type_id < 0) { in __drm_connector_init()
261 ret = connector->connector_type_id; in __drm_connector_init()
264 connector->name = in __drm_connector_init()
267 connector->connector_type_id); in __drm_connector_init()
268 if (!connector->name) { in __drm_connector_init()
274 connector->ddc = ddc; in __drm_connector_init()
276 INIT_LIST_HEAD(&connector->global_connector_list_entry); in __drm_connector_init()
277 INIT_LIST_HEAD(&connector->probed_modes); in __drm_connector_init()
278 INIT_LIST_HEAD(&connector->modes); in __drm_connector_init()
279 mutex_init(&connector->mutex); in __drm_connector_init()
280 mutex_init(&connector->eld_mutex); in __drm_connector_init()
281 mutex_init(&connector->edid_override_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()
291 /* We should add connectors at the end to avoid upsetting the 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_free(connector_ida, connector->connector_type_id); in __drm_connector_init()
327 ida_free(&config->connector_ida, connector->index); in __drm_connector_init()
330 drm_mode_object_unregister(dev, &connector->base); in __drm_connector_init()
336 * drm_connector_init - Init a preallocated connector
338 * @connector: the connector to init
339 * @funcs: callbacks for this connector
340 * @connector_type: user visible type of the connector
342 * Initialises a preallocated connector. Connectors should be
343 * subclassed as part of driver connector objects.
346 * should call drm_connector_cleanup() and free the connector structure.
347 * The connector structure should not be allocated with devm_kzalloc().
357 struct drm_connector *connector, in drm_connector_init() argument
364 return __drm_connector_init(dev, connector, funcs, connector_type, NULL); in drm_connector_init()
369 * drm_connector_init_with_ddc - Init a preallocated connector
371 * @connector: the connector to init
372 * @funcs: callbacks for this connector
373 * @connector_type: user visible type of the connector
376 * Initialises a preallocated connector. Connectors should be
377 * subclassed as part of driver connector objects.
380 * should call drm_connector_cleanup() and free the connector structure.
381 * The connector structure should not be allocated with devm_kzalloc().
383 * Ensures that the ddc field of the connector is correctly set.
393 struct drm_connector *connector, in drm_connector_init_with_ddc() argument
401 return __drm_connector_init(dev, connector, funcs, connector_type, ddc); in drm_connector_init_with_ddc()
408 struct drm_connector *connector = ptr; in drm_connector_cleanup_action() local
410 drm_connector_cleanup(connector); in drm_connector_cleanup_action()
414 * drmm_connector_init - Init a preallocated connector
416 * @connector: the connector to init
417 * @funcs: callbacks for this connector
418 * @connector_type: user visible type of the connector
421 * Initialises a preallocated connector. Connectors should be
422 * subclassed as part of driver connector objects.
427 * The connector structure should be allocated with drmm_kzalloc().
433 struct drm_connector *connector, in drmm_connector_init() argument
443 ret = __drm_connector_init(dev, connector, funcs, connector_type, ddc); in drmm_connector_init()
448 connector); in drmm_connector_init()
458 * @connector: the connector
460 * Some connector types like DRM_MODE_CONNECTOR_VIRTUAL do not get a
464 void drm_connector_attach_edid_property(struct drm_connector *connector) in drm_connector_attach_edid_property() argument
466 struct drm_mode_config *config = &connector->dev->mode_config; in drm_connector_attach_edid_property()
468 drm_object_attach_property(&connector->base, in drm_connector_attach_edid_property()
475 * drm_connector_attach_encoder - attach a connector to an encoder
476 * @connector: connector to attach
477 * @encoder: encoder to attach @connector to
479 * This function links up a connector to an encoder. Note that the routing
486 int drm_connector_attach_encoder(struct drm_connector *connector, in drm_connector_attach_encoder() argument
491 * of connector to encoder in simple connector/encoder devices using a in drm_connector_attach_encoder()
492 * direct assignment of connector->encoder = encoder. This connection in drm_connector_attach_encoder()
500 if (WARN_ON(connector->encoder)) in drm_connector_attach_encoder()
503 connector->possible_encoders |= drm_encoder_mask(encoder); in drm_connector_attach_encoder()
510 * drm_connector_has_possible_encoder - check if the connector and encoder are
512 * @connector: the connector
516 * True if @encoder is one of the possible encoders for @connector.
518 bool drm_connector_has_possible_encoder(struct drm_connector *connector, in drm_connector_has_possible_encoder() argument
521 return connector->possible_encoders & drm_encoder_mask(encoder); in drm_connector_has_possible_encoder()
525 static void drm_mode_remove(struct drm_connector *connector, in drm_mode_remove() argument
529 drm_mode_destroy(connector->dev, mode); in drm_mode_remove()
533 * drm_connector_cleanup - cleans up an initialised connector
534 * @connector: connector to cleanup
536 * Cleans up the connector but doesn't free the object.
538 void drm_connector_cleanup(struct drm_connector *connector) in drm_connector_cleanup() argument
540 struct drm_device *dev = connector->dev; in drm_connector_cleanup()
543 /* The connector should have been removed from userspace long before in drm_connector_cleanup()
546 if (WARN_ON(connector->registration_state == in drm_connector_cleanup()
548 drm_connector_unregister(connector); in drm_connector_cleanup()
550 if (connector->privacy_screen) { in drm_connector_cleanup()
551 drm_privacy_screen_put(connector->privacy_screen); in drm_connector_cleanup()
552 connector->privacy_screen = NULL; in drm_connector_cleanup()
555 if (connector->tile_group) { in drm_connector_cleanup()
556 drm_mode_put_tile_group(dev, connector->tile_group); in drm_connector_cleanup()
557 connector->tile_group = NULL; in drm_connector_cleanup()
560 list_for_each_entry_safe(mode, t, &connector->probed_modes, head) in drm_connector_cleanup()
561 drm_mode_remove(connector, mode); in drm_connector_cleanup()
563 list_for_each_entry_safe(mode, t, &connector->modes, head) in drm_connector_cleanup()
564 drm_mode_remove(connector, mode); in drm_connector_cleanup()
566 ida_free(&drm_connector_enum_list[connector->connector_type].ida, in drm_connector_cleanup()
567 connector->connector_type_id); in drm_connector_cleanup()
569 ida_free(&dev->mode_config.connector_ida, connector->index); in drm_connector_cleanup()
571 kfree(connector->display_info.bus_formats); in drm_connector_cleanup()
572 kfree(connector->display_info.vics); in drm_connector_cleanup()
573 drm_mode_object_unregister(dev, &connector->base); in drm_connector_cleanup()
574 kfree(connector->name); in drm_connector_cleanup()
575 connector->name = NULL; in drm_connector_cleanup()
576 fwnode_handle_put(connector->fwnode); in drm_connector_cleanup()
577 connector->fwnode = NULL; in drm_connector_cleanup()
579 list_del(&connector->head); in drm_connector_cleanup()
583 WARN_ON(connector->state && !connector->funcs->atomic_destroy_state); in drm_connector_cleanup()
584 if (connector->state && connector->funcs->atomic_destroy_state) in drm_connector_cleanup()
585 connector->funcs->atomic_destroy_state(connector, in drm_connector_cleanup()
586 connector->state); in drm_connector_cleanup()
588 mutex_destroy(&connector->mutex); in drm_connector_cleanup()
590 memset(connector, 0, sizeof(*connector)); in drm_connector_cleanup()
598 * drm_connector_register - register a connector
599 * @connector: the connector to register
601 * Register userspace interfaces for a connector. Only call this for connectors
606 * When the connector is no longer available, callers must call
612 int drm_connector_register(struct drm_connector *connector) in drm_connector_register() argument
616 if (!connector->dev->registered) in drm_connector_register()
619 mutex_lock(&connector->mutex); in drm_connector_register()
620 if (connector->registration_state != DRM_CONNECTOR_INITIALIZING) in drm_connector_register()
623 ret = drm_sysfs_connector_add(connector); in drm_connector_register()
627 drm_debugfs_connector_add(connector); in drm_connector_register()
629 if (connector->funcs->late_register) { in drm_connector_register()
630 ret = connector->funcs->late_register(connector); in drm_connector_register()
635 drm_mode_object_register(connector->dev, &connector->base); in drm_connector_register()
637 connector->registration_state = DRM_CONNECTOR_REGISTERED; in drm_connector_register()
639 /* Let userspace know we have a new connector */ in drm_connector_register()
640 drm_sysfs_connector_hotplug_event(connector); in drm_connector_register()
642 if (connector->privacy_screen) in drm_connector_register()
643 drm_privacy_screen_register_notifier(connector->privacy_screen, in drm_connector_register()
644 &connector->privacy_screen_notifier); in drm_connector_register()
647 list_add_tail(&connector->global_connector_list_entry, &connector_list); in drm_connector_register()
652 drm_debugfs_connector_remove(connector); in drm_connector_register()
653 drm_sysfs_connector_remove(connector); in drm_connector_register()
655 mutex_unlock(&connector->mutex); in drm_connector_register()
661 * drm_connector_unregister - unregister a connector
662 * @connector: the connector to unregister
664 * Unregister userspace interfaces for a connector. Only call this for
668 void drm_connector_unregister(struct drm_connector *connector) in drm_connector_unregister() argument
670 mutex_lock(&connector->mutex); in drm_connector_unregister()
671 if (connector->registration_state != DRM_CONNECTOR_REGISTERED) { in drm_connector_unregister()
672 mutex_unlock(&connector->mutex); in drm_connector_unregister()
677 list_del_init(&connector->global_connector_list_entry); in drm_connector_unregister()
680 if (connector->privacy_screen) in drm_connector_unregister()
682 connector->privacy_screen, in drm_connector_unregister()
683 &connector->privacy_screen_notifier); in drm_connector_unregister()
685 if (connector->funcs->early_unregister) in drm_connector_unregister()
686 connector->funcs->early_unregister(connector); in drm_connector_unregister()
688 drm_sysfs_connector_remove(connector); in drm_connector_unregister()
689 drm_debugfs_connector_remove(connector); in drm_connector_unregister()
691 connector->registration_state = DRM_CONNECTOR_UNREGISTERED; in drm_connector_unregister()
692 mutex_unlock(&connector->mutex); in drm_connector_unregister()
698 struct drm_connector *connector; in drm_connector_unregister_all() local
702 drm_for_each_connector_iter(connector, &conn_iter) in drm_connector_unregister_all()
703 drm_connector_unregister(connector); in drm_connector_unregister_all()
709 struct drm_connector *connector; in drm_connector_register_all() local
714 drm_for_each_connector_iter(connector, &conn_iter) { in drm_connector_register_all()
715 ret = drm_connector_register(connector); in drm_connector_register_all()
727 * drm_get_connector_status_name - return a string for connector status
728 * @status: connector status to compute name of
733 * Returns: connector status string
747 * drm_get_connector_force_name - return a string for connector force
748 * @force: connector force to get name of
794 * Extra-safe connector put function that works in any context. Should only be
796 * actually release the connector when dropping our final reference.
813 * drm_connector_list_iter_next - return next connector
816 * Returns: the next connector for @iter, or NULL when the list walk has
839 /* loop until it's not a zombie connector */ in drm_connector_list_iter_next()
948 /* Optional connector properties. */
1140 * DOC: standard connector properties
1157 * Legacy property for setting the power state of the connector. For atomic
1160 * connector is linked to. Drivers should never set this property directly,
1181 * connector is connected to a CRTC. In atomic the DRM core enforces that
1188 * Summarizing: Only set "DPMS" when the connector is known to be enabled,
1192 * Connector path property to identify how this sink is physically
1198 * Connector tile group property to indicate how a set of DRM connector
1208 * Connector link-status property to indicate the status of link. The
1219 * "GOOD" to re-enable the connector.
1225 * When user-space performs an atomic commit on a connector with a "BAD"
1274 * - Kernel sends uevent with the connector id and property id through
1342 * Connector property to enable userspace to send HDR Metadata to
1387 * property to the connector during initialization.
1392 * Mode object ID of the &drm_crtc this connector should be connected to.
1433 * connector subtypes. Enum values more or less match with those from main
1434 * connector types.
1480 * Add margins to the connector's viewport. This is typically used to
1550 * drm_mode_create_dvi_i_properties - create DVI-I specific connector properties
1553 * Called by a driver the first time a DVI-I connector is made.
1584 * @connector: drm_connector to attach property
1586 * Called by a driver when DP connector is created.
1588 void drm_connector_attach_dp_subconnector_property(struct drm_connector *connector) in drm_connector_attach_dp_subconnector_property() argument
1590 struct drm_mode_config *mode_config = &connector->dev->mode_config; in drm_connector_attach_dp_subconnector_property()
1594 drm_property_create_enum(connector->dev, in drm_connector_attach_dp_subconnector_property()
1600 drm_object_attach_property(&connector->base, in drm_connector_attach_dp_subconnector_property()
1607 * DOC: HDMI connector properties
1646 * DOC: Analog TV Connector Properties
1649 * Indicates the TV Mode used on an analog TV connector. The value
1696 * @connector: connector to attach content type property on.
1698 * Called by a driver the first time a HDMI connector is made.
1702 int drm_connector_attach_content_type_property(struct drm_connector *connector) in drm_connector_attach_content_type_property() argument
1704 if (!drm_mode_create_content_type_property(connector->dev)) in drm_connector_attach_content_type_property()
1705 drm_object_attach_property(&connector->base, in drm_connector_attach_content_type_property()
1706 connector->dev->mode_config.content_type_property, in drm_connector_attach_content_type_property()
1713 * drm_connector_attach_tv_margin_properties - attach TV connector margin
1715 * @connector: DRM connector
1717 * Called by a driver when it needs to attach TV margin props to a connector.
1720 void drm_connector_attach_tv_margin_properties(struct drm_connector *connector) in drm_connector_attach_tv_margin_properties() argument
1722 struct drm_device *dev = connector->dev; in drm_connector_attach_tv_margin_properties()
1724 drm_object_attach_property(&connector->base, in drm_connector_attach_tv_margin_properties()
1727 drm_object_attach_property(&connector->base, in drm_connector_attach_tv_margin_properties()
1730 drm_object_attach_property(&connector->base, in drm_connector_attach_tv_margin_properties()
1733 drm_object_attach_property(&connector->base, in drm_connector_attach_tv_margin_properties()
1740 * drm_mode_create_tv_margin_properties - create TV connector margin properties
1743 * Called by a driver's HDMI connector initialization routine, this function
1745 * function for an SDTV connector, it's already called from
1781 * drm_mode_create_tv_properties_legacy - create TV specific connector properties
1787 * the TV specific connector properties for a given device. Caller is
1791 * NOTE: This functions registers the deprecated "mode" connector
1810 * Basic connector properties in drm_mode_create_tv_properties_legacy()
1885 * drm_mode_create_tv_properties - create TV specific connector properties
1890 * the TV specific connector properties for a given device.
2012 * from the minimum supported variable refresh rate for the connector.
2021 * @connector: connector to create the vrr_capable property on.
2024 * variable refresh rate capability for a connector.
2030 struct drm_connector *connector) in drm_connector_attach_vrr_capable_property() argument
2032 struct drm_device *dev = connector->dev; in drm_connector_attach_vrr_capable_property()
2035 if (!connector->vrr_capable_property) { in drm_connector_attach_vrr_capable_property()
2041 connector->vrr_capable_property = prop; in drm_connector_attach_vrr_capable_property()
2042 drm_object_attach_property(&connector->base, prop, 0); in drm_connector_attach_vrr_capable_property()
2051 * @connector: connector to attach scaling mode property on.
2063 int drm_connector_attach_scaling_mode_property(struct drm_connector *connector, in drm_connector_attach_scaling_mode_property() argument
2066 struct drm_device *dev = connector->dev; in drm_connector_attach_scaling_mode_property()
2100 drm_object_attach_property(&connector->base, in drm_connector_attach_scaling_mode_property()
2103 connector->scaling_mode_property = scaling_mode_property; in drm_connector_attach_scaling_mode_property()
2137 * DOC: standard connector properties
2160 * drm_mode_create_hdmi_colorspace_property() is used for HDMI connector and
2161 * drm_mode_create_dp_colorspace_property() is used for DP connector.
2164 static int drm_mode_create_colorspace_property(struct drm_connector *connector, in drm_mode_create_colorspace_property() argument
2167 struct drm_device *dev = connector->dev; in drm_mode_create_colorspace_property()
2172 if (connector->colorspace_property) in drm_mode_create_colorspace_property()
2176 drm_err(dev, "No supported colorspaces provded on [CONNECTOR:%d:%s]\n", in drm_mode_create_colorspace_property()
2177 connector->base.id, connector->name); in drm_mode_create_colorspace_property()
2182 drm_err(dev, "Unknown colorspace provded on [CONNECTOR:%d:%s]\n", in drm_mode_create_colorspace_property()
2183 connector->base.id, connector->name); in drm_mode_create_colorspace_property()
2197 connector->colorspace_property = in drm_mode_create_colorspace_property()
2202 if (!connector->colorspace_property) in drm_mode_create_colorspace_property()
2210 * @connector: connector to create the Colorspace property on.
2219 int drm_mode_create_hdmi_colorspace_property(struct drm_connector *connector, in drm_mode_create_hdmi_colorspace_property() argument
2229 return drm_mode_create_colorspace_property(connector, colorspaces); in drm_mode_create_hdmi_colorspace_property()
2235 * @connector: connector to create the Colorspace property on.
2244 int drm_mode_create_dp_colorspace_property(struct drm_connector *connector, in drm_mode_create_dp_colorspace_property() argument
2254 return drm_mode_create_colorspace_property(connector, colorspaces); in drm_mode_create_dp_colorspace_property()
2313 * drm_connector_set_path_property - set tile property on connector
2314 * @connector: connector to set property on.
2318 * connector path. This is mainly used for DisplayPort MST where
2325 int drm_connector_set_path_property(struct drm_connector *connector, in drm_connector_set_path_property() argument
2328 struct drm_device *dev = connector->dev; in drm_connector_set_path_property()
2332 &connector->path_blob_ptr, in drm_connector_set_path_property()
2335 &connector->base, in drm_connector_set_path_property()
2342 * drm_connector_set_tile_property - set tile property on connector
2343 * @connector: connector to set property on.
2345 * This looks up the tile information for a connector, and creates a
2354 int drm_connector_set_tile_property(struct drm_connector *connector) in drm_connector_set_tile_property() argument
2356 struct drm_device *dev = connector->dev; in drm_connector_set_tile_property()
2360 if (!connector->has_tile) { in drm_connector_set_tile_property()
2362 &connector->tile_blob_ptr, in drm_connector_set_tile_property()
2365 &connector->base, in drm_connector_set_tile_property()
2371 connector->tile_group->id, connector->tile_is_single_monitor, in drm_connector_set_tile_property()
2372 connector->num_h_tile, connector->num_v_tile, in drm_connector_set_tile_property()
2373 connector->tile_h_loc, connector->tile_v_loc, in drm_connector_set_tile_property()
2374 connector->tile_h_size, connector->tile_v_size); in drm_connector_set_tile_property()
2377 &connector->tile_blob_ptr, in drm_connector_set_tile_property()
2380 &connector->base, in drm_connector_set_tile_property()
2387 * drm_connector_set_link_status_property - Set link status property of a connector
2388 * @connector: drm connector
2405 void drm_connector_set_link_status_property(struct drm_connector *connector, in drm_connector_set_link_status_property() argument
2408 struct drm_device *dev = connector->dev; in drm_connector_set_link_status_property()
2411 connector->state->link_status = link_status; in drm_connector_set_link_status_property()
2418 * @connector: connector to attach max bpc property on.
2419 * @min: The minimum bit depth supported by the connector.
2420 * @max: The maximum bit depth supported by the connector.
2422 * This is used to add support for limiting the bit depth on a connector.
2427 int drm_connector_attach_max_bpc_property(struct drm_connector *connector, in drm_connector_attach_max_bpc_property() argument
2430 struct drm_device *dev = connector->dev; in drm_connector_attach_max_bpc_property()
2433 prop = connector->max_bpc_property; in drm_connector_attach_max_bpc_property()
2439 connector->max_bpc_property = prop; in drm_connector_attach_max_bpc_property()
2442 drm_object_attach_property(&connector->base, prop, max); in drm_connector_attach_max_bpc_property()
2443 connector->state->max_requested_bpc = max; in drm_connector_attach_max_bpc_property()
2444 connector->state->max_bpc = max; in drm_connector_attach_max_bpc_property()
2452 * @connector: connector to attach the property on.
2460 int drm_connector_attach_hdr_output_metadata_property(struct drm_connector *connector) in drm_connector_attach_hdr_output_metadata_property() argument
2462 struct drm_device *dev = connector->dev; in drm_connector_attach_hdr_output_metadata_property()
2465 drm_object_attach_property(&connector->base, prop, 0); in drm_connector_attach_hdr_output_metadata_property()
2473 * @connector: connector to attach the property on.
2481 int drm_connector_attach_colorspace_property(struct drm_connector *connector) in drm_connector_attach_colorspace_property() argument
2483 struct drm_property *prop = connector->colorspace_property; in drm_connector_attach_colorspace_property()
2485 drm_object_attach_property(&connector->base, prop, DRM_MODE_COLORIMETRY_DEFAULT); in drm_connector_attach_colorspace_property()
2493 * @old_state: old connector state to compare
2494 * @new_state: new connector state to compare
2497 * have changed between two different connector state (and thus probably
2521 * capable property for a connector
2522 * @connector: drm connector
2523 * @capable: True if the connector is variable refresh rate capable
2526 * variable refresh rate over a connector.
2529 struct drm_connector *connector, bool capable) in drm_connector_set_vrr_capable_property() argument
2531 if (!connector->vrr_capable_property) in drm_connector_set_vrr_capable_property()
2534 drm_object_property_set_value(&connector->base, in drm_connector_set_vrr_capable_property()
2535 connector->vrr_capable_property, in drm_connector_set_vrr_capable_property()
2541 * drm_connector_set_panel_orientation - sets the connector's panel_orientation
2542 * @connector: connector for which to set the panel-orientation property.
2545 * This function sets the connector's panel_orientation and attaches
2546 * a "panel orientation" property to the connector.
2548 * Calling this function on a connector where the panel_orientation has
2562 struct drm_connector *connector, in drm_connector_set_panel_orientation() argument
2565 struct drm_device *dev = connector->dev; in drm_connector_set_panel_orientation()
2566 struct drm_display_info *info = &connector->display_info; in drm_connector_set_panel_orientation()
2591 drm_object_attach_property(&connector->base, prop, in drm_connector_set_panel_orientation()
2599 * connector's panel_orientation after checking for quirks
2600 * @connector: connector for which to init the panel-orientation property.
2612 struct drm_connector *connector, in drm_connector_set_panel_orientation_with_quirk() argument
2622 return drm_connector_set_panel_orientation(connector, in drm_connector_set_panel_orientation_with_quirk()
2629 * set the connector's panel_orientation from panel's callback.
2630 * @connector: connector for which to init the panel-orientation property.
2640 struct drm_connector *connector, in drm_connector_set_orientation_from_panel() argument
2650 return drm_connector_set_panel_orientation(connector, orientation); in drm_connector_set_orientation_from_panel()
2664 * @connector: connector for which to create the privacy-screen properties
2667 * hw-state" properties for the connector. They are not attached.
2670 drm_connector_create_privacy_screen_properties(struct drm_connector *connector) in drm_connector_create_privacy_screen_properties() argument
2672 if (connector->privacy_screen_sw_state_property) in drm_connector_create_privacy_screen_properties()
2676 connector->privacy_screen_sw_state_property = in drm_connector_create_privacy_screen_properties()
2677 drm_property_create_enum(connector->dev, DRM_MODE_PROP_ENUM, in drm_connector_create_privacy_screen_properties()
2681 connector->privacy_screen_hw_state_property = in drm_connector_create_privacy_screen_properties()
2682 drm_property_create_enum(connector->dev, in drm_connector_create_privacy_screen_properties()
2693 * @connector: connector on which to attach the privacy-screen properties
2696 * hw-state" properties to the connector. The initial state of both is set
2700 drm_connector_attach_privacy_screen_properties(struct drm_connector *connector) in drm_connector_attach_privacy_screen_properties() argument
2702 if (!connector->privacy_screen_sw_state_property) in drm_connector_attach_privacy_screen_properties()
2705 drm_object_attach_property(&connector->base, in drm_connector_attach_privacy_screen_properties()
2706 connector->privacy_screen_sw_state_property, in drm_connector_attach_privacy_screen_properties()
2709 drm_object_attach_property(&connector->base, in drm_connector_attach_privacy_screen_properties()
2710 connector->privacy_screen_hw_state_property, in drm_connector_attach_privacy_screen_properties()
2716 struct drm_connector *connector, bool set_sw_state) in drm_connector_update_privacy_screen_properties() argument
2720 drm_privacy_screen_get_state(connector->privacy_screen, in drm_connector_update_privacy_screen_properties()
2724 connector->state->privacy_screen_sw_state = sw_state; in drm_connector_update_privacy_screen_properties()
2725 drm_object_property_set_value(&connector->base, in drm_connector_update_privacy_screen_properties()
2726 connector->privacy_screen_hw_state_property, hw_state); in drm_connector_update_privacy_screen_properties()
2732 struct drm_connector *connector = in drm_connector_privacy_screen_notifier() local
2734 struct drm_device *dev = connector->dev; in drm_connector_privacy_screen_notifier()
2737 drm_connector_update_privacy_screen_properties(connector, true); in drm_connector_privacy_screen_notifier()
2740 drm_sysfs_connector_property_event(connector, in drm_connector_privacy_screen_notifier()
2741 connector->privacy_screen_sw_state_property); in drm_connector_privacy_screen_notifier()
2742 drm_sysfs_connector_property_event(connector, in drm_connector_privacy_screen_notifier()
2743 connector->privacy_screen_hw_state_property); in drm_connector_privacy_screen_notifier()
2750 * the connector
2751 * @connector: connector to attach the privacy-screen to
2755 * a generic notifier for generating sysfs-connector-status-events
2758 * call drm_privacy_screen_put() on it when the connector is destroyed.
2761 struct drm_connector *connector, struct drm_privacy_screen *priv) in drm_connector_attach_privacy_screen_provider() argument
2763 connector->privacy_screen = priv; in drm_connector_attach_privacy_screen_provider()
2764 connector->privacy_screen_notifier.notifier_call = in drm_connector_attach_privacy_screen_provider()
2767 drm_connector_create_privacy_screen_properties(connector); in drm_connector_attach_privacy_screen_provider()
2768 drm_connector_update_privacy_screen_properties(connector, true); in drm_connector_attach_privacy_screen_provider()
2769 drm_connector_attach_privacy_screen_properties(connector); in drm_connector_attach_privacy_screen_provider()
2774 * drm_connector_update_privacy_screen - update connector's privacy-screen sw-state
2775 * @connector_state: connector-state to update the privacy-screen for
2777 * This function calls drm_privacy_screen_set_sw_state() on the connector's
2780 * If the connector has no privacy-screen, then this is a no-op.
2784 struct drm_connector *connector = connector_state->connector; in drm_connector_update_privacy_screen() local
2787 if (!connector->privacy_screen) in drm_connector_update_privacy_screen()
2790 ret = drm_privacy_screen_set_sw_state(connector->privacy_screen, in drm_connector_update_privacy_screen()
2793 drm_err(connector->dev, "Error updating privacy-screen sw_state\n"); in drm_connector_update_privacy_screen()
2798 drm_connector_update_privacy_screen_properties(connector, false); in drm_connector_update_privacy_screen()
2807 struct drm_connector *connector = obj_to_connector(obj); in drm_connector_set_obj_prop() local
2810 if (property == connector->dev->mode_config.dpms_property) { in drm_connector_set_obj_prop()
2811 ret = (*connector->funcs->dpms)(connector, (int)value); in drm_connector_set_obj_prop()
2812 } else if (connector->funcs->set_property) in drm_connector_set_obj_prop()
2813 ret = connector->funcs->set_property(connector, property, value); in drm_connector_set_obj_prop()
2816 drm_object_property_set_value(&connector->base, property, value); in drm_connector_set_obj_prop()
2835 static struct drm_encoder *drm_connector_get_encoder(struct drm_connector *connector) in drm_connector_get_encoder() argument
2840 if (connector->state) in drm_connector_get_encoder()
2841 return connector->state->best_encoder; in drm_connector_get_encoder()
2842 return connector->encoder; in drm_connector_get_encoder()
2883 struct drm_connector *connector; in drm_mode_getconnector() local
2900 connector = drm_connector_lookup(dev, file_priv, out_resp->connector_id); in drm_mode_getconnector()
2901 if (!connector) in drm_mode_getconnector()
2904 encoders_count = hweight32(connector->possible_encoders); in drm_mode_getconnector()
2910 drm_connector_for_each_possible_encoder(connector, encoder) { in drm_mode_getconnector()
2920 out_resp->connector_id = connector->base.id; in drm_mode_getconnector()
2921 out_resp->connector_type = connector->connector_type; in drm_mode_getconnector()
2922 out_resp->connector_type_id = connector->connector_type_id; in drm_mode_getconnector()
2929 connector->funcs->fill_modes(connector, in drm_mode_getconnector()
2933 …drm_dbg_kms(dev, "User-space requested a forced probe on [CONNECTOR:%d:%s] but is not the DRM mast… in drm_mode_getconnector()
2934 connector->base.id, connector->name); in drm_mode_getconnector()
2937 out_resp->mm_width = connector->display_info.width_mm; in drm_mode_getconnector()
2938 out_resp->mm_height = connector->display_info.height_mm; in drm_mode_getconnector()
2939 out_resp->subpixel = connector->display_info.subpixel_order; in drm_mode_getconnector()
2940 out_resp->connection = connector->status; in drm_mode_getconnector()
2943 list_for_each_entry(mode, &connector->modes, head) { in drm_mode_getconnector()
2946 if (drm_mode_expose_to_userspace(mode, &connector->modes, in drm_mode_getconnector()
2960 list_for_each_entry(mode, &connector->modes, head) { in drm_mode_getconnector()
2982 list_for_each_entry_continue(mode, &connector->modes, head) in drm_mode_getconnector()
2993 list_for_each_entry(mode, &connector->modes, head) in drm_mode_getconnector()
3001 encoder = drm_connector_get_encoder(connector); in drm_mode_getconnector()
3010 ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic, in drm_mode_getconnector()
3017 drm_connector_put(connector); in drm_mode_getconnector()
3023 * drm_connector_find_by_fwnode - Find a connector based on the associated fwnode
3027 * a connector is found a reference to the connector is returned. The caller must
3029 * connector.
3031 * Returns: A reference to the found connector or an ERR_PTR().
3035 struct drm_connector *connector, *found = ERR_PTR(-ENODEV); in drm_connector_find_by_fwnode() local
3042 list_for_each_entry(connector, &connector_list, global_connector_list_entry) { in drm_connector_find_by_fwnode()
3043 if (connector->fwnode == fwnode || in drm_connector_find_by_fwnode()
3044 (connector->fwnode && connector->fwnode->secondary == fwnode)) { in drm_connector_find_by_fwnode()
3045 drm_connector_get(connector); in drm_connector_find_by_fwnode()
3046 found = connector; in drm_connector_find_by_fwnode()
3057 * drm_connector_oob_hotplug_event - Report out-of-band hotplug event to connector
3070 struct drm_connector *connector; in drm_connector_oob_hotplug_event() local
3072 connector = drm_connector_find_by_fwnode(connector_fwnode); in drm_connector_oob_hotplug_event()
3073 if (IS_ERR(connector)) in drm_connector_oob_hotplug_event()
3076 if (connector->funcs->oob_hotplug_event) in drm_connector_oob_hotplug_event()
3077 connector->funcs->oob_hotplug_event(connector); in drm_connector_oob_hotplug_event()
3079 drm_connector_put(connector); in drm_connector_oob_hotplug_event()