Re: [PATCH v3 20/29] media: raspberrypi: cfe: Use v4l2_subdev_get_frame_desc()
Frank Li <[email protected]>
| Newsgroups | org.kernel.vger.linux-media |
|---|---|
| Message-ID | <aoyzlU7d9a-yfbVl@lizhi-Precision-Tower-5810> |
On Mon, Aug 24, 2026 at 03:14:42PM +0300, Sakari Ailus wrote: > Call v4l2_subdev_get_frame_desc() to obtain the frame descriptor. This is > preferred over calling the get_frame_desc() pad operation directly. Also > remove the workaround for drivers not implementing the get_frame_desc() > pad op. > > Signed-off-by: Sakari Ailus <[email protected]> > --- Reviewed-by: Frank Li <[email protected]> > .../media/platform/raspberrypi/rp1-cfe/cfe.c | 51 ++++--------------- > 1 file changed, 11 insertions(+), 40 deletions(-) > > diff --git a/drivers/media/platform/raspberrypi/rp1-cfe/cfe.c b/drivers/media/platform/raspberrypi/rp1-cfe/cfe.c > index 8375ed3e97b9..e99a77e0878e 100644 > --- a/drivers/media/platform/raspberrypi/rp1-cfe/cfe.c > +++ b/drivers/media/platform/raspberrypi/rp1-cfe/cfe.c > @@ -6,6 +6,7 @@ > * Copyright (c) 2023-2024 Ideas on Board Oy > */ > > +#include <linux/cleanup.h> > #include <linux/clk.h> > #include <linux/debugfs.h> > #include <linux/delay.h> > @@ -778,32 +779,9 @@ static irqreturn_t cfe_isr(int irq, void *dev) > * Stream helpers > */ > > -static int cfe_get_vc_dt_fallback(struct cfe_device *cfe, u8 *vc, u8 *dt) > -{ > - struct v4l2_subdev_state *state; > - struct v4l2_mbus_framefmt *fmt; > - const struct cfe_fmt *cfe_fmt; > - > - state = v4l2_subdev_get_locked_active_state(&cfe->csi2.sd); > - > - fmt = v4l2_subdev_state_get_format(state, CSI2_PAD_SINK, 0); > - if (!fmt) > - return -EINVAL; > - > - cfe_fmt = find_format_by_code(fmt->code); > - if (!cfe_fmt) > - return -EINVAL; > - > - *vc = 0; > - *dt = cfe_fmt->csi_dt; > - > - return 0; > -} > - > static int cfe_get_vc_dt(struct cfe_device *cfe, unsigned int channel, u8 *vc, > u8 *dt) > { > - struct v4l2_mbus_frame_desc remote_desc; > struct v4l2_subdev_state *state; > u32 sink_stream; > unsigned int i; > @@ -816,34 +794,27 @@ static int cfe_get_vc_dt(struct cfe_device *cfe, unsigned int channel, u8 *vc, > if (ret) > return ret; > > - ret = v4l2_subdev_call(cfe->source_sd, pad, get_frame_desc, > - cfe->source_pad, &remote_desc); > - if (ret == -ENOIOCTLCMD) { > - cfe_dbg(cfe, "source does not support get_frame_desc, use fallback\n"); > - return cfe_get_vc_dt_fallback(cfe, vc, dt); > - } else if (ret) { > + struct v4l2_mbus_frame_desc *fd __free(v4l2_subdev_free_frame_desc) = > + v4l2_subdev_get_frame_desc(cfe->source_sd, cfe->source_pad, > + V4L2_MBUS_FRAME_DESC_TYPE_CSI2); > + if (IS_ERR(fd)) { > cfe_err(cfe, "Failed to get frame descriptor\n"); > - return ret; > - } > - > - if (remote_desc.type != V4L2_MBUS_FRAME_DESC_TYPE_CSI2) { > - cfe_err(cfe, "Frame descriptor does not describe CSI-2 link"); > - return -EINVAL; > + return PTR_ERR(fd); > } > > - for (i = 0; i < remote_desc.num_entries; i++) { > - if (remote_desc.entry[i].stream == sink_stream) > + for (i = 0; i < fd->num_entries; i++) { > + if (fd->entry[i].stream == sink_stream) > break; > } > > - if (i == remote_desc.num_entries) { > + if (i == fd->num_entries) { > cfe_err(cfe, "Stream %u not found in remote frame desc\n", > sink_stream); > return -EINVAL; > } > > - *vc = remote_desc.entry[i].bus.csi2.vc; > - *dt = remote_desc.entry[i].bus.csi2.dt; > + *vc = fd->entry[i].bus.csi2.vc; > + *dt = fd->entry[i].bus.csi2.dt; > > return 0; > } > -- > 2.47.3 >