[media] adv7180: add more subdev video ops
Add subdev video ops for ADV7180 video decoder. This makes decoder usable on the soc-camera drivers. [Sergei: renamed adv7180_try_mbus_fmt() to adv7180_mbus_fmt().] Signed-off-by: Vladimir Barinov <vladimir.barinov@cogentembedded.com> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
Родитель
5f454d82e5
Коммит
cccb83f7a1
|
@ -1,6 +1,8 @@
|
||||||
/*
|
/*
|
||||||
* adv7180.c Analog Devices ADV7180 video decoder driver
|
* adv7180.c Analog Devices ADV7180 video decoder driver
|
||||||
* Copyright (c) 2009 Intel Corporation
|
* Copyright (c) 2009 Intel Corporation
|
||||||
|
* Copyright (C) 2013 Cogent Embedded, Inc.
|
||||||
|
* Copyright (C) 2013 Renesas Solutions Corp.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
@ -397,10 +399,54 @@ static void adv7180_exit_controls(struct adv7180_state *state)
|
||||||
v4l2_ctrl_handler_free(&state->ctrl_hdl);
|
v4l2_ctrl_handler_free(&state->ctrl_hdl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int adv7180_enum_mbus_fmt(struct v4l2_subdev *sd, unsigned int index,
|
||||||
|
enum v4l2_mbus_pixelcode *code)
|
||||||
|
{
|
||||||
|
if (index > 0)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
*code = V4L2_MBUS_FMT_YUYV8_2X8;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int adv7180_mbus_fmt(struct v4l2_subdev *sd,
|
||||||
|
struct v4l2_mbus_framefmt *fmt)
|
||||||
|
{
|
||||||
|
struct adv7180_state *state = to_state(sd);
|
||||||
|
|
||||||
|
fmt->code = V4L2_MBUS_FMT_YUYV8_2X8;
|
||||||
|
fmt->colorspace = V4L2_COLORSPACE_SMPTE170M;
|
||||||
|
fmt->field = V4L2_FIELD_INTERLACED;
|
||||||
|
fmt->width = 720;
|
||||||
|
fmt->height = state->curr_norm & V4L2_STD_525_60 ? 480 : 576;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int adv7180_g_mbus_config(struct v4l2_subdev *sd,
|
||||||
|
struct v4l2_mbus_config *cfg)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* The ADV7180 sensor supports BT.601/656 output modes.
|
||||||
|
* The BT.656 is default and not yet configurable by s/w.
|
||||||
|
*/
|
||||||
|
cfg->flags = V4L2_MBUS_MASTER | V4L2_MBUS_PCLK_SAMPLE_RISING |
|
||||||
|
V4L2_MBUS_DATA_ACTIVE_HIGH;
|
||||||
|
cfg->type = V4L2_MBUS_BT656;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static const struct v4l2_subdev_video_ops adv7180_video_ops = {
|
static const struct v4l2_subdev_video_ops adv7180_video_ops = {
|
||||||
.querystd = adv7180_querystd,
|
.querystd = adv7180_querystd,
|
||||||
.g_input_status = adv7180_g_input_status,
|
.g_input_status = adv7180_g_input_status,
|
||||||
.s_routing = adv7180_s_routing,
|
.s_routing = adv7180_s_routing,
|
||||||
|
.enum_mbus_fmt = adv7180_enum_mbus_fmt,
|
||||||
|
.try_mbus_fmt = adv7180_mbus_fmt,
|
||||||
|
.g_mbus_fmt = adv7180_mbus_fmt,
|
||||||
|
.s_mbus_fmt = adv7180_mbus_fmt,
|
||||||
|
.g_mbus_config = adv7180_g_mbus_config,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct v4l2_subdev_core_ops adv7180_core_ops = {
|
static const struct v4l2_subdev_core_ops adv7180_core_ops = {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче