summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorLudovic Desroches <ludovic.desroches@microchip.com>2025-12-18 14:25:59 +0100
committerManikandan Muralidharan <manikandan.m@microchip.com>2026-01-20 15:52:47 +0530
commit950cba9870f98a6db932f6b914f2d4786c87236c (patch)
treec712cec5cff9cbd5fe8d4b8d26c824d23286053e /drivers/gpu/drm
parentce76a267341cb306016beedb24a205e892613716 (diff)
drm/atmel-hlcdc: use managed device resources for the display controller
Take benefit of managed device resources to reduce the risk of memory leak and to simplify error paths. Signed-off-by: Ludovic Desroches <ludovic.desroches@microchip.com> Reviewed-by: Manikandan Muralidharan <manikandan.m@microchip.com> Link: https://patch.msgid.link/20251218-lcd_cleanup_mainline-v2-1-df837aba878f@microchip.com Signed-off-by: Manikandan Muralidharan <manikandan.m@microchip.com>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c25
-rw-r--r--drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h1
2 files changed, 13 insertions, 13 deletions
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
index dd70894c8f38..8ed029381c55 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
@@ -751,11 +751,16 @@ static int atmel_hlcdc_dc_modeset_init(struct drm_device *dev)
return 0;
}
+static struct atmel_hlcdc_dc *atmel_hlcdc_dc_of_dev(struct drm_device *dev)
+{
+ return container_of(dev, struct atmel_hlcdc_dc, dev);
+}
+
static int atmel_hlcdc_dc_load(struct drm_device *dev)
{
struct platform_device *pdev = to_platform_device(dev->dev);
const struct of_device_id *match;
- struct atmel_hlcdc_dc *dc;
+ struct atmel_hlcdc_dc *dc = atmel_hlcdc_dc_of_dev(dev);
int ret;
match = of_match_node(atmel_hlcdc_of_match, dev->dev->parent->of_node);
@@ -769,10 +774,6 @@ static int atmel_hlcdc_dc_load(struct drm_device *dev)
return -EINVAL;
}
- dc = devm_kzalloc(dev->dev, sizeof(*dc), GFP_KERNEL);
- if (!dc)
- return -ENOMEM;
-
dc->desc = match->data;
dc->hlcdc = dev_get_drvdata(dev->dev->parent);
dev->dev_private = dc;
@@ -853,16 +854,18 @@ static const struct drm_driver atmel_hlcdc_dc_driver = {
static int atmel_hlcdc_dc_drm_probe(struct platform_device *pdev)
{
+ struct atmel_hlcdc_dc *dc;
struct drm_device *ddev;
int ret;
- ddev = drm_dev_alloc(&atmel_hlcdc_dc_driver, &pdev->dev);
- if (IS_ERR(ddev))
- return PTR_ERR(ddev);
+ dc = devm_drm_dev_alloc(&pdev->dev, &atmel_hlcdc_dc_driver, struct atmel_hlcdc_dc, dev);
+ if (IS_ERR(dc))
+ return PTR_ERR(dc);
+ ddev = &dc->dev;
ret = atmel_hlcdc_dc_load(ddev);
if (ret)
- goto err_put;
+ return ret;
ret = drm_dev_register(ddev, 0);
if (ret)
@@ -875,9 +878,6 @@ static int atmel_hlcdc_dc_drm_probe(struct platform_device *pdev)
err_unload:
atmel_hlcdc_dc_unload(ddev);
-err_put:
- drm_dev_put(ddev);
-
return ret;
}
@@ -887,7 +887,6 @@ static void atmel_hlcdc_dc_drm_remove(struct platform_device *pdev)
drm_dev_unregister(ddev);
atmel_hlcdc_dc_unload(ddev);
- drm_dev_put(ddev);
}
static void atmel_hlcdc_dc_drm_shutdown(struct platform_device *pdev)
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
index 53d47f01db0b..26b26185cf34 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
@@ -350,6 +350,7 @@ struct atmel_hlcdc_dc {
struct dma_pool *dscrpool;
struct atmel_hlcdc *hlcdc;
struct drm_crtc *crtc;
+ struct drm_device dev;
struct atmel_hlcdc_layer *layers[ATMEL_HLCDC_MAX_LAYERS];
struct {
u32 imr;