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> 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; -- 2.42.0