Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 34ea3d38 authored by Thomas Wood's avatar Thomas Wood Committed by Daniel Vetter
Browse files

drm: add register and unregister functions for connectors



Introduce generic functions to register and unregister connectors. This
provides a common place to add and remove associated user space
interfaces.

Signed-off-by: default avatarThomas Wood <thomas.wood@intel.com>
Reviewed-by: default avatarDavid Herrmann <dh.herrmann@gmail.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent c3e25ae3
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1610,7 +1610,7 @@ int max_width, max_height;</synopsis>
          The connector is then registered with a call to
          <function>drm_connector_init</function> with a pointer to the connector
          functions and a connector type, and exposed through sysfs with a call to
          <function>drm_sysfs_connector_add</function>.
          <function>drm_connector_register</function>.
        </para>
        <para>
          Supported connector types are
@@ -1768,7 +1768,7 @@ int max_width, max_height;</synopsis>
	(<function>drm_encoder_cleanup</function>) and connectors
	(<function>drm_connector_cleanup</function>). Furthermore, connectors
	that have been added to sysfs must be removed by a call to
	<function>drm_sysfs_connector_remove</function> before calling
	<function>drm_connector_unregister</function> before calling
	<function>drm_connector_cleanup</function>.
      </para>
      <para>
@@ -1813,7 +1813,7 @@ void intel_crt_init(struct drm_device *dev)
	drm_encoder_helper_add(&intel_output->enc, &intel_crt_helper_funcs);
	drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs);

	drm_sysfs_connector_add(connector);
	drm_connector_register(connector);
}]]></programlisting>
      <para>
        In the example above (taken from the i915 driver), a CRTC, connector and
+2 −2
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ static void armada_drm_connector_destroy(struct drm_connector *conn)
{
	struct armada_connector *dconn = drm_to_armada_conn(conn);

	drm_sysfs_connector_remove(conn);
	drm_connector_unregister(conn);
	drm_connector_cleanup(conn);
	kfree(dconn);
}
@@ -141,7 +141,7 @@ int armada_output_create(struct drm_device *dev,
	if (ret)
		goto err_conn;

	ret = drm_sysfs_connector_add(&dconn->conn);
	ret = drm_connector_register(&dconn->conn);
	if (ret)
		goto err_sysfs;

+2 −2
Original line number Diff line number Diff line
@@ -829,7 +829,7 @@ static void ast_connector_destroy(struct drm_connector *connector)
{
	struct ast_connector *ast_connector = to_ast_connector(connector);
	ast_i2c_destroy(ast_connector->i2c);
	drm_sysfs_connector_remove(connector);
	drm_connector_unregister(connector);
	drm_connector_cleanup(connector);
	kfree(connector);
}
@@ -871,7 +871,7 @@ static int ast_connector_init(struct drm_device *dev)
	connector->interlace_allowed = 0;
	connector->doublescan_allowed = 0;

	drm_sysfs_connector_add(connector);
	drm_connector_register(connector);

	connector->polled = DRM_CONNECTOR_POLL_CONNECT;

+1 −1
Original line number Diff line number Diff line
@@ -328,7 +328,7 @@ int ptn3460_init(struct drm_device *dev, struct drm_encoder *encoder,
	}
	drm_connector_helper_add(&ptn_bridge->connector,
			&ptn3460_connector_helper_funcs);
	drm_sysfs_connector_add(&ptn_bridge->connector);
	drm_connector_register(&ptn_bridge->connector);
	drm_mode_connector_attach_encoder(&ptn_bridge->connector, encoder);

	return 0;
+29 −1
Original line number Diff line number Diff line
@@ -920,6 +920,34 @@ void drm_connector_cleanup(struct drm_connector *connector)
}
EXPORT_SYMBOL(drm_connector_cleanup);

/**
 * drm_connector_register - register a connector
 * @connector: the connector to register
 *
 * Register userspace interfaces for a connector
 *
 * Returns:
 * Zero on success, error code on failure.
 */
int drm_connector_register(struct drm_connector *connector)
{
	return drm_sysfs_connector_add(connector);
}
EXPORT_SYMBOL(drm_connector_register);

/**
 * drm_connector_unregister - unregister a connector
 * @connector: the connector to unregister
 *
 * Unregister userspace interfaces for a connector
 */
void drm_connector_unregister(struct drm_connector *connector)
{
	drm_sysfs_connector_remove(connector);
}
EXPORT_SYMBOL(drm_connector_unregister);


/**
 * drm_connector_unplug_all - unregister connector userspace interfaces
 * @dev: drm device
@@ -934,7 +962,7 @@ void drm_connector_unplug_all(struct drm_device *dev)

	/* taking the mode config mutex ends up in a clash with sysfs */
	list_for_each_entry(connector, &dev->mode_config.connector_list, head)
		drm_sysfs_connector_remove(connector);
		drm_connector_unregister(connector);

}
EXPORT_SYMBOL(drm_connector_unplug_all);
Loading