[PATCH v3 20/29] media: raspberrypi: cfe: Use v4l2_subdev_get_frame_desc()
Sakari Ailus <[email protected]>
| Newsgroups | org.kernel.vger.linux-media |
|---|---|
| Organization | Intel Finland Oy - BIC 0357606-4 - c/o Alberga Business Park, 6 krs, Bertel Jungin Aukio 5, 02600 Espoo |
| Message-ID | <[email protected]> |
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]> --- .../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