mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 01:10:04 +00:00
media: ov5640: Implement init_cfg
Implement the init_cfg pad operation to initialize the subdev state format to the default one. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
961bed9f6a
commit
90b0f355c5
1 changed files with 25 additions and 10 deletions
|
@ -411,6 +411,18 @@ static inline bool ov5640_is_csi2(const struct ov5640_dev *sensor)
|
|||
* over i2c.
|
||||
*/
|
||||
/* YUV422 UYVY VGA@30fps */
|
||||
|
||||
static const struct v4l2_mbus_framefmt ov5640_default_fmt = {
|
||||
.code = MEDIA_BUS_FMT_UYVY8_2X8,
|
||||
.width = 640,
|
||||
.height = 480,
|
||||
.colorspace = V4L2_COLORSPACE_SRGB,
|
||||
.ycbcr_enc = V4L2_MAP_YCBCR_ENC_DEFAULT(V4L2_COLORSPACE_SRGB),
|
||||
.quantization = V4L2_QUANTIZATION_FULL_RANGE,
|
||||
.xfer_func = V4L2_MAP_XFER_FUNC_DEFAULT(V4L2_COLORSPACE_SRGB),
|
||||
.field = V4L2_FIELD_NONE,
|
||||
};
|
||||
|
||||
static const struct reg_value ov5640_init_setting[] = {
|
||||
{0x3103, 0x11, 0, 0}, {0x3008, 0x82, 0, 5}, {0x3008, 0x42, 0, 0},
|
||||
{0x3103, 0x03, 0, 0}, {0x3630, 0x36, 0, 0},
|
||||
|
@ -3548,6 +3560,17 @@ static int ov5640_s_stream(struct v4l2_subdev *sd, int enable)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int ov5640_init_cfg(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *state)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *fmt =
|
||||
v4l2_subdev_get_try_format(sd, state, 0);
|
||||
|
||||
*fmt = ov5640_default_fmt;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct v4l2_subdev_core_ops ov5640_core_ops = {
|
||||
.s_power = ov5640_s_power,
|
||||
.log_status = v4l2_ctrl_subdev_log_status,
|
||||
|
@ -3562,6 +3585,7 @@ static const struct v4l2_subdev_video_ops ov5640_video_ops = {
|
|||
};
|
||||
|
||||
static const struct v4l2_subdev_pad_ops ov5640_pad_ops = {
|
||||
.init_cfg = ov5640_init_cfg,
|
||||
.enum_mbus_code = ov5640_enum_mbus_code,
|
||||
.get_fmt = ov5640_get_fmt,
|
||||
.set_fmt = ov5640_set_fmt,
|
||||
|
@ -3620,7 +3644,6 @@ static int ov5640_probe(struct i2c_client *client)
|
|||
struct device *dev = &client->dev;
|
||||
struct fwnode_handle *endpoint;
|
||||
struct ov5640_dev *sensor;
|
||||
struct v4l2_mbus_framefmt *fmt;
|
||||
u32 rotation;
|
||||
int ret;
|
||||
|
||||
|
@ -3634,15 +3657,7 @@ static int ov5640_probe(struct i2c_client *client)
|
|||
* default init sequence initialize sensor to
|
||||
* YUV422 UYVY VGA@30fps
|
||||
*/
|
||||
fmt = &sensor->fmt;
|
||||
fmt->code = MEDIA_BUS_FMT_UYVY8_2X8;
|
||||
fmt->colorspace = V4L2_COLORSPACE_SRGB;
|
||||
fmt->ycbcr_enc = V4L2_MAP_YCBCR_ENC_DEFAULT(fmt->colorspace);
|
||||
fmt->quantization = V4L2_QUANTIZATION_FULL_RANGE;
|
||||
fmt->xfer_func = V4L2_MAP_XFER_FUNC_DEFAULT(fmt->colorspace);
|
||||
fmt->width = 640;
|
||||
fmt->height = 480;
|
||||
fmt->field = V4L2_FIELD_NONE;
|
||||
sensor->fmt = ov5640_default_fmt;
|
||||
sensor->frame_interval.numerator = 1;
|
||||
sensor->frame_interval.denominator = ov5640_framerates[OV5640_30_FPS];
|
||||
sensor->current_fr = OV5640_30_FPS;
|
||||
|
|
Loading…
Reference in a new issue