Home | History | Annotate | Download | only in drm

Lines Matching refs:connector

55  * objects and initialized by setting the following fields. The connector is
57 * &struct drm_connector_funcs and a connector type, and then exposed to
61 * connectors to encoders 1:1, the connector should be attached at
80 * Connector and encoder types.
123 * @connector: connector to quwery
125 * The kernel supports per-connector configuration of its consoles through
128 * particular connector. This is typically only used during the early fbdev
131 static void drm_connector_get_cmdline_mode(struct drm_connector *connector)
133 struct drm_cmdline_mode *mode = &connector->cmdline_mode;
136 prop_dictionary_t prop = device_properties(connector->dev->dev);
137 if (!prop_dictionary_get_string(prop, connector->name, &option))
142 if (fb_get_options(connector->name, &option))
147 connector,
152 DRM_INFO("forcing %s connector %s\n", connector->name,
154 connector->force = mode->force;
157 DRM_DEBUG_KMS("cmdline mode for connector %s %s %dx%d@%dHz%s%s%s\n",
158 connector->name, mode->name,
168 struct drm_connector *connector =
170 struct drm_device *dev = connector->dev;
172 drm_mode_object_unregister(dev, &connector->base);
173 connector->funcs->destroy(connector);
178 struct drm_connector *connector, *n;
189 llist_for_each_entry_safe(connector, n, freed, free_node) {
190 drm_mode_object_unregister(dev, &connector->base);
191 connector->funcs->destroy(connector);
196 * drm_connector_init - Init a preallocated connector
198 * @connector: the connector to init
199 * @funcs: callbacks for this connector
200 * @connector_type: user visible type of the connector
202 * Initialises a preallocated connector. Connectors should be
203 * subclassed as part of driver connector objects.
209 struct drm_connector *connector,
222 ret = __drm_mode_object_add(dev, &connector->base,
228 connector->base.properties = &connector->properties;
229 connector->dev = dev;
230 connector->funcs = funcs;
232 /* connector index is used with 32bit bitmasks */
235 DRM_DEBUG_KMS("Failed to allocate %s connector index: %d\n",
240 connector->index = ret;
243 connector->connector_type = connector_type;
244 connector->connector_type_id =
246 if (connector->connector_type_id < 0) {
247 ret = connector->connector_type_id;
250 connector->name =
253 connector->connector_type_id);
254 if (!connector->name) {
259 INIT_LIST_HEAD(&connector->probed_modes);
260 INIT_LIST_HEAD(&connector->modes);
261 mutex_init(&connector->mutex);
262 connector->edid_blob_ptr = NULL;
263 connector->tile_blob_ptr = NULL;
264 connector->status = connector_status_unknown;
265 connector->display_info.panel_orientation =
268 drm_connector_get_cmdline_mode(connector);
270 /* We should add connectors at the end to avoid upsetting the connector
273 list_add_tail(&connector->head, &config->connector_list);
279 drm_connector_attach_edid_property(connector);
281 drm_object_attach_property(&connector->base,
284 drm_object_attach_property(&connector->base,
288 drm_object_attach_property(&connector->base,
291 drm_object_attach_property(&connector->base,
296 drm_object_attach_property(&connector->base, config->prop_crtc_id, 0);
299 connector->debugfs_entry = NULL;
302 ida_simple_remove(connector_ida, connector->connector_type_id);
305 ida_simple_remove(&config->connector_ida, connector->index);
308 drm_mode_object_unregister(dev, &connector->base);
315 * drm_connector_init_with_ddc - Init a preallocated connector
317 * @connector: the connector to init
318 * @funcs: callbacks for this connector
319 * @connector_type: user visible type of the connector
322 * Initialises a preallocated connector. Connectors should be
323 * subclassed as part of driver connector objects.
325 * Ensures that the ddc field of the connector is correctly set.
331 struct drm_connector *connector,
338 ret = drm_connector_init(dev, connector, funcs, connector_type);
343 connector->ddc = ddc;
351 * @connector: the connector
353 * Some connector types like DRM_MODE_CONNECTOR_VIRTUAL do not get a
357 void drm_connector_attach_edid_property(struct drm_connector *connector)
359 struct drm_mode_config *config = &connector->dev->mode_config;
361 drm_object_attach_property(&connector->base,
368 * drm_connector_attach_encoder - attach a connector to an encoder
369 * @connector: connector to attach
370 * @encoder: encoder to attach @connector to
372 * This function links up a connector to an encoder. Note that the routing
379 int drm_connector_attach_encoder(struct drm_connector *connector,
384 * of connector to encoder in simple connector/encoder devices using a
385 * direct assignment of connector->encoder = encoder. This connection
393 if (WARN_ON(connector->encoder))
396 connector->possible_encoders |= drm_encoder_mask(encoder);
403 * drm_connector_has_possible_encoder - check if the connector and encoder are
405 * @connector: the connector
409 * True if @encoder is one of the possible encoders for @connector.
411 bool drm_connector_has_possible_encoder(struct drm_connector *connector,
414 return connector->possible_encoders & drm_encoder_mask(encoder);
418 static void drm_mode_remove(struct drm_connector *connector,
422 drm_mode_destroy(connector->dev, mode);
426 * drm_connector_cleanup - cleans up an initialised connector
427 * @connector: connector to cleanup
429 * Cleans up the connector but doesn't free the object.
431 void drm_connector_cleanup(struct drm_connector *connector)
433 struct drm_device *dev = connector->dev;
436 /* The connector should have been removed from userspace long before
439 if (WARN_ON(connector->registration_state ==
441 drm_connector_unregister(connector);
443 if (connector->tile_group) {
444 drm_mode_put_tile_group(dev, connector->tile_group);
445 connector->tile_group = NULL;
448 list_for_each_entry_safe(mode, t, &connector->probed_modes, head)
449 drm_mode_remove(connector, mode);
451 list_for_each_entry_safe(mode, t, &connector->modes, head)
452 drm_mode_remove(connector, mode);
454 ida_simple_remove(&drm_connector_enum_list[connector->connector_type].ida,
455 connector->connector_type_id);
458 connector->index);
460 kfree(connector->display_info.bus_formats);
461 drm_mode_object_unregister(dev, &connector->base);
462 kfree(connector->name);
463 connector->name = NULL;
465 list_del(&connector->head);
469 WARN_ON(connector->state && !connector->funcs->atomic_destroy_state);
470 if (connector->state && connector->funcs->atomic_destroy_state)
471 connector->funcs->atomic_destroy_state(connector,
472 connector->state);
474 mutex_destroy(&connector->mutex);
476 memset(connector, 0, sizeof(*connector));
481 * drm_connector_register - register a connector
482 * @connector: the connector to register
484 * Register userspace interfaces for a connector. Only call this for connectors
492 int drm_connector_register(struct drm_connector *connector)
496 if (!connector->dev->registered)
499 mutex_lock(&connector->mutex);
500 if (connector->registration_state != DRM_CONNECTOR_INITIALIZING)
503 ret = drm_sysfs_connector_add(connector);
507 drm_debugfs_connector_add(connector);
509 if (connector->funcs->late_register) {
510 ret = connector->funcs->late_register(connector);
515 drm_mode_object_register(connectorconnector->base);
517 connector->registration_state = DRM_CONNECTOR_REGISTERED;
521 drm_debugfs_connector_remove(connector);
522 drm_sysfs_connector_remove(connector);
524 mutex_unlock(&connector->mutex);
530 * drm_connector_unregister - unregister a connector
531 * @connector: the connector to unregister
533 * Unregister userspace interfaces for a connector. Only call this for
538 void drm_connector_unregister(struct drm_connector *connector)
540 mutex_lock(&connector->mutex);
541 if (connector->registration_state != DRM_CONNECTOR_REGISTERED) {
542 mutex_unlock(&connector->mutex);
546 if (connector->funcs->early_unregister)
547 connector->funcs->early_unregister(connector);
549 drm_sysfs_connector_remove(connector);
550 drm_debugfs_connector_remove(connector);
552 connector->registration_state = DRM_CONNECTOR_UNREGISTERED;
553 mutex_unlock(&connector->mutex);
559 struct drm_connector *connector;
563 drm_for_each_connector_iter(connector, &conn_iter)
564 drm_connector_unregister(connector);
570 struct drm_connector *connector;
575 drm_for_each_connector_iter(connector, &conn_iter) {
576 ret = drm_connector_register(connector);
588 * drm_get_connector_status_name - return a string for connector status
589 * @status: connector status to compute name of
606 * drm_get_connector_force_name - return a string for connector force
607 * @force: connector force to get name of
653 * Extra-safe connector put function that works in any context. Should only be
655 * actually release the connector when dropping our final reference.
673 * drm_connector_list_iter_next - return next connector
676 * Returns the next connector for @iter, or NULL when the list walk has
699 /* loop until it's not a zombie connector */
803 /* Optional connector properties. */
926 * DOC: standard connector properties
938 * Legacy property for setting the power state of the connector. For atomic
941 * connector is linked to. Drivers should never set this property directly,
944 * implemented in the DRM core. This is the only standard connector
959 * connector is connected to a CRTC. In atomic the DRM core enforces that
966 * Summarizing: Only set "DPMS" when the connector is known to be enabled,
970 * Connector path property to identify how this sink is physically
976 * Connector tile group property to indicate how a set of DRM connector
986 * Connector link-status property to indicate the status of link. The
1026 * - Kernel sends uevent with the connector id and property id through
1094 * Connector property to enable userspace to send HDR Metadata to
1139 * property to the connector during initialization.
1144 * Mode object ID of the &drm_crtc this connector should be connected to.
1239 * drm_mode_create_dvi_i_properties - create DVI-I specific connector properties
1242 * Called by a driver the first time a DVI-I connector is made.
1270 * DOC: HDMI connector properties
1297 * @connector: connector to attach content type property on.
1299 * Called by a driver the first time a HDMI connector is made.
1301 int drm_connector_attach_content_type_property(struct drm_connector *connector)
1303 if (!drm_mode_create_content_type_property(connector->dev))
1304 drm_object_attach_property(&connector->base,
1305 connector->dev->mode_config.content_type_property,
1317 * @conn_state: DRM display connector state
1346 * drm_mode_attach_tv_margin_properties - attach TV connector margin properties
1347 * @connector: DRM connector
1349 * Called by a driver when it needs to attach TV margin props to a connector.
1352 void drm_connector_attach_tv_margin_properties(struct drm_connector *connector)
1354 struct drm_device *dev = connector->dev;
1356 drm_object_attach_property(&connector->base,
1359 drm_object_attach_property(&connector->base,
1362 drm_object_attach_property(&connector->base,
1365 drm_object_attach_property(&connector->base,
1372 * drm_mode_create_tv_margin_properties - create TV connector margin properties
1375 * Called by a driver's HDMI connector initialization routine, this function
1377 * function for an SDTV connector, it's already called from
1410 * drm_mode_create_tv_properties - create TV specific connector properties
1416 * the TV specific connector properties for a given device. Caller is
1432 * Basic connector properties
1589 * from the minimum supported variable refresh rate for the connector.
1598 * @connector: connector to create the vrr_capable property on.
1601 * variable refresh rate capability for a connector.
1607 struct drm_connector *connector)
1609 struct drm_device *dev = connector->dev;
1612 if (!connector->vrr_capable_property) {
1618 connector->vrr_capable_property = prop;
1619 drm_object_attach_property(&connector->base, prop, 0);
1628 * @connector: connector to attach scaling mode property on.
1640 int drm_connector_attach_scaling_mode_property(struct drm_connector *connector,
1643 struct drm_device *dev = connector->dev;
1677 drm_object_attach_property(&connector->base,
1680 connector->scaling_mode_property = scaling_mode_property;
1714 * DOC: standard connector properties
1737 * drm_mode_create_hdmi_colorspace_property() is used for HDMI connector and
1738 * drm_mode_create_dp_colorspace_property() is used for DP connector.
1743 * @connector: connector to create the Colorspace property on.
1751 int drm_mode_create_hdmi_colorspace_property(struct drm_connector *connector)
1753 struct drm_device *dev = connector->dev;
1755 if (connector->colorspace_property)
1758 connector->colorspace_property =
1763 if (!connector->colorspace_property)
1772 * @connector: connector to create the Colorspace property on.
1780 int drm_mode_create_dp_colorspace_property(struct drm_connector *connector)
1782 struct drm_device *dev = connector->dev;
1784 if (connector->colorspace_property)
1787 connector->colorspace_property =
1792 if (!connector->colorspace_property)
1851 * drm_connector_set_path_property - set tile property on connector
1852 * @connector: connector to set property on.
1856 * connector path. This is mainly used for DisplayPort MST where
1863 int drm_connector_set_path_property(struct drm_connector *connector,
1866 struct drm_device *dev = connector->dev;
1870 &connector->path_blob_ptr,
1873 &connector->base,
1880 * drm_connector_set_tile_property - set tile property on connector
1881 * @connector: connector to set property on.
1883 * This looks up the tile information for a connector, and creates a
1892 int drm_connector_set_tile_property(struct drm_connector *connector)
1894 struct drm_device *dev = connector
1898 if (!connector->has_tile) {
1900 &connector->tile_blob_ptr,
1903 &connector->base,
1909 connector->tile_group->id, connector->tile_is_single_monitor,
1910 connector->num_h_tile, connector->num_v_tile,
1911 connector->tile_h_loc, connector->tile_v_loc,
1912 connector->tile_h_size, connector->tile_v_size);
1915 &connector->tile_blob_ptr,
1918 &connector->base,
1925 * drm_connector_update_edid_property - update the edid property of a connector
1926 * @connector: drm connector
1930 * connector's edid property.
1932 * set the connector's tile property here. See drm_connector_set_tile_property()
1938 int drm_connector_update_edid_property(struct drm_connector *connector,
1941 struct drm_device *dev = connector->dev;
1946 if (connector->override_edid)
1961 drm_add_display_info(connector, edid);
1963 drm_reset_display_info(connector);
1965 drm_object_property_set_value(&connector->base,
1967 connector->display_info.non_desktop);
1970 &connector->edid_blob_ptr,
1973 &connector->base,
1977 return drm_connector_set_tile_property(connector);
1982 * drm_connector_set_link_status_property - Set link status property of a connector
1983 * @connector: drm connector
2000 void drm_connector_set_link_status_property(struct drm_connector *connector,
2003 struct drm_device *dev = connector->dev;
2006 connector->state->link_status = link_status;
2013 * @connector: connector to attach max bpc property on.
2014 * @min: The minimum bit depth supported by the connector.
2015 * @max: The maximum bit depth supported by the connector.
2017 * This is used to add support for limiting the bit depth on a connector.
2022 int drm_connector_attach_max_bpc_property(struct drm_connector *connector,
2025 struct drm_device *dev = connector->dev;
2028 prop = connector->max_bpc_property;
2034 connector->max_bpc_property = prop;
2037 drm_object_attach_property(&connector->base, prop, max);
2038 connector->state->max_requested_bpc = max;
2039 connector->state->max_bpc = max;
2047 * capable property for a connector
2048 * @connector: drm connector
2049 * @capable: True if the connector is variable refresh rate capable
2052 * variable refresh rate over a connector.
2055 struct drm_connector *connector, bool capable)
2057 drm_object_property_set_value(&connector->base,
2058 connector->vrr_capable_property,
2066 * @connector: connector for which to init the panel-orientation property.
2071 * connector->display_info.panel_orientation first (if known).
2076 * "panel orientation" property to the connector.
2082 struct drm_connector *connector, int width, int height)
2084 struct drm_device *dev = connector->dev;
2085 struct drm_display_info *info = &connector->display_info;
2108 drm_object_attach_property(&connector->base, prop,
2119 struct drm_connector *connector = obj_to_connector(obj);
2122 if (property == connector->dev->mode_config.dpms_property) {
2123 ret = (*connector->funcs->dpms)(connector, (int)value);
2124 } else if (connector->funcs->set_property)
2125 ret = connector->funcs->set_property(connector, property, value);
2128 drm_object_property_set_value(&connector->base, property, value);
2147 static struct drm_encoder *drm_connector_get_encoder(struct drm_connector *connector)
2151 if (connector->state)
2152 return connector->state->best_encoder;
2153 return connector->encoder;
2192 struct drm_connector *connector;
2209 connector = drm_connector_lookup(dev, file_priv, out_resp->connector_id);
2210 if (!connector)
2213 encoders_count = hweight32(connector->possible_encoders);
2219 drm_connector_for_each_possible_encoder(connector, encoder) {
2229 out_resp->connector_id = connector->base.id;
2230 out_resp->connector_type = connector->connector_type;
2231 out_resp->connector_type_id = connector->connector_type_id;
2235 connector->funcs->fill_modes(connector,
2240 out_resp->mm_width = connector->display_info.width_mm;
2241 out_resp->mm_height = connector->display_info.height_mm;
2242 out_resp->subpixel = connector->display_info.subpixel_order;
2243 out_resp->connection = connector->status;
2246 list_for_each_entry(mode, &connector->modes, head)
2286 encoder = drm_connector_get_encoder(connector);
2294 ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic,
2301 drm_connector_put(connector);