mirror of https://gitee.com/openkylin/linux.git
[media] v4l2-subdev: add support for the new enum_frame_size 'which' field
Support the new 'which' field in the enum_frame_size ops. Most drivers do not need to be changed since they always returns the same enumeration regardless of the 'which' field. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Acked-by: Lad, Prabhakar <prabhakar.csengg@gmail.com> Tested-by: Lad, Prabhakar <prabhakar.csengg@gmail.com> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Acked-by: Andrzej Hajda <a.hajda@samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
3f1ccf16f3
commit
5778e749c1
|
@ -1251,6 +1251,7 @@ static int s5c73m3_oif_enum_frame_size(struct v4l2_subdev *sd,
|
|||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct s5c73m3 *state = oif_sd_to_s5c73m3(sd);
|
||||
int idx;
|
||||
|
||||
if (fse->pad == OIF_SOURCE_PAD) {
|
||||
|
@ -1260,11 +1261,25 @@ static int s5c73m3_oif_enum_frame_size(struct v4l2_subdev *sd,
|
|||
switch (fse->code) {
|
||||
case S5C73M3_JPEG_FMT:
|
||||
case S5C73M3_ISP_FMT: {
|
||||
struct v4l2_mbus_framefmt *mf =
|
||||
v4l2_subdev_get_try_format(sd, cfg, OIF_ISP_PAD);
|
||||
unsigned w, h;
|
||||
|
||||
fse->max_width = fse->min_width = mf->width;
|
||||
fse->max_height = fse->min_height = mf->height;
|
||||
if (fse->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg,
|
||||
OIF_ISP_PAD);
|
||||
|
||||
w = mf->width;
|
||||
h = mf->height;
|
||||
} else {
|
||||
const struct s5c73m3_frame_size *fs;
|
||||
|
||||
fs = state->oif_pix_size[RES_ISP];
|
||||
w = fs->width;
|
||||
h = fs->height;
|
||||
}
|
||||
fse->max_width = fse->min_width = w;
|
||||
fse->max_height = fse->min_height = h;
|
||||
return 0;
|
||||
}
|
||||
default:
|
||||
|
|
|
@ -1645,6 +1645,7 @@ static int vpfe_enum_size(struct file *file, void *priv,
|
|||
fse.index = fsize->index;
|
||||
fse.pad = 0;
|
||||
fse.code = mbus.code;
|
||||
fse.which = V4L2_SUBDEV_FORMAT_ACTIVE;
|
||||
ret = v4l2_subdev_call(sdinfo->sd, pad, enum_frame_size, NULL, &fse);
|
||||
if (ret)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -2195,7 +2195,7 @@ static int ccdc_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = 1;
|
||||
format.height = 1;
|
||||
ccdc_try_format(ccdc, cfg, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
|
||||
ccdc_try_format(ccdc, cfg, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
|
@ -2205,7 +2205,7 @@ static int ccdc_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = -1;
|
||||
format.height = -1;
|
||||
ccdc_try_format(ccdc, cfg, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
|
||||
ccdc_try_format(ccdc, cfg, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
|
|
|
@ -723,7 +723,7 @@ static int ccp2_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = 1;
|
||||
format.height = 1;
|
||||
ccp2_try_format(ccp2, cfg, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
|
||||
ccp2_try_format(ccp2, cfg, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
|
@ -733,7 +733,7 @@ static int ccp2_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = -1;
|
||||
format.height = -1;
|
||||
ccp2_try_format(ccp2, cfg, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
|
||||
ccp2_try_format(ccp2, cfg, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
|
|
|
@ -944,7 +944,7 @@ static int csi2_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = 1;
|
||||
format.height = 1;
|
||||
csi2_try_format(csi2, cfg, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
|
||||
csi2_try_format(csi2, cfg, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
|
@ -954,7 +954,7 @@ static int csi2_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = -1;
|
||||
format.height = -1;
|
||||
csi2_try_format(csi2, cfg, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
|
||||
csi2_try_format(csi2, cfg, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
|
|
|
@ -1905,7 +1905,7 @@ static int preview_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = 1;
|
||||
format.height = 1;
|
||||
preview_try_format(prev, cfg, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
|
||||
preview_try_format(prev, cfg, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
|
@ -1915,7 +1915,7 @@ static int preview_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = -1;
|
||||
format.height = -1;
|
||||
preview_try_format(prev, cfg, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
|
||||
preview_try_format(prev, cfg, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
|
|
|
@ -1451,7 +1451,7 @@ static int resizer_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = 1;
|
||||
format.height = 1;
|
||||
resizer_try_format(res, cfg, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
|
||||
resizer_try_format(res, cfg, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
|
@ -1461,7 +1461,7 @@ static int resizer_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = -1;
|
||||
format.height = -1;
|
||||
resizer_try_format(res, cfg, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
|
||||
resizer_try_format(res, cfg, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
|
|
|
@ -76,9 +76,11 @@ static int hsit_enum_frame_size(struct v4l2_subdev *subdev,
|
|||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct vsp1_hsit *hsit = to_hsit(subdev);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = v4l2_subdev_get_try_format(subdev, cfg, fse->pad);
|
||||
format = vsp1_entity_get_pad_format(&hsit->entity, cfg, fse->pad,
|
||||
fse->which);
|
||||
|
||||
if (fse->index || fse->code != format->code)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -109,9 +109,11 @@ static int lif_enum_frame_size(struct v4l2_subdev *subdev,
|
|||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct vsp1_lif *lif = to_lif(subdev);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = v4l2_subdev_get_try_format(subdev, cfg, LIF_PAD_SINK);
|
||||
format = vsp1_entity_get_pad_format(&lif->entity, cfg, LIF_PAD_SINK,
|
||||
fse->which);
|
||||
|
||||
if (fse->index || fse->code != format->code)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -117,9 +117,11 @@ static int lut_enum_frame_size(struct v4l2_subdev *subdev,
|
|||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct vsp1_lut *lut = to_lut(subdev);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = v4l2_subdev_get_try_format(subdev, cfg, fse->pad);
|
||||
format = vsp1_entity_get_pad_format(&lut->entity, cfg,
|
||||
fse->pad, fse->which);
|
||||
|
||||
if (fse->index || fse->code != format->code)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -48,7 +48,8 @@ int vsp1_rwpf_enum_frame_size(struct v4l2_subdev *subdev,
|
|||
struct vsp1_rwpf *rwpf = to_rwpf(subdev);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = v4l2_subdev_get_try_format(subdev, cfg, fse->pad);
|
||||
format = vsp1_entity_get_pad_format(&rwpf->entity, cfg, fse->pad,
|
||||
fse->which);
|
||||
|
||||
if (fse->index || fse->code != format->code)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -200,9 +200,11 @@ static int sru_enum_frame_size(struct v4l2_subdev *subdev,
|
|||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct vsp1_sru *sru = to_sru(subdev);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = v4l2_subdev_get_try_format(subdev, cfg, SRU_PAD_SINK);
|
||||
format = vsp1_entity_get_pad_format(&sru->entity, cfg,
|
||||
SRU_PAD_SINK, fse->which);
|
||||
|
||||
if (fse->index || fse->code != format->code)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -204,9 +204,11 @@ static int uds_enum_frame_size(struct v4l2_subdev *subdev,
|
|||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct vsp1_uds *uds = to_uds(subdev);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = v4l2_subdev_get_try_format(subdev, cfg, UDS_PAD_SINK);
|
||||
format = vsp1_entity_get_pad_format(&uds->entity, cfg,
|
||||
UDS_PAD_SINK, fse->which);
|
||||
|
||||
if (fse->index || fse->code != format->code)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -1548,8 +1548,7 @@ ipipe_enum_frame_size(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg
|
|||
format.code = fse->code;
|
||||
format.width = 1;
|
||||
format.height = 1;
|
||||
ipipe_try_format(ipipe, cfg, fse->pad, &format,
|
||||
V4L2_SUBDEV_FORMAT_TRY);
|
||||
ipipe_try_format(ipipe, cfg, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
|
@ -1559,8 +1558,7 @@ ipipe_enum_frame_size(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg
|
|||
format.code = fse->code;
|
||||
format.width = -1;
|
||||
format.height = -1;
|
||||
ipipe_try_format(ipipe, cfg, fse->pad, &format,
|
||||
V4L2_SUBDEV_FORMAT_TRY);
|
||||
ipipe_try_format(ipipe, cfg, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
|
|
|
@ -653,8 +653,7 @@ ipipeif_enum_frame_size(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *c
|
|||
format.code = fse->code;
|
||||
format.width = 1;
|
||||
format.height = 1;
|
||||
ipipeif_try_format(ipipeif, cfg, fse->pad, &format,
|
||||
V4L2_SUBDEV_FORMAT_TRY);
|
||||
ipipeif_try_format(ipipeif, cfg, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
|
@ -664,8 +663,7 @@ ipipeif_enum_frame_size(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *c
|
|||
format.code = fse->code;
|
||||
format.width = -1;
|
||||
format.height = -1;
|
||||
ipipeif_try_format(ipipeif, cfg, fse->pad, &format,
|
||||
V4L2_SUBDEV_FORMAT_TRY);
|
||||
ipipeif_try_format(ipipeif, cfg, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
|
|
|
@ -1489,7 +1489,7 @@ isif_enum_frame_size(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
|||
format.format.code = fse->code;
|
||||
format.format.width = 1;
|
||||
format.format.height = 1;
|
||||
format.which = V4L2_SUBDEV_FORMAT_TRY;
|
||||
format.which = fse->which;
|
||||
isif_try_format(isif, cfg, &format);
|
||||
fse->min_width = format.format.width;
|
||||
fse->min_height = format.format.height;
|
||||
|
@ -1501,7 +1501,7 @@ isif_enum_frame_size(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
|||
format.format.code = fse->code;
|
||||
format.format.width = -1;
|
||||
format.format.height = -1;
|
||||
format.which = V4L2_SUBDEV_FORMAT_TRY;
|
||||
format.which = fse->which;
|
||||
isif_try_format(isif, cfg, &format);
|
||||
fse->max_width = format.format.width;
|
||||
fse->max_height = format.format.height;
|
||||
|
|
|
@ -1484,8 +1484,7 @@ static int resizer_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = 1;
|
||||
format.height = 1;
|
||||
resizer_try_format(sd, cfg, fse->pad, &format,
|
||||
V4L2_SUBDEV_FORMAT_TRY);
|
||||
resizer_try_format(sd, cfg, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
|
@ -1495,8 +1494,7 @@ static int resizer_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = -1;
|
||||
format.height = -1;
|
||||
resizer_try_format(sd, cfg, fse->pad, &format,
|
||||
V4L2_SUBDEV_FORMAT_TRY);
|
||||
resizer_try_format(sd, cfg, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
|
|
|
@ -943,7 +943,7 @@ static int csi2_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = 1;
|
||||
format.height = 1;
|
||||
csi2_try_format(csi2, cfg, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
|
||||
csi2_try_format(csi2, cfg, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
|
@ -953,7 +953,7 @@ static int csi2_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = -1;
|
||||
format.height = -1;
|
||||
csi2_try_format(csi2, cfg, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
|
||||
csi2_try_format(csi2, cfg, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
|
|
|
@ -280,7 +280,7 @@ static int ipipe_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = 1;
|
||||
format.height = 1;
|
||||
ipipe_try_format(ipipe, cfg, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
|
||||
ipipe_try_format(ipipe, cfg, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
|
@ -290,7 +290,7 @@ static int ipipe_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = -1;
|
||||
format.height = -1;
|
||||
ipipe_try_format(ipipe, cfg, fse->pad, &format, V4L2_SUBDEV_FORMAT_TRY);
|
||||
ipipe_try_format(ipipe, cfg, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
|
|
|
@ -492,8 +492,7 @@ static int ipipeif_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = 1;
|
||||
format.height = 1;
|
||||
ipipeif_try_format(ipipeif, cfg, fse->pad, &format,
|
||||
V4L2_SUBDEV_FORMAT_TRY);
|
||||
ipipeif_try_format(ipipeif, cfg, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
|
@ -503,8 +502,7 @@ static int ipipeif_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = -1;
|
||||
format.height = -1;
|
||||
ipipeif_try_format(ipipeif, cfg, fse->pad, &format,
|
||||
V4L2_SUBDEV_FORMAT_TRY);
|
||||
ipipeif_try_format(ipipeif, cfg, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
|
|
|
@ -554,8 +554,7 @@ static int resizer_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = 1;
|
||||
format.height = 1;
|
||||
resizer_try_format(resizer, cfg, fse->pad, &format,
|
||||
V4L2_SUBDEV_FORMAT_TRY);
|
||||
resizer_try_format(resizer, cfg, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
|
@ -565,8 +564,7 @@ static int resizer_enum_frame_size(struct v4l2_subdev *sd,
|
|||
format.code = fse->code;
|
||||
format.width = -1;
|
||||
format.height = -1;
|
||||
resizer_try_format(resizer, cfg, fse->pad, &format,
|
||||
V4L2_SUBDEV_FORMAT_TRY);
|
||||
resizer_try_format(resizer, cfg, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
|
|
Loading…
Reference in New Issue