[PATCH v2 2/2] media: qcom: camss: Enable the streams API on SC7280

From: Hitesh Patel

Date: Wed Sep 16 2026 - 01:55:11 EST


Set streams_enable on every CSIPHY, CSID and VFE line of SC7280, as
done for SM8250.

Tested on RB3 Gen2 (QCS6490) with two GMSL cameras behind a MAX9296A
deserializer, one camera per CSI-2 port, so two independent pipelines
share the deserializer subdev: both cameras stream concurrently, and
each can be started and stopped repeatedly while the other keeps
streaming, without the WARN in call_s_stream() and without the second
pipeline tearing the first one down that the legacy s_stream path
produces. The CSID test pattern generator keeps working.

This patch applies on top of Gjorgji Rosikopulos' series "media: qcom:
camss: add V4L2 subdev streams API support" [1]; it does not build
without it.

[1] https://lore.kernel.org/linux-media/20260911062213.195007-1-gjorgji.rosikopulos@xxxxxxxxxxxxxxxx/

Signed-off-by: Hitesh Patel <hitesh@xxxxxxxxxxxxxx>
---
v2: no code change. Add the dependency on [1] to the commit message
and as base-commit/prerequisite-patch-id trailers, so patchwork and
the Media CI do not try to build the patches standalone.

drivers/media/platform/qcom/camss/camss.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)

diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
index 0201debd4..2023c0df2 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -2280,6 +2280,7 @@ static const struct camss_subdev_resources csiphy_res_7280[] = {
.reg = { "csiphy0" },
.interrupt = { "csiphy0" },
.csiphy = {
+ .streams_enable = true,
.id = 0,
.hw_ops = &csiphy_ops_3ph_1_0,
.formats = &csiphy_formats_sdm845,
@@ -2298,6 +2299,7 @@ static const struct camss_subdev_resources csiphy_res_7280[] = {
.reg = { "csiphy1" },
.interrupt = { "csiphy1" },
.csiphy = {
+ .streams_enable = true,
.id = 1,
.hw_ops = &csiphy_ops_3ph_1_0,
.formats = &csiphy_formats_sdm845,
@@ -2316,6 +2318,7 @@ static const struct camss_subdev_resources csiphy_res_7280[] = {
.reg = { "csiphy2" },
.interrupt = { "csiphy2" },
.csiphy = {
+ .streams_enable = true,
.id = 2,
.hw_ops = &csiphy_ops_3ph_1_0,
.formats = &csiphy_formats_sdm845,
@@ -2334,6 +2337,7 @@ static const struct camss_subdev_resources csiphy_res_7280[] = {
.reg = { "csiphy3" },
.interrupt = { "csiphy3" },
.csiphy = {
+ .streams_enable = true,
.id = 3,
.hw_ops = &csiphy_ops_3ph_1_0,
.formats = &csiphy_formats_sdm845,
@@ -2352,6 +2356,7 @@ static const struct camss_subdev_resources csiphy_res_7280[] = {
.reg = { "csiphy4" },
.interrupt = { "csiphy4" },
.csiphy = {
+ .streams_enable = true,
.id = 4,
.hw_ops = &csiphy_ops_3ph_1_0,
.formats = &csiphy_formats_sdm845,
@@ -2373,6 +2378,7 @@ static const struct camss_subdev_resources csid_res_7280[] = {
.reg = { "csid0" },
.interrupt = { "csid0" },
.csid = {
+ .streams_enable = true,
.is_lite = false,
.hw_ops = &csid_ops_gen2,
.parent_dev_ops = &vfe_parent_dev_ops,
@@ -2392,6 +2398,7 @@ static const struct camss_subdev_resources csid_res_7280[] = {
.reg = { "csid1" },
.interrupt = { "csid1" },
.csid = {
+ .streams_enable = true,
.is_lite = false,
.hw_ops = &csid_ops_gen2,
.parent_dev_ops = &vfe_parent_dev_ops,
@@ -2411,6 +2418,7 @@ static const struct camss_subdev_resources csid_res_7280[] = {
.reg = { "csid2" },
.interrupt = { "csid2" },
.csid = {
+ .streams_enable = true,
.is_lite = false,
.hw_ops = &csid_ops_gen2,
.parent_dev_ops = &vfe_parent_dev_ops,
@@ -2430,6 +2438,7 @@ static const struct camss_subdev_resources csid_res_7280[] = {
.reg = { "csid_lite0" },
.interrupt = { "csid_lite0" },
.csid = {
+ .streams_enable = true,
.is_lite = true,
.hw_ops = &csid_ops_gen2,
.parent_dev_ops = &vfe_parent_dev_ops,
@@ -2449,6 +2458,7 @@ static const struct camss_subdev_resources csid_res_7280[] = {
.reg = { "csid_lite1" },
.interrupt = { "csid_lite1" },
.csid = {
+ .streams_enable = true,
.is_lite = true,
.hw_ops = &csid_ops_gen2,
.parent_dev_ops = &vfe_parent_dev_ops,
@@ -2475,6 +2485,7 @@ static const struct camss_subdev_resources vfe_res_7280[] = {
.reg = { "vfe0" },
.interrupt = { "vfe0" },
.vfe = {
+ .streams_enable = true,
.line_num = 3,
.is_lite = false,
.has_pd = true,
@@ -2501,6 +2512,7 @@ static const struct camss_subdev_resources vfe_res_7280[] = {
.reg = { "vfe1" },
.interrupt = { "vfe1" },
.vfe = {
+ .streams_enable = true,
.line_num = 3,
.is_lite = false,
.has_pd = true,
@@ -2527,6 +2539,7 @@ static const struct camss_subdev_resources vfe_res_7280[] = {
.reg = { "vfe2" },
.interrupt = { "vfe2" },
.vfe = {
+ .streams_enable = true,
.line_num = 3,
.is_lite = false,
.hw_ops = &vfe_ops_170,
@@ -2551,6 +2564,7 @@ static const struct camss_subdev_resources vfe_res_7280[] = {
.reg = { "vfe_lite0" },
.interrupt = { "vfe_lite0" },
.vfe = {
+ .streams_enable = true,
.line_num = 4,
.is_lite = true,
.hw_ops = &vfe_ops_170,
@@ -2573,6 +2587,7 @@ static const struct camss_subdev_resources vfe_res_7280[] = {
.reg = { "vfe_lite1" },
.interrupt = { "vfe_lite1" },
.vfe = {
+ .streams_enable = true,
.line_num = 4,
.is_lite = true,
.hw_ops = &vfe_ops_170,
--
2.43.0

base-commit: 68142f986ff04b2b70b31db00f719bf690f64a9a
prerequisite-patch-id: 285e8b983e45d4184863e92ae99ebe46bb4f7020
prerequisite-patch-id: e8dce2cee0678cc20446f3a4a286c4a3c10d19f6
prerequisite-patch-id: d0bf82158d99863344c206a543d3e381b24a3b51
prerequisite-patch-id: ddffbfdffba948a608fc556a5ca81b9dabae7e00
prerequisite-patch-id: dca159c5eecf280ea7ce7c67f5da2364c8449759
prerequisite-patch-id: 220ee607579892058879cad0ed9344f6696313c8
prerequisite-patch-id: d7665451d090c8d4684c79736ac517d6c7ddc1fc
prerequisite-patch-id: f297c801f0254862e4fc8440dbd27473a8b78159