Loading drivers/media/platform/msm/camera_v2/msm_buf_mgr/msm_generic_buf_mgr.c +47 −2 Original line number Diff line number Diff line Loading @@ -109,8 +109,9 @@ static void msm_buf_mngr_sd_shutdown(struct msm_buf_mngr_device *buf_mngr_dev) if (!list_empty(&buf_mngr_dev->buf_qhead)) { list_for_each_entry_safe(bufs, save, &buf_mngr_dev->buf_qhead, entry) { pr_err("%s: Error: Delete invalid bufs =%x\n", __func__, (unsigned int)bufs); pr_err("%s: Error delete invalid bufs =%x, ses_id=%d, str_id=%d, idx=%d\n", __func__, (unsigned int)bufs, bufs->session_id, bufs->stream_id, bufs->vb2_buf->v4l2_buf.index); list_del_init(&bufs->entry); kfree(bufs); } Loading @@ -118,6 +119,36 @@ static void msm_buf_mngr_sd_shutdown(struct msm_buf_mngr_device *buf_mngr_dev) spin_unlock_irqrestore(&buf_mngr_dev->buf_q_spinlock, flags); } static int msm_generic_buf_mngr_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) { int rc = 0; struct msm_buf_mngr_device *buf_mngr_dev = v4l2_get_subdevdata(sd); if (!buf_mngr_dev) { pr_err("%s buf manager device NULL\n", __func__); rc = -ENODEV; return rc; } buf_mngr_dev->msm_buf_mngr_open_cnt++; return rc; } static int msm_generic_buf_mngr_close(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) { int rc = 0; struct msm_buf_mngr_device *buf_mngr_dev = v4l2_get_subdevdata(sd); if (!buf_mngr_dev) { pr_err("%s buf manager device NULL\n", __func__); rc = -ENODEV; return rc; } buf_mngr_dev->msm_buf_mngr_open_cnt--; if (buf_mngr_dev->msm_buf_mngr_open_cnt == 0) msm_buf_mngr_sd_shutdown(buf_mngr_dev); return rc; } static long msm_buf_mngr_subdev_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { Loading @@ -141,6 +172,12 @@ static long msm_buf_mngr_subdev_ioctl(struct v4l2_subdev *sd, case VIDIOC_MSM_BUF_MNGR_PUT_BUF: rc = msm_buf_mngr_put_buf(buf_mngr_dev, argp); break; case VIDIOC_MSM_BUF_MNGR_INIT: rc = msm_generic_buf_mngr_open(sd, NULL); break; case VIDIOC_MSM_BUF_MNGR_DEINIT: rc = msm_generic_buf_mngr_close(sd, NULL); break; case MSM_SD_SHUTDOWN: msm_buf_mngr_sd_shutdown(buf_mngr_dev); break; Loading @@ -154,6 +191,12 @@ static struct v4l2_subdev_core_ops msm_buf_mngr_subdev_core_ops = { .ioctl = msm_buf_mngr_subdev_ioctl, }; static const struct v4l2_subdev_internal_ops msm_generic_buf_mngr_subdev_internal_ops = { .open = msm_generic_buf_mngr_open, .close = msm_generic_buf_mngr_close, }; static const struct v4l2_subdev_ops msm_buf_mngr_subdev_ops = { .core = &msm_buf_mngr_subdev_core_ops, }; Loading Loading @@ -184,6 +227,8 @@ static int __init msm_buf_mngr_init(void) msm_buf_mngr_dev->subdev.sd.entity.type = MEDIA_ENT_T_V4L2_SUBDEV; msm_buf_mngr_dev->subdev.sd.entity.group_id = MSM_CAMERA_SUBDEV_BUF_MNGR; msm_buf_mngr_dev->subdev.sd.internal_ops = &msm_generic_buf_mngr_subdev_internal_ops; msm_buf_mngr_dev->subdev.close_seq = MSM_SD_CLOSE_4TH_CATEGORY; rc = msm_sd_register(&msm_buf_mngr_dev->subdev); if (rc != 0) { Loading drivers/media/platform/msm/camera_v2/msm_buf_mgr/msm_generic_buf_mgr.h +1 −0 Original line number Diff line number Diff line Loading @@ -36,5 +36,6 @@ struct msm_buf_mngr_device { spinlock_t buf_q_spinlock; struct msm_sd_subdev subdev; struct msm_sd_req_vb2_q vb2_ops; uint32_t msm_buf_mngr_open_cnt; }; #endif drivers/media/platform/msm/camera_v2/pproc/cpp/msm_cpp.c +18 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,9 @@ #define CPP_CLK_INFO_MAX 16 static int msm_cpp_buffer_ops(struct cpp_device *cpp_dev, uint32_t buff_mgr_ops, struct msm_buf_mngr_info *buff_mgr_info); #if CONFIG_MSM_CPP_DBG #define CPP_DBG(fmt, args...) pr_err(fmt, ##args) #else Loading Loading @@ -739,6 +742,14 @@ static int cpp_init_hardware(struct cpp_device *cpp_dev) goto req_irq_fail; } cpp_dev->buf_mgr_subdev = msm_buf_mngr_get_subdev(); rc = msm_cpp_buffer_ops(cpp_dev, VIDIOC_MSM_BUF_MNGR_INIT, NULL); if (rc < 0) { pr_err("buf mngr init failed\n"); free_irq(cpp_dev->irq->start, cpp_dev); goto req_irq_fail; } } cpp_dev->hw_info.cpp_hw_version = Loading Loading @@ -783,7 +794,14 @@ bus_scale_register_failed: static void cpp_release_hardware(struct cpp_device *cpp_dev) { int32_t rc; if (cpp_dev->state != CPP_STATE_BOOT) { rc = msm_cpp_buffer_ops(cpp_dev, VIDIOC_MSM_BUF_MNGR_DEINIT, NULL); if (rc < 0) { pr_err("error in buf mngr deinit\n"); rc = -EINVAL; } free_irq(cpp_dev->irq->start, cpp_dev); tasklet_kill(&cpp_dev->cpp_tasklet); atomic_set(&cpp_dev->irq_cnt, 0); Loading include/uapi/media/msmb_generic_buf_mgr.h +6 −0 Original line number Diff line number Diff line Loading @@ -20,4 +20,10 @@ struct v4l2_subdev *msm_buf_mngr_get_subdev(void); #define VIDIOC_MSM_BUF_MNGR_BUF_DONE \ _IOWR('V', BASE_VIDIOC_PRIVATE + 35, struct msm_buf_mngr_info) #define VIDIOC_MSM_BUF_MNGR_INIT \ _IOWR('V', BASE_VIDIOC_PRIVATE + 36, struct msm_buf_mngr_info) #define VIDIOC_MSM_BUF_MNGR_DEINIT \ _IOWR('V', BASE_VIDIOC_PRIVATE + 37, struct msm_buf_mngr_info) #endif Loading
drivers/media/platform/msm/camera_v2/msm_buf_mgr/msm_generic_buf_mgr.c +47 −2 Original line number Diff line number Diff line Loading @@ -109,8 +109,9 @@ static void msm_buf_mngr_sd_shutdown(struct msm_buf_mngr_device *buf_mngr_dev) if (!list_empty(&buf_mngr_dev->buf_qhead)) { list_for_each_entry_safe(bufs, save, &buf_mngr_dev->buf_qhead, entry) { pr_err("%s: Error: Delete invalid bufs =%x\n", __func__, (unsigned int)bufs); pr_err("%s: Error delete invalid bufs =%x, ses_id=%d, str_id=%d, idx=%d\n", __func__, (unsigned int)bufs, bufs->session_id, bufs->stream_id, bufs->vb2_buf->v4l2_buf.index); list_del_init(&bufs->entry); kfree(bufs); } Loading @@ -118,6 +119,36 @@ static void msm_buf_mngr_sd_shutdown(struct msm_buf_mngr_device *buf_mngr_dev) spin_unlock_irqrestore(&buf_mngr_dev->buf_q_spinlock, flags); } static int msm_generic_buf_mngr_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) { int rc = 0; struct msm_buf_mngr_device *buf_mngr_dev = v4l2_get_subdevdata(sd); if (!buf_mngr_dev) { pr_err("%s buf manager device NULL\n", __func__); rc = -ENODEV; return rc; } buf_mngr_dev->msm_buf_mngr_open_cnt++; return rc; } static int msm_generic_buf_mngr_close(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) { int rc = 0; struct msm_buf_mngr_device *buf_mngr_dev = v4l2_get_subdevdata(sd); if (!buf_mngr_dev) { pr_err("%s buf manager device NULL\n", __func__); rc = -ENODEV; return rc; } buf_mngr_dev->msm_buf_mngr_open_cnt--; if (buf_mngr_dev->msm_buf_mngr_open_cnt == 0) msm_buf_mngr_sd_shutdown(buf_mngr_dev); return rc; } static long msm_buf_mngr_subdev_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { Loading @@ -141,6 +172,12 @@ static long msm_buf_mngr_subdev_ioctl(struct v4l2_subdev *sd, case VIDIOC_MSM_BUF_MNGR_PUT_BUF: rc = msm_buf_mngr_put_buf(buf_mngr_dev, argp); break; case VIDIOC_MSM_BUF_MNGR_INIT: rc = msm_generic_buf_mngr_open(sd, NULL); break; case VIDIOC_MSM_BUF_MNGR_DEINIT: rc = msm_generic_buf_mngr_close(sd, NULL); break; case MSM_SD_SHUTDOWN: msm_buf_mngr_sd_shutdown(buf_mngr_dev); break; Loading @@ -154,6 +191,12 @@ static struct v4l2_subdev_core_ops msm_buf_mngr_subdev_core_ops = { .ioctl = msm_buf_mngr_subdev_ioctl, }; static const struct v4l2_subdev_internal_ops msm_generic_buf_mngr_subdev_internal_ops = { .open = msm_generic_buf_mngr_open, .close = msm_generic_buf_mngr_close, }; static const struct v4l2_subdev_ops msm_buf_mngr_subdev_ops = { .core = &msm_buf_mngr_subdev_core_ops, }; Loading Loading @@ -184,6 +227,8 @@ static int __init msm_buf_mngr_init(void) msm_buf_mngr_dev->subdev.sd.entity.type = MEDIA_ENT_T_V4L2_SUBDEV; msm_buf_mngr_dev->subdev.sd.entity.group_id = MSM_CAMERA_SUBDEV_BUF_MNGR; msm_buf_mngr_dev->subdev.sd.internal_ops = &msm_generic_buf_mngr_subdev_internal_ops; msm_buf_mngr_dev->subdev.close_seq = MSM_SD_CLOSE_4TH_CATEGORY; rc = msm_sd_register(&msm_buf_mngr_dev->subdev); if (rc != 0) { Loading
drivers/media/platform/msm/camera_v2/msm_buf_mgr/msm_generic_buf_mgr.h +1 −0 Original line number Diff line number Diff line Loading @@ -36,5 +36,6 @@ struct msm_buf_mngr_device { spinlock_t buf_q_spinlock; struct msm_sd_subdev subdev; struct msm_sd_req_vb2_q vb2_ops; uint32_t msm_buf_mngr_open_cnt; }; #endif
drivers/media/platform/msm/camera_v2/pproc/cpp/msm_cpp.c +18 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,9 @@ #define CPP_CLK_INFO_MAX 16 static int msm_cpp_buffer_ops(struct cpp_device *cpp_dev, uint32_t buff_mgr_ops, struct msm_buf_mngr_info *buff_mgr_info); #if CONFIG_MSM_CPP_DBG #define CPP_DBG(fmt, args...) pr_err(fmt, ##args) #else Loading Loading @@ -739,6 +742,14 @@ static int cpp_init_hardware(struct cpp_device *cpp_dev) goto req_irq_fail; } cpp_dev->buf_mgr_subdev = msm_buf_mngr_get_subdev(); rc = msm_cpp_buffer_ops(cpp_dev, VIDIOC_MSM_BUF_MNGR_INIT, NULL); if (rc < 0) { pr_err("buf mngr init failed\n"); free_irq(cpp_dev->irq->start, cpp_dev); goto req_irq_fail; } } cpp_dev->hw_info.cpp_hw_version = Loading Loading @@ -783,7 +794,14 @@ bus_scale_register_failed: static void cpp_release_hardware(struct cpp_device *cpp_dev) { int32_t rc; if (cpp_dev->state != CPP_STATE_BOOT) { rc = msm_cpp_buffer_ops(cpp_dev, VIDIOC_MSM_BUF_MNGR_DEINIT, NULL); if (rc < 0) { pr_err("error in buf mngr deinit\n"); rc = -EINVAL; } free_irq(cpp_dev->irq->start, cpp_dev); tasklet_kill(&cpp_dev->cpp_tasklet); atomic_set(&cpp_dev->irq_cnt, 0); Loading
include/uapi/media/msmb_generic_buf_mgr.h +6 −0 Original line number Diff line number Diff line Loading @@ -20,4 +20,10 @@ struct v4l2_subdev *msm_buf_mngr_get_subdev(void); #define VIDIOC_MSM_BUF_MNGR_BUF_DONE \ _IOWR('V', BASE_VIDIOC_PRIVATE + 35, struct msm_buf_mngr_info) #define VIDIOC_MSM_BUF_MNGR_INIT \ _IOWR('V', BASE_VIDIOC_PRIVATE + 36, struct msm_buf_mngr_info) #define VIDIOC_MSM_BUF_MNGR_DEINIT \ _IOWR('V', BASE_VIDIOC_PRIVATE + 37, struct msm_buf_mngr_info) #endif