media: v4l2-subdev: add subdev-wide state struct
authorTomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Thu, 10 Jun 2021 14:55:58 +0000 (17:55 +0300)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Thu, 17 Jun 2021 08:01:27 +0000 (10:01 +0200)
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>
166 files changed:
drivers/media/i2c/adv7170.c
drivers/media/i2c/adv7175.c
drivers/media/i2c/adv7180.c
drivers/media/i2c/adv7183.c
drivers/media/i2c/adv748x/adv748x-afe.c
drivers/media/i2c/adv748x/adv748x-csi2.c
drivers/media/i2c/adv748x/adv748x-hdmi.c
drivers/media/i2c/adv7511-v4l2.c
drivers/media/i2c/adv7604.c
drivers/media/i2c/adv7842.c
drivers/media/i2c/ak881x.c
drivers/media/i2c/ccs/ccs-core.c
drivers/media/i2c/cx25840/cx25840-core.c
drivers/media/i2c/et8ek8/et8ek8_driver.c
drivers/media/i2c/hi556.c
drivers/media/i2c/imx208.c
drivers/media/i2c/imx214.c
drivers/media/i2c/imx219.c
drivers/media/i2c/imx258.c
drivers/media/i2c/imx274.c
drivers/media/i2c/imx290.c
drivers/media/i2c/imx319.c
drivers/media/i2c/imx334.c
drivers/media/i2c/imx355.c
drivers/media/i2c/m5mols/m5mols_core.c
drivers/media/i2c/max9286.c
drivers/media/i2c/ml86v7667.c
drivers/media/i2c/mt9m001.c
drivers/media/i2c/mt9m032.c
drivers/media/i2c/mt9m111.c
drivers/media/i2c/mt9p031.c
drivers/media/i2c/mt9t001.c
drivers/media/i2c/mt9t112.c
drivers/media/i2c/mt9v011.c
drivers/media/i2c/mt9v032.c
drivers/media/i2c/mt9v111.c
drivers/media/i2c/noon010pc30.c
drivers/media/i2c/ov02a10.c
drivers/media/i2c/ov13858.c
drivers/media/i2c/ov2640.c
drivers/media/i2c/ov2659.c
drivers/media/i2c/ov2680.c
drivers/media/i2c/ov2685.c
drivers/media/i2c/ov2740.c
drivers/media/i2c/ov5640.c
drivers/media/i2c/ov5645.c
drivers/media/i2c/ov5647.c
drivers/media/i2c/ov5648.c
drivers/media/i2c/ov5670.c
drivers/media/i2c/ov5675.c
drivers/media/i2c/ov5695.c
drivers/media/i2c/ov6650.c
drivers/media/i2c/ov7251.c
drivers/media/i2c/ov7670.c
drivers/media/i2c/ov772x.c
drivers/media/i2c/ov7740.c
drivers/media/i2c/ov8856.c
drivers/media/i2c/ov8865.c
drivers/media/i2c/ov9640.c
drivers/media/i2c/ov9650.c
drivers/media/i2c/ov9734.c
drivers/media/i2c/rdacm20.c
drivers/media/i2c/rdacm21.c
drivers/media/i2c/rj54n1cb0c.c
drivers/media/i2c/s5c73m3/s5c73m3-core.c
drivers/media/i2c/s5k4ecgx.c
drivers/media/i2c/s5k5baf.c
drivers/media/i2c/s5k6a3.c
drivers/media/i2c/s5k6aa.c
drivers/media/i2c/saa6752hs.c
drivers/media/i2c/saa7115.c
drivers/media/i2c/saa717x.c
drivers/media/i2c/sr030pc30.c
drivers/media/i2c/st-mipid02.c
drivers/media/i2c/tc358743.c
drivers/media/i2c/tda1997x.c
drivers/media/i2c/tvp514x.c
drivers/media/i2c/tvp5150.c
drivers/media/i2c/tvp7002.c
drivers/media/i2c/tw9910.c
drivers/media/i2c/vs6624.c
drivers/media/pci/cx18/cx18-av-core.c
drivers/media/pci/intel/ipu3/ipu3-cio2-main.c
drivers/media/pci/saa7134/saa7134-empress.c
drivers/media/platform/atmel/atmel-isc-base.c
drivers/media/platform/atmel/atmel-isi.c
drivers/media/platform/cadence/cdns-csi2tx.c
drivers/media/platform/exynos4-is/fimc-capture.c
drivers/media/platform/exynos4-is/fimc-isp.c
drivers/media/platform/exynos4-is/fimc-lite.c
drivers/media/platform/exynos4-is/mipi-csis.c
drivers/media/platform/marvell-ccic/mcam-core.c
drivers/media/platform/omap3isp/ispccdc.c
drivers/media/platform/omap3isp/ispccp2.c
drivers/media/platform/omap3isp/ispcsi2.c
drivers/media/platform/omap3isp/isppreview.c
drivers/media/platform/omap3isp/ispresizer.c
drivers/media/platform/pxa_camera.c
drivers/media/platform/qcom/camss/camss-csid.c
drivers/media/platform/qcom/camss/camss-csiphy.c
drivers/media/platform/qcom/camss/camss-ispif.c
drivers/media/platform/qcom/camss/camss-vfe.c
drivers/media/platform/rcar-vin/rcar-csi2.c
drivers/media/platform/rcar-vin/rcar-v4l2.c
drivers/media/platform/renesas-ceu.c
drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
drivers/media/platform/rockchip/rkisp1/rkisp1-resizer.c
drivers/media/platform/s3c-camif/camif-capture.c
drivers/media/platform/stm32/stm32-dcmi.c
drivers/media/platform/sunxi/sun4i-csi/sun4i_v4l2.c
drivers/media/platform/ti-vpe/cal-camerarx.c
drivers/media/platform/via-camera.c
drivers/media/platform/video-mux.c
drivers/media/platform/vsp1/vsp1_brx.c
drivers/media/platform/vsp1/vsp1_clu.c
drivers/media/platform/vsp1/vsp1_entity.c
drivers/media/platform/vsp1/vsp1_entity.h
drivers/media/platform/vsp1/vsp1_histo.c
drivers/media/platform/vsp1/vsp1_hsit.c
drivers/media/platform/vsp1/vsp1_lif.c
drivers/media/platform/vsp1/vsp1_lut.c
drivers/media/platform/vsp1/vsp1_rwpf.c
drivers/media/platform/vsp1/vsp1_rwpf.h
drivers/media/platform/vsp1/vsp1_sru.c
drivers/media/platform/vsp1/vsp1_uds.c
drivers/media/platform/vsp1/vsp1_uif.c
drivers/media/platform/xilinx/xilinx-csi2rxss.c
drivers/media/platform/xilinx/xilinx-tpg.c
drivers/media/platform/xilinx/xilinx-vip.c
drivers/media/platform/xilinx/xilinx-vip.h
drivers/media/test-drivers/vimc/vimc-debayer.c
drivers/media/test-drivers/vimc/vimc-scaler.c
drivers/media/test-drivers/vimc/vimc-sensor.c
drivers/media/usb/go7007/s2250-board.c
drivers/media/v4l2-core/v4l2-subdev.c
drivers/staging/media/atomisp/i2c/atomisp-gc0310.c
drivers/staging/media/atomisp/i2c/atomisp-gc2235.c
drivers/staging/media/atomisp/i2c/atomisp-mt9m114.c
drivers/staging/media/atomisp/i2c/atomisp-ov2680.c
drivers/staging/media/atomisp/i2c/atomisp-ov2722.c
drivers/staging/media/atomisp/i2c/ov5693/atomisp-ov5693.c
drivers/staging/media/atomisp/pci/atomisp_cmd.c
drivers/staging/media/atomisp/pci/atomisp_csi2.c
drivers/staging/media/atomisp/pci/atomisp_csi2.h
drivers/staging/media/atomisp/pci/atomisp_file.c
drivers/staging/media/atomisp/pci/atomisp_fops.c
drivers/staging/media/atomisp/pci/atomisp_subdev.c
drivers/staging/media/atomisp/pci/atomisp_subdev.h
drivers/staging/media/atomisp/pci/atomisp_tpg.c
drivers/staging/media/imx/imx-ic-prp.c
drivers/staging/media/imx/imx-ic-prpencvf.c
drivers/staging/media/imx/imx-media-csi.c
drivers/staging/media/imx/imx-media-utils.c
drivers/staging/media/imx/imx-media-vdic.c
drivers/staging/media/imx/imx-media.h
drivers/staging/media/imx/imx6-mipi-csi2.c
drivers/staging/media/imx/imx7-media-csi.c
drivers/staging/media/imx/imx7-mipi-csis.c
drivers/staging/media/ipu3/ipu3-v4l2.c
drivers/staging/media/omap4iss/iss_csi2.c
drivers/staging/media/omap4iss/iss_ipipe.c
drivers/staging/media/omap4iss/iss_ipipeif.c
drivers/staging/media/omap4iss/iss_resizer.c
drivers/staging/media/tegra-video/csi.c
drivers/staging/media/tegra-video/vi.c
include/media/v4l2-subdev.h

index e4e8fda..714e31f 100644 (file)
@@ -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;
index 0cdd8e0..1813f67 100644 (file)
@@ -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;
index 44bb6fe..fa5bc55 100644 (file)
@@ -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,
index 8bcd632..92cafde 100644 (file)
@@ -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);
index 4052cf6..02eabe1 100644 (file)
@@ -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;
index fa9278a..589e964 100644 (file)
@@ -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);
 
index c557f8f..52fa7bd 100644 (file)
@@ -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;
index 5fc6c06..41f4e74 100644 (file)
@@ -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;
index 3049aa2..122e1fd 100644 (file)
@@ -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;
index 78e61fe..2637139 100644 (file)
@@ -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;
index 1adaf47..dc569d5 100644 (file)
@@ -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);
index a349189..a9403a2 100644 (file)
@@ -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;
        }
 
index e2e935f..dc31944 100644 (file)
@@ -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;
index bb3eac5..c7b91c0 100644 (file)
@@ -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);
 
index 627ccfa..8db1cbe 100644 (file)
@@ -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;
index 9ed261e..6f3d9c1 100644 (file)
@@ -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);
index 1a770a5..83c1737 100644 (file)
@@ -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;
index 74a0bf9..e10af3f 100644 (file)
@@ -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);
 
index 9052942..7ab9e5f 100644 (file)
@@ -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;
index ee21274..0dce928 100644 (file)
@@ -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);
index 06020e6..bf7a6c3 100644 (file)
@@ -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;
 }
index 4e0a8c9..dba0854 100644 (file)
@@ -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;
index 23f2860..0621255 100644 (file)
@@ -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);
 }
 
 /**
index 93f13a0..cb51c81 100644 (file)
@@ -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;
index 21666d7..e29be02 100644 (file)
@@ -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;
index 6fd4d59..4631bfe 100644 (file)
@@ -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);
        }
 
index ff21233..4a1410e 100644 (file)
@@ -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);
index 58c85a3..c9f0bd9 100644 (file)
@@ -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);
index 5a4c0f9..ba0c0ea 100644 (file)
@@ -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;
        }
index 0e11734..91a4435 100644 (file)
@@ -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;
index a633b93..6eb88ef 100644 (file)
@@ -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;
index 2e96ff5..b651ee4 100644 (file)
@@ -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;
index ae3c336..8d2e3ca 100644 (file)
@@ -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);
index 46ef74a..7699e64 100644 (file)
@@ -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;
index 5bd3ae8..4cfdd3d 100644 (file)
@@ -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;
index 97c7527..2dc4a0f 100644 (file)
@@ -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;
 }
index 87d76a7..f3ac379 100644 (file)
@@ -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;
index a1d7314..a3ce550 100644 (file)
@@ -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;
 }
index 9598c0b..7fc70af 100644 (file)
@@ -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;
index 4a4bd5b..4b75da5 100644 (file)
@@ -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)
index befef14..13ded5b 100644 (file)
@@ -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__);
 
index 178dfe9..906c711 100644 (file)
@@ -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;
index 2f3836d..b6e010e 100644 (file)
@@ -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);
 
index 54779f7..599369a 100644 (file)
@@ -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;
index 5b9cc71..f6e1e51 100644 (file)
@@ -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)
index a6c17d1..368fa21 100644 (file)
@@ -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;
 }
index 38faa74..d346d18 100644 (file)
@@ -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;
index 07e64ff..947d437 100644 (file)
@@ -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;
index 182f271..4918992 100644 (file)
@@ -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);
index e7e297a..da5850b 100644 (file)
@@ -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;
index 469d941..4393859 100644 (file)
@@ -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);
index 85dd136..f674121 100644 (file)
@@ -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))
index 0c10203..ebb299f 100644 (file)
@@ -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);
 
index d2df811..1967464 100644 (file)
@@ -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);
 
index d94cf2d..78602a2 100644 (file)
@@ -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))
index e0ff650..2539cfe 100644 (file)
@@ -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);
index a6bc665..88e19f3 100644 (file)
@@ -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;
index b16c825..ce50f3e 100644 (file)
@@ -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;
index d36b04c..0bab8c2 100644 (file)
@@ -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)
index a9f13dc..c313e11 100644 (file)
@@ -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;
index ba15668..af50c66 100644 (file)
@@ -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;
index 90eb73f..a4b639c 100644 (file)
@@ -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;
index 179d107..5b78d81 100644 (file)
@@ -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;
index 4cc51e0..2e4018c 100644 (file)
@@ -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;
        }
 
index 71804a7..e2b88c5 100644 (file)
@@ -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;
index 4e97309..af9a305 100644 (file)
@@ -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;
index bc56081..6a5dceb 100644 (file)
@@ -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;
 }
index f26c168..b97dd61 100644 (file)
@@ -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;
index e9be732..105a4b7 100644 (file)
@@ -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;
index 6171ced..a7f043c 100644 (file)
@@ -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;
        }
 
index 88dc6ba..a958bbc 100644 (file)
@@ -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;
index ba103a6..adf9053 100644 (file)
@@ -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;
index 4692402..19c0252 100644 (file)
@@ -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;
        }
 
index 7f07ef5..f630b88 100644 (file)
@@ -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);
index f21da11..3205cd8 100644 (file)
@@ -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;
 
index 89bb7e6..91e6db8 100644 (file)
@@ -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);
index a7fbe5b..cee60f9 100644 (file)
@@ -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);
index 374a9da..30c6355 100644 (file)
@@ -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);
index ada4ec5..2de1883 100644 (file)
@@ -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 */
index a25a350..09f5b39 100644 (file)
@@ -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)
index c292c92..29003de 100644 (file)
@@ -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);
index 11cfe35..76e5a50 100644 (file)
@@ -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;
index ca8040d..47db0ee 100644 (file)
@@ -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))
index 76a37fb..aafbb34 100644 (file)
@@ -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;
index 46c6e3e..19daa49 100644 (file)
@@ -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;
 
index 5b1dd35..095d80c 100644 (file)
@@ -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;
 
index 765ae40..5a67fba 100644 (file)
@@ -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;
 
index 0da3644..7ff4024 100644 (file)
@@ -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:
index 74b49d3..855235b 100644 (file)
@@ -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;
index 4d8b180..aaa3af0 100644 (file)
@@ -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);
index ebf39c8..32b2332 100644 (file)
@@ -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;
 
index ea87110..070a0f3 100644 (file)
@@ -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) {
index 4e8905e..108b5e9 100644 (file)
@@ -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;
 }
index d0a49cd..acb58b6 100644 (file)
@@ -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;
 }
index fd493c5..6302e0c 100644 (file)
@@ -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;
 }
index 607b768..53aedec 100644 (file)
@@ -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;
 }
index 78d9dd7..ed2fb0c 100644 (file)
@@ -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;
 }
index dd510ee..ec4c010 100644 (file)
@@ -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;
 
index 251f4c4..a1637b7 100644 (file)
@@ -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);
 }
 
 /*
index 35470cb..24eec16 100644 (file)
@@ -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);
 }
 
 /*
index 1b71618..ba5d65f 100644 (file)
@@ -874,12 +874,13 @@ static int ispif_set_stream(struct v4l2_subdev *sd, int enable)
  */
 static struct v4l2_mbus_framefmt *
 __ispif_get_format(struct ispif_line *line,
-                  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(&line->subdev, cfg, pad);
+               return v4l2_subdev_get_try_format(&line->subdev, sd_state,
+                                                 pad);
 
        return &line->fmt[pad];
 }
@@ -893,7 +894,7 @@ __ispif_get_format(struct ispif_line *line,
  * @which: wanted subdev format
  */
 static void ispif_try_format(struct ispif_line *line,
-                            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)
@@ -923,7 +924,7 @@ static void ispif_try_format(struct ispif_line *line,
        case MSM_ISPIF_PAD_SRC:
                /* Set and return a format same as sink pad */
 
-               *fmt = *__ispif_get_format(line, cfg, MSM_ISPIF_PAD_SINK,
+               *fmt = *__ispif_get_format(line, sd_state, MSM_ISPIF_PAD_SINK,
                                           which);
 
                break;
@@ -940,7 +941,7 @@ static void ispif_try_format(struct ispif_line *line,
  * return -EINVAL or zero on success
  */
 static int ispif_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 ispif_line *line = v4l2_get_subdevdata(sd);
@@ -955,7 +956,8 @@ static int ispif_enum_mbus_code(struct v4l2_subdev *sd,
                if (code->index > 0)
                        return -EINVAL;
 
-               format = __ispif_get_format(line, cfg, MSM_ISPIF_PAD_SINK,
+               format = __ispif_get_format(line, sd_state,
+                                           MSM_ISPIF_PAD_SINK,
                                            code->which);
 
                code->code = format->code;
@@ -972,7 +974,7 @@ static int ispif_enum_mbus_code(struct v4l2_subdev *sd,
  * return -EINVAL or zero on success
  */
 static int ispif_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 ispif_line *line = v4l2_get_subdevdata(sd);
@@ -984,7 +986,7 @@ static int ispif_enum_frame_size(struct v4l2_subdev *sd,
        format.code = fse->code;
        format.width = 1;
        format.height = 1;
-       ispif_try_format(line, cfg, fse->pad, &format, fse->which);
+       ispif_try_format(line, sd_state, fse->pad, &format, fse->which);
        fse->min_width = format.width;
        fse->min_height = format.height;
 
@@ -994,7 +996,7 @@ static int ispif_enum_frame_size(struct v4l2_subdev *sd,
        format.code = fse->code;
        format.width = -1;
        format.height = -1;
-       ispif_try_format(line, cfg, fse->pad, &format, fse->which);
+       ispif_try_format(line, sd_state, fse->pad, &format, fse->which);
        fse->max_width = format.width;
        fse->max_height = format.height;
 
@@ -1010,13 +1012,13 @@ static int ispif_enum_frame_size(struct v4l2_subdev *sd,
  * Return -EINVAL or zero on success
  */
 static int ispif_get_format(struct v4l2_subdev *sd,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *fmt)
 {
        struct ispif_line *line = v4l2_get_subdevdata(sd);
        struct v4l2_mbus_framefmt *format;
 
-       format = __ispif_get_format(line, cfg, fmt->pad, fmt->which);
+       format = __ispif_get_format(line, sd_state, fmt->pad, fmt->which);
        if (format == NULL)
                return -EINVAL;
 
@@ -1034,26 +1036,26 @@ static int ispif_get_format(struct v4l2_subdev *sd,
  * Return -EINVAL or zero on success
  */
 static int ispif_set_format(struct v4l2_subdev *sd,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *fmt)
 {
        struct ispif_line *line = v4l2_get_subdevdata(sd);
        struct v4l2_mbus_framefmt *format;
 
-       format = __ispif_get_format(line, cfg, fmt->pad, fmt->which);
+       format = __ispif_get_format(line, sd_state, fmt->pad, fmt->which);
        if (format == NULL)
                return -EINVAL;
 
-       ispif_try_format(line, cfg, fmt->pad, &fmt->format, fmt->which);
+       ispif_try_format(line, sd_state, fmt->pad, &fmt->format, fmt->which);
        *format = fmt->format;
 
        /* Propagate the format from sink to source */
        if (fmt->pad == MSM_ISPIF_PAD_SINK) {
-               format = __ispif_get_format(line, cfg, MSM_ISPIF_PAD_SRC,
+               format = __ispif_get_format(line, sd_state, MSM_ISPIF_PAD_SRC,
                                            fmt->which);
 
                *format = fmt->format;
-               ispif_try_format(line, cfg, MSM_ISPIF_PAD_SRC, format,
+               ispif_try_format(line, sd_state, MSM_ISPIF_PAD_SRC, format,
                                 fmt->which);
        }
 
@@ -1082,7 +1084,7 @@ static int ispif_init_formats(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
                }
        };
 
-       return ispif_set_format(sd, fh ? fh->pad : NULL, &format);
+       return ispif_set_format(sd, fh ? fh->state : NULL, &format);
 }
 
 /*
index 27ab20c..e0f3a36 100644 (file)
@@ -763,12 +763,13 @@ static int vfe_set_stream(struct v4l2_subdev *sd, int enable)
  */
 static struct v4l2_mbus_framefmt *
 __vfe_get_format(struct vfe_line *line,
-                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(&line->subdev, cfg, pad);
+               return v4l2_subdev_get_try_format(&line->subdev, sd_state,
+                                                 pad);
 
        return &line->fmt[pad];
 }
@@ -783,11 +784,11 @@ __vfe_get_format(struct vfe_line *line,
  */
 static struct v4l2_rect *
 __vfe_get_compose(struct vfe_line *line,
-                 struct v4l2_subdev_pad_config *cfg,
+                 struct v4l2_subdev_state *sd_state,
                  enum v4l2_subdev_format_whence which)
 {
        if (which == V4L2_SUBDEV_FORMAT_TRY)
-               return v4l2_subdev_get_try_compose(&line->subdev, cfg,
+               return v4l2_subdev_get_try_compose(&line->subdev, sd_state,
                                                   MSM_VFE_PAD_SINK);
 
        return &line->compose;
@@ -803,11 +804,11 @@ __vfe_get_compose(struct vfe_line *line,
  */
 static struct v4l2_rect *
 __vfe_get_crop(struct vfe_line *line,
-              struct v4l2_subdev_pad_config *cfg,
+              struct v4l2_subdev_state *sd_state,
               enum v4l2_subdev_format_whence which)
 {
        if (which == V4L2_SUBDEV_FORMAT_TRY)
-               return v4l2_subdev_get_try_crop(&line->subdev, cfg,
+               return v4l2_subdev_get_try_crop(&line->subdev, sd_state,
                                                MSM_VFE_PAD_SRC);
 
        return &line->crop;
@@ -822,7 +823,7 @@ __vfe_get_crop(struct vfe_line *line,
  * @which: wanted subdev format
  */
 static void vfe_try_format(struct vfe_line *line,
-                          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)
@@ -854,14 +855,15 @@ static void vfe_try_format(struct vfe_line *line,
                /* Set and return a format same as sink pad */
                code = fmt->code;
 
-               *fmt = *__vfe_get_format(line, cfg, MSM_VFE_PAD_SINK, which);
+               *fmt = *__vfe_get_format(line, sd_state, MSM_VFE_PAD_SINK,
+                                        which);
 
                fmt->code = vfe_src_pad_code(line, fmt->code, 0, code);
 
                if (line->id == VFE_LINE_PIX) {
                        struct v4l2_rect *rect;
 
-                       rect = __vfe_get_crop(line, cfg, which);
+                       rect = __vfe_get_crop(line, sd_state, which);
 
                        fmt->width = rect->width;
                        fmt->height = rect->height;
@@ -881,13 +883,13 @@ static void vfe_try_format(struct vfe_line *line,
  * @which: wanted subdev format
  */
 static void vfe_try_compose(struct vfe_line *line,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_rect *rect,
                            enum v4l2_subdev_format_whence which)
 {
        struct v4l2_mbus_framefmt *fmt;
 
-       fmt = __vfe_get_format(line, cfg, MSM_VFE_PAD_SINK, which);
+       fmt = __vfe_get_format(line, sd_state, MSM_VFE_PAD_SINK, which);
 
        if (rect->width > fmt->width)
                rect->width = fmt->width;
@@ -920,13 +922,13 @@ static void vfe_try_compose(struct vfe_line *line,
  * @which: wanted subdev format
  */
 static void vfe_try_crop(struct vfe_line *line,
-                        struct v4l2_subdev_pad_config *cfg,
+                        struct v4l2_subdev_state *sd_state,
                         struct v4l2_rect *rect,
                         enum v4l2_subdev_format_whence which)
 {
        struct v4l2_rect *compose;
 
-       compose = __vfe_get_compose(line, cfg, which);
+       compose = __vfe_get_compose(line, sd_state, which);
 
        if (rect->width > compose->width)
                rect->width = compose->width;
@@ -964,7 +966,7 @@ static void vfe_try_crop(struct vfe_line *line,
  * return -EINVAL or zero on success
  */
 static int vfe_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 vfe_line *line = v4l2_get_subdevdata(sd);
@@ -977,7 +979,7 @@ static int vfe_enum_mbus_code(struct v4l2_subdev *sd,
        } else {
                struct v4l2_mbus_framefmt *sink_fmt;
 
-               sink_fmt = __vfe_get_format(line, cfg, MSM_VFE_PAD_SINK,
+               sink_fmt = __vfe_get_format(line, sd_state, MSM_VFE_PAD_SINK,
                                            code->which);
 
                code->code = vfe_src_pad_code(line, sink_fmt->code,
@@ -998,7 +1000,7 @@ static int vfe_enum_mbus_code(struct v4l2_subdev *sd,
  * Return -EINVAL or zero on success
  */
 static int vfe_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 vfe_line *line = v4l2_get_subdevdata(sd);
@@ -1010,7 +1012,7 @@ static int vfe_enum_frame_size(struct v4l2_subdev *sd,
        format.code = fse->code;
        format.width = 1;
        format.height = 1;
-       vfe_try_format(line, cfg, fse->pad, &format, fse->which);
+       vfe_try_format(line, sd_state, fse->pad, &format, fse->which);
        fse->min_width = format.width;
        fse->min_height = format.height;
 
@@ -1020,7 +1022,7 @@ static int vfe_enum_frame_size(struct v4l2_subdev *sd,
        format.code = fse->code;
        format.width = -1;
        format.height = -1;
-       vfe_try_format(line, cfg, fse->pad, &format, fse->which);
+       vfe_try_format(line, sd_state, fse->pad, &format, fse->which);
        fse->max_width = format.width;
        fse->max_height = format.height;
 
@@ -1036,13 +1038,13 @@ static int vfe_enum_frame_size(struct v4l2_subdev *sd,
  * Return -EINVAL or zero on success
  */
 static int vfe_get_format(struct v4l2_subdev *sd,
-                         struct v4l2_subdev_pad_config *cfg,
+                         struct v4l2_subdev_state *sd_state,
                          struct v4l2_subdev_format *fmt)
 {
        struct vfe_line *line = v4l2_get_subdevdata(sd);
        struct v4l2_mbus_framefmt *format;
 
-       format = __vfe_get_format(line, cfg, fmt->pad, fmt->which);
+       format = __vfe_get_format(line, sd_state, fmt->pad, fmt->which);
        if (format == NULL)
                return -EINVAL;
 
@@ -1052,7 +1054,7 @@ static int vfe_get_format(struct v4l2_subdev *sd,
 }
 
 static int vfe_set_selection(struct v4l2_subdev *sd,
-                            struct v4l2_subdev_pad_config *cfg,
+                            struct v4l2_subdev_state *sd_state,
                             struct v4l2_subdev_selection *sel);
 
 /*
@@ -1064,17 +1066,17 @@ static int vfe_set_selection(struct v4l2_subdev *sd,
  * Return -EINVAL or zero on success
  */
 static int vfe_set_format(struct v4l2_subdev *sd,
-                         struct v4l2_subdev_pad_config *cfg,
+                         struct v4l2_subdev_state *sd_state,
                          struct v4l2_subdev_format *fmt)
 {
        struct vfe_line *line = v4l2_get_subdevdata(sd);
        struct v4l2_mbus_framefmt *format;
 
-       format = __vfe_get_format(line, cfg, fmt->pad, fmt->which);
+       format = __vfe_get_format(line, sd_state, fmt->pad, fmt->which);
        if (format == NULL)
                return -EINVAL;
 
-       vfe_try_format(line, cfg, fmt->pad, &fmt->format, fmt->which);
+       vfe_try_format(line, sd_state, fmt->pad, &fmt->format, fmt->which);
        *format = fmt->format;
 
        if (fmt->pad == MSM_VFE_PAD_SINK) {
@@ -1082,11 +1084,11 @@ static int vfe_set_format(struct v4l2_subdev *sd,
                int ret;
 
                /* Propagate the format from sink to source */
-               format = __vfe_get_format(line, cfg, MSM_VFE_PAD_SRC,
+               format = __vfe_get_format(line, sd_state, MSM_VFE_PAD_SRC,
                                          fmt->which);
 
                *format = fmt->format;
-               vfe_try_format(line, cfg, MSM_VFE_PAD_SRC, format,
+               vfe_try_format(line, sd_state, MSM_VFE_PAD_SRC, format,
                               fmt->which);
 
                if (line->id != VFE_LINE_PIX)
@@ -1098,7 +1100,7 @@ static int vfe_set_format(struct v4l2_subdev *sd,
                sel.target = V4L2_SEL_TGT_COMPOSE;
                sel.r.width = fmt->format.width;
                sel.r.height = fmt->format.height;
-               ret = vfe_set_selection(sd, cfg, &sel);
+               ret = vfe_set_selection(sd, sd_state, &sel);
                if (ret < 0)
                        return ret;
        }
@@ -1115,7 +1117,7 @@ static int vfe_set_format(struct v4l2_subdev *sd,
  * Return -EINVAL or zero on success
  */
 static int vfe_get_selection(struct v4l2_subdev *sd,
-                            struct v4l2_subdev_pad_config *cfg,
+                            struct v4l2_subdev_state *sd_state,
                             struct v4l2_subdev_selection *sel)
 {
        struct vfe_line *line = v4l2_get_subdevdata(sd);
@@ -1131,7 +1133,7 @@ static int vfe_get_selection(struct v4l2_subdev *sd,
                case V4L2_SEL_TGT_COMPOSE_BOUNDS:
                        fmt.pad = sel->pad;
                        fmt.which = sel->which;
-                       ret = vfe_get_format(sd, cfg, &fmt);
+                       ret = vfe_get_format(sd, sd_state, &fmt);
                        if (ret < 0)
                                return ret;
 
@@ -1141,7 +1143,7 @@ static int vfe_get_selection(struct v4l2_subdev *sd,
                        sel->r.height = fmt.format.height;
                        break;
                case V4L2_SEL_TGT_COMPOSE:
-                       rect = __vfe_get_compose(line, cfg, sel->which);
+                       rect = __vfe_get_compose(line, sd_state, sel->which);
                        if (rect == NULL)
                                return -EINVAL;
 
@@ -1153,7 +1155,7 @@ static int vfe_get_selection(struct v4l2_subdev *sd,
        else if (sel->pad == MSM_VFE_PAD_SRC)
                switch (sel->target) {
                case V4L2_SEL_TGT_CROP_BOUNDS:
-                       rect = __vfe_get_compose(line, cfg, sel->which);
+                       rect = __vfe_get_compose(line, sd_state, sel->which);
                        if (rect == NULL)
                                return -EINVAL;
 
@@ -1163,7 +1165,7 @@ static int vfe_get_selection(struct v4l2_subdev *sd,
                        sel->r.height = rect->height;
                        break;
                case V4L2_SEL_TGT_CROP:
-                       rect = __vfe_get_crop(line, cfg, sel->which);
+                       rect = __vfe_get_crop(line, sd_state, sel->which);
                        if (rect == NULL)
                                return -EINVAL;
 
@@ -1185,7 +1187,7 @@ static int vfe_get_selection(struct v4l2_subdev *sd,
  * Return -EINVAL or zero on success
  */
 static int vfe_set_selection(struct v4l2_subdev *sd,
-                            struct v4l2_subdev_pad_config *cfg,
+                            struct v4l2_subdev_state *sd_state,
                             struct v4l2_subdev_selection *sel)
 {
        struct vfe_line *line = v4l2_get_subdevdata(sd);
@@ -1199,11 +1201,11 @@ static int vfe_set_selection(struct v4l2_subdev *sd,
                sel->pad == MSM_VFE_PAD_SINK) {
                struct v4l2_subdev_selection crop = { 0 };
 
-               rect = __vfe_get_compose(line, cfg, sel->which);
+               rect = __vfe_get_compose(line, sd_state, sel->which);
                if (rect == NULL)
                        return -EINVAL;
 
-               vfe_try_compose(line, cfg, &sel->r, sel->which);
+               vfe_try_compose(line, sd_state, &sel->r, sel->which);
                *rect = sel->r;
 
                /* Reset source crop selection */
@@ -1211,28 +1213,28 @@ static int vfe_set_selection(struct v4l2_subdev *sd,
                crop.pad = MSM_VFE_PAD_SRC;
                crop.target = V4L2_SEL_TGT_CROP;
                crop.r = *rect;
-               ret = vfe_set_selection(sd, cfg, &crop);
+               ret = vfe_set_selection(sd, sd_state, &crop);
        } else if (sel->target == V4L2_SEL_TGT_CROP &&
                sel->pad == MSM_VFE_PAD_SRC) {
                struct v4l2_subdev_format fmt = { 0 };
 
-               rect = __vfe_get_crop(line, cfg, sel->which);
+               rect = __vfe_get_crop(line, sd_state, sel->which);
                if (rect == NULL)
                        return -EINVAL;
 
-               vfe_try_crop(line, cfg, &sel->r, sel->which);
+               vfe_try_crop(line, sd_state, &sel->r, sel->which);
                *rect = sel->r;
 
                /* Reset source pad format width and height */
                fmt.which = sel->which;
                fmt.pad = MSM_VFE_PAD_SRC;
-               ret = vfe_get_format(sd, cfg, &fmt);
+               ret = vfe_get_format(sd, sd_state, &fmt);
                if (ret < 0)
                        return ret;
 
                fmt.format.width = rect->width;
                fmt.format.height = rect->height;
-               ret = vfe_set_format(sd, cfg, &fmt);
+               ret = vfe_set_format(sd, sd_state, &fmt);
        } else {
                ret = -EINVAL;
        }
@@ -1262,7 +1264,7 @@ static int vfe_init_formats(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
                }
        };
 
-       return vfe_set_format(sd, fh ? fh->pad : NULL, &format);
+       return vfe_set_format(sd, fh ? fh->state : NULL, &format);
 }
 
 /*
index b87d545..a128bf8 100644 (file)
@@ -717,7 +717,7 @@ out:
 }
 
 static int rcsi2_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 rcar_csi2 *priv = sd_to_csi2(sd);
@@ -729,7 +729,7 @@ static int rcsi2_set_pad_format(struct v4l2_subdev *sd,
        if (format->which == V4L2_SUBDEV_FORMAT_ACTIVE) {
                priv->mf = format->format;
        } else {
-               framefmt = v4l2_subdev_get_try_format(sd, cfg, 0);
+               framefmt = v4l2_subdev_get_try_format(sd, sd_state, 0);
                *framefmt = format->format;
        }
 
@@ -737,7 +737,7 @@ static int rcsi2_set_pad_format(struct v4l2_subdev *sd,
 }
 
 static int rcsi2_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 rcar_csi2 *priv = sd_to_csi2(sd);
@@ -745,7 +745,7 @@ static int rcsi2_get_pad_format(struct v4l2_subdev *sd,
        if (format->which == V4L2_SUBDEV_FORMAT_ACTIVE)
                format->format = priv->mf;
        else
-               format->format = *v4l2_subdev_get_try_format(sd, cfg, 0);
+               format->format = *v4l2_subdev_get_try_format(sd, sd_state, 0);
 
        return 0;
 }
index b1e9f86..cca15a1 100644 (file)
@@ -243,7 +243,7 @@ static int rvin_try_format(struct rvin_dev *vin, u32 which,
                           struct v4l2_rect *src_rect)
 {
        struct v4l2_subdev *sd = vin_to_source(vin);
-       struct v4l2_subdev_pad_config *pad_cfg;
+       struct v4l2_subdev_state *sd_state;
        struct v4l2_subdev_format format = {
                .which = which,
                .pad = vin->parallel.source_pad,
@@ -252,8 +252,8 @@ static int rvin_try_format(struct rvin_dev *vin, u32 which,
        u32 width, height;
        int ret;
 
-       pad_cfg = v4l2_subdev_alloc_pad_config(sd);
-       if (pad_cfg == NULL)
+       sd_state = v4l2_subdev_alloc_state(sd);
+       if (sd_state == NULL)
                return -ENOMEM;
 
        if (!rvin_format_from_pixel(vin, pix->pixelformat))
@@ -266,7 +266,7 @@ static int rvin_try_format(struct rvin_dev *vin, u32 which,
        width = pix->width;
        height = pix->height;
 
-       ret = v4l2_subdev_call(sd, pad, set_fmt, pad_cfg, &format);
+       ret = v4l2_subdev_call(sd, pad, set_fmt, sd_state, &format);
        if (ret < 0 && ret != -ENOIOCTLCMD)
                goto done;
        ret = 0;
@@ -288,7 +288,7 @@ static int rvin_try_format(struct rvin_dev *vin, u32 which,
 
        rvin_format_align(vin, pix);
 done:
-       v4l2_subdev_free_pad_config(pad_cfg);
+       v4l2_subdev_free_state(sd_state);
 
        return ret;
 }
index 17f01b6..f432032 100644 (file)
@@ -794,6 +794,9 @@ static int __ceu_try_fmt(struct ceu_device *ceudev, struct v4l2_format *v4l2_fmt
        struct v4l2_pix_format_mplane *pix = &v4l2_fmt->fmt.pix_mp;
        struct v4l2_subdev *v4l2_sd = ceu_sd->v4l2_sd;
        struct v4l2_subdev_pad_config pad_cfg;
+       struct v4l2_subdev_state pad_state = {
+               .pads = &pad_cfg
+               };
        const struct ceu_fmt *ceu_fmt;
        u32 mbus_code_old;
        u32 mbus_code;
@@ -850,13 +853,13 @@ static int __ceu_try_fmt(struct ceu_device *ceudev, struct v4l2_format *v4l2_fmt
         * time.
         */
        sd_format.format.code = mbus_code;
-       ret = v4l2_subdev_call(v4l2_sd, pad, set_fmt, &pad_cfg, &sd_format);
+       ret = v4l2_subdev_call(v4l2_sd, pad, set_fmt, &pad_state, &sd_format);
        if (ret) {
                if (ret == -EINVAL) {
                        /* fallback */
                        sd_format.format.code = mbus_code_old;
                        ret = v4l2_subdev_call(v4l2_sd, pad, set_fmt,
-                                              &pad_cfg, &sd_format);
+                                              &pad_state, &sd_format);
                }
 
                if (ret)
index 2e5b57e..d596bc0 100644 (file)
@@ -208,24 +208,30 @@ static struct v4l2_subdev *rkisp1_get_remote_sensor(struct v4l2_subdev *sd)
 
 static struct v4l2_mbus_framefmt *
 rkisp1_isp_get_pad_fmt(struct rkisp1_isp *isp,
-                      struct v4l2_subdev_pad_config *cfg,
+                      struct v4l2_subdev_state *sd_state,
                       unsigned int pad, u32 which)
 {
+       struct v4l2_subdev_state state = {
+               .pads = isp->pad_cfg
+               };
        if (which == V4L2_SUBDEV_FORMAT_TRY)
-               return v4l2_subdev_get_try_format(&isp->sd, cfg, pad);
+               return v4l2_subdev_get_try_format(&isp->sd, sd_state, pad);
        else
-               return v4l2_subdev_get_try_format(&isp->sd, isp->pad_cfg, pad);
+               return v4l2_subdev_get_try_format(&isp->sd, &state, pad);
 }
 
 static struct v4l2_rect *
 rkisp1_isp_get_pad_crop(struct rkisp1_isp *isp,
-                       struct v4l2_subdev_pad_config *cfg,
+                       struct v4l2_subdev_state *sd_state,
                        unsigned int pad, u32 which)
 {
+       struct v4l2_subdev_state state = {
+               .pads = isp->pad_cfg
+               };
        if (which == V4L2_SUBDEV_FORMAT_TRY)
-               return v4l2_subdev_get_try_crop(&isp->sd, cfg, pad);
+               return v4l2_subdev_get_try_crop(&isp->sd, sd_state, pad);
        else
-               return v4l2_subdev_get_try_crop(&isp->sd, isp->pad_cfg, pad);
+               return v4l2_subdev_get_try_crop(&isp->sd, &state, pad);
 }
 
 /* ----------------------------------------------------------------------------
@@ -561,7 +567,7 @@ static void rkisp1_isp_start(struct rkisp1_device *rkisp1)
  */
 
 static int rkisp1_isp_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)
 {
        unsigned int i, dir;
@@ -601,7 +607,7 @@ static int rkisp1_isp_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int rkisp1_isp_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 rkisp1_isp_mbus_info *mbus_info;
@@ -634,37 +640,37 @@ static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
 }
 
 static int rkisp1_isp_init_config(struct v4l2_subdev *sd,
-                                 struct v4l2_subdev_pad_config *cfg)
+                                 struct v4l2_subdev_state *sd_state)
 {
        struct v4l2_mbus_framefmt *sink_fmt, *src_fmt;
        struct v4l2_rect *sink_crop, *src_crop;
 
-       sink_fmt = v4l2_subdev_get_try_format(sd, cfg,
+       sink_fmt = v4l2_subdev_get_try_format(sd, sd_state,
                                              RKISP1_ISP_PAD_SINK_VIDEO);
        sink_fmt->width = RKISP1_DEFAULT_WIDTH;
        sink_fmt->height = RKISP1_DEFAULT_HEIGHT;
        sink_fmt->field = V4L2_FIELD_NONE;
        sink_fmt->code = RKISP1_DEF_SINK_PAD_FMT;
 
-       sink_crop = v4l2_subdev_get_try_crop(sd, cfg,
+       sink_crop = v4l2_subdev_get_try_crop(sd, sd_state,
                                             RKISP1_ISP_PAD_SINK_VIDEO);
        sink_crop->width = RKISP1_DEFAULT_WIDTH;
        sink_crop->height = RKISP1_DEFAULT_HEIGHT;
        sink_crop->left = 0;
        sink_crop->top = 0;
 
-       src_fmt = v4l2_subdev_get_try_format(sd, cfg,
+       src_fmt = v4l2_subdev_get_try_format(sd, sd_state,
                                             RKISP1_ISP_PAD_SOURCE_VIDEO);
        *src_fmt = *sink_fmt;
        src_fmt->code = RKISP1_DEF_SRC_PAD_FMT;
 
-       src_crop = v4l2_subdev_get_try_crop(sd, cfg,
+       src_crop = v4l2_subdev_get_try_crop(sd, sd_state,
                                            RKISP1_ISP_PAD_SOURCE_VIDEO);
        *src_crop = *sink_crop;
 
-       sink_fmt = v4l2_subdev_get_try_format(sd, cfg,
+       sink_fmt = v4l2_subdev_get_try_format(sd, sd_state,
                                              RKISP1_ISP_PAD_SINK_PARAMS);
-       src_fmt = v4l2_subdev_get_try_format(sd, cfg,
+       src_fmt = v4l2_subdev_get_try_format(sd, sd_state,
                                             RKISP1_ISP_PAD_SOURCE_STATS);
        sink_fmt->width = 0;
        sink_fmt->height = 0;
@@ -676,7 +682,7 @@ static int rkisp1_isp_init_config(struct v4l2_subdev *sd,
 }
 
 static void rkisp1_isp_set_src_fmt(struct rkisp1_isp *isp,
-                                  struct v4l2_subdev_pad_config *cfg,
+                                  struct v4l2_subdev_state *sd_state,
                                   struct v4l2_mbus_framefmt *format,
                                   unsigned int which)
 {
@@ -684,9 +690,9 @@ static void rkisp1_isp_set_src_fmt(struct rkisp1_isp *isp,
        struct v4l2_mbus_framefmt *src_fmt;
        const struct v4l2_rect *src_crop;
 
-       src_fmt = rkisp1_isp_get_pad_fmt(isp, cfg,
+       src_fmt = rkisp1_isp_get_pad_fmt(isp, sd_state,
                                         RKISP1_ISP_PAD_SOURCE_VIDEO, which);
-       src_crop = rkisp1_isp_get_pad_crop(isp, cfg,
+       src_crop = rkisp1_isp_get_pad_crop(isp, sd_state,
                                           RKISP1_ISP_PAD_SOURCE_VIDEO, which);
 
        src_fmt->code = format->code;
@@ -717,17 +723,17 @@ static void rkisp1_isp_set_src_fmt(struct rkisp1_isp *isp,
 }
 
 static void rkisp1_isp_set_src_crop(struct rkisp1_isp *isp,
-                                   struct v4l2_subdev_pad_config *cfg,
+                                   struct v4l2_subdev_state *sd_state,
                                    struct v4l2_rect *r, unsigned int which)
 {
        struct v4l2_mbus_framefmt *src_fmt;
        const struct v4l2_rect *sink_crop;
        struct v4l2_rect *src_crop;
 
-       src_crop = rkisp1_isp_get_pad_crop(isp, cfg,
+       src_crop = rkisp1_isp_get_pad_crop(isp, sd_state,
                                           RKISP1_ISP_PAD_SOURCE_VIDEO,
                                           which);
-       sink_crop = rkisp1_isp_get_pad_crop(isp, cfg,
+       sink_crop = rkisp1_isp_get_pad_crop(isp, sd_state,
                                            RKISP1_ISP_PAD_SINK_VIDEO,
                                            which);
 
@@ -740,21 +746,23 @@ static void rkisp1_isp_set_src_crop(struct rkisp1_isp *isp,
        *r = *src_crop;
 
        /* Propagate to out format */
-       src_fmt = rkisp1_isp_get_pad_fmt(isp, cfg,
+       src_fmt = rkisp1_isp_get_pad_fmt(isp, sd_state,
                                         RKISP1_ISP_PAD_SOURCE_VIDEO, which);
-       rkisp1_isp_set_src_fmt(isp, cfg, src_fmt, which);
+       rkisp1_isp_set_src_fmt(isp, sd_state, src_fmt, which);
 }
 
 static void rkisp1_isp_set_sink_crop(struct rkisp1_isp *isp,
-                                    struct v4l2_subdev_pad_config *cfg,
+                                    struct v4l2_subdev_state *sd_state,
                                     struct v4l2_rect *r, unsigned int which)
 {
        struct v4l2_rect *sink_crop, *src_crop;
        struct v4l2_mbus_framefmt *sink_fmt;
 
-       sink_crop = rkisp1_isp_get_pad_crop(isp, cfg, RKISP1_ISP_PAD_SINK_VIDEO,
+       sink_crop = rkisp1_isp_get_pad_crop(isp, sd_state,
+                                           RKISP1_ISP_PAD_SINK_VIDEO,
                                            which);
-       sink_fmt = rkisp1_isp_get_pad_fmt(isp, cfg, RKISP1_ISP_PAD_SINK_VIDEO,
+       sink_fmt = rkisp1_isp_get_pad_fmt(isp, sd_state,
+                                         RKISP1_ISP_PAD_SINK_VIDEO,
                                          which);
 
        sink_crop->left = ALIGN(r->left, 2);
@@ -766,13 +774,13 @@ static void rkisp1_isp_set_sink_crop(struct rkisp1_isp *isp,
        *r = *sink_crop;
 
        /* Propagate to out crop */
-       src_crop = rkisp1_isp_get_pad_crop(isp, cfg,
+       src_crop = rkisp1_isp_get_pad_crop(isp, sd_state,
                                           RKISP1_ISP_PAD_SOURCE_VIDEO, which);
-       rkisp1_isp_set_src_crop(isp, cfg, src_crop, which);
+       rkisp1_isp_set_src_crop(isp, sd_state, src_crop, which);
 }
 
 static void rkisp1_isp_set_sink_fmt(struct rkisp1_isp *isp,
-                                   struct v4l2_subdev_pad_config *cfg,
+                                   struct v4l2_subdev_state *sd_state,
                                    struct v4l2_mbus_framefmt *format,
                                    unsigned int which)
 {
@@ -780,7 +788,8 @@ static void rkisp1_isp_set_sink_fmt(struct rkisp1_isp *isp,
        struct v4l2_mbus_framefmt *sink_fmt;
        struct v4l2_rect *sink_crop;
 
-       sink_fmt = rkisp1_isp_get_pad_fmt(isp, cfg, RKISP1_ISP_PAD_SINK_VIDEO,
+       sink_fmt = rkisp1_isp_get_pad_fmt(isp, sd_state,
+                                         RKISP1_ISP_PAD_SINK_VIDEO,
                                          which);
        sink_fmt->code = format->code;
        mbus_info = rkisp1_isp_mbus_info_get(sink_fmt->code);
@@ -801,36 +810,40 @@ static void rkisp1_isp_set_sink_fmt(struct rkisp1_isp *isp,
        *format = *sink_fmt;
 
        /* Propagate to in crop */
-       sink_crop = rkisp1_isp_get_pad_crop(isp, cfg, RKISP1_ISP_PAD_SINK_VIDEO,
+       sink_crop = rkisp1_isp_get_pad_crop(isp, sd_state,
+                                           RKISP1_ISP_PAD_SINK_VIDEO,
                                            which);
-       rkisp1_isp_set_sink_crop(isp, cfg, sink_crop, which);
+       rkisp1_isp_set_sink_crop(isp, sd_state, sink_crop, which);
 }
 
 static int rkisp1_isp_get_fmt(struct v4l2_subdev *sd,
-                             struct v4l2_subdev_pad_config *cfg,
+                             struct v4l2_subdev_state *sd_state,
                              struct v4l2_subdev_format *fmt)
 {
        struct rkisp1_isp *isp = container_of(sd, struct rkisp1_isp, sd);
 
        mutex_lock(&isp->ops_lock);
-       fmt->format = *rkisp1_isp_get_pad_fmt(isp, cfg, fmt->pad, fmt->which);
+       fmt->format = *rkisp1_isp_get_pad_fmt(isp, sd_state, fmt->pad,
+                                             fmt->which);
        mutex_unlock(&isp->ops_lock);
        return 0;
 }
 
 static int rkisp1_isp_set_fmt(struct v4l2_subdev *sd,
-                             struct v4l2_subdev_pad_config *cfg,
+                             struct v4l2_subdev_state *sd_state,
                              struct v4l2_subdev_format *fmt)
 {
        struct rkisp1_isp *isp = container_of(sd, struct rkisp1_isp, sd);
 
        mutex_lock(&isp->ops_lock);
        if (fmt->pad == RKISP1_ISP_PAD_SINK_VIDEO)
-               rkisp1_isp_set_sink_fmt(isp, cfg, &fmt->format, fmt->which);
+               rkisp1_isp_set_sink_fmt(isp, sd_state, &fmt->format,
+                                       fmt->which);
        else if (fmt->pad == RKISP1_ISP_PAD_SOURCE_VIDEO)
-               rkisp1_isp_set_src_fmt(isp, cfg, &fmt->format, fmt->which);
+               rkisp1_isp_set_src_fmt(isp, sd_state, &fmt->format,
+                                      fmt->which);
        else
-               fmt->format = *rkisp1_isp_get_pad_fmt(isp, cfg, fmt->pad,
+               fmt->format = *rkisp1_isp_get_pad_fmt(isp, sd_state, fmt->pad,
                                                      fmt->which);
 
        mutex_unlock(&isp->ops_lock);
@@ -838,7 +851,7 @@ static int rkisp1_isp_set_fmt(struct v4l2_subdev *sd,
 }
 
 static int rkisp1_isp_get_selection(struct v4l2_subdev *sd,
-                                   struct v4l2_subdev_pad_config *cfg,
+                                   struct v4l2_subdev_state *sd_state,
                                    struct v4l2_subdev_selection *sel)
 {
        struct rkisp1_isp *isp = container_of(sd, struct rkisp1_isp, sd);
@@ -854,20 +867,20 @@ static int rkisp1_isp_get_selection(struct v4l2_subdev *sd,
                if (sel->pad == RKISP1_ISP_PAD_SINK_VIDEO) {
                        struct v4l2_mbus_framefmt *fmt;
 
-                       fmt = rkisp1_isp_get_pad_fmt(isp, cfg, sel->pad,
+                       fmt = rkisp1_isp_get_pad_fmt(isp, sd_state, sel->pad,
                                                     sel->which);
                        sel->r.height = fmt->height;
                        sel->r.width = fmt->width;
                        sel->r.left = 0;
                        sel->r.top = 0;
                } else {
-                       sel->r = *rkisp1_isp_get_pad_crop(isp, cfg,
-                                               RKISP1_ISP_PAD_SINK_VIDEO,
-                                               sel->which);
+                       sel->r = *rkisp1_isp_get_pad_crop(isp, sd_state,
+                                                         RKISP1_ISP_PAD_SINK_VIDEO,
+                                                         sel->which);
                }
                break;
        case V4L2_SEL_TGT_CROP:
-               sel->r = *rkisp1_isp_get_pad_crop(isp, cfg, sel->pad,
+               sel->r = *rkisp1_isp_get_pad_crop(isp, sd_state, sel->pad,
                                                  sel->which);
                break;
        default:
@@ -878,7 +891,7 @@ static int rkisp1_isp_get_selection(struct v4l2_subdev *sd,
 }
 
 static int rkisp1_isp_set_selection(struct v4l2_subdev *sd,
-                                   struct v4l2_subdev_pad_config *cfg,
+                                   struct v4l2_subdev_state *sd_state,
                                    struct v4l2_subdev_selection *sel)
 {
        struct rkisp1_device *rkisp1 =
@@ -893,9 +906,9 @@ static int rkisp1_isp_set_selection(struct v4l2_subdev *sd,
                sel->pad, sel->r.left, sel->r.top, sel->r.width, sel->r.height);
        mutex_lock(&isp->ops_lock);
        if (sel->pad == RKISP1_ISP_PAD_SINK_VIDEO)
-               rkisp1_isp_set_sink_crop(isp, cfg, &sel->r, sel->which);
+               rkisp1_isp_set_sink_crop(isp, sd_state, &sel->r, sel->which);
        else if (sel->pad == RKISP1_ISP_PAD_SOURCE_VIDEO)
-               rkisp1_isp_set_src_crop(isp, cfg, &sel->r, sel->which);
+               rkisp1_isp_set_src_crop(isp, sd_state, &sel->r, sel->which);
        else
                ret = -EINVAL;
 
@@ -1037,6 +1050,9 @@ static const struct v4l2_subdev_ops rkisp1_isp_ops = {
 
 int rkisp1_isp_register(struct rkisp1_device *rkisp1)
 {
+       struct v4l2_subdev_state state = {
+               .pads = rkisp1->isp.pad_cfg
+               };
        struct rkisp1_isp *isp = &rkisp1->isp;
        struct media_pad *pads = isp->pads;
        struct v4l2_subdev *sd = &isp->sd;
@@ -1069,7 +1085,7 @@ int rkisp1_isp_register(struct rkisp1_device *rkisp1)
                goto err_cleanup_media_entity;
        }
 
-       rkisp1_isp_init_config(sd, rkisp1->isp.pad_cfg);
+       rkisp1_isp_init_config(sd, &state);
        return 0;
 
 err_cleanup_media_entity:
index 79deed8..2070f4b 100644 (file)
@@ -180,24 +180,30 @@ static const struct rkisp1_rsz_config rkisp1_rsz_config_sp = {
 
 static struct v4l2_mbus_framefmt *
 rkisp1_rsz_get_pad_fmt(struct rkisp1_resizer *rsz,
-                      struct v4l2_subdev_pad_config *cfg,
+                      struct v4l2_subdev_state *sd_state,
                       unsigned int pad, u32 which)
 {
+       struct v4l2_subdev_state state = {
+               .pads = rsz->pad_cfg
+               };
        if (which == V4L2_SUBDEV_FORMAT_TRY)
-               return v4l2_subdev_get_try_format(&rsz->sd, cfg, pad);
+               return v4l2_subdev_get_try_format(&rsz->sd, sd_state, pad);
        else
-               return v4l2_subdev_get_try_format(&rsz->sd, rsz->pad_cfg, pad);
+               return v4l2_subdev_get_try_format(&rsz->sd, &state, pad);
 }
 
 static struct v4l2_rect *
 rkisp1_rsz_get_pad_crop(struct rkisp1_resizer *rsz,
-                       struct v4l2_subdev_pad_config *cfg,
+                       struct v4l2_subdev_state *sd_state,
                        unsigned int pad, u32 which)
 {
+       struct v4l2_subdev_state state = {
+               .pads = rsz->pad_cfg
+               };
        if (which == V4L2_SUBDEV_FORMAT_TRY)
-               return v4l2_subdev_get_try_crop(&rsz->sd, cfg, pad);
+               return v4l2_subdev_get_try_crop(&rsz->sd, sd_state, pad);
        else
-               return v4l2_subdev_get_try_crop(&rsz->sd, rsz->pad_cfg, pad);
+               return v4l2_subdev_get_try_crop(&rsz->sd, &state, pad);
 }
 
 /* ----------------------------------------------------------------------------
@@ -451,12 +457,15 @@ static void rkisp1_rsz_config(struct rkisp1_resizer *rsz,
  */
 
 static int rkisp1_rsz_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 rkisp1_resizer *rsz =
                container_of(sd, struct rkisp1_resizer, sd);
        struct v4l2_subdev_pad_config dummy_cfg;
+       struct v4l2_subdev_state pad_state = {
+               .pads = &dummy_cfg
+               };
        u32 pad = code->pad;
        int ret;
 
@@ -481,7 +490,7 @@ static int rkisp1_rsz_enum_mbus_code(struct v4l2_subdev *sd,
        /* supported mbus codes on the sink pad are the same as isp src pad */
        code->pad = RKISP1_ISP_PAD_SOURCE_VIDEO;
        ret = v4l2_subdev_call(&rsz->rkisp1->isp.sd, pad, enum_mbus_code,
-                              &dummy_cfg, code);
+                              &pad_state, code);
 
        /* restore pad */
        code->pad = pad;
@@ -490,24 +499,27 @@ static int rkisp1_rsz_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int rkisp1_rsz_init_config(struct v4l2_subdev *sd,
-                                 struct v4l2_subdev_pad_config *cfg)
+                                 struct v4l2_subdev_state *sd_state)
 {
        struct v4l2_mbus_framefmt *sink_fmt, *src_fmt;
        struct v4l2_rect *sink_crop;
 
-       sink_fmt = v4l2_subdev_get_try_format(sd, cfg, RKISP1_RSZ_PAD_SRC);
+       sink_fmt = v4l2_subdev_get_try_format(sd, sd_state,
+                                             RKISP1_RSZ_PAD_SRC);
        sink_fmt->width = RKISP1_DEFAULT_WIDTH;
        sink_fmt->height = RKISP1_DEFAULT_HEIGHT;
        sink_fmt->field = V4L2_FIELD_NONE;
        sink_fmt->code = RKISP1_DEF_FMT;
 
-       sink_crop = v4l2_subdev_get_try_crop(sd, cfg, RKISP1_RSZ_PAD_SINK);
+       sink_crop = v4l2_subdev_get_try_crop(sd, sd_state,
+                                            RKISP1_RSZ_PAD_SINK);
        sink_crop->width = RKISP1_DEFAULT_WIDTH;
        sink_crop->height = RKISP1_DEFAULT_HEIGHT;
        sink_crop->left = 0;
        sink_crop->top = 0;
 
-       src_fmt = v4l2_subdev_get_try_format(sd, cfg, RKISP1_RSZ_PAD_SINK);
+       src_fmt = v4l2_subdev_get_try_format(sd, sd_state,
+                                            RKISP1_RSZ_PAD_SINK);
        *src_fmt = *sink_fmt;
 
        /* NOTE: there is no crop in the source pad, only in the sink */
@@ -516,15 +528,17 @@ static int rkisp1_rsz_init_config(struct v4l2_subdev *sd,
 }
 
 static void rkisp1_rsz_set_src_fmt(struct rkisp1_resizer *rsz,
-                                  struct v4l2_subdev_pad_config *cfg,
+                                  struct v4l2_subdev_state *sd_state,
                                   struct v4l2_mbus_framefmt *format,
                                   unsigned int which)
 {
        const struct rkisp1_isp_mbus_info *sink_mbus_info;
        struct v4l2_mbus_framefmt *src_fmt, *sink_fmt;
 
-       sink_fmt = rkisp1_rsz_get_pad_fmt(rsz, cfg, RKISP1_RSZ_PAD_SINK, which);
-       src_fmt = rkisp1_rsz_get_pad_fmt(rsz, cfg, RKISP1_RSZ_PAD_SRC, which);
+       sink_fmt = rkisp1_rsz_get_pad_fmt(rsz, sd_state, RKISP1_RSZ_PAD_SINK,
+                                         which);
+       src_fmt = rkisp1_rsz_get_pad_fmt(rsz, sd_state, RKISP1_RSZ_PAD_SRC,
+                                        which);
        sink_mbus_info = rkisp1_isp_mbus_info_get(sink_fmt->code);
 
        /* for YUV formats, userspace can change the mbus code on the src pad if it is supported */
@@ -543,7 +557,7 @@ static void rkisp1_rsz_set_src_fmt(struct rkisp1_resizer *rsz,
 }
 
 static void rkisp1_rsz_set_sink_crop(struct rkisp1_resizer *rsz,
-                                    struct v4l2_subdev_pad_config *cfg,
+                                    struct v4l2_subdev_state *sd_state,
                                     struct v4l2_rect *r,
                                     unsigned int which)
 {
@@ -551,8 +565,10 @@ static void rkisp1_rsz_set_sink_crop(struct rkisp1_resizer *rsz,
        struct v4l2_mbus_framefmt *sink_fmt;
        struct v4l2_rect *sink_crop;
 
-       sink_fmt = rkisp1_rsz_get_pad_fmt(rsz, cfg, RKISP1_RSZ_PAD_SINK, which);
-       sink_crop = rkisp1_rsz_get_pad_crop(rsz, cfg, RKISP1_RSZ_PAD_SINK,
+       sink_fmt = rkisp1_rsz_get_pad_fmt(rsz, sd_state, RKISP1_RSZ_PAD_SINK,
+                                         which);
+       sink_crop = rkisp1_rsz_get_pad_crop(rsz, sd_state,
+                                           RKISP1_RSZ_PAD_SINK,
                                            which);
 
        /* Not crop for MP bayer raw data */
@@ -579,7 +595,7 @@ static void rkisp1_rsz_set_sink_crop(struct rkisp1_resizer *rsz,
 }
 
 static void rkisp1_rsz_set_sink_fmt(struct rkisp1_resizer *rsz,
-                                   struct v4l2_subdev_pad_config *cfg,
+                                   struct v4l2_subdev_state *sd_state,
                                    struct v4l2_mbus_framefmt *format,
                                    unsigned int which)
 {
@@ -587,9 +603,12 @@ static void rkisp1_rsz_set_sink_fmt(struct rkisp1_resizer *rsz,
        struct v4l2_mbus_framefmt *sink_fmt, *src_fmt;
        struct v4l2_rect *sink_crop;
 
-       sink_fmt = rkisp1_rsz_get_pad_fmt(rsz, cfg, RKISP1_RSZ_PAD_SINK, which);
-       src_fmt = rkisp1_rsz_get_pad_fmt(rsz, cfg, RKISP1_RSZ_PAD_SRC, which);
-       sink_crop = rkisp1_rsz_get_pad_crop(rsz, cfg, RKISP1_RSZ_PAD_SINK,
+       sink_fmt = rkisp1_rsz_get_pad_fmt(rsz, sd_state, RKISP1_RSZ_PAD_SINK,
+                                         which);
+       src_fmt = rkisp1_rsz_get_pad_fmt(rsz, sd_state, RKISP1_RSZ_PAD_SRC,
+                                        which);
+       sink_crop = rkisp1_rsz_get_pad_crop(rsz, sd_state,
+                                           RKISP1_RSZ_PAD_SINK,
                                            which);
        if (rsz->id == RKISP1_SELFPATH)
                sink_fmt->code = MEDIA_BUS_FMT_YUYV8_2X8;
@@ -617,24 +636,25 @@ static void rkisp1_rsz_set_sink_fmt(struct rkisp1_resizer *rsz,
        *format = *sink_fmt;
 
        /* Update sink crop */
-       rkisp1_rsz_set_sink_crop(rsz, cfg, sink_crop, which);
+       rkisp1_rsz_set_sink_crop(rsz, sd_state, sink_crop, which);
 }
 
 static int rkisp1_rsz_get_fmt(struct v4l2_subdev *sd,
-                             struct v4l2_subdev_pad_config *cfg,
+                             struct v4l2_subdev_state *sd_state,
                              struct v4l2_subdev_format *fmt)
 {
        struct rkisp1_resizer *rsz =
                container_of(sd, struct rkisp1_resizer, sd);
 
        mutex_lock(&rsz->ops_lock);
-       fmt->format = *rkisp1_rsz_get_pad_fmt(rsz, cfg, fmt->pad, fmt->which);
+       fmt->format = *rkisp1_rsz_get_pad_fmt(rsz, sd_state, fmt->pad,
+                                             fmt->which);
        mutex_unlock(&rsz->ops_lock);
        return 0;
 }
 
 static int rkisp1_rsz_set_fmt(struct v4l2_subdev *sd,
-                             struct v4l2_subdev_pad_config *cfg,
+                             struct v4l2_subdev_state *sd_state,
                              struct v4l2_subdev_format *fmt)
 {
        struct rkisp1_resizer *rsz =
@@ -642,16 +662,18 @@ static int rkisp1_rsz_set_fmt(struct v4l2_subdev *sd,
 
        mutex_lock(&rsz->ops_lock);
        if (fmt->pad == RKISP1_RSZ_PAD_SINK)
-               rkisp1_rsz_set_sink_fmt(rsz, cfg, &fmt->format, fmt->which);
+               rkisp1_rsz_set_sink_fmt(rsz, sd_state, &fmt->format,
+                                       fmt->which);
        else
-               rkisp1_rsz_set_src_fmt(rsz, cfg, &fmt->format, fmt->which);
+               rkisp1_rsz_set_src_fmt(rsz, sd_state, &fmt->format,
+                                      fmt->which);
 
        mutex_unlock(&rsz->ops_lock);
        return 0;
 }
 
 static int rkisp1_rsz_get_selection(struct v4l2_subdev *sd,
-                                   struct v4l2_subdev_pad_config *cfg,
+                                   struct v4l2_subdev_state *sd_state,
                                    struct v4l2_subdev_selection *sel)
 {
        struct rkisp1_resizer *rsz =
@@ -665,7 +687,8 @@ static int rkisp1_rsz_get_selection(struct v4l2_subdev *sd,
        mutex_lock(&rsz->ops_lock);
        switch (sel->target) {
        case V4L2_SEL_TGT_CROP_BOUNDS:
-               mf_sink = rkisp1_rsz_get_pad_fmt(rsz, cfg, RKISP1_RSZ_PAD_SINK,
+               mf_sink = rkisp1_rsz_get_pad_fmt(rsz, sd_state,
+                                                RKISP1_RSZ_PAD_SINK,
                                                 sel->which);
                sel->r.height = mf_sink->height;
                sel->r.width = mf_sink->width;
@@ -673,7 +696,8 @@ static int rkisp1_rsz_get_selection(struct v4l2_subdev *sd,
                sel->r.top = 0;
                break;
        case V4L2_SEL_TGT_CROP:
-               sel->r = *rkisp1_rsz_get_pad_crop(rsz, cfg, RKISP1_RSZ_PAD_SINK,
+               sel->r = *rkisp1_rsz_get_pad_crop(rsz, sd_state,
+                                                 RKISP1_RSZ_PAD_SINK,
                                                  sel->which);
                break;
        default:
@@ -685,7 +709,7 @@ static int rkisp1_rsz_get_selection(struct v4l2_subdev *sd,
 }
 
 static int rkisp1_rsz_set_selection(struct v4l2_subdev *sd,
-                                   struct v4l2_subdev_pad_config *cfg,
+                                   struct v4l2_subdev_state *sd_state,
                                    struct v4l2_subdev_selection *sel)
 {
        struct rkisp1_resizer *rsz =
@@ -698,7 +722,7 @@ static int rkisp1_rsz_set_selection(struct v4l2_subdev *sd,
                sel->pad, sel->r.left, sel->r.top, sel->r.width, sel->r.height);
 
        mutex_lock(&rsz->ops_lock);
-       rkisp1_rsz_set_sink_crop(rsz, cfg, &sel->r, sel->which);
+       rkisp1_rsz_set_sink_crop(rsz, sd_state, &sel->r, sel->which);
        mutex_unlock(&rsz->ops_lock);
 
        return 0;
@@ -764,6 +788,9 @@ static void rkisp1_rsz_unregister(struct rkisp1_resizer *rsz)
 
 static int rkisp1_rsz_register(struct rkisp1_resizer *rsz)
 {
+       struct v4l2_subdev_state state = {
+               .pads = rsz->pad_cfg
+               };
        static const char * const dev_names[] = {
                RKISP1_RSZ_MP_DEV_NAME,
                RKISP1_RSZ_SP_DEV_NAME
@@ -802,7 +829,7 @@ static int rkisp1_rsz_register(struct rkisp1_resizer *rsz)
                goto err_cleanup_media_entity;
        }
 
-       rkisp1_rsz_init_config(sd, rsz->pad_cfg);
+       rkisp1_rsz_init_config(sd, &state);
        return 0;
 
 err_cleanup_media_entity:
index 62241ec..140854a 100644 (file)
@@ -1199,7 +1199,7 @@ static const u32 camif_mbus_formats[] = {
  */
 
 static int s3c_camif_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(camif_mbus_formats))
@@ -1210,14 +1210,14 @@ static int s3c_camif_subdev_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int s3c_camif_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 camif_dev *camif = 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);
                fmt->format = *mf;
                return 0;
        }
@@ -1278,7 +1278,7 @@ static void __camif_subdev_try_format(struct camif_dev *camif,
 }
 
 static int s3c_camif_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 camif_dev *camif = v4l2_get_subdevdata(sd);
@@ -1306,7 +1306,7 @@ static int s3c_camif_subdev_set_fmt(struct v4l2_subdev *sd,
        __camif_subdev_try_format(camif, mf, fmt->pad);
 
        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;
                mutex_unlock(&camif->lock);
                return 0;
@@ -1345,7 +1345,7 @@ static int s3c_camif_subdev_set_fmt(struct v4l2_subdev *sd,
 }
 
 static int s3c_camif_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 camif_dev *camif = v4l2_get_subdevdata(sd);
@@ -1358,7 +1358,7 @@ static int s3c_camif_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;
        }
 
@@ -1432,7 +1432,7 @@ static void __camif_try_crop(struct camif_dev *camif, struct v4l2_rect *r)
 }
 
 static int s3c_camif_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 camif_dev *camif = v4l2_get_subdevdata(sd);
@@ -1446,7 +1446,7 @@ static int s3c_camif_subdev_set_selection(struct v4l2_subdev *sd,
        __camif_try_crop(camif, &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;
                unsigned int i;
index b33c6e7..d914cce 100644 (file)
@@ -600,7 +600,7 @@ static struct media_entity *dcmi_find_source(struct stm32_dcmi *dcmi)
 }
 
 static int dcmi_pipeline_s_fmt(struct stm32_dcmi *dcmi,
-                              struct v4l2_subdev_pad_config *pad_cfg,
+                              struct v4l2_subdev_state *sd_state,
                               struct v4l2_subdev_format *format)
 {
        struct media_entity *entity = &dcmi->source->entity;
@@ -642,7 +642,7 @@ static int dcmi_pipeline_s_fmt(struct stm32_dcmi *dcmi,
                        format->format.width, format->format.height);
 
                fmt.pad = pad->index;
-               ret = v4l2_subdev_call(subdev, pad, set_fmt, pad_cfg, &fmt);
+               ret = v4l2_subdev_call(subdev, pad, set_fmt, sd_state, &fmt);
                if (ret < 0) {
                        dev_err(dcmi->dev, "%s: Failed to set format 0x%x %ux%u on \"%s\":%d pad (%d)\n",
                                __func__, format->format.code,
@@ -978,6 +978,9 @@ static int dcmi_try_fmt(struct stm32_dcmi *dcmi, struct v4l2_format *f,
        struct dcmi_framesize sd_fsize;
        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,
        };
@@ -1013,7 +1016,7 @@ static int dcmi_try_fmt(struct stm32_dcmi *dcmi, struct v4l2_format *f,
 
        v4l2_fill_mbus_format(&format.format, pix, sd_fmt->mbus_code);
        ret = v4l2_subdev_call(dcmi->source, pad, set_fmt,
-                              &pad_cfg, &format);
+                              &pad_state, &format);
        if (ret < 0)
                return ret;
 
@@ -1163,6 +1166,9 @@ static int dcmi_set_sensor_format(struct stm32_dcmi *dcmi,
                .which = V4L2_SUBDEV_FORMAT_TRY,
        };
        struct v4l2_subdev_pad_config pad_cfg;
+       struct v4l2_subdev_state pad_state = {
+               .pads = &pad_cfg
+               };
        int ret;
 
        sd_fmt = find_format_by_fourcc(dcmi, pix->pixelformat);
@@ -1176,7 +1182,7 @@ static int dcmi_set_sensor_format(struct stm32_dcmi *dcmi,
 
        v4l2_fill_mbus_format(&format.format, pix, sd_fmt->mbus_code);
        ret = v4l2_subdev_call(dcmi->source, pad, set_fmt,
-                              &pad_cfg, &format);
+                              &pad_state, &format);
        if (ret < 0)
                return ret;
 
index 54b9099..3872027 100644 (file)
@@ -271,25 +271,26 @@ static const struct v4l2_mbus_framefmt sun4i_csi_pad_fmt_default = {
 };
 
 static int sun4i_csi_subdev_init_cfg(struct v4l2_subdev *subdev,
-                                    struct v4l2_subdev_pad_config *cfg)
+                                    struct v4l2_subdev_state *sd_state)
 {
        struct v4l2_mbus_framefmt *fmt;
 
-       fmt = v4l2_subdev_get_try_format(subdev, cfg, CSI_SUBDEV_SINK);
+       fmt = v4l2_subdev_get_try_format(subdev, sd_state, CSI_SUBDEV_SINK);
        *fmt = sun4i_csi_pad_fmt_default;
 
        return 0;
 }
 
 static int sun4i_csi_subdev_get_fmt(struct v4l2_subdev *subdev,
-                                   struct v4l2_subdev_pad_config *cfg,
+                                   struct v4l2_subdev_state *sd_state,
                                    struct v4l2_subdev_format *fmt)
 {
        struct sun4i_csi *csi = container_of(subdev, struct sun4i_csi, subdev);
        struct v4l2_mbus_framefmt *subdev_fmt;
 
        if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
-               subdev_fmt = v4l2_subdev_get_try_format(subdev, cfg, fmt->pad);
+               subdev_fmt = v4l2_subdev_get_try_format(subdev, sd_state,
+                                                       fmt->pad);
        else
                subdev_fmt = &csi->subdev_fmt;
 
@@ -299,14 +300,15 @@ static int sun4i_csi_subdev_get_fmt(struct v4l2_subdev *subdev,
 }
 
 static int sun4i_csi_subdev_set_fmt(struct v4l2_subdev *subdev,
-                                   struct v4l2_subdev_pad_config *cfg,
+                                   struct v4l2_subdev_state *sd_state,
                                    struct v4l2_subdev_format *fmt)
 {
        struct sun4i_csi *csi = container_of(subdev, struct sun4i_csi, subdev);
        struct v4l2_mbus_framefmt *subdev_fmt;
 
        if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
-               subdev_fmt = v4l2_subdev_get_try_format(subdev, cfg, fmt->pad);
+               subdev_fmt = v4l2_subdev_get_try_format(subdev, sd_state,
+                                                       fmt->pad);
        else
                subdev_fmt = &csi->subdev_fmt;
 
@@ -325,7 +327,7 @@ static int sun4i_csi_subdev_set_fmt(struct v4l2_subdev *subdev,
 
 static int
 sun4i_csi_subdev_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 *mbus)
 {
        if (mbus->index >= ARRAY_SIZE(sun4i_csi_formats))
index cbe6114..124a4e2 100644 (file)
@@ -586,12 +586,12 @@ static inline struct cal_camerarx *to_cal_camerarx(struct v4l2_subdev *sd)
 
 static struct v4l2_mbus_framefmt *
 cal_camerarx_get_pad_format(struct cal_camerarx *phy,
-                           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(&phy->subdev, cfg, pad);
+               return v4l2_subdev_get_try_format(&phy->subdev, sd_state, pad);
        case V4L2_SUBDEV_FORMAT_ACTIVE:
                return &phy->formats[pad];
        default:
@@ -611,7 +611,7 @@ static int cal_camerarx_sd_s_stream(struct v4l2_subdev *sd, int enable)
 }
 
 static int cal_camerarx_sd_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 cal_camerarx *phy = to_cal_camerarx(sd);
@@ -623,7 +623,7 @@ static int cal_camerarx_sd_enum_mbus_code(struct v4l2_subdev *sd,
                if (code->index > 0)
                        return -EINVAL;
 
-               fmt = cal_camerarx_get_pad_format(phy, cfg,
+               fmt = cal_camerarx_get_pad_format(phy, sd_state,
                                                  CAL_CAMERARX_PAD_SINK,
                                                  code->which);
                code->code = fmt->code;
@@ -639,7 +639,7 @@ static int cal_camerarx_sd_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int cal_camerarx_sd_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 cal_camerarx *phy = to_cal_camerarx(sd);
@@ -652,7 +652,7 @@ static int cal_camerarx_sd_enum_frame_size(struct v4l2_subdev *sd,
        if (fse->pad == CAL_CAMERARX_PAD_SOURCE) {
                struct v4l2_mbus_framefmt *fmt;
 
-               fmt = cal_camerarx_get_pad_format(phy, cfg,
+               fmt = cal_camerarx_get_pad_format(phy, sd_state,
                                                  CAL_CAMERARX_PAD_SINK,
                                                  fse->which);
                if (fse->code != fmt->code)
@@ -679,20 +679,21 @@ static int cal_camerarx_sd_enum_frame_size(struct v4l2_subdev *sd,
 }
 
 static int cal_camerarx_sd_get_fmt(struct v4l2_subdev *sd,
-                                  struct v4l2_subdev_pad_config *cfg,
+                                  struct v4l2_subdev_state *sd_state,
                                   struct v4l2_subdev_format *format)
 {
        struct cal_camerarx *phy = to_cal_camerarx(sd);
        struct v4l2_mbus_framefmt *fmt;
 
-       fmt = cal_camerarx_get_pad_format(phy, cfg, format->pad, format->which);
+       fmt = cal_camerarx_get_pad_format(phy, sd_state, format->pad,
+                                         format->which);
        format->format = *fmt;
 
        return 0;
 }
 
 static int cal_camerarx_sd_set_fmt(struct v4l2_subdev *sd,
-                                  struct v4l2_subdev_pad_config *cfg,
+                                  struct v4l2_subdev_state *sd_state,
                                   struct v4l2_subdev_format *format)
 {
        struct cal_camerarx *phy = to_cal_camerarx(sd);
@@ -702,7 +703,7 @@ static int cal_camerarx_sd_set_fmt(struct v4l2_subdev *sd,
 
        /* No transcoding, source and sink formats must match. */
        if (format->pad == CAL_CAMERARX_PAD_SOURCE)
-               return cal_camerarx_sd_get_fmt(sd, cfg, format);
+               return cal_camerarx_sd_get_fmt(sd, sd_state, format);
 
        /*
         * Default to the first format is the requested media bus code isn't
@@ -727,11 +728,13 @@ static int cal_camerarx_sd_set_fmt(struct v4l2_subdev *sd,
        format->format.code = fmtinfo->code;
 
        /* Store the format and propagate it to the source pad. */
-       fmt = cal_camerarx_get_pad_format(phy, cfg, CAL_CAMERARX_PAD_SINK,
+       fmt = cal_camerarx_get_pad_format(phy, sd_state,
+                                         CAL_CAMERARX_PAD_SINK,
                                          format->which);
        *fmt = format->format;
 
-       fmt = cal_camerarx_get_pad_format(phy, cfg, CAL_CAMERARX_PAD_SOURCE,
+       fmt = cal_camerarx_get_pad_format(phy, sd_state,
+                                         CAL_CAMERARX_PAD_SOURCE,
                                          format->which);
        *fmt = format->format;
 
@@ -742,11 +745,11 @@ static int cal_camerarx_sd_set_fmt(struct v4l2_subdev *sd,
 }
 
 static int cal_camerarx_sd_init_cfg(struct v4l2_subdev *sd,
-                                   struct v4l2_subdev_pad_config *cfg)
+                                   struct v4l2_subdev_state *sd_state)
 {
        struct v4l2_subdev_format format = {
-               .which = cfg ? V4L2_SUBDEV_FORMAT_TRY
-                      : V4L2_SUBDEV_FORMAT_ACTIVE,
+               .which = sd_state ? V4L2_SUBDEV_FORMAT_TRY
+               : V4L2_SUBDEV_FORMAT_ACTIVE,
                .pad = CAL_CAMERARX_PAD_SINK,
                .format = {
                        .width = 640,
@@ -760,7 +763,7 @@ static int cal_camerarx_sd_init_cfg(struct v4l2_subdev *sd,
                },
        };
 
-       return cal_camerarx_sd_set_fmt(sd, cfg, &format);
+       return cal_camerarx_sd_set_fmt(sd, sd_state, &format);
 }
 
 static const struct v4l2_subdev_video_ops cal_camerarx_video_ops = {
index ed0ad68..3655573 100644 (file)
@@ -844,6 +844,9 @@ static int viacam_do_try_fmt(struct via_camera *cam,
 {
        int ret;
        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,
        };
@@ -852,7 +855,7 @@ static int viacam_do_try_fmt(struct via_camera *cam,
        upix->pixelformat = f->pixelformat;
        viacam_fmt_pre(upix, spix);
        v4l2_fill_mbus_format(&format.format, spix, 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(spix, &format.format);
        viacam_fmt_post(upix, spix);
        return ret;
index 133122e..f7e2a5e 100644 (file)
@@ -140,14 +140,14 @@ static const struct v4l2_subdev_video_ops video_mux_subdev_video_ops = {
 
 static struct v4l2_mbus_framefmt *
 __video_mux_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 video_mux *vmux = v4l2_subdev_to_video_mux(sd);
 
        switch (which) {
        case V4L2_SUBDEV_FORMAT_TRY:
-               return v4l2_subdev_get_try_format(sd, cfg, pad);
+               return v4l2_subdev_get_try_format(sd, sd_state, pad);
        case V4L2_SUBDEV_FORMAT_ACTIVE:
                return &vmux->format_mbus[pad];
        default:
@@ -156,14 +156,15 @@ __video_mux_get_pad_format(struct v4l2_subdev *sd,
 }
 
 static int video_mux_get_format(struct v4l2_subdev *sd,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *sdformat)
 {
        struct video_mux *vmux = v4l2_subdev_to_video_mux(sd);
 
        mutex_lock(&vmux->lock);
 
-       sdformat->format = *__video_mux_get_pad_format(sd, cfg, sdformat->pad,
+       sdformat->format = *__video_mux_get_pad_format(sd, sd_state,
+                                                      sdformat->pad,
                                                       sdformat->which);
 
        mutex_unlock(&vmux->lock);
@@ -172,7 +173,7 @@ static int video_mux_get_format(struct v4l2_subdev *sd,
 }
 
 static int video_mux_set_format(struct v4l2_subdev *sd,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *sdformat)
 {
        struct video_mux *vmux = v4l2_subdev_to_video_mux(sd);
@@ -180,12 +181,13 @@ static int video_mux_set_format(struct v4l2_subdev *sd,
        struct media_pad *pad = &vmux->pads[sdformat->pad];
        u16 source_pad = sd->entity.num_pads - 1;
 
-       mbusformat = __video_mux_get_pad_format(sd, cfg, sdformat->pad,
-                                           sdformat->which);
+       mbusformat = __video_mux_get_pad_format(sd, sd_state, sdformat->pad,
+                                               sdformat->which);
        if (!mbusformat)
                return -EINVAL;
 
-       source_mbusformat = __video_mux_get_pad_format(sd, cfg, source_pad,
+       source_mbusformat = __video_mux_get_pad_format(sd, sd_state,
+                                                      source_pad,
                                                       sdformat->which);
        if (!source_mbusformat)
                return -EINVAL;
@@ -310,7 +312,7 @@ static int video_mux_set_format(struct v4l2_subdev *sd,
 }
 
 static int video_mux_init_cfg(struct v4l2_subdev *sd,
-                             struct v4l2_subdev_pad_config *cfg)
+                             struct v4l2_subdev_state *sd_state)
 {
        struct video_mux *vmux = v4l2_subdev_to_video_mux(sd);
        struct v4l2_mbus_framefmt *mbusformat;
@@ -319,7 +321,7 @@ static int video_mux_init_cfg(struct v4l2_subdev *sd,
        mutex_lock(&vmux->lock);
 
        for (i = 0; i < sd->entity.num_pads; i++) {
-               mbusformat = v4l2_subdev_get_try_format(sd, cfg, i);
+               mbusformat = v4l2_subdev_get_try_format(sd, sd_state, i);
                *mbusformat = video_mux_format_mbus_default;
        }
 
index 2d86c71..89385b4 100644 (file)
@@ -65,7 +65,7 @@ static const struct v4l2_ctrl_ops brx_ctrl_ops = {
  */
 
 static int brx_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)
 {
        static const unsigned int codes[] = {
@@ -73,12 +73,12 @@ static int brx_enum_mbus_code(struct v4l2_subdev *subdev,
                MEDIA_BUS_FMT_AYUV8_1X32,
        };
 
-       return vsp1_subdev_enum_mbus_code(subdev, cfg, code, codes,
+       return vsp1_subdev_enum_mbus_code(subdev, sd_state, code, codes,
                                          ARRAY_SIZE(codes));
 }
 
 static int brx_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)
@@ -97,14 +97,14 @@ static int brx_enum_frame_size(struct v4l2_subdev *subdev,
 }
 
 static struct v4l2_rect *brx_get_compose(struct vsp1_brx *brx,
-                                        struct v4l2_subdev_pad_config *cfg,
+                                        struct v4l2_subdev_state *sd_state,
                                         unsigned int pad)
 {
-       return v4l2_subdev_get_try_compose(&brx->entity.subdev, cfg, pad);
+       return v4l2_subdev_get_try_compose(&brx->entity.subdev, sd_state, pad);
 }
 
 static void brx_try_format(struct vsp1_brx *brx,
-                          struct v4l2_subdev_pad_config *config,
+                          struct v4l2_subdev_state *sd_state,
                           unsigned int pad, struct v4l2_mbus_framefmt *fmt)
 {
        struct v4l2_mbus_framefmt *format;
@@ -119,7 +119,7 @@ static void brx_try_format(struct vsp1_brx *brx,
 
        default:
                /* The BRx can't perform format conversion. */
-               format = vsp1_entity_get_pad_format(&brx->entity, config,
+               format = vsp1_entity_get_pad_format(&brx->entity, sd_state,
                                                    BRX_PAD_SINK(0));
                fmt->code = format->code;
                break;
@@ -132,17 +132,18 @@ static void brx_try_format(struct vsp1_brx *brx,
 }
 
 static int brx_set_format(struct v4l2_subdev *subdev,
-                         struct v4l2_subdev_pad_config *cfg,
+                         struct v4l2_subdev_state *sd_state,
                          struct v4l2_subdev_format *fmt)
 {
        struct vsp1_brx *brx = to_brx(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
        struct v4l2_mbus_framefmt *format;
        int ret = 0;
 
        mutex_lock(&brx->entity.lock);
 
-       config = vsp1_entity_get_pad_config(&brx->entity, cfg, fmt->which);
+       config = vsp1_entity_get_pad_config(&brx->entity, sd_state,
+                                           fmt->which);
        if (!config) {
                ret = -EINVAL;
                goto done;
@@ -181,11 +182,11 @@ done:
 }
 
 static int brx_get_selection(struct v4l2_subdev *subdev,
-                            struct v4l2_subdev_pad_config *cfg,
+                            struct v4l2_subdev_state *sd_state,
                             struct v4l2_subdev_selection *sel)
 {
        struct vsp1_brx *brx = to_brx(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
 
        if (sel->pad == brx->entity.source_pad)
                return -EINVAL;
@@ -199,7 +200,7 @@ static int brx_get_selection(struct v4l2_subdev *subdev,
                return 0;
 
        case V4L2_SEL_TGT_COMPOSE:
-               config = vsp1_entity_get_pad_config(&brx->entity, cfg,
+               config = vsp1_entity_get_pad_config(&brx->entity, sd_state,
                                                    sel->which);
                if (!config)
                        return -EINVAL;
@@ -215,11 +216,11 @@ static int brx_get_selection(struct v4l2_subdev *subdev,
 }
 
 static int brx_set_selection(struct v4l2_subdev *subdev,
-                            struct v4l2_subdev_pad_config *cfg,
+                            struct v4l2_subdev_state *sd_state,
                             struct v4l2_subdev_selection *sel)
 {
        struct vsp1_brx *brx = to_brx(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
        struct v4l2_mbus_framefmt *format;
        struct v4l2_rect *compose;
        int ret = 0;
@@ -232,7 +233,8 @@ static int brx_set_selection(struct v4l2_subdev *subdev,
 
        mutex_lock(&brx->entity.lock);
 
-       config = vsp1_entity_get_pad_config(&brx->entity, cfg, sel->which);
+       config = vsp1_entity_get_pad_config(&brx->entity, sd_state,
+                                           sel->which);
        if (!config) {
                ret = -EINVAL;
                goto done;
index a47b23b..c5217fe 100644 (file)
@@ -123,27 +123,28 @@ static const unsigned int clu_codes[] = {
 };
 
 static int clu_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)
 {
-       return vsp1_subdev_enum_mbus_code(subdev, cfg, code, clu_codes,
+       return vsp1_subdev_enum_mbus_code(subdev, sd_state, code, clu_codes,
                                          ARRAY_SIZE(clu_codes));
 }
 
 static int clu_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)
 {
-       return vsp1_subdev_enum_frame_size(subdev, cfg, fse, CLU_MIN_SIZE,
+       return vsp1_subdev_enum_frame_size(subdev, sd_state, fse,
+                                          CLU_MIN_SIZE,
                                           CLU_MIN_SIZE, CLU_MAX_SIZE,
                                           CLU_MAX_SIZE);
 }
 
 static int clu_set_format(struct v4l2_subdev *subdev,
-                         struct v4l2_subdev_pad_config *cfg,
+                         struct v4l2_subdev_state *sd_state,
                          struct v4l2_subdev_format *fmt)
 {
-       return vsp1_subdev_set_pad_format(subdev, cfg, fmt, clu_codes,
+       return vsp1_subdev_set_pad_format(subdev, sd_state, fmt, clu_codes,
                                          ARRAY_SIZE(clu_codes),
                                          CLU_MIN_SIZE, CLU_MIN_SIZE,
                                          CLU_MAX_SIZE, CLU_MAX_SIZE);
index aa9d228..6f51e5c 100644 (file)
@@ -103,7 +103,7 @@ void vsp1_entity_configure_partition(struct vsp1_entity *entity,
 /**
  * vsp1_entity_get_pad_config - Get the pad configuration for an entity
  * @entity: the entity
- * @cfg: the TRY pad configuration
+ * @sd_state: the TRY state
  * @which: configuration selector (ACTIVE or TRY)
  *
  * When called with which set to V4L2_SUBDEV_FORMAT_ACTIVE the caller must hold
@@ -114,9 +114,9 @@ void vsp1_entity_configure_partition(struct vsp1_entity *entity,
  * and simply returned when requested. The ACTIVE configuration comes from the
  * entity structure.
  */
-struct v4l2_subdev_pad_config *
+struct v4l2_subdev_state *
 vsp1_entity_get_pad_config(struct vsp1_entity *entity,
-                          struct v4l2_subdev_pad_config *cfg,
+                          struct v4l2_subdev_state *sd_state,
                           enum v4l2_subdev_format_whence which)
 {
        switch (which) {
@@ -124,14 +124,14 @@ vsp1_entity_get_pad_config(struct vsp1_entity *entity,
                return entity->config;
        case V4L2_SUBDEV_FORMAT_TRY:
        default:
-               return cfg;
+               return sd_state;
        }
 }
 
 /**
  * vsp1_entity_get_pad_format - Get a pad format from storage for an entity
  * @entity: the entity
- * @cfg: the configuration storage
+ * @sd_state: the state storage
  * @pad: the pad number
  *
  * Return the format stored in the given configuration for an entity's pad. The
@@ -139,16 +139,16 @@ vsp1_entity_get_pad_config(struct vsp1_entity *entity,
  */
 struct v4l2_mbus_framefmt *
 vsp1_entity_get_pad_format(struct vsp1_entity *entity,
-                          struct v4l2_subdev_pad_config *cfg,
+                          struct v4l2_subdev_state *sd_state,
                           unsigned int pad)
 {
-       return v4l2_subdev_get_try_format(&entity->subdev, cfg, pad);
+       return v4l2_subdev_get_try_format(&entity->subdev, sd_state, pad);
 }
 
 /**
  * vsp1_entity_get_pad_selection - Get a pad selection from storage for entity
  * @entity: the entity
- * @cfg: the configuration storage
+ * @sd_state: the state storage
  * @pad: the pad number
  * @target: the selection target
  *
@@ -158,14 +158,16 @@ vsp1_entity_get_pad_format(struct vsp1_entity *entity,
  */
 struct v4l2_rect *
 vsp1_entity_get_pad_selection(struct vsp1_entity *entity,
-                             struct v4l2_subdev_pad_config *cfg,
+                             struct v4l2_subdev_state *sd_state,
                              unsigned int pad, unsigned int target)
 {
        switch (target) {
        case V4L2_SEL_TGT_COMPOSE:
-               return v4l2_subdev_get_try_compose(&entity->subdev, cfg, pad);
+               return v4l2_subdev_get_try_compose(&entity->subdev, sd_state,
+                                                  pad);
        case V4L2_SEL_TGT_CROP:
-               return v4l2_subdev_get_try_crop(&entity->subdev, cfg, pad);
+               return v4l2_subdev_get_try_crop(&entity->subdev, sd_state,
+                                               pad);
        default:
                return NULL;
        }
@@ -180,7 +182,7 @@ vsp1_entity_get_pad_selection(struct vsp1_entity *entity,
  * function can be used as a handler for the subdev pad::init_cfg operation.
  */
 int vsp1_entity_init_cfg(struct v4l2_subdev *subdev,
-                        struct v4l2_subdev_pad_config *cfg)
+                        struct v4l2_subdev_state *sd_state)
 {
        struct v4l2_subdev_format format;
        unsigned int pad;
@@ -189,10 +191,10 @@ int vsp1_entity_init_cfg(struct v4l2_subdev *subdev,
                memset(&format, 0, sizeof(format));
 
                format.pad = pad;
-               format.which = cfg ? V4L2_SUBDEV_FORMAT_TRY
+               format.which = sd_state ? V4L2_SUBDEV_FORMAT_TRY
                             : V4L2_SUBDEV_FORMAT_ACTIVE;
 
-               v4l2_subdev_call(subdev, pad, set_fmt, cfg, &format);
+               v4l2_subdev_call(subdev, pad, set_fmt, sd_state, &format);
        }
 
        return 0;
@@ -208,13 +210,13 @@ int vsp1_entity_init_cfg(struct v4l2_subdev *subdev,
  * a direct drop-in for the operation handler.
  */
 int vsp1_subdev_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 vsp1_entity *entity = to_vsp1_entity(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
 
-       config = vsp1_entity_get_pad_config(entity, cfg, fmt->which);
+       config = vsp1_entity_get_pad_config(entity, sd_state, fmt->which);
        if (!config)
                return -EINVAL;
 
@@ -239,7 +241,7 @@ int vsp1_subdev_get_pad_format(struct v4l2_subdev *subdev,
  * the sink pad.
  */
 int vsp1_subdev_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,
                               const unsigned int *codes, unsigned int ncodes)
 {
@@ -251,7 +253,7 @@ int vsp1_subdev_enum_mbus_code(struct v4l2_subdev *subdev,
 
                code->code = codes[code->index];
        } else {
-               struct v4l2_subdev_pad_config *config;
+               struct v4l2_subdev_state *config;
                struct v4l2_mbus_framefmt *format;
 
                /*
@@ -261,7 +263,8 @@ int vsp1_subdev_enum_mbus_code(struct v4l2_subdev *subdev,
                if (code->index)
                        return -EINVAL;
 
-               config = vsp1_entity_get_pad_config(entity, cfg, code->which);
+               config = vsp1_entity_get_pad_config(entity, sd_state,
+                                                   code->which);
                if (!config)
                        return -EINVAL;
 
@@ -290,17 +293,17 @@ int vsp1_subdev_enum_mbus_code(struct v4l2_subdev *subdev,
  * source pad size identical to the sink pad.
  */
 int vsp1_subdev_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,
                                unsigned int min_width, unsigned int min_height,
                                unsigned int max_width, unsigned int max_height)
 {
        struct vsp1_entity *entity = to_vsp1_entity(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
        struct v4l2_mbus_framefmt *format;
        int ret = 0;
 
-       config = vsp1_entity_get_pad_config(entity, cfg, fse->which);
+       config = vsp1_entity_get_pad_config(entity, sd_state, fse->which);
        if (!config)
                return -EINVAL;
 
@@ -353,14 +356,14 @@ done:
  * source pad.
  */
 int vsp1_subdev_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 unsigned int *codes, unsigned int ncodes,
                               unsigned int min_width, unsigned int min_height,
                               unsigned int max_width, unsigned int max_height)
 {
        struct vsp1_entity *entity = to_vsp1_entity(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
        struct v4l2_mbus_framefmt *format;
        struct v4l2_rect *selection;
        unsigned int i;
@@ -368,7 +371,7 @@ int vsp1_subdev_set_pad_format(struct v4l2_subdev *subdev,
 
        mutex_lock(&entity->lock);
 
-       config = vsp1_entity_get_pad_config(entity, cfg, fmt->which);
+       config = vsp1_entity_get_pad_config(entity, sd_state, fmt->which);
        if (!config) {
                ret = -EINVAL;
                goto done;
@@ -672,7 +675,7 @@ int vsp1_entity_init(struct vsp1_device *vsp1, struct vsp1_entity *entity,
         * Allocate the pad configuration to store formats and selection
         * rectangles.
         */
-       entity->config = v4l2_subdev_alloc_pad_config(&entity->subdev);
+       entity->config = v4l2_subdev_alloc_state(&entity->subdev);
        if (entity->config == NULL) {
                media_entity_cleanup(&entity->subdev.entity);
                return -ENOMEM;
@@ -687,6 +690,6 @@ void vsp1_entity_destroy(struct vsp1_entity *entity)
                entity->ops->destroy(entity);
        if (entity->subdev.ctrl_handler)
                v4l2_ctrl_handler_free(entity->subdev.ctrl_handler);
-       v4l2_subdev_free_pad_config(entity->config);
+       v4l2_subdev_free_state(entity->config);
        media_entity_cleanup(&entity->subdev.entity);
 }
index a1ceb37..f227244 100644 (file)
@@ -115,7 +115,7 @@ struct vsp1_entity {
        unsigned int sink_pad;
 
        struct v4l2_subdev subdev;
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
 
        struct mutex lock;      /* Protects the pad config */
 };
@@ -136,20 +136,20 @@ int vsp1_entity_link_setup(struct media_entity *entity,
                           const struct media_pad *local,
                           const struct media_pad *remote, u32 flags);
 
-struct v4l2_subdev_pad_config *
+struct v4l2_subdev_state *
 vsp1_entity_get_pad_config(struct vsp1_entity *entity,
-                          struct v4l2_subdev_pad_config *cfg,
+                          struct v4l2_subdev_state *sd_state,
                           enum v4l2_subdev_format_whence which);
 struct v4l2_mbus_framefmt *
 vsp1_entity_get_pad_format(struct vsp1_entity *entity,
-                          struct v4l2_subdev_pad_config *cfg,
+                          struct v4l2_subdev_state *sd_state,
                           unsigned int pad);
 struct v4l2_rect *
 vsp1_entity_get_pad_selection(struct vsp1_entity *entity,
-                             struct v4l2_subdev_pad_config *cfg,
+                             struct v4l2_subdev_state *sd_state,
                              unsigned int pad, unsigned int target);
 int vsp1_entity_init_cfg(struct v4l2_subdev *subdev,
-                        struct v4l2_subdev_pad_config *cfg);
+                        struct v4l2_subdev_state *sd_state);
 
 void vsp1_entity_route_setup(struct vsp1_entity *entity,
                             struct vsp1_pipeline *pipe,
@@ -173,20 +173,20 @@ void vsp1_entity_configure_partition(struct vsp1_entity *entity,
 struct media_pad *vsp1_entity_remote_pad(struct media_pad *pad);
 
 int vsp1_subdev_get_pad_format(struct v4l2_subdev *subdev,
-                              struct v4l2_subdev_pad_config *cfg,
+                              struct v4l2_subdev_state *sd_state,
                               struct v4l2_subdev_format *fmt);
 int vsp1_subdev_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 unsigned int *codes, unsigned int ncodes,
                               unsigned int min_width, unsigned int min_height,
                               unsigned int max_width, unsigned int max_height);
 int vsp1_subdev_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,
                               const unsigned int *codes, unsigned int ncodes);
 int vsp1_subdev_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,
                                unsigned int min_w, unsigned int min_h,
                                unsigned int max_w, unsigned int max_h);
index a91e142..5e5013d 100644 (file)
@@ -170,7 +170,7 @@ static const struct vb2_ops histo_video_queue_qops = {
  */
 
 static int histo_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 vsp1_histogram *histo = subdev_to_histo(subdev);
@@ -180,28 +180,30 @@ static int histo_enum_mbus_code(struct v4l2_subdev *subdev,
                return 0;
        }
 
-       return vsp1_subdev_enum_mbus_code(subdev, cfg, code, histo->formats,
+       return vsp1_subdev_enum_mbus_code(subdev, sd_state, code,
+                                         histo->formats,
                                          histo->num_formats);
 }
 
 static int histo_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 != HISTO_PAD_SINK)
                return -EINVAL;
 
-       return vsp1_subdev_enum_frame_size(subdev, cfg, fse, HISTO_MIN_SIZE,
+       return vsp1_subdev_enum_frame_size(subdev, sd_state, fse,
+                                          HISTO_MIN_SIZE,
                                           HISTO_MIN_SIZE, HISTO_MAX_SIZE,
                                           HISTO_MAX_SIZE);
 }
 
 static int histo_get_selection(struct v4l2_subdev *subdev,
-                              struct v4l2_subdev_pad_config *cfg,
+                              struct v4l2_subdev_state *sd_state,
                               struct v4l2_subdev_selection *sel)
 {
        struct vsp1_histogram *histo = subdev_to_histo(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
        struct v4l2_mbus_framefmt *format;
        struct v4l2_rect *crop;
        int ret = 0;
@@ -211,7 +213,8 @@ static int histo_get_selection(struct v4l2_subdev *subdev,
 
        mutex_lock(&histo->entity.lock);
 
-       config = vsp1_entity_get_pad_config(&histo->entity, cfg, sel->which);
+       config = vsp1_entity_get_pad_config(&histo->entity, sd_state,
+                                           sel->which);
        if (!config) {
                ret = -EINVAL;
                goto done;
@@ -256,15 +259,15 @@ done:
 }
 
 static int histo_set_crop(struct v4l2_subdev *subdev,
-                         struct v4l2_subdev_pad_config *config,
-                        struct v4l2_subdev_selection *sel)
+                         struct v4l2_subdev_state *sd_state,
+                         struct v4l2_subdev_selection *sel)
 {
        struct vsp1_histogram *histo = subdev_to_histo(subdev);
        struct v4l2_mbus_framefmt *format;
        struct v4l2_rect *selection;
 
        /* The crop rectangle must be inside the input frame. */
-       format = vsp1_entity_get_pad_format(&histo->entity, config,
+       format = vsp1_entity_get_pad_format(&histo->entity, sd_state,
                                            HISTO_PAD_SINK);
        sel->r.left = clamp_t(unsigned int, sel->r.left, 0, format->width - 1);
        sel->r.top = clamp_t(unsigned int, sel->r.top, 0, format->height - 1);
@@ -274,11 +277,11 @@ static int histo_set_crop(struct v4l2_subdev *subdev,
                                format->height - sel->r.top);
 
        /* Set the crop rectangle and reset the compose rectangle. */
-       selection = vsp1_entity_get_pad_selection(&histo->entity, config,
+       selection = vsp1_entity_get_pad_selection(&histo->entity, sd_state,
                                                  sel->pad, V4L2_SEL_TGT_CROP);
        *selection = sel->r;
 
-       selection = vsp1_entity_get_pad_selection(&histo->entity, config,
+       selection = vsp1_entity_get_pad_selection(&histo->entity, sd_state,
                                                  sel->pad,
                                                  V4L2_SEL_TGT_COMPOSE);
        *selection = sel->r;
@@ -287,7 +290,7 @@ static int histo_set_crop(struct v4l2_subdev *subdev,
 }
 
 static int histo_set_compose(struct v4l2_subdev *subdev,
-                            struct v4l2_subdev_pad_config *config,
+                            struct v4l2_subdev_state *sd_state,
                             struct v4l2_subdev_selection *sel)
 {
        struct vsp1_histogram *histo = subdev_to_histo(subdev);
@@ -303,7 +306,8 @@ static int histo_set_compose(struct v4l2_subdev *subdev,
        sel->r.left = 0;
        sel->r.top = 0;
 
-       crop = vsp1_entity_get_pad_selection(&histo->entity, config, sel->pad,
+       crop = vsp1_entity_get_pad_selection(&histo->entity, sd_state,
+                                            sel->pad,
                                             V4L2_SEL_TGT_CROP);
 
        /*
@@ -329,7 +333,7 @@ static int histo_set_compose(struct v4l2_subdev *subdev,
        ratio = 1 << (crop->height * 2 / sel->r.height / 3);
        sel->r.height = crop->height / ratio;
 
-       compose = vsp1_entity_get_pad_selection(&histo->entity, config,
+       compose = vsp1_entity_get_pad_selection(&histo->entity, sd_state,
                                                sel->pad,
                                                V4L2_SEL_TGT_COMPOSE);
        *compose = sel->r;
@@ -338,11 +342,11 @@ static int histo_set_compose(struct v4l2_subdev *subdev,
 }
 
 static int histo_set_selection(struct v4l2_subdev *subdev,
-                              struct v4l2_subdev_pad_config *cfg,
+                              struct v4l2_subdev_state *sd_state,
                               struct v4l2_subdev_selection *sel)
 {
        struct vsp1_histogram *histo = subdev_to_histo(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
        int ret;
 
        if (sel->pad != HISTO_PAD_SINK)
@@ -350,7 +354,8 @@ static int histo_set_selection(struct v4l2_subdev *subdev,
 
        mutex_lock(&histo->entity.lock);
 
-       config = vsp1_entity_get_pad_config(&histo->entity, cfg, sel->which);
+       config = vsp1_entity_get_pad_config(&histo->entity, sd_state,
+                                           sel->which);
        if (!config) {
                ret = -EINVAL;
                goto done;
@@ -369,7 +374,7 @@ done:
 }
 
 static int histo_get_format(struct v4l2_subdev *subdev,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *fmt)
 {
        if (fmt->pad == HISTO_PAD_SOURCE) {
@@ -381,19 +386,19 @@ static int histo_get_format(struct v4l2_subdev *subdev,
                return 0;
        }
 
-       return vsp1_subdev_get_pad_format(subdev, cfg, fmt);
+       return vsp1_subdev_get_pad_format(subdev, sd_state, fmt);
 }
 
 static int histo_set_format(struct v4l2_subdev *subdev,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *fmt)
 {
        struct vsp1_histogram *histo = subdev_to_histo(subdev);
 
        if (fmt->pad != HISTO_PAD_SINK)
-               return histo_get_format(subdev, cfg, fmt);
+               return histo_get_format(subdev, sd_state, fmt);
 
-       return vsp1_subdev_set_pad_format(subdev, cfg, fmt,
+       return vsp1_subdev_set_pad_format(subdev, sd_state, fmt,
                                          histo->formats, histo->num_formats,
                                          HISTO_MIN_SIZE, HISTO_MIN_SIZE,
                                          HISTO_MAX_SIZE, HISTO_MAX_SIZE);
index d5ebd9d..361a870 100644 (file)
@@ -34,7 +34,7 @@ static inline void vsp1_hsit_write(struct vsp1_hsit *hsit,
  */
 
 static int hsit_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 vsp1_hsit *hsit = to_hsit(subdev);
@@ -52,26 +52,28 @@ static int hsit_enum_mbus_code(struct v4l2_subdev *subdev,
 }
 
 static int hsit_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)
 {
-       return vsp1_subdev_enum_frame_size(subdev, cfg, fse, HSIT_MIN_SIZE,
+       return vsp1_subdev_enum_frame_size(subdev, sd_state, fse,
+                                          HSIT_MIN_SIZE,
                                           HSIT_MIN_SIZE, HSIT_MAX_SIZE,
                                           HSIT_MAX_SIZE);
 }
 
 static int hsit_set_format(struct v4l2_subdev *subdev,
-                          struct v4l2_subdev_pad_config *cfg,
+                          struct v4l2_subdev_state *sd_state,
                           struct v4l2_subdev_format *fmt)
 {
        struct vsp1_hsit *hsit = to_hsit(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
        struct v4l2_mbus_framefmt *format;
        int ret = 0;
 
        mutex_lock(&hsit->entity.lock);
 
-       config = vsp1_entity_get_pad_config(&hsit->entity, cfg, fmt->which);
+       config = vsp1_entity_get_pad_config(&hsit->entity, sd_state,
+                                           fmt->which);
        if (!config) {
                ret = -EINVAL;
                goto done;
index 14ed5d7..6a6857a 100644 (file)
@@ -40,27 +40,28 @@ static const unsigned int lif_codes[] = {
 };
 
 static int lif_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)
 {
-       return vsp1_subdev_enum_mbus_code(subdev, cfg, code, lif_codes,
+       return vsp1_subdev_enum_mbus_code(subdev, sd_state, code, lif_codes,
                                          ARRAY_SIZE(lif_codes));
 }
 
 static int lif_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)
 {
-       return vsp1_subdev_enum_frame_size(subdev, cfg, fse, LIF_MIN_SIZE,
+       return vsp1_subdev_enum_frame_size(subdev, sd_state, fse,
+                                          LIF_MIN_SIZE,
                                           LIF_MIN_SIZE, LIF_MAX_SIZE,
                                           LIF_MAX_SIZE);
 }
 
 static int lif_set_format(struct v4l2_subdev *subdev,
-                         struct v4l2_subdev_pad_config *cfg,
+                         struct v4l2_subdev_state *sd_state,
                          struct v4l2_subdev_format *fmt)
 {
-       return vsp1_subdev_set_pad_format(subdev, cfg, fmt, lif_codes,
+       return vsp1_subdev_set_pad_format(subdev, sd_state, fmt, lif_codes,
                                          ARRAY_SIZE(lif_codes),
                                          LIF_MIN_SIZE, LIF_MIN_SIZE,
                                          LIF_MAX_SIZE, LIF_MAX_SIZE);
index 9f88842..ac6802a 100644 (file)
@@ -99,27 +99,28 @@ static const unsigned int lut_codes[] = {
 };
 
 static int lut_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)
 {
-       return vsp1_subdev_enum_mbus_code(subdev, cfg, code, lut_codes,
+       return vsp1_subdev_enum_mbus_code(subdev, sd_state, code, lut_codes,
                                          ARRAY_SIZE(lut_codes));
 }
 
 static int lut_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)
 {
-       return vsp1_subdev_enum_frame_size(subdev, cfg, fse, LUT_MIN_SIZE,
+       return vsp1_subdev_enum_frame_size(subdev, sd_state, fse,
+                                          LUT_MIN_SIZE,
                                           LUT_MIN_SIZE, LUT_MAX_SIZE,
                                           LUT_MAX_SIZE);
 }
 
 static int lut_set_format(struct v4l2_subdev *subdev,
-                         struct v4l2_subdev_pad_config *cfg,
+                         struct v4l2_subdev_state *sd_state,
                          struct v4l2_subdev_format *fmt)
 {
-       return vsp1_subdev_set_pad_format(subdev, cfg, fmt, lut_codes,
+       return vsp1_subdev_set_pad_format(subdev, sd_state, fmt, lut_codes,
                                          ARRAY_SIZE(lut_codes),
                                          LUT_MIN_SIZE, LUT_MIN_SIZE,
                                          LUT_MAX_SIZE, LUT_MAX_SIZE);
index 049bdd9..22a82d2 100644 (file)
@@ -17,9 +17,9 @@
 #define RWPF_MIN_HEIGHT                                1
 
 struct v4l2_rect *vsp1_rwpf_get_crop(struct vsp1_rwpf *rwpf,
-                                    struct v4l2_subdev_pad_config *config)
+                                    struct v4l2_subdev_state *sd_state)
 {
-       return v4l2_subdev_get_try_crop(&rwpf->entity.subdev, config,
+       return v4l2_subdev_get_try_crop(&rwpf->entity.subdev, sd_state,
                                        RWPF_PAD_SINK);
 }
 
@@ -28,7 +28,7 @@ struct v4l2_rect *vsp1_rwpf_get_crop(struct vsp1_rwpf *rwpf,
  */
 
 static int vsp1_rwpf_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)
 {
        static const unsigned int codes[] = {
@@ -46,28 +46,30 @@ static int vsp1_rwpf_enum_mbus_code(struct v4l2_subdev *subdev,
 }
 
 static int vsp1_rwpf_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 vsp1_rwpf *rwpf = to_rwpf(subdev);
 
-       return vsp1_subdev_enum_frame_size(subdev, cfg, fse, RWPF_MIN_WIDTH,
+       return vsp1_subdev_enum_frame_size(subdev, sd_state, fse,
+                                          RWPF_MIN_WIDTH,
                                           RWPF_MIN_HEIGHT, rwpf->max_width,
                                           rwpf->max_height);
 }
 
 static int vsp1_rwpf_set_format(struct v4l2_subdev *subdev,
-                               struct v4l2_subdev_pad_config *cfg,
+                               struct v4l2_subdev_state *sd_state,
                                struct v4l2_subdev_format *fmt)
 {
        struct vsp1_rwpf *rwpf = to_rwpf(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
        struct v4l2_mbus_framefmt *format;
        int ret = 0;
 
        mutex_lock(&rwpf->entity.lock);
 
-       config = vsp1_entity_get_pad_config(&rwpf->entity, cfg, fmt->which);
+       config = vsp1_entity_get_pad_config(&rwpf->entity, sd_state,
+                                           fmt->which);
        if (!config) {
                ret = -EINVAL;
                goto done;
@@ -128,11 +130,11 @@ done:
 }
 
 static int vsp1_rwpf_get_selection(struct v4l2_subdev *subdev,
-                                  struct v4l2_subdev_pad_config *cfg,
+                                  struct v4l2_subdev_state *sd_state,
                                   struct v4l2_subdev_selection *sel)
 {
        struct vsp1_rwpf *rwpf = to_rwpf(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
        struct v4l2_mbus_framefmt *format;
        int ret = 0;
 
@@ -145,7 +147,8 @@ static int vsp1_rwpf_get_selection(struct v4l2_subdev *subdev,
 
        mutex_lock(&rwpf->entity.lock);
 
-       config = vsp1_entity_get_pad_config(&rwpf->entity, cfg, sel->which);
+       config = vsp1_entity_get_pad_config(&rwpf->entity, sd_state,
+                                           sel->which);
        if (!config) {
                ret = -EINVAL;
                goto done;
@@ -176,11 +179,11 @@ done:
 }
 
 static int vsp1_rwpf_set_selection(struct v4l2_subdev *subdev,
-                                  struct v4l2_subdev_pad_config *cfg,
+                                  struct v4l2_subdev_state *sd_state,
                                   struct v4l2_subdev_selection *sel)
 {
        struct vsp1_rwpf *rwpf = to_rwpf(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
        struct v4l2_mbus_framefmt *format;
        struct v4l2_rect *crop;
        int ret = 0;
@@ -197,7 +200,8 @@ static int vsp1_rwpf_set_selection(struct v4l2_subdev *subdev,
 
        mutex_lock(&rwpf->entity.lock);
 
-       config = vsp1_entity_get_pad_config(&rwpf->entity, cfg, sel->which);
+       config = vsp1_entity_get_pad_config(&rwpf->entity, sd_state,
+                                           sel->which);
        if (!config) {
                ret = -EINVAL;
                goto done;
index 2f35825..eac5c04 100644 (file)
@@ -84,6 +84,6 @@ int vsp1_rwpf_init_ctrls(struct vsp1_rwpf *rwpf, unsigned int ncontrols);
 extern const struct v4l2_subdev_pad_ops vsp1_rwpf_pad_ops;
 
 struct v4l2_rect *vsp1_rwpf_get_crop(struct vsp1_rwpf *rwpf,
-                                    struct v4l2_subdev_pad_config *config);
+                                    struct v4l2_subdev_state *sd_state);
 
 #endif /* __VSP1_RWPF_H__ */
index 2b65457..b614a2a 100644 (file)
@@ -106,7 +106,7 @@ static const struct v4l2_ctrl_config sru_intensity_control = {
  */
 
 static int sru_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)
 {
        static const unsigned int codes[] = {
@@ -114,20 +114,21 @@ static int sru_enum_mbus_code(struct v4l2_subdev *subdev,
                MEDIA_BUS_FMT_AYUV8_1X32,
        };
 
-       return vsp1_subdev_enum_mbus_code(subdev, cfg, code, codes,
+       return vsp1_subdev_enum_mbus_code(subdev, sd_state, code, codes,
                                          ARRAY_SIZE(codes));
 }
 
 static int sru_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 vsp1_sru *sru = to_sru(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
        struct v4l2_mbus_framefmt *format;
        int ret = 0;
 
-       config = vsp1_entity_get_pad_config(&sru->entity, cfg, fse->which);
+       config = vsp1_entity_get_pad_config(&sru->entity, sd_state,
+                                           fse->which);
        if (!config)
                return -EINVAL;
 
@@ -164,7 +165,7 @@ done:
 }
 
 static void sru_try_format(struct vsp1_sru *sru,
-                          struct v4l2_subdev_pad_config *config,
+                          struct v4l2_subdev_state *sd_state,
                           unsigned int pad, struct v4l2_mbus_framefmt *fmt)
 {
        struct v4l2_mbus_framefmt *format;
@@ -184,7 +185,7 @@ static void sru_try_format(struct vsp1_sru *sru,
 
        case SRU_PAD_SOURCE:
                /* The SRU can't perform format conversion. */
-               format = vsp1_entity_get_pad_format(&sru->entity, config,
+               format = vsp1_entity_get_pad_format(&sru->entity, sd_state,
                                                    SRU_PAD_SINK);
                fmt->code = format->code;
 
@@ -216,17 +217,18 @@ static void sru_try_format(struct vsp1_sru *sru,
 }
 
 static int sru_set_format(struct v4l2_subdev *subdev,
-                         struct v4l2_subdev_pad_config *cfg,
+                         struct v4l2_subdev_state *sd_state,
                          struct v4l2_subdev_format *fmt)
 {
        struct vsp1_sru *sru = to_sru(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
        struct v4l2_mbus_framefmt *format;
        int ret = 0;
 
        mutex_lock(&sru->entity.lock);
 
-       config = vsp1_entity_get_pad_config(&sru->entity, cfg, fmt->which);
+       config = vsp1_entity_get_pad_config(&sru->entity, sd_state,
+                                           fmt->which);
        if (!config) {
                ret = -EINVAL;
                goto done;
index 5fc04c0..1c290cd 100644 (file)
@@ -111,7 +111,7 @@ static unsigned int uds_compute_ratio(unsigned int input, unsigned int output)
  */
 
 static int uds_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)
 {
        static const unsigned int codes[] = {
@@ -119,20 +119,21 @@ static int uds_enum_mbus_code(struct v4l2_subdev *subdev,
                MEDIA_BUS_FMT_AYUV8_1X32,
        };
 
-       return vsp1_subdev_enum_mbus_code(subdev, cfg, code, codes,
+       return vsp1_subdev_enum_mbus_code(subdev, sd_state, code, codes,
                                          ARRAY_SIZE(codes));
 }
 
 static int uds_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 vsp1_uds *uds = to_uds(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
        struct v4l2_mbus_framefmt *format;
        int ret = 0;
 
-       config = vsp1_entity_get_pad_config(&uds->entity, cfg, fse->which);
+       config = vsp1_entity_get_pad_config(&uds->entity, sd_state,
+                                           fse->which);
        if (!config)
                return -EINVAL;
 
@@ -164,7 +165,7 @@ done:
 }
 
 static void uds_try_format(struct vsp1_uds *uds,
-                          struct v4l2_subdev_pad_config *config,
+                          struct v4l2_subdev_state *sd_state,
                           unsigned int pad, struct v4l2_mbus_framefmt *fmt)
 {
        struct v4l2_mbus_framefmt *format;
@@ -184,7 +185,7 @@ static void uds_try_format(struct vsp1_uds *uds,
 
        case UDS_PAD_SOURCE:
                /* The UDS scales but can't perform format conversion. */
-               format = vsp1_entity_get_pad_format(&uds->entity, config,
+               format = vsp1_entity_get_pad_format(&uds->entity, sd_state,
                                                    UDS_PAD_SINK);
                fmt->code = format->code;
 
@@ -200,17 +201,18 @@ static void uds_try_format(struct vsp1_uds *uds,
 }
 
 static int uds_set_format(struct v4l2_subdev *subdev,
-                         struct v4l2_subdev_pad_config *cfg,
+                         struct v4l2_subdev_state *sd_state,
                          struct v4l2_subdev_format *fmt)
 {
        struct vsp1_uds *uds = to_uds(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
        struct v4l2_mbus_framefmt *format;
        int ret = 0;
 
        mutex_lock(&uds->entity.lock);
 
-       config = vsp1_entity_get_pad_config(&uds->entity, cfg, fmt->which);
+       config = vsp1_entity_get_pad_config(&uds->entity, sd_state,
+                                           fmt->which);
        if (!config) {
                ret = -EINVAL;
                goto done;
index 467d107..83d7f17 100644 (file)
@@ -54,38 +54,39 @@ static const unsigned int uif_codes[] = {
 };
 
 static int uif_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)
 {
-       return vsp1_subdev_enum_mbus_code(subdev, cfg, code, uif_codes,
+       return vsp1_subdev_enum_mbus_code(subdev, sd_state, code, uif_codes,
                                          ARRAY_SIZE(uif_codes));
 }
 
 static int uif_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)
 {
-       return vsp1_subdev_enum_frame_size(subdev, cfg, fse, UIF_MIN_SIZE,
+       return vsp1_subdev_enum_frame_size(subdev, sd_state, fse,
+                                          UIF_MIN_SIZE,
                                           UIF_MIN_SIZE, UIF_MAX_SIZE,
                                           UIF_MAX_SIZE);
 }
 
 static int uif_set_format(struct v4l2_subdev *subdev,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *fmt)
 {
-       return vsp1_subdev_set_pad_format(subdev, cfg, fmt, uif_codes,
+       return vsp1_subdev_set_pad_format(subdev, sd_state, fmt, uif_codes,
                                          ARRAY_SIZE(uif_codes),
                                          UIF_MIN_SIZE, UIF_MIN_SIZE,
                                          UIF_MAX_SIZE, UIF_MAX_SIZE);
 }
 
 static int uif_get_selection(struct v4l2_subdev *subdev,
-                            struct v4l2_subdev_pad_config *cfg,
+                            struct v4l2_subdev_state *sd_state,
                             struct v4l2_subdev_selection *sel)
 {
        struct vsp1_uif *uif = to_uif(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
        struct v4l2_mbus_framefmt *format;
        int ret = 0;
 
@@ -94,7 +95,8 @@ static int uif_get_selection(struct v4l2_subdev *subdev,
 
        mutex_lock(&uif->entity.lock);
 
-       config = vsp1_entity_get_pad_config(&uif->entity, cfg, sel->which);
+       config = vsp1_entity_get_pad_config(&uif->entity, sd_state,
+                                           sel->which);
        if (!config) {
                ret = -EINVAL;
                goto done;
@@ -127,11 +129,11 @@ done:
 }
 
 static int uif_set_selection(struct v4l2_subdev *subdev,
-                            struct v4l2_subdev_pad_config *cfg,
+                            struct v4l2_subdev_state *sd_state,
                             struct v4l2_subdev_selection *sel)
 {
        struct vsp1_uif *uif = to_uif(subdev);
-       struct v4l2_subdev_pad_config *config;
+       struct v4l2_subdev_state *config;
        struct v4l2_mbus_framefmt *format;
        struct v4l2_rect *selection;
        int ret = 0;
@@ -142,7 +144,8 @@ static int uif_set_selection(struct v4l2_subdev *subdev,
 
        mutex_lock(&uif->entity.lock);
 
-       config = vsp1_entity_get_pad_config(&uif->entity, cfg, sel->which);
+       config = vsp1_entity_get_pad_config(&uif->entity, sd_state,
+                                           sel->which);
        if (!config) {
                ret = -EINVAL;
                goto done;
index fff7dde..b1baf9d 100644 (file)
@@ -681,12 +681,13 @@ stream_done:
 
 static struct v4l2_mbus_framefmt *
 __xcsi2rxss_get_pad_format(struct xcsi2rxss_state *xcsi2rxss,
-                          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(&xcsi2rxss->subdev, cfg, pad);
+               return v4l2_subdev_get_try_format(&xcsi2rxss->subdev,
+                                                 sd_state, pad);
        case V4L2_SUBDEV_FORMAT_ACTIVE:
                return &xcsi2rxss->format;
        default:
@@ -697,7 +698,7 @@ __xcsi2rxss_get_pad_format(struct xcsi2rxss_state *xcsi2rxss,
 /**
  * xcsi2rxss_init_cfg - Initialise the pad format config to default
  * @sd: Pointer to V4L2 Sub device structure
- * @cfg: Pointer to sub device pad information structure
+ * @sd_state: Pointer to sub device state structure
  *
  * This function is used to initialize the pad format with the default
  * values.
@@ -705,7 +706,7 @@ __xcsi2rxss_get_pad_format(struct xcsi2rxss_state *xcsi2rxss,
  * Return: 0 on success
  */
 static int xcsi2rxss_init_cfg(struct v4l2_subdev *sd,
-                             struct v4l2_subdev_pad_config *cfg)
+                             struct v4l2_subdev_state *sd_state)
 {
        struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd);
        struct v4l2_mbus_framefmt *format;
@@ -713,7 +714,7 @@ static int xcsi2rxss_init_cfg(struct v4l2_subdev *sd,
 
        mutex_lock(&xcsi2rxss->lock);
        for (i = 0; i < XCSI_MEDIA_PADS; i++) {
-               format = v4l2_subdev_get_try_format(sd, cfg, i);
+               format = v4l2_subdev_get_try_format(sd, sd_state, i);
                *format = xcsi2rxss->default_format;
        }
        mutex_unlock(&xcsi2rxss->lock);
@@ -724,7 +725,7 @@ static int xcsi2rxss_init_cfg(struct v4l2_subdev *sd,
 /**
  * xcsi2rxss_get_format - 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.
@@ -732,13 +733,14 @@ static int xcsi2rxss_init_cfg(struct v4l2_subdev *sd,
  * Return: 0 on success
  */
 static int xcsi2rxss_get_format(struct v4l2_subdev *sd,
-                               struct v4l2_subdev_pad_config *cfg,
+                               struct v4l2_subdev_state *sd_state,
                                struct v4l2_subdev_format *fmt)
 {
        struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd);
 
        mutex_lock(&xcsi2rxss->lock);
-       fmt->format = *__xcsi2rxss_get_pad_format(xcsi2rxss, cfg, fmt->pad,
+       fmt->format = *__xcsi2rxss_get_pad_format(xcsi2rxss, sd_state,
+                                                 fmt->pad,
                                                  fmt->which);
        mutex_unlock(&xcsi2rxss->lock);
 
@@ -748,7 +750,7 @@ static int xcsi2rxss_get_format(struct v4l2_subdev *sd,
 /**
  * xcsi2rxss_set_format - 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 structure
  * @fmt: Pointer to pad level media bus format
  *
  * This function is used to set the pad format. Since the pad format is fixed
@@ -759,7 +761,7 @@ static int xcsi2rxss_get_format(struct v4l2_subdev *sd,
  * Return: 0 on success
  */
 static int xcsi2rxss_set_format(struct v4l2_subdev *sd,
-                               struct v4l2_subdev_pad_config *cfg,
+                               struct v4l2_subdev_state *sd_state,
                                struct v4l2_subdev_format *fmt)
 {
        struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd);
@@ -773,7 +775,7 @@ static int xcsi2rxss_set_format(struct v4l2_subdev *sd,
         * CSI format cannot be changed at runtime.
         * Ensure that format to set is copied to over to CSI pad format
         */
-       __format = __xcsi2rxss_get_pad_format(xcsi2rxss, cfg,
+       __format = __xcsi2rxss_get_pad_format(xcsi2rxss, sd_state,
                                              fmt->pad, fmt->which);
 
        /* only sink pad format can be updated */
@@ -811,7 +813,7 @@ static int xcsi2rxss_set_format(struct v4l2_subdev *sd,
  * Return: -EINVAL or zero on success
  */
 static int xcsi2rxss_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 xcsi2rxss_state *state = to_xcsi2rxssstate(sd);
index ed01bed..0f2d5a0 100644 (file)
@@ -251,12 +251,13 @@ static int xtpg_s_stream(struct v4l2_subdev *subdev, int enable)
 
 static struct v4l2_mbus_framefmt *
 __xtpg_get_pad_format(struct xtpg_device *xtpg,
-                     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(&xtpg->xvip.subdev, cfg, pad);
+               return v4l2_subdev_get_try_format(&xtpg->xvip.subdev,
+                                                 sd_state, pad);
        case V4L2_SUBDEV_FORMAT_ACTIVE:
                return &xtpg->formats[pad];
        default:
@@ -265,25 +266,26 @@ __xtpg_get_pad_format(struct xtpg_device *xtpg,
 }
 
 static int xtpg_get_format(struct v4l2_subdev *subdev,
-                          struct v4l2_subdev_pad_config *cfg,
+                          struct v4l2_subdev_state *sd_state,
                           struct v4l2_subdev_format *fmt)
 {
        struct xtpg_device *xtpg = to_tpg(subdev);
 
-       fmt->format = *__xtpg_get_pad_format(xtpg, cfg, fmt->pad, fmt->which);
+       fmt->format = *__xtpg_get_pad_format(xtpg, sd_state, fmt->pad,
+                                            fmt->which);
 
        return 0;
 }
 
 static int xtpg_set_format(struct v4l2_subdev *subdev,
-                          struct v4l2_subdev_pad_config *cfg,
+                          struct v4l2_subdev_state *sd_state,
                           struct v4l2_subdev_format *fmt)
 {
        struct xtpg_device *xtpg = to_tpg(subdev);
        struct v4l2_mbus_framefmt *__format;
        u32 bayer_phase;
 
-       __format = __xtpg_get_pad_format(xtpg, cfg, fmt->pad, fmt->which);
+       __format = __xtpg_get_pad_format(xtpg, sd_state, fmt->pad, fmt->which);
 
        /* In two pads mode the source pad format is always identical to the
         * sink pad format.
@@ -306,7 +308,8 @@ static int xtpg_set_format(struct v4l2_subdev *subdev,
 
        /* Propagate the format to the source pad. */
        if (xtpg->npads == 2) {
-               __format = __xtpg_get_pad_format(xtpg, cfg, 1, fmt->which);
+               __format = __xtpg_get_pad_format(xtpg, sd_state, 1,
+                                                fmt->which);
                *__format = fmt->format;
        }
 
@@ -318,12 +321,12 @@ static int xtpg_set_format(struct v4l2_subdev *subdev,
  */
 
 static int xtpg_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 v4l2_mbus_framefmt *format;
 
-       format = v4l2_subdev_get_try_format(subdev, cfg, fse->pad);
+       format = v4l2_subdev_get_try_format(subdev, sd_state, fse->pad);
 
        if (fse->index || fse->code != format->code)
                return -EINVAL;
@@ -351,11 +354,11 @@ static int xtpg_open(struct v4l2_subdev *subdev, struct v4l2_subdev_fh *fh)
        struct xtpg_device *xtpg = to_tpg(subdev);
        struct v4l2_mbus_framefmt *format;
 
-       format = v4l2_subdev_get_try_format(subdev, fh->pad, 0);
+       format = v4l2_subdev_get_try_format(subdev, fh->state, 0);
        *format = xtpg->default_format;
 
        if (xtpg->npads == 2) {
-               format = v4l2_subdev_get_try_format(subdev, fh->pad, 1);
+               format = v4l2_subdev_get_try_format(subdev, fh->state, 1);
                *format = xtpg->default_format;
        }
 
index a4eb576..425a32d 100644 (file)
@@ -234,7 +234,7 @@ EXPORT_SYMBOL_GPL(xvip_cleanup_resources);
 /**
  * xvip_enum_mbus_code - Enumerate the media format code
  * @subdev: V4L2 subdevice
- * @cfg: V4L2 subdev pad configuration
+ * @sd_state: V4L2 subdev state
  * @code: returning media bus code
  *
  * Enumerate the media bus code of the subdevice. Return the corresponding
@@ -246,7 +246,7 @@ EXPORT_SYMBOL_GPL(xvip_cleanup_resources);
  * is not valid.
  */
 int xvip_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 v4l2_mbus_framefmt *format;
@@ -260,7 +260,7 @@ int xvip_enum_mbus_code(struct v4l2_subdev *subdev,
        if (code->index)
                return -EINVAL;
 
-       format = v4l2_subdev_get_try_format(subdev, cfg, code->pad);
+       format = v4l2_subdev_get_try_format(subdev, sd_state, code->pad);
 
        code->code = format->code;
 
@@ -271,7 +271,7 @@ EXPORT_SYMBOL_GPL(xvip_enum_mbus_code);
 /**
  * xvip_enum_frame_size - Enumerate the media bus frame size
  * @subdev: V4L2 subdevice
- * @cfg: V4L2 subdev pad configuration
+ * @sd_state: V4L2 subdev state
  * @fse: returning media bus frame size
  *
  * This function is a drop-in implementation of the subdev enum_frame_size pad
@@ -284,7 +284,7 @@ EXPORT_SYMBOL_GPL(xvip_enum_mbus_code);
  * if the index or the code is not valid.
  */
 int xvip_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 v4l2_mbus_framefmt *format;
@@ -295,7 +295,7 @@ int xvip_enum_frame_size(struct v4l2_subdev *subdev,
        if (fse->which == V4L2_SUBDEV_FORMAT_ACTIVE)
                return -EINVAL;
 
-       format = v4l2_subdev_get_try_format(subdev, cfg, fse->pad);
+       format = v4l2_subdev_get_try_format(subdev, sd_state, fse->pad);
 
        if (fse->index || fse->code != format->code)
                return -EINVAL;
index a528a32..d0b0e06 100644 (file)
@@ -125,10 +125,10 @@ const struct xvip_video_format *xvip_of_get_format(struct device_node *node);
 void xvip_set_format_size(struct v4l2_mbus_framefmt *format,
                          const struct v4l2_subdev_format *fmt);
 int xvip_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);
 int xvip_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);
 
 static inline u32 xvip_read(struct xvip_device *xvip, u32 addr)
index c3f6fef..2d06cdb 100644 (file)
@@ -150,17 +150,17 @@ static bool vimc_deb_src_code_is_valid(u32 code)
 }
 
 static int vimc_deb_init_cfg(struct v4l2_subdev *sd,
-                            struct v4l2_subdev_pad_config *cfg)
+                            struct v4l2_subdev_state *sd_state)
 {
        struct vimc_deb_device *vdeb = v4l2_get_subdevdata(sd);
        struct v4l2_mbus_framefmt *mf;
        unsigned int i;
 
-       mf = v4l2_subdev_get_try_format(sd, cfg, 0);
+       mf = v4l2_subdev_get_try_format(sd, sd_state, 0);
        *mf = sink_fmt_default;
 
        for (i = 1; i < sd->entity.num_pads; i++) {
-               mf = v4l2_subdev_get_try_format(sd, cfg, i);
+               mf = v4l2_subdev_get_try_format(sd, sd_state, i);
                *mf = sink_fmt_default;
                mf->code = vdeb->src_code;
        }
@@ -169,7 +169,7 @@ static int vimc_deb_init_cfg(struct v4l2_subdev *sd,
 }
 
 static int vimc_deb_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 (VIMC_IS_SRC(code->pad)) {
@@ -188,7 +188,7 @@ static int vimc_deb_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int vimc_deb_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)
@@ -213,14 +213,14 @@ static int vimc_deb_enum_frame_size(struct v4l2_subdev *sd,
 }
 
 static int vimc_deb_get_fmt(struct v4l2_subdev *sd,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *fmt)
 {
        struct vimc_deb_device *vdeb = v4l2_get_subdevdata(sd);
 
        /* Get the current sink format */
        fmt->format = fmt->which == V4L2_SUBDEV_FORMAT_TRY ?
-                     *v4l2_subdev_get_try_format(sd, cfg, 0) :
+                     *v4l2_subdev_get_try_format(sd, sd_state, 0) :
                      vdeb->sink_fmt;
 
        /* Set the right code for the source pad */
@@ -251,7 +251,7 @@ static void vimc_deb_adjust_sink_fmt(struct v4l2_mbus_framefmt *fmt)
 }
 
 static int vimc_deb_set_fmt(struct v4l2_subdev *sd,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *fmt)
 {
        struct vimc_deb_device *vdeb = v4l2_get_subdevdata(sd);
@@ -266,8 +266,8 @@ static int vimc_deb_set_fmt(struct v4l2_subdev *sd,
                sink_fmt = &vdeb->sink_fmt;
                src_code = &vdeb->src_code;
        } else {
-               sink_fmt = v4l2_subdev_get_try_format(sd, cfg, 0);
-               src_code = &v4l2_subdev_get_try_format(sd, cfg, 1)->code;
+               sink_fmt = v4l2_subdev_get_try_format(sd, sd_state, 0);
+               src_code = &v4l2_subdev_get_try_format(sd, sd_state, 1)->code;
        }
 
        /*
index 121fa7d..06880dd 100644 (file)
@@ -84,20 +84,20 @@ static void vimc_sca_adjust_sink_crop(struct v4l2_rect *r,
 }
 
 static int vimc_sca_init_cfg(struct v4l2_subdev *sd,
-                            struct v4l2_subdev_pad_config *cfg)
+                            struct v4l2_subdev_state *sd_state)
 {
        struct v4l2_mbus_framefmt *mf;
        struct v4l2_rect *r;
        unsigned int i;
 
-       mf = v4l2_subdev_get_try_format(sd, cfg, 0);
+       mf = v4l2_subdev_get_try_format(sd, sd_state, 0);
        *mf = sink_fmt_default;
 
-       r = v4l2_subdev_get_try_crop(sd, cfg, 0);
+       r = v4l2_subdev_get_try_crop(sd, sd_state, 0);
        *r = crop_rect_default;
 
        for (i = 1; i < sd->entity.num_pads; i++) {
-               mf = v4l2_subdev_get_try_format(sd, cfg, i);
+               mf = v4l2_subdev_get_try_format(sd, sd_state, i);
                *mf = sink_fmt_default;
                mf->width = mf->width * sca_mult;
                mf->height = mf->height * sca_mult;
@@ -107,7 +107,7 @@ static int vimc_sca_init_cfg(struct v4l2_subdev *sd,
 }
 
 static int vimc_sca_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 mbus_code = vimc_mbus_code_by_index(code->index);
@@ -128,7 +128,7 @@ static int vimc_sca_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int vimc_sca_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 vimc_pix_map *vpix;
@@ -156,7 +156,7 @@ static int vimc_sca_enum_frame_size(struct v4l2_subdev *sd,
 }
 
 static int vimc_sca_get_fmt(struct v4l2_subdev *sd,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *format)
 {
        struct vimc_sca_device *vsca = v4l2_get_subdevdata(sd);
@@ -164,8 +164,8 @@ static int vimc_sca_get_fmt(struct v4l2_subdev *sd,
 
        /* Get the current sink format */
        if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
-               format->format = *v4l2_subdev_get_try_format(sd, cfg, 0);
-               crop_rect = v4l2_subdev_get_try_crop(sd, cfg, 0);
+               format->format = *v4l2_subdev_get_try_format(sd, sd_state, 0);
+               crop_rect = v4l2_subdev_get_try_crop(sd, sd_state, 0);
        } else {
                format->format = vsca->sink_fmt;
                crop_rect = &vsca->crop_rect;
@@ -201,7 +201,7 @@ static void vimc_sca_adjust_sink_fmt(struct v4l2_mbus_framefmt *fmt)
 }
 
 static int vimc_sca_set_fmt(struct v4l2_subdev *sd,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *fmt)
 {
        struct vimc_sca_device *vsca = v4l2_get_subdevdata(sd);
@@ -216,8 +216,8 @@ static int vimc_sca_set_fmt(struct v4l2_subdev *sd,
                sink_fmt = &vsca->sink_fmt;
                crop_rect = &vsca->crop_rect;
        } else {
-               sink_fmt = v4l2_subdev_get_try_format(sd, cfg, 0);
-               crop_rect = v4l2_subdev_get_try_crop(sd, cfg, 0);
+               sink_fmt = v4l2_subdev_get_try_format(sd, sd_state, 0);
+               crop_rect = v4l2_subdev_get_try_crop(sd, sd_state, 0);
        }
 
        /*
@@ -254,7 +254,7 @@ static int vimc_sca_set_fmt(struct v4l2_subdev *sd,
 }
 
 static int vimc_sca_get_selection(struct v4l2_subdev *sd,
-                                 struct v4l2_subdev_pad_config *cfg,
+                                 struct v4l2_subdev_state *sd_state,
                                  struct v4l2_subdev_selection *sel)
 {
        struct vimc_sca_device *vsca = v4l2_get_subdevdata(sd);
@@ -268,8 +268,8 @@ static int vimc_sca_get_selection(struct v4l2_subdev *sd,
                sink_fmt = &vsca->sink_fmt;
                crop_rect = &vsca->crop_rect;
        } else {
-               sink_fmt = v4l2_subdev_get_try_format(sd, cfg, 0);
-               crop_rect = v4l2_subdev_get_try_crop(sd, cfg, 0);
+               sink_fmt = v4l2_subdev_get_try_format(sd, sd_state, 0);
+               crop_rect = v4l2_subdev_get_try_crop(sd, sd_state, 0);
        }
 
        switch (sel->target) {
@@ -287,7 +287,7 @@ static int vimc_sca_get_selection(struct v4l2_subdev *sd,
 }
 
 static int vimc_sca_set_selection(struct v4l2_subdev *sd,
-                                 struct v4l2_subdev_pad_config *cfg,
+                                 struct v4l2_subdev_state *sd_state,
                                  struct v4l2_subdev_selection *sel)
 {
        struct vimc_sca_device *vsca = v4l2_get_subdevdata(sd);
@@ -305,8 +305,8 @@ static int vimc_sca_set_selection(struct v4l2_subdev *sd,
                crop_rect = &vsca->crop_rect;
                sink_fmt = &vsca->sink_fmt;
        } else {
-               crop_rect = v4l2_subdev_get_try_crop(sd, cfg, 0);
-               sink_fmt = v4l2_subdev_get_try_format(sd, cfg, 0);
+               crop_rect = v4l2_subdev_get_try_crop(sd, sd_state, 0);
+               sink_fmt = v4l2_subdev_get_try_format(sd, sd_state, 0);
        }
 
        switch (sel->target) {
index ba5db5a..74ab79c 100644 (file)
@@ -42,14 +42,14 @@ static const struct v4l2_mbus_framefmt fmt_default = {
 };
 
 static int vimc_sen_init_cfg(struct v4l2_subdev *sd,
-                            struct v4l2_subdev_pad_config *cfg)
+                            struct v4l2_subdev_state *sd_state)
 {
        unsigned int i;
 
        for (i = 0; i < sd->entity.num_pads; i++) {
                struct v4l2_mbus_framefmt *mf;
 
-               mf = v4l2_subdev_get_try_format(sd, cfg, i);
+               mf = v4l2_subdev_get_try_format(sd, sd_state, i);
                *mf = fmt_default;
        }
 
@@ -57,7 +57,7 @@ static int vimc_sen_init_cfg(struct v4l2_subdev *sd,
 }
 
 static int vimc_sen_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 mbus_code = vimc_mbus_code_by_index(code->index);
@@ -71,7 +71,7 @@ static int vimc_sen_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int vimc_sen_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 vimc_pix_map *vpix;
@@ -93,14 +93,14 @@ static int vimc_sen_enum_frame_size(struct v4l2_subdev *sd,
 }
 
 static int vimc_sen_get_fmt(struct v4l2_subdev *sd,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *fmt)
 {
        struct vimc_sen_device *vsen =
                                container_of(sd, struct vimc_sen_device, sd);
 
        fmt->format = fmt->which == V4L2_SUBDEV_FORMAT_TRY ?
-                     *v4l2_subdev_get_try_format(sd, cfg, fmt->pad) :
+                     *v4l2_subdev_get_try_format(sd, sd_state, fmt->pad) :
                      vsen->mbus_format;
 
        return 0;
@@ -146,7 +146,7 @@ static void vimc_sen_adjust_fmt(struct v4l2_mbus_framefmt *fmt)
 }
 
 static int vimc_sen_set_fmt(struct v4l2_subdev *sd,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *fmt)
 {
        struct vimc_sen_device *vsen = v4l2_get_subdevdata(sd);
@@ -159,7 +159,7 @@ static int vimc_sen_set_fmt(struct v4l2_subdev *sd,
 
                mf = &vsen->mbus_format;
        } else {
-               mf = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
+               mf = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
        }
 
        /* Set the new format */
index b9e4512..c742cc8 100644 (file)
@@ -398,7 +398,7 @@ static int s2250_s_ctrl(struct v4l2_ctrl *ctrl)
 }
 
 static int s2250_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;
index 956dafa..6d3e030 100644 (file)
 #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
 static int subdev_fh_init(struct v4l2_subdev_fh *fh, struct v4l2_subdev *sd)
 {
-       if (sd->entity.num_pads) {
-               fh->pad = v4l2_subdev_alloc_pad_config(sd);
-               if (fh->pad == NULL)
-                       return -ENOMEM;
-       }
+       struct v4l2_subdev_state *state;
+
+       state = v4l2_subdev_alloc_state(sd);
+       if (IS_ERR(state))
+               return PTR_ERR(state);
+
+       fh->state = state;
 
        return 0;
 }
 
 static void subdev_fh_free(struct v4l2_subdev_fh *fh)
 {
-       v4l2_subdev_free_pad_config(fh->pad);
-       fh->pad = NULL;
+       v4l2_subdev_free_state(fh->state);
+       fh->state = NULL;
 }
 
 static int subdev_open(struct file *file)
@@ -146,63 +148,63 @@ static inline int check_pad(struct v4l2_subdev *sd, u32 pad)
        return 0;
 }
 
-static int check_cfg(u32 which, struct v4l2_subdev_pad_config *cfg)
+static int check_state_pads(u32 which, struct v4l2_subdev_state *state)
 {
-       if (which == V4L2_SUBDEV_FORMAT_TRY && !cfg)
+       if (which == V4L2_SUBDEV_FORMAT_TRY && (!state || !state->pads))
                return -EINVAL;
 
        return 0;
 }
 
 static inline int check_format(struct v4l2_subdev *sd,
-                              struct v4l2_subdev_pad_config *cfg,
+                              struct v4l2_subdev_state *state,
                               struct v4l2_subdev_format *format)
 {
        if (!format)
                return -EINVAL;
 
        return check_which(format->which) ? : check_pad(sd, format->pad) ? :
-              check_cfg(format->which, cfg);
+              check_state_pads(format->which, state);
 }
 
 static int call_get_fmt(struct v4l2_subdev *sd,
-                       struct v4l2_subdev_pad_config *cfg,
+                       struct v4l2_subdev_state *state,
                        struct v4l2_subdev_format *format)
 {
-       return check_format(sd, cfg, format) ? :
-              sd->ops->pad->get_fmt(sd, cfg, format);
+       return check_format(sd, state, format) ? :
+              sd->ops->pad->get_fmt(sd, state, format);
 }
 
 static int call_set_fmt(struct v4l2_subdev *sd,
-                       struct v4l2_subdev_pad_config *cfg,
+                       struct v4l2_subdev_state *state,
                        struct v4l2_subdev_format *format)
 {
-       return check_format(sd, cfg, format) ? :
-              sd->ops->pad->set_fmt(sd, cfg, format);
+       return check_format(sd, state, format) ? :
+              sd->ops->pad->set_fmt(sd, state, format);
 }
 
 static int call_enum_mbus_code(struct v4l2_subdev *sd,
-                              struct v4l2_subdev_pad_config *cfg,
+                              struct v4l2_subdev_state *state,
                               struct v4l2_subdev_mbus_code_enum *code)
 {
        if (!code)
                return -EINVAL;
 
        return check_which(code->which) ? : check_pad(sd, code->pad) ? :
-              check_cfg(code->which, cfg) ? :
-              sd->ops->pad->enum_mbus_code(sd, cfg, code);
+              check_state_pads(code->which, state) ? :
+              sd->ops->pad->enum_mbus_code(sd, state, code);
 }
 
 static int call_enum_frame_size(struct v4l2_subdev *sd,
-                               struct v4l2_subdev_pad_config *cfg,
+                               struct v4l2_subdev_state *state,
                                struct v4l2_subdev_frame_size_enum *fse)
 {
        if (!fse)
                return -EINVAL;
 
        return check_which(fse->which) ? : check_pad(sd, fse->pad) ? :
-              check_cfg(fse->which, cfg) ? :
-              sd->ops->pad->enum_frame_size(sd, cfg, fse);
+              check_state_pads(fse->which, state) ? :
+              sd->ops->pad->enum_frame_size(sd, state, fse);
 }
 
 static inline int check_frame_interval(struct v4l2_subdev *sd,
@@ -229,42 +231,42 @@ static int call_s_frame_interval(struct v4l2_subdev *sd,
 }
 
 static int call_enum_frame_interval(struct v4l2_subdev *sd,
-                                   struct v4l2_subdev_pad_config *cfg,
+                                   struct v4l2_subdev_state *state,
                                    struct v4l2_subdev_frame_interval_enum *fie)
 {
        if (!fie)
                return -EINVAL;
 
        return check_which(fie->which) ? : check_pad(sd, fie->pad) ? :
-              check_cfg(fie->which, cfg) ? :
-              sd->ops->pad->enum_frame_interval(sd, cfg, fie);
+              check_state_pads(fie->which, state) ? :
+              sd->ops->pad->enum_frame_interval(sd, state, fie);
 }
 
 static inline int check_selection(struct v4l2_subdev *sd,
-                                 struct v4l2_subdev_pad_config *cfg,
+                                 struct v4l2_subdev_state *state,
                                  struct v4l2_subdev_selection *sel)
 {
        if (!sel)
                return -EINVAL;
 
        return check_which(sel->which) ? : check_pad(sd, sel->pad) ? :
-              check_cfg(sel->which, cfg);
+              check_state_pads(sel->which, state);
 }
 
 static int call_get_selection(struct v4l2_subdev *sd,
-                             struct v4l2_subdev_pad_config *cfg,
+                             struct v4l2_subdev_state *state,
                              struct v4l2_subdev_selection *sel)
 {
-       return check_selection(sd, cfg, sel) ? :
-              sd->ops->pad->get_selection(sd, cfg, sel);
+       return check_selection(sd, state, sel) ? :
+              sd->ops->pad->get_selection(sd, state, sel);
 }
 
 static int call_set_selection(struct v4l2_subdev *sd,
-                             struct v4l2_subdev_pad_config *cfg,
+                             struct v4l2_subdev_state *state,
                              struct v4l2_subdev_selection *sel)
 {
-       return check_selection(sd, cfg, sel) ? :
-              sd->ops->pad->set_selection(sd, cfg, sel);
+       return check_selection(sd, state, sel) ? :
+              sd->ops->pad->set_selection(sd, state, sel);
 }
 
 static inline int check_edid(struct v4l2_subdev *sd,
@@ -506,7 +508,7 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
 
                memset(format->reserved, 0, sizeof(format->reserved));
                memset(format->format.reserved, 0, sizeof(format->format.reserved));
-               return v4l2_subdev_call(sd, pad, get_fmt, subdev_fh->pad, format);
+               return v4l2_subdev_call(sd, pad, get_fmt, subdev_fh->state, format);
        }
 
        case VIDIOC_SUBDEV_S_FMT: {
@@ -517,7 +519,7 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
 
                memset(format->reserved, 0, sizeof(format->reserved));
                memset(format->format.reserved, 0, sizeof(format->format.reserved));
-               return v4l2_subdev_call(sd, pad, set_fmt, subdev_fh->pad, format);
+               return v4l2_subdev_call(sd, pad, set_fmt, subdev_fh->state, format);
        }
 
        case VIDIOC_SUBDEV_G_CROP: {
@@ -531,7 +533,7 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
                sel.target = V4L2_SEL_TGT_CROP;
 
                rval = v4l2_subdev_call(
-                       sd, pad, get_selection, subdev_fh->pad, &sel);
+                       sd, pad, get_selection, subdev_fh->state, &sel);
 
                crop->rect = sel.r;
 
@@ -553,7 +555,7 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
                sel.r = crop->rect;
 
                rval = v4l2_subdev_call(
-                       sd, pad, set_selection, subdev_fh->pad, &sel);
+                       sd, pad, set_selection, subdev_fh->state, &sel);
 
                crop->rect = sel.r;
 
@@ -564,7 +566,7 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
                struct v4l2_subdev_mbus_code_enum *code = arg;
 
                memset(code->reserved, 0, sizeof(code->reserved));
-               return v4l2_subdev_call(sd, pad, enum_mbus_code, subdev_fh->pad,
+               return v4l2_subdev_call(sd, pad, enum_mbus_code, subdev_fh->state,
                                        code);
        }
 
@@ -572,7 +574,7 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
                struct v4l2_subdev_frame_size_enum *fse = arg;
 
                memset(fse->reserved, 0, sizeof(fse->reserved));
-               return v4l2_subdev_call(sd, pad, enum_frame_size, subdev_fh->pad,
+               return v4l2_subdev_call(sd, pad, enum_frame_size, subdev_fh->state,
                                        fse);
        }
 
@@ -597,7 +599,7 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
                struct v4l2_subdev_frame_interval_enum *fie = arg;
 
                memset(fie->reserved, 0, sizeof(fie->reserved));
-               return v4l2_subdev_call(sd, pad, enum_frame_interval, subdev_fh->pad,
+               return v4l2_subdev_call(sd, pad, enum_frame_interval, subdev_fh->state,
                                        fie);
        }
 
@@ -606,7 +608,7 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
 
                memset(sel->reserved, 0, sizeof(sel->reserved));
                return v4l2_subdev_call(
-                       sd, pad, get_selection, subdev_fh->pad, sel);
+                       sd, pad, get_selection, subdev_fh->state, sel);
        }
 
        case VIDIOC_SUBDEV_S_SELECTION: {
@@ -617,7 +619,7 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
 
                memset(sel->reserved, 0, sizeof(sel->reserved));
                return v4l2_subdev_call(
-                       sd, pad, set_selection, subdev_fh->pad, sel);
+                       sd, pad, set_selection, subdev_fh->state, sel);
        }
 
        case VIDIOC_G_EDID: {
@@ -892,35 +894,51 @@ int v4l2_subdev_link_validate(struct media_link *link)
 }
 EXPORT_SYMBOL_GPL(v4l2_subdev_link_validate);
 
-struct v4l2_subdev_pad_config *
-v4l2_subdev_alloc_pad_config(struct v4l2_subdev *sd)
+struct v4l2_subdev_state *v4l2_subdev_alloc_state(struct v4l2_subdev *sd)
 {
-       struct v4l2_subdev_pad_config *cfg;
+       struct v4l2_subdev_state *state;
        int ret;
 
-       if (!sd->entity.num_pads)
-               return NULL;
+       state = kzalloc(sizeof(*state), GFP_KERNEL);
+       if (!state)
+               return ERR_PTR(-ENOMEM);
 
-       cfg = kvmalloc_array(sd->entity.num_pads, sizeof(*cfg),
-                            GFP_KERNEL | __GFP_ZERO);
-       if (!cfg)
-               return NULL;
-
-       ret = v4l2_subdev_call(sd, pad, init_cfg, cfg);
-       if (ret < 0 && ret != -ENOIOCTLCMD) {
-               kvfree(cfg);
-               return NULL;
+       if (sd->entity.num_pads) {
+               state->pads = kvmalloc_array(sd->entity.num_pads,
+                                            sizeof(*state->pads),
+                                            GFP_KERNEL | __GFP_ZERO);
+               if (!state->pads) {
+                       ret = -ENOMEM;
+                       goto err;
+               }
        }
 
-       return cfg;
+       ret = v4l2_subdev_call(sd, pad, init_cfg, state);
+       if (ret < 0 && ret != -ENOIOCTLCMD)
+               goto err;
+
+       return state;
+
+err:
+       if (state && state->pads)
+               kvfree(state->pads);
+
+       kfree(state);
+
+       return ERR_PTR(ret);
 }
-EXPORT_SYMBOL_GPL(v4l2_subdev_alloc_pad_config);
+EXPORT_SYMBOL_GPL(v4l2_subdev_alloc_state);
 
-void v4l2_subdev_free_pad_config(struct v4l2_subdev_pad_config *cfg)
+void v4l2_subdev_free_state(struct v4l2_subdev_state *state)
 {
-       kvfree(cfg);
+       if (!state)
+               return;
+
+       kvfree(state->pads);
+       kfree(state);
 }
-EXPORT_SYMBOL_GPL(v4l2_subdev_free_pad_config);
+EXPORT_SYMBOL_GPL(v4l2_subdev_free_state);
+
 #endif /* CONFIG_MEDIA_CONTROLLER */
 
 void v4l2_subdev_init(struct v4l2_subdev *sd, const struct v4l2_subdev_ops *ops)
index 6c5a378..687888d 100644 (file)
@@ -965,7 +965,7 @@ static int startup(struct v4l2_subdev *sd)
 }
 
 static int gc0310_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;
@@ -999,7 +999,7 @@ static int gc0310_set_fmt(struct v4l2_subdev *sd,
        fmt->code = MEDIA_BUS_FMT_SGRBG8_1X8;
 
        if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
-               cfg->try_fmt = *fmt;
+               sd_state->pads->try_fmt = *fmt;
                mutex_unlock(&dev->input_lock);
                return 0;
        }
@@ -1032,7 +1032,7 @@ err:
 }
 
 static int gc0310_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 *fmt = &format->format;
@@ -1205,7 +1205,7 @@ static int gc0310_g_frame_interval(struct v4l2_subdev *sd,
 }
 
 static int gc0310_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 >= MAX_FMTS)
@@ -1216,7 +1216,7 @@ static int gc0310_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int gc0310_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;
index 38defa0..9363c1a 100644 (file)
@@ -769,7 +769,7 @@ static int startup(struct v4l2_subdev *sd)
 }
 
 static int gc2235_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;
@@ -798,7 +798,7 @@ static int gc2235_set_fmt(struct v4l2_subdev *sd,
        }
        fmt->code = MEDIA_BUS_FMT_SGRBG10_1X10;
        if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
-               cfg->try_fmt = *fmt;
+               sd_state->pads->try_fmt = *fmt;
                mutex_unlock(&dev->input_lock);
                return 0;
        }
@@ -827,7 +827,7 @@ err:
 }
 
 static int gc2235_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 *fmt = &format->format;
@@ -966,7 +966,7 @@ static int gc2235_g_frame_interval(struct v4l2_subdev *sd,
 }
 
 static int gc2235_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 >= MAX_FMTS)
@@ -977,7 +977,7 @@ static int gc2235_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int gc2235_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;
index 0a6f8f6..1119618 100644 (file)
@@ -803,7 +803,7 @@ static int mt9m114_get_intg_factor(struct i2c_client *client,
 }
 
 static int mt9m114_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 *fmt = &format->format;
@@ -824,7 +824,7 @@ static int mt9m114_get_fmt(struct v4l2_subdev *sd,
 }
 
 static int mt9m114_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;
@@ -848,7 +848,7 @@ static int mt9m114_set_fmt(struct v4l2_subdev *sd,
 
        mt9m114_try_res(&width, &height);
        if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
-               cfg->try_fmt = *fmt;
+               sd_state->pads->try_fmt = *fmt;
                return 0;
        }
        res_index = mt9m114_to_res(width, height);
@@ -1168,7 +1168,7 @@ static int mt9m114_s_exposure_metering(struct v4l2_subdev *sd, s32 val)
  * This function is for touch exposure feature.
  */
 static int mt9m114_s_exposure_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);
@@ -1731,7 +1731,7 @@ static int mt9m114_s_stream(struct v4l2_subdev *sd, int enable)
 }
 
 static int mt9m114_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)
@@ -1742,7 +1742,7 @@ static int mt9m114_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int mt9m114_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)
 {
        unsigned int index = fse->index;
index eb1ecd1..2111e4a 100644 (file)
@@ -914,7 +914,7 @@ static int get_resolution_index(int w, int h)
 }
 
 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 v4l2_mbus_framefmt *fmt = &format->format;
@@ -951,7 +951,7 @@ static int ov2680_set_fmt(struct v4l2_subdev *sd,
        }
        fmt->code = MEDIA_BUS_FMT_SBGGR10_1X10;
        if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
-               cfg->try_fmt = *fmt;
+               sd_state->pads->try_fmt = *fmt;
                mutex_unlock(&dev->input_lock);
                return 0;
        }
@@ -1002,7 +1002,7 @@ err:
 }
 
 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 v4l2_mbus_framefmt *fmt = &format->format;
@@ -1161,7 +1161,7 @@ static int ov2680_g_frame_interval(struct v4l2_subdev *sd,
 }
 
 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)
 {
        if (code->index >= MAX_FMTS)
@@ -1172,7 +1172,7 @@ static int ov2680_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 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;
index 90a985e..90d0871 100644 (file)
@@ -876,7 +876,7 @@ static int startup(struct v4l2_subdev *sd)
 }
 
 static int ov2722_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;
@@ -906,7 +906,7 @@ static int ov2722_set_fmt(struct v4l2_subdev *sd,
        }
        fmt->code = MEDIA_BUS_FMT_SGRBG10_1X10;
        if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
-               cfg->try_fmt = *fmt;
+               sd_state->pads->try_fmt = *fmt;
                mutex_unlock(&dev->input_lock);
                return 0;
        }
@@ -961,7 +961,7 @@ err:
 }
 
 static int ov2722_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 *fmt = &format->format;
@@ -1104,7 +1104,7 @@ static int ov2722_g_frame_interval(struct v4l2_subdev *sd,
 }
 
 static int ov2722_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 >= MAX_FMTS)
@@ -1115,7 +1115,7 @@ static int ov2722_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int ov2722_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;
index e698b63..0828ca9 100644 (file)
@@ -1577,7 +1577,7 @@ static int startup(struct v4l2_subdev *sd)
 }
 
 static int ov5693_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;
@@ -1608,7 +1608,7 @@ static int ov5693_set_fmt(struct v4l2_subdev *sd,
 
        fmt->code = MEDIA_BUS_FMT_SBGGR10_1X10;
        if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
-               cfg->try_fmt = *fmt;
+               sd_state->pads->try_fmt = *fmt;
                mutex_unlock(&dev->input_lock);
                return 0;
        }
@@ -1676,7 +1676,7 @@ err:
 }
 
 static int ov5693_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 *fmt = &format->format;
@@ -1825,7 +1825,7 @@ static int ov5693_g_frame_interval(struct v4l2_subdev *sd,
 }
 
 static int ov5693_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 >= MAX_FMTS)
@@ -1836,7 +1836,7 @@ static int ov5693_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int ov5693_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;
index 24d8eac..366161c 100644 (file)
@@ -4842,6 +4842,9 @@ int atomisp_try_fmt(struct video_device *vdev, struct v4l2_pix_format *f,
        struct atomisp_device *isp = video_get_drvdata(vdev);
        struct atomisp_sub_device *asd = atomisp_to_video_pipe(vdev)->asd;
        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,
        };
@@ -4877,7 +4880,7 @@ int atomisp_try_fmt(struct video_device *vdev, struct v4l2_pix_format *f,
                snr_mbus_fmt->width, snr_mbus_fmt->height);
 
        ret = v4l2_subdev_call(isp->inputs[asd->input_curr].camera,
-                              pad, set_fmt, &pad_cfg, &format);
+                              pad, set_fmt, &pad_state, &format);
        if (ret)
                return ret;
 
@@ -5252,11 +5255,11 @@ static int atomisp_set_fmt_to_isp(struct video_device *vdev,
                   atomisp_output_fmts[] in atomisp_v4l2.c */
                vf_ffmt.code = V4L2_MBUS_FMT_CUSTOM_YUV420;
 
-               atomisp_subdev_set_selection(&asd->subdev, fh.pad,
+               atomisp_subdev_set_selection(&asd->subdev, fh.state,
                                             V4L2_SUBDEV_FORMAT_ACTIVE,
                                             ATOMISP_SUBDEV_PAD_SOURCE_VF,
                                             V4L2_SEL_TGT_COMPOSE, 0, &vf_size);
-               atomisp_subdev_set_ffmt(&asd->subdev, fh.pad,
+               atomisp_subdev_set_ffmt(&asd->subdev, fh.state,
                                        V4L2_SUBDEV_FORMAT_ACTIVE,
                                        ATOMISP_SUBDEV_PAD_SOURCE_VF, &vf_ffmt);
                asd->video_out_vf.sh_fmt = IA_CSS_FRAME_FORMAT_NV12;
@@ -5493,6 +5496,9 @@ static int atomisp_set_fmt_to_snr(struct video_device *vdev,
        struct atomisp_sub_device *asd = atomisp_to_video_pipe(vdev)->asd;
        const struct atomisp_format_bridge *format;
        struct v4l2_subdev_pad_config pad_cfg;
+       struct v4l2_subdev_state pad_state = {
+               .pads = &pad_cfg
+               };
        struct v4l2_subdev_format vformat = {
                .which = V4L2_SUBDEV_FORMAT_TRY,
        };
@@ -5531,7 +5537,7 @@ static int atomisp_set_fmt_to_snr(struct video_device *vdev,
            source_pad == ATOMISP_SUBDEV_PAD_SOURCE_VIDEO) {
                vformat.which = V4L2_SUBDEV_FORMAT_TRY;
                ret = v4l2_subdev_call(isp->inputs[asd->input_curr].camera,
-                                      pad, set_fmt, &pad_cfg, &vformat);
+                                      pad, set_fmt, &pad_state, &vformat);
                if (ret)
                        return ret;
                if (ffmt->width < req_ffmt->width ||
@@ -5569,7 +5575,7 @@ static int atomisp_set_fmt_to_snr(struct video_device *vdev,
                asd->params.video_dis_en = false;
        }
 
-       atomisp_subdev_set_ffmt(&asd->subdev, fh.pad,
+       atomisp_subdev_set_ffmt(&asd->subdev, fh.state,
                                V4L2_SUBDEV_FORMAT_ACTIVE,
                                ATOMISP_SUBDEV_PAD_SINK, ffmt);
 
@@ -5648,7 +5654,7 @@ int atomisp_set_fmt(struct video_device *vdev, struct v4l2_format *f)
                        }
 
                        atomisp_subdev_set_selection(
-                           &asd->subdev, fh.pad,
+                           &asd->subdev, fh.state,
                            V4L2_SUBDEV_FORMAT_ACTIVE, source_pad,
                            V4L2_SEL_TGT_COMPOSE, 0, &r);
 
@@ -5778,7 +5784,7 @@ int atomisp_set_fmt(struct video_device *vdev, struct v4l2_format *f)
                                                ATOMISP_SUBDEV_PAD_SINK);
 
        isp_source_fmt.code = format_bridge->mbus_code;
-       atomisp_subdev_set_ffmt(&asd->subdev, fh.pad,
+       atomisp_subdev_set_ffmt(&asd->subdev, fh.state,
                                V4L2_SUBDEV_FORMAT_ACTIVE,
                                source_pad, &isp_source_fmt);
 
@@ -5897,13 +5903,13 @@ int atomisp_set_fmt(struct video_device *vdev, struct v4l2_format *f)
                        isp_sink_crop.height = f->fmt.pix.height;
                }
 
-               atomisp_subdev_set_selection(&asd->subdev, fh.pad,
+               atomisp_subdev_set_selection(&asd->subdev, fh.state,
                                             V4L2_SUBDEV_FORMAT_ACTIVE,
                                             ATOMISP_SUBDEV_PAD_SINK,
                                             V4L2_SEL_TGT_CROP,
                                             V4L2_SEL_FLAG_KEEP_CONFIG,
                                             &isp_sink_crop);
-               atomisp_subdev_set_selection(&asd->subdev, fh.pad,
+               atomisp_subdev_set_selection(&asd->subdev, fh.state,
                                             V4L2_SUBDEV_FORMAT_ACTIVE,
                                             source_pad, V4L2_SEL_TGT_COMPOSE,
                                             0, &isp_sink_crop);
@@ -5922,7 +5928,7 @@ int atomisp_set_fmt(struct video_device *vdev, struct v4l2_format *f)
                                         f->fmt.pix.height);
                }
 
-               atomisp_subdev_set_selection(&asd->subdev, fh.pad,
+               atomisp_subdev_set_selection(&asd->subdev, fh.state,
                                             V4L2_SUBDEV_FORMAT_ACTIVE,
                                             source_pad,
                                             V4L2_SEL_TGT_COMPOSE, 0,
@@ -5956,14 +5962,14 @@ int atomisp_set_fmt(struct video_device *vdev, struct v4l2_format *f)
                                                       f->fmt.pix.width,
                                                       ATOM_ISP_STEP_HEIGHT);
                        }
-                       atomisp_subdev_set_selection(&asd->subdev, fh.pad,
+                       atomisp_subdev_set_selection(&asd->subdev, fh.state,
                                                     V4L2_SUBDEV_FORMAT_ACTIVE,
                                                     ATOMISP_SUBDEV_PAD_SINK,
                                                     V4L2_SEL_TGT_CROP,
                                                     V4L2_SEL_FLAG_KEEP_CONFIG,
                                                     &sink_crop);
                }
-               atomisp_subdev_set_selection(&asd->subdev, fh.pad,
+               atomisp_subdev_set_selection(&asd->subdev, fh.state,
                                             V4L2_SUBDEV_FORMAT_ACTIVE,
                                             source_pad,
                                             V4L2_SEL_TGT_COMPOSE, 0,
@@ -6054,7 +6060,8 @@ int atomisp_set_fmt_file(struct video_device *vdev, struct v4l2_format *f)
        ffmt.height = f->fmt.pix.height;
        ffmt.code = format_bridge->mbus_code;
 
-       atomisp_subdev_set_ffmt(&asd->subdev, fh.pad, V4L2_SUBDEV_FORMAT_ACTIVE,
+       atomisp_subdev_set_ffmt(&asd->subdev, fh.state,
+                               V4L2_SUBDEV_FORMAT_ACTIVE,
                                ATOMISP_SUBDEV_PAD_SINK, &ffmt);
 
        return 0;
index 060b876..56456e5 100644 (file)
 static struct v4l2_mbus_framefmt *__csi2_get_format(struct
        atomisp_mipi_csi2_device
        * csi2,
-       struct
-       v4l2_subdev_pad_config *cfg,
+       struct v4l2_subdev_state *sd_state,
        enum
        v4l2_subdev_format_whence
        which, unsigned int pad) {
        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];
 }
@@ -44,7 +44,7 @@ static struct v4l2_mbus_framefmt *__csi2_get_format(struct
  * 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)
 {
        const struct atomisp_in_fmt_conv *ic = atomisp_in_fmt_conv;
@@ -70,13 +70,13 @@ static int csi2_enum_mbus_code(struct v4l2_subdev *sd,
  * return -EINVAL or zero on success
 */
 static int csi2_get_format(struct v4l2_subdev *sd,
-                          struct v4l2_subdev_pad_config *cfg,
+                          struct v4l2_subdev_state *sd_state,
                           struct v4l2_subdev_format *fmt)
 {
        struct atomisp_mipi_csi2_device *csi2 = v4l2_get_subdevdata(sd);
        struct v4l2_mbus_framefmt *format;
 
-       format = __csi2_get_format(csi2, cfg, fmt->which, fmt->pad);
+       format = __csi2_get_format(csi2, sd_state, fmt->which, fmt->pad);
 
        fmt->format = *format;
 
@@ -84,12 +84,14 @@ static int csi2_get_format(struct v4l2_subdev *sd,
 }
 
 int atomisp_csi2_set_ffmt(struct v4l2_subdev *sd,
-                         struct v4l2_subdev_pad_config *cfg,
+                         struct v4l2_subdev_state *sd_state,
                          unsigned int which, uint16_t pad,
                          struct v4l2_mbus_framefmt *ffmt)
 {
        struct atomisp_mipi_csi2_device *csi2 = v4l2_get_subdevdata(sd);
-       struct v4l2_mbus_framefmt *actual_ffmt = __csi2_get_format(csi2, cfg, which, pad);
+       struct v4l2_mbus_framefmt *actual_ffmt = __csi2_get_format(csi2,
+                                                                  sd_state,
+                                                                  which, pad);
 
        if (pad == CSI2_PAD_SINK) {
                const struct atomisp_in_fmt_conv *ic;
@@ -110,12 +112,14 @@ int atomisp_csi2_set_ffmt(struct v4l2_subdev *sd,
 
                tmp_ffmt = *ffmt = *actual_ffmt;
 
-               return atomisp_csi2_set_ffmt(sd, cfg, which, CSI2_PAD_SOURCE,
+               return atomisp_csi2_set_ffmt(sd, sd_state, which,
+                                            CSI2_PAD_SOURCE,
                                             &tmp_ffmt);
        }
 
        /* FIXME: DPCM decompression */
-       *actual_ffmt = *ffmt = *__csi2_get_format(csi2, cfg, which, CSI2_PAD_SINK);
+       *actual_ffmt = *ffmt = *__csi2_get_format(csi2, sd_state, which,
+                                                 CSI2_PAD_SINK);
 
        return 0;
 }
@@ -129,10 +133,10 @@ int atomisp_csi2_set_ffmt(struct v4l2_subdev *sd,
  * return -EINVAL or zero on success
 */
 static int csi2_set_format(struct v4l2_subdev *sd,
-                          struct v4l2_subdev_pad_config *cfg,
+                          struct v4l2_subdev_state *sd_state,
                           struct v4l2_subdev_format *fmt)
 {
-       return atomisp_csi2_set_ffmt(sd, cfg, fmt->which, fmt->pad,
+       return atomisp_csi2_set_ffmt(sd, sd_state, fmt->which, fmt->pad,
                                     &fmt->format);
 }
 
index 59261e8..e35711b 100644 (file)
@@ -44,7 +44,7 @@ struct atomisp_mipi_csi2_device {
 };
 
 int atomisp_csi2_set_ffmt(struct v4l2_subdev *sd,
-                         struct v4l2_subdev_pad_config *cfg,
+                         struct v4l2_subdev_state *sd_state,
                          unsigned int which, uint16_t pad,
                          struct v4l2_mbus_framefmt *ffmt);
 int atomisp_mipi_csi2_init(struct atomisp_device *isp);
index e568ca9..4570a9a 100644 (file)
@@ -80,7 +80,7 @@ static int file_input_s_stream(struct v4l2_subdev *sd, int enable)
 }
 
 static int file_input_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 *fmt = &format->format;
@@ -104,16 +104,16 @@ static int file_input_get_fmt(struct v4l2_subdev *sd,
 }
 
 static int file_input_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;
 
        if (format->pad)
                return -EINVAL;
-       file_input_get_fmt(sd, cfg, format);
+       file_input_get_fmt(sd, sd_state, format);
        if (format->which == V4L2_SUBDEV_FORMAT_TRY)
-               cfg->try_fmt = *fmt;
+               sd_state->pads->try_fmt = *fmt;
        return 0;
 }
 
@@ -130,7 +130,7 @@ static int file_input_s_power(struct v4l2_subdev *sd, int on)
 }
 
 static int file_input_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)
 {
        /*to fake*/
@@ -138,7 +138,7 @@ static int file_input_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int file_input_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)
 {
        /*to fake*/
@@ -146,7 +146,7 @@ static int file_input_enum_frame_size(struct v4l2_subdev *sd,
 }
 
 static int file_input_enum_frame_ival(struct v4l2_subdev *sd,
-                                     struct v4l2_subdev_pad_config *cfg,
+                                     struct v4l2_subdev_state *sd_state,
                                      struct v4l2_subdev_frame_interval_enum
                                      *fie)
 {
index 26d0547..022efd4 100644 (file)
@@ -963,7 +963,7 @@ static int atomisp_release(struct file *file)
        if (!isp->sw_contex.file_input && asd->fmt_auto->val) {
                struct v4l2_mbus_framefmt isp_sink_fmt = { 0 };
 
-               atomisp_subdev_set_ffmt(&asd->subdev, fh.pad,
+               atomisp_subdev_set_ffmt(&asd->subdev, fh.state,
                                        V4L2_SUBDEV_FORMAT_ACTIVE,
                                        ATOMISP_SUBDEV_PAD_SINK, &isp_sink_fmt);
        }
@@ -975,7 +975,7 @@ subdev_uninit:
        if (isp->sw_contex.file_input && asd->fmt_auto->val) {
                struct v4l2_mbus_framefmt isp_sink_fmt = { 0 };
 
-               atomisp_subdev_set_ffmt(&asd->subdev, fh.pad,
+               atomisp_subdev_set_ffmt(&asd->subdev, fh.state,
                                        V4L2_SUBDEV_FORMAT_ACTIVE,
                                        ATOMISP_SUBDEV_PAD_SINK, &isp_sink_fmt);
        }
@@ -1016,7 +1016,7 @@ subdev_uninit:
 
 done:
        if (!acc_node) {
-               atomisp_subdev_set_selection(&asd->subdev, fh.pad,
+               atomisp_subdev_set_selection(&asd->subdev, fh.state,
                                             V4L2_SUBDEV_FORMAT_ACTIVE,
                                             atomisp_subdev_source_pad(vdev),
                                             V4L2_SEL_TGT_COMPOSE, 0,
index aeabd07..12f22ad 100644 (file)
@@ -213,7 +213,7 @@ static int isp_subdev_unsubscribe_event(struct v4l2_subdev *sd,
  * return -EINVAL or zero on success
  */
 static int isp_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(atomisp_in_fmt_conv) - 1)
@@ -246,7 +246,7 @@ static int isp_subdev_validate_rect(struct v4l2_subdev *sd, uint32_t pad,
 }
 
 struct v4l2_rect *atomisp_subdev_get_rect(struct v4l2_subdev *sd,
-       struct v4l2_subdev_pad_config *cfg,
+       struct v4l2_subdev_state *sd_state,
        u32 which, uint32_t pad,
        uint32_t target)
 {
@@ -255,9 +255,9 @@ struct v4l2_rect *atomisp_subdev_get_rect(struct v4l2_subdev *sd,
        if (which == V4L2_SUBDEV_FORMAT_TRY) {
                switch (target) {
                case V4L2_SEL_TGT_CROP:
-                       return v4l2_subdev_get_try_crop(sd, cfg, pad);
+                       return v4l2_subdev_get_try_crop(sd, sd_state, pad);
                case V4L2_SEL_TGT_COMPOSE:
-                       return v4l2_subdev_get_try_compose(sd, cfg, pad);
+                       return v4l2_subdev_get_try_compose(sd, sd_state, pad);
                }
        }
 
@@ -273,19 +273,20 @@ struct v4l2_rect *atomisp_subdev_get_rect(struct v4l2_subdev *sd,
 
 struct v4l2_mbus_framefmt
 *atomisp_subdev_get_ffmt(struct v4l2_subdev *sd,
-                        struct v4l2_subdev_pad_config *cfg, uint32_t which,
+                        struct v4l2_subdev_state *sd_state, uint32_t which,
                         uint32_t pad)
 {
        struct atomisp_sub_device *isp_sd = v4l2_get_subdevdata(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 &isp_sd->fmt[pad].fmt;
 }
 
 static void isp_get_fmt_rect(struct v4l2_subdev *sd,
-                            struct v4l2_subdev_pad_config *cfg, uint32_t which,
+                            struct v4l2_subdev_state *sd_state,
+                            uint32_t which,
                             struct v4l2_mbus_framefmt **ffmt,
                             struct v4l2_rect *crop[ATOMISP_SUBDEV_PADS_NUM],
                             struct v4l2_rect *comp[ATOMISP_SUBDEV_PADS_NUM])
@@ -293,16 +294,16 @@ static void isp_get_fmt_rect(struct v4l2_subdev *sd,
        unsigned int i;
 
        for (i = 0; i < ATOMISP_SUBDEV_PADS_NUM; i++) {
-               ffmt[i] = atomisp_subdev_get_ffmt(sd, cfg, which, i);
-               crop[i] = atomisp_subdev_get_rect(sd, cfg, which, i,
+               ffmt[i] = atomisp_subdev_get_ffmt(sd, sd_state, which, i);
+               crop[i] = atomisp_subdev_get_rect(sd, sd_state, which, i,
                                                  V4L2_SEL_TGT_CROP);
-               comp[i] = atomisp_subdev_get_rect(sd, cfg, which, i,
+               comp[i] = atomisp_subdev_get_rect(sd, sd_state, which, i,
                                                  V4L2_SEL_TGT_COMPOSE);
        }
 }
 
 static void isp_subdev_propagate(struct v4l2_subdev *sd,
-                                struct v4l2_subdev_pad_config *cfg,
+                                struct v4l2_subdev_state *sd_state,
                                 u32 which, uint32_t pad, uint32_t target,
                                 uint32_t flags)
 {
@@ -313,7 +314,7 @@ static void isp_subdev_propagate(struct v4l2_subdev *sd,
        if (flags & V4L2_SEL_FLAG_KEEP_CONFIG)
                return;
 
-       isp_get_fmt_rect(sd, cfg, which, ffmt, crop, comp);
+       isp_get_fmt_rect(sd, sd_state, which, ffmt, crop, comp);
 
        switch (pad) {
        case ATOMISP_SUBDEV_PAD_SINK: {
@@ -323,7 +324,7 @@ static void isp_subdev_propagate(struct v4l2_subdev *sd,
                r.width = ffmt[pad]->width;
                r.height = ffmt[pad]->height;
 
-               atomisp_subdev_set_selection(sd, cfg, which, pad,
+               atomisp_subdev_set_selection(sd, sd_state, which, pad,
                                             target, flags, &r);
                break;
        }
@@ -331,7 +332,7 @@ static void isp_subdev_propagate(struct v4l2_subdev *sd,
 }
 
 static int isp_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 v4l2_rect *rec;
@@ -340,7 +341,7 @@ static int isp_subdev_get_selection(struct v4l2_subdev *sd,
        if (rval)
                return rval;
 
-       rec = atomisp_subdev_get_rect(sd, cfg, sel->which, sel->pad,
+       rec = atomisp_subdev_get_rect(sd, sd_state, sel->which, sel->pad,
                                      sel->target);
        if (!rec)
                return -EINVAL;
@@ -365,7 +366,7 @@ static const char *atomisp_pad_str(unsigned int pad)
 }
 
 int atomisp_subdev_set_selection(struct v4l2_subdev *sd,
-                                struct v4l2_subdev_pad_config *cfg,
+                                struct v4l2_subdev_state *sd_state,
                                 u32 which, uint32_t pad, uint32_t target,
                                 u32 flags, struct v4l2_rect *r)
 {
@@ -382,7 +383,7 @@ int atomisp_subdev_set_selection(struct v4l2_subdev *sd,
 
        stream_id = atomisp_source_pad_to_stream_id(isp_sd, vdev_pad);
 
-       isp_get_fmt_rect(sd, cfg, which, ffmt, crop, comp);
+       isp_get_fmt_rect(sd, sd_state, which, ffmt, crop, comp);
 
        dev_dbg(isp->dev,
                "sel: pad %s tgt %s l %d t %d w %d h %d which %s f 0x%8.8x\n",
@@ -450,7 +451,8 @@ int atomisp_subdev_set_selection(struct v4l2_subdev *sd,
                                struct v4l2_rect tmp = *crop[pad];
 
                                atomisp_subdev_set_selection(
-                                   sd, cfg, which, i, V4L2_SEL_TGT_COMPOSE,
+                                   sd, sd_state, which, i,
+                                   V4L2_SEL_TGT_COMPOSE,
                                    flags, &tmp);
                        }
                }
@@ -551,9 +553,9 @@ int atomisp_subdev_set_selection(struct v4l2_subdev *sd,
                ffmt[pad]->height = comp[pad]->height;
        }
 
-       if (!atomisp_subdev_get_rect(sd, cfg, which, pad, target))
+       if (!atomisp_subdev_get_rect(sd, sd_state, which, pad, target))
                return -EINVAL;
-       *r = *atomisp_subdev_get_rect(sd, cfg, which, pad, target);
+       *r = *atomisp_subdev_get_rect(sd, sd_state, which, pad, target);
 
        dev_dbg(isp->dev, "sel actual: l %d t %d w %d h %d\n",
                r->left, r->top, r->width, r->height);
@@ -562,7 +564,7 @@ int atomisp_subdev_set_selection(struct v4l2_subdev *sd,
 }
 
 static int isp_subdev_set_selection(struct v4l2_subdev *sd,
-                                   struct v4l2_subdev_pad_config *cfg,
+                                   struct v4l2_subdev_state *sd_state,
                                    struct v4l2_subdev_selection *sel)
 {
        int rval = isp_subdev_validate_rect(sd, sel->pad, sel->target);
@@ -570,7 +572,8 @@ static int isp_subdev_set_selection(struct v4l2_subdev *sd,
        if (rval)
                return rval;
 
-       return atomisp_subdev_set_selection(sd, cfg, sel->which, sel->pad,
+       return atomisp_subdev_set_selection(sd, sd_state, sel->which,
+                                           sel->pad,
                                            sel->target, sel->flags, &sel->r);
 }
 
@@ -609,13 +612,14 @@ static int atomisp_get_sensor_bin_factor(struct atomisp_sub_device *asd)
 }
 
 void atomisp_subdev_set_ffmt(struct v4l2_subdev *sd,
-                            struct v4l2_subdev_pad_config *cfg, uint32_t which,
+                            struct v4l2_subdev_state *sd_state,
+                            uint32_t which,
                             u32 pad, struct v4l2_mbus_framefmt *ffmt)
 {
        struct atomisp_sub_device *isp_sd = v4l2_get_subdevdata(sd);
        struct atomisp_device *isp = isp_sd->isp;
        struct v4l2_mbus_framefmt *__ffmt =
-           atomisp_subdev_get_ffmt(sd, cfg, which, pad);
+           atomisp_subdev_get_ffmt(sd, sd_state, which, pad);
        u16 vdev_pad = atomisp_subdev_source_pad(sd->devnode);
        enum atomisp_input_stream_id stream_id;
 
@@ -640,7 +644,7 @@ void atomisp_subdev_set_ffmt(struct v4l2_subdev *sd,
 
                *__ffmt = *ffmt;
 
-               isp_subdev_propagate(sd, cfg, which, pad,
+               isp_subdev_propagate(sd, sd_state, which, pad,
                                     V4L2_SEL_TGT_CROP, 0);
 
                if (which == V4L2_SUBDEV_FORMAT_ACTIVE) {
@@ -679,10 +683,11 @@ void atomisp_subdev_set_ffmt(struct v4l2_subdev *sd,
  * to the format type.
  */
 static int isp_subdev_get_format(struct v4l2_subdev *sd,
-                                struct v4l2_subdev_pad_config *cfg,
+                                struct v4l2_subdev_state *sd_state,
                                 struct v4l2_subdev_format *fmt)
 {
-       fmt->format = *atomisp_subdev_get_ffmt(sd, cfg, fmt->which, fmt->pad);
+       fmt->format = *atomisp_subdev_get_ffmt(sd, sd_state, fmt->which,
+                                              fmt->pad);
 
        return 0;
 }
@@ -698,10 +703,11 @@ static int isp_subdev_get_format(struct v4l2_subdev *sd,
  * to the format type.
  */
 static int isp_subdev_set_format(struct v4l2_subdev *sd,
-                                struct v4l2_subdev_pad_config *cfg,
+                                struct v4l2_subdev_state *sd_state,
                                 struct v4l2_subdev_format *fmt)
 {
-       atomisp_subdev_set_ffmt(sd, cfg, fmt->which, fmt->pad, &fmt->format);
+       atomisp_subdev_set_ffmt(sd, sd_state, fmt->which, fmt->pad,
+                               &fmt->format);
 
        return 0;
 }
index 330a77e..d6fcfab 100644 (file)
@@ -437,19 +437,20 @@ uint16_t atomisp_subdev_source_pad(struct video_device *vdev);
 /* Get pointer to appropriate format */
 struct v4l2_mbus_framefmt
 *atomisp_subdev_get_ffmt(struct v4l2_subdev *sd,
-                        struct v4l2_subdev_pad_config *cfg, uint32_t which,
+                        struct v4l2_subdev_state *sd_state, uint32_t which,
                         uint32_t pad);
 struct v4l2_rect *atomisp_subdev_get_rect(struct v4l2_subdev *sd,
-       struct v4l2_subdev_pad_config *cfg,
+       struct v4l2_subdev_state *sd_state,
        u32 which, uint32_t pad,
        uint32_t target);
 int atomisp_subdev_set_selection(struct v4l2_subdev *sd,
-                                struct v4l2_subdev_pad_config *cfg,
+                                struct v4l2_subdev_state *sd_state,
                                 u32 which, uint32_t pad, uint32_t target,
                                 u32 flags, struct v4l2_rect *r);
 /* Actually set the format */
 void atomisp_subdev_set_ffmt(struct v4l2_subdev *sd,
-                            struct v4l2_subdev_pad_config *cfg, uint32_t which,
+                            struct v4l2_subdev_state *sd_state,
+                            uint32_t which,
                             u32 pad, struct v4l2_mbus_framefmt *ffmt);
 
 int atomisp_update_run_mode(struct atomisp_sub_device *asd);
index 1def80b..e29a96d 100644 (file)
@@ -29,7 +29,7 @@ static int tpg_s_stream(struct v4l2_subdev *sd, int enable)
 }
 
 static int tpg_get_fmt(struct v4l2_subdev *sd,
-                      struct v4l2_subdev_pad_config *cfg,
+                      struct v4l2_subdev_state *sd_state,
                       struct v4l2_subdev_format *format)
 {
        /*to fake*/
@@ -37,7 +37,7 @@ static int tpg_get_fmt(struct v4l2_subdev *sd,
 }
 
 static int tpg_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;
@@ -47,7 +47,7 @@ static int tpg_set_fmt(struct v4l2_subdev *sd,
        /* only raw8 grbg is supported by TPG */
        fmt->code = MEDIA_BUS_FMT_SGRBG8_1X8;
        if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
-               cfg->try_fmt = *fmt;
+               sd_state->pads->try_fmt = *fmt;
                return 0;
        }
        return 0;
@@ -65,7 +65,7 @@ static int tpg_s_power(struct v4l2_subdev *sd, int on)
 }
 
 static int tpg_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)
 {
        /*to fake*/
@@ -73,7 +73,7 @@ static int tpg_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int tpg_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)
 {
        /*to fake*/
@@ -81,7 +81,7 @@ static int tpg_enum_frame_size(struct v4l2_subdev *sd,
 }
 
 static int tpg_enum_frame_ival(struct v4l2_subdev *sd,
-                              struct v4l2_subdev_pad_config *cfg,
+                              struct v4l2_subdev_state *sd_state,
                               struct v4l2_subdev_frame_interval_enum *fie)
 {
        /*to fake*/
index f21ed88..ac5fb33 100644 (file)
@@ -79,13 +79,13 @@ static void prp_stop(struct prp_priv *priv)
 }
 
 static struct v4l2_mbus_framefmt *
-__prp_get_fmt(struct prp_priv *priv, struct v4l2_subdev_pad_config *cfg,
+__prp_get_fmt(struct prp_priv *priv, struct v4l2_subdev_state *sd_state,
              unsigned int pad, enum v4l2_subdev_format_whence which)
 {
        struct imx_ic_priv *ic_priv = priv->ic_priv;
 
        if (which == V4L2_SUBDEV_FORMAT_TRY)
-               return v4l2_subdev_get_try_format(&ic_priv->sd, cfg, pad);
+               return v4l2_subdev_get_try_format(&ic_priv->sd, sd_state, pad);
        else
                return &priv->format_mbus;
 }
@@ -95,7 +95,7 @@ __prp_get_fmt(struct prp_priv *priv, struct v4l2_subdev_pad_config *cfg,
  */
 
 static int prp_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 prp_priv *priv = sd_to_priv(sd);
@@ -115,7 +115,8 @@ static int prp_enum_mbus_code(struct v4l2_subdev *sd,
                        ret = -EINVAL;
                        goto out;
                }
-               infmt = __prp_get_fmt(priv, cfg, PRP_SINK_PAD, code->which);
+               infmt = __prp_get_fmt(priv, sd_state, PRP_SINK_PAD,
+                                     code->which);
                code->code = infmt->code;
                break;
        default:
@@ -127,7 +128,7 @@ out:
 }
 
 static int prp_get_fmt(struct v4l2_subdev *sd,
-                      struct v4l2_subdev_pad_config *cfg,
+                      struct v4l2_subdev_state *sd_state,
                       struct v4l2_subdev_format *sdformat)
 {
        struct prp_priv *priv = sd_to_priv(sd);
@@ -139,7 +140,7 @@ static int prp_get_fmt(struct v4l2_subdev *sd,
 
        mutex_lock(&priv->lock);
 
-       fmt = __prp_get_fmt(priv, cfg, sdformat->pad, sdformat->which);
+       fmt = __prp_get_fmt(priv, sd_state, sdformat->pad, sdformat->which);
        if (!fmt) {
                ret = -EINVAL;
                goto out;
@@ -152,7 +153,7 @@ out:
 }
 
 static int prp_set_fmt(struct v4l2_subdev *sd,
-                      struct v4l2_subdev_pad_config *cfg,
+                      struct v4l2_subdev_state *sd_state,
                       struct v4l2_subdev_format *sdformat)
 {
        struct prp_priv *priv = sd_to_priv(sd);
@@ -171,7 +172,7 @@ static int prp_set_fmt(struct v4l2_subdev *sd,
                goto out;
        }
 
-       infmt = __prp_get_fmt(priv, cfg, PRP_SINK_PAD, sdformat->which);
+       infmt = __prp_get_fmt(priv, sd_state, PRP_SINK_PAD, sdformat->which);
 
        switch (sdformat->pad) {
        case PRP_SINK_PAD:
@@ -201,7 +202,7 @@ static int prp_set_fmt(struct v4l2_subdev *sd,
 
        imx_media_try_colorimetry(&sdformat->format, true);
 
-       fmt = __prp_get_fmt(priv, cfg, sdformat->pad, sdformat->which);
+       fmt = __prp_get_fmt(priv, sd_state, sdformat->pad, sdformat->which);
        *fmt = sdformat->format;
 out:
        mutex_unlock(&priv->lock);
index d990553..9b81cfb 100644 (file)
@@ -787,13 +787,13 @@ static void prp_stop(struct prp_priv *priv)
 }
 
 static struct v4l2_mbus_framefmt *
-__prp_get_fmt(struct prp_priv *priv, struct v4l2_subdev_pad_config *cfg,
+__prp_get_fmt(struct prp_priv *priv, struct v4l2_subdev_state *sd_state,
              unsigned int pad, enum v4l2_subdev_format_whence which)
 {
        struct imx_ic_priv *ic_priv = priv->ic_priv;
 
        if (which == V4L2_SUBDEV_FORMAT_TRY)
-               return v4l2_subdev_get_try_format(&ic_priv->sd, cfg, pad);
+               return v4l2_subdev_get_try_format(&ic_priv->sd, sd_state, pad);
        else
                return &priv->format_mbus[pad];
 }
@@ -841,7 +841,7 @@ static bool prp_bound_align_output(struct v4l2_mbus_framefmt *outfmt,
  */
 
 static int prp_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 >= PRPENCVF_NUM_PADS)
@@ -852,7 +852,7 @@ static int prp_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int prp_get_fmt(struct v4l2_subdev *sd,
-                      struct v4l2_subdev_pad_config *cfg,
+                      struct v4l2_subdev_state *sd_state,
                       struct v4l2_subdev_format *sdformat)
 {
        struct prp_priv *priv = sd_to_priv(sd);
@@ -864,7 +864,7 @@ static int prp_get_fmt(struct v4l2_subdev *sd,
 
        mutex_lock(&priv->lock);
 
-       fmt = __prp_get_fmt(priv, cfg, sdformat->pad, sdformat->which);
+       fmt = __prp_get_fmt(priv, sd_state, sdformat->pad, sdformat->which);
        if (!fmt) {
                ret = -EINVAL;
                goto out;
@@ -877,7 +877,7 @@ out:
 }
 
 static void prp_try_fmt(struct prp_priv *priv,
-                       struct v4l2_subdev_pad_config *cfg,
+                       struct v4l2_subdev_state *sd_state,
                        struct v4l2_subdev_format *sdformat,
                        const struct imx_media_pixfmt **cc)
 {
@@ -894,7 +894,8 @@ static void prp_try_fmt(struct prp_priv *priv,
                sdformat->format.code = (*cc)->codes[0];
        }
 
-       infmt = __prp_get_fmt(priv, cfg, PRPENCVF_SINK_PAD, sdformat->which);
+       infmt = __prp_get_fmt(priv, sd_state, PRPENCVF_SINK_PAD,
+                             sdformat->which);
 
        if (sdformat->pad == PRPENCVF_SRC_PAD) {
                sdformat->format.field = infmt->field;
@@ -920,7 +921,7 @@ static void prp_try_fmt(struct prp_priv *priv,
 }
 
 static int prp_set_fmt(struct v4l2_subdev *sd,
-                      struct v4l2_subdev_pad_config *cfg,
+                      struct v4l2_subdev_state *sd_state,
                       struct v4l2_subdev_format *sdformat)
 {
        struct prp_priv *priv = sd_to_priv(sd);
@@ -938,9 +939,9 @@ static int prp_set_fmt(struct v4l2_subdev *sd,
                goto out;
        }
 
-       prp_try_fmt(priv, cfg, sdformat, &cc);
+       prp_try_fmt(priv, sd_state, sdformat, &cc);
 
-       fmt = __prp_get_fmt(priv, cfg, sdformat->pad, sdformat->which);
+       fmt = __prp_get_fmt(priv, sd_state, sdformat->pad, sdformat->which);
        *fmt = sdformat->format;
 
        /* propagate a default format to source pad */
@@ -952,9 +953,9 @@ static int prp_set_fmt(struct v4l2_subdev *sd,
                format.pad = PRPENCVF_SRC_PAD;
                format.which = sdformat->which;
                format.format = sdformat->format;
-               prp_try_fmt(priv, cfg, &format, &outcc);
+               prp_try_fmt(priv, sd_state, &format, &outcc);
 
-               outfmt = __prp_get_fmt(priv, cfg, PRPENCVF_SRC_PAD,
+               outfmt = __prp_get_fmt(priv, sd_state, PRPENCVF_SRC_PAD,
                                       sdformat->which);
                *outfmt = format.format;
                if (sdformat->which == V4L2_SUBDEV_FORMAT_ACTIVE)
@@ -970,7 +971,7 @@ out:
 }
 
 static int prp_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 prp_priv *priv = sd_to_priv(sd);
@@ -988,7 +989,7 @@ static int prp_enum_frame_size(struct v4l2_subdev *sd,
        format.format.code = fse->code;
        format.format.width = 1;
        format.format.height = 1;
-       prp_try_fmt(priv, cfg, &format, &cc);
+       prp_try_fmt(priv, sd_state, &format, &cc);
        fse->min_width = format.format.width;
        fse->min_height = format.format.height;
 
@@ -1000,7 +1001,7 @@ static int prp_enum_frame_size(struct v4l2_subdev *sd,
        format.format.code = fse->code;
        format.format.width = -1;
        format.format.height = -1;
-       prp_try_fmt(priv, cfg, &format, &cc);
+       prp_try_fmt(priv, sd_state, &format, &cc);
        fse->max_width = format.format.width;
        fse->max_height = format.format.height;
 out:
index e3bfd63..d2f1d40 100644 (file)
@@ -1139,31 +1139,32 @@ static int csi_link_validate(struct v4l2_subdev *sd,
 }
 
 static struct v4l2_mbus_framefmt *
-__csi_get_fmt(struct csi_priv *priv, struct v4l2_subdev_pad_config *cfg,
+__csi_get_fmt(struct csi_priv *priv, 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(&priv->sd, cfg, pad);
+               return v4l2_subdev_get_try_format(&priv->sd, sd_state, pad);
        else
                return &priv->format_mbus[pad];
 }
 
 static struct v4l2_rect *
-__csi_get_crop(struct csi_priv *priv, struct v4l2_subdev_pad_config *cfg,
+__csi_get_crop(struct csi_priv *priv, struct v4l2_subdev_state *sd_state,
               enum v4l2_subdev_format_whence which)
 {
        if (which == V4L2_SUBDEV_FORMAT_TRY)
-               return v4l2_subdev_get_try_crop(&priv->sd, cfg, CSI_SINK_PAD);
+               return v4l2_subdev_get_try_crop(&priv->sd, sd_state,
+                                               CSI_SINK_PAD);
        else
                return &priv->crop;
 }
 
 static struct v4l2_rect *
-__csi_get_compose(struct csi_priv *priv, struct v4l2_subdev_pad_config *cfg,
+__csi_get_compose(struct csi_priv *priv, struct v4l2_subdev_state *sd_state,
                  enum v4l2_subdev_format_whence which)
 {
        if (which == V4L2_SUBDEV_FORMAT_TRY)
-               return v4l2_subdev_get_try_compose(&priv->sd, cfg,
+               return v4l2_subdev_get_try_compose(&priv->sd, sd_state,
                                                   CSI_SINK_PAD);
        else
                return &priv->compose;
@@ -1171,7 +1172,7 @@ __csi_get_compose(struct csi_priv *priv, struct v4l2_subdev_pad_config *cfg,
 
 static void csi_try_crop(struct csi_priv *priv,
                         struct v4l2_rect *crop,
-                        struct v4l2_subdev_pad_config *cfg,
+                        struct v4l2_subdev_state *sd_state,
                         struct v4l2_mbus_framefmt *infmt,
                         struct v4l2_fwnode_endpoint *upstream_ep)
 {
@@ -1210,7 +1211,7 @@ static void csi_try_crop(struct csi_priv *priv,
 }
 
 static int csi_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 csi_priv *priv = v4l2_get_subdevdata(sd);
@@ -1221,7 +1222,7 @@ static int csi_enum_mbus_code(struct v4l2_subdev *sd,
 
        mutex_lock(&priv->lock);
 
-       infmt = __csi_get_fmt(priv, cfg, CSI_SINK_PAD, code->which);
+       infmt = __csi_get_fmt(priv, sd_state, CSI_SINK_PAD, code->which);
        incc = imx_media_find_mbus_format(infmt->code, PIXFMT_SEL_ANY);
 
        switch (code->pad) {
@@ -1263,7 +1264,7 @@ out:
 }
 
 static int csi_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 csi_priv *priv = v4l2_get_subdevdata(sd);
@@ -1282,7 +1283,7 @@ static int csi_enum_frame_size(struct v4l2_subdev *sd,
                fse->min_height = MIN_H;
                fse->max_height = MAX_H;
        } else {
-               crop = __csi_get_crop(priv, cfg, fse->which);
+               crop = __csi_get_crop(priv, sd_state, fse->which);
 
                fse->min_width = fse->index & 1 ?
                        crop->width / 2 : crop->width;
@@ -1297,7 +1298,7 @@ static int csi_enum_frame_size(struct v4l2_subdev *sd,
 }
 
 static int csi_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 csi_priv *priv = v4l2_get_subdevdata(sd);
@@ -1313,7 +1314,7 @@ static int csi_enum_frame_interval(struct v4l2_subdev *sd,
        mutex_lock(&priv->lock);
 
        input_fi = &priv->frame_interval[CSI_SINK_PAD];
-       crop = __csi_get_crop(priv, cfg, fie->which);
+       crop = __csi_get_crop(priv, sd_state, fie->which);
 
        if ((fie->width != crop->width && fie->width != crop->width / 2) ||
            (fie->height != crop->height && fie->height != crop->height / 2)) {
@@ -1333,7 +1334,7 @@ out:
 }
 
 static int csi_get_fmt(struct v4l2_subdev *sd,
-                      struct v4l2_subdev_pad_config *cfg,
+                      struct v4l2_subdev_state *sd_state,
                       struct v4l2_subdev_format *sdformat)
 {
        struct csi_priv *priv = v4l2_get_subdevdata(sd);
@@ -1345,7 +1346,7 @@ static int csi_get_fmt(struct v4l2_subdev *sd,
 
        mutex_lock(&priv->lock);
 
-       fmt = __csi_get_fmt(priv, cfg, sdformat->pad, sdformat->which);
+       fmt = __csi_get_fmt(priv, sd_state, sdformat->pad, sdformat->which);
        if (!fmt) {
                ret = -EINVAL;
                goto out;
@@ -1358,11 +1359,11 @@ out:
 }
 
 static void csi_try_field(struct csi_priv *priv,
-                         struct v4l2_subdev_pad_config *cfg,
+                         struct v4l2_subdev_state *sd_state,
                          struct v4l2_subdev_format *sdformat)
 {
        struct v4l2_mbus_framefmt *infmt =
-               __csi_get_fmt(priv, cfg, CSI_SINK_PAD, sdformat->which);
+               __csi_get_fmt(priv, sd_state, CSI_SINK_PAD, sdformat->which);
 
        /*
         * no restrictions on sink pad field type except must
@@ -1408,7 +1409,7 @@ static void csi_try_field(struct csi_priv *priv,
 
 static void csi_try_fmt(struct csi_priv *priv,
                        struct v4l2_fwnode_endpoint *upstream_ep,
-                       struct v4l2_subdev_pad_config *cfg,
+                       struct v4l2_subdev_state *sd_state,
                        struct v4l2_subdev_format *sdformat,
                        struct v4l2_rect *crop,
                        struct v4l2_rect *compose,
@@ -1418,7 +1419,7 @@ static void csi_try_fmt(struct csi_priv *priv,
        struct v4l2_mbus_framefmt *infmt;
        u32 code;
 
-       infmt = __csi_get_fmt(priv, cfg, CSI_SINK_PAD, sdformat->which);
+       infmt = __csi_get_fmt(priv, sd_state, CSI_SINK_PAD, sdformat->which);
 
        switch (sdformat->pad) {
        case CSI_SRC_PAD_DIRECT:
@@ -1445,7 +1446,7 @@ static void csi_try_fmt(struct csi_priv *priv,
                        }
                }
 
-               csi_try_field(priv, cfg, sdformat);
+               csi_try_field(priv, sd_state, sdformat);
 
                /* propagate colorimetry from sink */
                sdformat->format.colorspace = infmt->colorspace;
@@ -1469,7 +1470,7 @@ static void csi_try_fmt(struct csi_priv *priv,
                        sdformat->format.code = (*cc)->codes[0];
                }
 
-               csi_try_field(priv, cfg, sdformat);
+               csi_try_field(priv, sd_state, sdformat);
 
                /* Reset crop and compose rectangles */
                crop->left = 0;
@@ -1478,7 +1479,8 @@ static void csi_try_fmt(struct csi_priv *priv,
                crop->height = sdformat->format.height;
                if (sdformat->format.field == V4L2_FIELD_ALTERNATE)
                        crop->height *= 2;
-               csi_try_crop(priv, crop, cfg, &sdformat->format, upstream_ep);
+               csi_try_crop(priv, crop, sd_state, &sdformat->format,
+                            upstream_ep);
                compose->left = 0;
                compose->top = 0;
                compose->width = crop->width;
@@ -1492,7 +1494,7 @@ static void csi_try_fmt(struct csi_priv *priv,
 }
 
 static int csi_set_fmt(struct v4l2_subdev *sd,
-                      struct v4l2_subdev_pad_config *cfg,
+                      struct v4l2_subdev_state *sd_state,
                       struct v4l2_subdev_format *sdformat)
 {
        struct csi_priv *priv = v4l2_get_subdevdata(sd);
@@ -1518,12 +1520,13 @@ static int csi_set_fmt(struct v4l2_subdev *sd,
                goto out;
        }
 
-       crop = __csi_get_crop(priv, cfg, sdformat->which);
-       compose = __csi_get_compose(priv, cfg, sdformat->which);
+       crop = __csi_get_crop(priv, sd_state, sdformat->which);
+       compose = __csi_get_compose(priv, sd_state, sdformat->which);
 
-       csi_try_fmt(priv, &upstream_ep, cfg, sdformat, crop, compose, &cc);
+       csi_try_fmt(priv, &upstream_ep, sd_state, sdformat, crop, compose,
+                   &cc);
 
-       fmt = __csi_get_fmt(priv, cfg, sdformat->pad, sdformat->which);
+       fmt = __csi_get_fmt(priv, sd_state, sdformat->pad, sdformat->which);
        *fmt = sdformat->format;
 
        if (sdformat->pad == CSI_SINK_PAD) {
@@ -1538,10 +1541,11 @@ static int csi_set_fmt(struct v4l2_subdev *sd,
                        format.pad = pad;
                        format.which = sdformat->which;
                        format.format = sdformat->format;
-                       csi_try_fmt(priv, &upstream_ep, cfg, &format,
+                       csi_try_fmt(priv, &upstream_ep, sd_state, &format,
                                    NULL, compose, &outcc);
 
-                       outfmt = __csi_get_fmt(priv, cfg, pad, sdformat->which);
+                       outfmt = __csi_get_fmt(priv, sd_state, pad,
+                                              sdformat->which);
                        *outfmt = format.format;
 
                        if (sdformat->which == V4L2_SUBDEV_FORMAT_ACTIVE)
@@ -1558,7 +1562,7 @@ out:
 }
 
 static int csi_get_selection(struct v4l2_subdev *sd,
-                            struct v4l2_subdev_pad_config *cfg,
+                            struct v4l2_subdev_state *sd_state,
                             struct v4l2_subdev_selection *sel)
 {
        struct csi_priv *priv = v4l2_get_subdevdata(sd);
@@ -1571,9 +1575,9 @@ static int csi_get_selection(struct v4l2_subdev *sd,
 
        mutex_lock(&priv->lock);
 
-       infmt = __csi_get_fmt(priv, cfg, CSI_SINK_PAD, sel->which);
-       crop = __csi_get_crop(priv, cfg, sel->which);
-       compose = __csi_get_compose(priv, cfg, sel->which);
+       infmt = __csi_get_fmt(priv, sd_state, CSI_SINK_PAD, sel->which);
+       crop = __csi_get_crop(priv, sd_state, sel->which);
+       compose = __csi_get_compose(priv, sd_state, sel->which);
 
        switch (sel->target) {
        case V4L2_SEL_TGT_CROP_BOUNDS:
@@ -1622,7 +1626,7 @@ static int csi_set_scale(u32 *compose, u32 crop, u32 flags)
 }
 
 static int csi_set_selection(struct v4l2_subdev *sd,
-                            struct v4l2_subdev_pad_config *cfg,
+                            struct v4l2_subdev_state *sd_state,
                             struct v4l2_subdev_selection *sel)
 {
        struct csi_priv *priv = v4l2_get_subdevdata(sd);
@@ -1647,9 +1651,9 @@ static int csi_set_selection(struct v4l2_subdev *sd,
                goto out;
        }
 
-       infmt = __csi_get_fmt(priv, cfg, CSI_SINK_PAD, sel->which);
-       crop = __csi_get_crop(priv, cfg, sel->which);
-       compose = __csi_get_compose(priv, cfg, sel->which);
+       infmt = __csi_get_fmt(priv, sd_state, CSI_SINK_PAD, sel->which);
+       crop = __csi_get_crop(priv, sd_state, sel->which);
+       compose = __csi_get_compose(priv, sd_state, sel->which);
 
        switch (sel->target) {
        case V4L2_SEL_TGT_CROP:
@@ -1665,7 +1669,7 @@ static int csi_set_selection(struct v4l2_subdev *sd,
                        goto out;
                }
 
-               csi_try_crop(priv, &sel->r, cfg, infmt, &upstream_ep);
+               csi_try_crop(priv, &sel->r, sd_state, infmt, &upstream_ep);
 
                *crop = sel->r;
 
@@ -1706,7 +1710,7 @@ static int csi_set_selection(struct v4l2_subdev *sd,
        for (pad = CSI_SINK_PAD + 1; pad < CSI_NUM_PADS; pad++) {
                struct v4l2_mbus_framefmt *outfmt;
 
-               outfmt = __csi_get_fmt(priv, cfg, pad, sel->which);
+               outfmt = __csi_get_fmt(priv, sd_state, pad, sel->which);
                outfmt->width = compose->width;
                outfmt->height = compose->height;
        }
index 5128915..6f90acf 100644 (file)
@@ -429,7 +429,7 @@ EXPORT_SYMBOL_GPL(imx_media_init_mbus_fmt);
  * of a subdev. Can be used as the .init_cfg pad operation.
  */
 int imx_media_init_cfg(struct v4l2_subdev *sd,
-                      struct v4l2_subdev_pad_config *cfg)
+                      struct v4l2_subdev_state *sd_state)
 {
        struct v4l2_mbus_framefmt *mf_try;
        struct v4l2_subdev_format format;
@@ -445,7 +445,7 @@ int imx_media_init_cfg(struct v4l2_subdev *sd,
                if (ret)
                        continue;
 
-               mf_try = v4l2_subdev_get_try_format(sd, cfg, pad);
+               mf_try = v4l2_subdev_get_try_format(sd, sd_state, pad);
                *mf_try = format.format;
        }
 
index abf290b..3c2093c 100644 (file)
@@ -532,17 +532,17 @@ out:
 }
 
 static struct v4l2_mbus_framefmt *
-__vdic_get_fmt(struct vdic_priv *priv, struct v4l2_subdev_pad_config *cfg,
+__vdic_get_fmt(struct vdic_priv *priv, 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(&priv->sd, cfg, pad);
+               return v4l2_subdev_get_try_format(&priv->sd, sd_state, pad);
        else
                return &priv->format_mbus[pad];
 }
 
 static int vdic_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 >= VDIC_NUM_PADS)
@@ -553,7 +553,7 @@ static int vdic_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int vdic_get_fmt(struct v4l2_subdev *sd,
-                       struct v4l2_subdev_pad_config *cfg,
+                       struct v4l2_subdev_state *sd_state,
                        struct v4l2_subdev_format *sdformat)
 {
        struct vdic_priv *priv = v4l2_get_subdevdata(sd);
@@ -565,7 +565,7 @@ static int vdic_get_fmt(struct v4l2_subdev *sd,
 
        mutex_lock(&priv->lock);
 
-       fmt = __vdic_get_fmt(priv, cfg, sdformat->pad, sdformat->which);
+       fmt = __vdic_get_fmt(priv, sd_state, sdformat->pad, sdformat->which);
        if (!fmt) {
                ret = -EINVAL;
                goto out;
@@ -578,7 +578,7 @@ out:
 }
 
 static void vdic_try_fmt(struct vdic_priv *priv,
-                        struct v4l2_subdev_pad_config *cfg,
+                        struct v4l2_subdev_state *sd_state,
                         struct v4l2_subdev_format *sdformat,
                         const struct imx_media_pixfmt **cc)
 {
@@ -594,7 +594,7 @@ static void vdic_try_fmt(struct vdic_priv *priv,
                sdformat->format.code = (*cc)->codes[0];
        }
 
-       infmt = __vdic_get_fmt(priv, cfg, priv->active_input_pad,
+       infmt = __vdic_get_fmt(priv, sd_state, priv->active_input_pad,
                               sdformat->which);
 
        switch (sdformat->pad) {
@@ -620,7 +620,7 @@ static void vdic_try_fmt(struct vdic_priv *priv,
 }
 
 static int vdic_set_fmt(struct v4l2_subdev *sd,
-                       struct v4l2_subdev_pad_config *cfg,
+                       struct v4l2_subdev_state *sd_state,
                        struct v4l2_subdev_format *sdformat)
 {
        struct vdic_priv *priv = v4l2_get_subdevdata(sd);
@@ -638,9 +638,9 @@ static int vdic_set_fmt(struct v4l2_subdev *sd,
                goto out;
        }
 
-       vdic_try_fmt(priv, cfg, sdformat, &cc);
+       vdic_try_fmt(priv, sd_state, sdformat, &cc);
 
-       fmt = __vdic_get_fmt(priv, cfg, sdformat->pad, sdformat->which);
+       fmt = __vdic_get_fmt(priv, sd_state, sdformat->pad, sdformat->which);
        *fmt = sdformat->format;
 
        /* propagate format to source pad */
@@ -653,9 +653,9 @@ static int vdic_set_fmt(struct v4l2_subdev *sd,
                format.pad = VDIC_SRC_PAD_DIRECT;
                format.which = sdformat->which;
                format.format = sdformat->format;
-               vdic_try_fmt(priv, cfg, &format, &outcc);
+               vdic_try_fmt(priv, sd_state, &format, &outcc);
 
-               outfmt = __vdic_get_fmt(priv, cfg, VDIC_SRC_PAD_DIRECT,
+               outfmt = __vdic_get_fmt(priv, sd_state, VDIC_SRC_PAD_DIRECT,
                                        sdformat->which);
                *outfmt = format.format;
                if (sdformat->which == V4L2_SUBDEV_FORMAT_ACTIVE)
index 492d9a6..6740e79 100644 (file)
@@ -193,7 +193,7 @@ int imx_media_init_mbus_fmt(struct v4l2_mbus_framefmt *mbus,
                            u32 width, u32 height, u32 code, u32 field,
                            const struct imx_media_pixfmt **cc);
 int imx_media_init_cfg(struct v4l2_subdev *sd,
-                      struct v4l2_subdev_pad_config *cfg);
+                      struct v4l2_subdev_state *sd_state);
 void imx_media_try_colorimetry(struct v4l2_mbus_framefmt *tryfmt,
                               bool ic_route);
 int imx_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix,
index fc2378a..9de0ebd 100644 (file)
@@ -508,17 +508,17 @@ out:
 }
 
 static struct v4l2_mbus_framefmt *
-__csi2_get_fmt(struct csi2_dev *csi2, struct v4l2_subdev_pad_config *cfg,
+__csi2_get_fmt(struct csi2_dev *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->sd, cfg, pad);
+               return v4l2_subdev_get_try_format(&csi2->sd, sd_state, pad);
        else
                return &csi2->format_mbus;
 }
 
 static int csi2_get_fmt(struct v4l2_subdev *sd,
-                       struct v4l2_subdev_pad_config *cfg,
+                       struct v4l2_subdev_state *sd_state,
                        struct v4l2_subdev_format *sdformat)
 {
        struct csi2_dev *csi2 = sd_to_dev(sd);
@@ -526,7 +526,7 @@ static int csi2_get_fmt(struct v4l2_subdev *sd,
 
        mutex_lock(&csi2->lock);
 
-       fmt = __csi2_get_fmt(csi2, cfg, sdformat->pad, sdformat->which);
+       fmt = __csi2_get_fmt(csi2, sd_state, sdformat->pad, sdformat->which);
 
        sdformat->format = *fmt;
 
@@ -536,7 +536,7 @@ static int csi2_get_fmt(struct v4l2_subdev *sd,
 }
 
 static int csi2_set_fmt(struct v4l2_subdev *sd,
-                       struct v4l2_subdev_pad_config *cfg,
+                       struct v4l2_subdev_state *sd_state,
                        struct v4l2_subdev_format *sdformat)
 {
        struct csi2_dev *csi2 = sd_to_dev(sd);
@@ -557,7 +557,7 @@ static int csi2_set_fmt(struct v4l2_subdev *sd,
        if (sdformat->pad != CSI2_SINK_PAD)
                sdformat->format = csi2->format_mbus;
 
-       fmt = __csi2_get_fmt(csi2, cfg, sdformat->pad, sdformat->which);
+       fmt = __csi2_get_fmt(csi2, sd_state, sdformat->pad, sdformat->which);
 
        *fmt = sdformat->format;
 out:
index f85a2f5..894c4de 100644 (file)
@@ -724,7 +724,7 @@ out_unlock:
 }
 
 static int imx7_csi_init_cfg(struct v4l2_subdev *sd,
-                            struct v4l2_subdev_pad_config *cfg)
+                            struct v4l2_subdev_state *sd_state)
 {
        struct imx7_csi *csi = v4l2_get_subdevdata(sd);
        struct v4l2_mbus_framefmt *mf;
@@ -732,7 +732,7 @@ static int imx7_csi_init_cfg(struct v4l2_subdev *sd,
        int i;
 
        for (i = 0; i < IMX7_CSI_PADS_NUM; i++) {
-               mf = v4l2_subdev_get_try_format(sd, cfg, i);
+               mf = v4l2_subdev_get_try_format(sd, sd_state, i);
 
                ret = imx_media_init_mbus_fmt(mf, 800, 600, 0, V4L2_FIELD_NONE,
                                              &csi->cc[i]);
@@ -745,18 +745,18 @@ static int imx7_csi_init_cfg(struct v4l2_subdev *sd,
 
 static struct v4l2_mbus_framefmt *
 imx7_csi_get_format(struct imx7_csi *csi,
-                   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(&csi->sd, cfg, pad);
+               return v4l2_subdev_get_try_format(&csi->sd, sd_state, pad);
 
        return &csi->format_mbus[pad];
 }
 
 static int imx7_csi_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 imx7_csi *csi = v4l2_get_subdevdata(sd);
@@ -765,7 +765,8 @@ static int imx7_csi_enum_mbus_code(struct v4l2_subdev *sd,
 
        mutex_lock(&csi->lock);
 
-       in_fmt = imx7_csi_get_format(csi, cfg, IMX7_CSI_PAD_SINK, code->which);
+       in_fmt = imx7_csi_get_format(csi, sd_state, IMX7_CSI_PAD_SINK,
+                                    code->which);
 
        switch (code->pad) {
        case IMX7_CSI_PAD_SINK:
@@ -791,7 +792,7 @@ out_unlock:
 }
 
 static int imx7_csi_get_fmt(struct v4l2_subdev *sd,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *sdformat)
 {
        struct imx7_csi *csi = v4l2_get_subdevdata(sd);
@@ -800,7 +801,8 @@ static int imx7_csi_get_fmt(struct v4l2_subdev *sd,
 
        mutex_lock(&csi->lock);
 
-       fmt = imx7_csi_get_format(csi, cfg, sdformat->pad, sdformat->which);
+       fmt = imx7_csi_get_format(csi, sd_state, sdformat->pad,
+                                 sdformat->which);
        if (!fmt) {
                ret = -EINVAL;
                goto out_unlock;
@@ -815,7 +817,7 @@ out_unlock:
 }
 
 static int imx7_csi_try_fmt(struct imx7_csi *csi,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *sdformat,
                            const struct imx_media_pixfmt **cc)
 {
@@ -823,7 +825,7 @@ static int imx7_csi_try_fmt(struct imx7_csi *csi,
        struct v4l2_mbus_framefmt *in_fmt;
        u32 code;
 
-       in_fmt = imx7_csi_get_format(csi, cfg, IMX7_CSI_PAD_SINK,
+       in_fmt = imx7_csi_get_format(csi, sd_state, IMX7_CSI_PAD_SINK,
                                     sdformat->which);
        if (!in_fmt)
                return -EINVAL;
@@ -868,7 +870,7 @@ static int imx7_csi_try_fmt(struct imx7_csi *csi,
 }
 
 static int imx7_csi_set_fmt(struct v4l2_subdev *sd,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *sdformat)
 {
        struct imx7_csi *csi = v4l2_get_subdevdata(sd);
@@ -889,11 +891,12 @@ static int imx7_csi_set_fmt(struct v4l2_subdev *sd,
                goto out_unlock;
        }
 
-       ret = imx7_csi_try_fmt(csi, cfg, sdformat, &cc);
+       ret = imx7_csi_try_fmt(csi, sd_state, sdformat, &cc);
        if (ret < 0)
                goto out_unlock;
 
-       fmt = imx7_csi_get_format(csi, cfg, sdformat->pad, sdformat->which);
+       fmt = imx7_csi_get_format(csi, sd_state, sdformat->pad,
+                                 sdformat->which);
        if (!fmt) {
                ret = -EINVAL;
                goto out_unlock;
@@ -906,11 +909,11 @@ static int imx7_csi_set_fmt(struct v4l2_subdev *sd,
                format.pad = IMX7_CSI_PAD_SRC;
                format.which = sdformat->which;
                format.format = sdformat->format;
-               if (imx7_csi_try_fmt(csi, cfg, &format, &outcc)) {
+               if (imx7_csi_try_fmt(csi, sd_state, &format, &outcc)) {
                        ret = -EINVAL;
                        goto out_unlock;
                }
-               outfmt = imx7_csi_get_format(csi, cfg, IMX7_CSI_PAD_SRC,
+               outfmt = imx7_csi_get_format(csi, sd_state, IMX7_CSI_PAD_SRC,
                                             sdformat->which);
                *outfmt = format.format;
 
index 9cd3c86..ead696e 100644 (file)
@@ -880,26 +880,26 @@ done:
 
 static struct v4l2_mbus_framefmt *
 mipi_csis_get_format(struct csi_state *state,
-                    struct v4l2_subdev_pad_config *cfg,
+                    struct v4l2_subdev_state *sd_state,
                     enum v4l2_subdev_format_whence which,
                     unsigned int pad)
 {
        if (which == V4L2_SUBDEV_FORMAT_TRY)
-               return v4l2_subdev_get_try_format(&state->sd, cfg, pad);
+               return v4l2_subdev_get_try_format(&state->sd, sd_state, pad);
 
        return &state->format_mbus;
 }
 
 static int mipi_csis_init_cfg(struct v4l2_subdev *sd,
-                             struct v4l2_subdev_pad_config *cfg)
+                             struct v4l2_subdev_state *sd_state)
 {
        struct csi_state *state = mipi_sd_to_csis_state(sd);
        struct v4l2_mbus_framefmt *fmt_sink;
        struct v4l2_mbus_framefmt *fmt_source;
        enum v4l2_subdev_format_whence which;
 
-       which = cfg ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE;
-       fmt_sink = mipi_csis_get_format(state, cfg, which, CSIS_PAD_SINK);
+       which = sd_state ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE;
+       fmt_sink = mipi_csis_get_format(state, sd_state, which, CSIS_PAD_SINK);
 
        fmt_sink->code = MEDIA_BUS_FMT_UYVY8_1X16;
        fmt_sink->width = MIPI_CSIS_DEF_PIX_WIDTH;
@@ -918,23 +918,25 @@ static int mipi_csis_init_cfg(struct v4l2_subdev *sd,
         * configuration, cfg is NULL, which indicates there's no source pad
         * configuration to set.
         */
-       if (!cfg)
+       if (!sd_state)
                return 0;
 
-       fmt_source = mipi_csis_get_format(state, cfg, which, CSIS_PAD_SOURCE);
+       fmt_source = mipi_csis_get_format(state, sd_state, which,
+                                         CSIS_PAD_SOURCE);
        *fmt_source = *fmt_sink;
 
        return 0;
 }
 
 static int mipi_csis_get_fmt(struct v4l2_subdev *sd,
-                            struct v4l2_subdev_pad_config *cfg,
+                            struct v4l2_subdev_state *sd_state,
                             struct v4l2_subdev_format *sdformat)
 {
        struct csi_state *state = mipi_sd_to_csis_state(sd);
        struct v4l2_mbus_framefmt *fmt;
 
-       fmt = mipi_csis_get_format(state, cfg, sdformat->which, sdformat->pad);
+       fmt = mipi_csis_get_format(state, sd_state, sdformat->which,
+                                  sdformat->pad);
 
        mutex_lock(&state->lock);
        sdformat->format = *fmt;
@@ -944,7 +946,7 @@ static int mipi_csis_get_fmt(struct v4l2_subdev *sd,
 }
 
 static int mipi_csis_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 csi_state *state = mipi_sd_to_csis_state(sd);
@@ -959,7 +961,8 @@ static int mipi_csis_enum_mbus_code(struct v4l2_subdev *sd,
                if (code->index > 0)
                        return -EINVAL;
 
-               fmt = mipi_csis_get_format(state, cfg, code->which, code->pad);
+               fmt = mipi_csis_get_format(state, sd_state, code->which,
+                                          code->pad);
                code->code = fmt->code;
                return 0;
        }
@@ -976,7 +979,7 @@ static int mipi_csis_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int mipi_csis_set_fmt(struct v4l2_subdev *sd,
-                            struct v4l2_subdev_pad_config *cfg,
+                            struct v4l2_subdev_state *sd_state,
                             struct v4l2_subdev_format *sdformat)
 {
        struct csi_state *state = mipi_sd_to_csis_state(sd);
@@ -989,7 +992,7 @@ static int mipi_csis_set_fmt(struct v4l2_subdev *sd,
         * modified.
         */
        if (sdformat->pad == CSIS_PAD_SOURCE)
-               return mipi_csis_get_fmt(sd, cfg, sdformat);
+               return mipi_csis_get_fmt(sd, sd_state, sdformat);
 
        if (sdformat->pad != CSIS_PAD_SINK)
                return -EINVAL;
@@ -1029,7 +1032,8 @@ static int mipi_csis_set_fmt(struct v4l2_subdev *sd,
                              &sdformat->format.height, 1,
                              CSIS_MAX_PIX_HEIGHT, 0, 0);
 
-       fmt = mipi_csis_get_format(state, cfg, sdformat->which, sdformat->pad);
+       fmt = mipi_csis_get_format(state, sd_state, sdformat->which,
+                                  sdformat->pad);
 
        mutex_lock(&state->lock);
 
@@ -1040,7 +1044,7 @@ static int mipi_csis_set_fmt(struct v4l2_subdev *sd,
        sdformat->format = *fmt;
 
        /* Propagate the format from sink to source. */
-       fmt = mipi_csis_get_format(state, cfg, sdformat->which,
+       fmt = mipi_csis_get_format(state, sd_state, sdformat->which,
                                   CSIS_PAD_SOURCE);
        *fmt = sdformat->format;
 
index 6d9c49b..38a2407 100644 (file)
@@ -36,7 +36,7 @@ static int imgu_subdev_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
        /* Initialize try_fmt */
        for (i = 0; i < IMGU_NODE_NUM; 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);
 
                try_fmt->width = try_crop.width;
                try_fmt->height = try_crop.height;
@@ -44,8 +44,8 @@ static int imgu_subdev_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
                try_fmt->field = V4L2_FIELD_NONE;
        }
 
-       *v4l2_subdev_get_try_crop(sd, fh->pad, IMGU_NODE_IN) = try_crop;
-       *v4l2_subdev_get_try_compose(sd, fh->pad, IMGU_NODE_IN) = try_crop;
+       *v4l2_subdev_get_try_crop(sd, fh->state, IMGU_NODE_IN) = try_crop;
+       *v4l2_subdev_get_try_compose(sd, fh->state, IMGU_NODE_IN) = try_crop;
 
        return 0;
 }
@@ -120,7 +120,7 @@ static int imgu_subdev_s_stream(struct v4l2_subdev *sd, int enable)
 }
 
 static int imgu_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 imgu_device *imgu = v4l2_get_subdevdata(sd);
@@ -136,7 +136,7 @@ static int imgu_subdev_get_fmt(struct v4l2_subdev *sd,
        if (fmt->which == V4L2_SUBDEV_FORMAT_ACTIVE) {
                fmt->format = imgu_pipe->nodes[pad].pad_fmt;
        } else {
-               mf = v4l2_subdev_get_try_format(sd, cfg, pad);
+               mf = v4l2_subdev_get_try_format(sd, sd_state, pad);
                fmt->format = *mf;
        }
 
@@ -144,7 +144,7 @@ static int imgu_subdev_get_fmt(struct v4l2_subdev *sd,
 }
 
 static int imgu_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 imgu_media_pipe *imgu_pipe;
@@ -161,7 +161,7 @@ static int imgu_subdev_set_fmt(struct v4l2_subdev *sd,
 
        imgu_pipe = &imgu->imgu_pipe[pipe];
        if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
-               mf = v4l2_subdev_get_try_format(sd, cfg, pad);
+               mf = v4l2_subdev_get_try_format(sd, sd_state, pad);
        else
                mf = &imgu_pipe->nodes[pad].pad_fmt;
 
@@ -189,7 +189,7 @@ static int imgu_subdev_set_fmt(struct v4l2_subdev *sd,
 }
 
 static int imgu_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 v4l2_rect *try_sel, *r;
@@ -202,11 +202,11 @@ static int imgu_subdev_get_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);
                r = &imgu_sd->rect.eff;
                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);
                r = &imgu_sd->rect.bds;
                break;
        default:
@@ -222,7 +222,7 @@ static int imgu_subdev_get_selection(struct v4l2_subdev *sd,
 }
 
 static int imgu_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 imgu_device *imgu = v4l2_get_subdevdata(sd);
@@ -241,11 +241,11 @@ static int imgu_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);
                rect = &imgu_sd->rect.eff;
                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);
                rect = &imgu_sd->rect.bds;
                break;
        default:
index a6dc2d2..124ab2f 100644 (file)
@@ -825,19 +825,20 @@ static const struct iss_video_operations csi2_issvideo_ops = {
 
 static struct v4l2_mbus_framefmt *
 __csi2_get_format(struct iss_csi2_device *csi2,
-                 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(&csi2->subdev, cfg, pad);
+               return v4l2_subdev_get_try_format(&csi2->subdev, sd_state,
+                                                 pad);
 
        return &csi2->formats[pad];
 }
 
 static void
 csi2_try_format(struct iss_csi2_device *csi2,
-               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)
@@ -868,7 +869,8 @@ csi2_try_format(struct iss_csi2_device *csi2,
                 * 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));
 
                /*
@@ -894,7 +896,7 @@ csi2_try_format(struct iss_csi2_device *csi2,
  * 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 iss_csi2_device *csi2 = v4l2_get_subdevdata(sd);
@@ -907,7 +909,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:
@@ -931,7 +933,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 iss_csi2_device *csi2 = v4l2_get_subdevdata(sd);
@@ -943,7 +945,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;
 
@@ -953,7 +955,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;
 
@@ -968,13 +970,13 @@ static int csi2_enum_frame_size(struct v4l2_subdev *sd,
  * return -EINVAL or zero on success
  */
 static int csi2_get_format(struct v4l2_subdev *sd,
-                          struct v4l2_subdev_pad_config *cfg,
+                          struct v4l2_subdev_state *sd_state,
                           struct v4l2_subdev_format *fmt)
 {
        struct iss_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)
                return -EINVAL;
 
@@ -990,25 +992,26 @@ static int csi2_get_format(struct v4l2_subdev *sd,
  * return -EINVAL or zero on success
  */
 static int csi2_set_format(struct v4l2_subdev *sd,
-                          struct v4l2_subdev_pad_config *cfg,
+                          struct v4l2_subdev_state *sd_state,
                           struct v4l2_subdev_format *fmt)
 {
        struct iss_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)
                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;
@@ -1050,7 +1053,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;
 }
index 26be078..23f707c 100644 (file)
@@ -21,7 +21,7 @@
 
 static struct v4l2_mbus_framefmt *
 __ipipe_get_format(struct iss_ipipe_device *ipipe,
-                  struct v4l2_subdev_pad_config *cfg,
+                  struct v4l2_subdev_state *sd_state,
                   unsigned int pad,
                   enum v4l2_subdev_format_whence which);
 
@@ -175,12 +175,13 @@ static int ipipe_set_stream(struct v4l2_subdev *sd, int enable)
 
 static struct v4l2_mbus_framefmt *
 __ipipe_get_format(struct iss_ipipe_device *ipipe,
-                  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(&ipipe->subdev, cfg, pad);
+               return v4l2_subdev_get_try_format(&ipipe->subdev, sd_state,
+                                                 pad);
 
        return &ipipe->formats[pad];
 }
@@ -194,7 +195,7 @@ __ipipe_get_format(struct iss_ipipe_device *ipipe,
  */
 static void
 ipipe_try_format(struct iss_ipipe_device *ipipe,
-                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)
@@ -222,7 +223,8 @@ ipipe_try_format(struct iss_ipipe_device *ipipe,
                break;
 
        case IPIPE_PAD_SOURCE_VP:
-               format = __ipipe_get_format(ipipe, cfg, IPIPE_PAD_SINK, which);
+               format = __ipipe_get_format(ipipe, sd_state, IPIPE_PAD_SINK,
+                                           which);
                memcpy(fmt, format, sizeof(*fmt));
 
                fmt->code = MEDIA_BUS_FMT_UYVY8_1X16;
@@ -243,7 +245,7 @@ ipipe_try_format(struct iss_ipipe_device *ipipe,
  * return -EINVAL or zero on success
  */
 static int ipipe_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) {
@@ -270,7 +272,7 @@ static int ipipe_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int ipipe_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 iss_ipipe_device *ipipe = v4l2_get_subdevdata(sd);
@@ -282,7 +284,7 @@ static int ipipe_enum_frame_size(struct v4l2_subdev *sd,
        format.code = fse->code;
        format.width = 1;
        format.height = 1;
-       ipipe_try_format(ipipe, cfg, fse->pad, &format, fse->which);
+       ipipe_try_format(ipipe, sd_state, fse->pad, &format, fse->which);
        fse->min_width = format.width;
        fse->min_height = format.height;
 
@@ -292,7 +294,7 @@ static int ipipe_enum_frame_size(struct v4l2_subdev *sd,
        format.code = fse->code;
        format.width = -1;
        format.height = -1;
-       ipipe_try_format(ipipe, cfg, fse->pad, &format, fse->which);
+       ipipe_try_format(ipipe, sd_state, fse->pad, &format, fse->which);
        fse->max_width = format.width;
        fse->max_height = format.height;
 
@@ -309,13 +311,13 @@ static int ipipe_enum_frame_size(struct v4l2_subdev *sd,
  * to the format type.
  */
 static int ipipe_get_format(struct v4l2_subdev *sd,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *fmt)
 {
        struct iss_ipipe_device *ipipe = v4l2_get_subdevdata(sd);
        struct v4l2_mbus_framefmt *format;
 
-       format = __ipipe_get_format(ipipe, cfg, fmt->pad, fmt->which);
+       format = __ipipe_get_format(ipipe, sd_state, fmt->pad, fmt->which);
        if (!format)
                return -EINVAL;
 
@@ -333,25 +335,26 @@ static int ipipe_get_format(struct v4l2_subdev *sd,
  * to the format type.
  */
 static int ipipe_set_format(struct v4l2_subdev *sd,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *sd_state,
                            struct v4l2_subdev_format *fmt)
 {
        struct iss_ipipe_device *ipipe = v4l2_get_subdevdata(sd);
        struct v4l2_mbus_framefmt *format;
 
-       format = __ipipe_get_format(ipipe, cfg, fmt->pad, fmt->which);
+       format = __ipipe_get_format(ipipe, sd_state, fmt->pad, fmt->which);
        if (!format)
                return -EINVAL;
 
-       ipipe_try_format(ipipe, cfg, fmt->pad, &fmt->format, fmt->which);
+       ipipe_try_format(ipipe, sd_state, fmt->pad, &fmt->format, fmt->which);
        *format = fmt->format;
 
        /* Propagate the format from sink to source */
        if (fmt->pad == IPIPE_PAD_SINK) {
-               format = __ipipe_get_format(ipipe, cfg, IPIPE_PAD_SOURCE_VP,
+               format = __ipipe_get_format(ipipe, sd_state,
+                                           IPIPE_PAD_SOURCE_VP,
                                            fmt->which);
                *format = fmt->format;
-               ipipe_try_format(ipipe, cfg, IPIPE_PAD_SOURCE_VP, format,
+               ipipe_try_format(ipipe, sd_state, IPIPE_PAD_SOURCE_VP, format,
                                 fmt->which);
        }
 
@@ -392,7 +395,7 @@ static int ipipe_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;
-       ipipe_set_format(sd, fh ? fh->pad : NULL, &format);
+       ipipe_set_format(sd, fh ? fh->state : NULL, &format);
 
        return 0;
 }
index c2978d0..5e7f25c 100644 (file)
@@ -357,11 +357,12 @@ static int ipipeif_set_stream(struct v4l2_subdev *sd, int enable)
 
 static struct v4l2_mbus_framefmt *
 __ipipeif_get_format(struct iss_ipipeif_device *ipipeif,
-                    struct v4l2_subdev_pad_config *cfg, unsigned int pad,
+                    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(&ipipeif->subdev, cfg, pad);
+               return v4l2_subdev_get_try_format(&ipipeif->subdev, sd_state,
+                                                 pad);
        return &ipipeif->formats[pad];
 }
 
@@ -374,7 +375,7 @@ __ipipeif_get_format(struct iss_ipipeif_device *ipipeif,
  */
 static void
 ipipeif_try_format(struct iss_ipipeif_device *ipipeif,
-                  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)
 {
@@ -403,7 +404,8 @@ ipipeif_try_format(struct iss_ipipeif_device *ipipeif,
                break;
 
        case IPIPEIF_PAD_SOURCE_ISIF_SF:
-               format = __ipipeif_get_format(ipipeif, cfg, IPIPEIF_PAD_SINK,
+               format = __ipipeif_get_format(ipipeif, sd_state,
+                                             IPIPEIF_PAD_SINK,
                                              which);
                memcpy(fmt, format, sizeof(*fmt));
 
@@ -418,7 +420,8 @@ ipipeif_try_format(struct iss_ipipeif_device *ipipeif,
                break;
 
        case IPIPEIF_PAD_SOURCE_VP:
-               format = __ipipeif_get_format(ipipeif, cfg, IPIPEIF_PAD_SINK,
+               format = __ipipeif_get_format(ipipeif, sd_state,
+                                             IPIPEIF_PAD_SINK,
                                              which);
                memcpy(fmt, format, sizeof(*fmt));
 
@@ -442,7 +445,7 @@ ipipeif_try_format(struct iss_ipipeif_device *ipipeif,
  * return -EINVAL or zero on success
  */
 static int ipipeif_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 iss_ipipeif_device *ipipeif = v4l2_get_subdevdata(sd);
@@ -462,7 +465,8 @@ static int ipipeif_enum_mbus_code(struct v4l2_subdev *sd,
                if (code->index != 0)
                        return -EINVAL;
 
-               format = __ipipeif_get_format(ipipeif, cfg, IPIPEIF_PAD_SINK,
+               format = __ipipeif_get_format(ipipeif, sd_state,
+                                             IPIPEIF_PAD_SINK,
                                              code->which);
 
                code->code = format->code;
@@ -476,7 +480,7 @@ static int ipipeif_enum_mbus_code(struct v4l2_subdev *sd,
 }
 
 static int ipipeif_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 iss_ipipeif_device *ipipeif = v4l2_get_subdevdata(sd);
@@ -488,7 +492,7 @@ static int ipipeif_enum_frame_size(struct v4l2_subdev *sd,
        format.code = fse->code;
        format.width = 1;
        format.height = 1;
-       ipipeif_try_format(ipipeif, cfg, fse->pad, &format, fse->which);
+       ipipeif_try_format(ipipeif, sd_state, fse->pad, &format, fse->which);
        fse->min_width = format.width;
        fse->min_height = format.height;
 
@@ -498,7 +502,7 @@ static int ipipeif_enum_frame_size(struct v4l2_subdev *sd,
        format.code = fse->code;
        format.width = -1;
        format.height = -1;
-       ipipeif_try_format(ipipeif, cfg, fse->pad, &format, fse->which);
+       ipipeif_try_format(ipipeif, sd_state, fse->pad, &format, fse->which);
        fse->max_width = format.width;
        fse->max_height = format.height;
 
@@ -515,13 +519,13 @@ static int ipipeif_enum_frame_size(struct v4l2_subdev *sd,
  * to the format type.
  */
 static int ipipeif_get_format(struct v4l2_subdev *sd,
-                             struct v4l2_subdev_pad_config *cfg,
+                             struct v4l2_subdev_state *sd_state,
                              struct v4l2_subdev_format *fmt)
 {
        struct iss_ipipeif_device *ipipeif = v4l2_get_subdevdata(sd);
        struct v4l2_mbus_framefmt *format;
 
-       format = __ipipeif_get_format(ipipeif, cfg, fmt->pad, fmt->which);
+       format = __ipipeif_get_format(ipipeif, sd_state, fmt->pad, fmt->which);
        if (!format)
                return -EINVAL;
 
@@ -539,33 +543,36 @@ static int ipipeif_get_format(struct v4l2_subdev *sd,
  * to the format type.
  */
 static int ipipeif_set_format(struct v4l2_subdev *sd,
-                             struct v4l2_subdev_pad_config *cfg,
+                             struct v4l2_subdev_state *sd_state,
                              struct v4l2_subdev_format *fmt)
 {
        struct iss_ipipeif_device *ipipeif = v4l2_get_subdevdata(sd);
        struct v4l2_mbus_framefmt *format;
 
-       format = __ipipeif_get_format(ipipeif, cfg, fmt->pad, fmt->which);
+       format = __ipipeif_get_format(ipipeif, sd_state, fmt->pad, fmt->which);
        if (!format)
                return -EINVAL;
 
-       ipipeif_try_format(ipipeif, cfg, fmt->pad, &fmt->format, fmt->which);
+       ipipeif_try_format(ipipeif, sd_state, fmt->pad, &fmt->format,
+                          fmt->which);
        *format = fmt->format;
 
        /* Propagate the format from sink to source */
        if (fmt->pad == IPIPEIF_PAD_SINK) {
-               format = __ipipeif_get_format(ipipeif, cfg,
+               format = __ipipeif_get_format(ipipeif, sd_state,
                                              IPIPEIF_PAD_SOURCE_ISIF_SF,
                                              fmt->which);
                *format = fmt->format;
-               ipipeif_try_format(ipipeif, cfg, IPIPEIF_PAD_SOURCE_ISIF_SF,
+               ipipeif_try_format(ipipeif, sd_state,
+                                  IPIPEIF_PAD_SOURCE_ISIF_SF,
                                   format, fmt->which);
 
-               format = __ipipeif_get_format(ipipeif, cfg,
+               format = __ipipeif_get_format(ipipeif, sd_state,
                                              IPIPEIF_PAD_SOURCE_VP,
                                              fmt->which);
                *format = fmt->format;
-               ipipeif_try_format(ipipeif, cfg, IPIPEIF_PAD_SOURCE_VP, format,
+               ipipeif_try_format(ipipeif, sd_state, IPIPEIF_PAD_SOURCE_VP,
+                                  format,
                                   fmt->which);
        }
 
@@ -608,7 +615,7 @@ static int ipipeif_init_formats(struct v4l2_subdev *sd,
        format.format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
        format.format.width = 4096;
        format.format.height = 4096;
-       ipipeif_set_format(sd, fh ? fh->pad : NULL, &format);
+       ipipeif_set_format(sd, fh ? fh->state : NULL, &format);
 
        return 0;
 }
index 3b6875c..a5f8f9f 100644 (file)
@@ -416,11 +416,12 @@ static int resizer_set_stream(struct v4l2_subdev *sd, int enable)
 
 static struct v4l2_mbus_framefmt *
 __resizer_get_format(struct iss_resizer_device *resizer,
-                    struct v4l2_subdev_pad_config *cfg, unsigned int pad,
+                    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(&resizer->subdev, cfg, pad);
+               return v4l2_subdev_get_try_format(&resizer->subdev, sd_state,
+                                                 pad);
        return &resizer->formats[pad];
 }
 
@@ -433,7 +434,7 @@ __resizer_get_format(struct iss_resizer_device *resizer,
  */
 static void
 resizer_try_format(struct iss_resizer_device *resizer,
-                  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)
 {
@@ -461,7 +462,8 @@ resizer_try_format(struct iss_resizer_device *resizer,
 
        case RESIZER_PAD_SOURCE_MEM:
                pixelcode = fmt->code;
-               format = __resizer_get_format(resizer, cfg, RESIZER_PAD_SINK,
+               format = __resizer_get_format(resizer, sd_state,
+                                             RESIZER_PAD_SINK,
                                              which);
                memcpy(fmt, format, sizeof(*fmt));
 
@@ -492,7 +494,7 @@ resizer_try_format(struct iss_resizer_device *resizer,
  * 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 iss_resizer_device *resizer = v4l2_get_subdevdata(sd);
@@ -507,7 +509,8 @@ static int resizer_enum_mbus_code(struct v4l2_subdev *sd,
                break;
 
        case RESIZER_PAD_SOURCE_MEM:
-               format = __resizer_get_format(resizer, cfg, RESIZER_PAD_SINK,
+               format = __resizer_get_format(resizer, sd_state,
+                                             RESIZER_PAD_SINK,
                                              code->which);
 
                if (code->index == 0) {
@@ -537,7 +540,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 iss_resizer_device *resizer = v4l2_get_subdevdata(sd);
@@ -549,7 +552,7 @@ static int resizer_enum_frame_size(struct v4l2_subdev *sd,
        format.code = fse->code;
        format.width = 1;
        format.height = 1;
-       resizer_try_format(resizer, cfg, fse->pad, &format, fse->which);
+       resizer_try_format(resizer, sd_state, fse->pad, &format, fse->which);
        fse->min_width = format.width;
        fse->min_height = format.height;
 
@@ -559,7 +562,7 @@ static int resizer_enum_frame_size(struct v4l2_subdev *sd,
        format.code = fse->code;
        format.width = -1;
        format.height = -1;
-       resizer_try_format(resizer, cfg, fse->pad, &format, fse->which);
+       resizer_try_format(resizer, sd_state, fse->pad, &format, fse->which);
        fse->max_width = format.width;
        fse->max_height = format.height;
 
@@ -576,13 +579,13 @@ static int resizer_enum_frame_size(struct v4l2_subdev *sd,
  * to the format type.
  */
 static int resizer_get_format(struct v4l2_subdev *sd,
-                             struct v4l2_subdev_pad_config *cfg,
+                             struct v4l2_subdev_state *sd_state,
                              struct v4l2_subdev_format *fmt)
 {
        struct iss_resizer_device *resizer = v4l2_get_subdevdata(sd);
        struct v4l2_mbus_framefmt *format;
 
-       format = __resizer_get_format(resizer, cfg, fmt->pad, fmt->which);
+       format = __resizer_get_format(resizer, sd_state, fmt->pad, fmt->which);
        if (!format)
                return -EINVAL;
 
@@ -600,26 +603,28 @@ static int resizer_get_format(struct v4l2_subdev *sd,
  * to the format type.
  */
 static int resizer_set_format(struct v4l2_subdev *sd,
-                             struct v4l2_subdev_pad_config *cfg,
+                             struct v4l2_subdev_state *sd_state,
                              struct v4l2_subdev_format *fmt)
 {
        struct iss_resizer_device *resizer = v4l2_get_subdevdata(sd);
        struct v4l2_mbus_framefmt *format;
 
-       format = __resizer_get_format(resizer, cfg, fmt->pad, fmt->which);
+       format = __resizer_get_format(resizer, sd_state, fmt->pad, fmt->which);
        if (!format)
                return -EINVAL;
 
-       resizer_try_format(resizer, cfg, fmt->pad, &fmt->format, fmt->which);
+       resizer_try_format(resizer, sd_state, fmt->pad, &fmt->format,
+                          fmt->which);
        *format = fmt->format;
 
        /* Propagate the format from sink to source */
        if (fmt->pad == RESIZER_PAD_SINK) {
-               format = __resizer_get_format(resizer, cfg,
+               format = __resizer_get_format(resizer, sd_state,
                                              RESIZER_PAD_SOURCE_MEM,
                                              fmt->which);
                *format = fmt->format;
-               resizer_try_format(resizer, cfg, RESIZER_PAD_SOURCE_MEM, format,
+               resizer_try_format(resizer, sd_state, RESIZER_PAD_SOURCE_MEM,
+                                  format,
                                   fmt->which);
        }
 
@@ -662,7 +667,7 @@ static int resizer_init_formats(struct v4l2_subdev *sd,
        format.format.code = MEDIA_BUS_FMT_UYVY8_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;
 }
index e938bf4..b26e44a 100644 (file)
@@ -64,7 +64,7 @@ static const struct v4l2_frmsize_discrete tegra_csi_tpg_sizes[] = {
  * V4L2 Subdevice Pad Operations
  */
 static int csi_enum_bus_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 (!IS_ENABLED(CONFIG_VIDEO_TEGRA_TPG))
@@ -79,7 +79,7 @@ static int csi_enum_bus_code(struct v4l2_subdev *subdev,
 }
 
 static int csi_get_format(struct v4l2_subdev *subdev,
-                         struct v4l2_subdev_pad_config *cfg,
+                         struct v4l2_subdev_state *sd_state,
                          struct v4l2_subdev_format *fmt)
 {
        struct tegra_csi_channel *csi_chan = to_csi_chan(subdev);
@@ -127,7 +127,7 @@ static void csi_chan_update_blank_intervals(struct tegra_csi_channel *csi_chan,
 }
 
 static int csi_enum_framesizes(struct v4l2_subdev *subdev,
-                              struct v4l2_subdev_pad_config *cfg,
+                              struct v4l2_subdev_state *sd_state,
                               struct v4l2_subdev_frame_size_enum *fse)
 {
        unsigned int i;
@@ -154,7 +154,7 @@ static int csi_enum_framesizes(struct v4l2_subdev *subdev,
 }
 
 static int csi_enum_frameintervals(struct v4l2_subdev *subdev,
-                                  struct v4l2_subdev_pad_config *cfg,
+                                  struct v4l2_subdev_state *sd_state,
                                   struct v4l2_subdev_frame_interval_enum *fie)
 {
        struct tegra_csi_channel *csi_chan = to_csi_chan(subdev);
@@ -181,7 +181,7 @@ static int csi_enum_frameintervals(struct v4l2_subdev *subdev,
 }
 
 static int csi_set_format(struct v4l2_subdev *subdev,
-                         struct v4l2_subdev_pad_config *cfg,
+                         struct v4l2_subdev_state *sd_state,
                          struct v4l2_subdev_format *fmt)
 {
        struct tegra_csi_channel *csi_chan = to_csi_chan(subdev);
index b76e911..89709cd 100644 (file)
@@ -493,7 +493,7 @@ static int __tegra_channel_try_format(struct tegra_vi_channel *chan,
        const struct tegra_video_format *fmtinfo;
        struct v4l2_subdev *subdev;
        struct v4l2_subdev_format fmt;
-       struct v4l2_subdev_pad_config *pad_cfg;
+       struct v4l2_subdev_state *sd_state;
        struct v4l2_subdev_frame_size_enum fse = {
                .which = V4L2_SUBDEV_FORMAT_TRY,
        };
@@ -507,8 +507,8 @@ static int __tegra_channel_try_format(struct tegra_vi_channel *chan,
        if (!subdev)
                return -ENODEV;
 
-       pad_cfg = v4l2_subdev_alloc_pad_config(subdev);
-       if (!pad_cfg)
+       sd_state = v4l2_subdev_alloc_state(subdev);
+       if (!sd_state)
                return -ENOMEM;
        /*
         * Retrieve the format information and if requested format isn't
@@ -532,33 +532,33 @@ static int __tegra_channel_try_format(struct tegra_vi_channel *chan,
         * If not available, try to get crop boundary from subdev.
         */
        fse.code = fmtinfo->code;
-       ret = v4l2_subdev_call(subdev, pad, enum_frame_size, pad_cfg, &fse);
+       ret = v4l2_subdev_call(subdev, pad, enum_frame_size, sd_state, &fse);
        if (ret) {
                if (!v4l2_subdev_has_op(subdev, pad, get_selection)) {
-                       pad_cfg->try_crop.width = 0;
-                       pad_cfg->try_crop.height = 0;
+                       sd_state->pads->try_crop.width = 0;
+                       sd_state->pads->try_crop.height = 0;
                } else {
                        ret = v4l2_subdev_call(subdev, pad, get_selection,
                                               NULL, &sdsel);
                        if (ret)
                                return -EINVAL;
 
-                       pad_cfg->try_crop.width = sdsel.r.width;
-                       pad_cfg->try_crop.height = sdsel.r.height;
+                       sd_state->pads->try_crop.width = sdsel.r.width;
+                       sd_state->pads->try_crop.height = sdsel.r.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;
        }
 
-       ret = v4l2_subdev_call(subdev, pad, set_fmt, pad_cfg, &fmt);
+       ret = v4l2_subdev_call(subdev, pad, set_fmt, sd_state, &fmt);
        if (ret < 0)
                return ret;
 
        v4l2_fill_pix_format(pix, &fmt.format);
        tegra_channel_fmt_align(chan, pix, fmtinfo->bpp);
 
-       v4l2_subdev_free_pad_config(pad_cfg);
+       v4l2_subdev_free_state(sd_state);
 
        return 0;
 }
index d0e9a5b..89115ba 100644 (file)
@@ -624,6 +624,19 @@ struct v4l2_subdev_pad_config {
 };
 
 /**
+ * struct v4l2_subdev_state - Used for storing subdev state information.
+ *
+ * @pads: &struct v4l2_subdev_pad_config array
+ *
+ * This structure only needs to be passed to the pad op if the 'which' field
+ * of the main argument is set to %V4L2_SUBDEV_FORMAT_TRY. For
+ * %V4L2_SUBDEV_FORMAT_ACTIVE it is safe to pass %NULL.
+ */
+struct v4l2_subdev_state {
+       struct v4l2_subdev_pad_config *pads;
+};
+
+/**
  * struct v4l2_subdev_pad_ops - v4l2-subdev pad level operations
  *
  * @init_cfg: initialize the pad config to default values
@@ -687,27 +700,27 @@ struct v4l2_subdev_pad_config {
  */
 struct v4l2_subdev_pad_ops {
        int (*init_cfg)(struct v4l2_subdev *sd,
-                       struct v4l2_subdev_pad_config *cfg);
+                       struct v4l2_subdev_state *state);
        int (*enum_mbus_code)(struct v4l2_subdev *sd,
-                             struct v4l2_subdev_pad_config *cfg,
+                             struct v4l2_subdev_state *state,
                              struct v4l2_subdev_mbus_code_enum *code);
        int (*enum_frame_size)(struct v4l2_subdev *sd,
-                              struct v4l2_subdev_pad_config *cfg,
+                              struct v4l2_subdev_state *state,
                               struct v4l2_subdev_frame_size_enum *fse);
        int (*enum_frame_interval)(struct v4l2_subdev *sd,
-                                  struct v4l2_subdev_pad_config *cfg,
+                                  struct v4l2_subdev_state *state,
                                   struct v4l2_subdev_frame_interval_enum *fie);
        int (*get_fmt)(struct v4l2_subdev *sd,
-                      struct v4l2_subdev_pad_config *cfg,
+                      struct v4l2_subdev_state *state,
                       struct v4l2_subdev_format *format);
        int (*set_fmt)(struct v4l2_subdev *sd,
-                      struct v4l2_subdev_pad_config *cfg,
+                      struct v4l2_subdev_state *state,
                       struct v4l2_subdev_format *format);
        int (*get_selection)(struct v4l2_subdev *sd,
-                            struct v4l2_subdev_pad_config *cfg,
+                            struct v4l2_subdev_state *state,
                             struct v4l2_subdev_selection *sel);
        int (*set_selection)(struct v4l2_subdev *sd,
-                            struct v4l2_subdev_pad_config *cfg,
+                            struct v4l2_subdev_state *state,
                             struct v4l2_subdev_selection *sel);
        int (*get_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid);
        int (*set_edid)(struct v4l2_subdev *sd, struct v4l2_edid *edid);
@@ -918,14 +931,14 @@ struct v4l2_subdev {
  * struct v4l2_subdev_fh - Used for storing subdev information per file handle
  *
  * @vfh: pointer to &struct v4l2_fh
- * @pad: pointer to &struct v4l2_subdev_pad_config
+ * @state: pointer to &struct v4l2_subdev_state
  * @owner: module pointer to the owner of this file handle
  */
 struct v4l2_subdev_fh {
        struct v4l2_fh vfh;
        struct module *owner;
 #if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
-       struct v4l2_subdev_pad_config *pad;
+       struct v4l2_subdev_state *state;
 #endif
 };
 
@@ -945,17 +958,17 @@ struct v4l2_subdev_fh {
  *     &struct v4l2_subdev_pad_config->try_fmt
  *
  * @sd: pointer to &struct v4l2_subdev
- * @cfg: pointer to &struct v4l2_subdev_pad_config array.
- * @pad: index of the pad in the @cfg array.
+ * @state: pointer to &struct v4l2_subdev_state
+ * @pad: index of the pad in the &struct v4l2_subdev_state->pads array
  */
 static inline struct v4l2_mbus_framefmt *
 v4l2_subdev_get_try_format(struct v4l2_subdev *sd,
-                          struct v4l2_subdev_pad_config *cfg,
+                          struct v4l2_subdev_state *state,
                           unsigned int pad)
 {
        if (WARN_ON(pad >= sd->entity.num_pads))
                pad = 0;
-       return &cfg[pad].try_fmt;
+       return &state->pads[pad].try_fmt;
 }
 
 /**
@@ -963,17 +976,17 @@ v4l2_subdev_get_try_format(struct v4l2_subdev *sd,
  *     &struct v4l2_subdev_pad_config->try_crop
  *
  * @sd: pointer to &struct v4l2_subdev
- * @cfg: pointer to &struct v4l2_subdev_pad_config array.
- * @pad: index of the pad in the @cfg array.
+ * @state: pointer to &struct v4l2_subdev_state.
+ * @pad: index of the pad in the &struct v4l2_subdev_state->pads array.
  */
 static inline struct v4l2_rect *
 v4l2_subdev_get_try_crop(struct v4l2_subdev *sd,
-                        struct v4l2_subdev_pad_config *cfg,
+                        struct v4l2_subdev_state *state,
                         unsigned int pad)
 {
        if (WARN_ON(pad >= sd->entity.num_pads))
                pad = 0;
-       return &cfg[pad].try_crop;
+       return &state->pads[pad].try_crop;
 }
 
 /**
@@ -981,17 +994,17 @@ v4l2_subdev_get_try_crop(struct v4l2_subdev *sd,
  *     &struct v4l2_subdev_pad_config->try_compose
  *
  * @sd: pointer to &struct v4l2_subdev
- * @cfg: pointer to &struct v4l2_subdev_pad_config array.
- * @pad: index of the pad in the @cfg array.
+ * @state: pointer to &struct v4l2_subdev_state.
+ * @pad: index of the pad in the &struct v4l2_subdev_state->pads array.
  */
 static inline struct v4l2_rect *
 v4l2_subdev_get_try_compose(struct v4l2_subdev *sd,
-                           struct v4l2_subdev_pad_config *cfg,
+                           struct v4l2_subdev_state *state,
                            unsigned int pad)
 {
        if (WARN_ON(pad >= sd->entity.num_pads))
                pad = 0;
-       return &cfg[pad].try_compose;
+       return &state->pads[pad].try_compose;
 }
 
 #endif
@@ -1093,20 +1106,21 @@ int v4l2_subdev_link_validate_default(struct v4l2_subdev *sd,
 int v4l2_subdev_link_validate(struct media_link *link);
 
 /**
- * v4l2_subdev_alloc_pad_config - Allocates memory for pad config
+ * v4l2_subdev_alloc_state - allocate v4l2_subdev_state
  *
- * @sd: pointer to struct v4l2_subdev
+ * @sd: pointer to &struct v4l2_subdev for which the state is being allocated.
+ *
+ * Must call v4l2_subdev_free_state() when state is no longer needed.
  */
-struct
-v4l2_subdev_pad_config *v4l2_subdev_alloc_pad_config(struct v4l2_subdev *sd);
+struct v4l2_subdev_state *v4l2_subdev_alloc_state(struct v4l2_subdev *sd);
 
 /**
- * v4l2_subdev_free_pad_config - Frees memory allocated by
- *     v4l2_subdev_alloc_pad_config().
+ * v4l2_subdev_free_state - free a v4l2_subdev_state
  *
- * @cfg: pointer to &struct v4l2_subdev_pad_config
+ * @state: v4l2_subdev_state to be freed.
  */
-void v4l2_subdev_free_pad_config(struct v4l2_subdev_pad_config *cfg);
+void v4l2_subdev_free_state(struct v4l2_subdev_state *state);
+
 #endif /* CONFIG_MEDIA_CONTROLLER */
 
 /**