• Home
  • Raw
  • Download

Lines Matching full:connector

44  * objects and initialized by setting the following fields. The connector is
46 * &struct drm_connector_funcs and a connector type, and then exposed to
50 * connectors to encoders 1:1, the connector should be attached at
69 * Connector and encoder types.
111 * @connector: connector to quwery
113 * The kernel supports per-connector configuration of its consoles through
116 * particular connector. This is typically only used during the early fbdev
119 static void drm_connector_get_cmdline_mode(struct drm_connector *connector) in drm_connector_get_cmdline_mode() argument
121 struct drm_cmdline_mode *mode = &connector->cmdline_mode; in drm_connector_get_cmdline_mode()
124 if (fb_get_options(connector->name, &option)) in drm_connector_get_cmdline_mode()
128 connector, in drm_connector_get_cmdline_mode()
133 DRM_INFO("forcing %s connector %s\n", connector->name, in drm_connector_get_cmdline_mode()
135 connector->force = mode->force; in drm_connector_get_cmdline_mode()
138 DRM_DEBUG_KMS("cmdline mode for connector %s %dx%d@%dHz%s%s%s\n", in drm_connector_get_cmdline_mode()
139 connector->name, in drm_connector_get_cmdline_mode()
149 struct drm_connector *connector = in drm_connector_free() local
151 struct drm_device *dev = connector->dev; in drm_connector_free()
153 drm_mode_object_unregister(dev, &connector->base); in drm_connector_free()
154 connector->funcs->destroy(connector); in drm_connector_free()
159 struct drm_connector *connector, *n; in drm_connector_free_work_fn() local
170 llist_for_each_entry_safe(connector, n, freed, free_node) { in drm_connector_free_work_fn()
171 drm_mode_object_unregister(dev, &connector->base); in drm_connector_free_work_fn()
172 connector->funcs->destroy(connector); in drm_connector_free_work_fn()
177 * drm_connector_init - Init a preallocated connector
179 * @connector: the connector to init
180 * @funcs: callbacks for this connector
181 * @connector_type: user visible type of the connector
183 * Initialises a preallocated connector. Connectors should be
184 * subclassed as part of driver connector objects.
190 struct drm_connector *connector, in drm_connector_init() argument
203 ret = __drm_mode_object_add(dev, &connector->base, in drm_connector_init()
209 connector->base.properties = &connector->properties; in drm_connector_init()
210 connector->dev = dev; in drm_connector_init()
211 connector->funcs = funcs; in drm_connector_init()
213 /* connector index is used with 32bit bitmasks */ in drm_connector_init()
216 DRM_DEBUG_KMS("Failed to allocate %s connector index: %d\n", in drm_connector_init()
221 connector->index = ret; in drm_connector_init()
224 connector->connector_type = connector_type; in drm_connector_init()
225 connector->connector_type_id = in drm_connector_init()
227 if (connector->connector_type_id < 0) { in drm_connector_init()
228 ret = connector->connector_type_id; in drm_connector_init()
231 connector->name = in drm_connector_init()
234 connector->connector_type_id); in drm_connector_init()
235 if (!connector->name) { in drm_connector_init()
240 INIT_LIST_HEAD(&connector->probed_modes); in drm_connector_init()
241 INIT_LIST_HEAD(&connector->modes); in drm_connector_init()
242 mutex_init(&connector->mutex); in drm_connector_init()
243 connector->edid_blob_ptr = NULL; in drm_connector_init()
244 connector->status = connector_status_unknown; in drm_connector_init()
245 connector->display_info.panel_orientation = in drm_connector_init()
248 drm_connector_get_cmdline_mode(connector); in drm_connector_init()
250 /* We should add connectors at the end to avoid upsetting the connector in drm_connector_init()
253 list_add_tail(&connector->head, &config->connector_list); in drm_connector_init()
259 drm_object_attach_property(&connector->base, in drm_connector_init()
263 drm_object_attach_property(&connector->base, in drm_connector_init()
266 drm_object_attach_property(&connector->base, in drm_connector_init()
270 drm_object_attach_property(&connector->base, in drm_connector_init()
275 drm_object_attach_property(&connector->base, config->prop_crtc_id, 0); in drm_connector_init()
278 connector->debugfs_entry = NULL; in drm_connector_init()
281 ida_simple_remove(connector_ida, connector->connector_type_id); in drm_connector_init()
284 ida_simple_remove(&config->connector_ida, connector->index); in drm_connector_init()
287 drm_mode_object_unregister(dev, &connector->base); in drm_connector_init()
294 * drm_connector_attach_encoder - attach a connector to an encoder
295 * @connector: connector to attach
296 * @encoder: encoder to attach @connector to
298 * This function links up a connector to an encoder. Note that the routing
305 int drm_connector_attach_encoder(struct drm_connector *connector, in drm_connector_attach_encoder() argument
312 * of connector to encoder in simple connector/encoder devices using a in drm_connector_attach_encoder()
313 * direct assignment of connector->encoder = encoder. This connection in drm_connector_attach_encoder()
321 if (WARN_ON(connector->encoder)) in drm_connector_attach_encoder()
324 for (i = 0; i < ARRAY_SIZE(connector->encoder_ids); i++) { in drm_connector_attach_encoder()
325 if (connector->encoder_ids[i] == 0) { in drm_connector_attach_encoder()
326 connector->encoder_ids[i] = encoder->base.id; in drm_connector_attach_encoder()
335 …* drm_connector_has_possible_encoder - check if the connector and encoder are assosicated with eac…
336 * @connector: the connector
340 * True if @encoder is one of the possible encoders for @connector.
342 bool drm_connector_has_possible_encoder(struct drm_connector *connector, in drm_connector_has_possible_encoder() argument
348 drm_connector_for_each_possible_encoder(connector, enc, i) { in drm_connector_has_possible_encoder()
357 static void drm_mode_remove(struct drm_connector *connector, in drm_mode_remove() argument
361 drm_mode_destroy(connector->dev, mode); in drm_mode_remove()
365 * drm_connector_cleanup - cleans up an initialised connector
366 * @connector: connector to cleanup
368 * Cleans up the connector but doesn't free the object.
370 void drm_connector_cleanup(struct drm_connector *connector) in drm_connector_cleanup() argument
372 struct drm_device *dev = connector->dev; in drm_connector_cleanup()
375 /* The connector should have been removed from userspace long before in drm_connector_cleanup()
378 if (WARN_ON(connector->registered)) in drm_connector_cleanup()
379 drm_connector_unregister(connector); in drm_connector_cleanup()
381 if (connector->tile_group) { in drm_connector_cleanup()
382 drm_mode_put_tile_group(dev, connector->tile_group); in drm_connector_cleanup()
383 connector->tile_group = NULL; in drm_connector_cleanup()
386 list_for_each_entry_safe(mode, t, &connector->probed_modes, head) in drm_connector_cleanup()
387 drm_mode_remove(connector, mode); in drm_connector_cleanup()
389 list_for_each_entry_safe(mode, t, &connector->modes, head) in drm_connector_cleanup()
390 drm_mode_remove(connector, mode); in drm_connector_cleanup()
392 ida_simple_remove(&drm_connector_enum_list[connector->connector_type].ida, in drm_connector_cleanup()
393 connector->connector_type_id); in drm_connector_cleanup()
396 connector->index); in drm_connector_cleanup()
398 kfree(connector->display_info.bus_formats); in drm_connector_cleanup()
399 drm_mode_object_unregister(dev, &connector->base); in drm_connector_cleanup()
400 kfree(connector->name); in drm_connector_cleanup()
401 connector->name = NULL; in drm_connector_cleanup()
403 list_del(&connector->head); in drm_connector_cleanup()
407 WARN_ON(connector->state && !connector->funcs->atomic_destroy_state); in drm_connector_cleanup()
408 if (connector->state && connector->funcs->atomic_destroy_state) in drm_connector_cleanup()
409 connector->funcs->atomic_destroy_state(connector, in drm_connector_cleanup()
410 connector->state); in drm_connector_cleanup()
412 mutex_destroy(&connector->mutex); in drm_connector_cleanup()
414 memset(connector, 0, sizeof(*connector)); in drm_connector_cleanup()
419 * drm_connector_register - register a connector
420 * @connector: the connector to register
422 * Register userspace interfaces for a connector
427 int drm_connector_register(struct drm_connector *connector) in drm_connector_register() argument
431 if (!connector->dev->registered) in drm_connector_register()
434 mutex_lock(&connector->mutex); in drm_connector_register()
435 if (connector->registered) in drm_connector_register()
438 ret = drm_sysfs_connector_add(connector); in drm_connector_register()
442 ret = drm_debugfs_connector_add(connector); in drm_connector_register()
447 if (connector->funcs->late_register) { in drm_connector_register()
448 ret = connector->funcs->late_register(connector); in drm_connector_register()
453 drm_mode_object_register(connector->dev, &connector->base); in drm_connector_register()
455 connector->registered = true; in drm_connector_register()
459 drm_debugfs_connector_remove(connector); in drm_connector_register()
461 drm_sysfs_connector_remove(connector); in drm_connector_register()
463 mutex_unlock(&connector->mutex); in drm_connector_register()
469 * drm_connector_unregister - unregister a connector
470 * @connector: the connector to unregister
472 * Unregister userspace interfaces for a connector
474 void drm_connector_unregister(struct drm_connector *connector) in drm_connector_unregister() argument
476 mutex_lock(&connector->mutex); in drm_connector_unregister()
477 if (!connector->registered) { in drm_connector_unregister()
478 mutex_unlock(&connector->mutex); in drm_connector_unregister()
482 if (connector->funcs->early_unregister) in drm_connector_unregister()
483 connector->funcs->early_unregister(connector); in drm_connector_unregister()
485 drm_sysfs_connector_remove(connector); in drm_connector_unregister()
486 drm_debugfs_connector_remove(connector); in drm_connector_unregister()
488 connector->registered = false; in drm_connector_unregister()
489 mutex_unlock(&connector->mutex); in drm_connector_unregister()
495 struct drm_connector *connector; in drm_connector_unregister_all() local
499 drm_for_each_connector_iter(connector, &conn_iter) in drm_connector_unregister_all()
500 drm_connector_unregister(connector); in drm_connector_unregister_all()
506 struct drm_connector *connector; in drm_connector_register_all() local
511 drm_for_each_connector_iter(connector, &conn_iter) { in drm_connector_register_all()
512 ret = drm_connector_register(connector); in drm_connector_register_all()
524 * drm_get_connector_status_name - return a string for connector status
525 * @status: connector status to compute name of
542 * drm_get_connector_force_name - return a string for connector force
543 * @force: connector force to get name of
589 * Extra-safe connector put function that works in any context. Should only be
591 * actually release the connector when dropping our final reference.
608 * drm_connector_list_iter_next - return next connector
611 * Returns the next connector for @iter, or NULL when the list walk has
634 /* loop until it's not a zombie connector */ in drm_connector_list_iter_next()
738 /* Optional connector properties. */
809 * DOC: standard connector properties in DRM_ENUM_NAME_FN()
821 * Legacy property for setting the power state of the connector. For atomic in DRM_ENUM_NAME_FN()
824 * connector is linked to. Drivers should never set this property directly, in DRM_ENUM_NAME_FN()
827 * implemented in the DRM core. This is the only standard connector in DRM_ENUM_NAME_FN()
842 * connector is connected to a CRTC. In atomic the DRM core enforces that in DRM_ENUM_NAME_FN()
849 * Summarizing: Only set "DPMS" when the connector is known to be enabled, in DRM_ENUM_NAME_FN()
853 * Connector path property to identify how this sink is physically in DRM_ENUM_NAME_FN()
859 * Connector tile group property to indicate how a set of DRM connector in DRM_ENUM_NAME_FN()
869 * Connector link-status property to indicate the status of link. The in DRM_ENUM_NAME_FN()
917 * Mode object ID of the &drm_crtc this connector should be connected to. in DRM_ENUM_NAME_FN()
1006 * drm_mode_create_dvi_i_properties - create DVI-I specific connector properties
1009 * Called by a driver the first time a DVI-I connector is made.
1037 * DOC: HDMI connector properties
1064 * @connector: connector to attach content type property on.
1066 * Called by a driver the first time a HDMI connector is made.
1068 int drm_connector_attach_content_type_property(struct drm_connector *connector) in drm_connector_attach_content_type_property() argument
1070 if (!drm_mode_create_content_type_property(connector->dev)) in drm_connector_attach_content_type_property()
1071 drm_object_attach_property(&connector->base, in drm_connector_attach_content_type_property()
1072 connector->dev->mode_config.content_type_property, in drm_connector_attach_content_type_property()
1084 * @conn_state: DRM display connector state
1113 * drm_create_tv_properties - create TV specific connector properties
1119 * the TV specific connector properties for a given device. Caller is
1135 * Basic connector properties in drm_mode_create_tv_properties()
1255 * @connector: connector to attach scaling mode property on.
1267 int drm_connector_attach_scaling_mode_property(struct drm_connector *connector, in drm_connector_attach_scaling_mode_property() argument
1270 struct drm_device *dev = connector->dev; in drm_connector_attach_scaling_mode_property()
1304 drm_object_attach_property(&connector->base, in drm_connector_attach_scaling_mode_property()
1307 connector->scaling_mode_property = scaling_mode_property; in drm_connector_attach_scaling_mode_property()
1317 * @connector: connector to attach CP property on.
1329 struct drm_connector *connector) in drm_connector_attach_content_protection_property() argument
1331 struct drm_device *dev = connector->dev; in drm_connector_attach_content_protection_property()
1340 drm_object_attach_property(&connector->base, prop, in drm_connector_attach_content_protection_property()
1343 connector->content_protection_property = prop; in drm_connector_attach_content_protection_property()
1428 * drm_connector_set_path_property - set tile property on connector
1429 * @connector: connector to set property on.
1433 * connector path. This is mainly used for DisplayPort MST where
1440 int drm_connector_set_path_property(struct drm_connector *connector, in drm_connector_set_path_property() argument
1443 struct drm_device *dev = connector->dev; in drm_connector_set_path_property()
1447 &connector->path_blob_ptr, in drm_connector_set_path_property()
1450 &connector->base, in drm_connector_set_path_property()
1457 * drm_connector_set_tile_property - set tile property on connector
1458 * @connector: connector to set property on.
1460 * This looks up the tile information for a connector, and creates a
1467 int drm_connector_set_tile_property(struct drm_connector *connector) in drm_connector_set_tile_property() argument
1469 struct drm_device *dev = connector->dev; in drm_connector_set_tile_property()
1473 if (!connector->has_tile) { in drm_connector_set_tile_property()
1475 &connector->tile_blob_ptr, in drm_connector_set_tile_property()
1478 &connector->base, in drm_connector_set_tile_property()
1484 connector->tile_group->id, connector->tile_is_single_monitor, in drm_connector_set_tile_property()
1485 connector->num_h_tile, connector->num_v_tile, in drm_connector_set_tile_property()
1486 connector->tile_h_loc, connector->tile_v_loc, in drm_connector_set_tile_property()
1487 connector->tile_h_size, connector->tile_v_size); in drm_connector_set_tile_property()
1490 &connector->tile_blob_ptr, in drm_connector_set_tile_property()
1493 &connector->base, in drm_connector_set_tile_property()
1500 * drm_connector_update_edid_property - update the edid property of a connector
1501 * @connector: drm connector
1505 * connector's edid property.
1510 int drm_connector_update_edid_property(struct drm_connector *connector, in drm_connector_update_edid_property() argument
1513 struct drm_device *dev = connector->dev; in drm_connector_update_edid_property()
1518 if (connector->override_edid) in drm_connector_update_edid_property()
1533 drm_add_display_info(connector, edid); in drm_connector_update_edid_property()
1535 drm_reset_display_info(connector); in drm_connector_update_edid_property()
1537 drm_object_property_set_value(&connector->base, in drm_connector_update_edid_property()
1539 connector->display_info.non_desktop); in drm_connector_update_edid_property()
1542 &connector->edid_blob_ptr, in drm_connector_update_edid_property()
1545 &connector->base, in drm_connector_update_edid_property()
1552 * drm_connector_set_link_status_property - Set link status property of a connector
1553 * @connector: drm connector
1570 void drm_connector_set_link_status_property(struct drm_connector *connector, in drm_connector_set_link_status_property() argument
1573 struct drm_device *dev = connector->dev; in drm_connector_set_link_status_property()
1576 connector->state->link_status = link_status; in drm_connector_set_link_status_property()
1584 * @connector: connector for which to init the panel-orientation property.
1589 * connector->display_info.panel_orientation first (if known).
1594 * "panel orientation" property to the connector.
1600 struct drm_connector *connector, int width, int height) in drm_connector_init_panel_orientation_property() argument
1602 struct drm_device *dev = connector->dev; in drm_connector_init_panel_orientation_property()
1603 struct drm_display_info *info = &connector->display_info; in drm_connector_init_panel_orientation_property()
1626 drm_object_attach_property(&connector->base, prop, in drm_connector_init_panel_orientation_property()
1637 struct drm_connector *connector = obj_to_connector(obj); in drm_connector_set_obj_prop() local
1640 if (property == connector->dev->mode_config.dpms_property) { in drm_connector_set_obj_prop()
1641 ret = (*connector->funcs->dpms)(connector, (int)value); in drm_connector_set_obj_prop()
1642 } else if (connector->funcs->set_property) in drm_connector_set_obj_prop()
1643 ret = connector->funcs->set_property(connector, property, value); in drm_connector_set_obj_prop()
1646 drm_object_property_set_value(&connector->base, property, value); in drm_connector_set_obj_prop()
1665 static struct drm_encoder *drm_connector_get_encoder(struct drm_connector *connector) in drm_connector_get_encoder() argument
1669 if (connector->state) in drm_connector_get_encoder()
1670 return connector->state->best_encoder; in drm_connector_get_encoder()
1671 return connector->encoder; in drm_connector_get_encoder()
1710 struct drm_connector *connector; in drm_mode_getconnector() local
1728 connector = drm_connector_lookup(dev, file_priv, out_resp->connector_id); in drm_mode_getconnector()
1729 if (!connector) in drm_mode_getconnector()
1732 drm_connector_for_each_possible_encoder(connector, encoder, i) in drm_mode_getconnector()
1739 drm_connector_for_each_possible_encoder(connector, encoder, i) { in drm_mode_getconnector()
1749 out_resp->connector_id = connector->base.id; in drm_mode_getconnector()
1750 out_resp->connector_type = connector->connector_type; in drm_mode_getconnector()
1751 out_resp->connector_type_id = connector->connector_type_id; in drm_mode_getconnector()
1755 connector->funcs->fill_modes(connector, in drm_mode_getconnector()
1760 out_resp->mm_width = connector->display_info.width_mm; in drm_mode_getconnector()
1761 out_resp->mm_height = connector->display_info.height_mm; in drm_mode_getconnector()
1762 out_resp->subpixel = connector->display_info.subpixel_order; in drm_mode_getconnector()
1763 out_resp->connection = connector->status; in drm_mode_getconnector()
1766 list_for_each_entry(mode, &connector->modes, head) in drm_mode_getconnector()
1806 encoder = drm_connector_get_encoder(connector); in drm_mode_getconnector()
1814 ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic, in drm_mode_getconnector()
1821 drm_connector_put(connector); in drm_mode_getconnector()