]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: ti-vpe: cal: Decouple context and phy cleanup at remove time
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Mon, 6 Jul 2020 18:36:26 +0000 (20:36 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Sun, 19 Jul 2020 08:30:31 +0000 (10:30 +0200)
The driver happens the use the same number of CAMERARX and context, but
coupling their cleanup at remove time is wrong. To prepare for the
introduction of additional contexts, decouple the two.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Benoit Parrot <bparrot@ti.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/platform/ti-vpe/cal.c

index 03b4d5351bfde561b47033361bdc68088fab20b7..e4d8cadf7befddee4c659c6650e8b9a0710d43ae 100644 (file)
@@ -1976,6 +1976,9 @@ static int cal_ctx_v4l2_register(struct cal_ctx *ctx)
 
 static void cal_ctx_v4l2_unregister(struct cal_ctx *ctx)
 {
+       ctx_dbg(1, ctx, "unregistering %s\n",
+               video_device_node_name(&ctx->vdev));
+
        video_unregister_device(&ctx->vdev);
 }
 
@@ -2408,7 +2411,6 @@ error_camerarx:
 static int cal_remove(struct platform_device *pdev)
 {
        struct cal_dev *cal = platform_get_drvdata(pdev);
-       struct cal_ctx *ctx;
        unsigned int i;
 
        cal_dbg(1, cal, "Removing %s\n", CAL_MODULE_NAME);
@@ -2418,14 +2420,18 @@ static int cal_remove(struct platform_device *pdev)
        cal_async_notifier_unregister(cal);
 
        for (i = 0; i < ARRAY_SIZE(cal->ctx); i++) {
-               ctx = cal->ctx[i];
-               if (ctx) {
-                       ctx_dbg(1, ctx, "unregistering %s\n",
-                               video_device_node_name(&ctx->vdev));
-                       cal_ctx_v4l2_unregister(ctx);
-                       cal_camerarx_disable(ctx->phy);
-                       cal_ctx_v4l2_cleanup(ctx);
-               }
+               if (cal->ctx[i])
+                       cal_ctx_v4l2_unregister(cal->ctx[i]);
+       }
+
+       for (i = 0; i < ARRAY_SIZE(cal->phy); i++) {
+               if (cal->phy[i])
+                       cal_camerarx_disable(cal->phy[i]);
+       }
+
+       for (i = 0; i < ARRAY_SIZE(cal->ctx); i++) {
+               if (cal->ctx[i])
+                       cal_ctx_v4l2_cleanup(cal->ctx[i]);
        }
 
        v4l2_device_unregister(&cal->v4l2_dev);