Loading drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c +126 −126 Original line number Diff line number Diff line Loading @@ -96,26 +96,6 @@ static void msm_isp_print_fourcc_error(const char *origin, return; } #ifdef CONFIG_COMPAT struct msm_vfe_cfg_cmd2_32 { uint16_t num_cfg; uint16_t cmd_len; compat_caddr_t cfg_data; compat_caddr_t cfg_cmd; }; struct msm_vfe_cfg_cmd_list_32 { struct msm_vfe_cfg_cmd2_32 cfg_cmd; compat_caddr_t *next; uint32_t next_size; }; #define VIDIOC_MSM_VFE_REG_CFG_COMPAT \ _IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_vfe_cfg_cmd2_32) #define VIDIOC_MSM_VFE_REG_LIST_CFG_COMPAT \ _IOWR('V', BASE_VIDIOC_PRIVATE+14, struct msm_vfe_cfg_cmd_list_32) #endif /* CONFIG_COMPAT */ int msm_isp_init_bandwidth_mgr(enum msm_isp_hw_client client) { int rc = 0; Loading Loading @@ -472,102 +452,6 @@ int msm_isp_cfg_input(struct vfe_device *vfe_dev, void *arg) return rc; } static long msm_isp_ioctl_unlocked(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { long rc = 0; struct vfe_device *vfe_dev = v4l2_get_subdevdata(sd); /* use real time mutex for hard real-time ioctls such as * buffer operations and register updates. * Use core mutex for other ioctls that could take * longer time to complete such as start/stop ISP streams * which blocks until the hardware start/stop streaming */ ISP_DBG("%s cmd: %d\n", __func__, _IOC_TYPE(cmd)); switch (cmd) { case VIDIOC_MSM_VFE_REG_CFG: { mutex_lock(&vfe_dev->realtime_mutex); rc = msm_isp_proc_cmd(vfe_dev, arg); 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: { mutex_lock(&vfe_dev->realtime_mutex); rc = msm_isp_proc_buf_cmd(vfe_dev->buf_mgr, cmd, arg); mutex_unlock(&vfe_dev->realtime_mutex); break; } case VIDIOC_MSM_ISP_REQUEST_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_request_axi_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_RELEASE_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_release_axi_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_CFG_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_cfg_axi_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_INPUT_CFG: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_cfg_input(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_SET_SRC_STATE: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_set_src_state(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_REQUEST_STATS_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_request_stats_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_RELEASE_STATS_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_release_stats_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_CFG_STATS_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_cfg_stats_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_UPDATE_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_update_axi_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_SMMU_ATTACH: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_smmu_attach(vfe_dev->buf_mgr, arg); mutex_unlock(&vfe_dev->core_mutex); break; case MSM_SD_SHUTDOWN: while (vfe_dev->vfe_open_cnt != 0) msm_isp_close_node(sd, NULL); break; default: pr_err_ratelimited("%s: Invalid ISP command\n", __func__); rc = -EINVAL; } return rc; } static int msm_isp_proc_cmd_list_unlocked(struct vfe_device *vfe_dev, void *arg) { int rc = 0; Loading Loading @@ -609,8 +493,25 @@ static int msm_isp_proc_cmd_list_unlocked(struct vfe_device *vfe_dev, void *arg) return rc; } #ifdef CONFIG_COMPAT struct msm_vfe_cfg_cmd2_32 { uint16_t num_cfg; uint16_t cmd_len; compat_caddr_t cfg_data; compat_caddr_t cfg_cmd; }; struct msm_vfe_cfg_cmd_list_32 { struct msm_vfe_cfg_cmd2_32 cfg_cmd; compat_caddr_t next; uint32_t next_size; }; #define VIDIOC_MSM_VFE_REG_CFG_COMPAT \ _IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_vfe_cfg_cmd2_32) #define VIDIOC_MSM_VFE_REG_LIST_CFG_COMPAT \ _IOWR('V', BASE_VIDIOC_PRIVATE+14, struct msm_vfe_cfg_cmd_list_32) static void msm_isp_compat_to_proc_cmd(struct msm_vfe_cfg_cmd2 *proc_cmd, struct msm_vfe_cfg_cmd2_32 *proc_cmd_ptr32) { Loading @@ -633,14 +534,14 @@ static int msm_isp_proc_cmd_list_compat(struct vfe_device *vfe_dev, void *arg) vfe_dev, arg); return -EINVAL; } msm_isp_compat_to_proc_cmd(¤t_cmd, &arg->cfg_cmd); msm_isp_compat_to_proc_cmd(¤t_cmd, &proc_cmd->cfg_cmd); rc = msm_isp_proc_cmd(vfe_dev, ¤t_cmd); if (rc < 0) pr_err("%s:%d failed: rc %d", __func__, __LINE__, rc); cmd = *proc_cmd; while (compat_ptr(cmd.next)) { while (NULL != compat_ptr(cmd.next)) { if (cmd.next_size != sizeof(struct msm_vfe_cfg_cmd_list_32)) { pr_err("%s:%d failed: next size %u != expected %zu\n", __func__, __LINE__, cmd.next_size, Loading Loading @@ -670,17 +571,121 @@ static int msm_isp_proc_cmd_list(struct vfe_device *vfe_dev, void *arg) else return msm_isp_proc_cmd_list_unlocked(vfe_dev, arg); } #else /* CONFIG_COMPAT */ static int msm_isp_proc_cmd_list(struct vfe_device *vfe_dev, void *arg) { return msm_isp_proc_cmd_list_unlocked(vfe_dev, arg); } #endif /* CONFIG_COMPAT */ static long msm_isp_ioctl_unlocked(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { long rc = 0; struct vfe_device *vfe_dev = v4l2_get_subdevdata(sd); /* use real time mutex for hard real-time ioctls such as * buffer operations and register updates. * Use core mutex for other ioctls that could take * longer time to complete such as start/stop ISP streams * which blocks until the hardware start/stop streaming */ ISP_DBG("%s cmd: %d\n", __func__, _IOC_TYPE(cmd)); switch (cmd) { case VIDIOC_MSM_VFE_REG_CFG: { mutex_lock(&vfe_dev->realtime_mutex); rc = msm_isp_proc_cmd(vfe_dev, arg); 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: { mutex_lock(&vfe_dev->realtime_mutex); rc = msm_isp_proc_buf_cmd(vfe_dev->buf_mgr, cmd, arg); mutex_unlock(&vfe_dev->realtime_mutex); break; } case VIDIOC_MSM_ISP_REQUEST_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_request_axi_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_RELEASE_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_release_axi_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_CFG_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_cfg_axi_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_INPUT_CFG: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_cfg_input(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_SET_SRC_STATE: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_set_src_state(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_REQUEST_STATS_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_request_stats_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_RELEASE_STATS_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_release_stats_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_CFG_STATS_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_cfg_stats_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_UPDATE_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_update_axi_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_SMMU_ATTACH: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_smmu_attach(vfe_dev->buf_mgr, arg); mutex_unlock(&vfe_dev->core_mutex); break; case MSM_SD_SHUTDOWN: while (vfe_dev->vfe_open_cnt != 0) msm_isp_close_node(sd, NULL); break; default: pr_err_ratelimited("%s: Invalid ISP command\n", __func__); rc = -EINVAL; } return rc; } #ifdef CONFIG_COMPAT static long msm_isp_ioctl_compat(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { struct vfe_device *vfe_dev = v4l2_get_subdevdata(sd); long rc = 0; switch (cmd) { case VIDIOC_MSM_VFE_REG_CFG_COMPAT: { struct vfe_device *vfe_dev = v4l2_get_subdevdata(sd); struct msm_vfe_cfg_cmd2 proc_cmd; struct msm_vfe_cfg_cmd2_32 *proc_cmd_ptr32; mutex_lock(&vfe_dev->realtime_mutex); msm_isp_compat_to_proc_cmd(&proc_cmd, (struct msm_vfe_cfg_cmd2_32 *) arg); Loading @@ -707,11 +712,6 @@ long msm_isp_ioctl(struct v4l2_subdev *sd, return msm_isp_ioctl_compat(sd, cmd, arg); } #else /* CONFIG_COMPAT */ int msm_isp_proc_cmd_list(struct vfe_device *vfe_dev, void *arg) { return msm_isp_proc_cmd_list_unlocked(vfe_dev, arg); } long msm_isp_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { Loading drivers/media/platform/msm/camera_v2/isp/msm_isp_util.h +0 −1 Original line number Diff line number Diff line Loading @@ -73,7 +73,6 @@ 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); int msm_isp_get_clk_info(struct vfe_device *vfe_dev, struct platform_device *pdev, struct msm_cam_clk_info *vfe_clk_info); Loading Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c +126 −126 Original line number Diff line number Diff line Loading @@ -96,26 +96,6 @@ static void msm_isp_print_fourcc_error(const char *origin, return; } #ifdef CONFIG_COMPAT struct msm_vfe_cfg_cmd2_32 { uint16_t num_cfg; uint16_t cmd_len; compat_caddr_t cfg_data; compat_caddr_t cfg_cmd; }; struct msm_vfe_cfg_cmd_list_32 { struct msm_vfe_cfg_cmd2_32 cfg_cmd; compat_caddr_t *next; uint32_t next_size; }; #define VIDIOC_MSM_VFE_REG_CFG_COMPAT \ _IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_vfe_cfg_cmd2_32) #define VIDIOC_MSM_VFE_REG_LIST_CFG_COMPAT \ _IOWR('V', BASE_VIDIOC_PRIVATE+14, struct msm_vfe_cfg_cmd_list_32) #endif /* CONFIG_COMPAT */ int msm_isp_init_bandwidth_mgr(enum msm_isp_hw_client client) { int rc = 0; Loading Loading @@ -472,102 +452,6 @@ int msm_isp_cfg_input(struct vfe_device *vfe_dev, void *arg) return rc; } static long msm_isp_ioctl_unlocked(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { long rc = 0; struct vfe_device *vfe_dev = v4l2_get_subdevdata(sd); /* use real time mutex for hard real-time ioctls such as * buffer operations and register updates. * Use core mutex for other ioctls that could take * longer time to complete such as start/stop ISP streams * which blocks until the hardware start/stop streaming */ ISP_DBG("%s cmd: %d\n", __func__, _IOC_TYPE(cmd)); switch (cmd) { case VIDIOC_MSM_VFE_REG_CFG: { mutex_lock(&vfe_dev->realtime_mutex); rc = msm_isp_proc_cmd(vfe_dev, arg); 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: { mutex_lock(&vfe_dev->realtime_mutex); rc = msm_isp_proc_buf_cmd(vfe_dev->buf_mgr, cmd, arg); mutex_unlock(&vfe_dev->realtime_mutex); break; } case VIDIOC_MSM_ISP_REQUEST_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_request_axi_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_RELEASE_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_release_axi_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_CFG_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_cfg_axi_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_INPUT_CFG: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_cfg_input(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_SET_SRC_STATE: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_set_src_state(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_REQUEST_STATS_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_request_stats_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_RELEASE_STATS_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_release_stats_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_CFG_STATS_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_cfg_stats_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_UPDATE_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_update_axi_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_SMMU_ATTACH: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_smmu_attach(vfe_dev->buf_mgr, arg); mutex_unlock(&vfe_dev->core_mutex); break; case MSM_SD_SHUTDOWN: while (vfe_dev->vfe_open_cnt != 0) msm_isp_close_node(sd, NULL); break; default: pr_err_ratelimited("%s: Invalid ISP command\n", __func__); rc = -EINVAL; } return rc; } static int msm_isp_proc_cmd_list_unlocked(struct vfe_device *vfe_dev, void *arg) { int rc = 0; Loading Loading @@ -609,8 +493,25 @@ static int msm_isp_proc_cmd_list_unlocked(struct vfe_device *vfe_dev, void *arg) return rc; } #ifdef CONFIG_COMPAT struct msm_vfe_cfg_cmd2_32 { uint16_t num_cfg; uint16_t cmd_len; compat_caddr_t cfg_data; compat_caddr_t cfg_cmd; }; struct msm_vfe_cfg_cmd_list_32 { struct msm_vfe_cfg_cmd2_32 cfg_cmd; compat_caddr_t next; uint32_t next_size; }; #define VIDIOC_MSM_VFE_REG_CFG_COMPAT \ _IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_vfe_cfg_cmd2_32) #define VIDIOC_MSM_VFE_REG_LIST_CFG_COMPAT \ _IOWR('V', BASE_VIDIOC_PRIVATE+14, struct msm_vfe_cfg_cmd_list_32) static void msm_isp_compat_to_proc_cmd(struct msm_vfe_cfg_cmd2 *proc_cmd, struct msm_vfe_cfg_cmd2_32 *proc_cmd_ptr32) { Loading @@ -633,14 +534,14 @@ static int msm_isp_proc_cmd_list_compat(struct vfe_device *vfe_dev, void *arg) vfe_dev, arg); return -EINVAL; } msm_isp_compat_to_proc_cmd(¤t_cmd, &arg->cfg_cmd); msm_isp_compat_to_proc_cmd(¤t_cmd, &proc_cmd->cfg_cmd); rc = msm_isp_proc_cmd(vfe_dev, ¤t_cmd); if (rc < 0) pr_err("%s:%d failed: rc %d", __func__, __LINE__, rc); cmd = *proc_cmd; while (compat_ptr(cmd.next)) { while (NULL != compat_ptr(cmd.next)) { if (cmd.next_size != sizeof(struct msm_vfe_cfg_cmd_list_32)) { pr_err("%s:%d failed: next size %u != expected %zu\n", __func__, __LINE__, cmd.next_size, Loading Loading @@ -670,17 +571,121 @@ static int msm_isp_proc_cmd_list(struct vfe_device *vfe_dev, void *arg) else return msm_isp_proc_cmd_list_unlocked(vfe_dev, arg); } #else /* CONFIG_COMPAT */ static int msm_isp_proc_cmd_list(struct vfe_device *vfe_dev, void *arg) { return msm_isp_proc_cmd_list_unlocked(vfe_dev, arg); } #endif /* CONFIG_COMPAT */ static long msm_isp_ioctl_unlocked(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { long rc = 0; struct vfe_device *vfe_dev = v4l2_get_subdevdata(sd); /* use real time mutex for hard real-time ioctls such as * buffer operations and register updates. * Use core mutex for other ioctls that could take * longer time to complete such as start/stop ISP streams * which blocks until the hardware start/stop streaming */ ISP_DBG("%s cmd: %d\n", __func__, _IOC_TYPE(cmd)); switch (cmd) { case VIDIOC_MSM_VFE_REG_CFG: { mutex_lock(&vfe_dev->realtime_mutex); rc = msm_isp_proc_cmd(vfe_dev, arg); 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: { mutex_lock(&vfe_dev->realtime_mutex); rc = msm_isp_proc_buf_cmd(vfe_dev->buf_mgr, cmd, arg); mutex_unlock(&vfe_dev->realtime_mutex); break; } case VIDIOC_MSM_ISP_REQUEST_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_request_axi_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_RELEASE_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_release_axi_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_CFG_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_cfg_axi_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_INPUT_CFG: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_cfg_input(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_SET_SRC_STATE: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_set_src_state(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_REQUEST_STATS_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_request_stats_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_RELEASE_STATS_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_release_stats_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_CFG_STATS_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_cfg_stats_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_UPDATE_STREAM: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_update_axi_stream(vfe_dev, arg); mutex_unlock(&vfe_dev->core_mutex); break; case VIDIOC_MSM_ISP_SMMU_ATTACH: mutex_lock(&vfe_dev->core_mutex); rc = msm_isp_smmu_attach(vfe_dev->buf_mgr, arg); mutex_unlock(&vfe_dev->core_mutex); break; case MSM_SD_SHUTDOWN: while (vfe_dev->vfe_open_cnt != 0) msm_isp_close_node(sd, NULL); break; default: pr_err_ratelimited("%s: Invalid ISP command\n", __func__); rc = -EINVAL; } return rc; } #ifdef CONFIG_COMPAT static long msm_isp_ioctl_compat(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { struct vfe_device *vfe_dev = v4l2_get_subdevdata(sd); long rc = 0; switch (cmd) { case VIDIOC_MSM_VFE_REG_CFG_COMPAT: { struct vfe_device *vfe_dev = v4l2_get_subdevdata(sd); struct msm_vfe_cfg_cmd2 proc_cmd; struct msm_vfe_cfg_cmd2_32 *proc_cmd_ptr32; mutex_lock(&vfe_dev->realtime_mutex); msm_isp_compat_to_proc_cmd(&proc_cmd, (struct msm_vfe_cfg_cmd2_32 *) arg); Loading @@ -707,11 +712,6 @@ long msm_isp_ioctl(struct v4l2_subdev *sd, return msm_isp_ioctl_compat(sd, cmd, arg); } #else /* CONFIG_COMPAT */ int msm_isp_proc_cmd_list(struct vfe_device *vfe_dev, void *arg) { return msm_isp_proc_cmd_list_unlocked(vfe_dev, arg); } long msm_isp_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp_util.h +0 −1 Original line number Diff line number Diff line Loading @@ -73,7 +73,6 @@ 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); int msm_isp_get_clk_info(struct vfe_device *vfe_dev, struct platform_device *pdev, struct msm_cam_clk_info *vfe_clk_info); Loading