Loading drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c +47 −0 Original line number Diff line number Diff line Loading @@ -365,6 +365,12 @@ long msm_isp_ioctl(struct v4l2_subdev *sd, mutex_unlock(&vfe_dev->realtime_mutex); break; } case VIDIOC_MSM_VFE_REG_LIST_CFG: { mutex_lock(&vfe_dev->realtime_mutex); rc = msm_isp_proc_cmd_list(vfe_dev, arg); mutex_unlock(&vfe_dev->realtime_mutex); break; } case VIDIOC_MSM_ISP_REQUEST_BUF: case VIDIOC_MSM_ISP_ENQUEUE_BUF: case VIDIOC_MSM_ISP_RELEASE_BUF: { Loading Loading @@ -669,6 +675,47 @@ reg_cfg_failed: return rc; } int msm_isp_proc_cmd_list(struct vfe_device *vfe_dev, void *arg) { int rc = 0; struct msm_vfe_cfg_cmd_list *proc_cmd = (struct msm_vfe_cfg_cmd_list *)arg; struct msm_vfe_cfg_cmd_list cmd, cmd_next; if (!vfe_dev || !arg) { pr_err("%s:%d failed: vfe_dev %p arg %p", __func__, __LINE__, vfe_dev, arg); return -EINVAL; } rc = msm_isp_proc_cmd(vfe_dev, &proc_cmd->cfg_cmd); if (rc < 0) pr_err("%s:%d failed: rc %d", __func__, __LINE__, rc); cmd = *proc_cmd; while (cmd.next) { if (cmd.next_size != sizeof(struct msm_vfe_cfg_cmd_list)) { pr_err("%s:%d failed: next size %d != expected %d\n", __func__, __LINE__, cmd.next_size, sizeof(struct msm_vfe_cfg_cmd_list)); break; } if (copy_from_user(&cmd_next, (void __user *)cmd.next, sizeof(struct msm_vfe_cfg_cmd_list))) { rc = -EFAULT; continue; } rc = msm_isp_proc_cmd(vfe_dev, &cmd_next.cfg_cmd); if (rc < 0) pr_err("%s:%d failed: rc %d", __func__, __LINE__, rc); cmd = cmd_next; } return rc; } int msm_isp_send_event(struct vfe_device *vfe_dev, uint32_t event_type, struct msm_isp_event_data *event_data) Loading drivers/media/platform/msm/camera_v2/isp/msm_isp_util.h +1 −0 Original line number Diff line number Diff line Loading @@ -72,4 +72,5 @@ void msm_isp_process_error_info(struct vfe_device *vfe_dev); int msm_isp_open_node(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh); int msm_isp_close_node(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh); long msm_isp_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg); int msm_isp_proc_cmd_list(struct vfe_device *vfe_dev, void *arg); #endif /* __MSM_ISP_UTIL_H__ */ include/media/msmb_isp.h +3 −0 Original line number Diff line number Diff line Loading @@ -430,4 +430,7 @@ struct msm_isp_event_data { #define VIDIOC_MSM_ISP_UPDATE_STREAM \ _IOWR('V', BASE_VIDIOC_PRIVATE+13, struct msm_vfe_axi_stream_update_cmd) #define VIDIOC_MSM_VFE_REG_LIST_CFG \ _IOWR('V', BASE_VIDIOC_PRIVATE+14, struct msm_vfe_cfg_cmd_list) #endif /* __MSMB_ISP__ */ Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c +47 −0 Original line number Diff line number Diff line Loading @@ -365,6 +365,12 @@ long msm_isp_ioctl(struct v4l2_subdev *sd, mutex_unlock(&vfe_dev->realtime_mutex); break; } case VIDIOC_MSM_VFE_REG_LIST_CFG: { mutex_lock(&vfe_dev->realtime_mutex); rc = msm_isp_proc_cmd_list(vfe_dev, arg); mutex_unlock(&vfe_dev->realtime_mutex); break; } case VIDIOC_MSM_ISP_REQUEST_BUF: case VIDIOC_MSM_ISP_ENQUEUE_BUF: case VIDIOC_MSM_ISP_RELEASE_BUF: { Loading Loading @@ -669,6 +675,47 @@ reg_cfg_failed: return rc; } int msm_isp_proc_cmd_list(struct vfe_device *vfe_dev, void *arg) { int rc = 0; struct msm_vfe_cfg_cmd_list *proc_cmd = (struct msm_vfe_cfg_cmd_list *)arg; struct msm_vfe_cfg_cmd_list cmd, cmd_next; if (!vfe_dev || !arg) { pr_err("%s:%d failed: vfe_dev %p arg %p", __func__, __LINE__, vfe_dev, arg); return -EINVAL; } rc = msm_isp_proc_cmd(vfe_dev, &proc_cmd->cfg_cmd); if (rc < 0) pr_err("%s:%d failed: rc %d", __func__, __LINE__, rc); cmd = *proc_cmd; while (cmd.next) { if (cmd.next_size != sizeof(struct msm_vfe_cfg_cmd_list)) { pr_err("%s:%d failed: next size %d != expected %d\n", __func__, __LINE__, cmd.next_size, sizeof(struct msm_vfe_cfg_cmd_list)); break; } if (copy_from_user(&cmd_next, (void __user *)cmd.next, sizeof(struct msm_vfe_cfg_cmd_list))) { rc = -EFAULT; continue; } rc = msm_isp_proc_cmd(vfe_dev, &cmd_next.cfg_cmd); if (rc < 0) pr_err("%s:%d failed: rc %d", __func__, __LINE__, rc); cmd = cmd_next; } return rc; } int msm_isp_send_event(struct vfe_device *vfe_dev, uint32_t event_type, struct msm_isp_event_data *event_data) Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp_util.h +1 −0 Original line number Diff line number Diff line Loading @@ -72,4 +72,5 @@ void msm_isp_process_error_info(struct vfe_device *vfe_dev); int msm_isp_open_node(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh); int msm_isp_close_node(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh); long msm_isp_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg); int msm_isp_proc_cmd_list(struct vfe_device *vfe_dev, void *arg); #endif /* __MSM_ISP_UTIL_H__ */
include/media/msmb_isp.h +3 −0 Original line number Diff line number Diff line Loading @@ -430,4 +430,7 @@ struct msm_isp_event_data { #define VIDIOC_MSM_ISP_UPDATE_STREAM \ _IOWR('V', BASE_VIDIOC_PRIVATE+13, struct msm_vfe_axi_stream_update_cmd) #define VIDIOC_MSM_VFE_REG_LIST_CFG \ _IOWR('V', BASE_VIDIOC_PRIVATE+14, struct msm_vfe_cfg_cmd_list) #endif /* __MSMB_ISP__ */