diff options
| author | Luca Ceresoli <luca.ceresoli@bootlin.com> | 2025-03-26 18:47:35 +0100 |
|---|---|---|
| committer | Louis Chauvet <louis.chauvet@bootlin.com> | 2025-04-07 11:38:04 +0200 |
| commit | 0cc6aadd7fc1e629b715ea3d1ba537ef2da95eec (patch) | |
| tree | af1b0976d36fcd2b1645fa4b5d03da4b5c0a960e /drivers/gpu | |
| parent | 81feddc12613567d8206a9697d068711140e9c47 (diff) | |
| download | linux-0cc6aadd7fc1e629b715ea3d1ba537ef2da95eec.tar.gz linux-0cc6aadd7fc1e629b715ea3d1ba537ef2da95eec.zip | |
drm/bridge: add devm_drm_bridge_alloc()
Add a macro to allocate and initialize a DRM bridge embedded within a
private driver struct.
Compared to current practice, which is based on [devm_]kzalloc() allocation
followed by open-coded initialization of fields, this allows to have a
common and explicit API to allocate and initialize DRM bridges.
Besides being useful to consolidate bridge driver code, this is a
fundamental step in preparation for adding dynamic lifetime to bridges
based on refcount.
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250326-drm-bridge-refcount-v9-1-5e0661fe1f84@bootlin.com
Signed-off-by: Louis Chauvet <louis.chauvet@bootlin.com>
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/drm_bridge.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index ef98e21dc593..84fa1a1330cb 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -199,6 +199,28 @@ static DEFINE_MUTEX(bridge_lock); static LIST_HEAD(bridge_list); +void *__devm_drm_bridge_alloc(struct device *dev, size_t size, size_t offset, + const struct drm_bridge_funcs *funcs) +{ + void *container; + struct drm_bridge *bridge; + + if (!funcs) { + dev_warn(dev, "Missing funcs pointer\n"); + return ERR_PTR(-EINVAL); + } + + container = devm_kzalloc(dev, size, GFP_KERNEL); + if (!container) + return ERR_PTR(-ENOMEM); + + bridge = container + offset; + bridge->funcs = funcs; + + return container; +} +EXPORT_SYMBOL(__devm_drm_bridge_alloc); + /** * drm_bridge_add - add the given bridge to the global bridge list * |
