mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-10 06:34:17 +08:00
media: v4l2-subdev: add subdev-wide state struct
We have 'struct v4l2_subdev_pad_config' which contains configuration for a single pad used for the TRY functionality, and an array of those structs is passed to various v4l2_subdev_pad_ops. I was working on subdev internal routing between pads, and realized that there's no way to add TRY functionality for routes, which is not pad specific configuration. Adding a separate struct for try-route config wouldn't work either, as e.g. set-fmt needs to know the try-route configuration to propagate the settings. This patch adds a new struct, 'struct v4l2_subdev_state' (which at the moment only contains the v4l2_subdev_pad_config array) and the new struct is used in most of the places where v4l2_subdev_pad_config was used. All v4l2_subdev_pad_ops functions taking v4l2_subdev_pad_config are changed to instead take v4l2_subdev_state. The changes to drivers/media/v4l2-core/v4l2-subdev.c and include/media/v4l2-subdev.h were written by hand, and all the driver changes were done with the semantic patch below. The spatch needs to be applied to a select list of directories. I used the following shell commands to apply the spatch: dirs="drivers/media/i2c drivers/media/platform drivers/media/usb drivers/media/test-drivers/vimc drivers/media/pci drivers/staging/media" for dir in $dirs; do spatch -j8 --dir --include-headers --no-show-diff --in-place --sp-file v4l2-subdev-state.cocci $dir; done Note that Coccinelle chokes on a few drivers (gcc extensions?). With minor changes we can make Coccinelle run fine, and these changes can be reverted after spatch. The diff for these changes is: For drivers/media/i2c/s5k5baf.c: @@ -1481,7 +1481,7 @@ static int s5k5baf_set_selection(struct v4l2_subdev *sd, &s5k5baf_cis_rect, 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) + v4l2_subdev_get_try_crop(sd, cfg, PAD_OUT), }; s5k5baf_set_rect_and_adjust(rects, rtype, &sel->r); return 0; For drivers/media/platform/s3c-camif/camif-capture.c: @@ -1230,7 +1230,7 @@ static int s3c_camif_subdev_get_fmt(struct v4l2_subdev *sd, *mf = camif->mbus_fmt; break; - case CAMIF_SD_PAD_SOURCE_C...CAMIF_SD_PAD_SOURCE_P: + case CAMIF_SD_PAD_SOURCE_C: /* crop rectangle at camera interface input */ mf->width = camif->camif_crop.width; mf->height = camif->camif_crop.height; @@ -1332,7 +1332,7 @@ static int s3c_camif_subdev_set_fmt(struct v4l2_subdev *sd, } break; - case CAMIF_SD_PAD_SOURCE_C...CAMIF_SD_PAD_SOURCE_P: + case CAMIF_SD_PAD_SOURCE_C: /* Pixel format can be only changed on the sink pad. */ mf->code = camif->mbus_fmt.code; mf->width = crop->width; The semantic patch is: // <smpl> // Change function parameter @@ identifier func; identifier cfg; @@ func(..., - struct v4l2_subdev_pad_config *cfg + struct v4l2_subdev_state *sd_state , ...) { <... - cfg + sd_state ...> } // Change function declaration parameter @@ identifier func; identifier cfg; type T; @@ T func(..., - struct v4l2_subdev_pad_config *cfg + struct v4l2_subdev_state *sd_state , ...); // Change function return value @@ identifier func; @@ - struct v4l2_subdev_pad_config + struct v4l2_subdev_state *func(...) { ... } // Change function declaration return value @@ identifier func; @@ - struct v4l2_subdev_pad_config + struct v4l2_subdev_state *func(...); // Some drivers pass a local pad_cfg for a single pad to a called function. Wrap it // inside a pad_state. @@ identifier func; identifier pad_cfg; @@ func(...) { ... struct v4l2_subdev_pad_config pad_cfg; + struct v4l2_subdev_state pad_state = { .pads = &pad_cfg }; <+... ( v4l2_subdev_call | sensor_call | isi_try_fse | isc_try_fse | saa_call_all ) (..., - &pad_cfg + &pad_state ,...) ...+> } // If the function uses fields from pad_config, access via state->pads @@ identifier func; identifier state; @@ func(..., struct v4l2_subdev_state *state , ...) { <... ( - state->try_fmt + state->pads->try_fmt | - state->try_crop + state->pads->try_crop | - state->try_compose + state->pads->try_compose ) ...> } // If the function accesses the filehandle, use fh->state instead @@ struct v4l2_subdev_fh *fh; @@ - fh->pad + fh->state @@ struct v4l2_subdev_fh fh; @@ - fh.pad + fh.state // Start of vsp1 specific @@ @@ struct vsp1_entity { ... - struct v4l2_subdev_pad_config *config; + struct v4l2_subdev_state *config; ... }; @@ symbol entity; @@ vsp1_entity_init(...) { ... entity->config = - v4l2_subdev_alloc_pad_config + v4l2_subdev_alloc_state (&entity->subdev); ... } @@ symbol entity; @@ vsp1_entity_destroy(...) { ... - v4l2_subdev_free_pad_config + v4l2_subdev_free_state (entity->config); ... } @exists@ identifier func =~ "(^vsp1.*)|(hsit_set_format)|(sru_enum_frame_size)|(sru_set_format)|(uif_get_selection)|(uif_set_selection)|(uds_enum_frame_size)|(uds_set_format)|(brx_set_format)|(brx_get_selection)|(histo_get_selection)|(histo_set_selection)|(brx_set_selection)"; symbol config; @@ func(...) { ... - struct v4l2_subdev_pad_config *config; + struct v4l2_subdev_state *config; ... } // End of vsp1 specific // Start of rcar specific @@ identifier sd; identifier pad_cfg; @@ rvin_try_format(...) { ... - struct v4l2_subdev_pad_config *pad_cfg; + struct v4l2_subdev_state *sd_state; ... - pad_cfg = v4l2_subdev_alloc_pad_config(sd); + sd_state = v4l2_subdev_alloc_state(sd); <... - pad_cfg + sd_state ...> - v4l2_subdev_free_pad_config(pad_cfg); + v4l2_subdev_free_state(sd_state); ... } // End of rcar specific // Start of rockchip specific @@ identifier func =~ "(rkisp1_rsz_get_pad_fmt)|(rkisp1_rsz_get_pad_crop)|(rkisp1_rsz_register)"; symbol rsz; symbol pad_cfg; @@ func(...) { + struct v4l2_subdev_state state = { .pads = rsz->pad_cfg }; ... - rsz->pad_cfg + &state ... } @@ identifier func =~ "(rkisp1_isp_get_pad_fmt)|(rkisp1_isp_get_pad_crop)"; symbol isp; symbol pad_cfg; @@ func(...) { + struct v4l2_subdev_state state = { .pads = isp->pad_cfg }; ... - isp->pad_cfg + &state ... } @@ symbol rkisp1; symbol isp; symbol pad_cfg; @@ rkisp1_isp_register(...) { + struct v4l2_subdev_state state = { .pads = rkisp1->isp.pad_cfg }; ... - rkisp1->isp.pad_cfg + &state ... } // End of rockchip specific // Start of tegra-video specific @@ identifier sd; identifier pad_cfg; @@ __tegra_channel_try_format(...) { ... - struct v4l2_subdev_pad_config *pad_cfg; + struct v4l2_subdev_state *sd_state; ... - pad_cfg = v4l2_subdev_alloc_pad_config(sd); + sd_state = v4l2_subdev_alloc_state(sd); <... - pad_cfg + sd_state ...> - v4l2_subdev_free_pad_config(pad_cfg); + v4l2_subdev_free_state(sd_state); ... } @@ identifier sd_state; @@ __tegra_channel_try_format(...) { ... struct v4l2_subdev_state *sd_state; <... - sd_state->try_crop + sd_state->pads->try_crop ...> } // End of tegra-video specific // </smpl> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
6f2f49ae4c
commit
0d346d2a6f
@ -250,7 +250,7 @@ static int adv7170_s_routing(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv7170_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index >= ARRAY_SIZE(adv7170_codes))
|
||||
@ -261,7 +261,7 @@ static int adv7170_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv7170_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
@ -284,7 +284,7 @@ static int adv7170_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv7170_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
|
@ -288,7 +288,7 @@ static int adv7175_s_routing(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv7175_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index >= ARRAY_SIZE(adv7175_codes))
|
||||
@ -299,7 +299,7 @@ static int adv7175_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv7175_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
@ -322,7 +322,7 @@ static int adv7175_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv7175_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
|
@ -633,7 +633,7 @@ static void adv7180_exit_controls(struct adv7180_state *state)
|
||||
}
|
||||
|
||||
static int adv7180_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index != 0)
|
||||
@ -699,13 +699,13 @@ static int adv7180_set_field_mode(struct adv7180_state *state)
|
||||
}
|
||||
|
||||
static int adv7180_get_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
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(sd, cfg, 0);
|
||||
format->format = *v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
} else {
|
||||
adv7180_mbus_fmt(sd, &format->format);
|
||||
format->format.field = state->field;
|
||||
@ -715,7 +715,7 @@ static int adv7180_get_pad_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv7180_set_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct adv7180_state *state = to_state(sd);
|
||||
@ -742,7 +742,7 @@ static int adv7180_set_pad_format(struct v4l2_subdev *sd,
|
||||
adv7180_set_power(state, true);
|
||||
}
|
||||
} else {
|
||||
framefmt = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
framefmt = v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
*framefmt = format->format;
|
||||
}
|
||||
|
||||
@ -750,14 +750,14 @@ static int adv7180_set_pad_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv7180_init_cfg(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg)
|
||||
struct v4l2_subdev_state *sd_state)
|
||||
{
|
||||
struct v4l2_subdev_format fmt = {
|
||||
.which = cfg ? V4L2_SUBDEV_FORMAT_TRY
|
||||
: V4L2_SUBDEV_FORMAT_ACTIVE,
|
||||
.which = sd_state ? V4L2_SUBDEV_FORMAT_TRY
|
||||
: V4L2_SUBDEV_FORMAT_ACTIVE,
|
||||
};
|
||||
|
||||
return adv7180_set_pad_format(sd, cfg, &fmt);
|
||||
return adv7180_set_pad_format(sd, sd_state, &fmt);
|
||||
}
|
||||
|
||||
static int adv7180_get_mbus_config(struct v4l2_subdev *sd,
|
||||
|
@ -409,7 +409,7 @@ static int adv7183_g_input_status(struct v4l2_subdev *sd, u32 *status)
|
||||
}
|
||||
|
||||
static int adv7183_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index > 0)
|
||||
@ -420,7 +420,7 @@ static int adv7183_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv7183_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct adv7183 *decoder = to_adv7183(sd);
|
||||
@ -443,12 +443,12 @@ static int adv7183_set_fmt(struct v4l2_subdev *sd,
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_ACTIVE)
|
||||
decoder->fmt = *fmt;
|
||||
else
|
||||
cfg->try_fmt = *fmt;
|
||||
sd_state->pads->try_fmt = *fmt;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int adv7183_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct adv7183 *decoder = to_adv7183(sd);
|
||||
|
@ -331,7 +331,7 @@ static int adv748x_afe_propagate_pixelrate(struct adv748x_afe *afe)
|
||||
}
|
||||
|
||||
static int adv748x_afe_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index != 0)
|
||||
@ -343,7 +343,7 @@ static int adv748x_afe_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv748x_afe_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *sdformat)
|
||||
{
|
||||
struct adv748x_afe *afe = adv748x_sd_to_afe(sd);
|
||||
@ -354,7 +354,8 @@ static int adv748x_afe_get_format(struct v4l2_subdev *sd,
|
||||
return -EINVAL;
|
||||
|
||||
if (sdformat->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mbusformat = v4l2_subdev_get_try_format(sd, cfg, sdformat->pad);
|
||||
mbusformat = v4l2_subdev_get_try_format(sd, sd_state,
|
||||
sdformat->pad);
|
||||
sdformat->format = *mbusformat;
|
||||
} else {
|
||||
adv748x_afe_fill_format(afe, &sdformat->format);
|
||||
@ -365,7 +366,7 @@ static int adv748x_afe_get_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv748x_afe_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *sdformat)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mbusformat;
|
||||
@ -375,9 +376,9 @@ static int adv748x_afe_set_format(struct v4l2_subdev *sd,
|
||||
return -EINVAL;
|
||||
|
||||
if (sdformat->which == V4L2_SUBDEV_FORMAT_ACTIVE)
|
||||
return adv748x_afe_get_format(sd, cfg, sdformat);
|
||||
return adv748x_afe_get_format(sd, sd_state, sdformat);
|
||||
|
||||
mbusformat = v4l2_subdev_get_try_format(sd, cfg, sdformat->pad);
|
||||
mbusformat = v4l2_subdev_get_try_format(sd, sd_state, sdformat->pad);
|
||||
*mbusformat = sdformat->format;
|
||||
|
||||
return 0;
|
||||
|
@ -141,26 +141,26 @@ static const struct v4l2_subdev_video_ops adv748x_csi2_video_ops = {
|
||||
|
||||
static struct v4l2_mbus_framefmt *
|
||||
adv748x_csi2_get_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, u32 which)
|
||||
{
|
||||
struct adv748x_csi2 *tx = adv748x_sd_to_csi2(sd);
|
||||
|
||||
if (which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return v4l2_subdev_get_try_format(sd, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(sd, sd_state, pad);
|
||||
|
||||
return &tx->format;
|
||||
}
|
||||
|
||||
static int adv748x_csi2_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *sdformat)
|
||||
{
|
||||
struct adv748x_csi2 *tx = adv748x_sd_to_csi2(sd);
|
||||
struct adv748x_state *state = tx->state;
|
||||
struct v4l2_mbus_framefmt *mbusformat;
|
||||
|
||||
mbusformat = adv748x_csi2_get_pad_format(sd, cfg, sdformat->pad,
|
||||
mbusformat = adv748x_csi2_get_pad_format(sd, sd_state, sdformat->pad,
|
||||
sdformat->which);
|
||||
if (!mbusformat)
|
||||
return -EINVAL;
|
||||
@ -175,7 +175,7 @@ static int adv748x_csi2_get_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv748x_csi2_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *sdformat)
|
||||
{
|
||||
struct adv748x_csi2 *tx = adv748x_sd_to_csi2(sd);
|
||||
@ -183,7 +183,7 @@ static int adv748x_csi2_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_mbus_framefmt *mbusformat;
|
||||
int ret = 0;
|
||||
|
||||
mbusformat = adv748x_csi2_get_pad_format(sd, cfg, sdformat->pad,
|
||||
mbusformat = adv748x_csi2_get_pad_format(sd, sd_state, sdformat->pad,
|
||||
sdformat->which);
|
||||
if (!mbusformat)
|
||||
return -EINVAL;
|
||||
@ -193,7 +193,7 @@ static int adv748x_csi2_set_format(struct v4l2_subdev *sd,
|
||||
if (sdformat->pad == ADV748X_CSI2_SOURCE) {
|
||||
const struct v4l2_mbus_framefmt *sink_fmt;
|
||||
|
||||
sink_fmt = adv748x_csi2_get_pad_format(sd, cfg,
|
||||
sink_fmt = adv748x_csi2_get_pad_format(sd, sd_state,
|
||||
ADV748X_CSI2_SINK,
|
||||
sdformat->which);
|
||||
|
||||
|
@ -409,7 +409,7 @@ static int adv748x_hdmi_propagate_pixelrate(struct adv748x_hdmi *hdmi)
|
||||
}
|
||||
|
||||
static int adv748x_hdmi_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index != 0)
|
||||
@ -421,7 +421,7 @@ static int adv748x_hdmi_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv748x_hdmi_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *sdformat)
|
||||
{
|
||||
struct adv748x_hdmi *hdmi = adv748x_sd_to_hdmi(sd);
|
||||
@ -431,7 +431,8 @@ static int adv748x_hdmi_get_format(struct v4l2_subdev *sd,
|
||||
return -EINVAL;
|
||||
|
||||
if (sdformat->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mbusformat = v4l2_subdev_get_try_format(sd, cfg, sdformat->pad);
|
||||
mbusformat = v4l2_subdev_get_try_format(sd, sd_state,
|
||||
sdformat->pad);
|
||||
sdformat->format = *mbusformat;
|
||||
} else {
|
||||
adv748x_hdmi_fill_format(hdmi, &sdformat->format);
|
||||
@ -442,7 +443,7 @@ static int adv748x_hdmi_get_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv748x_hdmi_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *sdformat)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mbusformat;
|
||||
@ -451,9 +452,9 @@ static int adv748x_hdmi_set_format(struct v4l2_subdev *sd,
|
||||
return -EINVAL;
|
||||
|
||||
if (sdformat->which == V4L2_SUBDEV_FORMAT_ACTIVE)
|
||||
return adv748x_hdmi_get_format(sd, cfg, sdformat);
|
||||
return adv748x_hdmi_get_format(sd, sd_state, sdformat);
|
||||
|
||||
mbusformat = v4l2_subdev_get_try_format(sd, cfg, sdformat->pad);
|
||||
mbusformat = v4l2_subdev_get_try_format(sd, sd_state, sdformat->pad);
|
||||
*mbusformat = sdformat->format;
|
||||
|
||||
return 0;
|
||||
|
@ -1216,7 +1216,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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad != 0)
|
||||
@ -1247,7 +1247,7 @@ static void adv7511_fill_format(struct adv7511_state *state,
|
||||
}
|
||||
|
||||
static int adv7511_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct adv7511_state *state = get_adv7511_state(sd);
|
||||
@ -1261,7 +1261,7 @@ static int adv7511_get_fmt(struct v4l2_subdev *sd,
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *fmt;
|
||||
|
||||
fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
|
||||
fmt = v4l2_subdev_get_try_format(sd, sd_state, format->pad);
|
||||
format->format.code = fmt->code;
|
||||
format->format.colorspace = fmt->colorspace;
|
||||
format->format.ycbcr_enc = fmt->ycbcr_enc;
|
||||
@ -1279,7 +1279,7 @@ static int adv7511_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv7511_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct adv7511_state *state = get_adv7511_state(sd);
|
||||
@ -1316,7 +1316,7 @@ static int adv7511_set_fmt(struct v4l2_subdev *sd,
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *fmt;
|
||||
|
||||
fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
|
||||
fmt = v4l2_subdev_get_try_format(sd, sd_state, format->pad);
|
||||
fmt->code = format->format.code;
|
||||
fmt->colorspace = format->format.colorspace;
|
||||
fmt->ycbcr_enc = format->format.ycbcr_enc;
|
||||
|
@ -1833,7 +1833,7 @@ static int adv76xx_s_routing(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv76xx_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct adv76xx_state *state = to_state(sd);
|
||||
@ -1913,7 +1913,7 @@ static void adv76xx_setup_format(struct adv76xx_state *state)
|
||||
}
|
||||
|
||||
static int adv76xx_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct adv76xx_state *state = to_state(sd);
|
||||
@ -1926,7 +1926,7 @@ static int adv76xx_get_format(struct v4l2_subdev *sd,
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *fmt;
|
||||
|
||||
fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
|
||||
fmt = v4l2_subdev_get_try_format(sd, sd_state, format->pad);
|
||||
format->format.code = fmt->code;
|
||||
} else {
|
||||
format->format.code = state->format->code;
|
||||
@ -1936,7 +1936,7 @@ static int adv76xx_get_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv76xx_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct adv76xx_state *state = to_state(sd);
|
||||
@ -1956,7 +1956,7 @@ static int adv76xx_get_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv76xx_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct adv76xx_state *state = to_state(sd);
|
||||
@ -1975,7 +1975,7 @@ static int adv76xx_set_format(struct v4l2_subdev *sd,
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *fmt;
|
||||
|
||||
fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
|
||||
fmt = v4l2_subdev_get_try_format(sd, sd_state, format->pad);
|
||||
fmt->code = format->format.code;
|
||||
} else {
|
||||
state->format = info;
|
||||
|
@ -1993,7 +1993,7 @@ static int adv7842_s_routing(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv7842_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index >= ARRAY_SIZE(adv7842_formats))
|
||||
@ -2069,7 +2069,7 @@ static void adv7842_setup_format(struct adv7842_state *state)
|
||||
}
|
||||
|
||||
static int adv7842_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct adv7842_state *state = to_state(sd);
|
||||
@ -2097,7 +2097,7 @@ static int adv7842_get_format(struct v4l2_subdev *sd,
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *fmt;
|
||||
|
||||
fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
|
||||
fmt = v4l2_subdev_get_try_format(sd, sd_state, format->pad);
|
||||
format->format.code = fmt->code;
|
||||
} else {
|
||||
format->format.code = state->format->code;
|
||||
@ -2107,7 +2107,7 @@ static int adv7842_get_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int adv7842_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct adv7842_state *state = to_state(sd);
|
||||
@ -2117,7 +2117,7 @@ static int adv7842_set_format(struct v4l2_subdev *sd,
|
||||
return -EINVAL;
|
||||
|
||||
if (state->mode == ADV7842_MODE_SDP)
|
||||
return adv7842_get_format(sd, cfg, format);
|
||||
return adv7842_get_format(sd, sd_state, format);
|
||||
|
||||
info = adv7842_format_info(state, format->format.code);
|
||||
if (info == NULL)
|
||||
@ -2129,7 +2129,7 @@ static int adv7842_set_format(struct v4l2_subdev *sd,
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *fmt;
|
||||
|
||||
fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
|
||||
fmt = v4l2_subdev_get_try_format(sd, sd_state, format->pad);
|
||||
fmt->code = format->format.code;
|
||||
} else {
|
||||
state->format = info;
|
||||
|
@ -91,7 +91,7 @@ static int ak881x_s_register(struct v4l2_subdev *sd,
|
||||
#endif
|
||||
|
||||
static int ak881x_fill_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
@ -111,7 +111,7 @@ static int ak881x_fill_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ak881x_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index)
|
||||
@ -122,7 +122,7 @@ static int ak881x_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ak881x_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
@ -1944,7 +1944,7 @@ static int ccs_set_stream(struct v4l2_subdev *subdev, int enable)
|
||||
}
|
||||
|
||||
static int ccs_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(subdev);
|
||||
@ -1997,13 +1997,13 @@ static u32 __ccs_get_mbus_code(struct v4l2_subdev *subdev, unsigned int pad)
|
||||
}
|
||||
|
||||
static int __ccs_get_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ccs_subdev *ssd = to_ccs_subdev(subdev);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
fmt->format = *v4l2_subdev_get_try_format(subdev, cfg,
|
||||
fmt->format = *v4l2_subdev_get_try_format(subdev, sd_state,
|
||||
fmt->pad);
|
||||
} else {
|
||||
struct v4l2_rect *r;
|
||||
@ -2023,21 +2023,21 @@ static int __ccs_get_format(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int ccs_get_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ccs_sensor *sensor = to_ccs_sensor(subdev);
|
||||
int rval;
|
||||
|
||||
mutex_lock(&sensor->mutex);
|
||||
rval = __ccs_get_format(subdev, cfg, fmt);
|
||||
rval = __ccs_get_format(subdev, sd_state, fmt);
|
||||
mutex_unlock(&sensor->mutex);
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
static void ccs_get_crop_compose(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_rect **crops,
|
||||
struct v4l2_rect **comps, int which)
|
||||
{
|
||||
@ -2054,24 +2054,25 @@ static void ccs_get_crop_compose(struct v4l2_subdev *subdev,
|
||||
if (crops) {
|
||||
for (i = 0; i < subdev->entity.num_pads; i++)
|
||||
crops[i] = v4l2_subdev_get_try_crop(subdev,
|
||||
cfg, i);
|
||||
sd_state,
|
||||
i);
|
||||
}
|
||||
if (comps)
|
||||
*comps = v4l2_subdev_get_try_compose(subdev, cfg,
|
||||
*comps = v4l2_subdev_get_try_compose(subdev, sd_state,
|
||||
CCS_PAD_SINK);
|
||||
}
|
||||
}
|
||||
|
||||
/* Changes require propagation only on sink pad. */
|
||||
static void ccs_propagate(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg, int which,
|
||||
struct v4l2_subdev_state *sd_state, int which,
|
||||
int target)
|
||||
{
|
||||
struct ccs_sensor *sensor = to_ccs_sensor(subdev);
|
||||
struct ccs_subdev *ssd = to_ccs_subdev(subdev);
|
||||
struct v4l2_rect *comp, *crops[CCS_PADS];
|
||||
|
||||
ccs_get_crop_compose(subdev, cfg, crops, &comp, which);
|
||||
ccs_get_crop_compose(subdev, sd_state, crops, &comp, which);
|
||||
|
||||
switch (target) {
|
||||
case V4L2_SEL_TGT_CROP:
|
||||
@ -2111,7 +2112,7 @@ static const struct ccs_csi_data_format
|
||||
}
|
||||
|
||||
static int ccs_set_format_source(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ccs_sensor *sensor = to_ccs_sensor(subdev);
|
||||
@ -2122,7 +2123,7 @@ static int ccs_set_format_source(struct v4l2_subdev *subdev,
|
||||
unsigned int i;
|
||||
int rval;
|
||||
|
||||
rval = __ccs_get_format(subdev, cfg, fmt);
|
||||
rval = __ccs_get_format(subdev, sd_state, fmt);
|
||||
if (rval)
|
||||
return rval;
|
||||
|
||||
@ -2164,7 +2165,7 @@ static int ccs_set_format_source(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int ccs_set_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ccs_sensor *sensor = to_ccs_sensor(subdev);
|
||||
@ -2176,7 +2177,7 @@ static int ccs_set_format(struct v4l2_subdev *subdev,
|
||||
if (fmt->pad == ssd->source_pad) {
|
||||
int rval;
|
||||
|
||||
rval = ccs_set_format_source(subdev, cfg, fmt);
|
||||
rval = ccs_set_format_source(subdev, sd_state, fmt);
|
||||
|
||||
mutex_unlock(&sensor->mutex);
|
||||
|
||||
@ -2198,7 +2199,7 @@ static int ccs_set_format(struct v4l2_subdev *subdev,
|
||||
CCS_LIM(sensor, MIN_Y_OUTPUT_SIZE),
|
||||
CCS_LIM(sensor, MAX_Y_OUTPUT_SIZE));
|
||||
|
||||
ccs_get_crop_compose(subdev, cfg, crops, NULL, fmt->which);
|
||||
ccs_get_crop_compose(subdev, sd_state, crops, NULL, fmt->which);
|
||||
|
||||
crops[ssd->sink_pad]->left = 0;
|
||||
crops[ssd->sink_pad]->top = 0;
|
||||
@ -2206,7 +2207,7 @@ static int ccs_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];
|
||||
ccs_propagate(subdev, cfg, fmt->which, V4L2_SEL_TGT_CROP);
|
||||
ccs_propagate(subdev, sd_state, fmt->which, V4L2_SEL_TGT_CROP);
|
||||
|
||||
mutex_unlock(&sensor->mutex);
|
||||
|
||||
@ -2258,7 +2259,7 @@ static int scaling_goodness(struct v4l2_subdev *subdev, int w, int ask_w,
|
||||
}
|
||||
|
||||
static void ccs_set_compose_binner(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel,
|
||||
struct v4l2_rect **crops,
|
||||
struct v4l2_rect *comp)
|
||||
@ -2306,7 +2307,7 @@ static void ccs_set_compose_binner(struct v4l2_subdev *subdev,
|
||||
* result.
|
||||
*/
|
||||
static void ccs_set_compose_scaler(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel,
|
||||
struct v4l2_rect **crops,
|
||||
struct v4l2_rect *comp)
|
||||
@ -2421,25 +2422,25 @@ static void ccs_set_compose_scaler(struct v4l2_subdev *subdev,
|
||||
}
|
||||
/* We're only called on source pads. This function sets scaling. */
|
||||
static int ccs_set_compose(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct ccs_sensor *sensor = to_ccs_sensor(subdev);
|
||||
struct ccs_subdev *ssd = to_ccs_subdev(subdev);
|
||||
struct v4l2_rect *comp, *crops[CCS_PADS];
|
||||
|
||||
ccs_get_crop_compose(subdev, cfg, crops, &comp, sel->which);
|
||||
ccs_get_crop_compose(subdev, sd_state, crops, &comp, sel->which);
|
||||
|
||||
sel->r.top = 0;
|
||||
sel->r.left = 0;
|
||||
|
||||
if (ssd == sensor->binner)
|
||||
ccs_set_compose_binner(subdev, cfg, sel, crops, comp);
|
||||
ccs_set_compose_binner(subdev, sd_state, sel, crops, comp);
|
||||
else
|
||||
ccs_set_compose_scaler(subdev, cfg, sel, crops, comp);
|
||||
ccs_set_compose_scaler(subdev, sd_state, sel, crops, comp);
|
||||
|
||||
*comp = sel->r;
|
||||
ccs_propagate(subdev, cfg, sel->which, V4L2_SEL_TGT_COMPOSE);
|
||||
ccs_propagate(subdev, sd_state, sel->which, V4L2_SEL_TGT_COMPOSE);
|
||||
|
||||
if (sel->which == V4L2_SUBDEV_FORMAT_ACTIVE)
|
||||
return ccs_pll_blanking_update(sensor);
|
||||
@ -2486,7 +2487,7 @@ static int __ccs_sel_supported(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int ccs_set_crop(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct ccs_sensor *sensor = to_ccs_sensor(subdev);
|
||||
@ -2494,7 +2495,7 @@ static int ccs_set_crop(struct v4l2_subdev *subdev,
|
||||
struct v4l2_rect *src_size, *crops[CCS_PADS];
|
||||
struct v4l2_rect _r;
|
||||
|
||||
ccs_get_crop_compose(subdev, cfg, crops, NULL, sel->which);
|
||||
ccs_get_crop_compose(subdev, sd_state, crops, NULL, sel->which);
|
||||
|
||||
if (sel->which == V4L2_SUBDEV_FORMAT_ACTIVE) {
|
||||
if (sel->pad == ssd->sink_pad)
|
||||
@ -2505,16 +2506,18 @@ static int ccs_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(subdev, cfg,
|
||||
_r.width = v4l2_subdev_get_try_format(subdev,
|
||||
sd_state,
|
||||
sel->pad)
|
||||
->width;
|
||||
_r.height = v4l2_subdev_get_try_format(subdev, cfg,
|
||||
_r.height = v4l2_subdev_get_try_format(subdev,
|
||||
sd_state,
|
||||
sel->pad)
|
||||
->height;
|
||||
src_size = &_r;
|
||||
} else {
|
||||
src_size = v4l2_subdev_get_try_compose(
|
||||
subdev, cfg, ssd->sink_pad);
|
||||
subdev, sd_state, ssd->sink_pad);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2532,7 +2535,7 @@ static int ccs_set_crop(struct v4l2_subdev *subdev,
|
||||
*crops[sel->pad] = sel->r;
|
||||
|
||||
if (ssd != sensor->pixel_array && sel->pad == CCS_PAD_SINK)
|
||||
ccs_propagate(subdev, cfg, sel->which, V4L2_SEL_TGT_CROP);
|
||||
ccs_propagate(subdev, sd_state, sel->which, V4L2_SEL_TGT_CROP);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -2546,7 +2549,7 @@ static void ccs_get_native_size(struct ccs_subdev *ssd, struct v4l2_rect *r)
|
||||
}
|
||||
|
||||
static int __ccs_get_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct ccs_sensor *sensor = to_ccs_sensor(subdev);
|
||||
@ -2559,13 +2562,14 @@ static int __ccs_get_selection(struct v4l2_subdev *subdev,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ccs_get_crop_compose(subdev, cfg, crops, &comp, sel->which);
|
||||
ccs_get_crop_compose(subdev, sd_state, 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(subdev, cfg, ssd->sink_pad);
|
||||
v4l2_subdev_get_try_format(subdev, sd_state,
|
||||
ssd->sink_pad);
|
||||
|
||||
sink_fmt.left = 0;
|
||||
sink_fmt.top = 0;
|
||||
@ -2596,21 +2600,21 @@ static int __ccs_get_selection(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int ccs_get_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct ccs_sensor *sensor = to_ccs_sensor(subdev);
|
||||
int rval;
|
||||
|
||||
mutex_lock(&sensor->mutex);
|
||||
rval = __ccs_get_selection(subdev, cfg, sel);
|
||||
rval = __ccs_get_selection(subdev, sd_state, sel);
|
||||
mutex_unlock(&sensor->mutex);
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
static int ccs_set_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct ccs_sensor *sensor = to_ccs_sensor(subdev);
|
||||
@ -2634,10 +2638,10 @@ static int ccs_set_selection(struct v4l2_subdev *subdev,
|
||||
|
||||
switch (sel->target) {
|
||||
case V4L2_SEL_TGT_CROP:
|
||||
ret = ccs_set_crop(subdev, cfg, sel);
|
||||
ret = ccs_set_crop(subdev, sd_state, sel);
|
||||
break;
|
||||
case V4L2_SEL_TGT_COMPOSE:
|
||||
ret = ccs_set_compose(subdev, cfg, sel);
|
||||
ret = ccs_set_compose(subdev, sd_state, sel);
|
||||
break;
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
@ -3028,9 +3032,9 @@ static int ccs_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(sd, fh->pad, i);
|
||||
v4l2_subdev_get_try_format(sd, fh->state, i);
|
||||
struct v4l2_rect *try_crop =
|
||||
v4l2_subdev_get_try_crop(sd, fh->pad, i);
|
||||
v4l2_subdev_get_try_crop(sd, fh->state, i);
|
||||
struct v4l2_rect *try_comp;
|
||||
|
||||
ccs_get_native_size(ssd, try_crop);
|
||||
@ -3043,7 +3047,7 @@ static int ccs_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
if (ssd != sensor->pixel_array)
|
||||
continue;
|
||||
|
||||
try_comp = v4l2_subdev_get_try_compose(sd, fh->pad, i);
|
||||
try_comp = v4l2_subdev_get_try_compose(sd, fh->state, i);
|
||||
*try_comp = *try_crop;
|
||||
}
|
||||
|
||||
|
@ -1746,7 +1746,7 @@ static int cx25840_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
static int cx25840_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *fmt = &format->format;
|
||||
|
@ -882,7 +882,7 @@ out:
|
||||
*/
|
||||
#define MAX_FMTS 4
|
||||
static int et8ek8_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct et8ek8_reglist **list =
|
||||
@ -920,7 +920,7 @@ static int et8ek8_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int et8ek8_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct et8ek8_reglist **list =
|
||||
@ -958,7 +958,7 @@ static int et8ek8_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int et8ek8_enum_frame_ival(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_interval_enum *fie)
|
||||
{
|
||||
struct et8ek8_reglist **list =
|
||||
@ -990,12 +990,13 @@ static int et8ek8_enum_frame_ival(struct v4l2_subdev *subdev,
|
||||
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__et8ek8_get_pad_format(struct et8ek8_sensor *sensor,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_format(&sensor->subdev, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(&sensor->subdev, sd_state,
|
||||
pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &sensor->format;
|
||||
default:
|
||||
@ -1004,13 +1005,14 @@ __et8ek8_get_pad_format(struct et8ek8_sensor *sensor,
|
||||
}
|
||||
|
||||
static int et8ek8_get_pad_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = __et8ek8_get_pad_format(sensor, cfg, fmt->pad, fmt->which);
|
||||
format = __et8ek8_get_pad_format(sensor, sd_state, fmt->pad,
|
||||
fmt->which);
|
||||
if (!format)
|
||||
return -EINVAL;
|
||||
|
||||
@ -1020,14 +1022,15 @@ static int et8ek8_get_pad_format(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int et8ek8_set_pad_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct et8ek8_sensor *sensor = to_et8ek8_sensor(subdev);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
struct et8ek8_reglist *reglist;
|
||||
|
||||
format = __et8ek8_get_pad_format(sensor, cfg, fmt->pad, fmt->which);
|
||||
format = __et8ek8_get_pad_format(sensor, sd_state, fmt->pad,
|
||||
fmt->which);
|
||||
if (!format)
|
||||
return -EINVAL;
|
||||
|
||||
@ -1327,7 +1330,7 @@ static int et8ek8_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
struct et8ek8_reglist *reglist;
|
||||
|
||||
reglist = et8ek8_reglist_find_type(&meta_reglist, ET8EK8_REGLIST_MODE);
|
||||
format = __et8ek8_get_pad_format(sensor, fh->pad, 0,
|
||||
format = __et8ek8_get_pad_format(sensor, fh->state, 0,
|
||||
V4L2_SUBDEV_FORMAT_TRY);
|
||||
et8ek8_reglist_to_mbus(reglist, format);
|
||||
|
||||
|
@ -875,7 +875,7 @@ error:
|
||||
}
|
||||
|
||||
static int hi556_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct hi556 *hi556 = to_hi556(sd);
|
||||
@ -890,7 +890,7 @@ static int hi556_set_format(struct v4l2_subdev *sd,
|
||||
mutex_lock(&hi556->mutex);
|
||||
hi556_assign_pad_format(mode, &fmt->format);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
*v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format;
|
||||
*v4l2_subdev_get_try_format(sd, sd_state, fmt->pad) = fmt->format;
|
||||
} else {
|
||||
hi556->cur_mode = mode;
|
||||
__v4l2_ctrl_s_ctrl(hi556->link_freq, mode->link_freq_index);
|
||||
@ -917,14 +917,15 @@ static int hi556_set_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int hi556_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct hi556 *hi556 = to_hi556(sd);
|
||||
|
||||
mutex_lock(&hi556->mutex);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
fmt->format = *v4l2_subdev_get_try_format(&hi556->sd, cfg,
|
||||
fmt->format = *v4l2_subdev_get_try_format(&hi556->sd,
|
||||
sd_state,
|
||||
fmt->pad);
|
||||
else
|
||||
hi556_assign_pad_format(hi556->cur_mode, &fmt->format);
|
||||
@ -935,7 +936,7 @@ static int hi556_get_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int hi556_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index > 0)
|
||||
@ -947,7 +948,7 @@ static int hi556_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int hi556_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->index >= ARRAY_SIZE(supported_modes))
|
||||
@ -970,7 +971,7 @@ static int hi556_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
|
||||
mutex_lock(&hi556->mutex);
|
||||
hi556_assign_pad_format(&supported_modes[0],
|
||||
v4l2_subdev_get_try_format(sd, fh->pad, 0));
|
||||
v4l2_subdev_get_try_format(sd, fh->state, 0));
|
||||
mutex_unlock(&hi556->mutex);
|
||||
|
||||
return 0;
|
||||
|
@ -395,7 +395,7 @@ static int imx208_write_regs(struct imx208 *imx208,
|
||||
static int imx208_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *try_fmt =
|
||||
v4l2_subdev_get_try_format(sd, fh->pad, 0);
|
||||
v4l2_subdev_get_try_format(sd, fh->state, 0);
|
||||
|
||||
/* Initialize try_fmt */
|
||||
try_fmt->width = supported_modes[0].width;
|
||||
@ -500,7 +500,7 @@ static const struct v4l2_ctrl_config imx208_digital_gain_control = {
|
||||
};
|
||||
|
||||
static int imx208_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct imx208 *imx208 = to_imx208(sd);
|
||||
@ -514,7 +514,7 @@ static int imx208_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int imx208_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct imx208 *imx208 = to_imx208(sd);
|
||||
@ -544,11 +544,12 @@ static void imx208_mode_to_pad_format(struct imx208 *imx208,
|
||||
}
|
||||
|
||||
static int __imx208_get_pad_format(struct imx208 *imx208,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
fmt->format = *v4l2_subdev_get_try_format(&imx208->sd, cfg,
|
||||
fmt->format = *v4l2_subdev_get_try_format(&imx208->sd,
|
||||
sd_state,
|
||||
fmt->pad);
|
||||
else
|
||||
imx208_mode_to_pad_format(imx208, imx208->cur_mode, fmt);
|
||||
@ -557,21 +558,21 @@ static int __imx208_get_pad_format(struct imx208 *imx208,
|
||||
}
|
||||
|
||||
static int imx208_get_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct imx208 *imx208 = to_imx208(sd);
|
||||
int ret;
|
||||
|
||||
mutex_lock(&imx208->imx208_mx);
|
||||
ret = __imx208_get_pad_format(imx208, cfg, fmt);
|
||||
ret = __imx208_get_pad_format(imx208, sd_state, fmt);
|
||||
mutex_unlock(&imx208->imx208_mx);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int imx208_set_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct imx208 *imx208 = to_imx208(sd);
|
||||
@ -590,7 +591,7 @@ static int imx208_set_pad_format(struct v4l2_subdev *sd,
|
||||
fmt->format.width, fmt->format.height);
|
||||
imx208_mode_to_pad_format(imx208, mode, fmt);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
*v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format;
|
||||
*v4l2_subdev_get_try_format(sd, sd_state, fmt->pad) = fmt->format;
|
||||
} else {
|
||||
imx208->cur_mode = mode;
|
||||
__v4l2_ctrl_s_ctrl(imx208->link_freq, mode->link_freq_index);
|
||||
|
@ -474,7 +474,7 @@ static int __maybe_unused imx214_power_off(struct device *dev)
|
||||
}
|
||||
|
||||
static int imx214_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index > 0)
|
||||
@ -486,7 +486,7 @@ static int imx214_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int imx214_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->code != IMX214_MBUS_CODE)
|
||||
@ -534,13 +534,13 @@ static const struct v4l2_subdev_core_ops imx214_core_ops = {
|
||||
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__imx214_get_pad_format(struct imx214 *imx214,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_format(&imx214->sd, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(&imx214->sd, sd_state, pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &imx214->fmt;
|
||||
default:
|
||||
@ -549,13 +549,14 @@ __imx214_get_pad_format(struct imx214 *imx214,
|
||||
}
|
||||
|
||||
static int imx214_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct imx214 *imx214 = to_imx214(sd);
|
||||
|
||||
mutex_lock(&imx214->mutex);
|
||||
format->format = *__imx214_get_pad_format(imx214, cfg, format->pad,
|
||||
format->format = *__imx214_get_pad_format(imx214, sd_state,
|
||||
format->pad,
|
||||
format->which);
|
||||
mutex_unlock(&imx214->mutex);
|
||||
|
||||
@ -563,12 +564,13 @@ static int imx214_get_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static struct v4l2_rect *
|
||||
__imx214_get_pad_crop(struct imx214 *imx214, struct v4l2_subdev_pad_config *cfg,
|
||||
__imx214_get_pad_crop(struct imx214 *imx214,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_crop(&imx214->sd, cfg, pad);
|
||||
return v4l2_subdev_get_try_crop(&imx214->sd, sd_state, pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &imx214->crop;
|
||||
default:
|
||||
@ -577,7 +579,7 @@ __imx214_get_pad_crop(struct imx214 *imx214, struct v4l2_subdev_pad_config *cfg,
|
||||
}
|
||||
|
||||
static int imx214_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct imx214 *imx214 = to_imx214(sd);
|
||||
@ -587,7 +589,8 @@ static int imx214_set_format(struct v4l2_subdev *sd,
|
||||
|
||||
mutex_lock(&imx214->mutex);
|
||||
|
||||
__crop = __imx214_get_pad_crop(imx214, cfg, format->pad, format->which);
|
||||
__crop = __imx214_get_pad_crop(imx214, sd_state, format->pad,
|
||||
format->which);
|
||||
|
||||
mode = v4l2_find_nearest_size(imx214_modes,
|
||||
ARRAY_SIZE(imx214_modes), width, height,
|
||||
@ -597,7 +600,7 @@ static int imx214_set_format(struct v4l2_subdev *sd,
|
||||
__crop->width = mode->width;
|
||||
__crop->height = mode->height;
|
||||
|
||||
__format = __imx214_get_pad_format(imx214, cfg, format->pad,
|
||||
__format = __imx214_get_pad_format(imx214, sd_state, format->pad,
|
||||
format->which);
|
||||
__format->width = __crop->width;
|
||||
__format->height = __crop->height;
|
||||
@ -617,7 +620,7 @@ static int imx214_set_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int imx214_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct imx214 *imx214 = to_imx214(sd);
|
||||
@ -626,22 +629,22 @@ static int imx214_get_selection(struct v4l2_subdev *sd,
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&imx214->mutex);
|
||||
sel->r = *__imx214_get_pad_crop(imx214, cfg, sel->pad,
|
||||
sel->r = *__imx214_get_pad_crop(imx214, sd_state, sel->pad,
|
||||
sel->which);
|
||||
mutex_unlock(&imx214->mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int imx214_entity_init_cfg(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg)
|
||||
struct v4l2_subdev_state *sd_state)
|
||||
{
|
||||
struct v4l2_subdev_format fmt = { };
|
||||
|
||||
fmt.which = cfg ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE;
|
||||
fmt.which = sd_state ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE;
|
||||
fmt.format.width = imx214_modes[0].width;
|
||||
fmt.format.height = imx214_modes[0].height;
|
||||
|
||||
imx214_set_format(subdev, cfg, &fmt);
|
||||
imx214_set_format(subdev, sd_state, &fmt);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -808,7 +811,7 @@ static int imx214_g_frame_interval(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int imx214_enum_frame_interval(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_interval_enum *fie)
|
||||
{
|
||||
const struct imx214_mode *mode;
|
||||
|
@ -689,7 +689,7 @@ static int imx219_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct imx219 *imx219 = to_imx219(sd);
|
||||
struct v4l2_mbus_framefmt *try_fmt =
|
||||
v4l2_subdev_get_try_format(sd, fh->pad, 0);
|
||||
v4l2_subdev_get_try_format(sd, fh->state, 0);
|
||||
struct v4l2_rect *try_crop;
|
||||
|
||||
mutex_lock(&imx219->mutex);
|
||||
@ -702,7 +702,7 @@ static int imx219_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
try_fmt->field = V4L2_FIELD_NONE;
|
||||
|
||||
/* Initialize try_crop rectangle. */
|
||||
try_crop = v4l2_subdev_get_try_crop(sd, fh->pad, 0);
|
||||
try_crop = v4l2_subdev_get_try_crop(sd, fh->state, 0);
|
||||
try_crop->top = IMX219_PIXEL_ARRAY_TOP;
|
||||
try_crop->left = IMX219_PIXEL_ARRAY_LEFT;
|
||||
try_crop->width = IMX219_PIXEL_ARRAY_WIDTH;
|
||||
@ -803,7 +803,7 @@ static const struct v4l2_ctrl_ops imx219_ctrl_ops = {
|
||||
};
|
||||
|
||||
static int imx219_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct imx219 *imx219 = to_imx219(sd);
|
||||
@ -819,7 +819,7 @@ static int imx219_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int imx219_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct imx219 *imx219 = to_imx219(sd);
|
||||
@ -863,12 +863,13 @@ static void imx219_update_pad_format(struct imx219 *imx219,
|
||||
}
|
||||
|
||||
static int __imx219_get_pad_format(struct imx219 *imx219,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *try_fmt =
|
||||
v4l2_subdev_get_try_format(&imx219->sd, cfg, fmt->pad);
|
||||
v4l2_subdev_get_try_format(&imx219->sd, sd_state,
|
||||
fmt->pad);
|
||||
/* update the code which could change due to vflip or hflip: */
|
||||
try_fmt->code = imx219_get_format_code(imx219, try_fmt->code);
|
||||
fmt->format = *try_fmt;
|
||||
@ -882,21 +883,21 @@ static int __imx219_get_pad_format(struct imx219 *imx219,
|
||||
}
|
||||
|
||||
static int imx219_get_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct imx219 *imx219 = to_imx219(sd);
|
||||
int ret;
|
||||
|
||||
mutex_lock(&imx219->mutex);
|
||||
ret = __imx219_get_pad_format(imx219, cfg, fmt);
|
||||
ret = __imx219_get_pad_format(imx219, sd_state, fmt);
|
||||
mutex_unlock(&imx219->mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int imx219_set_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct imx219 *imx219 = to_imx219(sd);
|
||||
@ -922,7 +923,7 @@ static int imx219_set_pad_format(struct v4l2_subdev *sd,
|
||||
fmt->format.width, fmt->format.height);
|
||||
imx219_update_pad_format(imx219, mode, fmt);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
framefmt = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
framefmt = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
*framefmt = fmt->format;
|
||||
} else if (imx219->mode != mode ||
|
||||
imx219->fmt.code != fmt->format.code) {
|
||||
@ -979,12 +980,13 @@ static int imx219_set_framefmt(struct imx219 *imx219)
|
||||
}
|
||||
|
||||
static const struct v4l2_rect *
|
||||
__imx219_get_pad_crop(struct imx219 *imx219, struct v4l2_subdev_pad_config *cfg,
|
||||
__imx219_get_pad_crop(struct imx219 *imx219,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_crop(&imx219->sd, cfg, pad);
|
||||
return v4l2_subdev_get_try_crop(&imx219->sd, sd_state, pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &imx219->mode->crop;
|
||||
}
|
||||
@ -993,7 +995,7 @@ __imx219_get_pad_crop(struct imx219 *imx219, struct v4l2_subdev_pad_config *cfg,
|
||||
}
|
||||
|
||||
static int imx219_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
switch (sel->target) {
|
||||
@ -1001,7 +1003,7 @@ static int imx219_get_selection(struct v4l2_subdev *sd,
|
||||
struct imx219 *imx219 = to_imx219(sd);
|
||||
|
||||
mutex_lock(&imx219->mutex);
|
||||
sel->r = *__imx219_get_pad_crop(imx219, cfg, sel->pad,
|
||||
sel->r = *__imx219_get_pad_crop(imx219, sd_state, sel->pad,
|
||||
sel->which);
|
||||
mutex_unlock(&imx219->mutex);
|
||||
|
||||
|
@ -710,7 +710,7 @@ static int imx258_write_regs(struct imx258 *imx258,
|
||||
static int imx258_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *try_fmt =
|
||||
v4l2_subdev_get_try_format(sd, fh->pad, 0);
|
||||
v4l2_subdev_get_try_format(sd, fh->state, 0);
|
||||
|
||||
/* Initialize try_fmt */
|
||||
try_fmt->width = supported_modes[0].width;
|
||||
@ -820,7 +820,7 @@ static const struct v4l2_ctrl_ops imx258_ctrl_ops = {
|
||||
};
|
||||
|
||||
static int imx258_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
/* Only one bayer order(GRBG) is supported */
|
||||
@ -833,7 +833,7 @@ static int imx258_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int imx258_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->index >= ARRAY_SIZE(supported_modes))
|
||||
@ -860,11 +860,12 @@ static void imx258_update_pad_format(const struct imx258_mode *mode,
|
||||
}
|
||||
|
||||
static int __imx258_get_pad_format(struct imx258 *imx258,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
fmt->format = *v4l2_subdev_get_try_format(&imx258->sd, cfg,
|
||||
fmt->format = *v4l2_subdev_get_try_format(&imx258->sd,
|
||||
sd_state,
|
||||
fmt->pad);
|
||||
else
|
||||
imx258_update_pad_format(imx258->cur_mode, fmt);
|
||||
@ -873,21 +874,21 @@ static int __imx258_get_pad_format(struct imx258 *imx258,
|
||||
}
|
||||
|
||||
static int imx258_get_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct imx258 *imx258 = to_imx258(sd);
|
||||
int ret;
|
||||
|
||||
mutex_lock(&imx258->mutex);
|
||||
ret = __imx258_get_pad_format(imx258, cfg, fmt);
|
||||
ret = __imx258_get_pad_format(imx258, sd_state, fmt);
|
||||
mutex_unlock(&imx258->mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int imx258_set_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct imx258 *imx258 = to_imx258(sd);
|
||||
@ -909,7 +910,7 @@ static int imx258_set_pad_format(struct v4l2_subdev *sd,
|
||||
fmt->format.width, fmt->format.height);
|
||||
imx258_update_pad_format(mode, fmt);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
framefmt = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
framefmt = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
*framefmt = fmt->format;
|
||||
} else {
|
||||
imx258->cur_mode = mode;
|
||||
|
@ -996,7 +996,7 @@ static int imx274_binning_goodness(struct stimx274 *imx274,
|
||||
* Must be called with imx274->lock locked.
|
||||
*
|
||||
* @imx274: The device object
|
||||
* @cfg: The pad config we are editing for TRY requests
|
||||
* @sd_state: The subdev state we are editing for TRY requests
|
||||
* @which: V4L2_SUBDEV_FORMAT_ACTIVE or V4L2_SUBDEV_FORMAT_TRY from the caller
|
||||
* @width: Input-output parameter: set to the desired width before
|
||||
* the call, contains the chosen value after returning successfully
|
||||
@ -1005,7 +1005,7 @@ static int imx274_binning_goodness(struct stimx274 *imx274,
|
||||
* available (when called from set_fmt)
|
||||
*/
|
||||
static int __imx274_change_compose(struct stimx274 *imx274,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
u32 which,
|
||||
u32 *width,
|
||||
u32 *height,
|
||||
@ -1019,8 +1019,8 @@ static int __imx274_change_compose(struct stimx274 *imx274,
|
||||
int best_goodness = INT_MIN;
|
||||
|
||||
if (which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
cur_crop = &cfg->try_crop;
|
||||
tgt_fmt = &cfg->try_fmt;
|
||||
cur_crop = &sd_state->pads->try_crop;
|
||||
tgt_fmt = &sd_state->pads->try_fmt;
|
||||
} else {
|
||||
cur_crop = &imx274->crop;
|
||||
tgt_fmt = &imx274->format;
|
||||
@ -1061,7 +1061,7 @@ static int __imx274_change_compose(struct stimx274 *imx274,
|
||||
/**
|
||||
* imx274_get_fmt - Get the pad format
|
||||
* @sd: Pointer to V4L2 Sub device structure
|
||||
* @cfg: Pointer to sub device pad information structure
|
||||
* @sd_state: Pointer to sub device state structure
|
||||
* @fmt: Pointer to pad level media bus format
|
||||
*
|
||||
* This function is used to get the pad format information.
|
||||
@ -1069,7 +1069,7 @@ static int __imx274_change_compose(struct stimx274 *imx274,
|
||||
* Return: 0 on success
|
||||
*/
|
||||
static int imx274_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct stimx274 *imx274 = to_imx274(sd);
|
||||
@ -1083,7 +1083,7 @@ static int imx274_get_fmt(struct v4l2_subdev *sd,
|
||||
/**
|
||||
* imx274_set_fmt - This is used to set the pad format
|
||||
* @sd: Pointer to V4L2 Sub device structure
|
||||
* @cfg: Pointer to sub device pad information structure
|
||||
* @sd_state: Pointer to sub device state information structure
|
||||
* @format: Pointer to pad level media bus format
|
||||
*
|
||||
* This function is used to set the pad format.
|
||||
@ -1091,7 +1091,7 @@ static int imx274_get_fmt(struct v4l2_subdev *sd,
|
||||
* Return: 0 on success
|
||||
*/
|
||||
static int imx274_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *fmt = &format->format;
|
||||
@ -1100,7 +1100,7 @@ static int imx274_set_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
mutex_lock(&imx274->lock);
|
||||
|
||||
err = __imx274_change_compose(imx274, cfg, format->which,
|
||||
err = __imx274_change_compose(imx274, sd_state, format->which,
|
||||
&fmt->width, &fmt->height, 0);
|
||||
|
||||
if (err)
|
||||
@ -1113,7 +1113,7 @@ static int imx274_set_fmt(struct v4l2_subdev *sd,
|
||||
*/
|
||||
fmt->field = V4L2_FIELD_NONE;
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
cfg->try_fmt = *fmt;
|
||||
sd_state->pads->try_fmt = *fmt;
|
||||
else
|
||||
imx274->format = *fmt;
|
||||
|
||||
@ -1124,7 +1124,7 @@ out:
|
||||
}
|
||||
|
||||
static int imx274_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct stimx274 *imx274 = to_imx274(sd);
|
||||
@ -1144,8 +1144,8 @@ static int imx274_get_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
if (sel->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
src_crop = &cfg->try_crop;
|
||||
src_fmt = &cfg->try_fmt;
|
||||
src_crop = &sd_state->pads->try_crop;
|
||||
src_fmt = &sd_state->pads->try_fmt;
|
||||
} else {
|
||||
src_crop = &imx274->crop;
|
||||
src_fmt = &imx274->format;
|
||||
@ -1179,7 +1179,7 @@ static int imx274_get_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int imx274_set_selection_crop(struct stimx274 *imx274,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct v4l2_rect *tgt_crop;
|
||||
@ -1216,7 +1216,7 @@ static int imx274_set_selection_crop(struct stimx274 *imx274,
|
||||
sel->r = new_crop;
|
||||
|
||||
if (sel->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
tgt_crop = &cfg->try_crop;
|
||||
tgt_crop = &sd_state->pads->try_crop;
|
||||
else
|
||||
tgt_crop = &imx274->crop;
|
||||
|
||||
@ -1230,7 +1230,7 @@ static int imx274_set_selection_crop(struct stimx274 *imx274,
|
||||
|
||||
/* if crop size changed then reset the output image size */
|
||||
if (size_changed)
|
||||
__imx274_change_compose(imx274, cfg, sel->which,
|
||||
__imx274_change_compose(imx274, sd_state, sel->which,
|
||||
&new_crop.width, &new_crop.height,
|
||||
sel->flags);
|
||||
|
||||
@ -1240,7 +1240,7 @@ static int imx274_set_selection_crop(struct stimx274 *imx274,
|
||||
}
|
||||
|
||||
static int imx274_set_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct stimx274 *imx274 = to_imx274(sd);
|
||||
@ -1249,13 +1249,13 @@ static int imx274_set_selection(struct v4l2_subdev *sd,
|
||||
return -EINVAL;
|
||||
|
||||
if (sel->target == V4L2_SEL_TGT_CROP)
|
||||
return imx274_set_selection_crop(imx274, cfg, sel);
|
||||
return imx274_set_selection_crop(imx274, sd_state, sel);
|
||||
|
||||
if (sel->target == V4L2_SEL_TGT_COMPOSE) {
|
||||
int err;
|
||||
|
||||
mutex_lock(&imx274->lock);
|
||||
err = __imx274_change_compose(imx274, cfg, sel->which,
|
||||
err = __imx274_change_compose(imx274, sd_state, sel->which,
|
||||
&sel->r.width, &sel->r.height,
|
||||
sel->flags);
|
||||
mutex_unlock(&imx274->lock);
|
||||
|
@ -516,7 +516,7 @@ static const struct v4l2_ctrl_ops imx290_ctrl_ops = {
|
||||
};
|
||||
|
||||
static int imx290_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index >= ARRAY_SIZE(imx290_formats))
|
||||
@ -528,7 +528,7 @@ static int imx290_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int imx290_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
const struct imx290 *imx290 = to_imx290(sd);
|
||||
@ -550,7 +550,7 @@ static int imx290_enum_frame_size(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int imx290_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct imx290 *imx290 = to_imx290(sd);
|
||||
@ -559,7 +559,7 @@ static int imx290_get_fmt(struct v4l2_subdev *sd,
|
||||
mutex_lock(&imx290->lock);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
framefmt = v4l2_subdev_get_try_format(&imx290->sd, cfg,
|
||||
framefmt = v4l2_subdev_get_try_format(&imx290->sd, sd_state,
|
||||
fmt->pad);
|
||||
else
|
||||
framefmt = &imx290->current_format;
|
||||
@ -596,8 +596,8 @@ static u64 imx290_calc_pixel_rate(struct imx290 *imx290)
|
||||
}
|
||||
|
||||
static int imx290_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct imx290 *imx290 = to_imx290(sd);
|
||||
const struct imx290_mode *mode;
|
||||
@ -624,7 +624,7 @@ static int imx290_set_fmt(struct v4l2_subdev *sd,
|
||||
fmt->format.field = V4L2_FIELD_NONE;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
format = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
format = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
} else {
|
||||
format = &imx290->current_format;
|
||||
imx290->current_mode = mode;
|
||||
@ -646,15 +646,15 @@ static int imx290_set_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int imx290_entity_init_cfg(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg)
|
||||
struct v4l2_subdev_state *sd_state)
|
||||
{
|
||||
struct v4l2_subdev_format fmt = { 0 };
|
||||
|
||||
fmt.which = cfg ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE;
|
||||
fmt.which = sd_state ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE;
|
||||
fmt.format.width = 1920;
|
||||
fmt.format.height = 1080;
|
||||
|
||||
imx290_set_fmt(subdev, cfg, &fmt);
|
||||
imx290_set_fmt(subdev, sd_state, &fmt);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1860,7 +1860,7 @@ static int imx319_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct imx319 *imx319 = to_imx319(sd);
|
||||
struct v4l2_mbus_framefmt *try_fmt =
|
||||
v4l2_subdev_get_try_format(sd, fh->pad, 0);
|
||||
v4l2_subdev_get_try_format(sd, fh->state, 0);
|
||||
|
||||
mutex_lock(&imx319->mutex);
|
||||
|
||||
@ -1947,7 +1947,7 @@ static const struct v4l2_ctrl_ops imx319_ctrl_ops = {
|
||||
};
|
||||
|
||||
static int imx319_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct imx319 *imx319 = to_imx319(sd);
|
||||
@ -1963,7 +1963,7 @@ static int imx319_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int imx319_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct imx319 *imx319 = to_imx319(sd);
|
||||
@ -1997,14 +1997,14 @@ static void imx319_update_pad_format(struct imx319 *imx319,
|
||||
}
|
||||
|
||||
static int imx319_do_get_pad_format(struct imx319 *imx319,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *framefmt;
|
||||
struct v4l2_subdev *sd = &imx319->sd;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
framefmt = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
framefmt = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
fmt->format = *framefmt;
|
||||
} else {
|
||||
imx319_update_pad_format(imx319, imx319->cur_mode, fmt);
|
||||
@ -2014,14 +2014,14 @@ static int imx319_do_get_pad_format(struct imx319 *imx319,
|
||||
}
|
||||
|
||||
static int imx319_get_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct imx319 *imx319 = to_imx319(sd);
|
||||
int ret;
|
||||
|
||||
mutex_lock(&imx319->mutex);
|
||||
ret = imx319_do_get_pad_format(imx319, cfg, fmt);
|
||||
ret = imx319_do_get_pad_format(imx319, sd_state, fmt);
|
||||
mutex_unlock(&imx319->mutex);
|
||||
|
||||
return ret;
|
||||
@ -2029,7 +2029,7 @@ static int imx319_get_pad_format(struct v4l2_subdev *sd,
|
||||
|
||||
static int
|
||||
imx319_set_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct imx319 *imx319 = to_imx319(sd);
|
||||
@ -2055,7 +2055,7 @@ imx319_set_pad_format(struct v4l2_subdev *sd,
|
||||
fmt->format.width, fmt->format.height);
|
||||
imx319_update_pad_format(imx319, mode, fmt);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
framefmt = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
framefmt = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
*framefmt = fmt->format;
|
||||
} else {
|
||||
imx319->cur_mode = mode;
|
||||
|
@ -497,13 +497,13 @@ static const struct v4l2_ctrl_ops imx334_ctrl_ops = {
|
||||
/**
|
||||
* imx334_enum_mbus_code() - Enumerate V4L2 sub-device mbus codes
|
||||
* @sd: pointer to imx334 V4L2 sub-device structure
|
||||
* @cfg: V4L2 sub-device pad configuration
|
||||
* @sd_state: V4L2 sub-device state
|
||||
* @code: V4L2 sub-device code enumeration need to be filled
|
||||
*
|
||||
* Return: 0 if successful, error code otherwise.
|
||||
*/
|
||||
static int imx334_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index > 0)
|
||||
@ -517,13 +517,13 @@ static int imx334_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
/**
|
||||
* imx334_enum_frame_size() - Enumerate V4L2 sub-device frame sizes
|
||||
* @sd: pointer to imx334 V4L2 sub-device structure
|
||||
* @cfg: V4L2 sub-device pad configuration
|
||||
* @sd_state: V4L2 sub-device state
|
||||
* @fsize: V4L2 sub-device size enumeration need to be filled
|
||||
*
|
||||
* Return: 0 if successful, error code otherwise.
|
||||
*/
|
||||
static int imx334_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fsize)
|
||||
{
|
||||
if (fsize->index > 0)
|
||||
@ -564,13 +564,13 @@ static void imx334_fill_pad_format(struct imx334 *imx334,
|
||||
/**
|
||||
* imx334_get_pad_format() - Get subdevice pad format
|
||||
* @sd: pointer to imx334 V4L2 sub-device structure
|
||||
* @cfg: V4L2 sub-device pad configuration
|
||||
* @sd_state: V4L2 sub-device state
|
||||
* @fmt: V4L2 sub-device format need to be set
|
||||
*
|
||||
* Return: 0 if successful, error code otherwise.
|
||||
*/
|
||||
static int imx334_get_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct imx334 *imx334 = to_imx334(sd);
|
||||
@ -580,7 +580,7 @@ static int imx334_get_pad_format(struct v4l2_subdev *sd,
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *framefmt;
|
||||
|
||||
framefmt = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
framefmt = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
fmt->format = *framefmt;
|
||||
} else {
|
||||
imx334_fill_pad_format(imx334, imx334->cur_mode, fmt);
|
||||
@ -594,13 +594,13 @@ static int imx334_get_pad_format(struct v4l2_subdev *sd,
|
||||
/**
|
||||
* imx334_set_pad_format() - Set subdevice pad format
|
||||
* @sd: pointer to imx334 V4L2 sub-device structure
|
||||
* @cfg: V4L2 sub-device pad configuration
|
||||
* @sd_state: V4L2 sub-device state
|
||||
* @fmt: V4L2 sub-device format need to be set
|
||||
*
|
||||
* Return: 0 if successful, error code otherwise.
|
||||
*/
|
||||
static int imx334_set_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct imx334 *imx334 = to_imx334(sd);
|
||||
@ -615,7 +615,7 @@ static int imx334_set_pad_format(struct v4l2_subdev *sd,
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *framefmt;
|
||||
|
||||
framefmt = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
framefmt = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
*framefmt = fmt->format;
|
||||
} else {
|
||||
ret = imx334_update_controls(imx334, mode);
|
||||
@ -631,20 +631,20 @@ static int imx334_set_pad_format(struct v4l2_subdev *sd,
|
||||
/**
|
||||
* imx334_init_pad_cfg() - Initialize sub-device pad configuration
|
||||
* @sd: pointer to imx334 V4L2 sub-device structure
|
||||
* @cfg: V4L2 sub-device pad configuration
|
||||
* @sd_state: V4L2 sub-device state
|
||||
*
|
||||
* Return: 0 if successful, error code otherwise.
|
||||
*/
|
||||
static int imx334_init_pad_cfg(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg)
|
||||
struct v4l2_subdev_state *sd_state)
|
||||
{
|
||||
struct imx334 *imx334 = to_imx334(sd);
|
||||
struct v4l2_subdev_format fmt = { 0 };
|
||||
|
||||
fmt.which = cfg ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE;
|
||||
fmt.which = sd_state ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE;
|
||||
imx334_fill_pad_format(imx334, &supported_mode, &fmt);
|
||||
|
||||
return imx334_set_pad_format(sd, cfg, &fmt);
|
||||
return imx334_set_pad_format(sd, sd_state, &fmt);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1161,7 +1161,7 @@ static int imx355_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct imx355 *imx355 = to_imx355(sd);
|
||||
struct v4l2_mbus_framefmt *try_fmt =
|
||||
v4l2_subdev_get_try_format(sd, fh->pad, 0);
|
||||
v4l2_subdev_get_try_format(sd, fh->state, 0);
|
||||
|
||||
mutex_lock(&imx355->mutex);
|
||||
|
||||
@ -1248,7 +1248,7 @@ static const struct v4l2_ctrl_ops imx355_ctrl_ops = {
|
||||
};
|
||||
|
||||
static int imx355_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct imx355 *imx355 = to_imx355(sd);
|
||||
@ -1264,7 +1264,7 @@ static int imx355_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int imx355_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct imx355 *imx355 = to_imx355(sd);
|
||||
@ -1298,14 +1298,14 @@ static void imx355_update_pad_format(struct imx355 *imx355,
|
||||
}
|
||||
|
||||
static int imx355_do_get_pad_format(struct imx355 *imx355,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *framefmt;
|
||||
struct v4l2_subdev *sd = &imx355->sd;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
framefmt = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
framefmt = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
fmt->format = *framefmt;
|
||||
} else {
|
||||
imx355_update_pad_format(imx355, imx355->cur_mode, fmt);
|
||||
@ -1315,14 +1315,14 @@ static int imx355_do_get_pad_format(struct imx355 *imx355,
|
||||
}
|
||||
|
||||
static int imx355_get_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct imx355 *imx355 = to_imx355(sd);
|
||||
int ret;
|
||||
|
||||
mutex_lock(&imx355->mutex);
|
||||
ret = imx355_do_get_pad_format(imx355, cfg, fmt);
|
||||
ret = imx355_do_get_pad_format(imx355, sd_state, fmt);
|
||||
mutex_unlock(&imx355->mutex);
|
||||
|
||||
return ret;
|
||||
@ -1330,7 +1330,7 @@ static int imx355_get_pad_format(struct v4l2_subdev *sd,
|
||||
|
||||
static int
|
||||
imx355_set_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct imx355 *imx355 = to_imx355(sd);
|
||||
@ -1356,7 +1356,7 @@ imx355_set_pad_format(struct v4l2_subdev *sd,
|
||||
fmt->format.width, fmt->format.height);
|
||||
imx355_update_pad_format(imx355, mode, fmt);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
framefmt = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
framefmt = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
*framefmt = fmt->format;
|
||||
} else {
|
||||
imx355->cur_mode = mode;
|
||||
|
@ -539,17 +539,19 @@ static int __find_resolution(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static struct v4l2_mbus_framefmt *__find_format(struct m5mols_info *info,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
enum v4l2_subdev_format_whence which,
|
||||
enum m5mols_restype type)
|
||||
{
|
||||
if (which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return cfg ? v4l2_subdev_get_try_format(&info->sd, cfg, 0) : NULL;
|
||||
return sd_state ? v4l2_subdev_get_try_format(&info->sd,
|
||||
sd_state, 0) : NULL;
|
||||
|
||||
return &info->ffmt[type];
|
||||
}
|
||||
|
||||
static int m5mols_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
static int m5mols_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct m5mols_info *info = to_m5mols(sd);
|
||||
@ -558,7 +560,7 @@ static int m5mols_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config
|
||||
|
||||
mutex_lock(&info->lock);
|
||||
|
||||
format = __find_format(info, cfg, fmt->which, info->res_type);
|
||||
format = __find_format(info, sd_state, fmt->which, info->res_type);
|
||||
if (format)
|
||||
fmt->format = *format;
|
||||
else
|
||||
@ -568,7 +570,8 @@ static int m5mols_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int m5mols_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
static int m5mols_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct m5mols_info *info = to_m5mols(sd);
|
||||
@ -582,7 +585,7 @@ static int m5mols_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
sfmt = __find_format(info, cfg, fmt->which, type);
|
||||
sfmt = __find_format(info, sd_state, fmt->which, type);
|
||||
if (!sfmt)
|
||||
return 0;
|
||||
|
||||
@ -648,7 +651,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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (!code || code->index >= SIZE_DEFAULT_FFMT)
|
||||
@ -909,7 +912,9 @@ 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(sd, fh->pad, 0);
|
||||
struct v4l2_mbus_framefmt *format = v4l2_subdev_get_try_format(sd,
|
||||
fh->state,
|
||||
0);
|
||||
|
||||
*format = m5mols_default_ffmt[0];
|
||||
return 0;
|
||||
|
@ -712,7 +712,7 @@ static int max9286_s_stream(struct v4l2_subdev *sd, int enable)
|
||||
}
|
||||
|
||||
static int max9286_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index > 0)
|
||||
@ -725,12 +725,12 @@ static int max9286_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
|
||||
static struct v4l2_mbus_framefmt *
|
||||
max9286_get_pad_format(struct max9286_priv *priv,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, u32 which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_format(&priv->sd, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(&priv->sd, sd_state, pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &priv->fmt[pad];
|
||||
default:
|
||||
@ -739,7 +739,7 @@ max9286_get_pad_format(struct max9286_priv *priv,
|
||||
}
|
||||
|
||||
static int max9286_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct max9286_priv *priv = sd_to_max9286(sd);
|
||||
@ -760,7 +760,8 @@ static int max9286_set_fmt(struct v4l2_subdev *sd,
|
||||
break;
|
||||
}
|
||||
|
||||
cfg_fmt = max9286_get_pad_format(priv, cfg, format->pad, format->which);
|
||||
cfg_fmt = max9286_get_pad_format(priv, sd_state, format->pad,
|
||||
format->which);
|
||||
if (!cfg_fmt)
|
||||
return -EINVAL;
|
||||
|
||||
@ -772,7 +773,7 @@ static int max9286_set_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int max9286_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct max9286_priv *priv = sd_to_max9286(sd);
|
||||
@ -788,7 +789,7 @@ static int max9286_get_fmt(struct v4l2_subdev *sd,
|
||||
if (pad == MAX9286_SRC_PAD)
|
||||
pad = __ffs(priv->bound_sources);
|
||||
|
||||
cfg_fmt = max9286_get_pad_format(priv, cfg, pad, format->which);
|
||||
cfg_fmt = max9286_get_pad_format(priv, sd_state, pad, format->which);
|
||||
if (!cfg_fmt)
|
||||
return -EINVAL;
|
||||
|
||||
@ -832,7 +833,7 @@ static int max9286_open(struct v4l2_subdev *subdev, struct v4l2_subdev_fh *fh)
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < MAX9286_N_SINKS; i++) {
|
||||
format = v4l2_subdev_get_try_format(subdev, fh->pad, i);
|
||||
format = v4l2_subdev_get_try_format(subdev, fh->state, i);
|
||||
max9286_init_format(format);
|
||||
}
|
||||
|
||||
|
@ -188,7 +188,7 @@ static int ml86v7667_g_input_status(struct v4l2_subdev *sd, u32 *status)
|
||||
}
|
||||
|
||||
static int ml86v7667_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index > 0)
|
||||
@ -200,7 +200,7 @@ static int ml86v7667_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ml86v7667_fill_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ml86v7667_priv *priv = to_ml86v7667(sd);
|
||||
|
@ -254,7 +254,7 @@ unlock:
|
||||
}
|
||||
|
||||
static int mt9m001_set_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
@ -295,7 +295,7 @@ static int mt9m001_set_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int mt9m001_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
@ -320,7 +320,7 @@ static int mt9m001_get_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int mt9m001_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
@ -331,7 +331,7 @@ static int mt9m001_get_fmt(struct v4l2_subdev *sd,
|
||||
return -EINVAL;
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
format->format = *mf;
|
||||
return 0;
|
||||
}
|
||||
@ -377,7 +377,7 @@ static int mt9m001_s_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int mt9m001_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
@ -411,7 +411,7 @@ static int mt9m001_set_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_ACTIVE)
|
||||
return mt9m001_s_fmt(sd, fmt, mf);
|
||||
cfg->try_fmt = *mf;
|
||||
sd_state->pads->try_fmt = *mf;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -657,12 +657,12 @@ static const struct v4l2_subdev_core_ops mt9m001_subdev_core_ops = {
|
||||
};
|
||||
|
||||
static int mt9m001_init_cfg(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg)
|
||||
struct v4l2_subdev_state *sd_state)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
struct mt9m001 *mt9m001 = to_mt9m001(client);
|
||||
struct v4l2_mbus_framefmt *try_fmt =
|
||||
v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
|
||||
try_fmt->width = MT9M001_MAX_WIDTH;
|
||||
try_fmt->height = MT9M001_MAX_HEIGHT;
|
||||
@ -677,7 +677,7 @@ static int mt9m001_init_cfg(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int mt9m001_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
@ -304,7 +304,7 @@ static int mt9m032_setup_pll(struct mt9m032 *sensor)
|
||||
*/
|
||||
|
||||
static int mt9m032_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index != 0)
|
||||
@ -315,7 +315,7 @@ static int mt9m032_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9m032_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->index != 0 || fse->code != MEDIA_BUS_FMT_Y8_1X8)
|
||||
@ -332,18 +332,19 @@ static int mt9m032_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
/**
|
||||
* __mt9m032_get_pad_crop() - get crop rect
|
||||
* @sensor: pointer to the sensor struct
|
||||
* @cfg: v4l2_subdev_pad_config for getting the try crop rect from
|
||||
* @sd_state: v4l2_subdev_state 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_pad_config *cfg,
|
||||
__mt9m032_get_pad_crop(struct mt9m032 *sensor,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_crop(&sensor->subdev, cfg, 0);
|
||||
return v4l2_subdev_get_try_crop(&sensor->subdev, sd_state, 0);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &sensor->crop;
|
||||
default:
|
||||
@ -354,18 +355,20 @@ __mt9m032_get_pad_crop(struct mt9m032 *sensor, struct v4l2_subdev_pad_config *cf
|
||||
/**
|
||||
* __mt9m032_get_pad_format() - get format
|
||||
* @sensor: pointer to the sensor struct
|
||||
* @cfg: v4l2_subdev_pad_config for getting the try format from
|
||||
* @sd_state: v4l2_subdev_state 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_pad_config *cfg,
|
||||
__mt9m032_get_pad_format(struct mt9m032 *sensor,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_format(&sensor->subdev, cfg, 0);
|
||||
return v4l2_subdev_get_try_format(&sensor->subdev, sd_state,
|
||||
0);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &sensor->format;
|
||||
default:
|
||||
@ -374,20 +377,20 @@ __mt9m032_get_pad_format(struct mt9m032 *sensor, struct v4l2_subdev_pad_config *
|
||||
}
|
||||
|
||||
static int mt9m032_get_pad_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct mt9m032 *sensor = to_mt9m032(subdev);
|
||||
|
||||
mutex_lock(&sensor->lock);
|
||||
fmt->format = *__mt9m032_get_pad_format(sensor, cfg, fmt->which);
|
||||
fmt->format = *__mt9m032_get_pad_format(sensor, sd_state, fmt->which);
|
||||
mutex_unlock(&sensor->lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt9m032_set_pad_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct mt9m032 *sensor = to_mt9m032(subdev);
|
||||
@ -401,7 +404,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, cfg, fmt->which);
|
||||
fmt->format = *__mt9m032_get_pad_format(sensor, sd_state, fmt->which);
|
||||
ret = 0;
|
||||
|
||||
done:
|
||||
@ -410,7 +413,7 @@ done:
|
||||
}
|
||||
|
||||
static int mt9m032_get_pad_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct mt9m032 *sensor = to_mt9m032(subdev);
|
||||
@ -419,14 +422,14 @@ static int mt9m032_get_pad_selection(struct v4l2_subdev *subdev,
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&sensor->lock);
|
||||
sel->r = *__mt9m032_get_pad_crop(sensor, cfg, sel->which);
|
||||
sel->r = *__mt9m032_get_pad_crop(sensor, sd_state, sel->which);
|
||||
mutex_unlock(&sensor->lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt9m032_set_pad_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct mt9m032 *sensor = to_mt9m032(subdev);
|
||||
@ -462,13 +465,14 @@ 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, cfg, sel->which);
|
||||
__crop = __mt9m032_get_pad_crop(sensor, sd_state, 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, cfg, sel->which);
|
||||
format = __mt9m032_get_pad_format(sensor, sd_state,
|
||||
sel->which);
|
||||
format->width = rect.width;
|
||||
format->height = rect.height;
|
||||
}
|
||||
|
@ -449,7 +449,7 @@ static int mt9m111_reset(struct mt9m111 *mt9m111)
|
||||
}
|
||||
|
||||
static int mt9m111_set_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
@ -493,7 +493,7 @@ static int mt9m111_set_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int mt9m111_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
@ -518,7 +518,7 @@ static int mt9m111_get_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int mt9m111_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
@ -529,7 +529,7 @@ static int mt9m111_get_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, format->pad);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, format->pad);
|
||||
format->format = *mf;
|
||||
return 0;
|
||||
#else
|
||||
@ -624,7 +624,7 @@ static int mt9m111_set_pixfmt(struct mt9m111 *mt9m111,
|
||||
}
|
||||
|
||||
static int mt9m111_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
@ -678,7 +678,7 @@ static int mt9m111_set_fmt(struct v4l2_subdev *sd,
|
||||
mf->xfer_func = V4L2_XFER_FUNC_DEFAULT;
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
cfg->try_fmt = *mf;
|
||||
sd_state->pads->try_fmt = *mf;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1100,7 +1100,7 @@ static int mt9m111_s_frame_interval(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int mt9m111_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index >= ARRAY_SIZE(mt9m111_colour_fmts))
|
||||
@ -1119,11 +1119,11 @@ static int mt9m111_s_stream(struct v4l2_subdev *sd, int enable)
|
||||
}
|
||||
|
||||
static int mt9m111_init_cfg(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg)
|
||||
struct v4l2_subdev_state *sd_state)
|
||||
{
|
||||
#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
|
||||
struct v4l2_mbus_framefmt *format =
|
||||
v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
|
||||
format->width = MT9M111_MAX_WIDTH;
|
||||
format->height = MT9M111_MAX_HEIGHT;
|
||||
|
@ -470,7 +470,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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct mt9p031 *mt9p031 = to_mt9p031(subdev);
|
||||
@ -483,7 +483,7 @@ static int mt9p031_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9p031_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct mt9p031 *mt9p031 = to_mt9p031(subdev);
|
||||
@ -501,12 +501,14 @@ 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_pad_config *cfg,
|
||||
__mt9p031_get_pad_format(struct mt9p031 *mt9p031,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, u32 which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_format(&mt9p031->subdev, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(&mt9p031->subdev, sd_state,
|
||||
pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &mt9p031->format;
|
||||
default:
|
||||
@ -515,12 +517,14 @@ __mt9p031_get_pad_format(struct mt9p031 *mt9p031, struct v4l2_subdev_pad_config
|
||||
}
|
||||
|
||||
static struct v4l2_rect *
|
||||
__mt9p031_get_pad_crop(struct mt9p031 *mt9p031, struct v4l2_subdev_pad_config *cfg,
|
||||
unsigned int pad, u32 which)
|
||||
__mt9p031_get_pad_crop(struct mt9p031 *mt9p031,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, u32 which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_crop(&mt9p031->subdev, cfg, pad);
|
||||
return v4l2_subdev_get_try_crop(&mt9p031->subdev, sd_state,
|
||||
pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &mt9p031->crop;
|
||||
default:
|
||||
@ -529,18 +533,18 @@ __mt9p031_get_pad_crop(struct mt9p031 *mt9p031, struct v4l2_subdev_pad_config *c
|
||||
}
|
||||
|
||||
static int mt9p031_get_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct mt9p031 *mt9p031 = to_mt9p031(subdev);
|
||||
|
||||
fmt->format = *__mt9p031_get_pad_format(mt9p031, cfg, fmt->pad,
|
||||
fmt->format = *__mt9p031_get_pad_format(mt9p031, sd_state, fmt->pad,
|
||||
fmt->which);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt9p031_set_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct mt9p031 *mt9p031 = to_mt9p031(subdev);
|
||||
@ -551,7 +555,7 @@ static int mt9p031_set_format(struct v4l2_subdev *subdev,
|
||||
unsigned int hratio;
|
||||
unsigned int vratio;
|
||||
|
||||
__crop = __mt9p031_get_pad_crop(mt9p031, cfg, format->pad,
|
||||
__crop = __mt9p031_get_pad_crop(mt9p031, sd_state, format->pad,
|
||||
format->which);
|
||||
|
||||
/* Clamp the width and height to avoid dividing by zero. */
|
||||
@ -567,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, cfg, format->pad,
|
||||
__format = __mt9p031_get_pad_format(mt9p031, sd_state, format->pad,
|
||||
format->which);
|
||||
__format->width = __crop->width / hratio;
|
||||
__format->height = __crop->height / vratio;
|
||||
@ -578,7 +582,7 @@ static int mt9p031_set_format(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9p031_get_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct mt9p031 *mt9p031 = to_mt9p031(subdev);
|
||||
@ -586,12 +590,13 @@ 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, cfg, sel->pad, sel->which);
|
||||
sel->r = *__mt9p031_get_pad_crop(mt9p031, sd_state, sel->pad,
|
||||
sel->which);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt9p031_set_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct mt9p031 *mt9p031 = to_mt9p031(subdev);
|
||||
@ -621,13 +626,15 @@ 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, cfg, sel->pad, sel->which);
|
||||
__crop = __mt9p031_get_pad_crop(mt9p031, sd_state, 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, cfg, sel->pad,
|
||||
__format = __mt9p031_get_pad_format(mt9p031, sd_state,
|
||||
sel->pad,
|
||||
sel->which);
|
||||
__format->width = rect.width;
|
||||
__format->height = rect.height;
|
||||
@ -942,13 +949,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(subdev, fh->pad, 0);
|
||||
crop = v4l2_subdev_get_try_crop(subdev, fh->state, 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(subdev, fh->pad, 0);
|
||||
format = v4l2_subdev_get_try_format(subdev, fh->state, 0);
|
||||
|
||||
if (mt9p031->model == MT9P031_MODEL_MONOCHROME)
|
||||
format->code = MEDIA_BUS_FMT_Y12_1X12;
|
||||
|
@ -252,12 +252,14 @@ e_power:
|
||||
*/
|
||||
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__mt9t001_get_pad_format(struct mt9t001 *mt9t001, struct v4l2_subdev_pad_config *cfg,
|
||||
__mt9t001_get_pad_format(struct mt9t001 *mt9t001,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_format(&mt9t001->subdev, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(&mt9t001->subdev, sd_state,
|
||||
pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &mt9t001->format;
|
||||
default:
|
||||
@ -266,12 +268,14 @@ __mt9t001_get_pad_format(struct mt9t001 *mt9t001, struct v4l2_subdev_pad_config
|
||||
}
|
||||
|
||||
static struct v4l2_rect *
|
||||
__mt9t001_get_pad_crop(struct mt9t001 *mt9t001, struct v4l2_subdev_pad_config *cfg,
|
||||
__mt9t001_get_pad_crop(struct mt9t001 *mt9t001,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_crop(&mt9t001->subdev, cfg, pad);
|
||||
return v4l2_subdev_get_try_crop(&mt9t001->subdev, sd_state,
|
||||
pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &mt9t001->crop;
|
||||
default:
|
||||
@ -335,7 +339,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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index > 0)
|
||||
@ -346,7 +350,7 @@ static int mt9t001_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9t001_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->index >= 8 || fse->code != MEDIA_BUS_FMT_SGRBG10_1X10)
|
||||
@ -361,18 +365,19 @@ static int mt9t001_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9t001_get_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct mt9t001 *mt9t001 = to_mt9t001(subdev);
|
||||
|
||||
format->format = *__mt9t001_get_pad_format(mt9t001, cfg, format->pad,
|
||||
format->format = *__mt9t001_get_pad_format(mt9t001, sd_state,
|
||||
format->pad,
|
||||
format->which);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt9t001_set_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct mt9t001 *mt9t001 = to_mt9t001(subdev);
|
||||
@ -383,7 +388,7 @@ static int mt9t001_set_format(struct v4l2_subdev *subdev,
|
||||
unsigned int hratio;
|
||||
unsigned int vratio;
|
||||
|
||||
__crop = __mt9t001_get_pad_crop(mt9t001, cfg, format->pad,
|
||||
__crop = __mt9t001_get_pad_crop(mt9t001, sd_state, format->pad,
|
||||
format->which);
|
||||
|
||||
/* Clamp the width and height to avoid dividing by zero. */
|
||||
@ -399,7 +404,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, cfg, format->pad,
|
||||
__format = __mt9t001_get_pad_format(mt9t001, sd_state, format->pad,
|
||||
format->which);
|
||||
__format->width = __crop->width / hratio;
|
||||
__format->height = __crop->height / vratio;
|
||||
@ -410,7 +415,7 @@ static int mt9t001_set_format(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9t001_get_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct mt9t001 *mt9t001 = to_mt9t001(subdev);
|
||||
@ -418,12 +423,13 @@ 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, cfg, sel->pad, sel->which);
|
||||
sel->r = *__mt9t001_get_pad_crop(mt9t001, sd_state, sel->pad,
|
||||
sel->which);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt9t001_set_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct mt9t001 *mt9t001 = to_mt9t001(subdev);
|
||||
@ -455,13 +461,15 @@ 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, cfg, sel->pad, sel->which);
|
||||
__crop = __mt9t001_get_pad_crop(mt9t001, sd_state, 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, cfg, sel->pad,
|
||||
__format = __mt9t001_get_pad_format(mt9t001, sd_state,
|
||||
sel->pad,
|
||||
sel->which);
|
||||
__format->width = rect.width;
|
||||
__format->height = rect.height;
|
||||
@ -798,13 +806,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(subdev, fh->pad, 0);
|
||||
crop = v4l2_subdev_get_try_crop(subdev, fh->state, 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(subdev, fh->pad, 0);
|
||||
format = v4l2_subdev_get_try_format(subdev, fh->state, 0);
|
||||
format->code = MEDIA_BUS_FMT_SGRBG10_1X10;
|
||||
format->width = MT9T001_WINDOW_WIDTH_DEF + 1;
|
||||
format->height = MT9T001_WINDOW_HEIGHT_DEF + 1;
|
||||
|
@ -872,8 +872,8 @@ static int mt9t112_set_params(struct mt9t112_priv *priv,
|
||||
}
|
||||
|
||||
static int mt9t112_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
struct mt9t112_priv *priv = to_mt9t112(client);
|
||||
@ -897,7 +897,7 @@ static int mt9t112_get_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int mt9t112_set_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
@ -912,7 +912,7 @@ static int mt9t112_set_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int mt9t112_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
@ -953,7 +953,7 @@ static int mt9t112_s_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int mt9t112_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
@ -982,13 +982,13 @@ static int mt9t112_set_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_ACTIVE)
|
||||
return mt9t112_s_fmt(sd, mf);
|
||||
cfg->try_fmt = *mf;
|
||||
sd_state->pads->try_fmt = *mf;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt9t112_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
@ -327,7 +327,7 @@ static int mt9v011_reset(struct v4l2_subdev *sd, u32 val)
|
||||
}
|
||||
|
||||
static int mt9v011_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index > 0)
|
||||
@ -338,7 +338,7 @@ static int mt9v011_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int mt9v011_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *fmt = &format->format;
|
||||
@ -358,7 +358,7 @@ static int mt9v011_set_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
set_res(sd);
|
||||
} else {
|
||||
cfg->try_fmt = *fmt;
|
||||
sd_state->pads->try_fmt = *fmt;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -349,12 +349,14 @@ 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_pad_config *cfg,
|
||||
__mt9v032_get_pad_format(struct mt9v032 *mt9v032,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_format(&mt9v032->subdev, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(&mt9v032->subdev, sd_state,
|
||||
pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &mt9v032->format;
|
||||
default:
|
||||
@ -363,12 +365,14 @@ __mt9v032_get_pad_format(struct mt9v032 *mt9v032, struct v4l2_subdev_pad_config
|
||||
}
|
||||
|
||||
static struct v4l2_rect *
|
||||
__mt9v032_get_pad_crop(struct mt9v032 *mt9v032, struct v4l2_subdev_pad_config *cfg,
|
||||
__mt9v032_get_pad_crop(struct mt9v032 *mt9v032,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_crop(&mt9v032->subdev, cfg, pad);
|
||||
return v4l2_subdev_get_try_crop(&mt9v032->subdev, sd_state,
|
||||
pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &mt9v032->crop;
|
||||
default:
|
||||
@ -425,7 +429,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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
|
||||
@ -438,7 +442,7 @@ static int mt9v032_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9v032_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
|
||||
@ -457,12 +461,13 @@ static int mt9v032_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9v032_get_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
|
||||
|
||||
format->format = *__mt9v032_get_pad_format(mt9v032, cfg, format->pad,
|
||||
format->format = *__mt9v032_get_pad_format(mt9v032, sd_state,
|
||||
format->pad,
|
||||
format->which);
|
||||
return 0;
|
||||
}
|
||||
@ -492,7 +497,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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
|
||||
@ -503,7 +508,7 @@ static int mt9v032_set_format(struct v4l2_subdev *subdev,
|
||||
unsigned int hratio;
|
||||
unsigned int vratio;
|
||||
|
||||
__crop = __mt9v032_get_pad_crop(mt9v032, cfg, format->pad,
|
||||
__crop = __mt9v032_get_pad_crop(mt9v032, sd_state, format->pad,
|
||||
format->which);
|
||||
|
||||
/* Clamp the width and height to avoid dividing by zero. */
|
||||
@ -519,7 +524,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, cfg, format->pad,
|
||||
__format = __mt9v032_get_pad_format(mt9v032, sd_state, format->pad,
|
||||
format->which);
|
||||
__format->width = __crop->width / hratio;
|
||||
__format->height = __crop->height / vratio;
|
||||
@ -536,7 +541,7 @@ static int mt9v032_set_format(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9v032_get_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
|
||||
@ -544,12 +549,13 @@ 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, cfg, sel->pad, sel->which);
|
||||
sel->r = *__mt9v032_get_pad_crop(mt9v032, sd_state, sel->pad,
|
||||
sel->which);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt9v032_set_selection(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct mt9v032 *mt9v032 = to_mt9v032(subdev);
|
||||
@ -581,13 +587,15 @@ 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, cfg, sel->pad, sel->which);
|
||||
__crop = __mt9v032_get_pad_crop(mt9v032, sd_state, 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, cfg, sel->pad,
|
||||
__format = __mt9v032_get_pad_format(mt9v032, sd_state,
|
||||
sel->pad,
|
||||
sel->which);
|
||||
__format->width = rect.width;
|
||||
__format->height = rect.height;
|
||||
@ -922,13 +930,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(subdev, fh->pad, 0);
|
||||
crop = v4l2_subdev_get_try_crop(subdev, fh->state, 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(subdev, fh->pad, 0);
|
||||
format = v4l2_subdev_get_try_format(subdev, fh->state, 0);
|
||||
|
||||
if (mt9v032->model->color)
|
||||
format->code = MEDIA_BUS_FMT_SGRBG10_1X10;
|
||||
|
@ -791,16 +791,16 @@ static int mt9v111_g_frame_interval(struct v4l2_subdev *sd,
|
||||
|
||||
static struct v4l2_mbus_framefmt *__mt9v111_get_pad_format(
|
||||
struct mt9v111_dev *mt9v111,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
#if IS_ENABLED(CONFIG_VIDEO_V4L2_SUBDEV_API)
|
||||
return v4l2_subdev_get_try_format(&mt9v111->sd, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(&mt9v111->sd, sd_state, pad);
|
||||
#else
|
||||
return &cfg->try_fmt;
|
||||
return &sd_state->pads->try_fmt;
|
||||
#endif
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &mt9v111->fmt;
|
||||
@ -810,7 +810,7 @@ static struct v4l2_mbus_framefmt *__mt9v111_get_pad_format(
|
||||
}
|
||||
|
||||
static int mt9v111_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index > ARRAY_SIZE(mt9v111_formats) - 1)
|
||||
@ -822,7 +822,7 @@ static int mt9v111_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9v111_enum_frame_interval(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_interval_enum *fie)
|
||||
{
|
||||
unsigned int i;
|
||||
@ -845,7 +845,7 @@ static int mt9v111_enum_frame_interval(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int mt9v111_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->pad || fse->index >= ARRAY_SIZE(mt9v111_frame_sizes))
|
||||
@ -860,7 +860,7 @@ static int mt9v111_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9v111_get_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct mt9v111_dev *mt9v111 = sd_to_mt9v111(subdev);
|
||||
@ -869,7 +869,8 @@ static int mt9v111_get_format(struct v4l2_subdev *subdev,
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&mt9v111->stream_mutex);
|
||||
format->format = *__mt9v111_get_pad_format(mt9v111, cfg, format->pad,
|
||||
format->format = *__mt9v111_get_pad_format(mt9v111, sd_state,
|
||||
format->pad,
|
||||
format->which);
|
||||
mutex_unlock(&mt9v111->stream_mutex);
|
||||
|
||||
@ -877,7 +878,7 @@ static int mt9v111_get_format(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int mt9v111_set_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct mt9v111_dev *mt9v111 = sd_to_mt9v111(subdev);
|
||||
@ -925,7 +926,7 @@ static int mt9v111_set_format(struct v4l2_subdev *subdev,
|
||||
new_fmt.height = mt9v111_frame_sizes[idx].height;
|
||||
|
||||
/* Update the device (or pad) format if it has changed. */
|
||||
__fmt = __mt9v111_get_pad_format(mt9v111, cfg, format->pad,
|
||||
__fmt = __mt9v111_get_pad_format(mt9v111, sd_state, format->pad,
|
||||
format->which);
|
||||
|
||||
/* Format hasn't changed, stop here. */
|
||||
@ -954,9 +955,9 @@ done:
|
||||
}
|
||||
|
||||
static int mt9v111_init_cfg(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg)
|
||||
struct v4l2_subdev_state *sd_state)
|
||||
{
|
||||
cfg->try_fmt = mt9v111_def_fmt;
|
||||
sd_state->pads->try_fmt = mt9v111_def_fmt;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -488,7 +488,7 @@ unlock:
|
||||
}
|
||||
|
||||
static int noon010_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index >= ARRAY_SIZE(noon010_formats))
|
||||
@ -499,15 +499,15 @@ static int noon010_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int noon010_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
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 (cfg) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
if (sd_state) {
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
fmt->format = *mf;
|
||||
}
|
||||
return 0;
|
||||
@ -539,7 +539,8 @@ 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_pad_config *cfg,
|
||||
static int noon010_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct noon010_info *info = to_noon010(sd);
|
||||
@ -554,8 +555,8 @@ static int noon010_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config
|
||||
fmt->format.field = V4L2_FIELD_NONE;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
if (cfg) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
if (sd_state) {
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
*mf = fmt->format;
|
||||
}
|
||||
return 0;
|
||||
@ -637,7 +638,9 @@ 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(sd, fh->pad, 0);
|
||||
struct v4l2_mbus_framefmt *mf = v4l2_subdev_get_try_format(sd,
|
||||
fh->state,
|
||||
0);
|
||||
|
||||
mf->width = noon010_sizes[0].width;
|
||||
mf->height = noon010_sizes[0].height;
|
||||
|
@ -295,7 +295,7 @@ static void ov02a10_fill_fmt(const struct ov02a10_mode *mode,
|
||||
}
|
||||
|
||||
static int ov02a10_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov02a10 *ov02a10 = to_ov02a10(sd);
|
||||
@ -315,7 +315,7 @@ static int ov02a10_set_fmt(struct v4l2_subdev *sd,
|
||||
ov02a10_fill_fmt(ov02a10->cur_mode, mbus_fmt);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
frame_fmt = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
frame_fmt = v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
else
|
||||
frame_fmt = &ov02a10->fmt;
|
||||
|
||||
@ -327,7 +327,7 @@ out_unlock:
|
||||
}
|
||||
|
||||
static int ov02a10_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov02a10 *ov02a10 = to_ov02a10(sd);
|
||||
@ -336,7 +336,8 @@ static int ov02a10_get_fmt(struct v4l2_subdev *sd,
|
||||
mutex_lock(&ov02a10->mutex);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
fmt->format = *v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
fmt->format = *v4l2_subdev_get_try_format(sd, sd_state,
|
||||
fmt->pad);
|
||||
} else {
|
||||
fmt->format = ov02a10->fmt;
|
||||
mbus_fmt->code = ov02a10->fmt.code;
|
||||
@ -349,7 +350,7 @@ static int ov02a10_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov02a10_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct ov02a10 *ov02a10 = to_ov02a10(sd);
|
||||
@ -363,7 +364,7 @@ static int ov02a10_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov02a10_enum_frame_sizes(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->index >= ARRAY_SIZE(supported_modes))
|
||||
@ -511,7 +512,7 @@ static int __ov02a10_stop_stream(struct ov02a10 *ov02a10)
|
||||
}
|
||||
|
||||
static int ov02a10_entity_init_cfg(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg)
|
||||
struct v4l2_subdev_state *sd_state)
|
||||
{
|
||||
struct v4l2_subdev_format fmt = {
|
||||
.which = V4L2_SUBDEV_FORMAT_TRY,
|
||||
@ -521,7 +522,7 @@ static int ov02a10_entity_init_cfg(struct v4l2_subdev *sd,
|
||||
}
|
||||
};
|
||||
|
||||
ov02a10_set_fmt(sd, cfg, &fmt);
|
||||
ov02a10_set_fmt(sd, sd_state, &fmt);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1150,7 +1150,7 @@ static int ov13858_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct ov13858 *ov13858 = to_ov13858(sd);
|
||||
struct v4l2_mbus_framefmt *try_fmt = v4l2_subdev_get_try_format(sd,
|
||||
fh->pad,
|
||||
fh->state,
|
||||
0);
|
||||
|
||||
mutex_lock(&ov13858->mutex);
|
||||
@ -1275,7 +1275,7 @@ static const struct v4l2_ctrl_ops ov13858_ctrl_ops = {
|
||||
};
|
||||
|
||||
static int ov13858_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
/* Only one bayer order(GRBG) is supported */
|
||||
@ -1288,7 +1288,7 @@ static int ov13858_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov13858_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->index >= ARRAY_SIZE(supported_modes))
|
||||
@ -1315,14 +1315,14 @@ static void ov13858_update_pad_format(const struct ov13858_mode *mode,
|
||||
}
|
||||
|
||||
static int ov13858_do_get_pad_format(struct ov13858 *ov13858,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *framefmt;
|
||||
struct v4l2_subdev *sd = &ov13858->sd;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
framefmt = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
framefmt = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
fmt->format = *framefmt;
|
||||
} else {
|
||||
ov13858_update_pad_format(ov13858->cur_mode, fmt);
|
||||
@ -1332,14 +1332,14 @@ static int ov13858_do_get_pad_format(struct ov13858 *ov13858,
|
||||
}
|
||||
|
||||
static int ov13858_get_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov13858 *ov13858 = to_ov13858(sd);
|
||||
int ret;
|
||||
|
||||
mutex_lock(&ov13858->mutex);
|
||||
ret = ov13858_do_get_pad_format(ov13858, cfg, fmt);
|
||||
ret = ov13858_do_get_pad_format(ov13858, sd_state, fmt);
|
||||
mutex_unlock(&ov13858->mutex);
|
||||
|
||||
return ret;
|
||||
@ -1347,7 +1347,7 @@ static int ov13858_get_pad_format(struct v4l2_subdev *sd,
|
||||
|
||||
static int
|
||||
ov13858_set_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov13858 *ov13858 = to_ov13858(sd);
|
||||
@ -1371,7 +1371,7 @@ ov13858_set_pad_format(struct v4l2_subdev *sd,
|
||||
fmt->format.width, fmt->format.height);
|
||||
ov13858_update_pad_format(mode, fmt);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
framefmt = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
framefmt = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
*framefmt = fmt->format;
|
||||
} else {
|
||||
ov13858->cur_mode = mode;
|
||||
|
@ -913,7 +913,7 @@ err:
|
||||
}
|
||||
|
||||
static int ov2640_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
@ -925,7 +925,7 @@ static int ov2640_get_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
format->format = *mf;
|
||||
return 0;
|
||||
#else
|
||||
@ -946,7 +946,7 @@ static int ov2640_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov2640_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
@ -996,7 +996,7 @@ static int ov2640_set_fmt(struct v4l2_subdev *sd,
|
||||
/* select format */
|
||||
priv->cfmt_code = mf->code;
|
||||
} else {
|
||||
cfg->try_fmt = *mf;
|
||||
sd_state->pads->try_fmt = *mf;
|
||||
}
|
||||
out:
|
||||
mutex_unlock(&priv->lock);
|
||||
@ -1005,11 +1005,11 @@ out:
|
||||
}
|
||||
|
||||
static int ov2640_init_cfg(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg)
|
||||
struct v4l2_subdev_state *sd_state)
|
||||
{
|
||||
#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
|
||||
struct v4l2_mbus_framefmt *try_fmt =
|
||||
v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
const struct ov2640_win_size *win =
|
||||
ov2640_select_win(SVGA_WIDTH, SVGA_HEIGHT);
|
||||
|
||||
@ -1026,7 +1026,7 @@ static int ov2640_init_cfg(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov2640_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index >= ARRAY_SIZE(ov2640_codes))
|
||||
@ -1037,7 +1037,7 @@ static int ov2640_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov2640_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
if (sel->which != V4L2_SUBDEV_FORMAT_ACTIVE)
|
||||
|
@ -980,7 +980,7 @@ static int ov2659_init(struct v4l2_subdev *sd, u32 val)
|
||||
*/
|
||||
|
||||
static int ov2659_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
@ -996,7 +996,7 @@ static int ov2659_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov2659_enum_frame_sizes(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
@ -1022,7 +1022,7 @@ static int ov2659_enum_frame_sizes(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov2659_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
@ -1034,7 +1034,7 @@ static int ov2659_get_fmt(struct v4l2_subdev *sd,
|
||||
#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
mutex_lock(&ov2659->lock);
|
||||
fmt->format = *mf;
|
||||
mutex_unlock(&ov2659->lock);
|
||||
@ -1084,7 +1084,7 @@ static void __ov2659_try_frame_size(struct v4l2_mbus_framefmt *mf,
|
||||
}
|
||||
|
||||
static int ov2659_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
@ -1114,7 +1114,7 @@ static int ov2659_set_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
*mf = fmt->format;
|
||||
#endif
|
||||
} else {
|
||||
@ -1311,7 +1311,7 @@ static int ov2659_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
struct v4l2_mbus_framefmt *format =
|
||||
v4l2_subdev_get_try_format(sd, fh->pad, 0);
|
||||
v4l2_subdev_get_try_format(sd, fh->state, 0);
|
||||
|
||||
dev_dbg(&client->dev, "%s:\n", __func__);
|
||||
|
||||
|
@ -645,7 +645,7 @@ unlock:
|
||||
}
|
||||
|
||||
static int ov2680_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct ov2680_dev *sensor = to_ov2680_dev(sd);
|
||||
@ -659,7 +659,7 @@ static int ov2680_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov2680_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ov2680_dev *sensor = to_ov2680_dev(sd);
|
||||
@ -673,7 +673,8 @@ static int ov2680_get_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
|
||||
fmt = v4l2_subdev_get_try_format(&sensor->sd, cfg, format->pad);
|
||||
fmt = v4l2_subdev_get_try_format(&sensor->sd, sd_state,
|
||||
format->pad);
|
||||
#else
|
||||
ret = -EINVAL;
|
||||
#endif
|
||||
@ -690,7 +691,7 @@ static int ov2680_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov2680_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ov2680_dev *sensor = to_ov2680_dev(sd);
|
||||
@ -721,7 +722,7 @@ static int ov2680_set_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
|
||||
try_fmt = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
try_fmt = v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
format->format = *try_fmt;
|
||||
#endif
|
||||
goto unlock;
|
||||
@ -743,22 +744,22 @@ unlock:
|
||||
}
|
||||
|
||||
static int ov2680_init_cfg(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg)
|
||||
struct v4l2_subdev_state *sd_state)
|
||||
{
|
||||
struct v4l2_subdev_format fmt = {
|
||||
.which = cfg ? V4L2_SUBDEV_FORMAT_TRY
|
||||
: V4L2_SUBDEV_FORMAT_ACTIVE,
|
||||
.which = sd_state ? V4L2_SUBDEV_FORMAT_TRY
|
||||
: V4L2_SUBDEV_FORMAT_ACTIVE,
|
||||
.format = {
|
||||
.width = 800,
|
||||
.height = 600,
|
||||
}
|
||||
};
|
||||
|
||||
return ov2680_set_fmt(sd, cfg, &fmt);
|
||||
return ov2680_set_fmt(sd, sd_state, &fmt);
|
||||
}
|
||||
|
||||
static int ov2680_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
int index = fse->index;
|
||||
@ -775,7 +776,7 @@ static int ov2680_enum_frame_size(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov2680_enum_frame_interval(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_interval_enum *fie)
|
||||
{
|
||||
struct v4l2_fract tpf;
|
||||
|
@ -328,7 +328,7 @@ static void ov2685_fill_fmt(const struct ov2685_mode *mode,
|
||||
}
|
||||
|
||||
static int ov2685_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov2685 *ov2685 = to_ov2685(sd);
|
||||
@ -341,7 +341,7 @@ static int ov2685_set_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov2685_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov2685 *ov2685 = to_ov2685(sd);
|
||||
@ -353,7 +353,7 @@ static int ov2685_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov2685_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index >= ARRAY_SIZE(supported_modes))
|
||||
@ -365,7 +365,7 @@ static int ov2685_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov2685_enum_frame_sizes(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
int index = fse->index;
|
||||
@ -493,7 +493,7 @@ static int ov2685_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
|
||||
mutex_lock(&ov2685->mutex);
|
||||
|
||||
try_fmt = v4l2_subdev_get_try_format(sd, fh->pad, 0);
|
||||
try_fmt = v4l2_subdev_get_try_format(sd, fh->state, 0);
|
||||
/* Initialize try_fmt */
|
||||
ov2685_fill_fmt(&supported_modes[0], try_fmt);
|
||||
|
||||
|
@ -810,7 +810,7 @@ exit:
|
||||
}
|
||||
|
||||
static int ov2740_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov2740 *ov2740 = to_ov2740(sd);
|
||||
@ -825,7 +825,7 @@ static int ov2740_set_format(struct v4l2_subdev *sd,
|
||||
mutex_lock(&ov2740->mutex);
|
||||
ov2740_update_pad_format(mode, &fmt->format);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
*v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format;
|
||||
*v4l2_subdev_get_try_format(sd, sd_state, fmt->pad) = fmt->format;
|
||||
} else {
|
||||
ov2740->cur_mode = mode;
|
||||
__v4l2_ctrl_s_ctrl(ov2740->link_freq, mode->link_freq_index);
|
||||
@ -850,14 +850,15 @@ static int ov2740_set_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov2740_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov2740 *ov2740 = to_ov2740(sd);
|
||||
|
||||
mutex_lock(&ov2740->mutex);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
fmt->format = *v4l2_subdev_get_try_format(&ov2740->sd, cfg,
|
||||
fmt->format = *v4l2_subdev_get_try_format(&ov2740->sd,
|
||||
sd_state,
|
||||
fmt->pad);
|
||||
else
|
||||
ov2740_update_pad_format(ov2740->cur_mode, &fmt->format);
|
||||
@ -868,7 +869,7 @@ static int ov2740_get_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov2740_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index > 0)
|
||||
@ -880,7 +881,7 @@ static int ov2740_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov2740_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->index >= ARRAY_SIZE(supported_modes))
|
||||
@ -903,7 +904,7 @@ static int ov2740_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
|
||||
mutex_lock(&ov2740->mutex);
|
||||
ov2740_update_pad_format(&supported_modes[0],
|
||||
v4l2_subdev_get_try_format(sd, fh->pad, 0));
|
||||
v4l2_subdev_get_try_format(sd, fh->state, 0));
|
||||
mutex_unlock(&ov2740->mutex);
|
||||
|
||||
return 0;
|
||||
|
@ -2227,7 +2227,7 @@ find_mode:
|
||||
}
|
||||
|
||||
static int ov5640_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ov5640_dev *sensor = to_ov5640_dev(sd);
|
||||
@ -2239,7 +2239,7 @@ static int ov5640_get_fmt(struct v4l2_subdev *sd,
|
||||
mutex_lock(&sensor->lock);
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
fmt = v4l2_subdev_get_try_format(&sensor->sd, cfg,
|
||||
fmt = v4l2_subdev_get_try_format(&sensor->sd, sd_state,
|
||||
format->pad);
|
||||
else
|
||||
fmt = &sensor->fmt;
|
||||
@ -2285,7 +2285,7 @@ static int ov5640_try_fmt_internal(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov5640_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ov5640_dev *sensor = to_ov5640_dev(sd);
|
||||
@ -2310,7 +2310,7 @@ static int ov5640_set_fmt(struct v4l2_subdev *sd,
|
||||
goto out;
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
fmt = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
fmt = v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
else
|
||||
fmt = &sensor->fmt;
|
||||
|
||||
@ -2818,7 +2818,7 @@ free_ctrls:
|
||||
}
|
||||
|
||||
static int ov5640_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->pad != 0)
|
||||
@ -2838,7 +2838,7 @@ static int ov5640_enum_frame_size(struct v4l2_subdev *sd,
|
||||
|
||||
static int ov5640_enum_frame_interval(
|
||||
struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_interval_enum *fie)
|
||||
{
|
||||
struct ov5640_dev *sensor = to_ov5640_dev(sd);
|
||||
@ -2924,7 +2924,7 @@ out:
|
||||
}
|
||||
|
||||
static int ov5640_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad != 0)
|
||||
|
@ -837,7 +837,7 @@ static const struct v4l2_ctrl_ops ov5645_ctrl_ops = {
|
||||
};
|
||||
|
||||
static int ov5645_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index > 0)
|
||||
@ -849,7 +849,7 @@ static int ov5645_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov5645_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->code != MEDIA_BUS_FMT_UYVY8_2X8)
|
||||
@ -868,13 +868,13 @@ static int ov5645_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__ov5645_get_pad_format(struct ov5645 *ov5645,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_format(&ov5645->sd, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(&ov5645->sd, sd_state, pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &ov5645->fmt;
|
||||
default:
|
||||
@ -883,23 +883,25 @@ __ov5645_get_pad_format(struct ov5645 *ov5645,
|
||||
}
|
||||
|
||||
static int ov5645_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ov5645 *ov5645 = to_ov5645(sd);
|
||||
|
||||
format->format = *__ov5645_get_pad_format(ov5645, cfg, format->pad,
|
||||
format->format = *__ov5645_get_pad_format(ov5645, sd_state,
|
||||
format->pad,
|
||||
format->which);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct v4l2_rect *
|
||||
__ov5645_get_pad_crop(struct ov5645 *ov5645, struct v4l2_subdev_pad_config *cfg,
|
||||
__ov5645_get_pad_crop(struct ov5645 *ov5645,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_crop(&ov5645->sd, cfg, pad);
|
||||
return v4l2_subdev_get_try_crop(&ov5645->sd, sd_state, pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &ov5645->crop;
|
||||
default:
|
||||
@ -908,7 +910,7 @@ __ov5645_get_pad_crop(struct ov5645 *ov5645, struct v4l2_subdev_pad_config *cfg,
|
||||
}
|
||||
|
||||
static int ov5645_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ov5645 *ov5645 = to_ov5645(sd);
|
||||
@ -917,8 +919,8 @@ static int ov5645_set_format(struct v4l2_subdev *sd,
|
||||
const struct ov5645_mode_info *new_mode;
|
||||
int ret;
|
||||
|
||||
__crop = __ov5645_get_pad_crop(ov5645, cfg, format->pad,
|
||||
format->which);
|
||||
__crop = __ov5645_get_pad_crop(ov5645, sd_state, format->pad,
|
||||
format->which);
|
||||
|
||||
new_mode = v4l2_find_nearest_size(ov5645_mode_info_data,
|
||||
ARRAY_SIZE(ov5645_mode_info_data),
|
||||
@ -942,8 +944,8 @@ static int ov5645_set_format(struct v4l2_subdev *sd,
|
||||
ov5645->current_mode = new_mode;
|
||||
}
|
||||
|
||||
__format = __ov5645_get_pad_format(ov5645, cfg, format->pad,
|
||||
format->which);
|
||||
__format = __ov5645_get_pad_format(ov5645, sd_state, format->pad,
|
||||
format->which);
|
||||
__format->width = __crop->width;
|
||||
__format->height = __crop->height;
|
||||
__format->code = MEDIA_BUS_FMT_UYVY8_2X8;
|
||||
@ -956,21 +958,21 @@ static int ov5645_set_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov5645_entity_init_cfg(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg)
|
||||
struct v4l2_subdev_state *sd_state)
|
||||
{
|
||||
struct v4l2_subdev_format fmt = { 0 };
|
||||
|
||||
fmt.which = cfg ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE;
|
||||
fmt.which = sd_state ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE;
|
||||
fmt.format.width = 1920;
|
||||
fmt.format.height = 1080;
|
||||
|
||||
ov5645_set_format(subdev, cfg, &fmt);
|
||||
ov5645_set_format(subdev, sd_state, &fmt);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ov5645_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct ov5645 *ov5645 = to_ov5645(sd);
|
||||
@ -978,7 +980,7 @@ static int ov5645_get_selection(struct v4l2_subdev *sd,
|
||||
if (sel->target != V4L2_SEL_TGT_CROP)
|
||||
return -EINVAL;
|
||||
|
||||
sel->r = *__ov5645_get_pad_crop(ov5645, cfg, sel->pad,
|
||||
sel->r = *__ov5645_get_pad_crop(ov5645, sd_state, sel->pad,
|
||||
sel->which);
|
||||
return 0;
|
||||
}
|
||||
|
@ -856,12 +856,13 @@ static const struct v4l2_subdev_core_ops ov5647_subdev_core_ops = {
|
||||
};
|
||||
|
||||
static const struct v4l2_rect *
|
||||
__ov5647_get_pad_crop(struct ov5647 *ov5647, struct v4l2_subdev_pad_config *cfg,
|
||||
__ov5647_get_pad_crop(struct ov5647 *ov5647,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_crop(&ov5647->sd, cfg, pad);
|
||||
return v4l2_subdev_get_try_crop(&ov5647->sd, sd_state, pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &ov5647->mode->crop;
|
||||
}
|
||||
@ -918,7 +919,7 @@ static const struct v4l2_subdev_video_ops ov5647_subdev_video_ops = {
|
||||
};
|
||||
|
||||
static int ov5647_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index > 0)
|
||||
@ -930,7 +931,7 @@ static int ov5647_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov5647_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
const struct v4l2_mbus_framefmt *fmt;
|
||||
@ -949,7 +950,7 @@ static int ov5647_enum_frame_size(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov5647_get_pad_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *fmt = &format->format;
|
||||
@ -959,7 +960,8 @@ static int ov5647_get_pad_fmt(struct v4l2_subdev *sd,
|
||||
mutex_lock(&sensor->lock);
|
||||
switch (format->which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
sensor_format = v4l2_subdev_get_try_format(sd, cfg, format->pad);
|
||||
sensor_format = v4l2_subdev_get_try_format(sd, sd_state,
|
||||
format->pad);
|
||||
break;
|
||||
default:
|
||||
sensor_format = &sensor->mode->format;
|
||||
@ -973,7 +975,7 @@ static int ov5647_get_pad_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov5647_set_pad_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *fmt = &format->format;
|
||||
@ -987,7 +989,7 @@ static int ov5647_set_pad_fmt(struct v4l2_subdev *sd,
|
||||
/* Update the sensor mode and apply at it at streamon time. */
|
||||
mutex_lock(&sensor->lock);
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
*v4l2_subdev_get_try_format(sd, cfg, format->pad) = mode->format;
|
||||
*v4l2_subdev_get_try_format(sd, sd_state, format->pad) = mode->format;
|
||||
} else {
|
||||
int exposure_max, exposure_def;
|
||||
int hblank, vblank;
|
||||
@ -1020,7 +1022,7 @@ static int ov5647_set_pad_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov5647_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
switch (sel->target) {
|
||||
@ -1028,7 +1030,7 @@ static int ov5647_get_selection(struct v4l2_subdev *sd,
|
||||
struct ov5647 *sensor = to_sensor(sd);
|
||||
|
||||
mutex_lock(&sensor->lock);
|
||||
sel->r = *__ov5647_get_pad_crop(sensor, cfg, sel->pad,
|
||||
sel->r = *__ov5647_get_pad_crop(sensor, sd_state, sel->pad,
|
||||
sel->which);
|
||||
mutex_unlock(&sensor->lock);
|
||||
|
||||
@ -1104,8 +1106,8 @@ static int ov5647_detect(struct v4l2_subdev *sd)
|
||||
static int ov5647_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
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);
|
||||
v4l2_subdev_get_try_format(sd, fh->state, 0);
|
||||
struct v4l2_rect *crop = v4l2_subdev_get_try_crop(sd, fh->state, 0);
|
||||
|
||||
crop->left = OV5647_PIXEL_ARRAY_LEFT;
|
||||
crop->top = OV5647_PIXEL_ARRAY_TOP;
|
||||
|
@ -2188,7 +2188,7 @@ static const struct v4l2_subdev_video_ops ov5648_subdev_video_ops = {
|
||||
/* Subdev Pad Operations */
|
||||
|
||||
static int ov5648_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *config,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code_enum)
|
||||
{
|
||||
if (code_enum->index >= ARRAY_SIZE(ov5648_mbus_codes))
|
||||
@ -2217,7 +2217,7 @@ static void ov5648_mbus_format_fill(struct v4l2_mbus_framefmt *mbus_format,
|
||||
}
|
||||
|
||||
static int ov5648_get_fmt(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *config,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ov5648_sensor *sensor = ov5648_subdev_sensor(subdev);
|
||||
@ -2226,7 +2226,7 @@ static int ov5648_get_fmt(struct v4l2_subdev *subdev,
|
||||
mutex_lock(&sensor->mutex);
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
*mbus_format = *v4l2_subdev_get_try_format(subdev, config,
|
||||
*mbus_format = *v4l2_subdev_get_try_format(subdev, sd_state,
|
||||
format->pad);
|
||||
else
|
||||
ov5648_mbus_format_fill(mbus_format, sensor->state.mbus_code,
|
||||
@ -2238,7 +2238,7 @@ static int ov5648_get_fmt(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int ov5648_set_fmt(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *config,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ov5648_sensor *sensor = ov5648_subdev_sensor(subdev);
|
||||
@ -2279,7 +2279,7 @@ static int ov5648_set_fmt(struct v4l2_subdev *subdev,
|
||||
ov5648_mbus_format_fill(mbus_format, mbus_code, mode);
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
*v4l2_subdev_get_try_format(subdev, config, format->pad) =
|
||||
*v4l2_subdev_get_try_format(subdev, sd_state, format->pad) =
|
||||
*mbus_format;
|
||||
else if (sensor->state.mode != mode ||
|
||||
sensor->state.mbus_code != mbus_code)
|
||||
@ -2292,7 +2292,7 @@ complete:
|
||||
}
|
||||
|
||||
static int ov5648_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *config,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *size_enum)
|
||||
{
|
||||
const struct ov5648_mode *mode;
|
||||
@ -2309,7 +2309,7 @@ static int ov5648_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int ov5648_enum_frame_interval(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *config,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_interval_enum *interval_enum)
|
||||
{
|
||||
const struct ov5648_mode *mode = NULL;
|
||||
|
@ -1937,7 +1937,7 @@ static int ov5670_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct ov5670 *ov5670 = to_ov5670(sd);
|
||||
struct v4l2_mbus_framefmt *try_fmt =
|
||||
v4l2_subdev_get_try_format(sd, fh->pad, 0);
|
||||
v4l2_subdev_get_try_format(sd, fh->state, 0);
|
||||
|
||||
mutex_lock(&ov5670->mutex);
|
||||
|
||||
@ -2153,7 +2153,7 @@ error:
|
||||
}
|
||||
|
||||
static int ov5670_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
/* Only one bayer order GRBG is supported */
|
||||
@ -2166,7 +2166,7 @@ static int ov5670_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov5670_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->index >= ARRAY_SIZE(supported_modes))
|
||||
@ -2193,11 +2193,12 @@ static void ov5670_update_pad_format(const struct ov5670_mode *mode,
|
||||
}
|
||||
|
||||
static int ov5670_do_get_pad_format(struct ov5670 *ov5670,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
fmt->format = *v4l2_subdev_get_try_format(&ov5670->sd, cfg,
|
||||
fmt->format = *v4l2_subdev_get_try_format(&ov5670->sd,
|
||||
sd_state,
|
||||
fmt->pad);
|
||||
else
|
||||
ov5670_update_pad_format(ov5670->cur_mode, fmt);
|
||||
@ -2206,21 +2207,21 @@ static int ov5670_do_get_pad_format(struct ov5670 *ov5670,
|
||||
}
|
||||
|
||||
static int ov5670_get_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov5670 *ov5670 = to_ov5670(sd);
|
||||
int ret;
|
||||
|
||||
mutex_lock(&ov5670->mutex);
|
||||
ret = ov5670_do_get_pad_format(ov5670, cfg, fmt);
|
||||
ret = ov5670_do_get_pad_format(ov5670, sd_state, fmt);
|
||||
mutex_unlock(&ov5670->mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ov5670_set_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov5670 *ov5670 = to_ov5670(sd);
|
||||
@ -2238,7 +2239,7 @@ static int ov5670_set_pad_format(struct v4l2_subdev *sd,
|
||||
fmt->format.width, fmt->format.height);
|
||||
ov5670_update_pad_format(mode, fmt);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
*v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format;
|
||||
*v4l2_subdev_get_try_format(sd, sd_state, fmt->pad) = fmt->format;
|
||||
} else {
|
||||
ov5670->cur_mode = mode;
|
||||
__v4l2_ctrl_s_ctrl(ov5670->link_freq, mode->link_freq_index);
|
||||
|
@ -923,7 +923,7 @@ static int __maybe_unused ov5675_resume(struct device *dev)
|
||||
}
|
||||
|
||||
static int ov5675_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov5675 *ov5675 = to_ov5675(sd);
|
||||
@ -938,7 +938,7 @@ static int ov5675_set_format(struct v4l2_subdev *sd,
|
||||
mutex_lock(&ov5675->mutex);
|
||||
ov5675_update_pad_format(mode, &fmt->format);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
*v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format;
|
||||
*v4l2_subdev_get_try_format(sd, sd_state, fmt->pad) = fmt->format;
|
||||
} else {
|
||||
ov5675->cur_mode = mode;
|
||||
__v4l2_ctrl_s_ctrl(ov5675->link_freq, mode->link_freq_index);
|
||||
@ -964,14 +964,15 @@ static int ov5675_set_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov5675_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov5675 *ov5675 = to_ov5675(sd);
|
||||
|
||||
mutex_lock(&ov5675->mutex);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
fmt->format = *v4l2_subdev_get_try_format(&ov5675->sd, cfg,
|
||||
fmt->format = *v4l2_subdev_get_try_format(&ov5675->sd,
|
||||
sd_state,
|
||||
fmt->pad);
|
||||
else
|
||||
ov5675_update_pad_format(ov5675->cur_mode, &fmt->format);
|
||||
@ -982,7 +983,7 @@ static int ov5675_get_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov5675_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index > 0)
|
||||
@ -994,7 +995,7 @@ static int ov5675_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov5675_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->index >= ARRAY_SIZE(supported_modes))
|
||||
@ -1017,7 +1018,7 @@ static int ov5675_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
|
||||
mutex_lock(&ov5675->mutex);
|
||||
ov5675_update_pad_format(&supported_modes[0],
|
||||
v4l2_subdev_get_try_format(sd, fh->pad, 0));
|
||||
v4l2_subdev_get_try_format(sd, fh->state, 0));
|
||||
mutex_unlock(&ov5675->mutex);
|
||||
|
||||
return 0;
|
||||
|
@ -806,7 +806,7 @@ ov5695_find_best_fit(struct v4l2_subdev_format *fmt)
|
||||
}
|
||||
|
||||
static int ov5695_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov5695 *ov5695 = to_ov5695(sd);
|
||||
@ -822,7 +822,7 @@ static int ov5695_set_fmt(struct v4l2_subdev *sd,
|
||||
fmt->format.field = V4L2_FIELD_NONE;
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
|
||||
*v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format;
|
||||
*v4l2_subdev_get_try_format(sd, sd_state, fmt->pad) = fmt->format;
|
||||
#endif
|
||||
} else {
|
||||
ov5695->cur_mode = mode;
|
||||
@ -841,7 +841,7 @@ static int ov5695_set_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov5695_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov5695 *ov5695 = to_ov5695(sd);
|
||||
@ -850,7 +850,8 @@ static int ov5695_get_fmt(struct v4l2_subdev *sd,
|
||||
mutex_lock(&ov5695->mutex);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
|
||||
fmt->format = *v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
fmt->format = *v4l2_subdev_get_try_format(sd, sd_state,
|
||||
fmt->pad);
|
||||
#else
|
||||
mutex_unlock(&ov5695->mutex);
|
||||
return -EINVAL;
|
||||
@ -867,7 +868,7 @@ static int ov5695_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov5695_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index != 0)
|
||||
@ -878,7 +879,7 @@ static int ov5695_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov5695_enum_frame_sizes(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->index >= ARRAY_SIZE(supported_modes))
|
||||
@ -1052,7 +1053,7 @@ static int ov5695_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct ov5695 *ov5695 = to_ov5695(sd);
|
||||
struct v4l2_mbus_framefmt *try_fmt =
|
||||
v4l2_subdev_get_try_format(sd, fh->pad, 0);
|
||||
v4l2_subdev_get_try_format(sd, fh->state, 0);
|
||||
const struct ov5695_mode *def_mode = &supported_modes[0];
|
||||
|
||||
mutex_lock(&ov5695->mutex);
|
||||
|
@ -467,7 +467,7 @@ static int ov6650_s_power(struct v4l2_subdev *sd, int on)
|
||||
}
|
||||
|
||||
static int ov6650_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
@ -492,7 +492,7 @@ static int ov6650_get_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov6650_set_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
@ -535,7 +535,7 @@ static int ov6650_set_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov6650_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
@ -550,9 +550,9 @@ static int ov6650_get_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
/* update media bus format code and frame size */
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mf->width = cfg->try_fmt.width;
|
||||
mf->height = cfg->try_fmt.height;
|
||||
mf->code = cfg->try_fmt.code;
|
||||
mf->width = sd_state->pads->try_fmt.width;
|
||||
mf->height = sd_state->pads->try_fmt.height;
|
||||
mf->code = sd_state->pads->try_fmt.code;
|
||||
|
||||
} else {
|
||||
mf->width = priv->rect.width >> priv->half_scale;
|
||||
@ -668,7 +668,7 @@ static int ov6650_s_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf)
|
||||
}
|
||||
|
||||
static int ov6650_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
@ -701,15 +701,15 @@ static int ov6650_set_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
/* store media bus format code and frame size in pad config */
|
||||
cfg->try_fmt.width = mf->width;
|
||||
cfg->try_fmt.height = mf->height;
|
||||
cfg->try_fmt.code = mf->code;
|
||||
sd_state->pads->try_fmt.width = mf->width;
|
||||
sd_state->pads->try_fmt.height = mf->height;
|
||||
sd_state->pads->try_fmt.code = mf->code;
|
||||
|
||||
/* return default mbus frame format updated with pad config */
|
||||
*mf = ov6650_def_fmt;
|
||||
mf->width = cfg->try_fmt.width;
|
||||
mf->height = cfg->try_fmt.height;
|
||||
mf->code = cfg->try_fmt.code;
|
||||
mf->width = sd_state->pads->try_fmt.width;
|
||||
mf->height = sd_state->pads->try_fmt.height;
|
||||
mf->code = sd_state->pads->try_fmt.code;
|
||||
|
||||
} else {
|
||||
/* apply new media bus format code and frame size */
|
||||
@ -728,7 +728,7 @@ static int ov6650_set_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov6650_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index >= ARRAY_SIZE(ov6650_codes))
|
||||
|
@ -898,7 +898,7 @@ static const struct v4l2_ctrl_ops ov7251_ctrl_ops = {
|
||||
};
|
||||
|
||||
static int ov7251_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index > 0)
|
||||
@ -910,7 +910,7 @@ static int ov7251_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov7251_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->code != MEDIA_BUS_FMT_Y10_1X10)
|
||||
@ -928,7 +928,7 @@ static int ov7251_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int ov7251_enum_frame_ival(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_interval_enum *fie)
|
||||
{
|
||||
unsigned int index = fie->index;
|
||||
@ -950,13 +950,13 @@ static int ov7251_enum_frame_ival(struct v4l2_subdev *subdev,
|
||||
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__ov7251_get_pad_format(struct ov7251 *ov7251,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_format(&ov7251->sd, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(&ov7251->sd, sd_state, pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &ov7251->fmt;
|
||||
default:
|
||||
@ -965,13 +965,14 @@ __ov7251_get_pad_format(struct ov7251 *ov7251,
|
||||
}
|
||||
|
||||
static int ov7251_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ov7251 *ov7251 = to_ov7251(sd);
|
||||
|
||||
mutex_lock(&ov7251->lock);
|
||||
format->format = *__ov7251_get_pad_format(ov7251, cfg, format->pad,
|
||||
format->format = *__ov7251_get_pad_format(ov7251, sd_state,
|
||||
format->pad,
|
||||
format->which);
|
||||
mutex_unlock(&ov7251->lock);
|
||||
|
||||
@ -979,12 +980,13 @@ static int ov7251_get_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static struct v4l2_rect *
|
||||
__ov7251_get_pad_crop(struct ov7251 *ov7251, struct v4l2_subdev_pad_config *cfg,
|
||||
__ov7251_get_pad_crop(struct ov7251 *ov7251,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
return v4l2_subdev_get_try_crop(&ov7251->sd, cfg, pad);
|
||||
return v4l2_subdev_get_try_crop(&ov7251->sd, sd_state, pad);
|
||||
case V4L2_SUBDEV_FORMAT_ACTIVE:
|
||||
return &ov7251->crop;
|
||||
default:
|
||||
@ -1027,7 +1029,7 @@ ov7251_find_mode_by_ival(struct ov7251 *ov7251, struct v4l2_fract *timeperframe)
|
||||
}
|
||||
|
||||
static int ov7251_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ov7251 *ov7251 = to_ov7251(sd);
|
||||
@ -1038,7 +1040,8 @@ static int ov7251_set_format(struct v4l2_subdev *sd,
|
||||
|
||||
mutex_lock(&ov7251->lock);
|
||||
|
||||
__crop = __ov7251_get_pad_crop(ov7251, cfg, format->pad, format->which);
|
||||
__crop = __ov7251_get_pad_crop(ov7251, sd_state, format->pad,
|
||||
format->which);
|
||||
|
||||
new_mode = v4l2_find_nearest_size(ov7251_mode_info_data,
|
||||
ARRAY_SIZE(ov7251_mode_info_data),
|
||||
@ -1077,7 +1080,7 @@ static int ov7251_set_format(struct v4l2_subdev *sd,
|
||||
ov7251->current_mode = new_mode;
|
||||
}
|
||||
|
||||
__format = __ov7251_get_pad_format(ov7251, cfg, format->pad,
|
||||
__format = __ov7251_get_pad_format(ov7251, sd_state, format->pad,
|
||||
format->which);
|
||||
__format->width = __crop->width;
|
||||
__format->height = __crop->height;
|
||||
@ -1098,24 +1101,24 @@ exit:
|
||||
}
|
||||
|
||||
static int ov7251_entity_init_cfg(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg)
|
||||
struct v4l2_subdev_state *sd_state)
|
||||
{
|
||||
struct v4l2_subdev_format fmt = {
|
||||
.which = cfg ? V4L2_SUBDEV_FORMAT_TRY
|
||||
: V4L2_SUBDEV_FORMAT_ACTIVE,
|
||||
.which = sd_state ? V4L2_SUBDEV_FORMAT_TRY
|
||||
: V4L2_SUBDEV_FORMAT_ACTIVE,
|
||||
.format = {
|
||||
.width = 640,
|
||||
.height = 480
|
||||
}
|
||||
};
|
||||
|
||||
ov7251_set_format(subdev, cfg, &fmt);
|
||||
ov7251_set_format(subdev, sd_state, &fmt);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ov7251_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct ov7251 *ov7251 = to_ov7251(sd);
|
||||
@ -1124,7 +1127,7 @@ static int ov7251_get_selection(struct v4l2_subdev *sd,
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&ov7251->lock);
|
||||
sel->r = *__ov7251_get_pad_crop(ov7251, cfg, sel->pad,
|
||||
sel->r = *__ov7251_get_pad_crop(ov7251, sd_state, sel->pad,
|
||||
sel->which);
|
||||
mutex_unlock(&ov7251->lock);
|
||||
|
||||
|
@ -960,7 +960,7 @@ static int ov7670_set_hw(struct v4l2_subdev *sd, int hstart, int hstop,
|
||||
|
||||
|
||||
static int ov7670_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index >= N_OV7670_FMTS)
|
||||
@ -1105,7 +1105,7 @@ static int ov7670_apply_fmt(struct v4l2_subdev *sd)
|
||||
* Set a format.
|
||||
*/
|
||||
static int ov7670_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ov7670_info *info = to_state(sd);
|
||||
@ -1122,7 +1122,8 @@ static int ov7670_set_fmt(struct v4l2_subdev *sd,
|
||||
if (ret)
|
||||
return ret;
|
||||
#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
|
||||
mbus_fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
|
||||
mbus_fmt = v4l2_subdev_get_try_format(sd, sd_state,
|
||||
format->pad);
|
||||
*mbus_fmt = format->format;
|
||||
#endif
|
||||
return 0;
|
||||
@ -1144,7 +1145,7 @@ static int ov7670_set_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov7670_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ov7670_info *info = to_state(sd);
|
||||
@ -1154,7 +1155,7 @@ static int ov7670_get_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
|
||||
mbus_fmt = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
mbus_fmt = v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
format->format = *mbus_fmt;
|
||||
return 0;
|
||||
#else
|
||||
@ -1202,7 +1203,7 @@ static int ov7670_s_frame_interval(struct v4l2_subdev *sd,
|
||||
static int ov7670_frame_rates[] = { 30, 15, 10, 5, 1 };
|
||||
|
||||
static int ov7670_enum_frame_interval(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_interval_enum *fie)
|
||||
{
|
||||
struct ov7670_info *info = to_state(sd);
|
||||
@ -1241,7 +1242,7 @@ static int ov7670_enum_frame_interval(struct v4l2_subdev *sd,
|
||||
* Frame size enumeration
|
||||
*/
|
||||
static int ov7670_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct ov7670_info *info = to_state(sd);
|
||||
@ -1724,7 +1725,7 @@ static void ov7670_get_default_format(struct v4l2_subdev *sd,
|
||||
static int ov7670_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *format =
|
||||
v4l2_subdev_get_try_format(sd, fh->pad, 0);
|
||||
v4l2_subdev_get_try_format(sd, fh->state, 0);
|
||||
|
||||
ov7670_get_default_format(sd, format);
|
||||
|
||||
|
@ -1157,7 +1157,7 @@ ov772x_set_fmt_error:
|
||||
}
|
||||
|
||||
static int ov772x_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct ov772x_priv *priv = to_ov772x(sd);
|
||||
@ -1179,7 +1179,7 @@ static int ov772x_get_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov772x_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
@ -1198,7 +1198,7 @@ static int ov772x_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov772x_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ov772x_priv *priv = to_ov772x(sd);
|
||||
@ -1222,7 +1222,7 @@ static int ov772x_set_fmt(struct v4l2_subdev *sd,
|
||||
mf->xfer_func = V4L2_XFER_FUNC_DEFAULT;
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
cfg->try_fmt = *mf;
|
||||
sd_state->pads->try_fmt = *mf;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1320,7 +1320,7 @@ static const struct v4l2_subdev_core_ops ov772x_subdev_core_ops = {
|
||||
};
|
||||
|
||||
static int ov772x_enum_frame_interval(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_interval_enum *fie)
|
||||
{
|
||||
if (fie->pad || fie->index >= ARRAY_SIZE(ov772x_frame_intervals))
|
||||
@ -1338,7 +1338,7 @@ static int ov772x_enum_frame_interval(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov772x_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index >= ARRAY_SIZE(ov772x_cfmts))
|
||||
|
@ -707,7 +707,7 @@ static const struct ov7740_pixfmt ov7740_formats[] = {
|
||||
#define N_OV7740_FMTS ARRAY_SIZE(ov7740_formats)
|
||||
|
||||
static int ov7740_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index >= N_OV7740_FMTS)
|
||||
@ -719,7 +719,7 @@ static int ov7740_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov7740_enum_frame_interval(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_interval_enum *fie)
|
||||
{
|
||||
if (fie->pad)
|
||||
@ -738,7 +738,7 @@ static int ov7740_enum_frame_interval(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov7740_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->pad)
|
||||
@ -801,7 +801,7 @@ static int ov7740_try_fmt_internal(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov7740_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ov7740 *ov7740 = container_of(sd, struct ov7740, subdev);
|
||||
@ -823,7 +823,8 @@ static int ov7740_set_fmt(struct v4l2_subdev *sd,
|
||||
if (ret)
|
||||
goto error;
|
||||
#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
|
||||
mbus_fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
|
||||
mbus_fmt = v4l2_subdev_get_try_format(sd, sd_state,
|
||||
format->pad);
|
||||
*mbus_fmt = format->format;
|
||||
#endif
|
||||
mutex_unlock(&ov7740->mutex);
|
||||
@ -846,7 +847,7 @@ error:
|
||||
}
|
||||
|
||||
static int ov7740_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ov7740 *ov7740 = container_of(sd, struct ov7740, subdev);
|
||||
@ -858,7 +859,7 @@ static int ov7740_get_fmt(struct v4l2_subdev *sd,
|
||||
mutex_lock(&ov7740->mutex);
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
#ifdef CONFIG_VIDEO_V4L2_SUBDEV_API
|
||||
mbus_fmt = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
mbus_fmt = v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
format->format = *mbus_fmt;
|
||||
ret = 0;
|
||||
#else
|
||||
@ -903,7 +904,7 @@ static int ov7740_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
{
|
||||
struct ov7740 *ov7740 = container_of(sd, struct ov7740, subdev);
|
||||
struct v4l2_mbus_framefmt *format =
|
||||
v4l2_subdev_get_try_format(sd, fh->pad, 0);
|
||||
v4l2_subdev_get_try_format(sd, fh->state, 0);
|
||||
|
||||
mutex_lock(&ov7740->mutex);
|
||||
ov7740_get_default_format(sd, format);
|
||||
|
@ -2083,7 +2083,7 @@ static int __maybe_unused ov8856_resume(struct device *dev)
|
||||
}
|
||||
|
||||
static int ov8856_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov8856 *ov8856 = to_ov8856(sd);
|
||||
@ -2098,7 +2098,7 @@ static int ov8856_set_format(struct v4l2_subdev *sd,
|
||||
mutex_lock(&ov8856->mutex);
|
||||
ov8856_update_pad_format(mode, &fmt->format);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
*v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format;
|
||||
*v4l2_subdev_get_try_format(sd, sd_state, fmt->pad) = fmt->format;
|
||||
} else {
|
||||
ov8856->cur_mode = mode;
|
||||
__v4l2_ctrl_s_ctrl(ov8856->link_freq, mode->link_freq_index);
|
||||
@ -2129,14 +2129,15 @@ static int ov8856_set_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov8856_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov8856 *ov8856 = to_ov8856(sd);
|
||||
|
||||
mutex_lock(&ov8856->mutex);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
fmt->format = *v4l2_subdev_get_try_format(&ov8856->sd, cfg,
|
||||
fmt->format = *v4l2_subdev_get_try_format(&ov8856->sd,
|
||||
sd_state,
|
||||
fmt->pad);
|
||||
else
|
||||
ov8856_update_pad_format(ov8856->cur_mode, &fmt->format);
|
||||
@ -2147,7 +2148,7 @@ static int ov8856_get_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov8856_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
/* Only one bayer order GRBG is supported */
|
||||
@ -2160,7 +2161,7 @@ static int ov8856_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov8856_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct ov8856 *ov8856 = to_ov8856(sd);
|
||||
@ -2185,7 +2186,7 @@ static int ov8856_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
|
||||
mutex_lock(&ov8856->mutex);
|
||||
ov8856_update_pad_format(&ov8856->priv_lane->supported_modes[0],
|
||||
v4l2_subdev_get_try_format(sd, fh->pad, 0));
|
||||
v4l2_subdev_get_try_format(sd, fh->state, 0));
|
||||
mutex_unlock(&ov8856->mutex);
|
||||
|
||||
return 0;
|
||||
|
@ -2542,7 +2542,7 @@ static const struct v4l2_subdev_video_ops ov8865_subdev_video_ops = {
|
||||
/* Subdev Pad Operations */
|
||||
|
||||
static int ov8865_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *config,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code_enum)
|
||||
{
|
||||
if (code_enum->index >= ARRAY_SIZE(ov8865_mbus_codes))
|
||||
@ -2571,7 +2571,7 @@ static void ov8865_mbus_format_fill(struct v4l2_mbus_framefmt *mbus_format,
|
||||
}
|
||||
|
||||
static int ov8865_get_fmt(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *config,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ov8865_sensor *sensor = ov8865_subdev_sensor(subdev);
|
||||
@ -2580,7 +2580,7 @@ static int ov8865_get_fmt(struct v4l2_subdev *subdev,
|
||||
mutex_lock(&sensor->mutex);
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
*mbus_format = *v4l2_subdev_get_try_format(subdev, config,
|
||||
*mbus_format = *v4l2_subdev_get_try_format(subdev, sd_state,
|
||||
format->pad);
|
||||
else
|
||||
ov8865_mbus_format_fill(mbus_format, sensor->state.mbus_code,
|
||||
@ -2592,7 +2592,7 @@ static int ov8865_get_fmt(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int ov8865_set_fmt(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *config,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct ov8865_sensor *sensor = ov8865_subdev_sensor(subdev);
|
||||
@ -2633,7 +2633,7 @@ static int ov8865_set_fmt(struct v4l2_subdev *subdev,
|
||||
ov8865_mbus_format_fill(mbus_format, mbus_code, mode);
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
*v4l2_subdev_get_try_format(subdev, config, format->pad) =
|
||||
*v4l2_subdev_get_try_format(subdev, sd_state, format->pad) =
|
||||
*mbus_format;
|
||||
else if (sensor->state.mode != mode ||
|
||||
sensor->state.mbus_code != mbus_code)
|
||||
@ -2646,7 +2646,7 @@ complete:
|
||||
}
|
||||
|
||||
static int ov8865_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *config,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *size_enum)
|
||||
{
|
||||
const struct ov8865_mode *mode;
|
||||
@ -2663,7 +2663,7 @@ static int ov8865_enum_frame_size(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int ov8865_enum_frame_interval(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *config,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_interval_enum *interval_enum)
|
||||
{
|
||||
const struct ov8865_mode *mode = NULL;
|
||||
|
@ -519,7 +519,7 @@ static int ov9640_s_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov9640_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
@ -547,13 +547,13 @@ static int ov9640_set_fmt(struct v4l2_subdev *sd,
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_ACTIVE)
|
||||
return ov9640_s_fmt(sd, mf);
|
||||
|
||||
cfg->try_fmt = *mf;
|
||||
sd_state->pads->try_fmt = *mf;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ov9640_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index >= ARRAY_SIZE(ov9640_codes))
|
||||
@ -565,7 +565,7 @@ static int ov9640_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov9640_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
if (sel->which != V4L2_SUBDEV_FORMAT_ACTIVE)
|
||||
|
@ -1070,7 +1070,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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index >= ARRAY_SIZE(ov965x_formats))
|
||||
@ -1081,7 +1081,7 @@ static int ov965x_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov965x_enum_frame_sizes(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
int i = ARRAY_SIZE(ov965x_formats);
|
||||
@ -1167,14 +1167,14 @@ static int ov965x_s_frame_interval(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov965x_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
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(sd, cfg, 0);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
fmt->format = *mf;
|
||||
return 0;
|
||||
}
|
||||
@ -1212,7 +1212,7 @@ static void __ov965x_try_frame_size(struct v4l2_mbus_framefmt *mf,
|
||||
}
|
||||
|
||||
static int ov965x_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
unsigned int index = ARRAY_SIZE(ov965x_formats);
|
||||
@ -1234,8 +1234,9 @@ static int ov965x_set_fmt(struct v4l2_subdev *sd,
|
||||
mutex_lock(&ov965x->lock);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
if (cfg) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
if (sd_state) {
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state,
|
||||
fmt->pad);
|
||||
*mf = fmt->format;
|
||||
}
|
||||
} else {
|
||||
@ -1364,7 +1365,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(sd, fh->pad, 0);
|
||||
v4l2_subdev_get_try_format(sd, fh->state, 0);
|
||||
|
||||
ov965x_get_default_format(mf);
|
||||
return 0;
|
||||
|
@ -705,7 +705,7 @@ exit:
|
||||
}
|
||||
|
||||
static int ov9734_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov9734 *ov9734 = to_ov9734(sd);
|
||||
@ -720,7 +720,7 @@ static int ov9734_set_format(struct v4l2_subdev *sd,
|
||||
mutex_lock(&ov9734->mutex);
|
||||
ov9734_update_pad_format(mode, &fmt->format);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
*v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format;
|
||||
*v4l2_subdev_get_try_format(sd, sd_state, fmt->pad) = fmt->format;
|
||||
} else {
|
||||
ov9734->cur_mode = mode;
|
||||
__v4l2_ctrl_s_ctrl(ov9734->link_freq, mode->link_freq_index);
|
||||
@ -746,14 +746,15 @@ static int ov9734_set_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov9734_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct ov9734 *ov9734 = to_ov9734(sd);
|
||||
|
||||
mutex_lock(&ov9734->mutex);
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
fmt->format = *v4l2_subdev_get_try_format(&ov9734->sd, cfg,
|
||||
fmt->format = *v4l2_subdev_get_try_format(&ov9734->sd,
|
||||
sd_state,
|
||||
fmt->pad);
|
||||
else
|
||||
ov9734_update_pad_format(ov9734->cur_mode, &fmt->format);
|
||||
@ -764,7 +765,7 @@ static int ov9734_get_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov9734_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index > 0)
|
||||
@ -776,7 +777,7 @@ static int ov9734_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ov9734_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
if (fse->index >= ARRAY_SIZE(supported_modes))
|
||||
@ -799,7 +800,7 @@ static int ov9734_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
|
||||
mutex_lock(&ov9734->mutex);
|
||||
ov9734_update_pad_format(&supported_modes[0],
|
||||
v4l2_subdev_get_try_format(sd, fh->pad, 0));
|
||||
v4l2_subdev_get_try_format(sd, fh->state, 0));
|
||||
mutex_unlock(&ov9734->mutex);
|
||||
|
||||
return 0;
|
||||
|
@ -403,7 +403,7 @@ static int rdacm20_s_stream(struct v4l2_subdev *sd, int enable)
|
||||
}
|
||||
|
||||
static int rdacm20_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index > 0)
|
||||
@ -415,7 +415,7 @@ static int rdacm20_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int rdacm20_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
|
@ -281,7 +281,7 @@ static int rdacm21_s_stream(struct v4l2_subdev *sd, int enable)
|
||||
}
|
||||
|
||||
static int rdacm21_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index > 0)
|
||||
@ -293,7 +293,7 @@ static int rdacm21_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int rdacm21_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
|
@ -488,7 +488,7 @@ static int reg_write_multiple(struct i2c_client *client,
|
||||
}
|
||||
|
||||
static int rj54n1_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index >= ARRAY_SIZE(rj54n1_colour_fmts))
|
||||
@ -541,7 +541,7 @@ static int rj54n1_sensor_scale(struct v4l2_subdev *sd, s32 *in_w, s32 *in_h,
|
||||
s32 *out_w, s32 *out_h);
|
||||
|
||||
static int rj54n1_set_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
@ -578,7 +578,7 @@ static int rj54n1_set_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int rj54n1_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
@ -603,7 +603,7 @@ static int rj54n1_get_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int rj54n1_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
@ -973,7 +973,7 @@ static int rj54n1_reg_init(struct i2c_client *client)
|
||||
}
|
||||
|
||||
static int rj54n1_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
@ -1009,7 +1009,7 @@ static int rj54n1_set_fmt(struct v4l2_subdev *sd,
|
||||
&mf->height, 84, RJ54N1_MAX_HEIGHT, align, 0);
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
cfg->try_fmt = *mf;
|
||||
sd_state->pads->try_fmt = *mf;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -817,7 +817,7 @@ static const struct s5c73m3_frame_size *s5c73m3_find_frame_size(
|
||||
}
|
||||
|
||||
static void s5c73m3_oif_try_format(struct s5c73m3 *state,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt,
|
||||
const struct s5c73m3_frame_size **fs)
|
||||
{
|
||||
@ -844,8 +844,8 @@ 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(sd, cfg,
|
||||
OIF_ISP_PAD),
|
||||
v4l2_subdev_get_try_format(sd, sd_state,
|
||||
OIF_ISP_PAD),
|
||||
RES_ISP);
|
||||
break;
|
||||
}
|
||||
@ -854,7 +854,7 @@ static void s5c73m3_oif_try_format(struct s5c73m3 *state,
|
||||
}
|
||||
|
||||
static void s5c73m3_try_format(struct s5c73m3 *state,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt,
|
||||
const struct s5c73m3_frame_size **fs)
|
||||
{
|
||||
@ -946,7 +946,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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_interval_enum *fie)
|
||||
{
|
||||
struct s5c73m3 *state = oif_sd_to_s5c73m3(sd);
|
||||
@ -984,7 +984,7 @@ static int s5c73m3_oif_get_pad_code(int pad, int index)
|
||||
}
|
||||
|
||||
static int s5c73m3_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5c73m3 *state = sensor_sd_to_s5c73m3(sd);
|
||||
@ -992,7 +992,8 @@ 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(sd, cfg, fmt->pad);
|
||||
fmt->format = *v4l2_subdev_get_try_format(sd, sd_state,
|
||||
fmt->pad);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1018,7 +1019,7 @@ static int s5c73m3_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5c73m3_oif_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5c73m3 *state = oif_sd_to_s5c73m3(sd);
|
||||
@ -1026,7 +1027,8 @@ 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(sd, cfg, fmt->pad);
|
||||
fmt->format = *v4l2_subdev_get_try_format(sd, sd_state,
|
||||
fmt->pad);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1056,7 +1058,7 @@ static int s5c73m3_oif_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5c73m3_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
const struct s5c73m3_frame_size *frame_size = NULL;
|
||||
@ -1066,10 +1068,10 @@ static int s5c73m3_set_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
mutex_lock(&state->lock);
|
||||
|
||||
s5c73m3_try_format(state, cfg, fmt, &frame_size);
|
||||
s5c73m3_try_format(state, sd_state, fmt, &frame_size);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
*mf = fmt->format;
|
||||
} else {
|
||||
switch (fmt->pad) {
|
||||
@ -1095,7 +1097,7 @@ static int s5c73m3_set_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5c73m3_oif_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
const struct s5c73m3_frame_size *frame_size = NULL;
|
||||
@ -1105,13 +1107,14 @@ static int s5c73m3_oif_set_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
mutex_lock(&state->lock);
|
||||
|
||||
s5c73m3_oif_try_format(state, cfg, fmt, &frame_size);
|
||||
s5c73m3_oif_try_format(state, sd_state, fmt, &frame_size);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
*mf = fmt->format;
|
||||
if (fmt->pad == OIF_ISP_PAD) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, OIF_SOURCE_PAD);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state,
|
||||
OIF_SOURCE_PAD);
|
||||
mf->width = fmt->format.width;
|
||||
mf->height = fmt->format.height;
|
||||
}
|
||||
@ -1183,7 +1186,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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
static const int codes[] = {
|
||||
@ -1199,7 +1202,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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
int ret;
|
||||
@ -1214,7 +1217,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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
int idx;
|
||||
@ -1241,7 +1244,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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct s5c73m3 *state = oif_sd_to_s5c73m3(sd);
|
||||
@ -1259,7 +1262,7 @@ static int s5c73m3_oif_enum_frame_size(struct v4l2_subdev *sd,
|
||||
if (fse->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg,
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state,
|
||||
OIF_ISP_PAD);
|
||||
|
||||
w = mf->width;
|
||||
@ -1315,11 +1318,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(sd, fh->pad, S5C73M3_ISP_PAD);
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->state, S5C73M3_ISP_PAD);
|
||||
s5c73m3_fill_mbus_fmt(mf, &s5c73m3_isp_resolutions[1],
|
||||
S5C73M3_ISP_FMT);
|
||||
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->pad, S5C73M3_JPEG_PAD);
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->state, S5C73M3_JPEG_PAD);
|
||||
s5c73m3_fill_mbus_fmt(mf, &s5c73m3_jpeg_resolutions[1],
|
||||
S5C73M3_JPEG_FMT);
|
||||
|
||||
@ -1330,15 +1333,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(sd, fh->pad, OIF_ISP_PAD);
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->state, OIF_ISP_PAD);
|
||||
s5c73m3_fill_mbus_fmt(mf, &s5c73m3_isp_resolutions[1],
|
||||
S5C73M3_ISP_FMT);
|
||||
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->pad, OIF_JPEG_PAD);
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->state, OIF_JPEG_PAD);
|
||||
s5c73m3_fill_mbus_fmt(mf, &s5c73m3_jpeg_resolutions[1],
|
||||
S5C73M3_JPEG_FMT);
|
||||
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->pad, OIF_SOURCE_PAD);
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->state, OIF_SOURCE_PAD);
|
||||
s5c73m3_fill_mbus_fmt(mf, &s5c73m3_isp_resolutions[1],
|
||||
S5C73M3_ISP_FMT);
|
||||
return 0;
|
||||
|
@ -525,7 +525,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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index >= ARRAY_SIZE(s5k4ecgx_formats))
|
||||
@ -535,15 +535,16 @@ static int s5k4ecgx_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int s5k4ecgx_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
static int s5k4ecgx_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5k4ecgx *priv = to_s5k4ecgx(sd);
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
if (cfg) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
if (sd_state) {
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
fmt->format = *mf;
|
||||
}
|
||||
return 0;
|
||||
@ -575,7 +576,8 @@ 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_pad_config *cfg,
|
||||
static int s5k4ecgx_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5k4ecgx *priv = to_s5k4ecgx(sd);
|
||||
@ -590,8 +592,8 @@ static int s5k4ecgx_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_confi
|
||||
fmt->format.field = V4L2_FIELD_NONE;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
if (cfg) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
if (sd_state) {
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
*mf = fmt->format;
|
||||
}
|
||||
return 0;
|
||||
@ -686,7 +688,9 @@ 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(sd, fh->pad, 0);
|
||||
struct v4l2_mbus_framefmt *mf = v4l2_subdev_get_try_format(sd,
|
||||
fh->state,
|
||||
0);
|
||||
|
||||
mf->width = s5k4ecgx_prev_sizes[0].size.width;
|
||||
mf->height = s5k4ecgx_prev_sizes[0].size.height;
|
||||
|
@ -1180,7 +1180,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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_interval_enum *fie)
|
||||
{
|
||||
if (fie->index > S5K5BAF_MAX_FR_TIME - S5K5BAF_MIN_FR_TIME ||
|
||||
@ -1199,7 +1199,7 @@ static int s5k5baf_enum_frame_interval(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5k5baf_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad == PAD_CIS) {
|
||||
@ -1217,7 +1217,7 @@ static int s5k5baf_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5k5baf_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
int i;
|
||||
@ -1274,15 +1274,16 @@ 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_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
static int s5k5baf_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5k5baf *state = to_s5k5baf(sd);
|
||||
const struct s5k5baf_pixfmt *pixfmt;
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
fmt->format = *mf;
|
||||
return 0;
|
||||
}
|
||||
@ -1304,8 +1305,9 @@ static int s5k5baf_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int s5k5baf_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
static int s5k5baf_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &fmt->format;
|
||||
struct s5k5baf *state = to_s5k5baf(sd);
|
||||
@ -1315,7 +1317,7 @@ static int s5k5baf_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config
|
||||
mf->field = V4L2_FIELD_NONE;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
*v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = *mf;
|
||||
*v4l2_subdev_get_try_format(sd, sd_state, fmt->pad) = *mf;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1367,7 +1369,7 @@ static int s5k5baf_is_bound_target(u32 target)
|
||||
}
|
||||
|
||||
static int s5k5baf_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
enum selection_rect rtype;
|
||||
@ -1387,9 +1389,11 @@ 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(sd, cfg, sel->pad);
|
||||
sel->r = *v4l2_subdev_get_try_compose(sd, sd_state,
|
||||
sel->pad);
|
||||
else
|
||||
sel->r = *v4l2_subdev_get_try_crop(sd, cfg, sel->pad);
|
||||
sel->r = *v4l2_subdev_get_try_crop(sd, sd_state,
|
||||
sel->pad);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1458,7 +1462,7 @@ static bool s5k5baf_cmp_rect(const struct v4l2_rect *r1,
|
||||
}
|
||||
|
||||
static int s5k5baf_set_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
static enum selection_rect rtype;
|
||||
@ -1479,9 +1483,12 @@ 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(sd, cfg, PAD_CIS),
|
||||
v4l2_subdev_get_try_compose(sd, cfg, PAD_CIS),
|
||||
v4l2_subdev_get_try_crop(sd, cfg, PAD_OUT)
|
||||
v4l2_subdev_get_try_crop(sd, sd_state,
|
||||
PAD_CIS),
|
||||
v4l2_subdev_get_try_compose(sd, sd_state,
|
||||
PAD_CIS),
|
||||
v4l2_subdev_get_try_crop(sd, sd_state,
|
||||
PAD_OUT)
|
||||
};
|
||||
s5k5baf_set_rect_and_adjust(rects, rtype, &sel->r);
|
||||
return 0;
|
||||
@ -1699,22 +1706,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(sd, fh->pad, PAD_CIS);
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->state, PAD_CIS);
|
||||
s5k5baf_try_cis_format(mf);
|
||||
|
||||
if (s5k5baf_is_cis_subdev(sd))
|
||||
return 0;
|
||||
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->pad, PAD_OUT);
|
||||
mf = v4l2_subdev_get_try_format(sd, fh->state, 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(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;
|
||||
*v4l2_subdev_get_try_crop(sd, fh->state, PAD_CIS) = s5k5baf_cis_rect;
|
||||
*v4l2_subdev_get_try_compose(sd, fh->state, PAD_CIS) = s5k5baf_cis_rect;
|
||||
*v4l2_subdev_get_try_crop(sd, fh->state, 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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index >= ARRAY_SIZE(s5k6a3_formats))
|
||||
@ -123,17 +123,18 @@ static void s5k6a3_try_format(struct v4l2_mbus_framefmt *mf)
|
||||
}
|
||||
|
||||
static struct v4l2_mbus_framefmt *__s5k6a3_get_format(
|
||||
struct s5k6a3 *sensor, struct v4l2_subdev_pad_config *cfg,
|
||||
struct s5k6a3 *sensor, struct v4l2_subdev_state *sd_state,
|
||||
u32 pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
if (which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return cfg ? v4l2_subdev_get_try_format(&sensor->subdev, cfg, pad) : NULL;
|
||||
return sd_state ? v4l2_subdev_get_try_format(&sensor->subdev,
|
||||
sd_state, pad) : NULL;
|
||||
|
||||
return &sensor->format;
|
||||
}
|
||||
|
||||
static int s5k6a3_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5k6a3 *sensor = sd_to_s5k6a3(sd);
|
||||
@ -141,7 +142,7 @@ static int s5k6a3_set_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
s5k6a3_try_format(&fmt->format);
|
||||
|
||||
mf = __s5k6a3_get_format(sensor, cfg, fmt->pad, fmt->which);
|
||||
mf = __s5k6a3_get_format(sensor, sd_state, fmt->pad, fmt->which);
|
||||
if (mf) {
|
||||
mutex_lock(&sensor->lock);
|
||||
*mf = fmt->format;
|
||||
@ -151,13 +152,13 @@ static int s5k6a3_set_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5k6a3_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5k6a3 *sensor = sd_to_s5k6a3(sd);
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
mf = __s5k6a3_get_format(sensor, cfg, fmt->pad, fmt->which);
|
||||
mf = __s5k6a3_get_format(sensor, sd_state, fmt->pad, fmt->which);
|
||||
|
||||
mutex_lock(&sensor->lock);
|
||||
fmt->format = *mf;
|
||||
@ -173,7 +174,9 @@ static const 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(sd, fh->pad, 0);
|
||||
struct v4l2_mbus_framefmt *format = v4l2_subdev_get_try_format(sd,
|
||||
fh->state,
|
||||
0);
|
||||
|
||||
*format = s5k6a3_formats[0];
|
||||
format->width = S5K6A3_DEFAULT_WIDTH;
|
||||
|
@ -997,7 +997,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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_interval_enum *fie)
|
||||
{
|
||||
struct s5k6aa *s5k6aa = to_s5k6aa(sd);
|
||||
@ -1024,7 +1024,7 @@ static int s5k6aa_enum_frame_interval(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5k6aa_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index >= ARRAY_SIZE(s5k6aa_formats))
|
||||
@ -1035,7 +1035,7 @@ static int s5k6aa_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5k6aa_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
int i = ARRAY_SIZE(s5k6aa_formats);
|
||||
@ -1057,14 +1057,15 @@ static int s5k6aa_enum_frame_size(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static struct v4l2_rect *
|
||||
__s5k6aa_get_crop_rect(struct s5k6aa *s5k6aa, struct v4l2_subdev_pad_config *cfg,
|
||||
__s5k6aa_get_crop_rect(struct s5k6aa *s5k6aa,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
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(&s5k6aa->sd, cfg, 0);
|
||||
return v4l2_subdev_get_try_crop(&s5k6aa->sd, sd_state, 0);
|
||||
}
|
||||
|
||||
static void s5k6aa_try_format(struct s5k6aa *s5k6aa,
|
||||
@ -1088,7 +1089,8 @@ 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_pad_config *cfg,
|
||||
static int s5k6aa_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5k6aa *s5k6aa = to_s5k6aa(sd);
|
||||
@ -1097,7 +1099,7 @@ static int s5k6aa_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config
|
||||
memset(fmt->reserved, 0, sizeof(fmt->reserved));
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
fmt->format = *mf;
|
||||
return 0;
|
||||
}
|
||||
@ -1109,7 +1111,8 @@ static int s5k6aa_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int s5k6aa_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
static int s5k6aa_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct s5k6aa *s5k6aa = to_s5k6aa(sd);
|
||||
@ -1122,8 +1125,8 @@ static int s5k6aa_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config
|
||||
s5k6aa_try_format(s5k6aa, &fmt->format);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
crop = v4l2_subdev_get_try_crop(sd, cfg, 0);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
crop = v4l2_subdev_get_try_crop(sd, sd_state, 0);
|
||||
} else {
|
||||
if (s5k6aa->streaming) {
|
||||
ret = -EBUSY;
|
||||
@ -1163,7 +1166,7 @@ static int s5k6aa_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config
|
||||
}
|
||||
|
||||
static int s5k6aa_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct s5k6aa *s5k6aa = to_s5k6aa(sd);
|
||||
@ -1175,7 +1178,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, cfg, sel->which);
|
||||
rect = __s5k6aa_get_crop_rect(s5k6aa, sd_state, sel->which);
|
||||
sel->r = *rect;
|
||||
mutex_unlock(&s5k6aa->lock);
|
||||
|
||||
@ -1186,7 +1189,7 @@ static int s5k6aa_get_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int s5k6aa_set_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct s5k6aa *s5k6aa = to_s5k6aa(sd);
|
||||
@ -1198,13 +1201,13 @@ static int s5k6aa_set_selection(struct v4l2_subdev *sd,
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&s5k6aa->lock);
|
||||
crop_r = __s5k6aa_get_crop_rect(s5k6aa, cfg, sel->which);
|
||||
crop_r = __s5k6aa_get_crop_rect(s5k6aa, sd_state, 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(sd, cfg, 0);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
}
|
||||
v4l_bound_align_image(&sel->r.width, mf->width,
|
||||
S5K6AA_WIN_WIDTH_MAX, 1,
|
||||
@ -1425,8 +1428,10 @@ 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(sd, fh->pad, 0);
|
||||
struct v4l2_rect *crop = v4l2_subdev_get_try_crop(sd, fh->pad, 0);
|
||||
struct v4l2_mbus_framefmt *format = v4l2_subdev_get_try_format(sd,
|
||||
fh->state,
|
||||
0);
|
||||
struct v4l2_rect *crop = v4l2_subdev_get_try_crop(sd, fh->state, 0);
|
||||
|
||||
format->colorspace = s5k6aa_formats[0].colorspace;
|
||||
format->code = s5k6aa_formats[0].code;
|
||||
|
@ -543,7 +543,7 @@ static int saa6752hs_init(struct v4l2_subdev *sd, u32 leading_null_bytes)
|
||||
}
|
||||
|
||||
static int saa6752hs_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *f = &format->format;
|
||||
@ -563,7 +563,7 @@ static int saa6752hs_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int saa6752hs_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *f = &format->format;
|
||||
@ -595,7 +595,7 @@ static int saa6752hs_set_fmt(struct v4l2_subdev *sd,
|
||||
f->colorspace = V4L2_COLORSPACE_SMPTE170M;
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
cfg->try_fmt = *f;
|
||||
sd_state->pads->try_fmt = *f;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1167,7 +1167,7 @@ static int saa711x_s_sliced_fmt(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_f
|
||||
}
|
||||
|
||||
static int saa711x_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *fmt = &format->format;
|
||||
|
@ -980,7 +980,7 @@ static int saa717x_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_regi
|
||||
#endif
|
||||
|
||||
static int saa717x_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *fmt = &format->format;
|
||||
|
@ -468,7 +468,7 @@ static int sr030pc30_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
}
|
||||
|
||||
static int sr030pc30_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (!code || code->pad ||
|
||||
@ -480,7 +480,7 @@ static int sr030pc30_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int sr030pc30_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
@ -525,7 +525,7 @@ static const struct sr030pc30_format *try_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
/* Return nearest media bus frame format. */
|
||||
static int sr030pc30_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct sr030pc30_info *info = sd ? to_sr030pc30(sd) : NULL;
|
||||
@ -541,7 +541,7 @@ static int sr030pc30_set_fmt(struct v4l2_subdev *sd,
|
||||
|
||||
fmt = try_fmt(sd, mf);
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
cfg->try_fmt = *mf;
|
||||
sd_state->pads->try_fmt = *mf;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -643,7 +643,7 @@ out:
|
||||
}
|
||||
|
||||
static int mipid02_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct mipid02_dev *bridge = to_mipid02_dev(sd);
|
||||
@ -670,7 +670,7 @@ static int mipid02_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int mipid02_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mbus_fmt = &format->format;
|
||||
@ -687,7 +687,8 @@ static int mipid02_get_fmt(struct v4l2_subdev *sd,
|
||||
return -EINVAL;
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
fmt = v4l2_subdev_get_try_format(&bridge->sd, cfg, format->pad);
|
||||
fmt = v4l2_subdev_get_try_format(&bridge->sd, sd_state,
|
||||
format->pad);
|
||||
else
|
||||
fmt = &bridge->fmt;
|
||||
|
||||
@ -704,7 +705,7 @@ static int mipid02_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static void mipid02_set_fmt_source(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct mipid02_dev *bridge = to_mipid02_dev(sd);
|
||||
@ -718,11 +719,11 @@ static void mipid02_set_fmt_source(struct v4l2_subdev *sd,
|
||||
if (format->which != V4L2_SUBDEV_FORMAT_TRY)
|
||||
return;
|
||||
|
||||
*v4l2_subdev_get_try_format(sd, cfg, format->pad) = format->format;
|
||||
*v4l2_subdev_get_try_format(sd, sd_state, format->pad) = format->format;
|
||||
}
|
||||
|
||||
static void mipid02_set_fmt_sink(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct mipid02_dev *bridge = to_mipid02_dev(sd);
|
||||
@ -731,7 +732,7 @@ static void mipid02_set_fmt_sink(struct v4l2_subdev *sd,
|
||||
format->format.code = get_fmt_code(format->format.code);
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
|
||||
fmt = v4l2_subdev_get_try_format(sd, sd_state, format->pad);
|
||||
else
|
||||
fmt = &bridge->fmt;
|
||||
|
||||
@ -739,7 +740,7 @@ static void mipid02_set_fmt_sink(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int mipid02_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct mipid02_dev *bridge = to_mipid02_dev(sd);
|
||||
@ -762,9 +763,9 @@ static int mipid02_set_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
if (format->pad == MIPID02_SOURCE)
|
||||
mipid02_set_fmt_source(sd, cfg, format);
|
||||
mipid02_set_fmt_source(sd, sd_state, format);
|
||||
else
|
||||
mipid02_set_fmt_sink(sd, cfg, format);
|
||||
mipid02_set_fmt_sink(sd, sd_state, format);
|
||||
|
||||
error:
|
||||
mutex_unlock(&bridge->lock);
|
||||
|
@ -1649,7 +1649,7 @@ static int tc358743_s_stream(struct v4l2_subdev *sd, int enable)
|
||||
/* --------------- PAD OPS --------------- */
|
||||
|
||||
static int tc358743_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
switch (code->index) {
|
||||
@ -1666,7 +1666,7 @@ static int tc358743_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int tc358743_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct tc358743_state *state = to_state(sd);
|
||||
@ -1702,13 +1702,13 @@ static int tc358743_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int tc358743_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct tc358743_state *state = to_state(sd);
|
||||
|
||||
u32 code = format->format.code; /* is overwritten by get_fmt */
|
||||
int ret = tc358743_get_fmt(sd, cfg, format);
|
||||
int ret = tc358743_get_fmt(sd, sd_state, format);
|
||||
|
||||
format->format.code = code;
|
||||
|
||||
|
@ -1718,19 +1718,19 @@ static const struct v4l2_subdev_video_ops tda1997x_video_ops = {
|
||||
*/
|
||||
|
||||
static int tda1997x_init_cfg(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg)
|
||||
struct v4l2_subdev_state *sd_state)
|
||||
{
|
||||
struct tda1997x_state *state = to_state(sd);
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, 0);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, 0);
|
||||
mf->code = state->mbus_codes[0];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tda1997x_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct tda1997x_state *state = to_state(sd);
|
||||
@ -1762,7 +1762,7 @@ static void tda1997x_fill_format(struct tda1997x_state *state,
|
||||
}
|
||||
|
||||
static int tda1997x_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct tda1997x_state *state = to_state(sd);
|
||||
@ -1775,7 +1775,7 @@ static int tda1997x_get_format(struct v4l2_subdev *sd,
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *fmt;
|
||||
|
||||
fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
|
||||
fmt = v4l2_subdev_get_try_format(sd, sd_state, format->pad);
|
||||
format->format.code = fmt->code;
|
||||
} else
|
||||
format->format.code = state->mbus_code;
|
||||
@ -1784,7 +1784,7 @@ static int tda1997x_get_format(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int tda1997x_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct tda1997x_state *state = to_state(sd);
|
||||
@ -1809,7 +1809,7 @@ static int tda1997x_set_format(struct v4l2_subdev *sd,
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *fmt;
|
||||
|
||||
fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
|
||||
fmt = v4l2_subdev_get_try_format(sd, sd_state, format->pad);
|
||||
*fmt = format->format;
|
||||
} else {
|
||||
int ret = tda1997x_setup_format(state, format->format.code);
|
||||
|
@ -853,13 +853,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
|
||||
* @cfg: pad configuration
|
||||
* @sd_state: subdev state
|
||||
* @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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
u32 pad = code->pad;
|
||||
@ -880,13 +880,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
|
||||
* @cfg: pad configuration
|
||||
* @sd_state: subdev state
|
||||
* @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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct tvp514x_decoder *decoder = to_decoder(sd);
|
||||
@ -912,13 +912,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
|
||||
* @cfg: pad configuration
|
||||
* @sd_state: subdev state
|
||||
* @fmt: 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_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct tvp514x_decoder *decoder = to_decoder(sd);
|
||||
|
@ -1027,7 +1027,7 @@ static void tvp5150_set_default(v4l2_std_id std, struct v4l2_rect *crop)
|
||||
|
||||
static struct v4l2_rect *
|
||||
tvp5150_get_pad_crop(struct tvp5150 *decoder,
|
||||
struct v4l2_subdev_pad_config *cfg, unsigned int pad,
|
||||
struct v4l2_subdev_state *sd_state, unsigned int pad,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
switch (which) {
|
||||
@ -1035,7 +1035,7 @@ tvp5150_get_pad_crop(struct tvp5150 *decoder,
|
||||
return &decoder->rect;
|
||||
case V4L2_SUBDEV_FORMAT_TRY:
|
||||
#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
|
||||
return v4l2_subdev_get_try_crop(&decoder->sd, cfg, pad);
|
||||
return v4l2_subdev_get_try_crop(&decoder->sd, sd_state, pad);
|
||||
#else
|
||||
return ERR_PTR(-EINVAL);
|
||||
#endif
|
||||
@ -1045,7 +1045,7 @@ tvp5150_get_pad_crop(struct tvp5150 *decoder,
|
||||
}
|
||||
|
||||
static int tvp5150_fill_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *f;
|
||||
@ -1104,7 +1104,7 @@ static void tvp5150_set_hw_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int tvp5150_set_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct tvp5150 *decoder = to_tvp5150(sd);
|
||||
@ -1138,7 +1138,7 @@ static int tvp5150_set_selection(struct v4l2_subdev *sd,
|
||||
sel->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return 0;
|
||||
|
||||
crop = tvp5150_get_pad_crop(decoder, cfg, sel->pad, sel->which);
|
||||
crop = tvp5150_get_pad_crop(decoder, sd_state, sel->pad, sel->which);
|
||||
if (IS_ERR(crop))
|
||||
return PTR_ERR(crop);
|
||||
|
||||
@ -1156,7 +1156,7 @@ static int tvp5150_set_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int tvp5150_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct tvp5150 *decoder = container_of(sd, struct tvp5150, sd);
|
||||
@ -1180,7 +1180,7 @@ static int tvp5150_get_selection(struct v4l2_subdev *sd,
|
||||
sel->r.height = TVP5150_V_MAX_OTHERS;
|
||||
return 0;
|
||||
case V4L2_SEL_TGT_CROP:
|
||||
crop = tvp5150_get_pad_crop(decoder, cfg, sel->pad,
|
||||
crop = tvp5150_get_pad_crop(decoder, sd_state, sel->pad,
|
||||
sel->which);
|
||||
if (IS_ERR(crop))
|
||||
return PTR_ERR(crop);
|
||||
@ -1208,7 +1208,7 @@ static int tvp5150_get_mbus_config(struct v4l2_subdev *sd,
|
||||
V4L2 subdev pad ops
|
||||
****************************************************************************/
|
||||
static int tvp5150_init_cfg(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg)
|
||||
struct v4l2_subdev_state *sd_state)
|
||||
{
|
||||
struct tvp5150 *decoder = to_tvp5150(sd);
|
||||
v4l2_std_id std;
|
||||
@ -1229,7 +1229,7 @@ static int tvp5150_init_cfg(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int tvp5150_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index)
|
||||
@ -1240,7 +1240,7 @@ static int tvp5150_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int tvp5150_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct tvp5150 *decoder = to_tvp5150(sd);
|
||||
|
@ -797,7 +797,8 @@ static const struct v4l2_ctrl_ops tvp7002_ctrl_ops = {
|
||||
* Enumerate supported digital video formats for pad.
|
||||
*/
|
||||
static int
|
||||
tvp7002_enum_mbus_code(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
tvp7002_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
/* Check requested format index is within range */
|
||||
@ -818,7 +819,8 @@ tvp7002_enum_mbus_code(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cf
|
||||
* get video format for pad.
|
||||
*/
|
||||
static int
|
||||
tvp7002_get_pad_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
tvp7002_get_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct tvp7002 *tvp7002 = to_tvp7002(sd);
|
||||
@ -841,10 +843,11 @@ tvp7002_get_pad_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cf
|
||||
* set video format for pad.
|
||||
*/
|
||||
static int
|
||||
tvp7002_set_pad_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
tvp7002_set_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
return tvp7002_get_pad_format(sd, cfg, fmt);
|
||||
return tvp7002_get_pad_format(sd, sd_state, fmt);
|
||||
}
|
||||
|
||||
/* V4L2 core operation handlers */
|
||||
|
@ -720,7 +720,7 @@ tw9910_set_fmt_error:
|
||||
}
|
||||
|
||||
static int tw9910_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
@ -746,7 +746,7 @@ static int tw9910_get_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int tw9910_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
@ -797,7 +797,7 @@ static int tw9910_s_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int tw9910_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &format->format;
|
||||
@ -829,7 +829,7 @@ static int tw9910_set_fmt(struct v4l2_subdev *sd,
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_ACTIVE)
|
||||
return tw9910_s_fmt(sd, mf);
|
||||
|
||||
cfg->try_fmt = *mf;
|
||||
sd_state->pads->try_fmt = *mf;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -886,7 +886,7 @@ static const struct v4l2_subdev_core_ops tw9910_subdev_core_ops = {
|
||||
};
|
||||
|
||||
static int tw9910_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index)
|
||||
|
@ -546,7 +546,7 @@ static int vs6624_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
}
|
||||
|
||||
static int vs6624_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index >= ARRAY_SIZE(vs6624_formats))
|
||||
@ -557,7 +557,7 @@ static int vs6624_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int vs6624_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *fmt = &format->format;
|
||||
@ -587,7 +587,7 @@ static int vs6624_set_fmt(struct v4l2_subdev *sd,
|
||||
fmt->colorspace = vs6624_formats[index].colorspace;
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
cfg->try_fmt = *fmt;
|
||||
sd_state->pads->try_fmt = *fmt;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -637,7 +637,7 @@ static int vs6624_set_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int vs6624_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct vs6624 *sensor = to_vs6624(sd);
|
||||
|
@ -930,7 +930,7 @@ static int cx18_av_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
}
|
||||
|
||||
static int cx18_av_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *fmt = &format->format;
|
||||
|
@ -1199,11 +1199,11 @@ static int cio2_subdev_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
};
|
||||
|
||||
/* Initialize try_fmt */
|
||||
format = v4l2_subdev_get_try_format(sd, fh->pad, CIO2_PAD_SINK);
|
||||
format = v4l2_subdev_get_try_format(sd, fh->state, CIO2_PAD_SINK);
|
||||
*format = fmt_default;
|
||||
|
||||
/* same as sink */
|
||||
format = v4l2_subdev_get_try_format(sd, fh->pad, CIO2_PAD_SOURCE);
|
||||
format = v4l2_subdev_get_try_format(sd, fh->state, CIO2_PAD_SOURCE);
|
||||
*format = fmt_default;
|
||||
|
||||
return 0;
|
||||
@ -1217,7 +1217,7 @@ static int cio2_subdev_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int cio2_subdev_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct cio2_queue *q = container_of(sd, struct cio2_queue, subdev);
|
||||
@ -1225,7 +1225,8 @@ static int cio2_subdev_get_fmt(struct v4l2_subdev *sd,
|
||||
mutex_lock(&q->subdev_lock);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
fmt->format = *v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
fmt->format = *v4l2_subdev_get_try_format(sd, sd_state,
|
||||
fmt->pad);
|
||||
else
|
||||
fmt->format = q->subdev_fmt;
|
||||
|
||||
@ -1242,7 +1243,7 @@ static int cio2_subdev_get_fmt(struct v4l2_subdev *sd,
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int cio2_subdev_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct cio2_queue *q = container_of(sd, struct cio2_queue, subdev);
|
||||
@ -1255,10 +1256,10 @@ static int cio2_subdev_set_fmt(struct v4l2_subdev *sd,
|
||||
* source always propagates from sink
|
||||
*/
|
||||
if (fmt->pad == CIO2_PAD_SOURCE)
|
||||
return cio2_subdev_get_fmt(sd, cfg, fmt);
|
||||
return cio2_subdev_get_fmt(sd, sd_state, fmt);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
mbus = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
mbus = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
else
|
||||
mbus = &q->subdev_fmt;
|
||||
|
||||
@ -1283,7 +1284,7 @@ static int cio2_subdev_set_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int cio2_subdev_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index >= ARRAY_SIZE(formats))
|
||||
|
@ -138,12 +138,15 @@ static int empress_try_fmt_vid_cap(struct file *file, void *priv,
|
||||
{
|
||||
struct saa7134_dev *dev = video_drvdata(file);
|
||||
struct v4l2_subdev_pad_config pad_cfg;
|
||||
struct v4l2_subdev_state pad_state = {
|
||||
.pads = &pad_cfg
|
||||
};
|
||||
struct v4l2_subdev_format format = {
|
||||
.which = V4L2_SUBDEV_FORMAT_TRY,
|
||||
};
|
||||
|
||||
v4l2_fill_mbus_format(&format.format, &f->fmt.pix, MEDIA_BUS_FMT_FIXED);
|
||||
saa_call_all(dev, pad, set_fmt, &pad_cfg, &format);
|
||||
saa_call_all(dev, pad, set_fmt, &pad_state, &format);
|
||||
v4l2_fill_pix_format(&f->fmt.pix, &format.format);
|
||||
|
||||
f->fmt.pix.pixelformat = V4L2_PIX_FMT_MPEG;
|
||||
|
@ -1095,7 +1095,7 @@ static int isc_try_configure_pipeline(struct isc_device *isc)
|
||||
}
|
||||
|
||||
static void isc_try_fse(struct isc_device *isc,
|
||||
struct v4l2_subdev_pad_config *pad_cfg)
|
||||
struct v4l2_subdev_state *sd_state)
|
||||
{
|
||||
int ret;
|
||||
struct v4l2_subdev_frame_size_enum fse = {};
|
||||
@ -1111,17 +1111,17 @@ static void isc_try_fse(struct isc_device *isc,
|
||||
fse.which = V4L2_SUBDEV_FORMAT_TRY;
|
||||
|
||||
ret = v4l2_subdev_call(isc->current_subdev->sd, pad, enum_frame_size,
|
||||
pad_cfg, &fse);
|
||||
sd_state, &fse);
|
||||
/*
|
||||
* Attempt to obtain format size from subdev. If not available,
|
||||
* just use the maximum ISC can receive.
|
||||
*/
|
||||
if (ret) {
|
||||
pad_cfg->try_crop.width = isc->max_width;
|
||||
pad_cfg->try_crop.height = isc->max_height;
|
||||
sd_state->pads->try_crop.width = isc->max_width;
|
||||
sd_state->pads->try_crop.height = isc->max_height;
|
||||
} else {
|
||||
pad_cfg->try_crop.width = fse.max_width;
|
||||
pad_cfg->try_crop.height = fse.max_height;
|
||||
sd_state->pads->try_crop.width = fse.max_width;
|
||||
sd_state->pads->try_crop.height = fse.max_height;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1132,6 +1132,9 @@ static int isc_try_fmt(struct isc_device *isc, struct v4l2_format *f,
|
||||
struct isc_format *sd_fmt = NULL, *direct_fmt = NULL;
|
||||
struct v4l2_pix_format *pixfmt = &f->fmt.pix;
|
||||
struct v4l2_subdev_pad_config pad_cfg = {};
|
||||
struct v4l2_subdev_state pad_state = {
|
||||
.pads = &pad_cfg
|
||||
};
|
||||
struct v4l2_subdev_format format = {
|
||||
.which = V4L2_SUBDEV_FORMAT_TRY,
|
||||
};
|
||||
@ -1229,11 +1232,11 @@ static int isc_try_fmt(struct isc_device *isc, struct v4l2_format *f,
|
||||
goto isc_try_fmt_err;
|
||||
|
||||
/* Obtain frame sizes if possible to have crop requirements ready */
|
||||
isc_try_fse(isc, &pad_cfg);
|
||||
isc_try_fse(isc, &pad_state);
|
||||
|
||||
v4l2_fill_mbus_format(&format.format, pixfmt, mbus_code);
|
||||
ret = v4l2_subdev_call(isc->current_subdev->sd, pad, set_fmt,
|
||||
&pad_cfg, &format);
|
||||
&pad_state, &format);
|
||||
if (ret < 0)
|
||||
goto isc_try_fmt_subdev_err;
|
||||
|
||||
|
@ -557,7 +557,7 @@ static const struct isi_format *find_format_by_fourcc(struct atmel_isi *isi,
|
||||
}
|
||||
|
||||
static void isi_try_fse(struct atmel_isi *isi, const struct isi_format *isi_fmt,
|
||||
struct v4l2_subdev_pad_config *pad_cfg)
|
||||
struct v4l2_subdev_state *sd_state)
|
||||
{
|
||||
int ret;
|
||||
struct v4l2_subdev_frame_size_enum fse = {
|
||||
@ -566,17 +566,17 @@ static void isi_try_fse(struct atmel_isi *isi, const struct isi_format *isi_fmt,
|
||||
};
|
||||
|
||||
ret = v4l2_subdev_call(isi->entity.subdev, pad, enum_frame_size,
|
||||
pad_cfg, &fse);
|
||||
sd_state, &fse);
|
||||
/*
|
||||
* Attempt to obtain format size from subdev. If not available,
|
||||
* just use the maximum ISI can receive.
|
||||
*/
|
||||
if (ret) {
|
||||
pad_cfg->try_crop.width = MAX_SUPPORT_WIDTH;
|
||||
pad_cfg->try_crop.height = MAX_SUPPORT_HEIGHT;
|
||||
sd_state->pads->try_crop.width = MAX_SUPPORT_WIDTH;
|
||||
sd_state->pads->try_crop.height = MAX_SUPPORT_HEIGHT;
|
||||
} else {
|
||||
pad_cfg->try_crop.width = fse.max_width;
|
||||
pad_cfg->try_crop.height = fse.max_height;
|
||||
sd_state->pads->try_crop.width = fse.max_width;
|
||||
sd_state->pads->try_crop.height = fse.max_height;
|
||||
}
|
||||
}
|
||||
|
||||
@ -586,6 +586,9 @@ static int isi_try_fmt(struct atmel_isi *isi, struct v4l2_format *f,
|
||||
const struct isi_format *isi_fmt;
|
||||
struct v4l2_pix_format *pixfmt = &f->fmt.pix;
|
||||
struct v4l2_subdev_pad_config pad_cfg = {};
|
||||
struct v4l2_subdev_state pad_state = {
|
||||
.pads = &pad_cfg
|
||||
};
|
||||
struct v4l2_subdev_format format = {
|
||||
.which = V4L2_SUBDEV_FORMAT_TRY,
|
||||
};
|
||||
@ -603,10 +606,10 @@ static int isi_try_fmt(struct atmel_isi *isi, struct v4l2_format *f,
|
||||
|
||||
v4l2_fill_mbus_format(&format.format, pixfmt, isi_fmt->mbus_code);
|
||||
|
||||
isi_try_fse(isi, isi_fmt, &pad_cfg);
|
||||
isi_try_fse(isi, isi_fmt, &pad_state);
|
||||
|
||||
ret = v4l2_subdev_call(isi->entity.subdev, pad, set_fmt,
|
||||
&pad_cfg, &format);
|
||||
&pad_state, &format);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
@ -156,7 +156,7 @@ static const struct csi2tx_fmt *csi2tx_get_fmt_from_mbus(u32 mbus)
|
||||
}
|
||||
|
||||
static int csi2tx_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->pad || code->index >= ARRAY_SIZE(csi2tx_formats))
|
||||
@ -169,20 +169,20 @@ static int csi2tx_enum_mbus_code(struct v4l2_subdev *subdev,
|
||||
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__csi2tx_get_pad_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct csi2tx_priv *csi2tx = v4l2_subdev_to_csi2tx(subdev);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return v4l2_subdev_get_try_format(subdev, cfg,
|
||||
return v4l2_subdev_get_try_format(subdev, sd_state,
|
||||
fmt->pad);
|
||||
|
||||
return &csi2tx->pad_fmts[fmt->pad];
|
||||
}
|
||||
|
||||
static int csi2tx_get_pad_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
const struct v4l2_mbus_framefmt *format;
|
||||
@ -191,7 +191,7 @@ static int csi2tx_get_pad_format(struct v4l2_subdev *subdev,
|
||||
if (fmt->pad == CSI2TX_PAD_SOURCE)
|
||||
return -EINVAL;
|
||||
|
||||
format = __csi2tx_get_pad_format(subdev, cfg, fmt);
|
||||
format = __csi2tx_get_pad_format(subdev, sd_state, fmt);
|
||||
if (!format)
|
||||
return -EINVAL;
|
||||
|
||||
@ -201,7 +201,7 @@ static int csi2tx_get_pad_format(struct v4l2_subdev *subdev,
|
||||
}
|
||||
|
||||
static int csi2tx_set_pad_format(struct v4l2_subdev *subdev,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
const struct v4l2_mbus_framefmt *src_format = &fmt->format;
|
||||
@ -214,7 +214,7 @@ static int csi2tx_set_pad_format(struct v4l2_subdev *subdev,
|
||||
if (!csi2tx_get_fmt_from_mbus(fmt->format.code))
|
||||
src_format = &fmt_default;
|
||||
|
||||
dst_format = __csi2tx_get_pad_format(subdev, cfg, fmt);
|
||||
dst_format = __csi2tx_get_pad_format(subdev, sd_state, fmt);
|
||||
if (!dst_format)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -1454,7 +1454,7 @@ void fimc_sensor_notify(struct v4l2_subdev *sd, unsigned int notification,
|
||||
}
|
||||
|
||||
static int fimc_subdev_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct fimc_fmt *fmt;
|
||||
@ -1467,7 +1467,7 @@ static int fimc_subdev_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int fimc_subdev_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct fimc_dev *fimc = v4l2_get_subdevdata(sd);
|
||||
@ -1476,7 +1476,7 @@ static int fimc_subdev_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
fmt->format = *mf;
|
||||
return 0;
|
||||
}
|
||||
@ -1508,7 +1508,7 @@ static int fimc_subdev_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int fimc_subdev_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct fimc_dev *fimc = v4l2_get_subdevdata(sd);
|
||||
@ -1531,7 +1531,7 @@ static int fimc_subdev_set_fmt(struct v4l2_subdev *sd,
|
||||
mf->colorspace = V4L2_COLORSPACE_JPEG;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
*mf = fmt->format;
|
||||
return 0;
|
||||
}
|
||||
@ -1574,7 +1574,7 @@ static int fimc_subdev_set_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int fimc_subdev_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct fimc_dev *fimc = v4l2_get_subdevdata(sd);
|
||||
@ -1601,10 +1601,10 @@ static int fimc_subdev_get_selection(struct v4l2_subdev *sd,
|
||||
return 0;
|
||||
|
||||
case V4L2_SEL_TGT_CROP:
|
||||
try_sel = v4l2_subdev_get_try_crop(sd, cfg, sel->pad);
|
||||
try_sel = v4l2_subdev_get_try_crop(sd, sd_state, sel->pad);
|
||||
break;
|
||||
case V4L2_SEL_TGT_COMPOSE:
|
||||
try_sel = v4l2_subdev_get_try_compose(sd, cfg, sel->pad);
|
||||
try_sel = v4l2_subdev_get_try_compose(sd, sd_state, sel->pad);
|
||||
f = &ctx->d_frame;
|
||||
break;
|
||||
default:
|
||||
@ -1630,7 +1630,7 @@ static int fimc_subdev_get_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int fimc_subdev_set_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct fimc_dev *fimc = v4l2_get_subdevdata(sd);
|
||||
@ -1648,10 +1648,10 @@ static int fimc_subdev_set_selection(struct v4l2_subdev *sd,
|
||||
|
||||
switch (sel->target) {
|
||||
case V4L2_SEL_TGT_CROP:
|
||||
try_sel = v4l2_subdev_get_try_crop(sd, cfg, sel->pad);
|
||||
try_sel = v4l2_subdev_get_try_crop(sd, sd_state, sel->pad);
|
||||
break;
|
||||
case V4L2_SEL_TGT_COMPOSE:
|
||||
try_sel = v4l2_subdev_get_try_compose(sd, cfg, sel->pad);
|
||||
try_sel = v4l2_subdev_get_try_compose(sd, sd_state, sel->pad);
|
||||
f = &ctx->d_frame;
|
||||
break;
|
||||
default:
|
||||
|
@ -106,7 +106,7 @@ static const struct media_entity_operations fimc_is_subdev_media_ops = {
|
||||
};
|
||||
|
||||
static int fimc_is_subdev_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
const struct fimc_fmt *fmt;
|
||||
@ -119,14 +119,14 @@ static int fimc_is_subdev_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int fimc_isp_subdev_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct fimc_isp *isp = v4l2_get_subdevdata(sd);
|
||||
struct v4l2_mbus_framefmt *mf = &fmt->format;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
*mf = *v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
*mf = *v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -156,7 +156,7 @@ static int fimc_isp_subdev_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static void __isp_subdev_try_format(struct fimc_isp *isp,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct v4l2_mbus_framefmt *mf = &fmt->format;
|
||||
@ -172,8 +172,9 @@ static void __isp_subdev_try_format(struct fimc_isp *isp,
|
||||
mf->code = MEDIA_BUS_FMT_SGRBG10_1X10;
|
||||
} else {
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
format = v4l2_subdev_get_try_format(&isp->subdev, cfg,
|
||||
FIMC_ISP_SD_PAD_SINK);
|
||||
format = v4l2_subdev_get_try_format(&isp->subdev,
|
||||
sd_state,
|
||||
FIMC_ISP_SD_PAD_SINK);
|
||||
else
|
||||
format = &isp->sink_fmt;
|
||||
|
||||
@ -191,7 +192,7 @@ static void __isp_subdev_try_format(struct fimc_isp *isp,
|
||||
}
|
||||
|
||||
static int fimc_isp_subdev_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct fimc_isp *isp = v4l2_get_subdevdata(sd);
|
||||
@ -203,10 +204,10 @@ static int fimc_isp_subdev_set_fmt(struct v4l2_subdev *sd,
|
||||
__func__, fmt->pad, mf->code, mf->width, mf->height);
|
||||
|
||||
mutex_lock(&isp->subdev_lock);
|
||||
__isp_subdev_try_format(isp, cfg, fmt);
|
||||
__isp_subdev_try_format(isp, sd_state, fmt);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
|
||||
*mf = fmt->format;
|
||||
|
||||
/* Propagate format to the source pads */
|
||||
@ -217,8 +218,10 @@ static int fimc_isp_subdev_set_fmt(struct v4l2_subdev *sd,
|
||||
for (pad = FIMC_ISP_SD_PAD_SRC_FIFO;
|
||||
pad < FIMC_ISP_SD_PADS_NUM; pad++) {
|
||||
format.pad = pad;
|
||||
__isp_subdev_try_format(isp, cfg, &format);
|
||||
mf = v4l2_subdev_get_try_format(sd, cfg, pad);
|
||||
__isp_subdev_try_format(isp, sd_state,
|
||||
&format);
|
||||
mf = v4l2_subdev_get_try_format(sd, sd_state,
|
||||
pad);
|
||||
*mf = format.format;
|
||||
}
|
||||
}
|
||||
@ -230,7 +233,8 @@ static int fimc_isp_subdev_set_fmt(struct v4l2_subdev *sd,
|
||||
isp->sink_fmt = *mf;
|
||||
|
||||
format.pad = FIMC_ISP_SD_PAD_SRC_DMA;
|
||||
__isp_subdev_try_format(isp, cfg, &format);
|
||||
__isp_subdev_try_format(isp, sd_state,
|
||||
&format);
|
||||
|
||||
isp->src_fmt = format.format;
|
||||
__is_set_frame_size(is, &isp->src_fmt);
|
||||
@ -370,15 +374,18 @@ static int fimc_isp_subdev_open(struct v4l2_subdev *sd,
|
||||
.field = V4L2_FIELD_NONE,
|
||||
};
|
||||
|
||||
format = v4l2_subdev_get_try_format(sd, fh->pad, FIMC_ISP_SD_PAD_SINK);
|
||||
format = v4l2_subdev_get_try_format(sd, fh->state,
|
||||
FIMC_ISP_SD_PAD_SINK);
|
||||
*format = fmt;
|
||||
|
||||
format = v4l2_subdev_get_try_format(sd, fh->pad, FIMC_ISP_SD_PAD_SRC_FIFO);
|
||||
format = v4l2_subdev_get_try_format(sd, fh->state,
|
||||
FIMC_ISP_SD_PAD_SRC_FIFO);
|
||||
fmt.width = DEFAULT_PREVIEW_STILL_WIDTH;
|
||||
fmt.height = DEFAULT_PREVIEW_STILL_HEIGHT;
|
||||
*format = fmt;
|
||||
|
||||
format = v4l2_subdev_get_try_format(sd, fh->pad, FIMC_ISP_SD_PAD_SRC_DMA);
|
||||
format = v4l2_subdev_get_try_format(sd, fh->state,
|
||||
FIMC_ISP_SD_PAD_SRC_DMA);
|
||||
*format = fmt;
|
||||
|
||||
return 0;
|
||||
|
@ -550,7 +550,7 @@ static const struct v4l2_file_operations fimc_lite_fops = {
|
||||
*/
|
||||
|
||||
static const struct fimc_fmt *fimc_lite_subdev_try_fmt(struct fimc_lite *fimc,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *format)
|
||||
{
|
||||
struct flite_drvdata *dd = fimc->dd;
|
||||
@ -574,14 +574,16 @@ static const struct fimc_fmt *fimc_lite_subdev_try_fmt(struct fimc_lite *fimc,
|
||||
struct v4l2_rect *rect;
|
||||
|
||||
if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
sink_fmt = v4l2_subdev_get_try_format(&fimc->subdev, cfg,
|
||||
FLITE_SD_PAD_SINK);
|
||||
sink_fmt = v4l2_subdev_get_try_format(&fimc->subdev,
|
||||
sd_state,
|
||||
FLITE_SD_PAD_SINK);
|
||||
|
||||
mf->code = sink_fmt->code;
|
||||
mf->colorspace = sink_fmt->colorspace;
|
||||
|
||||
rect = v4l2_subdev_get_try_crop(&fimc->subdev, cfg,
|
||||
FLITE_SD_PAD_SINK);
|
||||
rect = v4l2_subdev_get_try_crop(&fimc->subdev,
|
||||
sd_state,
|
||||
FLITE_SD_PAD_SINK);
|
||||
} else {
|
||||
mf->code = sink->fmt->mbus_code;
|
||||
mf->colorspace = sink->fmt->colorspace;
|
||||
@ -1002,7 +1004,7 @@ static const struct media_entity_operations fimc_lite_subdev_media_ops = {
|
||||
};
|
||||
|
||||
static int fimc_lite_subdev_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
const struct fimc_fmt *fmt;
|
||||
@ -1016,16 +1018,16 @@ static int fimc_lite_subdev_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
|
||||
static struct v4l2_mbus_framefmt *__fimc_lite_subdev_get_try_fmt(
|
||||
struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg, unsigned int pad)
|
||||
struct v4l2_subdev_state *sd_state, unsigned int pad)
|
||||
{
|
||||
if (pad != FLITE_SD_PAD_SINK)
|
||||
pad = FLITE_SD_PAD_SOURCE_DMA;
|
||||
|
||||
return v4l2_subdev_get_try_format(sd, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(sd, sd_state, pad);
|
||||
}
|
||||
|
||||
static int fimc_lite_subdev_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct fimc_lite *fimc = v4l2_get_subdevdata(sd);
|
||||
@ -1033,7 +1035,7 @@ static int fimc_lite_subdev_get_fmt(struct v4l2_subdev *sd,
|
||||
struct flite_frame *f = &fimc->inp_frame;
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
mf = __fimc_lite_subdev_get_try_fmt(sd, cfg, fmt->pad);
|
||||
mf = __fimc_lite_subdev_get_try_fmt(sd, sd_state, fmt->pad);
|
||||
fmt->format = *mf;
|
||||
return 0;
|
||||
}
|
||||
@ -1056,7 +1058,7 @@ static int fimc_lite_subdev_get_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int fimc_lite_subdev_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct fimc_lite *fimc = v4l2_get_subdevdata(sd);
|
||||
@ -1078,17 +1080,18 @@ static int fimc_lite_subdev_set_fmt(struct v4l2_subdev *sd,
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
ffmt = fimc_lite_subdev_try_fmt(fimc, cfg, fmt);
|
||||
ffmt = fimc_lite_subdev_try_fmt(fimc, sd_state, fmt);
|
||||
|
||||
if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
struct v4l2_mbus_framefmt *src_fmt;
|
||||
|
||||
mf = __fimc_lite_subdev_get_try_fmt(sd, cfg, fmt->pad);
|
||||
mf = __fimc_lite_subdev_get_try_fmt(sd, sd_state, fmt->pad);
|
||||
*mf = fmt->format;
|
||||
|
||||
if (fmt->pad == FLITE_SD_PAD_SINK) {
|
||||
unsigned int pad = FLITE_SD_PAD_SOURCE_DMA;
|
||||
src_fmt = __fimc_lite_subdev_get_try_fmt(sd, cfg, pad);
|
||||
src_fmt = __fimc_lite_subdev_get_try_fmt(sd, sd_state,
|
||||
pad);
|
||||
*src_fmt = *mf;
|
||||
}
|
||||
|
||||
@ -1116,7 +1119,7 @@ static int fimc_lite_subdev_set_fmt(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int fimc_lite_subdev_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct fimc_lite *fimc = v4l2_get_subdevdata(sd);
|
||||
@ -1128,7 +1131,7 @@ static int fimc_lite_subdev_get_selection(struct v4l2_subdev *sd,
|
||||
return -EINVAL;
|
||||
|
||||
if (sel->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
sel->r = *v4l2_subdev_get_try_crop(sd, cfg, sel->pad);
|
||||
sel->r = *v4l2_subdev_get_try_crop(sd, sd_state, sel->pad);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1151,7 +1154,7 @@ static int fimc_lite_subdev_get_selection(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int fimc_lite_subdev_set_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct fimc_lite *fimc = v4l2_get_subdevdata(sd);
|
||||
@ -1165,7 +1168,7 @@ static int fimc_lite_subdev_set_selection(struct v4l2_subdev *sd,
|
||||
fimc_lite_try_crop(fimc, &sel->r);
|
||||
|
||||
if (sel->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
*v4l2_subdev_get_try_crop(sd, cfg, sel->pad) = sel->r;
|
||||
*v4l2_subdev_get_try_crop(sd, sd_state, sel->pad) = sel->r;
|
||||
} else {
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(&fimc->slock, flags);
|
||||
|
@ -537,7 +537,7 @@ unlock:
|
||||
}
|
||||
|
||||
static int s5pcsis_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
if (code->index >= ARRAY_SIZE(s5pcsis_formats))
|
||||
@ -565,23 +565,25 @@ static struct csis_pix_format const *s5pcsis_try_format(
|
||||
}
|
||||
|
||||
static struct v4l2_mbus_framefmt *__s5pcsis_get_format(
|
||||
struct csis_state *state, struct v4l2_subdev_pad_config *cfg,
|
||||
struct csis_state *state, struct v4l2_subdev_state *sd_state,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
if (which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return cfg ? v4l2_subdev_get_try_format(&state->sd, cfg, 0) : NULL;
|
||||
return sd_state ? v4l2_subdev_get_try_format(&state->sd,
|
||||
sd_state, 0) : NULL;
|
||||
|
||||
return &state->format;
|
||||
}
|
||||
|
||||
static int s5pcsis_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
static int s5pcsis_set_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct csis_state *state = sd_to_csis_state(sd);
|
||||
struct csis_pix_format const *csis_fmt;
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
mf = __s5pcsis_get_format(state, cfg, fmt->which);
|
||||
mf = __s5pcsis_get_format(state, sd_state, fmt->which);
|
||||
|
||||
if (fmt->pad == CSIS_PAD_SOURCE) {
|
||||
if (mf) {
|
||||
@ -602,13 +604,14 @@ static int s5pcsis_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int s5pcsis_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
static int s5pcsis_get_fmt(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct csis_state *state = sd_to_csis_state(sd);
|
||||
struct v4l2_mbus_framefmt *mf;
|
||||
|
||||
mf = __s5pcsis_get_format(state, cfg, fmt->which);
|
||||
mf = __s5pcsis_get_format(state, sd_state, fmt->which);
|
||||
if (!mf)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -1350,6 +1350,9 @@ static int mcam_vidioc_try_fmt_vid_cap(struct file *filp, void *priv,
|
||||
struct mcam_format_struct *f;
|
||||
struct v4l2_pix_format *pix = &fmt->fmt.pix;
|
||||
struct v4l2_subdev_pad_config pad_cfg;
|
||||
struct v4l2_subdev_state pad_state = {
|
||||
.pads = &pad_cfg
|
||||
};
|
||||
struct v4l2_subdev_format format = {
|
||||
.which = V4L2_SUBDEV_FORMAT_TRY,
|
||||
};
|
||||
@ -1358,7 +1361,7 @@ static int mcam_vidioc_try_fmt_vid_cap(struct file *filp, void *priv,
|
||||
f = mcam_find_format(pix->pixelformat);
|
||||
pix->pixelformat = f->pixelformat;
|
||||
v4l2_fill_mbus_format(&format.format, pix, f->mbus_code);
|
||||
ret = sensor_call(cam, pad, set_fmt, &pad_cfg, &format);
|
||||
ret = sensor_call(cam, pad, set_fmt, &pad_state, &format);
|
||||
v4l2_fill_pix_format(pix, &format.format);
|
||||
pix->bytesperline = pix->width * f->bpp;
|
||||
switch (f->pixelformat) {
|
||||
|
@ -29,7 +29,8 @@
|
||||
#define CCDC_MIN_HEIGHT 32
|
||||
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__ccdc_get_format(struct isp_ccdc_device *ccdc, struct v4l2_subdev_pad_config *cfg,
|
||||
__ccdc_get_format(struct isp_ccdc_device *ccdc,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which);
|
||||
|
||||
static const unsigned int ccdc_fmts[] = {
|
||||
@ -1936,21 +1937,25 @@ static int ccdc_set_stream(struct v4l2_subdev *sd, int enable)
|
||||
}
|
||||
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__ccdc_get_format(struct isp_ccdc_device *ccdc, struct v4l2_subdev_pad_config *cfg,
|
||||
__ccdc_get_format(struct isp_ccdc_device *ccdc,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
if (which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return v4l2_subdev_get_try_format(&ccdc->subdev, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(&ccdc->subdev, sd_state,
|
||||
pad);
|
||||
else
|
||||
return &ccdc->formats[pad];
|
||||
}
|
||||
|
||||
static struct v4l2_rect *
|
||||
__ccdc_get_crop(struct isp_ccdc_device *ccdc, struct v4l2_subdev_pad_config *cfg,
|
||||
__ccdc_get_crop(struct isp_ccdc_device *ccdc,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
if (which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return v4l2_subdev_get_try_crop(&ccdc->subdev, cfg, CCDC_PAD_SOURCE_OF);
|
||||
return v4l2_subdev_get_try_crop(&ccdc->subdev, sd_state,
|
||||
CCDC_PAD_SOURCE_OF);
|
||||
else
|
||||
return &ccdc->crop;
|
||||
}
|
||||
@ -1963,7 +1968,8 @@ __ccdc_get_crop(struct isp_ccdc_device *ccdc, struct v4l2_subdev_pad_config *cfg
|
||||
* @fmt: Format
|
||||
*/
|
||||
static void
|
||||
ccdc_try_format(struct isp_ccdc_device *ccdc, struct v4l2_subdev_pad_config *cfg,
|
||||
ccdc_try_format(struct isp_ccdc_device *ccdc,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, struct v4l2_mbus_framefmt *fmt,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
@ -1999,7 +2005,8 @@ ccdc_try_format(struct isp_ccdc_device *ccdc, struct v4l2_subdev_pad_config *cfg
|
||||
case CCDC_PAD_SOURCE_OF:
|
||||
pixelcode = fmt->code;
|
||||
field = fmt->field;
|
||||
*fmt = *__ccdc_get_format(ccdc, cfg, CCDC_PAD_SINK, which);
|
||||
*fmt = *__ccdc_get_format(ccdc, sd_state, CCDC_PAD_SINK,
|
||||
which);
|
||||
|
||||
/* In SYNC mode the bridge converts YUV formats from 2X8 to
|
||||
* 1X16. In BT.656 no such conversion occurs. As we don't know
|
||||
@ -2024,7 +2031,7 @@ ccdc_try_format(struct isp_ccdc_device *ccdc, struct v4l2_subdev_pad_config *cfg
|
||||
}
|
||||
|
||||
/* Hardcode the output size to the crop rectangle size. */
|
||||
crop = __ccdc_get_crop(ccdc, cfg, which);
|
||||
crop = __ccdc_get_crop(ccdc, sd_state, which);
|
||||
fmt->width = crop->width;
|
||||
fmt->height = crop->height;
|
||||
|
||||
@ -2041,7 +2048,8 @@ ccdc_try_format(struct isp_ccdc_device *ccdc, struct v4l2_subdev_pad_config *cfg
|
||||
break;
|
||||
|
||||
case CCDC_PAD_SOURCE_VP:
|
||||
*fmt = *__ccdc_get_format(ccdc, cfg, CCDC_PAD_SINK, which);
|
||||
*fmt = *__ccdc_get_format(ccdc, sd_state, CCDC_PAD_SINK,
|
||||
which);
|
||||
|
||||
/* The video port interface truncates the data to 10 bits. */
|
||||
info = omap3isp_video_format_info(fmt->code);
|
||||
@ -2118,7 +2126,7 @@ static void ccdc_try_crop(struct isp_ccdc_device *ccdc,
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int ccdc_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct isp_ccdc_device *ccdc = v4l2_get_subdevdata(sd);
|
||||
@ -2133,7 +2141,7 @@ static int ccdc_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
break;
|
||||
|
||||
case CCDC_PAD_SOURCE_OF:
|
||||
format = __ccdc_get_format(ccdc, cfg, code->pad,
|
||||
format = __ccdc_get_format(ccdc, sd_state, code->pad,
|
||||
code->which);
|
||||
|
||||
if (format->code == MEDIA_BUS_FMT_YUYV8_2X8 ||
|
||||
@ -2164,7 +2172,7 @@ static int ccdc_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
if (code->index != 0)
|
||||
return -EINVAL;
|
||||
|
||||
format = __ccdc_get_format(ccdc, cfg, code->pad,
|
||||
format = __ccdc_get_format(ccdc, sd_state, code->pad,
|
||||
code->which);
|
||||
|
||||
/* A pixel code equal to 0 means that the video port doesn't
|
||||
@ -2184,7 +2192,7 @@ static int ccdc_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ccdc_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct isp_ccdc_device *ccdc = v4l2_get_subdevdata(sd);
|
||||
@ -2196,7 +2204,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, fse->which);
|
||||
ccdc_try_format(ccdc, sd_state, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
@ -2206,7 +2214,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, fse->which);
|
||||
ccdc_try_format(ccdc, sd_state, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
@ -2224,7 +2232,8 @@ static int ccdc_enum_frame_size(struct v4l2_subdev *sd,
|
||||
*
|
||||
* Return 0 on success or a negative error code otherwise.
|
||||
*/
|
||||
static int ccdc_get_selection(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
static int ccdc_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct isp_ccdc_device *ccdc = v4l2_get_subdevdata(sd);
|
||||
@ -2240,12 +2249,13 @@ static int ccdc_get_selection(struct v4l2_subdev *sd, struct v4l2_subdev_pad_con
|
||||
sel->r.width = INT_MAX;
|
||||
sel->r.height = INT_MAX;
|
||||
|
||||
format = __ccdc_get_format(ccdc, cfg, CCDC_PAD_SINK, sel->which);
|
||||
format = __ccdc_get_format(ccdc, sd_state, CCDC_PAD_SINK,
|
||||
sel->which);
|
||||
ccdc_try_crop(ccdc, format, &sel->r);
|
||||
break;
|
||||
|
||||
case V4L2_SEL_TGT_CROP:
|
||||
sel->r = *__ccdc_get_crop(ccdc, cfg, sel->which);
|
||||
sel->r = *__ccdc_get_crop(ccdc, sd_state, sel->which);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -2266,7 +2276,8 @@ static int ccdc_get_selection(struct v4l2_subdev *sd, struct v4l2_subdev_pad_con
|
||||
*
|
||||
* Return 0 on success or a negative error code otherwise.
|
||||
*/
|
||||
static int ccdc_set_selection(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
static int ccdc_set_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct isp_ccdc_device *ccdc = v4l2_get_subdevdata(sd);
|
||||
@ -2285,17 +2296,19 @@ static int ccdc_set_selection(struct v4l2_subdev *sd, struct v4l2_subdev_pad_con
|
||||
* rectangle.
|
||||
*/
|
||||
if (sel->flags & V4L2_SEL_FLAG_KEEP_CONFIG) {
|
||||
sel->r = *__ccdc_get_crop(ccdc, cfg, sel->which);
|
||||
sel->r = *__ccdc_get_crop(ccdc, sd_state, sel->which);
|
||||
return 0;
|
||||
}
|
||||
|
||||
format = __ccdc_get_format(ccdc, cfg, CCDC_PAD_SINK, sel->which);
|
||||
format = __ccdc_get_format(ccdc, sd_state, CCDC_PAD_SINK, sel->which);
|
||||
ccdc_try_crop(ccdc, format, &sel->r);
|
||||
*__ccdc_get_crop(ccdc, cfg, sel->which) = sel->r;
|
||||
*__ccdc_get_crop(ccdc, sd_state, sel->which) = sel->r;
|
||||
|
||||
/* Update the source format. */
|
||||
format = __ccdc_get_format(ccdc, cfg, CCDC_PAD_SOURCE_OF, sel->which);
|
||||
ccdc_try_format(ccdc, cfg, CCDC_PAD_SOURCE_OF, format, sel->which);
|
||||
format = __ccdc_get_format(ccdc, sd_state, CCDC_PAD_SOURCE_OF,
|
||||
sel->which);
|
||||
ccdc_try_format(ccdc, sd_state, CCDC_PAD_SOURCE_OF, format,
|
||||
sel->which);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -2309,13 +2322,14 @@ static int ccdc_set_selection(struct v4l2_subdev *sd, struct v4l2_subdev_pad_con
|
||||
* Return 0 on success or -EINVAL if the pad is invalid or doesn't correspond
|
||||
* to the format type.
|
||||
*/
|
||||
static int ccdc_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
static int ccdc_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct isp_ccdc_device *ccdc = v4l2_get_subdevdata(sd);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = __ccdc_get_format(ccdc, cfg, fmt->pad, fmt->which);
|
||||
format = __ccdc_get_format(ccdc, sd_state, fmt->pad, fmt->which);
|
||||
if (format == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
@ -2332,24 +2346,25 @@ static int ccdc_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config
|
||||
* Return 0 on success or -EINVAL if the pad is invalid or doesn't correspond
|
||||
* to the format type.
|
||||
*/
|
||||
static int ccdc_set_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
static int ccdc_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct isp_ccdc_device *ccdc = v4l2_get_subdevdata(sd);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
struct v4l2_rect *crop;
|
||||
|
||||
format = __ccdc_get_format(ccdc, cfg, fmt->pad, fmt->which);
|
||||
format = __ccdc_get_format(ccdc, sd_state, fmt->pad, fmt->which);
|
||||
if (format == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
ccdc_try_format(ccdc, cfg, fmt->pad, &fmt->format, fmt->which);
|
||||
ccdc_try_format(ccdc, sd_state, fmt->pad, &fmt->format, fmt->which);
|
||||
*format = fmt->format;
|
||||
|
||||
/* Propagate the format from sink to source */
|
||||
if (fmt->pad == CCDC_PAD_SINK) {
|
||||
/* Reset the crop rectangle. */
|
||||
crop = __ccdc_get_crop(ccdc, cfg, fmt->which);
|
||||
crop = __ccdc_get_crop(ccdc, sd_state, fmt->which);
|
||||
crop->left = 0;
|
||||
crop->top = 0;
|
||||
crop->width = fmt->format.width;
|
||||
@ -2358,16 +2373,16 @@ static int ccdc_set_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config
|
||||
ccdc_try_crop(ccdc, &fmt->format, crop);
|
||||
|
||||
/* Update the source formats. */
|
||||
format = __ccdc_get_format(ccdc, cfg, CCDC_PAD_SOURCE_OF,
|
||||
format = __ccdc_get_format(ccdc, sd_state, CCDC_PAD_SOURCE_OF,
|
||||
fmt->which);
|
||||
*format = fmt->format;
|
||||
ccdc_try_format(ccdc, cfg, CCDC_PAD_SOURCE_OF, format,
|
||||
ccdc_try_format(ccdc, sd_state, CCDC_PAD_SOURCE_OF, format,
|
||||
fmt->which);
|
||||
|
||||
format = __ccdc_get_format(ccdc, cfg, CCDC_PAD_SOURCE_VP,
|
||||
format = __ccdc_get_format(ccdc, sd_state, CCDC_PAD_SOURCE_VP,
|
||||
fmt->which);
|
||||
*format = fmt->format;
|
||||
ccdc_try_format(ccdc, cfg, CCDC_PAD_SOURCE_VP, format,
|
||||
ccdc_try_format(ccdc, sd_state, CCDC_PAD_SOURCE_VP, format,
|
||||
fmt->which);
|
||||
}
|
||||
|
||||
@ -2454,7 +2469,7 @@ static int ccdc_init_formats(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
format.format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
|
||||
format.format.width = 4096;
|
||||
format.format.height = 4096;
|
||||
ccdc_set_format(sd, fh ? fh->pad : NULL, &format);
|
||||
ccdc_set_format(sd, fh ? fh->state : NULL, &format);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -618,11 +618,13 @@ static const unsigned int ccp2_fmts[] = {
|
||||
* return format structure or NULL on error
|
||||
*/
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__ccp2_get_format(struct isp_ccp2_device *ccp2, struct v4l2_subdev_pad_config *cfg,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
__ccp2_get_format(struct isp_ccp2_device *ccp2,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
if (which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return v4l2_subdev_get_try_format(&ccp2->subdev, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(&ccp2->subdev, sd_state,
|
||||
pad);
|
||||
else
|
||||
return &ccp2->formats[pad];
|
||||
}
|
||||
@ -636,7 +638,8 @@ __ccp2_get_format(struct isp_ccp2_device *ccp2, struct v4l2_subdev_pad_config *c
|
||||
* @which : wanted subdev format
|
||||
*/
|
||||
static void ccp2_try_format(struct isp_ccp2_device *ccp2,
|
||||
struct v4l2_subdev_pad_config *cfg, unsigned int pad,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad,
|
||||
struct v4l2_mbus_framefmt *fmt,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
@ -670,7 +673,8 @@ static void ccp2_try_format(struct isp_ccp2_device *ccp2,
|
||||
* When CCP2 write to memory feature will be added this
|
||||
* should be changed properly.
|
||||
*/
|
||||
format = __ccp2_get_format(ccp2, cfg, CCP2_PAD_SINK, which);
|
||||
format = __ccp2_get_format(ccp2, sd_state, CCP2_PAD_SINK,
|
||||
which);
|
||||
memcpy(fmt, format, sizeof(*fmt));
|
||||
fmt->code = MEDIA_BUS_FMT_SGRBG10_1X10;
|
||||
break;
|
||||
@ -688,7 +692,7 @@ static void ccp2_try_format(struct isp_ccp2_device *ccp2,
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int ccp2_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
|
||||
@ -703,8 +707,8 @@ static int ccp2_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
if (code->index != 0)
|
||||
return -EINVAL;
|
||||
|
||||
format = __ccp2_get_format(ccp2, cfg, CCP2_PAD_SINK,
|
||||
code->which);
|
||||
format = __ccp2_get_format(ccp2, sd_state, CCP2_PAD_SINK,
|
||||
code->which);
|
||||
code->code = format->code;
|
||||
}
|
||||
|
||||
@ -712,7 +716,7 @@ static int ccp2_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int ccp2_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
|
||||
@ -724,7 +728,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, fse->which);
|
||||
ccp2_try_format(ccp2, sd_state, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
@ -734,7 +738,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, fse->which);
|
||||
ccp2_try_format(ccp2, sd_state, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
@ -748,13 +752,14 @@ static int ccp2_enum_frame_size(struct v4l2_subdev *sd,
|
||||
* @fmt : pointer to v4l2 subdev format structure
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int ccp2_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
static int ccp2_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = __ccp2_get_format(ccp2, cfg, fmt->pad, fmt->which);
|
||||
format = __ccp2_get_format(ccp2, sd_state, fmt->pad, fmt->which);
|
||||
if (format == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
@ -769,25 +774,27 @@ static int ccp2_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config
|
||||
* @fmt : pointer to v4l2 subdev format structure
|
||||
* returns zero
|
||||
*/
|
||||
static int ccp2_set_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
static int ccp2_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct isp_ccp2_device *ccp2 = v4l2_get_subdevdata(sd);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = __ccp2_get_format(ccp2, cfg, fmt->pad, fmt->which);
|
||||
format = __ccp2_get_format(ccp2, sd_state, fmt->pad, fmt->which);
|
||||
if (format == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
ccp2_try_format(ccp2, cfg, fmt->pad, &fmt->format, fmt->which);
|
||||
ccp2_try_format(ccp2, sd_state, fmt->pad, &fmt->format, fmt->which);
|
||||
*format = fmt->format;
|
||||
|
||||
/* Propagate the format from sink to source */
|
||||
if (fmt->pad == CCP2_PAD_SINK) {
|
||||
format = __ccp2_get_format(ccp2, cfg, CCP2_PAD_SOURCE,
|
||||
format = __ccp2_get_format(ccp2, sd_state, CCP2_PAD_SOURCE,
|
||||
fmt->which);
|
||||
*format = fmt->format;
|
||||
ccp2_try_format(ccp2, cfg, CCP2_PAD_SOURCE, format, fmt->which);
|
||||
ccp2_try_format(ccp2, sd_state, CCP2_PAD_SOURCE, format,
|
||||
fmt->which);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -812,7 +819,7 @@ static int ccp2_init_formats(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
format.format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
|
||||
format.format.width = 4096;
|
||||
format.format.height = 4096;
|
||||
ccp2_set_format(sd, fh ? fh->pad : NULL, &format);
|
||||
ccp2_set_format(sd, fh ? fh->state : NULL, &format);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -827,17 +827,20 @@ static const struct isp_video_operations csi2_ispvideo_ops = {
|
||||
*/
|
||||
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__csi2_get_format(struct isp_csi2_device *csi2, struct v4l2_subdev_pad_config *cfg,
|
||||
__csi2_get_format(struct isp_csi2_device *csi2,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
if (which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return v4l2_subdev_get_try_format(&csi2->subdev, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(&csi2->subdev, sd_state,
|
||||
pad);
|
||||
else
|
||||
return &csi2->formats[pad];
|
||||
}
|
||||
|
||||
static void
|
||||
csi2_try_format(struct isp_csi2_device *csi2, struct v4l2_subdev_pad_config *cfg,
|
||||
csi2_try_format(struct isp_csi2_device *csi2,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, struct v4l2_mbus_framefmt *fmt,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
@ -867,7 +870,8 @@ csi2_try_format(struct isp_csi2_device *csi2, struct v4l2_subdev_pad_config *cfg
|
||||
* compression.
|
||||
*/
|
||||
pixelcode = fmt->code;
|
||||
format = __csi2_get_format(csi2, cfg, CSI2_PAD_SINK, which);
|
||||
format = __csi2_get_format(csi2, sd_state, CSI2_PAD_SINK,
|
||||
which);
|
||||
memcpy(fmt, format, sizeof(*fmt));
|
||||
|
||||
/*
|
||||
@ -893,7 +897,7 @@ csi2_try_format(struct isp_csi2_device *csi2, struct v4l2_subdev_pad_config *cfg
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int csi2_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd);
|
||||
@ -906,7 +910,7 @@ static int csi2_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
|
||||
code->code = csi2_input_fmts[code->index];
|
||||
} else {
|
||||
format = __csi2_get_format(csi2, cfg, CSI2_PAD_SINK,
|
||||
format = __csi2_get_format(csi2, sd_state, CSI2_PAD_SINK,
|
||||
code->which);
|
||||
switch (code->index) {
|
||||
case 0:
|
||||
@ -930,7 +934,7 @@ static int csi2_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int csi2_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd);
|
||||
@ -942,7 +946,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, fse->which);
|
||||
csi2_try_format(csi2, sd_state, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
@ -952,7 +956,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, fse->which);
|
||||
csi2_try_format(csi2, sd_state, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
@ -966,13 +970,14 @@ static int csi2_enum_frame_size(struct v4l2_subdev *sd,
|
||||
* @fmt: pointer to v4l2 subdev format structure
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int csi2_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
static int csi2_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = __csi2_get_format(csi2, cfg, fmt->pad, fmt->which);
|
||||
format = __csi2_get_format(csi2, sd_state, fmt->pad, fmt->which);
|
||||
if (format == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
@ -987,25 +992,27 @@ static int csi2_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config
|
||||
* @fmt: pointer to v4l2 subdev format structure
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int csi2_set_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
static int csi2_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct isp_csi2_device *csi2 = v4l2_get_subdevdata(sd);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = __csi2_get_format(csi2, cfg, fmt->pad, fmt->which);
|
||||
format = __csi2_get_format(csi2, sd_state, fmt->pad, fmt->which);
|
||||
if (format == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
csi2_try_format(csi2, cfg, fmt->pad, &fmt->format, fmt->which);
|
||||
csi2_try_format(csi2, sd_state, fmt->pad, &fmt->format, fmt->which);
|
||||
*format = fmt->format;
|
||||
|
||||
/* Propagate the format from sink to source */
|
||||
if (fmt->pad == CSI2_PAD_SINK) {
|
||||
format = __csi2_get_format(csi2, cfg, CSI2_PAD_SOURCE,
|
||||
format = __csi2_get_format(csi2, sd_state, CSI2_PAD_SOURCE,
|
||||
fmt->which);
|
||||
*format = fmt->format;
|
||||
csi2_try_format(csi2, cfg, CSI2_PAD_SOURCE, format, fmt->which);
|
||||
csi2_try_format(csi2, sd_state, CSI2_PAD_SOURCE, format,
|
||||
fmt->which);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -1030,7 +1037,7 @@ static int csi2_init_formats(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
format.format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
|
||||
format.format.width = 4096;
|
||||
format.format.height = 4096;
|
||||
csi2_set_format(sd, fh ? fh->pad : NULL, &format);
|
||||
csi2_set_format(sd, fh ? fh->state : NULL, &format);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1679,21 +1679,25 @@ static int preview_set_stream(struct v4l2_subdev *sd, int enable)
|
||||
}
|
||||
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__preview_get_format(struct isp_prev_device *prev, struct v4l2_subdev_pad_config *cfg,
|
||||
__preview_get_format(struct isp_prev_device *prev,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
if (which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return v4l2_subdev_get_try_format(&prev->subdev, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(&prev->subdev, sd_state,
|
||||
pad);
|
||||
else
|
||||
return &prev->formats[pad];
|
||||
}
|
||||
|
||||
static struct v4l2_rect *
|
||||
__preview_get_crop(struct isp_prev_device *prev, struct v4l2_subdev_pad_config *cfg,
|
||||
__preview_get_crop(struct isp_prev_device *prev,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
if (which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return v4l2_subdev_get_try_crop(&prev->subdev, cfg, PREV_PAD_SINK);
|
||||
return v4l2_subdev_get_try_crop(&prev->subdev, sd_state,
|
||||
PREV_PAD_SINK);
|
||||
else
|
||||
return &prev->crop;
|
||||
}
|
||||
@ -1729,7 +1733,8 @@ static const unsigned int preview_output_fmts[] = {
|
||||
* engine limits and the format and crop rectangles on other pads.
|
||||
*/
|
||||
static void preview_try_format(struct isp_prev_device *prev,
|
||||
struct v4l2_subdev_pad_config *cfg, unsigned int pad,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad,
|
||||
struct v4l2_mbus_framefmt *fmt,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
@ -1770,7 +1775,8 @@ static void preview_try_format(struct isp_prev_device *prev,
|
||||
|
||||
case PREV_PAD_SOURCE:
|
||||
pixelcode = fmt->code;
|
||||
*fmt = *__preview_get_format(prev, cfg, PREV_PAD_SINK, which);
|
||||
*fmt = *__preview_get_format(prev, sd_state, PREV_PAD_SINK,
|
||||
which);
|
||||
|
||||
switch (pixelcode) {
|
||||
case MEDIA_BUS_FMT_YUYV8_1X16:
|
||||
@ -1788,7 +1794,7 @@ static void preview_try_format(struct isp_prev_device *prev,
|
||||
* is not supported yet, hardcode the output size to the crop
|
||||
* rectangle size.
|
||||
*/
|
||||
crop = __preview_get_crop(prev, cfg, which);
|
||||
crop = __preview_get_crop(prev, sd_state, which);
|
||||
fmt->width = crop->width;
|
||||
fmt->height = crop->height;
|
||||
|
||||
@ -1862,7 +1868,7 @@ static void preview_try_crop(struct isp_prev_device *prev,
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int preview_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
switch (code->pad) {
|
||||
@ -1886,7 +1892,7 @@ static int preview_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int preview_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
|
||||
@ -1898,7 +1904,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, fse->which);
|
||||
preview_try_format(prev, sd_state, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
@ -1908,7 +1914,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, fse->which);
|
||||
preview_try_format(prev, sd_state, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
@ -1926,7 +1932,7 @@ static int preview_enum_frame_size(struct v4l2_subdev *sd,
|
||||
* Return 0 on success or a negative error code otherwise.
|
||||
*/
|
||||
static int preview_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
|
||||
@ -1942,13 +1948,13 @@ static int preview_get_selection(struct v4l2_subdev *sd,
|
||||
sel->r.width = INT_MAX;
|
||||
sel->r.height = INT_MAX;
|
||||
|
||||
format = __preview_get_format(prev, cfg, PREV_PAD_SINK,
|
||||
format = __preview_get_format(prev, sd_state, PREV_PAD_SINK,
|
||||
sel->which);
|
||||
preview_try_crop(prev, format, &sel->r);
|
||||
break;
|
||||
|
||||
case V4L2_SEL_TGT_CROP:
|
||||
sel->r = *__preview_get_crop(prev, cfg, sel->which);
|
||||
sel->r = *__preview_get_crop(prev, sd_state, sel->which);
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -1969,7 +1975,7 @@ static int preview_get_selection(struct v4l2_subdev *sd,
|
||||
* Return 0 on success or a negative error code otherwise.
|
||||
*/
|
||||
static int preview_set_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
|
||||
@ -1988,17 +1994,20 @@ static int preview_set_selection(struct v4l2_subdev *sd,
|
||||
* rectangle.
|
||||
*/
|
||||
if (sel->flags & V4L2_SEL_FLAG_KEEP_CONFIG) {
|
||||
sel->r = *__preview_get_crop(prev, cfg, sel->which);
|
||||
sel->r = *__preview_get_crop(prev, sd_state, sel->which);
|
||||
return 0;
|
||||
}
|
||||
|
||||
format = __preview_get_format(prev, cfg, PREV_PAD_SINK, sel->which);
|
||||
format = __preview_get_format(prev, sd_state, PREV_PAD_SINK,
|
||||
sel->which);
|
||||
preview_try_crop(prev, format, &sel->r);
|
||||
*__preview_get_crop(prev, cfg, sel->which) = sel->r;
|
||||
*__preview_get_crop(prev, sd_state, sel->which) = sel->r;
|
||||
|
||||
/* Update the source format. */
|
||||
format = __preview_get_format(prev, cfg, PREV_PAD_SOURCE, sel->which);
|
||||
preview_try_format(prev, cfg, PREV_PAD_SOURCE, format, sel->which);
|
||||
format = __preview_get_format(prev, sd_state, PREV_PAD_SOURCE,
|
||||
sel->which);
|
||||
preview_try_format(prev, sd_state, PREV_PAD_SOURCE, format,
|
||||
sel->which);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -2010,13 +2019,14 @@ static int preview_set_selection(struct v4l2_subdev *sd,
|
||||
* @fmt: pointer to v4l2 subdev format structure
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int preview_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
static int preview_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = __preview_get_format(prev, cfg, fmt->pad, fmt->which);
|
||||
format = __preview_get_format(prev, sd_state, fmt->pad, fmt->which);
|
||||
if (format == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
@ -2031,24 +2041,25 @@ static int preview_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_con
|
||||
* @fmt: pointer to v4l2 subdev format structure
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int preview_set_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
static int preview_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct isp_prev_device *prev = v4l2_get_subdevdata(sd);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
struct v4l2_rect *crop;
|
||||
|
||||
format = __preview_get_format(prev, cfg, fmt->pad, fmt->which);
|
||||
format = __preview_get_format(prev, sd_state, fmt->pad, fmt->which);
|
||||
if (format == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
preview_try_format(prev, cfg, fmt->pad, &fmt->format, fmt->which);
|
||||
preview_try_format(prev, sd_state, fmt->pad, &fmt->format, fmt->which);
|
||||
*format = fmt->format;
|
||||
|
||||
/* Propagate the format from sink to source */
|
||||
if (fmt->pad == PREV_PAD_SINK) {
|
||||
/* Reset the crop rectangle. */
|
||||
crop = __preview_get_crop(prev, cfg, fmt->which);
|
||||
crop = __preview_get_crop(prev, sd_state, fmt->which);
|
||||
crop->left = 0;
|
||||
crop->top = 0;
|
||||
crop->width = fmt->format.width;
|
||||
@ -2057,9 +2068,9 @@ static int preview_set_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_con
|
||||
preview_try_crop(prev, &fmt->format, crop);
|
||||
|
||||
/* Update the source format. */
|
||||
format = __preview_get_format(prev, cfg, PREV_PAD_SOURCE,
|
||||
format = __preview_get_format(prev, sd_state, PREV_PAD_SOURCE,
|
||||
fmt->which);
|
||||
preview_try_format(prev, cfg, PREV_PAD_SOURCE, format,
|
||||
preview_try_format(prev, sd_state, PREV_PAD_SOURCE, format,
|
||||
fmt->which);
|
||||
}
|
||||
|
||||
@ -2086,7 +2097,7 @@ static int preview_init_formats(struct v4l2_subdev *sd,
|
||||
format.format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
|
||||
format.format.width = 4096;
|
||||
format.format.height = 4096;
|
||||
preview_set_format(sd, fh ? fh->pad : NULL, &format);
|
||||
preview_set_format(sd, fh ? fh->state : NULL, &format);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -114,11 +114,12 @@ static const struct isprsz_coef filter_coefs = {
|
||||
* return zero
|
||||
*/
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__resizer_get_format(struct isp_res_device *res, struct v4l2_subdev_pad_config *cfg,
|
||||
__resizer_get_format(struct isp_res_device *res,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad, enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
if (which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return v4l2_subdev_get_try_format(&res->subdev, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(&res->subdev, sd_state, pad);
|
||||
else
|
||||
return &res->formats[pad];
|
||||
}
|
||||
@ -130,11 +131,13 @@ __resizer_get_format(struct isp_res_device *res, struct v4l2_subdev_pad_config *
|
||||
* @which : wanted subdev crop rectangle
|
||||
*/
|
||||
static struct v4l2_rect *
|
||||
__resizer_get_crop(struct isp_res_device *res, struct v4l2_subdev_pad_config *cfg,
|
||||
__resizer_get_crop(struct isp_res_device *res,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
if (which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return v4l2_subdev_get_try_crop(&res->subdev, cfg, RESZ_PAD_SINK);
|
||||
return v4l2_subdev_get_try_crop(&res->subdev, sd_state,
|
||||
RESZ_PAD_SINK);
|
||||
else
|
||||
return &res->crop.request;
|
||||
}
|
||||
@ -1220,7 +1223,7 @@ static void resizer_try_crop(const struct v4l2_mbus_framefmt *sink,
|
||||
* Return 0 on success or a negative error code otherwise.
|
||||
*/
|
||||
static int resizer_get_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct isp_res_device *res = v4l2_get_subdevdata(sd);
|
||||
@ -1231,9 +1234,9 @@ static int resizer_get_selection(struct v4l2_subdev *sd,
|
||||
if (sel->pad != RESZ_PAD_SINK)
|
||||
return -EINVAL;
|
||||
|
||||
format_sink = __resizer_get_format(res, cfg, RESZ_PAD_SINK,
|
||||
format_sink = __resizer_get_format(res, sd_state, RESZ_PAD_SINK,
|
||||
sel->which);
|
||||
format_source = __resizer_get_format(res, cfg, RESZ_PAD_SOURCE,
|
||||
format_source = __resizer_get_format(res, sd_state, RESZ_PAD_SOURCE,
|
||||
sel->which);
|
||||
|
||||
switch (sel->target) {
|
||||
@ -1248,7 +1251,7 @@ static int resizer_get_selection(struct v4l2_subdev *sd,
|
||||
break;
|
||||
|
||||
case V4L2_SEL_TGT_CROP:
|
||||
sel->r = *__resizer_get_crop(res, cfg, sel->which);
|
||||
sel->r = *__resizer_get_crop(res, sd_state, sel->which);
|
||||
resizer_calc_ratios(res, &sel->r, format_source, &ratio);
|
||||
break;
|
||||
|
||||
@ -1273,7 +1276,7 @@ static int resizer_get_selection(struct v4l2_subdev *sd,
|
||||
* Return 0 on success or a negative error code otherwise.
|
||||
*/
|
||||
static int resizer_set_selection(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_selection *sel)
|
||||
{
|
||||
struct isp_res_device *res = v4l2_get_subdevdata(sd);
|
||||
@ -1287,9 +1290,9 @@ static int resizer_set_selection(struct v4l2_subdev *sd,
|
||||
sel->pad != RESZ_PAD_SINK)
|
||||
return -EINVAL;
|
||||
|
||||
format_sink = __resizer_get_format(res, cfg, RESZ_PAD_SINK,
|
||||
format_sink = __resizer_get_format(res, sd_state, RESZ_PAD_SINK,
|
||||
sel->which);
|
||||
format_source = *__resizer_get_format(res, cfg, RESZ_PAD_SOURCE,
|
||||
format_source = *__resizer_get_format(res, sd_state, RESZ_PAD_SOURCE,
|
||||
sel->which);
|
||||
|
||||
dev_dbg(isp->dev, "%s(%s): req %ux%u -> (%d,%d)/%ux%u -> %ux%u\n",
|
||||
@ -1307,7 +1310,7 @@ static int resizer_set_selection(struct v4l2_subdev *sd,
|
||||
* stored the mangled rectangle.
|
||||
*/
|
||||
resizer_try_crop(format_sink, &format_source, &sel->r);
|
||||
*__resizer_get_crop(res, cfg, sel->which) = sel->r;
|
||||
*__resizer_get_crop(res, sd_state, sel->which) = sel->r;
|
||||
resizer_calc_ratios(res, &sel->r, &format_source, &ratio);
|
||||
|
||||
dev_dbg(isp->dev, "%s(%s): got %ux%u -> (%d,%d)/%ux%u -> %ux%u\n",
|
||||
@ -1317,7 +1320,8 @@ static int resizer_set_selection(struct v4l2_subdev *sd,
|
||||
format_source.width, format_source.height);
|
||||
|
||||
if (sel->which == V4L2_SUBDEV_FORMAT_TRY) {
|
||||
*__resizer_get_format(res, cfg, RESZ_PAD_SOURCE, sel->which) =
|
||||
*__resizer_get_format(res, sd_state, RESZ_PAD_SOURCE,
|
||||
sel->which) =
|
||||
format_source;
|
||||
return 0;
|
||||
}
|
||||
@ -1328,7 +1332,7 @@ static int resizer_set_selection(struct v4l2_subdev *sd,
|
||||
*/
|
||||
spin_lock_irqsave(&res->lock, flags);
|
||||
|
||||
*__resizer_get_format(res, cfg, RESZ_PAD_SOURCE, sel->which) =
|
||||
*__resizer_get_format(res, sd_state, RESZ_PAD_SOURCE, sel->which) =
|
||||
format_source;
|
||||
|
||||
res->ratio = ratio;
|
||||
@ -1371,7 +1375,8 @@ static unsigned int resizer_max_in_width(struct isp_res_device *res)
|
||||
* @which : wanted subdev format
|
||||
*/
|
||||
static void resizer_try_format(struct isp_res_device *res,
|
||||
struct v4l2_subdev_pad_config *cfg, unsigned int pad,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad,
|
||||
struct v4l2_mbus_framefmt *fmt,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
@ -1392,10 +1397,11 @@ static void resizer_try_format(struct isp_res_device *res,
|
||||
break;
|
||||
|
||||
case RESZ_PAD_SOURCE:
|
||||
format = __resizer_get_format(res, cfg, RESZ_PAD_SINK, which);
|
||||
format = __resizer_get_format(res, sd_state, RESZ_PAD_SINK,
|
||||
which);
|
||||
fmt->code = format->code;
|
||||
|
||||
crop = *__resizer_get_crop(res, cfg, which);
|
||||
crop = *__resizer_get_crop(res, sd_state, which);
|
||||
resizer_calc_ratios(res, &crop, fmt, &ratio);
|
||||
break;
|
||||
}
|
||||
@ -1412,7 +1418,7 @@ static void resizer_try_format(struct isp_res_device *res,
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int resizer_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct isp_res_device *res = v4l2_get_subdevdata(sd);
|
||||
@ -1427,7 +1433,7 @@ static int resizer_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
if (code->index != 0)
|
||||
return -EINVAL;
|
||||
|
||||
format = __resizer_get_format(res, cfg, RESZ_PAD_SINK,
|
||||
format = __resizer_get_format(res, sd_state, RESZ_PAD_SINK,
|
||||
code->which);
|
||||
code->code = format->code;
|
||||
}
|
||||
@ -1436,7 +1442,7 @@ static int resizer_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
static int resizer_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct isp_res_device *res = v4l2_get_subdevdata(sd);
|
||||
@ -1448,7 +1454,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, fse->which);
|
||||
resizer_try_format(res, sd_state, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
@ -1458,7 +1464,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, fse->which);
|
||||
resizer_try_format(res, sd_state, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
@ -1472,13 +1478,14 @@ static int resizer_enum_frame_size(struct v4l2_subdev *sd,
|
||||
* @fmt : pointer to v4l2 subdev format structure
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int resizer_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
static int resizer_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct isp_res_device *res = v4l2_get_subdevdata(sd);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = __resizer_get_format(res, cfg, fmt->pad, fmt->which);
|
||||
format = __resizer_get_format(res, sd_state, fmt->pad, fmt->which);
|
||||
if (format == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
@ -1493,33 +1500,34 @@ static int resizer_get_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_con
|
||||
* @fmt : pointer to v4l2 subdev format structure
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int resizer_set_format(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
|
||||
static int resizer_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct isp_res_device *res = v4l2_get_subdevdata(sd);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
struct v4l2_rect *crop;
|
||||
|
||||
format = __resizer_get_format(res, cfg, fmt->pad, fmt->which);
|
||||
format = __resizer_get_format(res, sd_state, fmt->pad, fmt->which);
|
||||
if (format == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
resizer_try_format(res, cfg, fmt->pad, &fmt->format, fmt->which);
|
||||
resizer_try_format(res, sd_state, fmt->pad, &fmt->format, fmt->which);
|
||||
*format = fmt->format;
|
||||
|
||||
if (fmt->pad == RESZ_PAD_SINK) {
|
||||
/* reset crop rectangle */
|
||||
crop = __resizer_get_crop(res, cfg, fmt->which);
|
||||
crop = __resizer_get_crop(res, sd_state, fmt->which);
|
||||
crop->left = 0;
|
||||
crop->top = 0;
|
||||
crop->width = fmt->format.width;
|
||||
crop->height = fmt->format.height;
|
||||
|
||||
/* Propagate the format from sink to source */
|
||||
format = __resizer_get_format(res, cfg, RESZ_PAD_SOURCE,
|
||||
format = __resizer_get_format(res, sd_state, RESZ_PAD_SOURCE,
|
||||
fmt->which);
|
||||
*format = fmt->format;
|
||||
resizer_try_format(res, cfg, RESZ_PAD_SOURCE, format,
|
||||
resizer_try_format(res, sd_state, RESZ_PAD_SOURCE, format,
|
||||
fmt->which);
|
||||
}
|
||||
|
||||
@ -1570,7 +1578,7 @@ static int resizer_init_formats(struct v4l2_subdev *sd,
|
||||
format.format.code = MEDIA_BUS_FMT_YUYV8_1X16;
|
||||
format.format.width = 4096;
|
||||
format.format.height = 4096;
|
||||
resizer_set_format(sd, fh ? fh->pad : NULL, &format);
|
||||
resizer_set_format(sd, fh ? fh->state : NULL, &format);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1792,6 +1792,9 @@ static int pxac_vidioc_try_fmt_vid_cap(struct file *filp, void *priv,
|
||||
const struct pxa_camera_format_xlate *xlate;
|
||||
struct v4l2_pix_format *pix = &f->fmt.pix;
|
||||
struct v4l2_subdev_pad_config pad_cfg;
|
||||
struct v4l2_subdev_state pad_state = {
|
||||
.pads = &pad_cfg
|
||||
};
|
||||
struct v4l2_subdev_format format = {
|
||||
.which = V4L2_SUBDEV_FORMAT_TRY,
|
||||
};
|
||||
@ -1816,7 +1819,7 @@ static int pxac_vidioc_try_fmt_vid_cap(struct file *filp, void *priv,
|
||||
pixfmt == V4L2_PIX_FMT_YUV422P ? 4 : 0);
|
||||
|
||||
v4l2_fill_mbus_format(mf, pix, xlate->code);
|
||||
ret = sensor_call(pcdev, pad, set_fmt, &pad_cfg, &format);
|
||||
ret = sensor_call(pcdev, pad, set_fmt, &pad_state, &format);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
@ -245,12 +245,13 @@ static int csid_set_stream(struct v4l2_subdev *sd, int enable)
|
||||
*/
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__csid_get_format(struct csid_device *csid,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
if (which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return v4l2_subdev_get_try_format(&csid->subdev, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(&csid->subdev, sd_state,
|
||||
pad);
|
||||
|
||||
return &csid->fmt[pad];
|
||||
}
|
||||
@ -264,7 +265,7 @@ __csid_get_format(struct csid_device *csid,
|
||||
* @which: wanted subdev format
|
||||
*/
|
||||
static void csid_try_format(struct csid_device *csid,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad,
|
||||
struct v4l2_mbus_framefmt *fmt,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
@ -297,7 +298,7 @@ static void csid_try_format(struct csid_device *csid,
|
||||
/* keep pad formats in sync */
|
||||
u32 code = fmt->code;
|
||||
|
||||
*fmt = *__csid_get_format(csid, cfg,
|
||||
*fmt = *__csid_get_format(csid, sd_state,
|
||||
MSM_CSID_PAD_SINK, which);
|
||||
fmt->code = csid->ops->src_pad_code(csid, fmt->code, 0, code);
|
||||
} else {
|
||||
@ -331,7 +332,7 @@ static void csid_try_format(struct csid_device *csid,
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int csid_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct csid_device *csid = v4l2_get_subdevdata(sd);
|
||||
@ -345,7 +346,7 @@ static int csid_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
if (csid->testgen_mode->cur.val == 0) {
|
||||
struct v4l2_mbus_framefmt *sink_fmt;
|
||||
|
||||
sink_fmt = __csid_get_format(csid, cfg,
|
||||
sink_fmt = __csid_get_format(csid, sd_state,
|
||||
MSM_CSID_PAD_SINK,
|
||||
code->which);
|
||||
|
||||
@ -372,7 +373,7 @@ static int csid_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int csid_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct csid_device *csid = v4l2_get_subdevdata(sd);
|
||||
@ -384,7 +385,7 @@ static int csid_enum_frame_size(struct v4l2_subdev *sd,
|
||||
format.code = fse->code;
|
||||
format.width = 1;
|
||||
format.height = 1;
|
||||
csid_try_format(csid, cfg, fse->pad, &format, fse->which);
|
||||
csid_try_format(csid, sd_state, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
@ -394,7 +395,7 @@ static int csid_enum_frame_size(struct v4l2_subdev *sd,
|
||||
format.code = fse->code;
|
||||
format.width = -1;
|
||||
format.height = -1;
|
||||
csid_try_format(csid, cfg, fse->pad, &format, fse->which);
|
||||
csid_try_format(csid, sd_state, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
@ -410,13 +411,13 @@ static int csid_enum_frame_size(struct v4l2_subdev *sd,
|
||||
* Return -EINVAL or zero on success
|
||||
*/
|
||||
static int csid_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct csid_device *csid = v4l2_get_subdevdata(sd);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = __csid_get_format(csid, cfg, fmt->pad, fmt->which);
|
||||
format = __csid_get_format(csid, sd_state, fmt->pad, fmt->which);
|
||||
if (format == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
@ -434,26 +435,26 @@ static int csid_get_format(struct v4l2_subdev *sd,
|
||||
* Return -EINVAL or zero on success
|
||||
*/
|
||||
static int csid_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct csid_device *csid = v4l2_get_subdevdata(sd);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = __csid_get_format(csid, cfg, fmt->pad, fmt->which);
|
||||
format = __csid_get_format(csid, sd_state, fmt->pad, fmt->which);
|
||||
if (format == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
csid_try_format(csid, cfg, fmt->pad, &fmt->format, fmt->which);
|
||||
csid_try_format(csid, sd_state, fmt->pad, &fmt->format, fmt->which);
|
||||
*format = fmt->format;
|
||||
|
||||
/* Propagate the format from sink to source */
|
||||
if (fmt->pad == MSM_CSID_PAD_SINK) {
|
||||
format = __csid_get_format(csid, cfg, MSM_CSID_PAD_SRC,
|
||||
format = __csid_get_format(csid, sd_state, MSM_CSID_PAD_SRC,
|
||||
fmt->which);
|
||||
|
||||
*format = fmt->format;
|
||||
csid_try_format(csid, cfg, MSM_CSID_PAD_SRC, format,
|
||||
csid_try_format(csid, sd_state, MSM_CSID_PAD_SRC, format,
|
||||
fmt->which);
|
||||
}
|
||||
|
||||
@ -482,7 +483,7 @@ static int csid_init_formats(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
|
||||
}
|
||||
};
|
||||
|
||||
return csid_set_format(sd, fh ? fh->pad : NULL, &format);
|
||||
return csid_set_format(sd, fh ? fh->state : NULL, &format);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -338,12 +338,13 @@ static int csiphy_set_stream(struct v4l2_subdev *sd, int enable)
|
||||
*/
|
||||
static struct v4l2_mbus_framefmt *
|
||||
__csiphy_get_format(struct csiphy_device *csiphy,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
{
|
||||
if (which == V4L2_SUBDEV_FORMAT_TRY)
|
||||
return v4l2_subdev_get_try_format(&csiphy->subdev, cfg, pad);
|
||||
return v4l2_subdev_get_try_format(&csiphy->subdev, sd_state,
|
||||
pad);
|
||||
|
||||
return &csiphy->fmt[pad];
|
||||
}
|
||||
@ -357,7 +358,7 @@ __csiphy_get_format(struct csiphy_device *csiphy,
|
||||
* @which: wanted subdev format
|
||||
*/
|
||||
static void csiphy_try_format(struct csiphy_device *csiphy,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
unsigned int pad,
|
||||
struct v4l2_mbus_framefmt *fmt,
|
||||
enum v4l2_subdev_format_whence which)
|
||||
@ -387,7 +388,8 @@ static void csiphy_try_format(struct csiphy_device *csiphy,
|
||||
case MSM_CSIPHY_PAD_SRC:
|
||||
/* Set and return a format same as sink pad */
|
||||
|
||||
*fmt = *__csiphy_get_format(csiphy, cfg, MSM_CSID_PAD_SINK,
|
||||
*fmt = *__csiphy_get_format(csiphy, sd_state,
|
||||
MSM_CSID_PAD_SINK,
|
||||
which);
|
||||
|
||||
break;
|
||||
@ -402,7 +404,7 @@ static void csiphy_try_format(struct csiphy_device *csiphy,
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int csiphy_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_mbus_code_enum *code)
|
||||
{
|
||||
struct csiphy_device *csiphy = v4l2_get_subdevdata(sd);
|
||||
@ -417,7 +419,8 @@ static int csiphy_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
if (code->index > 0)
|
||||
return -EINVAL;
|
||||
|
||||
format = __csiphy_get_format(csiphy, cfg, MSM_CSIPHY_PAD_SINK,
|
||||
format = __csiphy_get_format(csiphy, sd_state,
|
||||
MSM_CSIPHY_PAD_SINK,
|
||||
code->which);
|
||||
|
||||
code->code = format->code;
|
||||
@ -434,7 +437,7 @@ static int csiphy_enum_mbus_code(struct v4l2_subdev *sd,
|
||||
* return -EINVAL or zero on success
|
||||
*/
|
||||
static int csiphy_enum_frame_size(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_frame_size_enum *fse)
|
||||
{
|
||||
struct csiphy_device *csiphy = v4l2_get_subdevdata(sd);
|
||||
@ -446,7 +449,7 @@ static int csiphy_enum_frame_size(struct v4l2_subdev *sd,
|
||||
format.code = fse->code;
|
||||
format.width = 1;
|
||||
format.height = 1;
|
||||
csiphy_try_format(csiphy, cfg, fse->pad, &format, fse->which);
|
||||
csiphy_try_format(csiphy, sd_state, fse->pad, &format, fse->which);
|
||||
fse->min_width = format.width;
|
||||
fse->min_height = format.height;
|
||||
|
||||
@ -456,7 +459,7 @@ static int csiphy_enum_frame_size(struct v4l2_subdev *sd,
|
||||
format.code = fse->code;
|
||||
format.width = -1;
|
||||
format.height = -1;
|
||||
csiphy_try_format(csiphy, cfg, fse->pad, &format, fse->which);
|
||||
csiphy_try_format(csiphy, sd_state, fse->pad, &format, fse->which);
|
||||
fse->max_width = format.width;
|
||||
fse->max_height = format.height;
|
||||
|
||||
@ -472,13 +475,13 @@ static int csiphy_enum_frame_size(struct v4l2_subdev *sd,
|
||||
* Return -EINVAL or zero on success
|
||||
*/
|
||||
static int csiphy_get_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct csiphy_device *csiphy = v4l2_get_subdevdata(sd);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = __csiphy_get_format(csiphy, cfg, fmt->pad, fmt->which);
|
||||
format = __csiphy_get_format(csiphy, sd_state, fmt->pad, fmt->which);
|
||||
if (format == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
@ -496,26 +499,29 @@ static int csiphy_get_format(struct v4l2_subdev *sd,
|
||||
* Return -EINVAL or zero on success
|
||||
*/
|
||||
static int csiphy_set_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_pad_config *cfg,
|
||||
struct v4l2_subdev_state *sd_state,
|
||||
struct v4l2_subdev_format *fmt)
|
||||
{
|
||||
struct csiphy_device *csiphy = v4l2_get_subdevdata(sd);
|
||||
struct v4l2_mbus_framefmt *format;
|
||||
|
||||
format = __csiphy_get_format(csiphy, cfg, fmt->pad, fmt->which);
|
||||
format = __csiphy_get_format(csiphy, sd_state, fmt->pad, fmt->which);
|
||||
if (format == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
csiphy_try_format(csiphy, cfg, fmt->pad, &fmt->format, fmt->which);
|
||||
csiphy_try_format(csiphy, sd_state, fmt->pad, &fmt->format,
|
||||
fmt->which);
|
||||
*format = fmt->format;
|
||||
|
||||
/* Propagate the format from sink to source */
|
||||
if (fmt->pad == MSM_CSIPHY_PAD_SINK) {
|
||||
format = __csiphy_get_format(csiphy, cfg, MSM_CSIPHY_PAD_SRC,
|
||||
format = __csiphy_get_format(csiphy, sd_state,
|
||||
MSM_CSIPHY_PAD_SRC,
|
||||
fmt->which);
|
||||
|
||||
*format = fmt->format;
|
||||
csiphy_try_format(csiphy, cfg, MSM_CSIPHY_PAD_SRC, format,
|
||||
csiphy_try_format(csiphy, sd_state, MSM_CSIPHY_PAD_SRC,
|
||||
format,
|
||||
fmt->which);
|
||||
}
|
||||
|
||||
@ -545,7 +551,7 @@ static int csiphy_init_formats(struct v4l2_subdev *sd,
|
||||
}
|
||||
};
|
||||
|
||||
return csiphy_set_format(sd, fh ? fh->pad : NULL, &format);
|
||||
return csiphy_set_format(sd, fh ? fh->state : NULL, &format);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user