Linux ARM-MSM sub-architecture
 help / color / mirror / Atom feed
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


  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