simple_bridge_probe() calls drm_bridge_add() Thus, drm_bridge_remove() must be called in the remove() callback. If we call devm_drm_bridge_add() instead, then drm_bridge_remove() will be called automatically at device release, and the remove() callback is no longer required. Signed-off-by: Marc Gonzalez <mgonzalez@xxxxxxxxxx> --- This patch was proposed in an abandoned patch series, but it makes sense by itself. Submit now. https://lore.kernel.org/r/20240617-tdp158-v1-0-df98ef7dec6d@xxxxxxxxxx --- drivers/gpu/drm/bridge/simple-bridge.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/drivers/gpu/drm/bridge/simple-bridge.c b/drivers/gpu/drm/bridge/simple-bridge.c index 5813a2c4fc5ee..dbe58f5707f08 100644 --- a/drivers/gpu/drm/bridge/simple-bridge.c +++ b/drivers/gpu/drm/bridge/simple-bridge.c @@ -175,7 +175,6 @@ static int simple_bridge_probe(struct platform_device *pdev) sbridge = devm_kzalloc(&pdev->dev, sizeof(*sbridge), GFP_KERNEL); if (!sbridge) return -ENOMEM; - platform_set_drvdata(pdev, sbridge); sbridge->info = of_device_get_match_data(&pdev->dev); @@ -213,16 +212,7 @@ static int simple_bridge_probe(struct platform_device *pdev) sbridge->bridge.of_node = pdev->dev.of_node; sbridge->bridge.timings = sbridge->info->timings; - drm_bridge_add(&sbridge->bridge); - - return 0; -} - -static void simple_bridge_remove(struct platform_device *pdev) -{ - struct simple_bridge *sbridge = platform_get_drvdata(pdev); - - drm_bridge_remove(&sbridge->bridge); + return devm_drm_bridge_add(&pdev->dev, &sbridge->bridge); } /* @@ -299,7 +289,6 @@ MODULE_DEVICE_TABLE(of, simple_bridge_match); static struct platform_driver simple_bridge_driver = { .probe = simple_bridge_probe, - .remove_new = simple_bridge_remove, .driver = { .name = "simple-bridge", .of_match_table = simple_bridge_match, --- base-commit: 17b591a4a192a8a11faad30520b8f6a9137ac514 change-id: 20240618-devm-simple-bridge-9e163fece192 Best regards, -- Marc Gonzalez <mgonzalez@xxxxxxxxxx>