forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-06 08f87f769b595151be1afeff53e144f543faa614
kernel/drivers/media/platform/sti/bdisp/bdisp-v4l2.c
....@@ -499,7 +499,7 @@
499499 {
500500 struct bdisp_ctx *ctx = q->drv_priv;
501501 struct vb2_v4l2_buffer *buf;
502
- int ret = pm_runtime_get_sync(ctx->bdisp_dev->dev);
502
+ int ret = pm_runtime_resume_and_get(ctx->bdisp_dev->dev);
503503
504504 if (ret < 0) {
505505 dev_err(ctx->bdisp_dev->dev, "failed to set runtime PM\n");
....@@ -687,15 +687,10 @@
687687 struct bdisp_ctx *ctx = fh_to_ctx(fh);
688688 struct bdisp_dev *bdisp = ctx->bdisp_dev;
689689
690
- strlcpy(cap->driver, bdisp->pdev->name, sizeof(cap->driver));
691
- strlcpy(cap->card, bdisp->pdev->name, sizeof(cap->card));
690
+ strscpy(cap->driver, bdisp->pdev->name, sizeof(cap->driver));
691
+ strscpy(cap->card, bdisp->pdev->name, sizeof(cap->card));
692692 snprintf(cap->bus_info, sizeof(cap->bus_info), "platform:%s%d",
693693 BDISP_NAME, bdisp->id);
694
-
695
- cap->device_caps = V4L2_CAP_STREAMING | V4L2_CAP_VIDEO_M2M;
696
-
697
- cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
698
-
699694 return 0;
700695 }
701696
....@@ -1058,6 +1053,7 @@
10581053 bdisp->vdev.lock = &bdisp->lock;
10591054 bdisp->vdev.vfl_dir = VFL_DIR_M2M;
10601055 bdisp->vdev.v4l2_dev = &bdisp->v4l2_dev;
1056
+ bdisp->vdev.device_caps = V4L2_CAP_STREAMING | V4L2_CAP_VIDEO_M2M;
10611057 snprintf(bdisp->vdev.name, sizeof(bdisp->vdev.name), "%s.%d",
10621058 BDISP_NAME, bdisp->id);
10631059
....@@ -1070,7 +1066,7 @@
10701066 return PTR_ERR(bdisp->m2m.m2m_dev);
10711067 }
10721068
1073
- ret = video_register_device(&bdisp->vdev, VFL_TYPE_GRABBER, -1);
1069
+ ret = video_register_device(&bdisp->vdev, VFL_TYPE_VIDEO, -1);
10741070 if (ret) {
10751071 dev_err(bdisp->dev,
10761072 "%s(): failed to register video device\n", __func__);
....@@ -1278,6 +1274,8 @@
12781274 if (!IS_ERR(bdisp->clock))
12791275 clk_unprepare(bdisp->clock);
12801276
1277
+ destroy_workqueue(bdisp->work_queue);
1278
+
12811279 dev_dbg(&pdev->dev, "%s driver unloaded\n", pdev->name);
12821280
12831281 return 0;
....@@ -1321,20 +1319,22 @@
13211319 bdisp->regs = devm_ioremap_resource(dev, res);
13221320 if (IS_ERR(bdisp->regs)) {
13231321 dev_err(dev, "failed to get regs\n");
1324
- return PTR_ERR(bdisp->regs);
1322
+ ret = PTR_ERR(bdisp->regs);
1323
+ goto err_wq;
13251324 }
13261325
13271326 bdisp->clock = devm_clk_get(dev, BDISP_NAME);
13281327 if (IS_ERR(bdisp->clock)) {
13291328 dev_err(dev, "failed to get clock\n");
1330
- return PTR_ERR(bdisp->clock);
1329
+ ret = PTR_ERR(bdisp->clock);
1330
+ goto err_wq;
13311331 }
13321332
13331333 ret = clk_prepare(bdisp->clock);
13341334 if (ret < 0) {
13351335 dev_err(dev, "clock prepare failed\n");
13361336 bdisp->clock = ERR_PTR(-EINVAL);
1337
- return ret;
1337
+ goto err_wq;
13381338 }
13391339
13401340 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
....@@ -1360,18 +1360,14 @@
13601360 }
13611361
13621362 /* Debug */
1363
- ret = bdisp_debugfs_create(bdisp);
1364
- if (ret) {
1365
- dev_err(dev, "failed to create debugfs\n");
1366
- goto err_v4l2;
1367
- }
1363
+ bdisp_debugfs_create(bdisp);
13681364
13691365 /* Power management */
13701366 pm_runtime_enable(dev);
1371
- ret = pm_runtime_get_sync(dev);
1367
+ ret = pm_runtime_resume_and_get(dev);
13721368 if (ret < 0) {
13731369 dev_err(dev, "failed to set PM\n");
1374
- goto err_pm;
1370
+ goto err_remove;
13751371 }
13761372
13771373 /* Filters */
....@@ -1399,13 +1395,14 @@
13991395 bdisp_hw_free_filters(bdisp->dev);
14001396 err_pm:
14011397 pm_runtime_put(dev);
1398
+err_remove:
14021399 bdisp_debugfs_remove(bdisp);
1403
-err_v4l2:
14041400 v4l2_device_unregister(&bdisp->v4l2_dev);
14051401 err_clk:
14061402 if (!IS_ERR(bdisp->clock))
14071403 clk_unprepare(bdisp->clock);
1408
-
1404
+err_wq:
1405
+ destroy_workqueue(bdisp->work_queue);
14091406 return ret;
14101407 }
14111408