Lines Matching full:connector
49 * objects and initialized by setting the following fields. The connector is
51 * &struct drm_connector_funcs and a connector type, and then exposed to
55 * connectors to encoders 1:1, the connector should be attached at
68 * Global connector list for drm_connector_find_by_fwnode().
69 * Note drm_connector_[un]register() first take connector->lock and then
82 * Connector and encoder types.
124 * drm_get_connector_type_name - return a string for connector type
125 * @type: The connector type (DRM_MODE_CONNECTOR_*)
127 * Returns: the name of the connector type, or NULL if the type is not valid.
140 * @connector: connector to query
142 * The kernel supports per-connector configuration of its consoles through
145 * particular connector. This is typically only used during the early fbdev
148 static void drm_connector_get_cmdline_mode(struct drm_connector *connector) in drm_connector_get_cmdline_mode() argument
150 struct drm_cmdline_mode *mode = &connector->cmdline_mode; in drm_connector_get_cmdline_mode()
153 if (fb_get_options(connector->name, &option)) in drm_connector_get_cmdline_mode()
157 connector, in drm_connector_get_cmdline_mode()
162 DRM_INFO("forcing %s connector %s\n", connector->name, in drm_connector_get_cmdline_mode()
164 connector->force = mode->force; in drm_connector_get_cmdline_mode()
168 DRM_INFO("cmdline forces connector %s panel_orientation to %d\n", in drm_connector_get_cmdline_mode()
169 connector->name, mode->panel_orientation); in drm_connector_get_cmdline_mode()
170 drm_connector_set_panel_orientation(connector, in drm_connector_get_cmdline_mode()
174 DRM_DEBUG_KMS("cmdline mode for connector %s %s %dx%d@%dHz%s%s%s\n", in drm_connector_get_cmdline_mode()
175 connector->name, mode->name, in drm_connector_get_cmdline_mode()
185 struct drm_connector *connector = in drm_connector_free() local
187 struct drm_device *dev = connector->dev; in drm_connector_free()
189 drm_mode_object_unregister(dev, &connector->base); in drm_connector_free()
190 connector->funcs->destroy(connector); in drm_connector_free()
195 struct drm_connector *connector, *n; in drm_connector_free_work_fn() local
206 llist_for_each_entry_safe(connector, n, freed, free_node) { in drm_connector_free_work_fn()
207 drm_mode_object_unregister(dev, &connector->base); in drm_connector_free_work_fn()
208 connector->funcs->destroy(connector); in drm_connector_free_work_fn()
213 * drm_connector_init - Init a preallocated connector
215 * @connector: the connector to init
216 * @funcs: callbacks for this connector
217 * @connector_type: user visible type of the connector
219 * Initialises a preallocated connector. Connectors should be
220 * subclassed as part of driver connector objects.
226 struct drm_connector *connector, in drm_connector_init() argument
239 ret = __drm_mode_object_add(dev, &connector->base, in drm_connector_init()
245 connector->base.properties = &connector->properties; in drm_connector_init()
246 connector->dev = dev; in drm_connector_init()
247 connector->funcs = funcs; in drm_connector_init()
249 /* connector index is used with 32bit bitmasks */ in drm_connector_init()
252 DRM_DEBUG_KMS("Failed to allocate %s connector index: %d\n", in drm_connector_init()
257 connector->index = ret; in drm_connector_init()
260 connector->connector_type = connector_type; in drm_connector_init()
261 connector->connector_type_id = in drm_connector_init()
263 if (connector->connector_type_id < 0) { in drm_connector_init()
264 ret = connector->connector_type_id; in drm_connector_init()
267 connector->name = in drm_connector_init()
270 connector->connector_type_id); in drm_connector_init()
271 if (!connector->name) { 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 connector->edid_blob_ptr = NULL; in drm_connector_init()
281 connector->epoch_counter = 0; in drm_connector_init()
282 connector->tile_blob_ptr = NULL; in drm_connector_init()
283 connector->status = connector_status_unknown; in drm_connector_init()
284 connector->display_info.panel_orientation = in drm_connector_init()
287 drm_connector_get_cmdline_mode(connector); in drm_connector_init()
289 /* We should add connectors at the end to avoid upsetting the connector in drm_connector_init()
292 list_add_tail(&connector->head, &config->connector_list); in drm_connector_init()
298 drm_connector_attach_edid_property(connector); in drm_connector_init()
300 drm_object_attach_property(&connector->base, in drm_connector_init()
303 drm_object_attach_property(&connector->base, in drm_connector_init()
307 drm_object_attach_property(&connector->base, in drm_connector_init()
310 drm_object_attach_property(&connector->base, in drm_connector_init()
315 drm_object_attach_property(&connector->base, config->prop_crtc_id, 0); in drm_connector_init()
318 connector->debugfs_entry = NULL; in drm_connector_init()
321 ida_simple_remove(connector_ida, connector->connector_type_id); in drm_connector_init()
324 ida_simple_remove(&config->connector_ida, connector->index); in drm_connector_init()
327 drm_mode_object_unregister(dev, &connector->base); in drm_connector_init()
334 * drm_connector_init_with_ddc - Init a preallocated connector
336 * @connector: the connector to init
337 * @funcs: callbacks for this connector
338 * @connector_type: user visible type of the connector
341 * Initialises a preallocated connector. Connectors should be
342 * subclassed as part of driver connector objects.
344 * Ensures that the ddc field of the connector is correctly set.
350 struct drm_connector *connector, in drm_connector_init_with_ddc() argument
357 ret = drm_connector_init(dev, connector, funcs, connector_type); in drm_connector_init_with_ddc()
362 connector->ddc = ddc; in drm_connector_init_with_ddc()
370 * @connector: the connector
372 * Some connector types like DRM_MODE_CONNECTOR_VIRTUAL do not get a
376 void drm_connector_attach_edid_property(struct drm_connector *connector) in drm_connector_attach_edid_property() argument
378 struct drm_mode_config *config = &connector->dev->mode_config; in drm_connector_attach_edid_property()
380 drm_object_attach_property(&connector->base, in drm_connector_attach_edid_property()
387 * drm_connector_attach_encoder - attach a connector to an encoder
388 * @connector: connector to attach
389 * @encoder: encoder to attach @connector to
391 * This function links up a connector to an encoder. Note that the routing
398 int drm_connector_attach_encoder(struct drm_connector *connector, in drm_connector_attach_encoder() argument
403 * of connector to encoder in simple connector/encoder devices using a in drm_connector_attach_encoder()
404 * direct assignment of connector->encoder = encoder. This connection in drm_connector_attach_encoder()
412 if (WARN_ON(connector->encoder)) in drm_connector_attach_encoder()
415 connector->possible_encoders |= drm_encoder_mask(encoder); in drm_connector_attach_encoder()
422 * drm_connector_has_possible_encoder - check if the connector and encoder are
424 * @connector: the connector
428 * True if @encoder is one of the possible encoders for @connector.
430 bool drm_connector_has_possible_encoder(struct drm_connector *connector, in drm_connector_has_possible_encoder() argument
433 return connector->possible_encoders & drm_encoder_mask(encoder); in drm_connector_has_possible_encoder()
437 static void drm_mode_remove(struct drm_connector *connector, in drm_mode_remove() argument
441 drm_mode_destroy(connector->dev, mode); in drm_mode_remove()
445 * drm_connector_cleanup - cleans up an initialised connector
446 * @connector: connector to cleanup
448 * Cleans up the connector but doesn't free the object.
450 void drm_connector_cleanup(struct drm_connector *connector) in drm_connector_cleanup() argument
452 struct drm_device *dev = connector->dev; in drm_connector_cleanup()
455 /* The connector should have been removed from userspace long before in drm_connector_cleanup()
458 if (WARN_ON(connector->registration_state == in drm_connector_cleanup()
460 drm_connector_unregister(connector); in drm_connector_cleanup()
462 if (connector->tile_group) { in drm_connector_cleanup()
463 drm_mode_put_tile_group(dev, connector->tile_group); in drm_connector_cleanup()
464 connector->tile_group = NULL; in drm_connector_cleanup()
467 list_for_each_entry_safe(mode, t, &connector->probed_modes, head) in drm_connector_cleanup()
468 drm_mode_remove(connector, mode); in drm_connector_cleanup()
470 list_for_each_entry_safe(mode, t, &connector->modes, head) in drm_connector_cleanup()
471 drm_mode_remove(connector, mode); in drm_connector_cleanup()
473 ida_simple_remove(&drm_connector_enum_list[connector->connector_type].ida, in drm_connector_cleanup()
474 connector->connector_type_id); in drm_connector_cleanup()
477 connector->index); in drm_connector_cleanup()
479 kfree(connector->display_info.bus_formats); in drm_connector_cleanup()
480 drm_mode_object_unregister(dev, &connector->base); in drm_connector_cleanup()
481 kfree(connector->name); in drm_connector_cleanup()
482 connector->name = NULL; in drm_connector_cleanup()
483 fwnode_handle_put(connector->fwnode); in drm_connector_cleanup()
484 connector->fwnode = NULL; in drm_connector_cleanup()
486 list_del(&connector->head); in drm_connector_cleanup()
490 WARN_ON(connector->state && !connector->funcs->atomic_destroy_state); in drm_connector_cleanup()
491 if (connector->state && connector->funcs->atomic_destroy_state) in drm_connector_cleanup()
492 connector->funcs->atomic_destroy_state(connector, in drm_connector_cleanup()
493 connector->state); in drm_connector_cleanup()
495 mutex_destroy(&connector->mutex); in drm_connector_cleanup()
497 memset(connector, 0, sizeof(*connector)); in drm_connector_cleanup()
505 * drm_connector_register - register a connector
506 * @connector: the connector to register
508 * Register userspace interfaces for a connector. Only call this for connectors
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()
543 /* Let userspace know we have a new connector */ 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()
561 * drm_connector_unregister - unregister a connector
562 * @connector: the connector to unregister
564 * Unregister userspace interfaces for a connector. Only call this for
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()
623 * drm_get_connector_status_name - return a string for connector status
624 * @status: connector status to compute name of
641 * drm_get_connector_force_name - return a string for connector force
642 * @force: connector force to get name of
688 * Extra-safe connector put function that works in any context. Should only be
690 * actually release the connector when dropping our final reference.
707 * drm_connector_list_iter_next - return next connector
710 * Returns the next connector for @iter, or NULL when the list walk has
733 /* loop until it's not a zombie connector */ in drm_connector_list_iter_next()
837 /* Optional connector properties. */
973 * DOC: standard connector properties
985 * Legacy property for setting the power state of the connector. For atomic
988 * connector is linked to. Drivers should never set this property directly,
1005 * connector is connected to a CRTC. In atomic the DRM core enforces that
1012 * Summarizing: Only set "DPMS" when the connector is known to be enabled,
1016 * Connector path property to identify how this sink is physically
1022 * Connector tile group property to indicate how a set of DRM connector
1032 * Connector link-status property to indicate the status of link. The
1043 * "GOOD" to re-enable the connector.
1049 * When user-space performs an atomic commit on a connector with a "BAD"
1098 * - Kernel sends uevent with the connector id and property id through
1166 * Connector property to enable userspace to send HDR Metadata to
1211 * property to the connector during initialization.
1216 * Mode object ID of the &drm_crtc this connector should be connected to.
1257 * connector subtypes. Enum values more or less match with those from main
1258 * connector types.
1320 * drm_mode_create_dvi_i_properties - create DVI-I specific connector properties
1323 * Called by a driver the first time a DVI-I connector is made.
1352 * @connector: drm_connector to attach property
1354 * Called by a driver when DP connector is created.
1356 void drm_connector_attach_dp_subconnector_property(struct drm_connector *connector) in drm_connector_attach_dp_subconnector_property() argument
1358 struct drm_mode_config *mode_config = &connector->dev->mode_config; in drm_connector_attach_dp_subconnector_property()
1362 drm_property_create_enum(connector->dev, in drm_connector_attach_dp_subconnector_property()
1368 drm_object_attach_property(&connector->base, in drm_connector_attach_dp_subconnector_property()
1375 * DOC: HDMI connector properties
1402 * @connector: connector to attach content type property on.
1404 * Called by a driver the first time a HDMI connector is made.
1406 int drm_connector_attach_content_type_property(struct drm_connector *connector) in drm_connector_attach_content_type_property() argument
1408 if (!drm_mode_create_content_type_property(connector->dev)) in drm_connector_attach_content_type_property()
1409 drm_object_attach_property(&connector->base, in drm_connector_attach_content_type_property()
1410 connector->dev->mode_config.content_type_property, in drm_connector_attach_content_type_property()
1422 * @conn_state: DRM display connector state
1451 * drm_mode_attach_tv_margin_properties - attach TV connector margin properties
1452 * @connector: DRM connector
1454 * Called by a driver when it needs to attach TV margin props to a connector.
1457 void drm_connector_attach_tv_margin_properties(struct drm_connector *connector) in drm_connector_attach_tv_margin_properties() argument
1459 struct drm_device *dev = connector->dev; in drm_connector_attach_tv_margin_properties()
1461 drm_object_attach_property(&connector->base, in drm_connector_attach_tv_margin_properties()
1464 drm_object_attach_property(&connector->base, in drm_connector_attach_tv_margin_properties()
1467 drm_object_attach_property(&connector->base, in drm_connector_attach_tv_margin_properties()
1470 drm_object_attach_property(&connector->base, in drm_connector_attach_tv_margin_properties()
1477 * drm_mode_create_tv_margin_properties - create TV connector margin properties
1480 * Called by a driver's HDMI connector initialization routine, this function
1482 * function for an SDTV connector, it's already called from
1515 * drm_mode_create_tv_properties - create TV specific connector properties
1521 * the TV specific connector properties for a given device. Caller is
1537 * Basic connector properties in drm_mode_create_tv_properties()
1694 * from the minimum supported variable refresh rate for the connector.
1703 * @connector: connector to create the vrr_capable property on.
1706 * variable refresh rate capability for a connector.
1712 struct drm_connector *connector) in drm_connector_attach_vrr_capable_property() argument
1714 struct drm_device *dev = connector->dev; in drm_connector_attach_vrr_capable_property()
1717 if (!connector->vrr_capable_property) { in drm_connector_attach_vrr_capable_property()
1723 connector->vrr_capable_property = prop; in drm_connector_attach_vrr_capable_property()
1724 drm_object_attach_property(&connector->base, prop, 0); in drm_connector_attach_vrr_capable_property()
1733 * @connector: connector to attach scaling mode property on.
1745 int drm_connector_attach_scaling_mode_property(struct drm_connector *connector, in drm_connector_attach_scaling_mode_property() argument
1748 struct drm_device *dev = connector->dev; in drm_connector_attach_scaling_mode_property()
1782 drm_object_attach_property(&connector->base, in drm_connector_attach_scaling_mode_property()
1785 connector->scaling_mode_property = scaling_mode_property; in drm_connector_attach_scaling_mode_property()
1819 * DOC: standard connector properties
1842 * drm_mode_create_hdmi_colorspace_property() is used for HDMI connector and
1843 * drm_mode_create_dp_colorspace_property() is used for DP connector.
1848 * @connector: connector to create the Colorspace property on.
1856 int drm_mode_create_hdmi_colorspace_property(struct drm_connector *connector) in drm_mode_create_hdmi_colorspace_property() argument
1858 struct drm_device *dev = connector->dev; in drm_mode_create_hdmi_colorspace_property()
1860 if (connector->colorspace_property) in drm_mode_create_hdmi_colorspace_property()
1863 connector->colorspace_property = in drm_mode_create_hdmi_colorspace_property()
1868 if (!connector->colorspace_property) in drm_mode_create_hdmi_colorspace_property()
1877 * @connector: connector to create the Colorspace property on.
1885 int drm_mode_create_dp_colorspace_property(struct drm_connector *connector) in drm_mode_create_dp_colorspace_property() argument
1887 struct drm_device *dev = connector->dev; in drm_mode_create_dp_colorspace_property()
1889 if (connector->colorspace_property) in drm_mode_create_dp_colorspace_property()
1892 connector->colorspace_property = in drm_mode_create_dp_colorspace_property()
1897 if (!connector->colorspace_property) in drm_mode_create_dp_colorspace_property()
1956 * drm_connector_set_path_property - set tile property on connector
1957 * @connector: connector to set property on.
1961 * connector path. This is mainly used for DisplayPort MST where
1968 int drm_connector_set_path_property(struct drm_connector *connector, in drm_connector_set_path_property() argument
1971 struct drm_device *dev = connector->dev; in drm_connector_set_path_property()
1975 &connector->path_blob_ptr, in drm_connector_set_path_property()
1978 &connector->base, in drm_connector_set_path_property()
1985 * drm_connector_set_tile_property - set tile property on connector
1986 * @connector: connector to set property on.
1988 * This looks up the tile information for a connector, and creates a
1997 int drm_connector_set_tile_property(struct drm_connector *connector) in drm_connector_set_tile_property() argument
1999 struct drm_device *dev = connector->dev; in drm_connector_set_tile_property()
2003 if (!connector->has_tile) { in drm_connector_set_tile_property()
2005 &connector->tile_blob_ptr, in drm_connector_set_tile_property()
2008 &connector->base, in drm_connector_set_tile_property()
2014 connector->tile_group->id, connector->tile_is_single_monitor, in drm_connector_set_tile_property()
2015 connector->num_h_tile, connector->num_v_tile, in drm_connector_set_tile_property()
2016 connector->tile_h_loc, connector->tile_v_loc, in drm_connector_set_tile_property()
2017 connector->tile_h_size, connector->tile_v_size); in drm_connector_set_tile_property()
2020 &connector->tile_blob_ptr, in drm_connector_set_tile_property()
2023 &connector->base, in drm_connector_set_tile_property()
2030 * drm_connector_update_edid_property - update the edid property of a connector
2031 * @connector: drm connector
2035 * connector's edid property.
2037 * set the connector's tile property here. See drm_connector_set_tile_property()
2043 int drm_connector_update_edid_property(struct drm_connector *connector, in drm_connector_update_edid_property() argument
2046 struct drm_device *dev = connector->dev; in drm_connector_update_edid_property()
2052 if (connector->override_edid) in drm_connector_update_edid_property()
2067 drm_add_display_info(connector, edid); in drm_connector_update_edid_property()
2069 drm_reset_display_info(connector); in drm_connector_update_edid_property()
2071 drm_update_tile_info(connector, edid); in drm_connector_update_edid_property()
2073 if (connector->edid_blob_ptr) { in drm_connector_update_edid_property()
2074 old_edid = (const struct edid *)connector->edid_blob_ptr->data; in drm_connector_update_edid_property()
2077 DRM_DEBUG_KMS("[CONNECTOR:%d:%s] Edid was changed.\n", in drm_connector_update_edid_property()
2078 connector->base.id, connector->name); in drm_connector_update_edid_property()
2080 connector->epoch_counter += 1; in drm_connector_update_edid_property()
2082 connector->epoch_counter); in drm_connector_update_edid_property()
2087 drm_object_property_set_value(&connector->base, in drm_connector_update_edid_property()
2089 connector->display_info.non_desktop); in drm_connector_update_edid_property()
2092 &connector->edid_blob_ptr, in drm_connector_update_edid_property()
2095 &connector->base, in drm_connector_update_edid_property()
2099 return drm_connector_set_tile_property(connector); in drm_connector_update_edid_property()
2104 * drm_connector_set_link_status_property - Set link status property of a connector
2105 * @connector: drm connector
2122 void drm_connector_set_link_status_property(struct drm_connector *connector, in drm_connector_set_link_status_property() argument
2125 struct drm_device *dev = connector->dev; in drm_connector_set_link_status_property()
2128 connector->state->link_status = link_status; in drm_connector_set_link_status_property()
2135 * @connector: connector to attach max bpc property on.
2136 * @min: The minimum bit depth supported by the connector.
2137 * @max: The maximum bit depth supported by the connector.
2139 * This is used to add support for limiting the bit depth on a connector.
2144 int drm_connector_attach_max_bpc_property(struct drm_connector *connector, in drm_connector_attach_max_bpc_property() argument
2147 struct drm_device *dev = connector->dev; in drm_connector_attach_max_bpc_property()
2150 prop = connector->max_bpc_property; in drm_connector_attach_max_bpc_property()
2156 connector->max_bpc_property = prop; in drm_connector_attach_max_bpc_property()
2159 drm_object_attach_property(&connector->base, prop, max); in drm_connector_attach_max_bpc_property()
2160 connector->state->max_requested_bpc = max; in drm_connector_attach_max_bpc_property()
2161 connector->state->max_bpc = max; in drm_connector_attach_max_bpc_property()
2169 * capable property for a connector
2170 * @connector: drm connector
2171 * @capable: True if the connector is variable refresh rate capable
2174 * variable refresh rate over a connector.
2177 struct drm_connector *connector, bool capable) in drm_connector_set_vrr_capable_property() argument
2179 if (!connector->vrr_capable_property) in drm_connector_set_vrr_capable_property()
2182 drm_object_property_set_value(&connector->base, in drm_connector_set_vrr_capable_property()
2183 connector->vrr_capable_property, in drm_connector_set_vrr_capable_property()
2189 * drm_connector_set_panel_orientation - sets the connector's panel_orientation
2190 * @connector: connector for which to set the panel-orientation property.
2193 * This function sets the connector's panel_orientation and attaches
2194 * a "panel orientation" property to the connector.
2196 * Calling this function on a connector where the panel_orientation has
2207 struct drm_connector *connector, in drm_connector_set_panel_orientation() argument
2210 struct drm_device *dev = connector->dev; in drm_connector_set_panel_orientation()
2211 struct drm_display_info *info = &connector->display_info; in drm_connector_set_panel_orientation()
2236 drm_object_attach_property(&connector->base, prop, in drm_connector_set_panel_orientation()
2244 * set the connector's panel_orientation after checking for quirks
2245 * @connector: connector for which to init the panel-orientation property.
2257 struct drm_connector *connector, in drm_connector_set_panel_orientation_with_quirk() argument
2267 return drm_connector_set_panel_orientation(connector, in drm_connector_set_panel_orientation_with_quirk()
2277 struct drm_connector *connector = obj_to_connector(obj); in drm_connector_set_obj_prop() local
2280 if (property == connector->dev->mode_config.dpms_property) { in drm_connector_set_obj_prop()
2281 ret = (*connector->funcs->dpms)(connector, (int)value); in drm_connector_set_obj_prop()
2282 } else if (connector->funcs->set_property) in drm_connector_set_obj_prop()
2283 ret = connector->funcs->set_property(connector, property, value); in drm_connector_set_obj_prop()
2286 drm_object_property_set_value(&connector->base, property, value); in drm_connector_set_obj_prop()
2305 static struct drm_encoder *drm_connector_get_encoder(struct drm_connector *connector) in drm_connector_get_encoder() argument
2309 if (connector->state) in drm_connector_get_encoder()
2310 return connector->state->best_encoder; in drm_connector_get_encoder()
2311 return connector->encoder; in drm_connector_get_encoder()
2352 struct drm_connector *connector; in drm_mode_getconnector() local
2368 connector = drm_connector_lookup(dev, file_priv, out_resp->connector_id); in drm_mode_getconnector()
2369 if (!connector) in drm_mode_getconnector()
2372 encoders_count = hweight32(connector->possible_encoders); in drm_mode_getconnector()
2378 drm_connector_for_each_possible_encoder(connector, encoder) { in drm_mode_getconnector()
2388 out_resp->connector_id = connector->base.id; in drm_mode_getconnector()
2389 out_resp->connector_type = connector->connector_type; in drm_mode_getconnector()
2390 out_resp->connector_type_id = connector->connector_type_id; in drm_mode_getconnector()
2394 connector->funcs->fill_modes(connector, in drm_mode_getconnector()
2399 out_resp->mm_width = connector->display_info.width_mm; in drm_mode_getconnector()
2400 out_resp->mm_height = connector->display_info.height_mm; in drm_mode_getconnector()
2401 out_resp->subpixel = connector->display_info.subpixel_order; in drm_mode_getconnector()
2402 out_resp->connection = connector->status; in drm_mode_getconnector()
2405 list_for_each_entry(mode, &connector->modes, head) { in drm_mode_getconnector()
2408 if (drm_mode_expose_to_userspace(mode, &connector->modes, in drm_mode_getconnector()
2422 list_for_each_entry(mode, &connector->modes, head) { in drm_mode_getconnector()
2444 list_for_each_entry_continue(mode, &connector->modes, head) in drm_mode_getconnector()
2455 list_for_each_entry(mode, &connector->modes, head) in drm_mode_getconnector()
2463 encoder = drm_connector_get_encoder(connector); in drm_mode_getconnector()
2471 ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic, in drm_mode_getconnector()
2478 drm_connector_put(connector); in drm_mode_getconnector()
2484 * drm_connector_find_by_fwnode - Find a connector based on the associated fwnode
2488 * a connector is found a reference to the connector is returned. The caller must
2490 * connector.
2492 * Returns: A reference to the found connector or an ERR_PTR().
2496 struct drm_connector *connector, *found = ERR_PTR(-ENODEV); in drm_connector_find_by_fwnode() local
2503 list_for_each_entry(connector, &connector_list, global_connector_list_entry) { in drm_connector_find_by_fwnode()
2504 if (connector->fwnode == fwnode || in drm_connector_find_by_fwnode()
2505 (connector->fwnode && connector->fwnode->secondary == fwnode)) { in drm_connector_find_by_fwnode()
2506 drm_connector_get(connector); in drm_connector_find_by_fwnode()
2507 found = connector; in drm_connector_find_by_fwnode()
2518 * drm_connector_oob_hotplug_event - Report out-of-band hotplug event to connector
2519 * @connector: connector to report the event on
2531 struct drm_connector *connector; in drm_connector_oob_hotplug_event() local
2533 connector = drm_connector_find_by_fwnode(connector_fwnode); in drm_connector_oob_hotplug_event()
2534 if (IS_ERR(connector)) in drm_connector_oob_hotplug_event()
2537 if (connector->funcs->oob_hotplug_event) in drm_connector_oob_hotplug_event()
2538 connector->funcs->oob_hotplug_event(connector); in drm_connector_oob_hotplug_event()
2540 drm_connector_put(connector); in drm_connector_oob_hotplug_event()