forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
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;
....@@ -1312,6 +1310,8 @@
13121310 init_waitqueue_head(&bdisp->irq_queue);
13131311 INIT_DELAYED_WORK(&bdisp->timeout_work, bdisp_irq_timeout);
13141312 bdisp->work_queue = create_workqueue(BDISP_NAME);
1313
+ if (!bdisp->work_queue)
1314
+ return -ENOMEM;
13151315
13161316 spin_lock_init(&bdisp->slock);
13171317 mutex_init(&bdisp->lock);
....@@ -1321,20 +1321,22 @@
13211321 bdisp->regs = devm_ioremap_resource(dev, res);
13221322 if (IS_ERR(bdisp->regs)) {
13231323 dev_err(dev, "failed to get regs\n");
1324
- return PTR_ERR(bdisp->regs);
1324
+ ret = PTR_ERR(bdisp->regs);
1325
+ goto err_wq;
13251326 }
13261327
13271328 bdisp->clock = devm_clk_get(dev, BDISP_NAME);
13281329 if (IS_ERR(bdisp->clock)) {
13291330 dev_err(dev, "failed to get clock\n");
1330
- return PTR_ERR(bdisp->clock);
1331
+ ret = PTR_ERR(bdisp->clock);
1332
+ goto err_wq;
13311333 }
13321334
13331335 ret = clk_prepare(bdisp->clock);
13341336 if (ret < 0) {
13351337 dev_err(dev, "clock prepare failed\n");
13361338 bdisp->clock = ERR_PTR(-EINVAL);
1337
- return ret;
1339
+ goto err_wq;
13381340 }
13391341
13401342 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
....@@ -1360,18 +1362,14 @@
13601362 }
13611363
13621364 /* Debug */
1363
- ret = bdisp_debugfs_create(bdisp);
1364
- if (ret) {
1365
- dev_err(dev, "failed to create debugfs\n");
1366
- goto err_v4l2;
1367
- }
1365
+ bdisp_debugfs_create(bdisp);
13681366
13691367 /* Power management */
13701368 pm_runtime_enable(dev);
1371
- ret = pm_runtime_get_sync(dev);
1369
+ ret = pm_runtime_resume_and_get(dev);
13721370 if (ret < 0) {
13731371 dev_err(dev, "failed to set PM\n");
1374
- goto err_pm;
1372
+ goto err_remove;
13751373 }
13761374
13771375 /* Filters */
....@@ -1399,13 +1397,14 @@
13991397 bdisp_hw_free_filters(bdisp->dev);
14001398 err_pm:
14011399 pm_runtime_put(dev);
1400
+err_remove:
14021401 bdisp_debugfs_remove(bdisp);
1403
-err_v4l2:
14041402 v4l2_device_unregister(&bdisp->v4l2_dev);
14051403 err_clk:
14061404 if (!IS_ERR(bdisp->clock))
14071405 clk_unprepare(bdisp->clock);
1408
-
1406
+err_wq:
1407
+ destroy_workqueue(bdisp->work_queue);
14091408 return ret;
14101409 }
14111410