From: Jani Nikula <jani.nikula@linux.intel.com>
To: Thomas Zimmermann <tzimmermann@suse.de>,
Maxime Ripard <maxime@cerno.tech>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Daniel Vetter <daniel.vetter@intel.com>,
David Airlie <airlied@linux.ie>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v2 08/68] drm/connector: Introduce drmm_connector_init_with_ddc
Date: Tue, 28 Jun 2022 17:05:28 +0300 [thread overview]
Message-ID: <87h744rihj.fsf@intel.com> (raw)
In-Reply-To: <473edc93-e60d-6230-33a4-1bf224373a0a@suse.de>
On Tue, 28 Jun 2022, Thomas Zimmermann <tzimmermann@suse.de> wrote:
> 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@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.
FWIW I really dislike the "_with_ddc" variant as a function name. Like,
what if you add another thing you'd need to pass in at init. Add
functions "_with_ddc_and_foo" and "_with_foo", and so on.
I'd take the churn to convert to drm_connector_init() and
drmm_connector_init() only.
BR,
Jani.
>
> 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);
--
Jani Nikula, Intel Open Source Graphics Center
next prev parent reply other threads:[~2022-06-28 14:05 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-22 14:31 [PATCH v2 00/68] drm/vc4: Fix hotplug for vc4 Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 01/68] drm/mipi-dsi: Detach devices when removing the host Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 02/68] drm/crtc: Introduce drmm_crtc_init_with_planes Maxime Ripard
2022-06-22 18:37 ` kernel test robot
2022-06-28 8:54 ` Thomas Zimmermann
2022-06-22 14:31 ` [PATCH v2 03/68] drm/encoder: Introduce drmm_encoder_init Maxime Ripard
2022-06-22 19:38 ` kernel test robot
2022-06-28 8:55 ` Thomas Zimmermann
2022-06-22 14:31 ` [PATCH v2 04/68] drm/connector: Reorder headers Maxime Ripard
2022-06-24 19:21 ` Sam Ravnborg
2022-06-22 14:31 ` [PATCH v2 05/68] drm/connector: Mention the cleanup after drm_connector_init Maxime Ripard
2022-06-24 19:25 ` Sam Ravnborg
2022-06-22 14:31 ` [PATCH v2 06/68] drm/connector: Clarify when drm_connector_unregister is needed Maxime Ripard
2022-06-24 19:25 ` Sam Ravnborg
2022-06-22 14:31 ` [PATCH v2 07/68] drm/connector: Introduce drmm_connector_init Maxime Ripard
2022-06-24 19:26 ` Sam Ravnborg
2022-06-22 14:31 ` [PATCH v2 08/68] drm/connector: Introduce drmm_connector_init_with_ddc Maxime Ripard
2022-06-24 19:26 ` Sam Ravnborg
2022-06-28 9:00 ` Thomas Zimmermann
2022-06-28 14:05 ` Jani Nikula [this message]
2022-06-22 14:31 ` [PATCH v2 09/68] drm/bridge: panel: Introduce drmm_panel_bridge_add Maxime Ripard
2022-06-24 19:27 ` Sam Ravnborg
2022-06-22 14:31 ` [PATCH v2 10/68] drm/bridge: panel: Introduce drmm_of_get_bridge Maxime Ripard
2022-06-24 19:31 ` Sam Ravnborg
2022-06-22 14:31 ` [PATCH v2 11/68] drm/vc4: drv: Call component_unbind_all() Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 12/68] drm/vc4: drv: Use drm_dev_unplug Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 13/68] drm/vc4: crtc: Create vblank reporting function Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 14/68] drm/vc4: hvs: Protect device resources after removal Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 15/68] drm/vc4: hvs: Remove planes currently allocated before taking down Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 16/68] drm/vc4: plane: Take possible_crtcs as an argument Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 17/68] drm/vc4: crtc: Remove manual plane removal on error Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 18/68] drm/vc4: plane: Switch to drmm_universal_plane_alloc() Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 19/68] drm/vc4: crtc: Move debugfs_name to crtc_data Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 20/68] drm/vc4: crtc: Switch to drmm_kzalloc Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 21/68] drm/vc4: crtc: Switch to DRM-managed CRTC initialization Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 22/68] drm/vc4: dpi: Remove vc4_dev dpi pointer Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 23/68] drm/vc4: dpi: Embed DRM structures into the private structure Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 24/68] drm/vc4: dpi: Switch to drmm_kzalloc Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 25/68] drm/vc4: dpi: Return an error if we can't enable our clock Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 26/68] drm/vc4: dpi: Remove unnecessary drm_of_panel_bridge_remove call Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 27/68] drm/vc4: dpi: Add action to disable the clock Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 28/68] drm/vc4: dpi: Switch to DRM-managed encoder initialization Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 29/68] drm/vc4: dpi: Switch to drmm_of_get_bridge Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 30/68] drm/vc4: dpi: Protect device resources Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 31/68] drm/vc4: dsi: Embed DRM structures into the private structure Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 32/68] drm/vc4: dsi: Switch to DRM-managed encoder initialization Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 33/68] drm/vc4: dsi: Switch to drmm_of_get_bridge Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 34/68] drm/vc4: dsi: Fix the driver structure lifetime Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 35/68] drm/vc4: dsi: Switch to devm_pm_runtime_enable Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 36/68] drm/vc4: hdmi: Switch to drmm_kzalloc Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 37/68] drm/vc4: hdmi: Remove call to drm_connector_unregister() Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 38/68] drm/vc4: hdmi: Switch to DRM-managed encoder initialization Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 39/68] drm/vc4: hdmi: Switch to DRM-managed connector initialization Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 40/68] drm/vc4: hdmi: Switch to device-managed ALSA initialization Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 41/68] drm/vc4: hdmi: Switch to device-managed CEC initialization Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 42/68] drm/vc4: hdmi: Use a device-managed action for DDC Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 43/68] drm/vc4: hdmi: Switch to DRM-managed kfree to build regsets Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 44/68] drm/vc4: hdmi: Use devm to register hotplug interrupts Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 45/68] drm/vc4: hdmi: Move audio structure offset checks Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 46/68] drm/vc4: hdmi: Protect device resources after removal Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 47/68] drm/vc4: hdmi: Switch to devm_pm_runtime_enable Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 48/68] drm/vc4: txp: Remove vc4_dev txp pointer Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 49/68] drm/vc4: txp: Remove duplicate regset Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 50/68] drm/vc4: txp: Switch to drmm_kzalloc Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 51/68] drm/vc4: txp: Remove call to drm_connector_unregister() Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 52/68] drm/vc4: txp: Protect device resources Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 53/68] drm/vc4: vec: Remove vc4_dev vec pointer Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 54/68] drm/vc4: vec: Embed DRM structures into the private structure Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 55/68] drm/vc4: vec: Switch to drmm_kzalloc Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 56/68] drm/vc4: vec: Remove call to drm_connector_unregister() Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 57/68] drm/vc4: vec: Switch to DRM-managed encoder initialization Maxime Ripard
2022-06-22 14:31 ` [PATCH v2 58/68] drm/vc4: vec: Switch to DRM-managed connector initialization Maxime Ripard
2022-06-22 14:32 ` [PATCH v2 59/68] drm/vc4: vec: Protect device resources after removal Maxime Ripard
2022-06-22 14:32 ` [PATCH v2 60/68] drm/vc4: vec: Switch to devm_pm_runtime_enable Maxime Ripard
2022-06-22 14:32 ` [PATCH v2 61/68] drm/vc4: debugfs: Protect device resources Maxime Ripard
2022-06-22 14:32 ` [PATCH v2 62/68] drm/vc4: debugfs: Return an error on failure Maxime Ripard
2022-06-22 14:32 ` [PATCH v2 63/68] drm/vc4: debugfs: Simplify debugfs registration Maxime Ripard
2022-06-22 14:32 ` [PATCH v2 64/68] drm/vc4: Switch to drmm_mutex_init Maxime Ripard
2022-06-22 14:32 ` [PATCH v2 65/68] drm/vc4: perfmon: Add missing mutex_destroy Maxime Ripard
2022-06-22 14:32 ` [PATCH v2 66/68] drm/vc4: v3d: Stop disabling interrupts Maxime Ripard
2022-06-22 14:32 ` [PATCH v2 67/68] drm/vc4: v3d: Rework the runtime_pm setup Maxime Ripard
2022-06-22 14:32 ` [PATCH v2 68/68] drm/vc4: v3d: Switch to devm_pm_runtime_enable Maxime Ripard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87h744rihj.fsf@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=airlied@linux.ie \
--cc=daniel.vetter@intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=maxime@cerno.tech \
--cc=tzimmermann@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox