[media] v4l2-subdev: replace v4l2_subdev_fh by v4l2_subdev_pad_config
If a subdevice pad op is called from a bridge driver, then there is no v4l2_subdev_fh struct that can be passed to the subdevice. This made it hard to use such subdevs from a bridge driver. This patch replaces the v4l2_subdev_fh pointer by a v4l2_subdev_pad_config pointer in the pad ops. This allows bridge drivers to use the various try_ pad ops by creating a v4l2_subdev_pad_config struct and passing it along to the pad op. The v4l2_subdev_get_try_* macros had to be changed because of this, so I also took the opportunity to use the full name of the v4l2_subdev_get_try_* functions in the __V4L2_SUBDEV_MK_GET_TRY macro arguments: if you now do 'git grep v4l2_subdev_get_try_format' you will actually find the header where it is defined. One remark regarding the drivers/staging/media/davinci_vpfe patches: the *_init_formats() functions assumed that fh could be NULL. However, that's not true for this driver, it's always set. This is almost certainly a copy and paste from the omap3isp driver. I've updated the code to reflect the fact that fh is never NULL. 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: Sakari Ailus <sakari.ailus@linux.intel.com> Acked-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:

committed by
Mauro Carvalho Chehab

parent
3d945be05a
commit
f7234138f1
@@ -582,7 +582,7 @@ static void adv7180_exit_controls(struct adv7180_state *state)
|
||||
}
|
||||
|
||||
static int adv7180_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index != 0)
|
||||
@@ -645,13 +645,13 @@ static int adv7180_set_field_mode(struct adv7180_state *state)
|
||||
}
|
||||
|
||||
static int adv7180_get_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct adv7180_state *state = to_state(sd);
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
format->format = *v4l2_subdev_get_try_format(fh, 0);
|
||||
format->format = *v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
} else {
|
||||
adv7180_mbus_fmt(sd, &format->format);
|
||||
format->format.field = state->field;
|
||||
@@ -661,7 +661,7 @@ static int adv7180_get_pad_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv7180_set_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct adv7180_state *state = to_state(sd);
|
||||
@@ -686,7 +686,7 @@ static int adv7180_set_pad_format(struct v4l2_subdev *sd,
|
||||
adv7180_set_power(state, true);
|
||||
}
|
||||
} else {
|
||||
framefmt = v4l2_subdev_get_try_format(fh, 0);
|
||||
framefmt = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
*framefmt = format->format;
|
||||
}
|
||||
|
||||
|
@@ -810,7 +810,7 @@ static int adv7511_get_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid)
|
||||
}
|
||||
|
||||
static int adv7511_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad != 0)
|
||||
@@ -842,8 +842,9 @@ static void adv7511_fill_format(struct adv7511_state *state,
|
||||
format->field = V4L2_FIELD_NONE;
|
||||
}
|
||||
|
||||
static int adv7511_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_format *format)
|
||||
static int adv7511_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct adv7511_state *state = get_adv7511_state(sd);
|
||||
|
||||
@@ -855,7 +856,7 @@ static int adv7511_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *fmt;
|
||||
|
||||
fmt = v4l2_subdev_get_try_format(fh, format->pad);
|
||||
fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
|
||||
format->format.code = fmt->code;
|
||||
format->format.colorspace = fmt->colorspace;
|
||||
format->format.ycbcr_enc = fmt->ycbcr_enc;
|
||||
@@ -870,8 +871,9 @@ static int adv7511_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int adv7511_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_format *format)
|
||||
static int adv7511_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct adv7511_state *state = get_adv7511_state(sd);
|
||||
/*
|
||||
@@ -905,7 +907,7 @@ static int adv7511_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *fmt;
|
||||
|
||||
fmt = v4l2_subdev_get_try_format(fh, format->pad);
|
||||
fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
|
||||
fmt->code = format->format.code;
|
||||
fmt->colorspace = format->format.colorspace;
|
||||
fmt->ycbcr_enc = format->format.ycbcr_enc;
|
||||
|
@@ -1734,7 +1734,7 @@ static int adv76xx_s_routing(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv76xx_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct adv76xx_state *state = to_state(sd);
|
||||
@@ -1811,7 +1811,8 @@ static void adv76xx_setup_format(struct adv76xx_state *state)
|
||||
state->format->swap_cb_cr ? ADV76XX_OP_SWAP_CB_CR : 0);
|
||||
}
|
||||
|
||||
static int adv76xx_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
static int adv76xx_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct adv76xx_state *state = to_state(sd);
|
||||
@@ -1824,7 +1825,7 @@ static int adv76xx_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *fmt;
|
||||
|
||||
fmt = v4l2_subdev_get_try_format(fh, format->pad);
|
||||
fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
|
||||
format->format.code = fmt->code;
|
||||
} else {
|
||||
format->format.code = state->format->code;
|
||||
@@ -1833,7 +1834,8 @@ static int adv76xx_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int adv76xx_set_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
static int adv76xx_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct adv76xx_state *state = to_state(sd);
|
||||
@@ -1852,7 +1854,7 @@ static int adv76xx_set_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *fmt;
|
||||
|
||||
fmt = v4l2_subdev_get_try_format(fh, format->pad);
|
||||
fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
|
||||
fmt->code = format->format.code;
|
||||
} else {
|
||||
state->format = info;
|
||||
|
@@ -531,17 +531,17 @@ static int __find_resolution(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static struct v4l2_mbus_framefmt *__find_format(struct m5mols_info *info,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
enum v4l2_subdev_format_whence which,
|
||||
enum m5mols_restype type)
|
||||
{
|
||||
if (which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return fh ? v4l2_subdev_get_try_format(fh, 0) : NULL;
|
||||
return cfg ? v4l2_subdev_get_try_format(&info->sd, cfg, 0) : NULL;
|
||||
|
||||
return &info->ffmt[type];
|
||||
}
|
||||
|
||||
static int m5mols_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
static int m5mols_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct m5mols_info *info = to_m5mols(sd);
|
||||
@@ -550,7 +550,7 @@ static int m5mols_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
|
||||
mutex_lock(&info->lock);
|
||||
|
||||
format = __find_format(info, fh, fmt->which, info->res_type);
|
||||
format = __find_format(info, cfg, fmt->which, info->res_type);
|
||||
if (format)
|
||||
fmt->format = *format;
|
||||
else
|
||||
@@ -560,7 +560,7 @@ static int m5mols_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int m5mols_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
static int m5mols_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct m5mols_info *info = to_m5mols(sd);
|
||||
@@ -574,7 +574,7 @@ static int m5mols_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
sfmt = __find_format(info, fh, fmt->which, type);
|
||||
sfmt = __find_format(info, cfg, fmt->which, type);
|
||||
if (!sfmt)
|
||||
return 0;
|
||||
|
||||
@@ -640,7 +640,7 @@ static int m5mols_set_frame_desc(struct v4l2_subdev *sd, unsigned int pad,
|
||||
|
||||
|
||||
static int m5mols_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (!code || code->index >= SIZE_DEFAULT_FFMT)
|
||||
@@ -895,7 +895,7 @@ static const struct v4l2_subdev_core_ops m5mols_core_ops = {
|
||||
*/
|
||||
static int m5mols_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *format = v4l2_subdev_get_try_format(fh, 0);
|
||||
struct v4l2_mbus_framefmt *format = v4l2_subdev_get_try_format(sd, fh->pad, 0);
|
||||
|
||||
*format = m5mols_default_ffmt[0];
|
||||
return 0;
|
||||
|
@@ -317,7 +317,7 @@ static int mt9m032_setup_pll(struct mt9m032 *sensor)
|
||||
*/
|
||||
|
||||
static int mt9m032_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index != 0)
|
||||
@@ -328,7 +328,7 @@ static int mt9m032_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9m032_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->index != 0 || fse->code != MEDIA_BUS_FMT_Y8_1X8)
|
||||
@@ -345,18 +345,18 @@ static int mt9m032_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
/**
|
||||
* __mt9m032_get_pad_crop() - get crop rect
|
||||
* @sensor: pointer to the sensor struct
|
||||
* @fh: file handle for getting the try crop rect from
|
||||
* @cfg: v4l2_subdev_pad_config for getting the try crop rect from
|
||||
* @which: select try or active crop rect
|
||||
*
|
||||
* Returns a pointer the current active or fh relative try crop rect
|
||||
*/
|
||||
static struct v4l2_rect *
|
||||
__mt9m032_get_pad_crop(struct mt9m032 *sensor, struct v4l2_subdev_fh *fh,
|
||||
__mt9m032_get_pad_crop(struct mt9m032 *sensor, struct v4l2_subdev_pad_config *cfg,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_crop(fh, 0);
|
||||
return v4l2_subdev_get_try_crop(&sensor->subdev, cfg, 0);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &sensor->crop;
|
||||
default:
|
||||
@@ -367,18 +367,18 @@ __mt9m032_get_pad_crop(struct mt9m032 *sensor, struct v4l2_subdev_fh *fh,
|
||||
/**
|
||||
* __mt9m032_get_pad_format() - get format
|
||||
* @sensor: pointer to the sensor struct
|
||||
* @fh: file handle for getting the try format from
|
||||
* @cfg: v4l2_subdev_pad_config for getting the try format from
|
||||
* @which: select try or active format
|
||||
*
|
||||
* Returns a pointer the current active or fh relative try format
|
||||
*/
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__mt9m032_get_pad_format(struct mt9m032 *sensor, struct v4l2_subdev_fh *fh,
|
||||
__mt9m032_get_pad_format(struct mt9m032 *sensor, struct v4l2_subdev_pad_config *cfg,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_format(fh, 0);
|
||||
return v4l2_subdev_get_try_format(&sensor->subdev, cfg, 0);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &sensor->format;
|
||||
default:
|
||||
@@ -387,20 +387,20 @@ __mt9m032_get_pad_format(struct mt9m032 *sensor, struct v4l2_subdev_fh *fh,
|
||||
}
|
||||
|
||||
static int mt9m032_get_pad_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct mt9m032 *sensor = to_mt9m032(subdev);
|
||||
|
||||
mutex_lock(&sensor->lock);
|
||||
fmt->format = *__mt9m032_get_pad_format(sensor, fh, fmt->which);
|
||||
fmt->format = *__mt9m032_get_pad_format(sensor, cfg, fmt->which);
|
||||
mutex_unlock(&sensor->lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt9m032_set_pad_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct mt9m032 *sensor = to_mt9m032(subdev);
|
||||
@@ -414,7 +414,7 @@ static int mt9m032_set_pad_format(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
/* Scaling is not supported, the format is thus fixed. */
|
||||
fmt->format = *__mt9m032_get_pad_format(sensor, fh, fmt->which);
|
||||
fmt->format = *__mt9m032_get_pad_format(sensor, cfg, fmt->which);
|
||||
ret = 0;
|
||||
|
||||
done:
|
||||
@@ -423,7 +423,7 @@ done:
|
||||
}
|
||||
|
||||
static int mt9m032_get_pad_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct mt9m032 *sensor = to_mt9m032(subdev);
|
||||
@@ -432,14 +432,14 @@ static int mt9m032_get_pad_selection(struct v4l2_subdev *subdev,
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&sensor->lock);
|
||||
sel->r = *__mt9m032_get_pad_crop(sensor, fh, sel->which);
|
||||
sel->r = *__mt9m032_get_pad_crop(sensor, cfg, sel->which);
|
||||
mutex_unlock(&sensor->lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt9m032_set_pad_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct mt9m032 *sensor = to_mt9m032(subdev);
|
||||
@@ -475,13 +475,13 @@ static int mt9m032_set_pad_selection(struct v4l2_subdev *subdev,
|
||||
rect.height = min_t(unsigned int, rect.height,
|
||||
MT9M032_PIXEL_ARRAY_HEIGHT - rect.top);
|
||||
|
||||
__crop = __mt9m032_get_pad_crop(sensor, fh, sel->which);
|
||||
__crop = __mt9m032_get_pad_crop(sensor, cfg, sel->which);
|
||||
|
||||
if (rect.width != __crop->width || rect.height != __crop->height) {
|
||||
/* Reset the output image size if the crop rectangle size has
|
||||
* been modified.
|
||||
*/
|
||||
format = __mt9m032_get_pad_format(sensor, fh, sel->which);
|
||||
format = __mt9m032_get_pad_format(sensor, cfg, sel->which);
|
||||
format->width = rect.width;
|
||||
format->height = rect.height;
|
||||
}
|
||||
|
@@ -474,7 +474,7 @@ static int mt9p031_s_stream(struct v4l2_subdev *subdev, int enable)
|
||||
}
|
||||
|
||||
static int mt9p031_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct mt9p031 *mt9p031 = to_mt9p031(subdev);
|
||||
@@ -487,7 +487,7 @@ static int mt9p031_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9p031_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct mt9p031 *mt9p031 = to_mt9p031(subdev);
|
||||
@@ -505,12 +505,12 @@ static int mt9p031_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__mt9p031_get_pad_format(struct mt9p031 *mt9p031, struct v4l2_subdev_fh *fh,
|
||||
__mt9p031_get_pad_format(struct mt9p031 *mt9p031, struct v4l2_subdev_pad_config *cfg,
|
||||
unsigned int pad, u32 which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_format(fh, pad);
|
||||
return v4l2_subdev_get_try_format(&mt9p031->subdev, cfg, pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &mt9p031->format;
|
||||
default:
|
||||
@@ -519,12 +519,12 @@ __mt9p031_get_pad_format(struct mt9p031 *mt9p031, struct v4l2_subdev_fh *fh,
|
||||
}
|
||||
|
||||
static struct v4l2_rect *
|
||||
__mt9p031_get_pad_crop(struct mt9p031 *mt9p031, struct v4l2_subdev_fh *fh,
|
||||
__mt9p031_get_pad_crop(struct mt9p031 *mt9p031, struct v4l2_subdev_pad_config *cfg,
|
||||
unsigned int pad, u32 which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_crop(fh, pad);
|
||||
return v4l2_subdev_get_try_crop(&mt9p031->subdev, cfg, pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &mt9p031->crop;
|
||||
default:
|
||||
@@ -533,18 +533,18 @@ __mt9p031_get_pad_crop(struct mt9p031 *mt9p031, struct v4l2_subdev_fh *fh,
|
||||
}
|
||||
|
||||
static int mt9p031_get_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct mt9p031 *mt9p031 = to_mt9p031(subdev);
|
||||
|
||||
fmt->format = *__mt9p031_get_pad_format(mt9p031, fh, fmt->pad,
|
||||
fmt->format = *__mt9p031_get_pad_format(mt9p031, cfg, fmt->pad,
|
||||
fmt->which);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt9p031_set_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct mt9p031 *mt9p031 = to_mt9p031(subdev);
|
||||
@@ -555,7 +555,7 @@ static int mt9p031_set_format(struct v4l2_subdev *subdev,
|
||||
unsigned int hratio;
|
||||
unsigned int vratio;
|
||||
|
||||
__crop = __mt9p031_get_pad_crop(mt9p031, fh, format->pad,
|
||||
__crop = __mt9p031_get_pad_crop(mt9p031, cfg, format->pad,
|
||||
format->which);
|
||||
|
||||
/* Clamp the width and height to avoid dividing by zero. */
|
||||
@@ -571,7 +571,7 @@ static int mt9p031_set_format(struct v4l2_subdev *subdev,
|
||||
hratio = DIV_ROUND_CLOSEST(__crop->width, width);
|
||||
vratio = DIV_ROUND_CLOSEST(__crop->height, height);
|
||||
|
||||
__format = __mt9p031_get_pad_format(mt9p031, fh, format->pad,
|
||||
__format = __mt9p031_get_pad_format(mt9p031, cfg, format->pad,
|
||||
format->which);
|
||||
__format->width = __crop->width / hratio;
|
||||
__format->height = __crop->height / vratio;
|
||||
@@ -582,7 +582,7 @@ static int mt9p031_set_format(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9p031_get_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct mt9p031 *mt9p031 = to_mt9p031(subdev);
|
||||
@@ -590,12 +590,12 @@ static int mt9p031_get_selection(struct v4l2_subdev *subdev,
|
||||
if (sel->target != V4L2_SEL_TGT_CROP)
|
||||
return -EINVAL;
|
||||
|
||||
sel->r = *__mt9p031_get_pad_crop(mt9p031, fh, sel->pad, sel->which);
|
||||
sel->r = *__mt9p031_get_pad_crop(mt9p031, cfg, sel->pad, sel->which);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt9p031_set_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct mt9p031 *mt9p031 = to_mt9p031(subdev);
|
||||
@@ -625,13 +625,13 @@ static int mt9p031_set_selection(struct v4l2_subdev *subdev,
|
||||
rect.height = min_t(unsigned int, rect.height,
|
||||
MT9P031_PIXEL_ARRAY_HEIGHT - rect.top);
|
||||
|
||||
__crop = __mt9p031_get_pad_crop(mt9p031, fh, sel->pad, sel->which);
|
||||
__crop = __mt9p031_get_pad_crop(mt9p031, cfg, sel->pad, sel->which);
|
||||
|
||||
if (rect.width != __crop->width || rect.height != __crop->height) {
|
||||
/* Reset the output image size if the crop rectangle size has
|
||||
* been modified.
|
||||
*/
|
||||
__format = __mt9p031_get_pad_format(mt9p031, fh, sel->pad,
|
||||
__format = __mt9p031_get_pad_format(mt9p031, cfg, sel->pad,
|
||||
sel->which);
|
||||
__format->width = rect.width;
|
||||
__format->height = rect.height;
|
||||
@@ -946,13 +946,13 @@ static int mt9p031_open(struct v4l2_subdev *subdev, struct v4l2_subdev_fh *fh)
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
struct v4l2_rect *crop;
|
||||
|
||||
crop = v4l2_subdev_get_try_crop(fh, 0);
|
||||
crop = v4l2_subdev_get_try_crop(subdev, fh->pad, 0);
|
||||
crop->left = MT9P031_COLUMN_START_DEF;
|
||||
crop->top = MT9P031_ROW_START_DEF;
|
||||
crop->width = MT9P031_WINDOW_WIDTH_DEF;
|
||||
crop->height = MT9P031_WINDOW_HEIGHT_DEF;
|
||||
|
||||
format = v4l2_subdev_get_try_format(fh, 0);
|
||||
format = v4l2_subdev_get_try_format(subdev, fh->pad, 0);
|
||||
|
||||
if (mt9p031->model == MT9P031_MODEL_MONOCHROME)
|
||||
format->code = MEDIA_BUS_FMT_Y12_1X12;
|
||||
|
@@ -244,12 +244,12 @@ static int __mt9t001_set_power(struct mt9t001 *mt9t001, bool on)
|
||||
*/
|
||||
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__mt9t001_get_pad_format(struct mt9t001 *mt9t001, struct v4l2_subdev_fh *fh,
|
||||
__mt9t001_get_pad_format(struct mt9t001 *mt9t001, struct v4l2_subdev_pad_config *cfg,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_format(fh, pad);
|
||||
return v4l2_subdev_get_try_format(&mt9t001->subdev, cfg, pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &mt9t001->format;
|
||||
default:
|
||||
@@ -258,12 +258,12 @@ __mt9t001_get_pad_format(struct mt9t001 *mt9t001, struct v4l2_subdev_fh *fh,
|
||||
}
|
||||
|
||||
static struct v4l2_rect *
|
||||
__mt9t001_get_pad_crop(struct mt9t001 *mt9t001, struct v4l2_subdev_fh *fh,
|
||||
__mt9t001_get_pad_crop(struct mt9t001 *mt9t001, struct v4l2_subdev_pad_config *cfg,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_crop(fh, pad);
|
||||
return v4l2_subdev_get_try_crop(&mt9t001->subdev, cfg, pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &mt9t001->crop;
|
||||
default:
|
||||
@@ -327,7 +327,7 @@ static int mt9t001_s_stream(struct v4l2_subdev *subdev, int enable)
|
||||
}
|
||||
|
||||
static int mt9t001_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index > 0)
|
||||
@@ -338,7 +338,7 @@ static int mt9t001_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9t001_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->index >= 8 || fse->code != MEDIA_BUS_FMT_SGRBG10_1X10)
|
||||
@@ -353,18 +353,18 @@ static int mt9t001_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9t001_get_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct mt9t001 *mt9t001 = to_mt9t001(subdev);
|
||||
|
||||
format->format = *__mt9t001_get_pad_format(mt9t001, fh, format->pad,
|
||||
format->format = *__mt9t001_get_pad_format(mt9t001, cfg, format->pad,
|
||||
format->which);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt9t001_set_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct mt9t001 *mt9t001 = to_mt9t001(subdev);
|
||||
@@ -375,7 +375,7 @@ static int mt9t001_set_format(struct v4l2_subdev *subdev,
|
||||
unsigned int hratio;
|
||||
unsigned int vratio;
|
||||
|
||||
__crop = __mt9t001_get_pad_crop(mt9t001, fh, format->pad,
|
||||
__crop = __mt9t001_get_pad_crop(mt9t001, cfg, format->pad,
|
||||
format->which);
|
||||
|
||||
/* Clamp the width and height to avoid dividing by zero. */
|
||||
@@ -391,7 +391,7 @@ static int mt9t001_set_format(struct v4l2_subdev *subdev,
|
||||
hratio = DIV_ROUND_CLOSEST(__crop->width, width);
|
||||
vratio = DIV_ROUND_CLOSEST(__crop->height, height);
|
||||
|
||||
__format = __mt9t001_get_pad_format(mt9t001, fh, format->pad,
|
||||
__format = __mt9t001_get_pad_format(mt9t001, cfg, format->pad,
|
||||
format->which);
|
||||
__format->width = __crop->width / hratio;
|
||||
__format->height = __crop->height / vratio;
|
||||
@@ -402,7 +402,7 @@ static int mt9t001_set_format(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9t001_get_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct mt9t001 *mt9t001 = to_mt9t001(subdev);
|
||||
@@ -410,12 +410,12 @@ static int mt9t001_get_selection(struct v4l2_subdev *subdev,
|
||||
if (sel->target != V4L2_SEL_TGT_CROP)
|
||||
return -EINVAL;
|
||||
|
||||
sel->r = *__mt9t001_get_pad_crop(mt9t001, fh, sel->pad, sel->which);
|
||||
sel->r = *__mt9t001_get_pad_crop(mt9t001, cfg, sel->pad, sel->which);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt9t001_set_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct mt9t001 *mt9t001 = to_mt9t001(subdev);
|
||||
@@ -447,13 +447,13 @@ static int mt9t001_set_selection(struct v4l2_subdev *subdev,
|
||||
rect.height = min_t(unsigned int, rect.height,
|
||||
MT9T001_PIXEL_ARRAY_HEIGHT - rect.top);
|
||||
|
||||
__crop = __mt9t001_get_pad_crop(mt9t001, fh, sel->pad, sel->which);
|
||||
__crop = __mt9t001_get_pad_crop(mt9t001, cfg, sel->pad, sel->which);
|
||||
|
||||
if (rect.width != __crop->width || rect.height != __crop->height) {
|
||||
/* Reset the output image size if the crop rectangle size has
|
||||
* been modified.
|
||||
*/
|
||||
__format = __mt9t001_get_pad_format(mt9t001, fh, sel->pad,
|
||||
__format = __mt9t001_get_pad_format(mt9t001, cfg, sel->pad,
|
||||
sel->which);
|
||||
__format->width = rect.width;
|
||||
__format->height = rect.height;
|
||||
@@ -790,13 +790,13 @@ static int mt9t001_open(struct v4l2_subdev *subdev, struct v4l2_subdev_fh *fh)
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
struct v4l2_rect *crop;
|
||||
|
||||
crop = v4l2_subdev_get_try_crop(fh, 0);
|
||||
crop = v4l2_subdev_get_try_crop(subdev, fh->pad, 0);
|
||||
crop->left = MT9T001_COLUMN_START_DEF;
|
||||
crop->top = MT9T001_ROW_START_DEF;
|
||||
crop->width = MT9T001_WINDOW_WIDTH_DEF + 1;
|
||||
crop->height = MT9T001_WINDOW_HEIGHT_DEF + 1;
|
||||
|
||||
format = v4l2_subdev_get_try_format(fh, 0);
|
||||
format = v4l2_subdev_get_try_format(subdev, fh->pad, 0);
|
||||
format->code = MEDIA_BUS_FMT_SGRBG10_1X10;
|
||||
format->width = MT9T001_WINDOW_WIDTH_DEF + 1;
|
||||
format->height = MT9T001_WINDOW_HEIGHT_DEF + 1;
|
||||
|
@@ -371,12 +371,12 @@ static int __mt9v032_set_power(struct mt9v032 *mt9v032, bool on)
|
||||
*/
|
||||
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__mt9v032_get_pad_format(struct mt9v032 *mt9v032, struct v4l2_subdev_fh *fh,
|
||||
__mt9v032_get_pad_format(struct mt9v032 *mt9v032, struct v4l2_subdev_pad_config *cfg,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_format(fh, pad);
|
||||
return v4l2_subdev_get_try_format(&mt9v032->subdev, cfg, pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &mt9v032->format;
|
||||
default:
|
||||
@@ -385,12 +385,12 @@ __mt9v032_get_pad_format(struct mt9v032 *mt9v032, struct v4l2_subdev_fh *fh,
|
||||
}
|
||||
|
||||
static struct v4l2_rect *
|
||||
__mt9v032_get_pad_crop(struct mt9v032 *mt9v032, struct v4l2_subdev_fh *fh,
|
||||
__mt9v032_get_pad_crop(struct mt9v032 *mt9v032, struct v4l2_subdev_pad_config *cfg,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_crop(fh, pad);
|
||||
return v4l2_subdev_get_try_crop(&mt9v032->subdev, cfg, pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &mt9v032->crop;
|
||||
default:
|
||||
@@ -448,7 +448,7 @@ static int mt9v032_s_stream(struct v4l2_subdev *subdev, int enable)
|
||||
}
|
||||
|
||||
static int mt9v032_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index > 0)
|
||||
@@ -459,7 +459,7 @@ static int mt9v032_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9v032_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->index >= 3 || fse->code != MEDIA_BUS_FMT_SGRBG10_1X10)
|
||||
@@ -474,12 +474,12 @@ static int mt9v032_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9v032_get_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
|
||||
|
||||
format->format = *__mt9v032_get_pad_format(mt9v032, fh, format->pad,
|
||||
format->format = *__mt9v032_get_pad_format(mt9v032, cfg, format->pad,
|
||||
format->which);
|
||||
return 0;
|
||||
}
|
||||
@@ -509,7 +509,7 @@ static unsigned int mt9v032_calc_ratio(unsigned int input, unsigned int output)
|
||||
}
|
||||
|
||||
static int mt9v032_set_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
|
||||
@@ -520,7 +520,7 @@ static int mt9v032_set_format(struct v4l2_subdev *subdev,
|
||||
unsigned int hratio;
|
||||
unsigned int vratio;
|
||||
|
||||
__crop = __mt9v032_get_pad_crop(mt9v032, fh, format->pad,
|
||||
__crop = __mt9v032_get_pad_crop(mt9v032, cfg, format->pad,
|
||||
format->which);
|
||||
|
||||
/* Clamp the width and height to avoid dividing by zero. */
|
||||
@@ -536,7 +536,7 @@ static int mt9v032_set_format(struct v4l2_subdev *subdev,
|
||||
hratio = mt9v032_calc_ratio(__crop->width, width);
|
||||
vratio = mt9v032_calc_ratio(__crop->height, height);
|
||||
|
||||
__format = __mt9v032_get_pad_format(mt9v032, fh, format->pad,
|
||||
__format = __mt9v032_get_pad_format(mt9v032, cfg, format->pad,
|
||||
format->which);
|
||||
__format->width = __crop->width / hratio;
|
||||
__format->height = __crop->height / vratio;
|
||||
@@ -553,7 +553,7 @@ static int mt9v032_set_format(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9v032_get_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
|
||||
@@ -561,12 +561,12 @@ static int mt9v032_get_selection(struct v4l2_subdev *subdev,
|
||||
if (sel->target != V4L2_SEL_TGT_CROP)
|
||||
return -EINVAL;
|
||||
|
||||
sel->r = *__mt9v032_get_pad_crop(mt9v032, fh, sel->pad, sel->which);
|
||||
sel->r = *__mt9v032_get_pad_crop(mt9v032, cfg, sel->pad, sel->which);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt9v032_set_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
|
||||
@@ -598,13 +598,13 @@ static int mt9v032_set_selection(struct v4l2_subdev *subdev,
|
||||
rect.height = min_t(unsigned int,
|
||||
rect.height, MT9V032_PIXEL_ARRAY_HEIGHT - rect.top);
|
||||
|
||||
__crop = __mt9v032_get_pad_crop(mt9v032, fh, sel->pad, sel->which);
|
||||
__crop = __mt9v032_get_pad_crop(mt9v032, cfg, sel->pad, sel->which);
|
||||
|
||||
if (rect.width != __crop->width || rect.height != __crop->height) {
|
||||
/* Reset the output image size if the crop rectangle size has
|
||||
* been modified.
|
||||
*/
|
||||
__format = __mt9v032_get_pad_format(mt9v032, fh, sel->pad,
|
||||
__format = __mt9v032_get_pad_format(mt9v032, cfg, sel->pad,
|
||||
sel->which);
|
||||
__format->width = rect.width;
|
||||
__format->height = rect.height;
|
||||
@@ -810,13 +810,13 @@ static int mt9v032_open(struct v4l2_subdev *subdev, struct v4l2_subdev_fh *fh)
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
struct v4l2_rect *crop;
|
||||
|
||||
crop = v4l2_subdev_get_try_crop(fh, 0);
|
||||
crop = v4l2_subdev_get_try_crop(subdev, fh->pad, 0);
|
||||
crop->left = MT9V032_COLUMN_START_DEF;
|
||||
crop->top = MT9V032_ROW_START_DEF;
|
||||
crop->width = MT9V032_WINDOW_WIDTH_DEF;
|
||||
crop->height = MT9V032_WINDOW_HEIGHT_DEF;
|
||||
|
||||
format = v4l2_subdev_get_try_format(fh, 0);
|
||||
format = v4l2_subdev_get_try_format(subdev, fh->pad, 0);
|
||||
|
||||
if (mt9v032->model->color)
|
||||
format->code = MEDIA_BUS_FMT_SGRBG10_1X10;
|
||||
|
@@ -492,7 +492,7 @@ unlock:
|
||||
}
|
||||
|
||||
static int noon010_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index >= ARRAY_SIZE(noon010_formats))
|
||||
@@ -502,15 +502,16 @@ static int noon010_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int noon010_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
static int noon010_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct noon010_info *info = to_noon010(sd);
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
if (fh) {
|
||||
mf = v4l2_subdev_get_try_format(fh, 0);
|
||||
if (cfg) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
fmt->format = *mf;
|
||||
}
|
||||
return 0;
|
||||
@@ -542,7 +543,7 @@ static const struct noon010_format *noon010_try_fmt(struct v4l2_subdev *sd,
|
||||
return &noon010_formats[i];
|
||||
}
|
||||
|
||||
static int noon010_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
static int noon010_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct noon010_info *info = to_noon010(sd);
|
||||
@@ -557,8 +558,8 @@ static int noon010_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
fmt->format.field = V4L2_FIELD_NONE;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
if (fh) {
|
||||
mf = v4l2_subdev_get_try_format(fh, 0);
|
||||
if (cfg) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
*mf = fmt->format;
|
||||
}
|
||||
return 0;
|
||||
@@ -640,7 +641,7 @@ static int noon010_log_status(struct v4l2_subdev *sd)
|
||||
|
||||
static int noon010_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = v4l2_subdev_get_try_format(fh, 0);
|
||||
struct v4l2_mbus_framefmt *mf = v4l2_subdev_get_try_format(sd, fh->pad, 0);
|
||||
|
||||
mf->width = noon010_sizes[0].width;
|
||||
mf->height = noon010_sizes[0].height;
|
||||
|
@@ -1067,7 +1067,7 @@ static void ov965x_get_default_format(struct v4l2_mbus_framefmt *mf)
|
||||
}
|
||||
|
||||
static int ov965x_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index >= ARRAY_SIZE(ov965x_formats))
|
||||
@@ -1078,7 +1078,7 @@ static int ov965x_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov965x_enum_frame_sizes(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
int i = ARRAY_SIZE(ov965x_formats);
|
||||
@@ -1164,14 +1164,14 @@ static int ov965x_s_frame_interval(struct v4l2_subdev *sd,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ov965x_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
static int ov965x_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov965x *ov965x = to_ov965x(sd);
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mf = v4l2_subdev_get_try_format(fh, 0);
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
fmt->format = *mf;
|
||||
return 0;
|
||||
}
|
||||
@@ -1208,7 +1208,7 @@ static void __ov965x_try_frame_size(struct v4l2_mbus_framefmt *mf,
|
||||
*size = match;
|
||||
}
|
||||
|
||||
static int ov965x_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
static int ov965x_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
unsigned int index = ARRAY_SIZE(ov965x_formats);
|
||||
@@ -1230,8 +1230,8 @@ static int ov965x_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
mutex_lock(&ov965x->lock);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
if (fh != NULL) {
|
||||
mf = v4l2_subdev_get_try_format(fh, fmt->pad);
|
||||
if (cfg != NULL) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
*mf = fmt->format;
|
||||
}
|
||||
} else {
|
||||
@@ -1361,7 +1361,7 @@ static int ov965x_s_stream(struct v4l2_subdev *sd, int on)
|
||||
*/
|
||||
static int ov965x_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = v4l2_subdev_get_try_format(fh, 0);
|
||||
struct v4l2_mbus_framefmt *mf = v4l2_subdev_get_try_format(sd, fh->pad, 0);
|
||||
|
||||
ov965x_get_default_format(mf);
|
||||
return 0;
|
||||
|
@@ -824,10 +824,11 @@ static const struct s5c73m3_frame_size *s5c73m3_find_frame_size(
|
||||
}
|
||||
|
||||
static void s5c73m3_oif_try_format(struct s5c73m3 *state,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt,
|
||||
const struct s5c73m3_frame_size **fs)
|
||||
{
|
||||
struct v4l2_subdev *sd = &state->sensor_sd;
|
||||
u32 code;
|
||||
|
||||
switch (fmt->pad) {
|
||||
@@ -850,7 +851,7 @@ static void s5c73m3_oif_try_format(struct s5c73m3 *state,
|
||||
*fs = state->oif_pix_size[RES_ISP];
|
||||
else
|
||||
*fs = s5c73m3_find_frame_size(
|
||||
v4l2_subdev_get_try_format(fh,
|
||||
v4l2_subdev_get_try_format(sd, cfg,
|
||||
OIF_ISP_PAD),
|
||||
RES_ISP);
|
||||
break;
|
||||
@@ -860,7 +861,7 @@ static void s5c73m3_oif_try_format(struct s5c73m3 *state,
|
||||
}
|
||||
|
||||
static void s5c73m3_try_format(struct s5c73m3 *state,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt,
|
||||
const struct s5c73m3_frame_size **fs)
|
||||
{
|
||||
@@ -952,7 +953,7 @@ static int s5c73m3_oif_s_frame_interval(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5c73m3_oif_enum_frame_interval(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_interval_enum *fie)
|
||||
{
|
||||
struct s5c73m3 *state = oif_sd_to_s5c73m3(sd);
|
||||
@@ -990,7 +991,7 @@ static int s5c73m3_oif_get_pad_code(int pad, int index)
|
||||
}
|
||||
|
||||
static int s5c73m3_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5c73m3 *state = sensor_sd_to_s5c73m3(sd);
|
||||
@@ -998,7 +999,7 @@ static int s5c73m3_get_fmt(struct v4l2_subdev *sd,
|
||||
u32 code;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
fmt->format = *v4l2_subdev_get_try_format(fh, fmt->pad);
|
||||
fmt->format = *v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1024,7 +1025,7 @@ static int s5c73m3_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5c73m3_oif_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5c73m3 *state = oif_sd_to_s5c73m3(sd);
|
||||
@@ -1032,7 +1033,7 @@ static int s5c73m3_oif_get_fmt(struct v4l2_subdev *sd,
|
||||
u32 code;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
fmt->format = *v4l2_subdev_get_try_format(fh, fmt->pad);
|
||||
fmt->format = *v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1062,7 +1063,7 @@ static int s5c73m3_oif_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5c73m3_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
const struct s5c73m3_frame_size *frame_size = NULL;
|
||||
@@ -1072,10 +1073,10 @@ static int s5c73m3_set_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
mutex_lock(&state->lock);
|
||||
|
||||
s5c73m3_try_format(state, fh, fmt, &frame_size);
|
||||
s5c73m3_try_format(state, cfg, fmt, &frame_size);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mf = v4l2_subdev_get_try_format(fh, fmt->pad);
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
*mf = fmt->format;
|
||||
} else {
|
||||
switch (fmt->pad) {
|
||||
@@ -1101,7 +1102,7 @@ static int s5c73m3_set_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5c73m3_oif_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
const struct s5c73m3_frame_size *frame_size = NULL;
|
||||
@@ -1111,13 +1112,13 @@ static int s5c73m3_oif_set_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
mutex_lock(&state->lock);
|
||||
|
||||
s5c73m3_oif_try_format(state, fh, fmt, &frame_size);
|
||||
s5c73m3_oif_try_format(state, cfg, fmt, &frame_size);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mf = v4l2_subdev_get_try_format(fh, fmt->pad);
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
*mf = fmt->format;
|
||||
if (fmt->pad == OIF_ISP_PAD) {
|
||||
mf = v4l2_subdev_get_try_format(fh, OIF_SOURCE_PAD);
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, OIF_SOURCE_PAD);
|
||||
mf->width = fmt->format.width;
|
||||
mf->height = fmt->format.height;
|
||||
}
|
||||
@@ -1189,7 +1190,7 @@ static int s5c73m3_oif_set_frame_desc(struct v4l2_subdev *sd, unsigned int pad,
|
||||
}
|
||||
|
||||
static int s5c73m3_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
static const int codes[] = {
|
||||
@@ -1205,7 +1206,7 @@ static int s5c73m3_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5c73m3_oif_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
int ret;
|
||||
@@ -1220,7 +1221,7 @@ static int s5c73m3_oif_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5c73m3_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
int idx;
|
||||
@@ -1247,7 +1248,7 @@ static int s5c73m3_enum_frame_size(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5c73m3_oif_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
int idx;
|
||||
@@ -1260,7 +1261,7 @@ static int s5c73m3_oif_enum_frame_size(struct v4l2_subdev *sd,
|
||||
case S5C73M3_JPEG_FMT:
|
||||
case S5C73M3_ISP_FMT: {
|
||||
struct v4l2_mbus_framefmt *mf =
|
||||
v4l2_subdev_get_try_format(fh, OIF_ISP_PAD);
|
||||
v4l2_subdev_get_try_format(sd, cfg, OIF_ISP_PAD);
|
||||
|
||||
fse->max_width = fse->min_width = mf->width;
|
||||
fse->max_height = fse->min_height = mf->height;
|
||||
@@ -1306,11 +1307,11 @@ static int s5c73m3_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
mf = v4l2_subdev_get_try_format(fh, S5C73M3_ISP_PAD);
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->pad, S5C73M3_ISP_PAD);
|
||||
s5c73m3_fill_mbus_fmt(mf, &s5c73m3_isp_resolutions[1],
|
||||
S5C73M3_ISP_FMT);
|
||||
|
||||
mf = v4l2_subdev_get_try_format(fh, S5C73M3_JPEG_PAD);
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->pad, S5C73M3_JPEG_PAD);
|
||||
s5c73m3_fill_mbus_fmt(mf, &s5c73m3_jpeg_resolutions[1],
|
||||
S5C73M3_JPEG_FMT);
|
||||
|
||||
@@ -1321,15 +1322,15 @@ static int s5c73m3_oif_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
mf = v4l2_subdev_get_try_format(fh, OIF_ISP_PAD);
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->pad, OIF_ISP_PAD);
|
||||
s5c73m3_fill_mbus_fmt(mf, &s5c73m3_isp_resolutions[1],
|
||||
S5C73M3_ISP_FMT);
|
||||
|
||||
mf = v4l2_subdev_get_try_format(fh, OIF_JPEG_PAD);
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->pad, OIF_JPEG_PAD);
|
||||
s5c73m3_fill_mbus_fmt(mf, &s5c73m3_jpeg_resolutions[1],
|
||||
S5C73M3_JPEG_FMT);
|
||||
|
||||
mf = v4l2_subdev_get_try_format(fh, OIF_SOURCE_PAD);
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->pad, OIF_SOURCE_PAD);
|
||||
s5c73m3_fill_mbus_fmt(mf, &s5c73m3_isp_resolutions[1],
|
||||
S5C73M3_ISP_FMT);
|
||||
return 0;
|
||||
|
@@ -531,7 +531,7 @@ static int s5k4ecgx_try_frame_size(struct v4l2_mbus_framefmt *mf,
|
||||
}
|
||||
|
||||
static int s5k4ecgx_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index >= ARRAY_SIZE(s5k4ecgx_formats))
|
||||
@@ -541,15 +541,15 @@ static int s5k4ecgx_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int s5k4ecgx_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
static int s5k4ecgx_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5k4ecgx *priv = to_s5k4ecgx(sd);
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
if (fh) {
|
||||
mf = v4l2_subdev_get_try_format(fh, 0);
|
||||
if (cfg) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
fmt->format = *mf;
|
||||
}
|
||||
return 0;
|
||||
@@ -581,7 +581,7 @@ static const struct s5k4ecgx_pixfmt *s5k4ecgx_try_fmt(struct v4l2_subdev *sd,
|
||||
return &s5k4ecgx_formats[i];
|
||||
}
|
||||
|
||||
static int s5k4ecgx_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
static int s5k4ecgx_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5k4ecgx *priv = to_s5k4ecgx(sd);
|
||||
@@ -596,8 +596,8 @@ static int s5k4ecgx_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
fmt->format.field = V4L2_FIELD_NONE;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
if (fh) {
|
||||
mf = v4l2_subdev_get_try_format(fh, 0);
|
||||
if (cfg) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
*mf = fmt->format;
|
||||
}
|
||||
return 0;
|
||||
@@ -692,7 +692,7 @@ static int s5k4ecgx_registered(struct v4l2_subdev *sd)
|
||||
*/
|
||||
static int s5k4ecgx_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = v4l2_subdev_get_try_format(fh, 0);
|
||||
struct v4l2_mbus_framefmt *mf = v4l2_subdev_get_try_format(sd, fh->pad, 0);
|
||||
|
||||
mf->width = s5k4ecgx_prev_sizes[0].size.width;
|
||||
mf->height = s5k4ecgx_prev_sizes[0].size.height;
|
||||
|
@@ -1182,7 +1182,7 @@ static int s5k5baf_s_frame_interval(struct v4l2_subdev *sd,
|
||||
* V4L2 subdev pad level and video operations
|
||||
*/
|
||||
static int s5k5baf_enum_frame_interval(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_interval_enum *fie)
|
||||
{
|
||||
if (fie->index > S5K5BAF_MAX_FR_TIME - S5K5BAF_MIN_FR_TIME ||
|
||||
@@ -1201,7 +1201,7 @@ static int s5k5baf_enum_frame_interval(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5k5baf_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad == PAD_CIS) {
|
||||
@@ -1219,7 +1219,7 @@ static int s5k5baf_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5k5baf_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
int i;
|
||||
@@ -1276,7 +1276,7 @@ static int s5k5baf_try_isp_format(struct v4l2_mbus_framefmt *mf)
|
||||
return pixfmt;
|
||||
}
|
||||
|
||||
static int s5k5baf_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
static int s5k5baf_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5k5baf *state = to_s5k5baf(sd);
|
||||
@@ -1284,7 +1284,7 @@ static int s5k5baf_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mf = v4l2_subdev_get_try_format(fh, fmt->pad);
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
fmt->format = *mf;
|
||||
return 0;
|
||||
}
|
||||
@@ -1306,7 +1306,7 @@ static int s5k5baf_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int s5k5baf_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
static int s5k5baf_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &fmt->format;
|
||||
@@ -1317,7 +1317,7 @@ static int s5k5baf_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
mf->field = V4L2_FIELD_NONE;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
*v4l2_subdev_get_try_format(fh, fmt->pad) = *mf;
|
||||
*v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = *mf;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1369,7 +1369,7 @@ static int s5k5baf_is_bound_target(u32 target)
|
||||
}
|
||||
|
||||
static int s5k5baf_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
static enum selection_rect rtype;
|
||||
@@ -1389,9 +1389,9 @@ static int s5k5baf_get_selection(struct v4l2_subdev *sd,
|
||||
|
||||
if (sel->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
if (rtype == R_COMPOSE)
|
||||
sel->r = *v4l2_subdev_get_try_compose(fh, sel->pad);
|
||||
sel->r = *v4l2_subdev_get_try_compose(sd, cfg, sel->pad);
|
||||
else
|
||||
sel->r = *v4l2_subdev_get_try_crop(fh, sel->pad);
|
||||
sel->r = *v4l2_subdev_get_try_crop(sd, cfg, sel->pad);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1460,7 +1460,7 @@ static bool s5k5baf_cmp_rect(const struct v4l2_rect *r1,
|
||||
}
|
||||
|
||||
static int s5k5baf_set_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
static enum selection_rect rtype;
|
||||
@@ -1481,9 +1481,9 @@ static int s5k5baf_set_selection(struct v4l2_subdev *sd,
|
||||
if (sel->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
rects = (struct v4l2_rect * []) {
|
||||
&s5k5baf_cis_rect,
|
||||
v4l2_subdev_get_try_crop(fh, PAD_CIS),
|
||||
v4l2_subdev_get_try_compose(fh, PAD_CIS),
|
||||
v4l2_subdev_get_try_crop(fh, PAD_OUT)
|
||||
v4l2_subdev_get_try_crop(sd, cfg, PAD_CIS),
|
||||
v4l2_subdev_get_try_compose(sd, cfg, PAD_CIS),
|
||||
v4l2_subdev_get_try_crop(sd, cfg, PAD_OUT)
|
||||
};
|
||||
s5k5baf_set_rect_and_adjust(rects, rtype, &sel->r);
|
||||
return 0;
|
||||
@@ -1701,22 +1701,22 @@ static int s5k5baf_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
mf = v4l2_subdev_get_try_format(fh, PAD_CIS);
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->pad, PAD_CIS);
|
||||
s5k5baf_try_cis_format(mf);
|
||||
|
||||
if (s5k5baf_is_cis_subdev(sd))
|
||||
return 0;
|
||||
|
||||
mf = v4l2_subdev_get_try_format(fh, PAD_OUT);
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->pad, PAD_OUT);
|
||||
mf->colorspace = s5k5baf_formats[0].colorspace;
|
||||
mf->code = s5k5baf_formats[0].code;
|
||||
mf->width = s5k5baf_cis_rect.width;
|
||||
mf->height = s5k5baf_cis_rect.height;
|
||||
mf->field = V4L2_FIELD_NONE;
|
||||
|
||||
*v4l2_subdev_get_try_crop(fh, PAD_CIS) = s5k5baf_cis_rect;
|
||||
*v4l2_subdev_get_try_compose(fh, PAD_CIS) = s5k5baf_cis_rect;
|
||||
*v4l2_subdev_get_try_crop(fh, PAD_OUT) = s5k5baf_cis_rect;
|
||||
*v4l2_subdev_get_try_crop(sd, fh->pad, PAD_CIS) = s5k5baf_cis_rect;
|
||||
*v4l2_subdev_get_try_compose(sd, fh->pad, PAD_CIS) = s5k5baf_cis_rect;
|
||||
*v4l2_subdev_get_try_crop(sd, fh->pad, PAD_OUT) = s5k5baf_cis_rect;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -99,7 +99,7 @@ static const struct v4l2_mbus_framefmt *find_sensor_format(
|
||||
}
|
||||
|
||||
static int s5k6a3_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index >= ARRAY_SIZE(s5k6a3_formats))
|
||||
@@ -123,17 +123,17 @@ static void s5k6a3_try_format(struct v4l2_mbus_framefmt *mf)
|
||||
}
|
||||
|
||||
static struct v4l2_mbus_framefmt *__s5k6a3_get_format(
|
||||
struct s5k6a3 *sensor, struct v4l2_subdev_fh *fh,
|
||||
struct s5k6a3 *sensor, struct v4l2_subdev_pad_config *cfg,
|
||||
u32 pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
if (which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return fh ? v4l2_subdev_get_try_format(fh, pad) : NULL;
|
||||
return cfg ? v4l2_subdev_get_try_format(&sensor->subdev, cfg, pad) : NULL;
|
||||
|
||||
return &sensor->format;
|
||||
}
|
||||
|
||||
static int s5k6a3_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5k6a3 *sensor = sd_to_s5k6a3(sd);
|
||||
@@ -141,7 +141,7 @@ static int s5k6a3_set_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
s5k6a3_try_format(&fmt->format);
|
||||
|
||||
mf = __s5k6a3_get_format(sensor, fh, fmt->pad, fmt->which);
|
||||
mf = __s5k6a3_get_format(sensor, cfg, fmt->pad, fmt->which);
|
||||
if (mf) {
|
||||
mutex_lock(&sensor->lock);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_ACTIVE)
|
||||
@@ -152,13 +152,13 @@ static int s5k6a3_set_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5k6a3_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5k6a3 *sensor = sd_to_s5k6a3(sd);
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
mf = __s5k6a3_get_format(sensor, fh, fmt->pad, fmt->which);
|
||||
mf = __s5k6a3_get_format(sensor, cfg, fmt->pad, fmt->which);
|
||||
|
||||
mutex_lock(&sensor->lock);
|
||||
fmt->format = *mf;
|
||||
@@ -174,7 +174,7 @@ static struct v4l2_subdev_pad_ops s5k6a3_pad_ops = {
|
||||
|
||||
static int s5k6a3_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *format = v4l2_subdev_get_try_format(fh, 0);
|
||||
struct v4l2_mbus_framefmt *format = v4l2_subdev_get_try_format(sd, fh->pad, 0);
|
||||
|
||||
*format = s5k6a3_formats[0];
|
||||
format->width = S5K6A3_DEFAULT_WIDTH;
|
||||
|
@@ -996,7 +996,7 @@ static int s5k6aa_s_frame_interval(struct v4l2_subdev *sd,
|
||||
* V4L2 subdev pad level and video operations
|
||||
*/
|
||||
static int s5k6aa_enum_frame_interval(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_interval_enum *fie)
|
||||
{
|
||||
struct s5k6aa *s5k6aa = to_s5k6aa(sd);
|
||||
@@ -1023,7 +1023,7 @@ static int s5k6aa_enum_frame_interval(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5k6aa_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index >= ARRAY_SIZE(s5k6aa_formats))
|
||||
@@ -1034,7 +1034,7 @@ static int s5k6aa_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5k6aa_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
int i = ARRAY_SIZE(s5k6aa_formats);
|
||||
@@ -1056,14 +1056,14 @@ static int s5k6aa_enum_frame_size(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static struct v4l2_rect *
|
||||
__s5k6aa_get_crop_rect(struct s5k6aa *s5k6aa, struct v4l2_subdev_fh *fh,
|
||||
__s5k6aa_get_crop_rect(struct s5k6aa *s5k6aa, struct v4l2_subdev_pad_config *cfg,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
if (which == V4L2_SUBDEV_FORMAT_ACTIVE)
|
||||
return &s5k6aa->ccd_rect;
|
||||
|
||||
WARN_ON(which != V4L2_SUBDEV_FORMAT_TRY);
|
||||
return v4l2_subdev_get_try_crop(fh, 0);
|
||||
return v4l2_subdev_get_try_crop(&s5k6aa->sd, cfg, 0);
|
||||
}
|
||||
|
||||
static void s5k6aa_try_format(struct s5k6aa *s5k6aa,
|
||||
@@ -1087,7 +1087,7 @@ static void s5k6aa_try_format(struct s5k6aa *s5k6aa,
|
||||
mf->field = V4L2_FIELD_NONE;
|
||||
}
|
||||
|
||||
static int s5k6aa_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
static int s5k6aa_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5k6aa *s5k6aa = to_s5k6aa(sd);
|
||||
@@ -1096,7 +1096,7 @@ static int s5k6aa_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
memset(fmt->reserved, 0, sizeof(fmt->reserved));
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mf = v4l2_subdev_get_try_format(fh, 0);
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
fmt->format = *mf;
|
||||
return 0;
|
||||
}
|
||||
@@ -1108,7 +1108,7 @@ static int s5k6aa_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int s5k6aa_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
static int s5k6aa_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5k6aa *s5k6aa = to_s5k6aa(sd);
|
||||
@@ -1121,8 +1121,8 @@ static int s5k6aa_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
s5k6aa_try_format(s5k6aa, &fmt->format);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mf = v4l2_subdev_get_try_format(fh, fmt->pad);
|
||||
crop = v4l2_subdev_get_try_crop(fh, 0);
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
crop = v4l2_subdev_get_try_crop(sd, cfg, 0);
|
||||
} else {
|
||||
if (s5k6aa->streaming) {
|
||||
ret = -EBUSY;
|
||||
@@ -1162,7 +1162,7 @@ static int s5k6aa_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
}
|
||||
|
||||
static int s5k6aa_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct s5k6aa *s5k6aa = to_s5k6aa(sd);
|
||||
@@ -1174,7 +1174,7 @@ static int s5k6aa_get_selection(struct v4l2_subdev *sd,
|
||||
memset(sel->reserved, 0, sizeof(sel->reserved));
|
||||
|
||||
mutex_lock(&s5k6aa->lock);
|
||||
rect = __s5k6aa_get_crop_rect(s5k6aa, fh, sel->which);
|
||||
rect = __s5k6aa_get_crop_rect(s5k6aa, cfg, sel->which);
|
||||
sel->r = *rect;
|
||||
mutex_unlock(&s5k6aa->lock);
|
||||
|
||||
@@ -1185,7 +1185,7 @@ static int s5k6aa_get_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5k6aa_set_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct s5k6aa *s5k6aa = to_s5k6aa(sd);
|
||||
@@ -1197,13 +1197,13 @@ static int s5k6aa_set_selection(struct v4l2_subdev *sd,
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&s5k6aa->lock);
|
||||
crop_r = __s5k6aa_get_crop_rect(s5k6aa, fh, sel->which);
|
||||
crop_r = __s5k6aa_get_crop_rect(s5k6aa, cfg, sel->which);
|
||||
|
||||
if (sel->which == V4L2_SUBDEV_FORMAT_ACTIVE) {
|
||||
mf = &s5k6aa->preset->mbus_fmt;
|
||||
s5k6aa->apply_crop = 1;
|
||||
} else {
|
||||
mf = v4l2_subdev_get_try_format(fh, 0);
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
}
|
||||
v4l_bound_align_image(&sel->r.width, mf->width,
|
||||
S5K6AA_WIN_WIDTH_MAX, 1,
|
||||
@@ -1424,8 +1424,8 @@ static int s5k6aa_initialize_ctrls(struct s5k6aa *s5k6aa)
|
||||
*/
|
||||
static int s5k6aa_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *format = v4l2_subdev_get_try_format(fh, 0);
|
||||
struct v4l2_rect *crop = v4l2_subdev_get_try_crop(fh, 0);
|
||||
struct v4l2_mbus_framefmt *format = v4l2_subdev_get_try_format(sd, fh->pad, 0);
|
||||
struct v4l2_rect *crop = v4l2_subdev_get_try_crop(sd, fh->pad, 0);
|
||||
|
||||
format->colorspace = s5k6aa_formats[0].colorspace;
|
||||
format->code = s5k6aa_formats[0].code;
|
||||
|
@@ -1557,7 +1557,7 @@ static int smiapp_set_stream(struct v4l2_subdev *subdev, int enable)
|
||||
}
|
||||
|
||||
static int smiapp_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(subdev);
|
||||
@@ -1611,13 +1611,13 @@ static u32 __smiapp_get_mbus_code(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int __smiapp_get_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct smiapp_subdev *ssd = to_smiapp_subdev(subdev);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
fmt->format = *v4l2_subdev_get_try_format(fh, fmt->pad);
|
||||
fmt->format = *v4l2_subdev_get_try_format(subdev, cfg, fmt->pad);
|
||||
} else {
|
||||
struct v4l2_rect *r;
|
||||
|
||||
@@ -1636,21 +1636,21 @@ static int __smiapp_get_format(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int smiapp_get_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct smiapp_sensor *sensor = to_smiapp_sensor(subdev);
|
||||
int rval;
|
||||
|
||||
mutex_lock(&sensor->mutex);
|
||||
rval = __smiapp_get_format(subdev, fh, fmt);
|
||||
rval = __smiapp_get_format(subdev, cfg, fmt);
|
||||
mutex_unlock(&sensor->mutex);
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
static void smiapp_get_crop_compose(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_rect **crops,
|
||||
struct v4l2_rect **comps, int which)
|
||||
{
|
||||
@@ -1666,12 +1666,12 @@ static void smiapp_get_crop_compose(struct v4l2_subdev *subdev,
|
||||
} else {
|
||||
if (crops) {
|
||||
for (i = 0; i < subdev->entity.num_pads; i++) {
|
||||
crops[i] = v4l2_subdev_get_try_crop(fh, i);
|
||||
crops[i] = v4l2_subdev_get_try_crop(subdev, cfg, i);
|
||||
BUG_ON(!crops[i]);
|
||||
}
|
||||
}
|
||||
if (comps) {
|
||||
*comps = v4l2_subdev_get_try_compose(fh,
|
||||
*comps = v4l2_subdev_get_try_compose(subdev, cfg,
|
||||
SMIAPP_PAD_SINK);
|
||||
BUG_ON(!*comps);
|
||||
}
|
||||
@@ -1680,14 +1680,14 @@ static void smiapp_get_crop_compose(struct v4l2_subdev *subdev,
|
||||
|
||||
/* Changes require propagation only on sink pad. */
|
||||
static void smiapp_propagate(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh, int which,
|
||||
struct v4l2_subdev_pad_config *cfg, int which,
|
||||
int target)
|
||||
{
|
||||
struct smiapp_sensor *sensor = to_smiapp_sensor(subdev);
|
||||
struct smiapp_subdev *ssd = to_smiapp_subdev(subdev);
|
||||
struct v4l2_rect *comp, *crops[SMIAPP_PADS];
|
||||
|
||||
smiapp_get_crop_compose(subdev, fh, crops, &comp, which);
|
||||
smiapp_get_crop_compose(subdev, cfg, crops, &comp, which);
|
||||
|
||||
switch (target) {
|
||||
case V4L2_SEL_TGT_CROP:
|
||||
@@ -1730,7 +1730,7 @@ static const struct smiapp_csi_data_format
|
||||
}
|
||||
|
||||
static int smiapp_set_format_source(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct smiapp_sensor *sensor = to_smiapp_sensor(subdev);
|
||||
@@ -1741,7 +1741,7 @@ static int smiapp_set_format_source(struct v4l2_subdev *subdev,
|
||||
unsigned int i;
|
||||
int rval;
|
||||
|
||||
rval = __smiapp_get_format(subdev, fh, fmt);
|
||||
rval = __smiapp_get_format(subdev, cfg, fmt);
|
||||
if (rval)
|
||||
return rval;
|
||||
|
||||
@@ -1783,7 +1783,7 @@ static int smiapp_set_format_source(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int smiapp_set_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct smiapp_sensor *sensor = to_smiapp_sensor(subdev);
|
||||
@@ -1795,7 +1795,7 @@ static int smiapp_set_format(struct v4l2_subdev *subdev,
|
||||
if (fmt->pad == ssd->source_pad) {
|
||||
int rval;
|
||||
|
||||
rval = smiapp_set_format_source(subdev, fh, fmt);
|
||||
rval = smiapp_set_format_source(subdev, cfg, fmt);
|
||||
|
||||
mutex_unlock(&sensor->mutex);
|
||||
|
||||
@@ -1817,7 +1817,7 @@ static int smiapp_set_format(struct v4l2_subdev *subdev,
|
||||
sensor->limits[SMIAPP_LIMIT_MIN_Y_OUTPUT_SIZE],
|
||||
sensor->limits[SMIAPP_LIMIT_MAX_Y_OUTPUT_SIZE]);
|
||||
|
||||
smiapp_get_crop_compose(subdev, fh, crops, NULL, fmt->which);
|
||||
smiapp_get_crop_compose(subdev, cfg, crops, NULL, fmt->which);
|
||||
|
||||
crops[ssd->sink_pad]->left = 0;
|
||||
crops[ssd->sink_pad]->top = 0;
|
||||
@@ -1825,7 +1825,7 @@ static int smiapp_set_format(struct v4l2_subdev *subdev,
|
||||
crops[ssd->sink_pad]->height = fmt->format.height;
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_ACTIVE)
|
||||
ssd->sink_fmt = *crops[ssd->sink_pad];
|
||||
smiapp_propagate(subdev, fh, fmt->which,
|
||||
smiapp_propagate(subdev, cfg, fmt->which,
|
||||
V4L2_SEL_TGT_CROP);
|
||||
|
||||
mutex_unlock(&sensor->mutex);
|
||||
@@ -1878,7 +1878,7 @@ static int scaling_goodness(struct v4l2_subdev *subdev, int w, int ask_w,
|
||||
}
|
||||
|
||||
static void smiapp_set_compose_binner(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel,
|
||||
struct v4l2_rect **crops,
|
||||
struct v4l2_rect *comp)
|
||||
@@ -1926,7 +1926,7 @@ static void smiapp_set_compose_binner(struct v4l2_subdev *subdev,
|
||||
* result.
|
||||
*/
|
||||
static void smiapp_set_compose_scaler(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel,
|
||||
struct v4l2_rect **crops,
|
||||
struct v4l2_rect *comp)
|
||||
@@ -2042,25 +2042,25 @@ static void smiapp_set_compose_scaler(struct v4l2_subdev *subdev,
|
||||
}
|
||||
/* We're only called on source pads. This function sets scaling. */
|
||||
static int smiapp_set_compose(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct smiapp_sensor *sensor = to_smiapp_sensor(subdev);
|
||||
struct smiapp_subdev *ssd = to_smiapp_subdev(subdev);
|
||||
struct v4l2_rect *comp, *crops[SMIAPP_PADS];
|
||||
|
||||
smiapp_get_crop_compose(subdev, fh, crops, &comp, sel->which);
|
||||
smiapp_get_crop_compose(subdev, cfg, crops, &comp, sel->which);
|
||||
|
||||
sel->r.top = 0;
|
||||
sel->r.left = 0;
|
||||
|
||||
if (ssd == sensor->binner)
|
||||
smiapp_set_compose_binner(subdev, fh, sel, crops, comp);
|
||||
smiapp_set_compose_binner(subdev, cfg, sel, crops, comp);
|
||||
else
|
||||
smiapp_set_compose_scaler(subdev, fh, sel, crops, comp);
|
||||
smiapp_set_compose_scaler(subdev, cfg, sel, crops, comp);
|
||||
|
||||
*comp = sel->r;
|
||||
smiapp_propagate(subdev, fh, sel->which,
|
||||
smiapp_propagate(subdev, cfg, sel->which,
|
||||
V4L2_SEL_TGT_COMPOSE);
|
||||
|
||||
if (sel->which == V4L2_SUBDEV_FORMAT_ACTIVE)
|
||||
@@ -2113,7 +2113,7 @@ static int __smiapp_sel_supported(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int smiapp_set_crop(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct smiapp_sensor *sensor = to_smiapp_sensor(subdev);
|
||||
@@ -2121,7 +2121,7 @@ static int smiapp_set_crop(struct v4l2_subdev *subdev,
|
||||
struct v4l2_rect *src_size, *crops[SMIAPP_PADS];
|
||||
struct v4l2_rect _r;
|
||||
|
||||
smiapp_get_crop_compose(subdev, fh, crops, NULL, sel->which);
|
||||
smiapp_get_crop_compose(subdev, cfg, crops, NULL, sel->which);
|
||||
|
||||
if (sel->which == V4L2_SUBDEV_FORMAT_ACTIVE) {
|
||||
if (sel->pad == ssd->sink_pad)
|
||||
@@ -2132,15 +2132,15 @@ static int smiapp_set_crop(struct v4l2_subdev *subdev,
|
||||
if (sel->pad == ssd->sink_pad) {
|
||||
_r.left = 0;
|
||||
_r.top = 0;
|
||||
_r.width = v4l2_subdev_get_try_format(fh, sel->pad)
|
||||
_r.width = v4l2_subdev_get_try_format(subdev, cfg, sel->pad)
|
||||
->width;
|
||||
_r.height = v4l2_subdev_get_try_format(fh, sel->pad)
|
||||
_r.height = v4l2_subdev_get_try_format(subdev, cfg, sel->pad)
|
||||
->height;
|
||||
src_size = &_r;
|
||||
} else {
|
||||
src_size =
|
||||
v4l2_subdev_get_try_compose(
|
||||
fh, ssd->sink_pad);
|
||||
subdev, cfg, ssd->sink_pad);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2158,14 +2158,14 @@ static int smiapp_set_crop(struct v4l2_subdev *subdev,
|
||||
*crops[sel->pad] = sel->r;
|
||||
|
||||
if (ssd != sensor->pixel_array && sel->pad == SMIAPP_PAD_SINK)
|
||||
smiapp_propagate(subdev, fh, sel->which,
|
||||
smiapp_propagate(subdev, cfg, sel->which,
|
||||
V4L2_SEL_TGT_CROP);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __smiapp_get_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct smiapp_sensor *sensor = to_smiapp_sensor(subdev);
|
||||
@@ -2178,13 +2178,13 @@ static int __smiapp_get_selection(struct v4l2_subdev *subdev,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
smiapp_get_crop_compose(subdev, fh, crops, &comp, sel->which);
|
||||
smiapp_get_crop_compose(subdev, cfg, crops, &comp, sel->which);
|
||||
|
||||
if (sel->which == V4L2_SUBDEV_FORMAT_ACTIVE) {
|
||||
sink_fmt = ssd->sink_fmt;
|
||||
} else {
|
||||
struct v4l2_mbus_framefmt *fmt =
|
||||
v4l2_subdev_get_try_format(fh, ssd->sink_pad);
|
||||
v4l2_subdev_get_try_format(subdev, cfg, ssd->sink_pad);
|
||||
|
||||
sink_fmt.left = 0;
|
||||
sink_fmt.top = 0;
|
||||
@@ -2220,20 +2220,20 @@ static int __smiapp_get_selection(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int smiapp_get_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct smiapp_sensor *sensor = to_smiapp_sensor(subdev);
|
||||
int rval;
|
||||
|
||||
mutex_lock(&sensor->mutex);
|
||||
rval = __smiapp_get_selection(subdev, fh, sel);
|
||||
rval = __smiapp_get_selection(subdev, cfg, sel);
|
||||
mutex_unlock(&sensor->mutex);
|
||||
|
||||
return rval;
|
||||
}
|
||||
static int smiapp_set_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct smiapp_sensor *sensor = to_smiapp_sensor(subdev);
|
||||
@@ -2259,10 +2259,10 @@ static int smiapp_set_selection(struct v4l2_subdev *subdev,
|
||||
|
||||
switch (sel->target) {
|
||||
case V4L2_SEL_TGT_CROP:
|
||||
ret = smiapp_set_crop(subdev, fh, sel);
|
||||
ret = smiapp_set_crop(subdev, cfg, sel);
|
||||
break;
|
||||
case V4L2_SEL_TGT_COMPOSE:
|
||||
ret = smiapp_set_compose(subdev, fh, sel);
|
||||
ret = smiapp_set_compose(subdev, cfg, sel);
|
||||
break;
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
@@ -2841,8 +2841,8 @@ static int smiapp_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
|
||||
for (i = 0; i < ssd->npads; i++) {
|
||||
struct v4l2_mbus_framefmt *try_fmt =
|
||||
v4l2_subdev_get_try_format(fh, i);
|
||||
struct v4l2_rect *try_crop = v4l2_subdev_get_try_crop(fh, i);
|
||||
v4l2_subdev_get_try_format(sd, fh->pad, i);
|
||||
struct v4l2_rect *try_crop = v4l2_subdev_get_try_crop(sd, fh->pad, i);
|
||||
struct v4l2_rect *try_comp;
|
||||
|
||||
try_fmt->width = sensor->limits[SMIAPP_LIMIT_X_ADDR_MAX] + 1;
|
||||
@@ -2858,7 +2858,7 @@ static int smiapp_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
if (ssd != sensor->pixel_array)
|
||||
continue;
|
||||
|
||||
try_comp = v4l2_subdev_get_try_compose(fh, i);
|
||||
try_comp = v4l2_subdev_get_try_compose(sd, fh->pad, i);
|
||||
*try_comp = *try_crop;
|
||||
}
|
||||
|
||||
|
@@ -923,13 +923,13 @@ static const struct v4l2_ctrl_ops tvp514x_ctrl_ops = {
|
||||
/**
|
||||
* tvp514x_enum_mbus_code() - V4L2 decoder interface handler for enum_mbus_code
|
||||
* @sd: pointer to standard V4L2 sub-device structure
|
||||
* @fh: file handle
|
||||
* @cfg: pad configuration
|
||||
* @code: pointer to v4l2_subdev_mbus_code_enum structure
|
||||
*
|
||||
* Enumertaes mbus codes supported
|
||||
*/
|
||||
static int tvp514x_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
u32 pad = code->pad;
|
||||
@@ -950,13 +950,13 @@ static int tvp514x_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
/**
|
||||
* tvp514x_get_pad_format() - V4L2 decoder interface handler for get pad format
|
||||
* @sd: pointer to standard V4L2 sub-device structure
|
||||
* @fh: file handle
|
||||
* @cfg: pad configuration
|
||||
* @format: pointer to v4l2_subdev_format structure
|
||||
*
|
||||
* Retrieves pad format which is active or tried based on requirement
|
||||
*/
|
||||
static int tvp514x_get_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct tvp514x_decoder *decoder = to_decoder(sd);
|
||||
@@ -979,13 +979,13 @@ static int tvp514x_get_pad_format(struct v4l2_subdev *sd,
|
||||
/**
|
||||
* tvp514x_set_pad_format() - V4L2 decoder interface handler for set pad format
|
||||
* @sd: pointer to standard V4L2 sub-device structure
|
||||
* @fh: file handle
|
||||
* @cfg: pad configuration
|
||||
* @format: pointer to v4l2_subdev_format structure
|
||||
*
|
||||
* Set pad format for the output pad
|
||||
*/
|
||||
static int tvp514x_set_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_fh *fh,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct tvp514x_decoder *decoder = to_decoder(sd);
|
||||
|
@@ -846,13 +846,13 @@ static const struct v4l2_ctrl_ops tvp7002_ctrl_ops = {
|
||||
/*
|
||||
* tvp7002_enum_mbus_code() - Enum supported digital video format on pad
|
||||
* @sd: pointer to standard V4L2 sub-device structure
|
||||
* @fh: file handle for the subdev
|
||||
* @cfg: pad configuration
|
||||
* @code: pointer to subdev enum mbus code struct
|
||||
*
|
||||
* Enumerate supported digital video formats for pad.
|
||||
*/
|
||||
static int
|
||||
tvp7002_enum_mbus_code(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
tvp7002_enum_mbus_code(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
/* Check requested format index is within range */
|
||||
@@ -867,13 +867,13 @@ tvp7002_enum_mbus_code(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
/*
|
||||
* tvp7002_get_pad_format() - get video format on pad
|
||||
* @sd: pointer to standard V4L2 sub-device structure
|
||||
* @fh: file handle for the subdev
|
||||
* @cfg: pad configuration
|
||||
* @fmt: pointer to subdev format struct
|
||||
*
|
||||
* get video format for pad.
|
||||
*/
|
||||
static int
|
||||
tvp7002_get_pad_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
tvp7002_get_pad_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct tvp7002 *tvp7002 = to_tvp7002(sd);
|
||||
@@ -890,16 +890,16 @@ tvp7002_get_pad_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
/*
|
||||
* tvp7002_set_pad_format() - set video format on pad
|
||||
* @sd: pointer to standard V4L2 sub-device structure
|
||||
* @fh: file handle for the subdev
|
||||
* @cfg: pad configuration
|
||||
* @fmt: pointer to subdev format struct
|
||||
*
|
||||
* set video format for pad.
|
||||
*/
|
||||
static int
|
||||
tvp7002_set_pad_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh,
|
||||
tvp7002_set_pad_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
return tvp7002_get_pad_format(sd, fh, fmt);
|
||||
return tvp7002_get_pad_format(sd, cfg, fmt);
|
||||
}
|
||||
|
||||
/* V4L2 core operation handlers */
|
||||
|
Reference in New Issue
Block a user