static long msm_sensor_subdev_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { int rc = 0; struct msm_sensor_ctrl_t *s_ctrl = get_sctrl(sd); void __user *argp = (void __user *)arg; if (!s_ctrl) { pr_err("%s s_ctrl NULL\n", __func__); return -EBADF; } switch (cmd) { case VIDIOC_MSM_SENSOR_CFG: #ifdef CONFIG_COMPAT if (is_compat_task()) rc = s_ctrl->func_tbl->sensor_config32(s_ctrl, argp); else #endif rc = s_ctrl->func_tbl->sensor_config(s_ctrl, argp); return rc; case VIDIOC_MSM_SENSOR_GET_AF_STATUS: return msm_sensor_get_af_status(s_ctrl, argp); case VIDIOC_MSM_SENSOR_RELEASE: msm_sensor_stop_stream(s_ctrl); return 0; case MSM_SD_SHUTDOWN: return 0; default: return -ENOIOCTLCMD; } }
static long msm_sensor_subdev_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { struct msm_sensor_ctrl_t *s_ctrl = get_sctrl(sd); void __user *argp = (void __user *)arg; if (!s_ctrl) { pr_err("%s s_ctrl NULL\n", __func__); return -EBADF; } switch (cmd) { case VIDIOC_MSM_SENSOR_CFG: return s_ctrl->func_tbl->sensor_config(s_ctrl, argp); case VIDIOC_MSM_SENSOR_GET_AF_STATUS: return msm_sensor_get_af_status(s_ctrl, argp); case VIDIOC_MSM_SENSOR_RELEASE: pr_warn("%s : msm_sensor_stop_stream", __func__); msm_sensor_stop_stream(s_ctrl); return 0; case MSM_SD_SHUTDOWN: pr_err("%s:%d MSM_SD_SHUTDOWN\n", __func__, __LINE__); return 0; default: return -ENOIOCTLCMD; } }