Hi Dongchun, On Tue, Jun 11, 2019 at 10:09:49PM +0800, Dongchun Zhu wrote: ... > > > + return -EINVAL; > > > + > > > + fse->code = MEDIA_BUS_FMT_SBGGR10_1X10; > > > > Instead you need check the caller set this. The frame sizes could be > > different for different media bus formats. > > > > For one sensor mode, there should be one Bayer sequence. > In next version, this para could be changed when mirror/flip enabled. > You should change the check based on the configuration. ... > > > +#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API > > > +static int ov02a10_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) > > > +{ > > > + struct ov02a10 *ov02a10 = to_ov02a10(sd); > > > + struct v4l2_mbus_framefmt *try_fmt; > > > + > > > + mutex_lock(&ov02a10->mutex); > > > + > > > + try_fmt = v4l2_subdev_get_try_format(sd, fh->pad, 0); > > > + /* Initialize try_fmt */ > > > + ov02a10_fill_fmt(&supported_modes[0], try_fmt); > > > > If this is all you need, you should implement the init_cfg pad op. > > > > It seems that other sensors (for instance, OV8856, OV13858 etc.) > initialize try_fmt in the same way. Yes; these drivers should be changed as well. ... > > > + ov02a10_test_pattern_val[ctrl->val]); > > > + break; > > > + case V4L2_CID_HFLIP: > > > + if (ov02a10->streaming) > > > + return -EBUSY; > > > > You could instead use v4l2_ctrl_grab() (or the unlocked variant) when > > streaming starts. Same below. > > > > It seems that other sensors (for instance, OV2680 etc.) > call V4L2_CID_HFLIP/V4L2_CID_VFLIP in the same way. That's ok. -- Regards, Sakari Ailus