[PATCH v2 08/68] drm/connector: Introduce drmm_connector_init_with_ddc
Thomas Zimmermann
tzimmermann at suse.de
Tue Jun 28 09:00:54 UTC 2022
Hi
Am 22.06.22 um 16:31 schrieb Maxime Ripard:
> Let's create a DRM-managed variant of drm_connector_init_with_ddc that will
> take care of an action of the connector cleanup.
>
> Signed-off-by: Maxime Ripard <maxime at cerno.tech>
> ---
> drivers/gpu/drm/drm_connector.c | 74 ++++++++++++++++++++++++++++-----
> include/drm/drm_connector.h | 5 +++
> 2 files changed, 69 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> index 0fec2d87178f..076ca247c6d0 100644
> --- a/drivers/gpu/drm/drm_connector.c
> +++ b/drivers/gpu/drm/drm_connector.c
> @@ -354,6 +354,30 @@ int drm_connector_init(struct drm_device *dev,
> }
> EXPORT_SYMBOL(drm_connector_init);
>
> +typedef int (*connector_init_t)(struct drm_device *dev,
> + struct drm_connector *connector,
> + const struct drm_connector_funcs *funcs,
> + int connector_type);
> +
> +static int __drm_connector_init_with_ddc(struct drm_device *dev,
> + struct drm_connector *connector,
> + connector_init_t init_func,
> + const struct drm_connector_funcs *funcs,
> + int connector_type,
> + struct i2c_adapter *ddc)
Back in the days when drm_connector_init_with_ddc() was added, there was
a small controversy about whether we should simply extend the regular
drm_connector_init() to support the extra ddc argument. That would have
meant a lot of churn, but the idea was probably sound.
Maybe it would be better to provide a single function
drmm_connector_init() that receives a ddc argument. If the argument is
NULL, no DDC channel would be set. This would make
drmm_connector_init_with_ddc() unnnecessary.
Best regards
Thomas
> +{
> + int ret;
> +
> + ret = init_func(dev, connector, funcs, connector_type);
> + if (ret)
> + return ret;
> +
> + /* provide ddc symlink in sysfs */
> + connector->ddc = ddc;
> +
> + return ret;
> +}
> +
> /**
> * drm_connector_init_with_ddc - Init a preallocated connector
> * @dev: DRM device
> @@ -371,6 +395,10 @@ EXPORT_SYMBOL(drm_connector_init);
> *
> * Ensures that the ddc field of the connector is correctly set.
> *
> + * Note: consider using drmm_connector_init_with_ddc() instead of
> + * drm_connector_init_with_ddc() to let the DRM managed resource
> + * infrastructure take care of cleanup and deallocation.
> + *
> * Returns:
> * Zero on success, error code on failure.
> */
> @@ -380,16 +408,9 @@ int drm_connector_init_with_ddc(struct drm_device *dev,
> int connector_type,
> struct i2c_adapter *ddc)
> {
> - int ret;
> -
> - ret = drm_connector_init(dev, connector, funcs, connector_type);
> - if (ret)
> - return ret;
> -
> - /* provide ddc symlink in sysfs */
> - connector->ddc = ddc;
> -
> - return ret;
> + return __drm_connector_init_with_ddc(dev, connector,
> + drm_connector_init,
> + funcs, connector_type, ddc);
> }
> EXPORT_SYMBOL(drm_connector_init_with_ddc);
>
> @@ -443,6 +464,39 @@ int drmm_connector_init(struct drm_device *dev,
> }
> EXPORT_SYMBOL(drmm_connector_init);
>
> +/**
> + * drmm_connector_init_with_ddc - Init a preallocated connector
> + * @dev: DRM device
> + * @connector: the connector to init
> + * @funcs: callbacks for this connector
> + * @connector_type: user visible type of the connector
> + * @ddc: pointer to the associated ddc adapter
> + *
> + * Initialises a preallocated connector. Connectors should be
> + * subclassed as part of driver connector objects.
> + *
> + * Cleanup is automatically handled with a call to
> + * drm_connector_cleanup() in a DRM-managed action.
> + *
> + * The connector structure should be allocated with drmm_kzalloc().
> + *
> + * Ensures that the ddc field of the connector is correctly set.
> + *
> + * Returns:
> + * Zero on success, error code on failure.
> + */
> +int drmm_connector_init_with_ddc(struct drm_device *dev,
> + struct drm_connector *connector,
> + const struct drm_connector_funcs *funcs,
> + int connector_type,
> + struct i2c_adapter *ddc)
> +{
> + return __drm_connector_init_with_ddc(dev, connector,
> + drmm_connector_init,
> + funcs, connector_type, ddc);
> +}
> +EXPORT_SYMBOL(drmm_connector_init_with_ddc);
> +
> /**
> * drm_connector_attach_edid_property - attach edid property.
> * @connector: the connector
> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
> index 35a6b6e944b7..2565541f2c10 100644
> --- a/include/drm/drm_connector.h
> +++ b/include/drm/drm_connector.h
> @@ -1676,6 +1676,11 @@ int drmm_connector_init(struct drm_device *dev,
> struct drm_connector *connector,
> const struct drm_connector_funcs *funcs,
> int connector_type);
> +int drmm_connector_init_with_ddc(struct drm_device *dev,
> + struct drm_connector *connector,
> + const struct drm_connector_funcs *funcs,
> + int connector_type,
> + struct i2c_adapter *ddc);
> void drm_connector_attach_edid_property(struct drm_connector *connector);
> int drm_connector_register(struct drm_connector *connector);
> void drm_connector_unregister(struct drm_connector *connector);
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Ivo Totev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20220628/a8fc56d4/attachment.sig>
More information about the dri-devel
mailing list