Hi Bingbu, On Thu, Jan 11, 2024 at 02:55:31PM +0800, bingbu.cao@xxxxxxxxx wrote: > From: Bingbu Cao <bingbu.cao@xxxxxxxxx> > > Add support for the upcoming v4l2-subdev API changes in kernel 6.8. > This patch is based on Sakari's branch: > <URL:https://git.linuxtv.org/sailus/media_tree.git/log/?h=metadata> These changes should be squashed to the preceding patches, the driver currently won't compile without this patch. > > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> > Signed-off-by: Bingbu Cao <bingbu.cao@xxxxxxxxx> > --- > drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c | 8 +++----- > .../media/pci/intel/ipu6/ipu6-isys-subdev.c | 19 +++++++++++-------- > .../media/pci/intel/ipu6/ipu6-isys-subdev.h | 2 -- > .../media/pci/intel/ipu6/ipu6-isys-video.c | 3 +-- > 4 files changed, 15 insertions(+), 17 deletions(-) > > diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c > index a6430d531129..6f258cf92fc1 100644 > --- a/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c > +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c > @@ -403,12 +403,11 @@ static int ipu6_isys_csi2_set_sel(struct v4l2_subdev *sd, > if (!sink_ffmt) > return -EINVAL; > > - src_ffmt = v4l2_subdev_state_get_stream_format(state, sel->pad, > - sel->stream); > + src_ffmt = v4l2_subdev_state_get_format(state, sel->pad, sel->stream); > if (!src_ffmt) > return -EINVAL; > > - crop = v4l2_subdev_state_get_stream_crop(state, sel->pad, sel->stream); > + crop = v4l2_subdev_state_get_crop(state, sel->pad, sel->stream); > if (!crop) > return -EINVAL; > > @@ -453,7 +452,7 @@ static int ipu6_isys_csi2_get_sel(struct v4l2_subdev *sd, > if (!sink_ffmt) > return -EINVAL; > > - crop = v4l2_subdev_state_get_stream_crop(state, sel->pad, sel->stream); > + crop = v4l2_subdev_state_get_crop(state, sel->pad, sel->stream); > if (!crop) > return -EINVAL; > > @@ -480,7 +479,6 @@ static const struct v4l2_subdev_video_ops csi2_sd_video_ops = { > }; > > static const struct v4l2_subdev_pad_ops csi2_sd_pad_ops = { > - .init_cfg = ipu6_isys_subdev_init_cfg, > .get_fmt = v4l2_subdev_get_fmt, > .set_fmt = ipu6_isys_subdev_set_fmt, > .get_selection = ipu6_isys_csi2_get_sel, > diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-subdev.c b/drivers/media/pci/intel/ipu6/ipu6-isys-subdev.c > index 3c9263ac02a3..aeccd6f93986 100644 > --- a/drivers/media/pci/intel/ipu6/ipu6-isys-subdev.c > +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-subdev.c > @@ -156,8 +156,7 @@ int ipu6_isys_subdev_set_fmt(struct v4l2_subdev *sd, > format->format.field = V4L2_FIELD_NONE; > > /* Store the format and propagate it to the source pad. */ > - fmt = v4l2_subdev_state_get_stream_format(state, format->pad, > - format->stream); > + fmt = v4l2_subdev_state_get_format(state, format->pad, format->stream); > if (!fmt) > return -EINVAL; > > @@ -182,8 +181,7 @@ int ipu6_isys_subdev_set_fmt(struct v4l2_subdev *sd, > if (ret) > return -EINVAL; > > - crop = v4l2_subdev_state_get_stream_crop(state, other_pad, > - other_stream); > + crop = v4l2_subdev_state_get_crop(state, other_pad, other_stream); > /* reset crop */ > crop->left = 0; > crop->top = 0; > @@ -241,7 +239,7 @@ int ipu6_isys_get_stream_pad_fmt(struct v4l2_subdev *sd, u32 pad, u32 stream, > return -EINVAL; > > state = v4l2_subdev_lock_and_get_active_state(sd); > - fmt = v4l2_subdev_state_get_stream_format(state, pad, stream); > + fmt = v4l2_subdev_state_get_format(state, pad, stream); > if (fmt) > *format = *fmt; > v4l2_subdev_unlock_state(state); > @@ -259,7 +257,7 @@ int ipu6_isys_get_stream_pad_crop(struct v4l2_subdev *sd, u32 pad, u32 stream, > return -EINVAL; > > state = v4l2_subdev_lock_and_get_active_state(sd); > - rect = v4l2_subdev_state_get_stream_crop(state, pad, stream); > + rect = v4l2_subdev_state_get_crop(state, pad, stream); > if (rect) > *crop = *rect; > v4l2_subdev_unlock_state(state); > @@ -291,8 +289,8 @@ u32 ipu6_isys_get_src_stream_by_src_pad(struct v4l2_subdev *sd, u32 pad) > return source_stream; > } > > -int ipu6_isys_subdev_init_cfg(struct v4l2_subdev *sd, > - struct v4l2_subdev_state *state) > +static int ipu6_isys_subdev_init_state(struct v4l2_subdev *sd, > + struct v4l2_subdev_state *state) > { > struct v4l2_subdev_route route = { > .sink_pad = 0, > @@ -317,6 +315,10 @@ int ipu6_isys_subdev_set_routing(struct v4l2_subdev *sd, > return subdev_set_routing(sd, state, routing); > } > > +static const struct v4l2_subdev_internal_ops ipu6_isys_subdev_internal_ops = { > + .init_state = ipu6_isys_subdev_init_state, > +}; > + > int ipu6_isys_subdev_init(struct ipu6_isys_subdev *asd, > const struct v4l2_subdev_ops *ops, > unsigned int nr_ctrls, > @@ -334,6 +336,7 @@ int ipu6_isys_subdev_init(struct ipu6_isys_subdev *asd, > V4L2_SUBDEV_FL_STREAMS; > asd->sd.owner = THIS_MODULE; > asd->sd.entity.function = MEDIA_ENT_F_VID_IF_BRIDGE; > + asd->sd.internal_ops = &ipu6_isys_subdev_internal_ops; > > asd->pad = devm_kcalloc(&asd->isys->adev->auxdev.dev, num_pads, > sizeof(*asd->pad), GFP_KERNEL); > diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-subdev.h b/drivers/media/pci/intel/ipu6/ipu6-isys-subdev.h > index adea2a55761d..f4e32b094b5b 100644 > --- a/drivers/media/pci/intel/ipu6/ipu6-isys-subdev.h > +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-subdev.h > @@ -46,8 +46,6 @@ int ipu6_isys_get_stream_pad_fmt(struct v4l2_subdev *sd, u32 pad, u32 stream, > struct v4l2_mbus_framefmt *format); > int ipu6_isys_get_stream_pad_crop(struct v4l2_subdev *sd, u32 pad, u32 stream, > struct v4l2_rect *crop); > -int ipu6_isys_subdev_init_cfg(struct v4l2_subdev *sd, > - struct v4l2_subdev_state *state); > int ipu6_isys_subdev_set_routing(struct v4l2_subdev *sd, > struct v4l2_subdev_state *state, > enum v4l2_subdev_format_whence which, > diff --git a/drivers/media/pci/intel/ipu6/ipu6-isys-video.c b/drivers/media/pci/intel/ipu6/ipu6-isys-video.c > index 1a023bf1e1a6..62d4043fc2a1 100644 > --- a/drivers/media/pci/intel/ipu6/ipu6-isys-video.c > +++ b/drivers/media/pci/intel/ipu6/ipu6-isys-video.c > @@ -389,8 +389,7 @@ static int link_validate(struct media_link *link) > > v4l2_subdev_lock_state(s_state); > > - s_fmt = v4l2_subdev_state_get_stream_format(s_state, s_pad->index, > - s_stream); > + s_fmt = v4l2_subdev_state_get_format(s_state, s_pad->index, s_stream); > if (!s_fmt) { > dev_err(dev, "failed to get source pad format\n"); > goto unlock; -- Regards, Sakari Ailus