[PATCH 20/74] media: qcom: camss: vfe: Move video_out from vfe_line to vfe_output
From: Bryan O'Donoghue
Date: Mon Oct 05 2026 - 13:26:36 EST
In preparation for having multiple source/sink pads on VFE PIX nodes, move
the video_out structure to vfe_output.
Signed-off-by: Bryan O'Donoghue <bod@xxxxxxxxxx>
---
drivers/media/platform/qcom/camss/camss-vfe-17x.c | 2 +-
drivers/media/platform/qcom/camss/camss-vfe-340.c | 2 +-
drivers/media/platform/qcom/camss/camss-vfe-4-1.c | 6 +++---
drivers/media/platform/qcom/camss/camss-vfe-4-7.c | 8 ++++----
drivers/media/platform/qcom/camss/camss-vfe-4-8.c | 8 ++++----
drivers/media/platform/qcom/camss/camss-vfe-480.c | 2 +-
drivers/media/platform/qcom/camss/camss-vfe-680.c | 2 +-
drivers/media/platform/qcom/camss/camss-vfe-690.c | 2 +-
drivers/media/platform/qcom/camss/camss-vfe-780.c | 2 +-
drivers/media/platform/qcom/camss/camss-vfe-gen1.c | 10 ++++------
drivers/media/platform/qcom/camss/camss-vfe.c | 22 +++++++++-------------
drivers/media/platform/qcom/camss/camss-vfe.h | 2 +-
12 files changed, 31 insertions(+), 37 deletions(-)
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-17x.c b/drivers/media/platform/qcom/camss/camss-vfe-17x.c
index d2dc2acc9d234..d9e37cf609823 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-17x.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-17x.c
@@ -257,7 +257,7 @@ static void vfe_wm_update(struct vfe_device *vfe, u8 wm, u32 addr,
struct vfe_line *line)
{
struct v4l2_pix_format_mplane *pix =
- &line->video_out.active_fmt.fmt.pix_mp;
+ &line->output[0].video_out.active_fmt.fmt.pix_mp;
u32 stride = pix->plane_fmt[0].bytesperline;
writel_relaxed(addr, vfe->base + VFE_BUS_WM_IMAGE_ADDR(wm));
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-340.c b/drivers/media/platform/qcom/camss/camss-vfe-340.c
index 2526d568686db..6edbfcf766dad 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-340.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-340.c
@@ -282,7 +282,7 @@ static u32 vfe_packer_format(struct vfe_device *vfe, u32 pixelformat)
static void vfe_wm_start(struct vfe_device *vfe, u8 wm, struct vfe_line *line)
{
- struct v4l2_pix_format_mplane *pix = &line->video_out.active_fmt.fmt.pix_mp;
+ struct v4l2_pix_format_mplane *pix = &line->output[0].video_out.active_fmt.fmt.pix_mp;
u32 stride = pix->plane_fmt[0].bytesperline;
u8 client = tfe_wm_client_map[wm];
u32 cfg = TFE_BUS_CLIENT_CFG_EN;
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-4-1.c b/drivers/media/platform/qcom/camss/camss-vfe-4-1.c
index a2a91217a3cf8..ccc065924b6b6 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-4-1.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-4-1.c
@@ -476,7 +476,7 @@ static void vfe_set_xbar_cfg(struct vfe_device *vfe, struct vfe_output *output,
u8 enable)
{
struct vfe_line *line = output->line;
- u32 p = line->video_out.active_fmt.fmt.pix_mp.pixelformat;
+ u32 p = line->output[0].video_out.active_fmt.fmt.pix_mp.pixelformat;
u32 reg;
unsigned int i;
@@ -631,7 +631,7 @@ static void vfe_set_demux_cfg(struct vfe_device *vfe, struct vfe_line *line)
static void vfe_set_scale_cfg(struct vfe_device *vfe, struct vfe_line *line)
{
- u32 p = line->video_out.active_fmt.fmt.pix_mp.pixelformat;
+ u32 p = line->output[0].video_out.active_fmt.fmt.pix_mp.pixelformat;
u32 reg;
u16 input, output;
u8 interp_reso;
@@ -686,7 +686,7 @@ static void vfe_set_scale_cfg(struct vfe_device *vfe, struct vfe_line *line)
static void vfe_set_crop_cfg(struct vfe_device *vfe, struct vfe_line *line)
{
- u32 p = line->video_out.active_fmt.fmt.pix_mp.pixelformat;
+ u32 p = line->output[0].video_out.active_fmt.fmt.pix_mp.pixelformat;
u32 reg;
u16 first, last;
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-4-7.c b/drivers/media/platform/qcom/camss/camss-vfe-4-7.c
index 2eb4c3d505ebf..1f02adb79f921 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-4-7.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-4-7.c
@@ -566,7 +566,7 @@ static void vfe_set_xbar_cfg(struct vfe_device *vfe, struct vfe_output *output,
u8 enable)
{
struct vfe_line *line = output->line;
- u32 p = line->video_out.active_fmt.fmt.pix_mp.pixelformat;
+ u32 p = line->output[0].video_out.active_fmt.fmt.pix_mp.pixelformat;
u32 reg;
switch (p) {
@@ -635,7 +635,7 @@ static void vfe_set_xbar_cfg(struct vfe_device *vfe, struct vfe_output *output,
static void vfe_set_realign_cfg(struct vfe_device *vfe, struct vfe_line *line,
u8 enable)
{
- u32 p = line->video_out.active_fmt.fmt.pix_mp.pixelformat;
+ u32 p = line->output[0].video_out.active_fmt.fmt.pix_mp.pixelformat;
u32 val = VFE_0_MODULE_ZOOM_EN_REALIGN_BUF;
if (p != V4L2_PIX_FMT_YUYV && p != V4L2_PIX_FMT_YVYU &&
@@ -782,7 +782,7 @@ static void vfe_set_demux_cfg(struct vfe_device *vfe, struct vfe_line *line)
static void vfe_set_scale_cfg(struct vfe_device *vfe, struct vfe_line *line)
{
- u32 p = line->video_out.active_fmt.fmt.pix_mp.pixelformat;
+ u32 p = line->output[0].video_out.active_fmt.fmt.pix_mp.pixelformat;
u32 reg;
u16 input, output;
u8 interp_reso;
@@ -837,7 +837,7 @@ static void vfe_set_scale_cfg(struct vfe_device *vfe, struct vfe_line *line)
static void vfe_set_crop_cfg(struct vfe_device *vfe, struct vfe_line *line)
{
- u32 p = line->video_out.active_fmt.fmt.pix_mp.pixelformat;
+ u32 p = line->output[0].video_out.active_fmt.fmt.pix_mp.pixelformat;
u32 reg;
u16 first, last;
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-4-8.c b/drivers/media/platform/qcom/camss/camss-vfe-4-8.c
index 3166660d864ec..577d1ddfe84b4 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-4-8.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-4-8.c
@@ -537,7 +537,7 @@ static void vfe_set_xbar_cfg(struct vfe_device *vfe, struct vfe_output *output,
u8 enable)
{
struct vfe_line *line = output->line;
- u32 p = line->video_out.active_fmt.fmt.pix_mp.pixelformat;
+ u32 p = line->output[0].video_out.active_fmt.fmt.pix_mp.pixelformat;
u32 reg;
switch (p) {
@@ -606,7 +606,7 @@ static void vfe_set_xbar_cfg(struct vfe_device *vfe, struct vfe_output *output,
static void vfe_set_realign_cfg(struct vfe_device *vfe, struct vfe_line *line,
u8 enable)
{
- u32 p = line->video_out.active_fmt.fmt.pix_mp.pixelformat;
+ u32 p = line->output[0].video_out.active_fmt.fmt.pix_mp.pixelformat;
u32 val = VFE_0_MODULE_ZOOM_EN_REALIGN_BUF;
if (p != V4L2_PIX_FMT_YUYV && p != V4L2_PIX_FMT_YVYU &&
@@ -753,7 +753,7 @@ static void vfe_set_demux_cfg(struct vfe_device *vfe, struct vfe_line *line)
static void vfe_set_scale_cfg(struct vfe_device *vfe, struct vfe_line *line)
{
- u32 p = line->video_out.active_fmt.fmt.pix_mp.pixelformat;
+ u32 p = line->output[0].video_out.active_fmt.fmt.pix_mp.pixelformat;
u32 reg;
u16 input, output;
u8 interp_reso;
@@ -808,7 +808,7 @@ static void vfe_set_scale_cfg(struct vfe_device *vfe, struct vfe_line *line)
static void vfe_set_crop_cfg(struct vfe_device *vfe, struct vfe_line *line)
{
- u32 p = line->video_out.active_fmt.fmt.pix_mp.pixelformat;
+ u32 p = line->output[0].video_out.active_fmt.fmt.pix_mp.pixelformat;
u32 reg;
u16 first, last;
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-480.c b/drivers/media/platform/qcom/camss/camss-vfe-480.c
index 616d80ae1da74..73bfb53266c3e 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-480.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-480.c
@@ -99,7 +99,7 @@ static void vfe_global_reset(struct vfe_device *vfe)
static void vfe_wm_start(struct vfe_device *vfe, u8 wm, struct vfe_line *line)
{
struct v4l2_pix_format_mplane *pix =
- &line->video_out.active_fmt.fmt.pix_mp;
+ &line->output[0].video_out.active_fmt.fmt.pix_mp;
wm = RDI_WM(wm); /* map to actual WM used (from wm=RDI index) */
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-680.c b/drivers/media/platform/qcom/camss/camss-vfe-680.c
index 99036e7c1e763..c002ff126135a 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-680.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-680.c
@@ -155,7 +155,7 @@ static void vfe_wm_update(struct vfe_device *vfe, u8 rdi, u32 addr,
static void vfe_wm_start(struct vfe_device *vfe, u8 rdi, struct vfe_line *line)
{
struct v4l2_pix_format_mplane *pix =
- &line->video_out.active_fmt.fmt.pix_mp;
+ &line->output[0].video_out.active_fmt.fmt.pix_mp;
u32 stride = pix->plane_fmt[0].bytesperline;
u32 cfg;
u8 wm;
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-690.c b/drivers/media/platform/qcom/camss/camss-vfe-690.c
index 6f90134d5ed64..88dc902dd30dd 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-690.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-690.c
@@ -56,7 +56,7 @@
static void vfe_wm_start(struct vfe_device *vfe, u8 wm, struct vfe_line *line)
{
struct v4l2_pix_format_mplane *pix =
- &line->video_out.active_fmt.fmt.pix_mp;
+ &line->output[0].video_out.active_fmt.fmt.pix_mp;
wm = RDI_WM(wm);
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-780.c b/drivers/media/platform/qcom/camss/camss-vfe-780.c
index 4adbd0680898f..a4a2beb0c38b7 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-780.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-780.c
@@ -52,7 +52,7 @@
static void vfe_wm_start(struct vfe_device *vfe, u8 wm, struct vfe_line *line)
{
struct v4l2_pix_format_mplane *pix =
- &line->video_out.active_fmt.fmt.pix_mp;
+ &line->output[0].video_out.active_fmt.fmt.pix_mp;
wm = RDI_WM(wm);
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-gen1.c b/drivers/media/platform/qcom/camss/camss-vfe-gen1.c
index 3e3d103e0d09d..ac4c4fd261b33 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-gen1.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-gen1.c
@@ -255,7 +255,7 @@ static int vfe_enable_output(struct vfe_line *line)
vfe->ops_gen1->wm_set_ub_cfg(vfe, output->wm_idx[i],
(ub_size + 1) * output->wm_idx[i], ub_size);
vfe->ops_gen1->wm_line_based(vfe, output->wm_idx[i],
- &line->video_out.active_fmt.fmt.pix_mp, i, 1);
+ &line->output[0].video_out.active_fmt.fmt.pix_mp, i, 1);
vfe->ops_gen1->wm_enable(vfe, output->wm_idx[i], 1);
vfe->ops_gen1->bus_reload_wm(vfe, output->wm_idx[i]);
}
@@ -282,7 +282,7 @@ static int vfe_get_output(struct vfe_line *line)
{
struct vfe_device *vfe = to_vfe(line);
struct vfe_output *output;
- struct v4l2_format *f = &line->video_out.active_fmt;
+ struct v4l2_format *f = &line->output[0].video_out.active_fmt;
unsigned long flags;
int i;
int wm_idx;
@@ -688,13 +688,11 @@ static void vfe_isr_wm_done(struct vfe_device *vfe, u8 wm)
*/
static int vfe_queue_buffer(struct camss_video *vid, struct camss_buffer *buf)
{
- struct vfe_line *line = container_of(vid, struct vfe_line, video_out);
+ struct vfe_output *output = container_of(vid, struct vfe_output, video_out);
+ struct vfe_line *line = output->line;
struct vfe_device *vfe = to_vfe(line);
- struct vfe_output *output;
unsigned long flags;
- output = &line->output[0];
-
spin_lock_irqsave(&vfe->output_lock, flags);
vfe_buf_update_wm_on_new(vfe, output, buf, line);
diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/platform/qcom/camss/camss-vfe.c
index 54ab906b01a82..18f66bea5e3b1 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe.c
@@ -713,14 +713,12 @@ int vfe_enable_output_v2(struct vfe_line *line)
int vfe_queue_buffer_v2(struct camss_video *vid,
struct camss_buffer *buf)
{
- struct vfe_line *line = container_of(vid, struct vfe_line, video_out);
+ struct vfe_output *output = container_of(vid, struct vfe_output, video_out);
+ struct vfe_line *line = output->line;
struct vfe_device *vfe = to_vfe(line);
const struct vfe_hw_ops *ops = vfe->res->hw_ops;
- struct vfe_output *output;
unsigned long flags;
- output = &line->output[0];
-
spin_lock_irqsave(&vfe->output_lock, flags);
if (output->state == VFE_OUTPUT_ON &&
@@ -1320,13 +1318,11 @@ void vfe_put(struct vfe_device *vfe)
int vfe_flush_buffers(struct camss_video *vid,
enum vb2_buffer_state state)
{
- struct vfe_line *line = container_of(vid, struct vfe_line, video_out);
+ struct vfe_output *output = container_of(vid, struct vfe_output, video_out);
+ struct vfe_line *line = output->line;
struct vfe_device *vfe = to_vfe(line);
- struct vfe_output *output;
unsigned long flags;
- output = &line->output[0];
-
spin_lock_irqsave(&vfe->output_lock, flags);
vfe_buf_flush_pending(output, state);
@@ -2052,8 +2048,8 @@ int msm_vfe_subdev_init(struct camss *camss, struct vfe_device *vfe,
for (i = VFE_LINE_RDI0; i < vfe->res->line_num; i++) {
struct vfe_line *l = &vfe->line[i];
- l->video_out.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
- l->video_out.camss = camss;
+ l->output[0].video_out.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
+ l->output[0].video_out.camss = camss;
l->id = i;
l->num_outputs = 1;
@@ -2212,7 +2208,7 @@ int msm_vfe_register_entities(struct vfe_device *vfe,
sd = &vfe->line[i].subdev;
pads = vfe->line[i].pads;
- video_out = &vfe->line[i].video_out;
+ video_out = &vfe->line[i].output[0].video_out;
v4l2_subdev_init(sd, &vfe_v4l2_ops);
sd->internal_ops = &vfe_v4l2_internal_ops;
@@ -2297,7 +2293,7 @@ int msm_vfe_register_entities(struct vfe_device *vfe,
error_init:
for (i--; i >= 0; i--) {
sd = &vfe->line[i].subdev;
- video_out = &vfe->line[i].video_out;
+ video_out = &vfe->line[i].output[0].video_out;
msm_video_unregister(video_out);
v4l2_device_unregister_subdev(sd);
@@ -2320,7 +2316,7 @@ void msm_vfe_unregister_entities(struct vfe_device *vfe)
for (i = 0; i < vfe->res->line_num; i++) {
struct v4l2_subdev *sd = &vfe->line[i].subdev;
- struct camss_video *video_out = &vfe->line[i].video_out;
+ struct camss_video *video_out = &vfe->line[i].output[0].video_out;
msm_video_unregister(video_out);
v4l2_device_unregister_subdev(sd);
diff --git a/drivers/media/platform/qcom/camss/camss-vfe.h b/drivers/media/platform/qcom/camss/camss-vfe.h
index e043ef4468626..42ac030d339b0 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe.h
+++ b/drivers/media/platform/qcom/camss/camss-vfe.h
@@ -105,6 +105,7 @@ struct vfe_output {
struct completion reg_update;
struct vfe_line *line;
+ struct camss_video video_out;
};
struct vfe_line {
@@ -114,7 +115,6 @@ struct vfe_line {
struct v4l2_mbus_framefmt fmt[MSM_VFE_PADS_NUM];
struct v4l2_rect compose;
struct v4l2_rect crop;
- struct camss_video video_out;
struct vfe_output output[MSM_VFE_NUM_OUTPUTS];
u32 num_outputs;
const struct camss_format_info *formats;
--
2.55.0