Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media

Pull media fixes from Mauro Carvalho Chehab:
"Some driver fixes for s5p/exynos (mostly race fixes)"

* 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media:
[media] s5p-mfc: Handle multi-frame input buffer
[media] s5p-mfc: Bug fix of timestamp/timecode copy mechanism
[media] exynos-gsc: Add missing video device vfl_dir flag initialization
[media] exynos-gsc: Fix settings for input and output image RGB type
[media] exynos-gsc: Don't use mutex_lock_interruptible() in device release()
[media] fimc-lite: Don't use mutex_lock_interruptible() in device release()
[media] s5p-fimc: Don't use mutex_lock_interruptible() in device release()
[media] s5p-fimc: Prevent race conditions during subdevs registration

+27 -25
+2 -2
drivers/media/platform/exynos-gsc/gsc-m2m.c
··· 657 657 pr_debug("pid: %d, state: 0x%lx, refcnt= %d", 658 658 task_pid_nr(current), gsc->state, gsc->m2m.refcnt); 659 659 660 - if (mutex_lock_interruptible(&gsc->lock)) 661 - return -ERESTARTSYS; 660 + mutex_lock(&gsc->lock); 662 661 663 662 v4l2_m2m_ctx_release(ctx->m2m_ctx); 664 663 gsc_ctrls_delete(ctx); ··· 731 732 gsc->vdev.ioctl_ops = &gsc_m2m_ioctl_ops; 732 733 gsc->vdev.release = video_device_release_empty; 733 734 gsc->vdev.lock = &gsc->lock; 735 + gsc->vdev.vfl_dir = VFL_DIR_M2M; 734 736 snprintf(gsc->vdev.name, sizeof(gsc->vdev.name), "%s.%d:m2m", 735 737 GSC_MODULE_NAME, gsc->id); 736 738
+8 -8
drivers/media/platform/exynos-gsc/gsc-regs.h
··· 40 40 #define GSC_IN_ROT_YFLIP (2 << 16) 41 41 #define GSC_IN_ROT_XFLIP (1 << 16) 42 42 #define GSC_IN_RGB_TYPE_MASK (3 << 14) 43 - #define GSC_IN_RGB_HD_WIDE (3 << 14) 44 - #define GSC_IN_RGB_HD_NARROW (2 << 14) 45 - #define GSC_IN_RGB_SD_WIDE (1 << 14) 46 - #define GSC_IN_RGB_SD_NARROW (0 << 14) 43 + #define GSC_IN_RGB_HD_NARROW (3 << 14) 44 + #define GSC_IN_RGB_HD_WIDE (2 << 14) 45 + #define GSC_IN_RGB_SD_NARROW (1 << 14) 46 + #define GSC_IN_RGB_SD_WIDE (0 << 14) 47 47 #define GSC_IN_YUV422_1P_ORDER_MASK (1 << 13) 48 48 #define GSC_IN_YUV422_1P_ORDER_LSB_Y (0 << 13) 49 49 #define GSC_IN_YUV422_1P_OEDER_LSB_C (1 << 13) ··· 85 85 #define GSC_OUT_GLOBAL_ALPHA_MASK (0xff << 24) 86 86 #define GSC_OUT_GLOBAL_ALPHA(x) ((x) << 24) 87 87 #define GSC_OUT_RGB_TYPE_MASK (3 << 10) 88 - #define GSC_OUT_RGB_HD_NARROW (3 << 10) 89 - #define GSC_OUT_RGB_HD_WIDE (2 << 10) 90 - #define GSC_OUT_RGB_SD_NARROW (1 << 10) 91 - #define GSC_OUT_RGB_SD_WIDE (0 << 10) 88 + #define GSC_OUT_RGB_HD_WIDE (3 << 10) 89 + #define GSC_OUT_RGB_HD_NARROW (2 << 10) 90 + #define GSC_OUT_RGB_SD_WIDE (1 << 10) 91 + #define GSC_OUT_RGB_SD_NARROW (0 << 10) 92 92 #define GSC_OUT_YUV422_1P_ORDER_MASK (1 << 9) 93 93 #define GSC_OUT_YUV422_1P_ORDER_LSB_Y (0 << 9) 94 94 #define GSC_OUT_YUV422_1P_OEDER_LSB_C (1 << 9)
+7 -3
drivers/media/platform/s5p-fimc/fimc-capture.c
··· 556 556 557 557 dbg("pid: %d, state: 0x%lx", task_pid_nr(current), fimc->state); 558 558 559 - if (mutex_lock_interruptible(&fimc->lock)) 560 - return -ERESTARTSYS; 559 + mutex_lock(&fimc->lock); 561 560 562 561 if (--fimc->vid_cap.refcnt == 0) { 563 562 clear_bit(ST_CAPT_BUSY, &fimc->state); ··· 1773 1774 if (ret) 1774 1775 return ret; 1775 1776 1777 + fimc->pipeline_ops = v4l2_get_subdev_hostdata(sd); 1778 + 1776 1779 ret = fimc_register_capture_device(fimc, sd->v4l2_dev); 1777 - if (ret) 1780 + if (ret) { 1778 1781 fimc_unregister_m2m_device(fimc); 1782 + fimc->pipeline_ops = NULL; 1783 + } 1779 1784 1780 1785 return ret; 1781 1786 } ··· 1796 1793 if (video_is_registered(&fimc->vid_cap.vfd)) { 1797 1794 video_unregister_device(&fimc->vid_cap.vfd); 1798 1795 media_entity_cleanup(&fimc->vid_cap.vfd.entity); 1796 + fimc->pipeline_ops = NULL; 1799 1797 } 1800 1798 kfree(fimc->vid_cap.ctx); 1801 1799 fimc->vid_cap.ctx = NULL;
+4 -2
drivers/media/platform/s5p-fimc/fimc-lite.c
··· 491 491 struct fimc_lite *fimc = video_drvdata(file); 492 492 int ret; 493 493 494 - if (mutex_lock_interruptible(&fimc->lock)) 495 - return -ERESTARTSYS; 494 + mutex_lock(&fimc->lock); 496 495 497 496 if (--fimc->ref_count == 0 && fimc->out_path == FIMC_IO_DMA) { 498 497 clear_bit(ST_FLITE_IN_USE, &fimc->state); ··· 1262 1263 return ret; 1263 1264 1264 1265 video_set_drvdata(vfd, fimc); 1266 + fimc->pipeline_ops = v4l2_get_subdev_hostdata(sd); 1265 1267 1266 1268 ret = video_register_device(vfd, VFL_TYPE_GRABBER, -1); 1267 1269 if (ret < 0) { 1268 1270 media_entity_cleanup(&vfd->entity); 1271 + fimc->pipeline_ops = NULL; 1269 1272 return ret; 1270 1273 } 1271 1274 ··· 1286 1285 if (video_is_registered(&fimc->vfd)) { 1287 1286 video_unregister_device(&fimc->vfd); 1288 1287 media_entity_cleanup(&fimc->vfd.entity); 1288 + fimc->pipeline_ops = NULL; 1289 1289 } 1290 1290 } 1291 1291
+1 -2
drivers/media/platform/s5p-fimc/fimc-m2m.c
··· 718 718 dbg("pid: %d, state: 0x%lx, refcnt= %d", 719 719 task_pid_nr(current), fimc->state, fimc->m2m.refcnt); 720 720 721 - if (mutex_lock_interruptible(&fimc->lock)) 722 - return -ERESTARTSYS; 721 + mutex_lock(&fimc->lock); 723 722 724 723 v4l2_m2m_ctx_release(ctx->m2m_ctx); 725 724 fimc_ctrls_delete(ctx);
+2 -2
drivers/media/platform/s5p-fimc/fimc-mdevice.c
··· 352 352 353 353 sd = &fimc->vid_cap.subdev; 354 354 sd->grp_id = FIMC_GROUP_ID; 355 + v4l2_set_subdev_hostdata(sd, (void *)&fimc_pipeline_ops); 355 356 356 357 ret = v4l2_device_register_subdev(&fmd->v4l2_dev, sd); 357 358 if (ret) { ··· 361 360 return ret; 362 361 } 363 362 364 - fimc->pipeline_ops = &fimc_pipeline_ops; 365 363 fmd->fimc[fimc->id] = fimc; 366 364 return 0; 367 365 } ··· 375 375 return 0; 376 376 377 377 fimc->subdev.grp_id = FLITE_GROUP_ID; 378 + v4l2_set_subdev_hostdata(&fimc->subdev, (void *)&fimc_pipeline_ops); 378 379 379 380 ret = v4l2_device_register_subdev(&fmd->v4l2_dev, &fimc->subdev); 380 381 if (ret) { ··· 385 384 return ret; 386 385 } 387 386 388 - fimc->pipeline_ops = &fimc_pipeline_ops; 389 387 fmd->fimc_lite[fimc->index] = fimc; 390 388 return 0; 391 389 }
+2 -5
drivers/media/platform/s5p-mfc/s5p_mfc.c
··· 381 381 ctx->consumed_stream += s5p_mfc_hw_call(dev->mfc_ops, 382 382 get_consumed_stream, dev); 383 383 if (ctx->codec_mode != S5P_MFC_CODEC_H264_DEC && 384 - s5p_mfc_hw_call(dev->mfc_ops, 385 - get_dec_frame_type, dev) == 386 - S5P_FIMV_DECODE_FRAME_P_FRAME 387 - && ctx->consumed_stream + STUFF_BYTE < 388 - src_buf->b->v4l2_planes[0].bytesused) { 384 + ctx->consumed_stream + STUFF_BYTE < 385 + src_buf->b->v4l2_planes[0].bytesused) { 389 386 /* Run MFC again on the same buffer */ 390 387 mfc_debug(2, "Running again the same buffer\n"); 391 388 ctx->after_packed_pb = 1;
+1 -1
drivers/media/platform/s5p-mfc/s5p_mfc_opr_v6.c
··· 1762 1762 1763 1763 int s5p_mfc_get_dec_y_adr_v6(struct s5p_mfc_dev *dev) 1764 1764 { 1765 - return mfc_read(dev, S5P_FIMV_D_DISPLAY_LUMA_ADDR_V6); 1765 + return mfc_read(dev, S5P_FIMV_D_DECODED_LUMA_ADDR_V6); 1766 1766 } 1767 1767 1768 1768 int s5p_mfc_get_dspl_status_v6(struct s5p_mfc_dev *dev)