return 0;
}
+static int mt9m114_g_skip_frames(struct v4l2_subdev *sd, u32 *frames)
+{
+ int index;
+ struct mt9m114_device *snr = to_mt9m114_sensor(sd);
+
+ if (frames == NULL)
+ return -EINVAL;
+
+ for (index = 0; index < N_RES; index++) {
+ if (mt9m114_res[index].res == snr->res)
+ break;
+ }
+
+ if (index >= N_RES)
+ return -EINVAL;
+
+ *frames = mt9m114_res[index].skip_frames;
+
+ return 0;
+}
static const struct v4l2_subdev_video_ops mt9m114_video_ops = {
.try_mbus_fmt = mt9m114_try_mbus_fmt,
.s_mbus_fmt = mt9m114_set_mbus_fmt,
.enum_frameintervals = mt9m114_enum_frameintervals,
};
+static struct v4l2_subdev_sensor_ops mt9m114_sensor_ops = {
+ .g_skip_frames = mt9m114_g_skip_frames,
+};
+
static const struct v4l2_subdev_core_ops mt9m114_core_ops = {
.g_chip_ident = mt9m114_g_chip_ident,
.queryctrl = mt9m114_queryctrl,
.core = &mt9m114_core_ops,
.video = &mt9m114_video_ops,
.pad = &mt9m114_pad_ops,
+ .sensor = &mt9m114_sensor_ops,
};
static const struct media_entity_operations mt9m114_entity_ops = {
struct v4l2_mbus_framefmt format;
struct camera_sensor_platform_data *platform_data;
- int fmt_idx;
int real_model_id;
int nctx;
int power;
int width;
int height;
int fps;
+ int skip_frames;
bool used;
struct regval_list *regs;
};
.fps = 30,
.used = 0,
.regs = NULL,
+ .skip_frames = 1,
},
{
.desc = "QVGA",
.fps = 30,
.used = 0,
.regs = NULL,
+ .skip_frames = 1,
},
{
.desc = "VGA",
.fps = 30,
.used = 0,
.regs = NULL,
+ .skip_frames = 1,
},
{
.desc = "480p",
.fps = 30,
.used = 0,
.regs = NULL,
+ .skip_frames = 1,
},
{
.desc = "720p",
.fps = 30,
.used = 0,
.regs = NULL,
+ .skip_frames = 1,
},
{
.desc = "960P",
.fps = 15,
.used = 0,
.regs = NULL,
+ .skip_frames = 1,
},
};
#define N_RES (ARRAY_SIZE(mt9m114_res))