From: <quic_mmitkov@quicinc.com>
To: <linux-media@vger.kernel.org>, <linux-arm-msm@vger.kernel.org>,
<robert.foss@linaro.org>, <akapatra@quicinc.com>,
<jzala@quicinc.com>, <todor.too@gmail.com>
Cc: <agross@kernel.org>, <konrad.dybcio@somainline.org>,
<mchehab@kernel.org>, <bryan.odonoghue@linaro.org>,
<cgera@qti.qualcomm.com>, <gchinnab@quicinc.com>,
<ayasan@qti.qualcomm.com>, <laurent.pinchart@ideasonboard.com>,
Milen Mitkov <quic_mmitkov@quicinc.com>
Subject: [PATCH v7 2/4] media: camss: vfe: Reserve VFE lines on stream start and link to CSID
Date: Fri, 9 Dec 2022 11:40:35 +0200 [thread overview]
Message-ID: <20221209094037.1148-3-quic_mmitkov@quicinc.com> (raw)
In-Reply-To: <20221209094037.1148-1-quic_mmitkov@quicinc.com>
From: Milen Mitkov <quic_mmitkov@quicinc.com>
For multiple virtual channels support, each VFE line can be in either
ON, RESERVED or OFF states. This allows the starting and stopping
of a VFE line independently of other active VFE lines (e.g. already-
running lines stay in ON state, and newly-added lines are RESERVED)
Also, link the CSID entity's source ports to corresponding VFE lines.
Signed-off-by: Milen Mitkov <quic_mmitkov@quicinc.com>
Reviewed-by: Robert Foss <robert.foss@linaro.org>
Tested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Acked-by: Robert Foss <robert.foss@linaro.org>
---
drivers/media/platform/qcom/camss/camss-vfe-170.c | 4 ++--
drivers/media/platform/qcom/camss/camss-vfe-480.c | 4 ++--
drivers/media/platform/qcom/camss/camss-vfe-gen1.c | 4 ++--
drivers/media/platform/qcom/camss/camss-vfe.c | 1 +
drivers/media/platform/qcom/camss/camss.c | 2 +-
5 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-170.c b/drivers/media/platform/qcom/camss/camss-vfe-170.c
index 8e506a805d11..02494c89da91 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-170.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-170.c
@@ -409,7 +409,7 @@ static int vfe_get_output(struct vfe_line *line)
spin_lock_irqsave(&vfe->output_lock, flags);
output = &line->output;
- if (output->state != VFE_OUTPUT_OFF) {
+ if (output->state > VFE_OUTPUT_RESERVED) {
dev_err(vfe->camss->dev, "Output is running\n");
goto error;
}
@@ -462,7 +462,7 @@ static int vfe_enable_output(struct vfe_line *line)
ops->reg_update_clear(vfe, line->id);
- if (output->state != VFE_OUTPUT_OFF) {
+ if (output->state > VFE_OUTPUT_RESERVED) {
dev_err(vfe->camss->dev, "Output is not in reserved state %d\n",
output->state);
spin_unlock_irqrestore(&vfe->output_lock, flags);
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-480.c b/drivers/media/platform/qcom/camss/camss-vfe-480.c
index 3aa962b5663b..f03a84daafbe 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-480.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-480.c
@@ -239,7 +239,7 @@ static int vfe_get_output(struct vfe_line *line)
spin_lock_irqsave(&vfe->output_lock, flags);
output = &line->output;
- if (output->state != VFE_OUTPUT_OFF) {
+ if (output->state > VFE_OUTPUT_RESERVED) {
dev_err(vfe->camss->dev, "Output is running\n");
goto error;
}
@@ -279,7 +279,7 @@ static int vfe_enable_output(struct vfe_line *line)
vfe_reg_update_clear(vfe, line->id);
- if (output->state != VFE_OUTPUT_OFF) {
+ if (output->state > VFE_OUTPUT_RESERVED) {
dev_err(vfe->camss->dev, "Output is not in reserved state %d\n",
output->state);
spin_unlock_irqrestore(&vfe->output_lock, flags);
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-gen1.c b/drivers/media/platform/qcom/camss/camss-vfe-gen1.c
index 4fd265d01883..239d3d4ac666 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-gen1.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-gen1.c
@@ -194,7 +194,7 @@ static int vfe_enable_output(struct vfe_line *line)
ops->reg_update_clear(vfe, line->id);
- if (output->state != VFE_OUTPUT_RESERVED) {
+ if (output->state > VFE_OUTPUT_RESERVED) {
dev_err(vfe->camss->dev, "Output is not in reserved state %d\n", output->state);
spin_unlock_irqrestore(&vfe->output_lock, flags);
return -EINVAL;
@@ -289,7 +289,7 @@ static int vfe_get_output(struct vfe_line *line)
spin_lock_irqsave(&vfe->output_lock, flags);
output = &line->output;
- if (output->state != VFE_OUTPUT_OFF) {
+ if (output->state > VFE_OUTPUT_RESERVED) {
dev_err(vfe->camss->dev, "Output is running\n");
goto error;
}
diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/platform/qcom/camss/camss-vfe.c
index a26e4a5d87b6..e0832f3f4f25 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe.c
@@ -740,6 +740,7 @@ static int vfe_set_stream(struct v4l2_subdev *sd, int enable)
int ret;
if (enable) {
+ line->output.state = VFE_OUTPUT_RESERVED;
ret = vfe->ops->vfe_enable(line);
if (ret < 0)
dev_err(vfe->camss->dev,
diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
index 9cda284f1e71..547099f8ed14 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -1320,7 +1320,7 @@ static int camss_register_entities(struct camss *camss)
struct v4l2_subdev *vfe = &camss->vfe[k].line[j].subdev;
ret = media_create_pad_link(&csid->entity,
- MSM_CSID_PAD_SRC,
+ MSM_CSID_PAD_FIRST_SRC + j,
&vfe->entity,
MSM_VFE_PAD_SINK,
0);
--
2.37.3
next prev parent reply other threads:[~2022-12-09 9:41 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-09 9:40 [PATCH v7 0/4] media: camss: sm8250: Virtual channels support for SM8250 quic_mmitkov
2022-12-09 9:40 ` [PATCH v7 1/4] media: camss: sm8250: Virtual channels for CSID quic_mmitkov
2022-12-09 9:40 ` quic_mmitkov [this message]
2022-12-09 9:40 ` [PATCH v7 3/4] media: camss: vfe-480: Multiple outputs support for SM8250 quic_mmitkov
2022-12-09 9:40 ` [PATCH v7 4/4] media: camss: sm8250: Pipeline starting and stopping for multiple virtual channels quic_mmitkov
2022-12-09 16:17 ` [PATCH v7 0/4] media: camss: sm8250: Virtual channels support for SM8250 Bryan O'Donoghue
2023-01-05 8:37 ` Milen Mitkov (Consultant)
2023-01-05 18:43 ` Bryan O'Donoghue
2023-01-06 9:49 ` Milen Mitkov (Consultant)
2023-01-08 2:53 ` Laurent Pinchart
2023-01-08 2:51 ` Laurent Pinchart
2023-01-08 2:54 ` Laurent Pinchart
2023-01-10 10:25 ` Milen Mitkov (Consultant)
2023-01-31 9:00 ` Milen Mitkov (Consultant)
2023-02-20 12:18 ` Milen Mitkov (Consultant)
2023-02-20 12:26 ` Bryan O'Donoghue
2023-02-21 8:44 ` Milen Mitkov (Consultant)
2023-03-31 6:20 ` Azam Sadiq Pasha Kapatrala Syed
2023-03-31 8:07 ` Bryan O'Donoghue
[not found] ` <7b3cb8a6-8306-f001-5701-af3b482421e9@quicinc.com>
2023-04-03 9:16 ` Bryan O'Donoghue
2023-04-03 9:20 ` Milen Mitkov (Consultant)
2023-04-03 9:36 ` Bryan O'Donoghue
2023-04-03 11:01 ` Milen Mitkov (Consultant)
2023-04-03 12:10 ` Bryan O'Donoghue
2023-04-03 12:16 ` Milen Mitkov (Consultant)
2023-04-04 0:06 ` Bryan O'Donoghue
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221209094037.1148-3-quic_mmitkov@quicinc.com \
--to=quic_mmitkov@quicinc.com \
--cc=agross@kernel.org \
--cc=akapatra@quicinc.com \
--cc=ayasan@qti.qualcomm.com \
--cc=bryan.odonoghue@linaro.org \
--cc=cgera@qti.qualcomm.com \
--cc=gchinnab@quicinc.com \
--cc=jzala@quicinc.com \
--cc=konrad.dybcio@somainline.org \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=robert.foss@linaro.org \
--cc=todor.too@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox