Commit f97b8e6b authored by Sakari Ailus's avatar Sakari Ailus Committed by Mauro Carvalho Chehab

media: staging: atomisp: Kill subdev s_parm abuse

Remove sensor driver's interface for setting the use case specific mode
list as well as the mode lists that are related to other than
CI_MODE_PREVIEW. This removes s_parm abuse in using driver specific values
in v4l2_streamparm.capture.capturemode. The drivers already support
[gs]_frame_interval so removing support for [gs]_parm is enough.
Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 4471109e
...@@ -1224,37 +1224,12 @@ static int gc0310_g_parm(struct v4l2_subdev *sd, ...@@ -1224,37 +1224,12 @@ static int gc0310_g_parm(struct v4l2_subdev *sd,
if (dev->fmt_idx >= 0 && dev->fmt_idx < N_RES) { if (dev->fmt_idx >= 0 && dev->fmt_idx < N_RES) {
param->parm.capture.capability = V4L2_CAP_TIMEPERFRAME; param->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
param->parm.capture.timeperframe.numerator = 1; param->parm.capture.timeperframe.numerator = 1;
param->parm.capture.capturemode = dev->run_mode;
param->parm.capture.timeperframe.denominator = param->parm.capture.timeperframe.denominator =
gc0310_res[dev->fmt_idx].fps; gc0310_res[dev->fmt_idx].fps;
} }
return 0; return 0;
} }
static int gc0310_s_parm(struct v4l2_subdev *sd,
struct v4l2_streamparm *param)
{
struct gc0310_device *dev = to_gc0310_sensor(sd);
dev->run_mode = param->parm.capture.capturemode;
mutex_lock(&dev->input_lock);
switch (dev->run_mode) {
case CI_MODE_VIDEO:
gc0310_res = gc0310_res_video;
N_RES = N_RES_VIDEO;
break;
case CI_MODE_STILL_CAPTURE:
gc0310_res = gc0310_res_still;
N_RES = N_RES_STILL;
break;
default:
gc0310_res = gc0310_res_preview;
N_RES = N_RES_PREVIEW;
}
mutex_unlock(&dev->input_lock);
return 0;
}
static int gc0310_g_frame_interval(struct v4l2_subdev *sd, static int gc0310_g_frame_interval(struct v4l2_subdev *sd,
struct v4l2_subdev_frame_interval *interval) struct v4l2_subdev_frame_interval *interval)
{ {
...@@ -1314,7 +1289,6 @@ static const struct v4l2_subdev_sensor_ops gc0310_sensor_ops = { ...@@ -1314,7 +1289,6 @@ static const struct v4l2_subdev_sensor_ops gc0310_sensor_ops = {
static const struct v4l2_subdev_video_ops gc0310_video_ops = { static const struct v4l2_subdev_video_ops gc0310_video_ops = {
.s_stream = gc0310_s_stream, .s_stream = gc0310_s_stream,
.g_parm = gc0310_g_parm, .g_parm = gc0310_g_parm,
.s_parm = gc0310_s_parm,
.g_frame_interval = gc0310_g_frame_interval, .g_frame_interval = gc0310_g_frame_interval,
}; };
......
...@@ -964,37 +964,12 @@ static int gc2235_g_parm(struct v4l2_subdev *sd, ...@@ -964,37 +964,12 @@ static int gc2235_g_parm(struct v4l2_subdev *sd,
if (dev->fmt_idx >= 0 && dev->fmt_idx < N_RES) { if (dev->fmt_idx >= 0 && dev->fmt_idx < N_RES) {
param->parm.capture.capability = V4L2_CAP_TIMEPERFRAME; param->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
param->parm.capture.timeperframe.numerator = 1; param->parm.capture.timeperframe.numerator = 1;
param->parm.capture.capturemode = dev->run_mode;
param->parm.capture.timeperframe.denominator = param->parm.capture.timeperframe.denominator =
gc2235_res[dev->fmt_idx].fps; gc2235_res[dev->fmt_idx].fps;
} }
return 0; return 0;
} }
static int gc2235_s_parm(struct v4l2_subdev *sd,
struct v4l2_streamparm *param)
{
struct gc2235_device *dev = to_gc2235_sensor(sd);
dev->run_mode = param->parm.capture.capturemode;
mutex_lock(&dev->input_lock);
switch (dev->run_mode) {
case CI_MODE_VIDEO:
gc2235_res = gc2235_res_video;
N_RES = N_RES_VIDEO;
break;
case CI_MODE_STILL_CAPTURE:
gc2235_res = gc2235_res_still;
N_RES = N_RES_STILL;
break;
default:
gc2235_res = gc2235_res_preview;
N_RES = N_RES_PREVIEW;
}
mutex_unlock(&dev->input_lock);
return 0;
}
static int gc2235_g_frame_interval(struct v4l2_subdev *sd, static int gc2235_g_frame_interval(struct v4l2_subdev *sd,
struct v4l2_subdev_frame_interval *interval) struct v4l2_subdev_frame_interval *interval)
{ {
...@@ -1053,7 +1028,6 @@ static const struct v4l2_subdev_sensor_ops gc2235_sensor_ops = { ...@@ -1053,7 +1028,6 @@ static const struct v4l2_subdev_sensor_ops gc2235_sensor_ops = {
static const struct v4l2_subdev_video_ops gc2235_video_ops = { static const struct v4l2_subdev_video_ops gc2235_video_ops = {
.s_stream = gc2235_s_stream, .s_stream = gc2235_s_stream,
.g_parm = gc2235_g_parm, .g_parm = gc2235_g_parm,
.s_parm = gc2235_s_parm,
.g_frame_interval = gc2235_g_frame_interval, .g_frame_interval = gc2235_g_frame_interval,
}; };
......
...@@ -1300,40 +1300,12 @@ static int ov2680_g_parm(struct v4l2_subdev *sd, ...@@ -1300,40 +1300,12 @@ static int ov2680_g_parm(struct v4l2_subdev *sd,
if (dev->fmt_idx >= 0 && dev->fmt_idx < N_RES) { if (dev->fmt_idx >= 0 && dev->fmt_idx < N_RES) {
param->parm.capture.capability = V4L2_CAP_TIMEPERFRAME; param->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
param->parm.capture.timeperframe.numerator = 1; param->parm.capture.timeperframe.numerator = 1;
param->parm.capture.capturemode = dev->run_mode;
param->parm.capture.timeperframe.denominator = param->parm.capture.timeperframe.denominator =
ov2680_res[dev->fmt_idx].fps; ov2680_res[dev->fmt_idx].fps;
} }
return 0; return 0;
} }
static int ov2680_s_parm(struct v4l2_subdev *sd,
struct v4l2_streamparm *param)
{
struct ov2680_device *dev = to_ov2680_sensor(sd);
struct i2c_client *client = v4l2_get_subdevdata(sd);
dev->run_mode = param->parm.capture.capturemode;
v4l2_info(client, "\n%s:run_mode :%x\n", __func__, dev->run_mode);
mutex_lock(&dev->input_lock);
switch (dev->run_mode) {
case CI_MODE_VIDEO:
ov2680_res = ov2680_res_video;
N_RES = N_RES_VIDEO;
break;
case CI_MODE_STILL_CAPTURE:
ov2680_res = ov2680_res_still;
N_RES = N_RES_STILL;
break;
default:
ov2680_res = ov2680_res_preview;
N_RES = N_RES_PREVIEW;
}
mutex_unlock(&dev->input_lock);
return 0;
}
static int ov2680_g_frame_interval(struct v4l2_subdev *sd, static int ov2680_g_frame_interval(struct v4l2_subdev *sd,
struct v4l2_subdev_frame_interval *interval) struct v4l2_subdev_frame_interval *interval)
{ {
...@@ -1388,7 +1360,6 @@ static int ov2680_g_skip_frames(struct v4l2_subdev *sd, u32 *frames) ...@@ -1388,7 +1360,6 @@ static int ov2680_g_skip_frames(struct v4l2_subdev *sd, u32 *frames)
static const struct v4l2_subdev_video_ops ov2680_video_ops = { static const struct v4l2_subdev_video_ops ov2680_video_ops = {
.s_stream = ov2680_s_stream, .s_stream = ov2680_s_stream,
.g_parm = ov2680_g_parm, .g_parm = ov2680_g_parm,
.s_parm = ov2680_s_parm,
.g_frame_interval = ov2680_g_frame_interval, .g_frame_interval = ov2680_g_frame_interval,
}; };
......
...@@ -1103,37 +1103,12 @@ static int ov2722_g_parm(struct v4l2_subdev *sd, ...@@ -1103,37 +1103,12 @@ static int ov2722_g_parm(struct v4l2_subdev *sd,
if (dev->fmt_idx >= 0 && dev->fmt_idx < N_RES) { if (dev->fmt_idx >= 0 && dev->fmt_idx < N_RES) {
param->parm.capture.capability = V4L2_CAP_TIMEPERFRAME; param->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
param->parm.capture.timeperframe.numerator = 1; param->parm.capture.timeperframe.numerator = 1;
param->parm.capture.capturemode = dev->run_mode;
param->parm.capture.timeperframe.denominator = param->parm.capture.timeperframe.denominator =
ov2722_res[dev->fmt_idx].fps; ov2722_res[dev->fmt_idx].fps;
} }
return 0; return 0;
} }
static int ov2722_s_parm(struct v4l2_subdev *sd,
struct v4l2_streamparm *param)
{
struct ov2722_device *dev = to_ov2722_sensor(sd);
dev->run_mode = param->parm.capture.capturemode;
mutex_lock(&dev->input_lock);
switch (dev->run_mode) {
case CI_MODE_VIDEO:
ov2722_res = ov2722_res_video;
N_RES = N_RES_VIDEO;
break;
case CI_MODE_STILL_CAPTURE:
ov2722_res = ov2722_res_still;
N_RES = N_RES_STILL;
break;
default:
ov2722_res = ov2722_res_preview;
N_RES = N_RES_PREVIEW;
}
mutex_unlock(&dev->input_lock);
return 0;
}
static int ov2722_g_frame_interval(struct v4l2_subdev *sd, static int ov2722_g_frame_interval(struct v4l2_subdev *sd,
struct v4l2_subdev_frame_interval *interval) struct v4l2_subdev_frame_interval *interval)
{ {
...@@ -1193,7 +1168,6 @@ static const struct v4l2_subdev_sensor_ops ov2722_sensor_ops = { ...@@ -1193,7 +1168,6 @@ static const struct v4l2_subdev_sensor_ops ov2722_sensor_ops = {
static const struct v4l2_subdev_video_ops ov2722_video_ops = { static const struct v4l2_subdev_video_ops ov2722_video_ops = {
.s_stream = ov2722_s_stream, .s_stream = ov2722_s_stream,
.g_parm = ov2722_g_parm, .g_parm = ov2722_g_parm,
.s_parm = ov2722_s_parm,
.g_frame_interval = ov2722_g_frame_interval, .g_frame_interval = ov2722_g_frame_interval,
}; };
......
...@@ -150,7 +150,6 @@ struct gc0310_device { ...@@ -150,7 +150,6 @@ struct gc0310_device {
struct camera_sensor_platform_data *platform_data; struct camera_sensor_platform_data *platform_data;
int vt_pix_clk_freq_mhz; int vt_pix_clk_freq_mhz;
int fmt_idx; int fmt_idx;
int run_mode;
u8 res; u8 res;
u8 type; u8 type;
}; };
...@@ -400,48 +399,6 @@ struct gc0310_resolution gc0310_res_preview[] = { ...@@ -400,48 +399,6 @@ struct gc0310_resolution gc0310_res_preview[] = {
}; };
#define N_RES_PREVIEW (ARRAY_SIZE(gc0310_res_preview)) #define N_RES_PREVIEW (ARRAY_SIZE(gc0310_res_preview))
struct gc0310_resolution gc0310_res_still[] = {
{
.desc = "gc0310_VGA_30fps",
.width = 656, // 648,
.height = 496, // 488,
.fps = 30,
//.pix_clk_freq = 73,
.used = 0,
#if 0
.pixels_per_line = 0x0314,
.lines_per_frame = 0x0213,
#endif
.bin_factor_x = 1,
.bin_factor_y = 1,
.bin_mode = 0,
.skip_frames = 2,
.regs = gc0310_VGA_30fps,
},
};
#define N_RES_STILL (ARRAY_SIZE(gc0310_res_still))
struct gc0310_resolution gc0310_res_video[] = {
{
.desc = "gc0310_VGA_30fps",
.width = 656, // 648,
.height = 496, // 488,
.fps = 30,
//.pix_clk_freq = 73,
.used = 0,
#if 0
.pixels_per_line = 0x0314,
.lines_per_frame = 0x0213,
#endif
.bin_factor_x = 1,
.bin_factor_y = 1,
.bin_mode = 0,
.skip_frames = 2,
.regs = gc0310_VGA_30fps,
},
};
#define N_RES_VIDEO (ARRAY_SIZE(gc0310_res_video))
static struct gc0310_resolution *gc0310_res = gc0310_res_preview; static struct gc0310_resolution *gc0310_res = gc0310_res_preview;
static unsigned long N_RES = N_RES_PREVIEW; static unsigned long N_RES = N_RES_PREVIEW;
#endif #endif
......
...@@ -156,7 +156,6 @@ struct gc2235_device { ...@@ -156,7 +156,6 @@ struct gc2235_device {
struct camera_sensor_platform_data *platform_data; struct camera_sensor_platform_data *platform_data;
int vt_pix_clk_freq_mhz; int vt_pix_clk_freq_mhz;
int fmt_idx; int fmt_idx;
int run_mode;
u8 res; u8 res;
u8 type; u8 type;
}; };
......
...@@ -850,74 +850,6 @@ struct ov2680_format { ...@@ -850,74 +850,6 @@ struct ov2680_format {
}; };
#define N_RES_PREVIEW (ARRAY_SIZE(ov2680_res_preview)) #define N_RES_PREVIEW (ARRAY_SIZE(ov2680_res_preview))
static struct ov2680_resolution ov2680_res_still[] = {
{
.desc = "ov2680_1616x1216_30fps",
.width = 1616,
.height = 1216,
.pix_clk_freq = 66,
.fps = 30,
.used = 0,
.pixels_per_line = 1698,//1704,
.lines_per_frame = 1294,
.bin_factor_x = 0,
.bin_factor_y = 0,
.bin_mode = 0,
.skip_frames = 3,
.regs = ov2680_1616x1216_30fps,
},
{
.desc = "ov2680_1616x916_30fps",
.width = 1616,
.height = 916,
.fps = 30,
.pix_clk_freq = 66,
.used = 0,
.pixels_per_line = 1698,//1704,
.lines_per_frame = 1294,
.bin_factor_x = 0,
.bin_factor_y = 0,
.bin_mode = 0,
.skip_frames = 3,
.regs = ov2680_1616x916_30fps,
},
};
#define N_RES_STILL (ARRAY_SIZE(ov2680_res_still))
static struct ov2680_resolution ov2680_res_video[] = {
{
.desc = "ov2680_1616x1216_30fps",
.width = 1616,
.height = 1216,
.pix_clk_freq = 66,
.fps = 30,
.used = 0,
.pixels_per_line = 1698,//1704,
.lines_per_frame = 1294,
.bin_factor_x = 0,
.bin_factor_y = 0,
.bin_mode = 0,
.skip_frames = 3,
.regs = ov2680_1616x1216_30fps,
},
{
.desc = "ov2680_720p_30fps",
.width = 1616,
.height = 916,
.fps = 30,
.pix_clk_freq = 66,
.used = 0,
.pixels_per_line = 1698,//1704,
.lines_per_frame = 1294,
.bin_factor_x = 0,
.bin_factor_y = 0,
.bin_mode = 0,
.skip_frames = 3,
.regs = ov2680_1616x916_30fps,
},
};
#define N_RES_VIDEO (ARRAY_SIZE(ov2680_res_video))
static struct ov2680_resolution *ov2680_res = ov2680_res_preview; static struct ov2680_resolution *ov2680_res = ov2680_res_preview;
static unsigned long N_RES = N_RES_PREVIEW; static unsigned long N_RES = N_RES_PREVIEW;
......
...@@ -1825,38 +1825,12 @@ static int ov5693_g_parm(struct v4l2_subdev *sd, ...@@ -1825,38 +1825,12 @@ static int ov5693_g_parm(struct v4l2_subdev *sd,
if (dev->fmt_idx >= 0 && dev->fmt_idx < N_RES) { if (dev->fmt_idx >= 0 && dev->fmt_idx < N_RES) {
param->parm.capture.capability = V4L2_CAP_TIMEPERFRAME; param->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
param->parm.capture.timeperframe.numerator = 1; param->parm.capture.timeperframe.numerator = 1;
param->parm.capture.capturemode = dev->run_mode;
param->parm.capture.timeperframe.denominator = param->parm.capture.timeperframe.denominator =
ov5693_res[dev->fmt_idx].fps; ov5693_res[dev->fmt_idx].fps;
} }
return 0; return 0;
} }
static int ov5693_s_parm(struct v4l2_subdev *sd,
struct v4l2_streamparm *param)
{
struct ov5693_device *dev = to_ov5693_sensor(sd);
dev->run_mode = param->parm.capture.capturemode;
mutex_lock(&dev->input_lock);
switch (dev->run_mode) {
case CI_MODE_VIDEO:
ov5693_res = ov5693_res_video;
N_RES = N_RES_VIDEO;
break;
case CI_MODE_STILL_CAPTURE:
ov5693_res = ov5693_res_still;
N_RES = N_RES_STILL;
break;
default:
ov5693_res = ov5693_res_preview;
N_RES = N_RES_PREVIEW;
}
mutex_unlock(&dev->input_lock);
return 0;
}
static int ov5693_g_frame_interval(struct v4l2_subdev *sd, static int ov5693_g_frame_interval(struct v4l2_subdev *sd,
struct v4l2_subdev_frame_interval *interval) struct v4l2_subdev_frame_interval *interval)
{ {
...@@ -1900,7 +1874,6 @@ static int ov5693_enum_frame_size(struct v4l2_subdev *sd, ...@@ -1900,7 +1874,6 @@ static int ov5693_enum_frame_size(struct v4l2_subdev *sd,
static const struct v4l2_subdev_video_ops ov5693_video_ops = { static const struct v4l2_subdev_video_ops ov5693_video_ops = {
.s_stream = ov5693_s_stream, .s_stream = ov5693_s_stream,
.g_parm = ov5693_g_parm, .g_parm = ov5693_g_parm,
.s_parm = ov5693_s_parm,
.g_frame_interval = ov5693_g_frame_interval, .g_frame_interval = ov5693_g_frame_interval,
}; };
......
...@@ -2091,7 +2091,7 @@ int atomisp_set_sensor_runmode(struct atomisp_sub_device *asd, ...@@ -2091,7 +2091,7 @@ int atomisp_set_sensor_runmode(struct atomisp_sub_device *asd,
struct atomisp_device *isp = asd->isp; struct atomisp_device *isp = asd->isp;
struct v4l2_ctrl *c; struct v4l2_ctrl *c;
struct v4l2_streamparm p = {0}; struct v4l2_streamparm p = {0};
int ret; int ret = 0;
int modes[] = { CI_MODE_NONE, int modes[] = { CI_MODE_NONE,
CI_MODE_VIDEO, CI_MODE_VIDEO,
CI_MODE_STILL_CAPTURE, CI_MODE_STILL_CAPTURE,
...@@ -2105,13 +2105,8 @@ int atomisp_set_sensor_runmode(struct atomisp_sub_device *asd, ...@@ -2105,13 +2105,8 @@ int atomisp_set_sensor_runmode(struct atomisp_sub_device *asd,
c = v4l2_ctrl_find(isp->inputs[asd->input_curr].camera->ctrl_handler, c = v4l2_ctrl_find(isp->inputs[asd->input_curr].camera->ctrl_handler,
V4L2_CID_RUN_MODE); V4L2_CID_RUN_MODE);
if (c) { if (c)
ret = v4l2_ctrl_s_ctrl(c, runmode->mode); ret = v4l2_ctrl_s_ctrl(c, runmode->mode);
} else {
p.parm.capture.capturemode = modes[runmode->mode];
ret = v4l2_subdev_call(isp->inputs[asd->input_curr].camera,
video, s_parm, &p);
}
mutex_unlock(asd->ctrl_handler.lock); mutex_unlock(asd->ctrl_handler.lock);
return ret; return ret;
......
...@@ -819,12 +819,6 @@ static int __atomisp_update_run_mode(struct atomisp_sub_device *asd) ...@@ -819,12 +819,6 @@ static int __atomisp_update_run_mode(struct atomisp_sub_device *asd)
struct atomisp_device *isp = asd->isp; struct atomisp_device *isp = asd->isp;
struct v4l2_ctrl *ctrl = asd->run_mode; struct v4l2_ctrl *ctrl = asd->run_mode;
struct v4l2_ctrl *c; struct v4l2_ctrl *c;
struct v4l2_streamparm p = {0};
int modes[] = { CI_MODE_NONE,
CI_MODE_VIDEO,
CI_MODE_STILL_CAPTURE,
CI_MODE_CONTINUOUS,
CI_MODE_PREVIEW };
s32 mode; s32 mode;
if (ctrl->val != ATOMISP_RUN_MODE_VIDEO && if (ctrl->val != ATOMISP_RUN_MODE_VIDEO &&
...@@ -840,11 +834,7 @@ static int __atomisp_update_run_mode(struct atomisp_sub_device *asd) ...@@ -840,11 +834,7 @@ static int __atomisp_update_run_mode(struct atomisp_sub_device *asd)
if (c) if (c)
return v4l2_ctrl_s_ctrl(c, mode); return v4l2_ctrl_s_ctrl(c, mode);
/* Fall back to obsolete s_parm */ return 0;
p.parm.capture.capturemode = modes[mode];
return v4l2_subdev_call(
isp->inputs[asd->input_curr].camera, video, s_parm, &p);
} }
int atomisp_update_run_mode(struct atomisp_sub_device *asd) int atomisp_update_run_mode(struct atomisp_sub_device *asd)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment