From: bryan.odonoghue@linaro.org
To: Bryan O'Donoghue <bryan.odonoghue@linaro.org>,
Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>,
Loic Poulain <loic.poulain@oss.qualcomm.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org,
linux-kernel@vger.kernel.org, Bryan O'Donoghue <bod@kernel.org>
Subject: [PATCH v3 07/11] media: qcom: camss: csid-340: Enable RDI SOF tracking
Date: Sat, 07 Nov 2026 01:01:50 +0000 [thread overview]
Message-ID: <20261107-v4l2-frame-sync-v3-7-e5bf7073a35d@kernel.org> (raw)
In-Reply-To: <20261107-v4l2-frame-sync-v3-0-e5bf7073a35d@kernel.org>
From: Loic Poulain <loic.poulain@oss.qualcomm.com>
Add silicon specific changes to get SOF triggering V4L2_EVENT_FRAME_SYNC on
the '340' CSID. Covers QCM2290.
Unlike gen2 the 340 CSID has a per-interface IRQ block at
0x030 + 0x10 * iface, so the SOF mask and status have to be handled per
interface rather than globally. Run the existing csid_port_iface_map[]
through it so that PIX and RDI0-2 are all covered.
The spurious interrupt warning needs to account for the new per-interface
status too, otherwise every SOF would be reported as spurious.
Signed-off-by: Loic Poulain <loic.poulain@oss.qualcomm.com>
Signed-off-by: Bryan O'Donoghue <bod@kernel.org>
---
drivers/media/platform/qcom/camss/camss-csid-340.c | 39 +++++++++++++++++++++-
1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/drivers/media/platform/qcom/camss/camss-csid-340.c b/drivers/media/platform/qcom/camss/camss-csid-340.c
index eca3f07b8a8a2..42ff629ce410d 100644
--- a/drivers/media/platform/qcom/camss/camss-csid-340.c
+++ b/drivers/media/platform/qcom/camss/camss-csid-340.c
@@ -22,6 +22,12 @@
#define CSID_RST_PHY_CLK BIT(3)
#define CSID_RST_CSID_CLK BIT(4)
+/* Per-interface IRQ block, indexed by enum csid_iface */
+#define CSID_IFACE_IRQ_STATUS(iface) (0x030 + 0x10 * (iface))
+#define CSID_IFACE_IRQ_MASK(iface) (0x034 + 0x10 * (iface))
+#define CSID_IFACE_IRQ_INFO_INPUT_SOF BIT(12)
+#define CSID_IFACE_IRQ_CLEAR(iface) (0x038 + 0x10 * (iface))
+
#define CSID_IRQ_STATUS (0x070)
#define CSID_IRQ_MASK (0x074)
#define CSID_IRQ_MASK_RST_DONE BIT(0)
@@ -83,6 +89,17 @@ static void __csid_configure_rx(struct csid_device *csid, struct csid_phy_config
writel_relaxed(val, csid->base + CSID_CSI2_RX_CFG1);
}
+static void __csid_configure_iface_irq(struct csid_device *csid, u8 enable,
+ enum csid_iface iface)
+{
+ u32 val = 0;
+
+ if (enable)
+ val = CSID_IFACE_IRQ_INFO_INPUT_SOF;
+
+ writel_relaxed(val, csid->base + CSID_IFACE_IRQ_MASK(iface));
+}
+
static void __csid_configure_stream(struct csid_device *csid, u8 enable, u8 port, u8 vc)
{
struct v4l2_mbus_framefmt *input_format = &csid->fmt[MSM_CSID_PAD_FIRST_SRC + port];
@@ -125,6 +142,7 @@ static void __csid_configure_stream(struct csid_device *csid, u8 enable, u8 port
format->decode_format, port, vc);
writel_relaxed(val, csid->base + CSID_CFG0(iface));
+ __csid_configure_iface_irq(csid, enable, iface);
writel_relaxed(enable, csid->base + CSID_CTRL(iface));
}
@@ -169,15 +187,34 @@ static int csid_reset(struct csid_device *csid)
static irqreturn_t csid_isr(int irq, void *dev)
{
struct csid_device *csid = dev;
+ u32 iface_val = 0;
u32 val;
+ int i;
val = readl_relaxed(csid->base + CSID_IRQ_STATUS);
writel_relaxed(val, csid->base + CSID_IRQ_CLEAR);
+
+ /* Read and clear the IRQ status of each enabled interface */
+ for (i = 0; i < MSM_CSID_MAX_SRC_STREAMS; i++) {
+ enum csid_iface iface = csid_port_iface_map[i];
+ u32 status;
+
+ if (!(csid->phy.en_vc & BIT(i)))
+ continue;
+
+ status = readl_relaxed(csid->base + CSID_IFACE_IRQ_STATUS(iface));
+ writel_relaxed(status, csid->base + CSID_IFACE_IRQ_CLEAR(iface));
+ iface_val |= status;
+
+ if (status & CSID_IFACE_IRQ_INFO_INPUT_SOF)
+ csid_sof_event(csid, i);
+ }
+
writel_relaxed(CSID_IRQ_CMD_CLEAR, csid->base + CSID_IRQ_CMD);
if (val & CSID_IRQ_MASK_RST_DONE)
complete(&csid->reset_complete);
- else
+ else if (!iface_val)
dev_warn_ratelimited(csid->camss->dev, "Spurious CSID interrupt\n");
return IRQ_HANDLED;
--
2.56.0
next prev parent reply other threads:[~2026-11-07 1:02 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-07 1:01 [PATCH v3 00/11] Add SOF sequence logic bryan.odonoghue
2026-11-07 1:01 ` [PATCH v3 01/11] media: qcom: camss: Introduce CPU latency QoS during streaming bryan.odonoghue
2026-11-07 1:01 ` [PATCH v3 02/11] media: qcom: camss: Introduce SOF sequence tracking bryan.odonoghue
2026-11-07 1:01 ` [PATCH v3 03/11] media: qcom: camss: Use SOF sequence tracking for vb.sequence bryan.odonoghue
2026-11-07 1:01 ` [PATCH v3 04/11] media: qcom: camss: csid-gen3: Enable RDI SOF driving bryan.odonoghue
2026-11-07 1:01 ` [PATCH v3 05/11] media: qcom: camss: csid-680: Enable RDI SOF tracking bryan.odonoghue
2026-11-07 1:01 ` [PATCH v3 06/11] media: qcom: camss: csid-gen2: " bryan.odonoghue
2026-11-07 1:01 ` bryan.odonoghue [this message]
2026-11-07 1:01 ` [PATCH v3 08/11] media: qcom: camss: Switch on frame_sync_en logic for csid-gen3 bryan.odonoghue
2026-11-07 1:01 ` [PATCH v3 09/11] media: qcom: camss: Switch on frame_sync_en for x1e/x2e bryan.odonoghue
2026-11-07 1:01 ` [PATCH v3 10/11] media: qcom: camss: Switch on frame_sync_en for csid-gen2 bryan.odonoghue
2026-11-07 1:01 ` [PATCH v3 11/11] media: qcom: camss: Switch on frame_sync_en for csid-340 bryan.odonoghue
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=20261107-v4l2-frame-sync-v3-7-e5bf7073a35d@kernel.org \
--to=bryan.odonoghue@linaro.org \
--cc=bod@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=loic.poulain@oss.qualcomm.com \
--cc=mchehab@kernel.org \
--cc=vladimir.zapolskiy@linaro.org \
/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
all inboxes | Powered by JetHome®