* [PATCH v5 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API
@ 2026-10-13 8:33 Hitesh Patel
2026-10-13 8:33 ` [PATCH v5 1/4] media: qcom: camss: csid: Match the current set_fmt pad op signature Hitesh Patel
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: Hitesh Patel @ 2026-10-13 8:33 UTC (permalink / raw)
To: linux-media
Cc: gjorgji.rosikopulos, bryan.odonoghue, bod, mchehab,
vladimir.zapolskiy, loic.poulain, dmitry.baryshkov,
atanas.filipov, jigarkumar.zala, linux-arm-msm, linux-kernel,
ravi, Hitesh Patel
These four patches apply on top of Gjorgji's
[PATCH 0/8] media: qcom: camss: add V4L2 subdev streams API support
https://lore.kernel.org/r/20260911062213.195007-1-gjorgji.rosikopulos@oss.qualcomm.com
and do not build without it. Gjorgji has asked for them so he can fold
them into his v2.
1/4 set_fmt has gained a const struct v4l2_subdev_client_info *
parameter, so csid_streams_set_format() no longer matches the op it
is assigned to.
2/4 The flag at the SoC rather than on each CSIPHY and CSID, as Bryan
asked. struct camss_resources is already the per-SoC descriptor, so
declaring streams_enable there takes SM8250 from fourteen
assignments to one.
3/4 SC7280 enablement, a single line thanks to 2/4.
4/4 Without this, camss does not probe at all once the series is
applied:
WARNING: drivers/media/mc/mc-entity.c:1150 media_create_pad_link
qcom-camss acb3000.isp: Failed to link msm_csid0->msm_vfe3_rdi3 entities: -22
qcom-camss acb3000.isp: probe with driver qcom-camss failed with error -22
The pad count in Gjorgji's 4/8 is
num_pads = csid_is_lite(csid) ? MSM_CSID_PADS_NUM : MSM_CSID_PADS_NUM - 1;
which depends on lite-ness rather than on streams_enable, so any
platform that links all CSIDs to all VFEs fails to probe whether or
not the streams API is enabled for it. Gjorgji has since clarified
that the pad counts converge once the non-lite IFE pixel path lands,
at which point this guard changes shape rather than disappearing.
The CSIPHY rebase for Gjorgji's 1/8 is not included here, as that is his
patch to amend; the resolution is in my reply on that thread. SC7280 has
no camss child node named "phy", so camss_detect_legacy_phy() puts it in
legacy mode and the lane enable/disable has to dispatch on
camss->legacy_phy rather than assume the generic PHY path.
Tested on RB3 Gen 2 (QCS6490 / SC7280) against next-20261009:
qcom-camss acb3000.isp: streams_enable=1 legacy_phy=1 version=4
msm_csiphy0-4: flags=0x14 (FL_STREAMS | FL_HAS_DEVNODE)
msm_csid0-4: flags=0x1c (FL_STREAMS | FL_HAS_EVENTS | FL_HAS_DEVNODE)
msm_csid0-2: 4 pads, msm_csid3-4 (lite): 5 pads
imx577 -> csiphy3 -> csid0 -> vfe0_rdi0, SRGGB10_1X10/4056x3040
msm_csiphy3 routes: 0/0 -> 1/0 [ACTIVE]
msm_csid0 routes: 0/0 -> 1/0 [ACTIVE]
10 frames captured off /dev/video0, 4056x3040 pRAA, 5072 bytes per
line, with real sensor content.
Scope: that capture is the on-board IMX577. The upstream qcs6490-rb3gen2
files describe only that sensor and our GMSL mezzanine DT is not
upstream, so the two-camera MAX9296A case cannot be exercised on a plain
next-20261009. The concurrent two-pipeline result I reported in September
stands on the qualcomm-linux qcom-next branch, which sets
v4l2_subdev_enable_streams_api = true by default so it did go through the
streams API. I can retest there if SER/DES behaviour matters for a future
revision.
Note for anyone else testing this series: the streams uAPI is gated at
compile time by
static bool v4l2_subdev_enable_streams_api;
in drivers/media/v4l2-core/v4l2-subdev.c. Until that is true,
VIDIOC_SUBDEV_QUERYCAP strips V4L2_SUBDEV_CAP_STREAMS and the routing
ioctls return early, so media-ctl reports no routes and v4l2-ctl says
"Streams API not supported" even though the subdevs have
V4L2_SUBDEV_FL_STREAMS set.
v5: 2/4 reads the flag through a local streams_api bool in every
function that uses it, rather than a local in CSIPHY and CSID but
the expression inlined at each VFE call site (Bryan). Two locals
added in camss-vfe.c and one in msm_csiphy_unregister_entity(); no
functional change. Rebuilt and rechecked on the board.
v4: Posted as a series at Gjorgji's request. Added 1/4 (set_fmt
signature) and 2/4 (SoC-level flag, per Bryan). 3/4 became a single
line. 4/4 unchanged, but its commit message no longer claims the pad
count depends on the streams API. Tested on next-20261009 rather
than our vendor branch.
v3: Referenced the prerequisite series with a Link: tag.
v2: Added the dependency to the commit message and as base-commit.
Hitesh Patel (4):
media: qcom: camss: csid: Match the current set_fmt pad op signature
media: qcom: camss: Set the streams API flag per SoC
media: qcom: camss: Enable the streams API on SC7280
media: qcom: camss: Do not link CSID source pads the CSID does not have
drivers/media/platform/qcom/camss/camss-csid.c | 3 ++-
drivers/media/platform/qcom/camss/camss-csid.h | 1 -
drivers/media/platform/qcom/camss/camss-csiphy.c | 6 ++++--
drivers/media/platform/qcom/camss/camss-csiphy.h | 1 -
drivers/media/platform/qcom/camss/camss-vfe.c | 14 ++++++++------
drivers/media/platform/qcom/camss/camss-vfe.h | 1 -
drivers/media/platform/qcom/camss/camss.c | 19 +++++--------------
drivers/media/platform/qcom/camss/camss.h | 2 ++
8 files changed, 21 insertions(+), 26 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v5 1/4] media: qcom: camss: csid: Match the current set_fmt pad op signature
2026-10-13 8:33 [PATCH v5 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API Hitesh Patel
@ 2026-10-13 8:33 ` Hitesh Patel
2026-10-13 8:33 ` [PATCH v5 2/4] media: qcom: camss: Set the streams API flag per SoC Hitesh Patel
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Hitesh Patel @ 2026-10-13 8:33 UTC (permalink / raw)
To: linux-media
Cc: gjorgji.rosikopulos, bryan.odonoghue, bod, mchehab,
vladimir.zapolskiy, loic.poulain, dmitry.baryshkov,
atanas.filipov, jigarkumar.zala, linux-arm-msm, linux-kernel,
ravi, Hitesh Patel
v4l2_subdev_pad_ops::set_fmt gained a
const struct v4l2_subdev_client_info * parameter, so
csid_streams_set_format() no longer matches the op it is assigned to
and the driver fails to build with -Werror=incompatible-pointer-types.
Signed-off-by: Hitesh Patel <hitesh@ebytelogic.com>
---
drivers/media/platform/qcom/camss/camss-csid.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media/platform/qcom/camss/camss-csid.c
index 2559ebe98..991275398 100644
--- a/drivers/media/platform/qcom/camss/camss-csid.c
+++ b/drivers/media/platform/qcom/camss/camss-csid.c
@@ -1696,6 +1696,7 @@ static int csid_streams_get_format(struct v4l2_subdev *sd,
* Return -EINVAL or zero on success
*/
static int csid_streams_set_format(struct v4l2_subdev *sd,
+ const struct v4l2_subdev_client_info *ci,
struct v4l2_subdev_state *sd_state,
struct v4l2_subdev_format *fmt)
{
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v5 2/4] media: qcom: camss: Set the streams API flag per SoC
2026-10-13 8:33 [PATCH v5 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API Hitesh Patel
2026-10-13 8:33 ` [PATCH v5 1/4] media: qcom: camss: csid: Match the current set_fmt pad op signature Hitesh Patel
@ 2026-10-13 8:33 ` Hitesh Patel
2026-10-13 8:33 ` [PATCH v5 3/4] media: qcom: camss: Enable the streams API on SC7280 Hitesh Patel
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Hitesh Patel @ 2026-10-13 8:33 UTC (permalink / raw)
To: linux-media
Cc: gjorgji.rosikopulos, bryan.odonoghue, bod, mchehab,
vladimir.zapolskiy, loic.poulain, dmitry.baryshkov,
atanas.filipov, jigarkumar.zala, linux-arm-msm, linux-kernel,
ravi, Hitesh Patel
streams_enable was repeated on every CSIPHY, CSID and VFE resource entry
of a platform: fourteen assignments for SM8250, and fifteen more for each
further platform enabled. The flag describes the driver's support for a
SoC, not a property of an individual subdev, and nothing reads it before
the camss resources are available.
Declare it once on struct camss_resources alongside version, and have the
three subdevs consult camss->res->streams_enable at registration. SM8250
keeps the same behaviour with one assignment instead of fourteen.
Suggested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Hitesh Patel <hitesh@ebytelogic.com>
---
drivers/media/platform/qcom/camss/camss-csid.c | 2 +-
drivers/media/platform/qcom/camss/camss-csid.h | 1 -
drivers/media/platform/qcom/camss/camss-csiphy.c | 6 ++++--
drivers/media/platform/qcom/camss/camss-csiphy.h | 1 -
drivers/media/platform/qcom/camss/camss-vfe.c | 14 ++++++++------
drivers/media/platform/qcom/camss/camss-vfe.h | 1 -
drivers/media/platform/qcom/camss/camss.c | 15 +--------------
drivers/media/platform/qcom/camss/camss.h | 2 ++
8 files changed, 16 insertions(+), 26 deletions(-)
diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media/platform/qcom/camss/camss-csid.c
index 991275398..57c8f13f6 100644
--- a/drivers/media/platform/qcom/camss/camss-csid.c
+++ b/drivers/media/platform/qcom/camss/camss-csid.c
@@ -1828,7 +1828,7 @@ int msm_csid_register_entity(struct csid_device *csid,
struct v4l2_subdev *sd = &csid->subdev;
struct media_pad *pads = csid->pads;
struct device *dev = csid->camss->dev;
- bool streams_api = csid->res->streams_enable;
+ bool streams_api = csid->camss->res->streams_enable;
unsigned int num_pads = csid_is_lite(csid) ? MSM_CSID_PADS_NUM : MSM_CSID_PADS_NUM - 1;
int i;
int ret;
diff --git a/drivers/media/platform/qcom/camss/camss-csid.h b/drivers/media/platform/qcom/camss/camss-csid.h
index a312103cf..20ea67b96 100644
--- a/drivers/media/platform/qcom/camss/camss-csid.h
+++ b/drivers/media/platform/qcom/camss/camss-csid.h
@@ -184,7 +184,6 @@ struct csid_hw_ops {
struct csid_subdev_resources {
bool is_lite;
- bool streams_enable;
const struct csid_hw_ops *hw_ops;
const struct parent_dev_ops *parent_dev_ops;
const struct csid_formats *formats;
diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/media/platform/qcom/camss/camss-csiphy.c
index 81ca1b0a2..aa5182c30 100644
--- a/drivers/media/platform/qcom/camss/camss-csiphy.c
+++ b/drivers/media/platform/qcom/camss/camss-csiphy.c
@@ -1157,7 +1157,7 @@ int msm_csiphy_register_entity(struct csiphy_device *csiphy,
struct media_pad *pads = csiphy->pads;
struct camss *camss = csiphy->camss;
struct device *dev = camss->dev;
- bool streams_api = csiphy->res->streams_enable;
+ bool streams_api = csiphy->camss->res->streams_enable;
int ret;
if (streams_api)
@@ -1235,10 +1235,12 @@ int msm_csiphy_register_entity(struct csiphy_device *csiphy,
*/
void msm_csiphy_unregister_entity(struct csiphy_device *csiphy)
{
+ bool streams_api = csiphy->camss->res->streams_enable;
+
if (!IS_ERR(csiphy->phy))
phy_exit(csiphy->phy);
v4l2_device_unregister_subdev(&csiphy->subdev);
- if (csiphy->res->streams_enable)
+ if (streams_api)
v4l2_subdev_cleanup(&csiphy->subdev);
media_entity_cleanup(&csiphy->subdev.entity);
}
diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.h b/drivers/media/platform/qcom/camss/camss-csiphy.h
index f93971bb1..ca3160af7 100644
--- a/drivers/media/platform/qcom/camss/camss-csiphy.h
+++ b/drivers/media/platform/qcom/camss/camss-csiphy.h
@@ -86,7 +86,6 @@ struct csiphy_hw_ops {
struct csiphy_subdev_resources {
u8 id;
- bool streams_enable;
const struct csiphy_hw_ops *hw_ops;
const struct csiphy_formats *formats;
};
diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/platform/qcom/camss/camss-vfe.c
index 2cfca1b62..2ae5bc436 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe.c
@@ -2154,6 +2154,7 @@ static int vfe_bpl_align_pix(struct vfe_device *vfe)
int msm_vfe_register_entities(struct vfe_device *vfe,
struct v4l2_device *v4l2_dev)
{
+ bool streams_api = vfe->camss->res->streams_enable;
struct device *dev = vfe->camss->dev;
struct v4l2_subdev *sd;
struct media_pad *pads;
@@ -2168,8 +2169,8 @@ int msm_vfe_register_entities(struct vfe_device *vfe,
pads = vfe->line[i].pads;
video_out = &vfe->line[i].video_out;
- v4l2_subdev_init(sd, vfe->res->streams_enable ? &vfe_streams_v4l2_ops
- : &vfe_v4l2_ops);
+ v4l2_subdev_init(sd, streams_api ? &vfe_streams_v4l2_ops
+ : &vfe_v4l2_ops);
sd->internal_ops = &vfe_v4l2_internal_ops;
sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
if (i == VFE_LINE_PIX && vfe->res->is_lite == false)
@@ -2199,7 +2200,7 @@ int msm_vfe_register_entities(struct vfe_device *vfe,
goto error_init;
}
- if (vfe->res->streams_enable) {
+ if (streams_api) {
ret = v4l2_subdev_init_finalize(sd);
if (ret) {
dev_err(dev, "Failed to finalize subdev: %d\n", ret);
@@ -2255,7 +2256,7 @@ int msm_vfe_register_entities(struct vfe_device *vfe,
v4l2_device_unregister_subdev(sd);
error_subdev_cleanup:
- if (vfe->res->streams_enable)
+ if (streams_api)
v4l2_subdev_cleanup(sd);
error_reg_subdev:
@@ -2268,7 +2269,7 @@ int msm_vfe_register_entities(struct vfe_device *vfe,
msm_video_unregister(video_out);
v4l2_device_unregister_subdev(sd);
- if (vfe->res->streams_enable)
+ if (streams_api)
v4l2_subdev_cleanup(sd);
media_entity_cleanup(&sd->entity);
}
@@ -2282,6 +2283,7 @@ int msm_vfe_register_entities(struct vfe_device *vfe,
*/
void msm_vfe_unregister_entities(struct vfe_device *vfe)
{
+ bool streams_api = vfe->camss->res->streams_enable;
int i;
mutex_destroy(&vfe->power_lock);
@@ -2293,7 +2295,7 @@ void msm_vfe_unregister_entities(struct vfe_device *vfe)
msm_video_unregister(video_out);
v4l2_device_unregister_subdev(sd);
- if (vfe->res->streams_enable)
+ if (streams_api)
v4l2_subdev_cleanup(sd);
media_entity_cleanup(&sd->entity);
}
diff --git a/drivers/media/platform/qcom/camss/camss-vfe.h b/drivers/media/platform/qcom/camss/camss-vfe.h
index d1c54a516..ae9dad353 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe.h
+++ b/drivers/media/platform/qcom/camss/camss-vfe.h
@@ -138,7 +138,6 @@ struct vfe_subdev_resources {
char *pd_name;
bool has_vbif;
char *vbif_name;
- bool streams_enable;
const struct vfe_hw_ops *hw_ops;
const struct camss_formats *formats_rdi;
const struct camss_formats *formats_pix;
diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
index 452afe16a..2c9c4ce50 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -1954,7 +1954,6 @@ static const struct camss_subdev_resources csiphy_res_8250[] = {
.interrupt = { "csiphy0" },
.csiphy = {
.id = 0,
- .streams_enable = true,
.hw_ops = &csiphy_ops_3ph_1_0,
.formats = &csiphy_formats_sdm845
}
@@ -1972,7 +1971,6 @@ static const struct camss_subdev_resources csiphy_res_8250[] = {
.interrupt = { "csiphy1" },
.csiphy = {
.id = 1,
- .streams_enable = true,
.hw_ops = &csiphy_ops_3ph_1_0,
.formats = &csiphy_formats_sdm845
}
@@ -1990,7 +1988,6 @@ static const struct camss_subdev_resources csiphy_res_8250[] = {
.interrupt = { "csiphy2" },
.csiphy = {
.id = 2,
- .streams_enable = true,
.hw_ops = &csiphy_ops_3ph_1_0,
.formats = &csiphy_formats_sdm845
}
@@ -2008,7 +2005,6 @@ static const struct camss_subdev_resources csiphy_res_8250[] = {
.interrupt = { "csiphy3" },
.csiphy = {
.id = 3,
- .streams_enable = true,
.hw_ops = &csiphy_ops_3ph_1_0,
.formats = &csiphy_formats_sdm845
}
@@ -2026,7 +2022,6 @@ static const struct camss_subdev_resources csiphy_res_8250[] = {
.interrupt = { "csiphy4" },
.csiphy = {
.id = 4,
- .streams_enable = true,
.hw_ops = &csiphy_ops_3ph_1_0,
.formats = &csiphy_formats_sdm845
}
@@ -2044,7 +2039,6 @@ static const struct camss_subdev_resources csiphy_res_8250[] = {
.interrupt = { "csiphy5" },
.csiphy = {
.id = 5,
- .streams_enable = true,
.hw_ops = &csiphy_ops_3ph_1_0,
.formats = &csiphy_formats_sdm845
}
@@ -2064,7 +2058,6 @@ static const struct camss_subdev_resources csid_res_8250[] = {
.reg = { "csid0" },
.interrupt = { "csid0" },
.csid = {
- .streams_enable = true,
.hw_ops = &csid_ops_gen2,
.parent_dev_ops = &vfe_parent_dev_ops,
.formats = &csid_formats_gen2
@@ -2082,7 +2075,6 @@ static const struct camss_subdev_resources csid_res_8250[] = {
.reg = { "csid1" },
.interrupt = { "csid1" },
.csid = {
- .streams_enable = true,
.hw_ops = &csid_ops_gen2,
.parent_dev_ops = &vfe_parent_dev_ops,
.formats = &csid_formats_gen2
@@ -2100,7 +2092,6 @@ static const struct camss_subdev_resources csid_res_8250[] = {
.interrupt = { "csid2" },
.csid = {
.is_lite = true,
- .streams_enable = true,
.hw_ops = &csid_ops_gen2,
.parent_dev_ops = &vfe_parent_dev_ops,
.formats = &csid_formats_gen2
@@ -2118,7 +2109,6 @@ static const struct camss_subdev_resources csid_res_8250[] = {
.interrupt = { "csid3" },
.csid = {
.is_lite = true,
- .streams_enable = true,
.hw_ops = &csid_ops_gen2,
.parent_dev_ops = &vfe_parent_dev_ops,
.formats = &csid_formats_gen2
@@ -2148,7 +2138,6 @@ static const struct camss_subdev_resources vfe_res_8250[] = {
.line_num = 3,
.has_pd = true,
.pd_name = "ife0",
- .streams_enable = true,
.hw_ops = &vfe_ops_480,
.formats_rdi = &vfe_formats_rdi_845,
.formats_pix = &vfe_formats_pix_845
@@ -2175,7 +2164,6 @@ static const struct camss_subdev_resources vfe_res_8250[] = {
.line_num = 3,
.has_pd = true,
.pd_name = "ife1",
- .streams_enable = true,
.hw_ops = &vfe_ops_480,
.formats_rdi = &vfe_formats_rdi_845,
.formats_pix = &vfe_formats_pix_845
@@ -2200,7 +2188,6 @@ static const struct camss_subdev_resources vfe_res_8250[] = {
.vfe = {
.is_lite = true,
.line_num = 4,
- .streams_enable = true,
.hw_ops = &vfe_ops_480,
.formats_rdi = &vfe_formats_rdi_845,
.formats_pix = &vfe_formats_pix_845
@@ -2225,7 +2212,6 @@ static const struct camss_subdev_resources vfe_res_8250[] = {
.vfe = {
.is_lite = true,
.line_num = 4,
- .streams_enable = true,
.hw_ops = &vfe_ops_480,
.formats_rdi = &vfe_formats_rdi_845,
.formats_pix = &vfe_formats_pix_845
@@ -5745,6 +5731,7 @@ static const struct camss_resources sm6350_resources = {
static const struct camss_resources sm8250_resources = {
.version = CAMSS_8250,
+ .streams_enable = true,
.pd_name = "top",
.csiphy_res = csiphy_res_8250,
.csid_res = csid_res_8250,
diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/platform/qcom/camss/camss.h
index dc07ed5d1..5cfae3f3d 100644
--- a/drivers/media/platform/qcom/camss/camss.h
+++ b/drivers/media/platform/qcom/camss/camss.h
@@ -106,6 +106,8 @@ enum icc_count {
struct camss_resources {
enum camss_version version;
+ /* Drive this platform through the V4L2 subdev streams API */
+ bool streams_enable;
const char *pd_name;
const char *pm_clks[CAMSS_RES_MAX];
const struct camss_subdev_resources *csiphy_res;
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v5 3/4] media: qcom: camss: Enable the streams API on SC7280
2026-10-13 8:33 [PATCH v5 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API Hitesh Patel
2026-10-13 8:33 ` [PATCH v5 1/4] media: qcom: camss: csid: Match the current set_fmt pad op signature Hitesh Patel
2026-10-13 8:33 ` [PATCH v5 2/4] media: qcom: camss: Set the streams API flag per SoC Hitesh Patel
@ 2026-10-13 8:33 ` Hitesh Patel
2026-10-13 8:33 ` [PATCH v5 4/4] media: qcom: camss: Do not link CSID source pads the CSID does not have Hitesh Patel
2026-10-13 9:47 ` [PATCH v5 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API Hitesh Patel
4 siblings, 0 replies; 7+ messages in thread
From: Hitesh Patel @ 2026-10-13 8:33 UTC (permalink / raw)
To: linux-media
Cc: gjorgji.rosikopulos, bryan.odonoghue, bod, mchehab,
vladimir.zapolskiy, loic.poulain, dmitry.baryshkov,
atanas.filipov, jigarkumar.zala, linux-arm-msm, linux-kernel,
ravi, Hitesh Patel
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.
SC7280 has no camss child node named "phy", so camss_detect_legacy_phy()
puts it in legacy PHY mode; the streams path dispatches the lane
enable/disable accordingly.
Signed-off-by: Hitesh Patel <hitesh@ebytelogic.com>
---
drivers/media/platform/qcom/camss/camss.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
index 2c9c4ce50..a9bd79ca3 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -5760,6 +5760,7 @@ static const struct camss_resources sc8280xp_resources = {
static const struct camss_resources sc7280_resources = {
.version = CAMSS_7280,
+ .streams_enable = true,
.pd_name = "top",
.csiphy_res = csiphy_res_7280,
.csid_res = csid_res_7280,
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v5 4/4] media: qcom: camss: Do not link CSID source pads the CSID does not have
2026-10-13 8:33 [PATCH v5 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API Hitesh Patel
` (2 preceding siblings ...)
2026-10-13 8:33 ` [PATCH v5 3/4] media: qcom: camss: Enable the streams API on SC7280 Hitesh Patel
@ 2026-10-13 8:33 ` Hitesh Patel
2026-10-13 9:47 ` [PATCH v5 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API Hitesh Patel
4 siblings, 0 replies; 7+ messages in thread
From: Hitesh Patel @ 2026-10-13 8:33 UTC (permalink / raw)
To: linux-media
Cc: gjorgji.rosikopulos, bryan.odonoghue, bod, mchehab,
vladimir.zapolskiy, loic.poulain, dmitry.baryshkov,
atanas.filipov, jigarkumar.zala, linux-arm-msm, linux-kernel,
ravi, Hitesh Patel
A non-lite CSID registers MSM_CSID_PADS_NUM - 1 pads, one source pad per
RDI0..2, while a lite CSID keeps all MSM_CSID_PADS_NUM pads:
num_pads = csid_is_lite(csid) ? MSM_CSID_PADS_NUM : MSM_CSID_PADS_NUM - 1;
camss_link_entities() still links source pad MSM_CSID_PAD_FIRST_SRC + j
of every CSID to line j of every VFE. On SC7280 the non-lite csid0 is
linked to vfe_lite0, which has four lines, so the loop asks for csid0
source pad 4 and the driver fails to probe:
WARNING: drivers/media/mc/mc-entity.c:1150 media_create_pad_link
qcom-camss acb3000.isp: Failed to link msm_csid0->msm_vfe3_rdi3 entities: -22
qcom-camss acb3000.isp: probe with driver qcom-camss failed with error -22
The pad count depends on lite-ness, not on streams_enable, so every
platform that links all CSIDs to all VFEs fails to probe as soon as the
CSID streams support is applied, whether or not the streams API is
enabled for that platform. SM8250 escapes it only because
csid_vfe_fixed_pairing links csid[i] to vfe[i] alone.
Skip the VFE lines for which the CSID has no source pad.
Signed-off-by: Hitesh Patel <hitesh@ebytelogic.com>
---
drivers/media/platform/qcom/camss/camss.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
index a9bd79ca3..4b73f8862 100644
--- a/drivers/media/platform/qcom/camss/camss.c
+++ b/drivers/media/platform/qcom/camss/camss.c
@@ -5028,6 +5028,9 @@ static int camss_link_entities(struct camss *camss)
struct v4l2_subdev *csid = &camss->csid[i].subdev;
struct v4l2_subdev *vfe = &camss->vfe[k].line[j].subdev;
+ if (MSM_CSID_PAD_FIRST_SRC + j >= csid->entity.num_pads)
+ continue;
+
ret = media_create_pad_link(&csid->entity,
MSM_CSID_PAD_FIRST_SRC + j,
&vfe->entity,
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v5 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API
2026-10-13 8:33 [PATCH v5 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API Hitesh Patel
` (3 preceding siblings ...)
2026-10-13 8:33 ` [PATCH v5 4/4] media: qcom: camss: Do not link CSID source pads the CSID does not have Hitesh Patel
@ 2026-10-13 9:47 ` Hitesh Patel
2026-10-13 11:31 ` Gjorgji Rosikopulos (Consultant)
4 siblings, 1 reply; 7+ messages in thread
From: Hitesh Patel @ 2026-10-13 9:47 UTC (permalink / raw)
To: linux-media
Cc: Hitesh Patel, Gjorgji Rosikopulos, Bryan O'Donoghue,
Bryan O'Donoghue, Mauro Carvalho Chehab, Vladimir Zapolskiy,
Loic Poulain, Dmitry Baryshkov, Atanas Filipov, Jigarkumar Zala,
linux-arm-msm, linux-kernel, ravi
The Media CI failure on this series is expected: it cannot apply to
media-committers next, because it depends on a series that is not merged
yet.
[PATCH 0/8] media: qcom: camss: add V4L2 subdev streams API support
https://lore.kernel.org/r/20260911062213.195007-1-gjorgji.rosikopulos@oss.qualcomm.com
1/4 changes csid_streams_set_format(), which only exists once patch 4/8
of that series is applied, so the first patch fails and the rest follow.
My apologies for the noise - earlier revisions carried base-commit and
prerequisite-patch-id trailers precisely so the CI would not try to build
this standalone, and I dropped them when I reposted as a series. For the
record the base is next-20261009 with Gjorgji's eight patches applied on
top, with 1/8 rebased as described in my reply on that thread.
Gjorgji has asked to fold these four into his v2, so they will most
likely reach the CI through that series rather than on their own. If a v6
is wanted for any other reason I will restore the trailers.
---
Hitesh
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v5 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API
2026-10-13 9:47 ` [PATCH v5 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API Hitesh Patel
@ 2026-10-13 11:31 ` Gjorgji Rosikopulos (Consultant)
0 siblings, 0 replies; 7+ messages in thread
From: Gjorgji Rosikopulos (Consultant) @ 2026-10-13 11:31 UTC (permalink / raw)
To: Hitesh Patel, linux-media
Cc: Bryan O'Donoghue, Bryan O'Donoghue,
Mauro Carvalho Chehab, Vladimir Zapolskiy, Loic Poulain,
Dmitry Baryshkov, Atanas Filipov, Jigarkumar Zala, linux-arm-msm,
linux-kernel, ravi
Hi Hitesh,
On 10/13/2026 12:47 PM, Hitesh Patel wrote:
> The Media CI failure on this series is expected: it cannot apply to
> media-committers next, because it depends on a series that is not merged
> yet.
>
> [PATCH 0/8] media: qcom: camss: add V4L2 subdev streams API support
> https://lore.kernel.org/r/20260911062213.195007-1-gjorgji.rosikopulos@oss.qualcomm.com
>
> 1/4 changes csid_streams_set_format(), which only exists once patch 4/8
> of that series is applied, so the first patch fails and the rest follow.
>
> My apologies for the noise - earlier revisions carried base-commit and
> prerequisite-patch-id trailers precisely so the CI would not try to build
> this standalone, and I dropped them when I reposted as a series. For the
> record the base is next-20261009 with Gjorgji's eight patches applied on
> top, with 1/8 rebased as described in my reply on that thread.
>
> Gjorgji has asked to fold these four into his v2, so they will most
> likely reach the CI through that series rather than on their own. If a v6
> is wanted for any other reason I will restore the trailers.
Thank you for your series, most probably next week i will have some time
to post the v2. As discussed will need help for verification from your side.
Regards,
~Gjorgji
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-10-13 11:31 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-13 8:33 [PATCH v5 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API Hitesh Patel
2026-10-13 8:33 ` [PATCH v5 1/4] media: qcom: camss: csid: Match the current set_fmt pad op signature Hitesh Patel
2026-10-13 8:33 ` [PATCH v5 2/4] media: qcom: camss: Set the streams API flag per SoC Hitesh Patel
2026-10-13 8:33 ` [PATCH v5 3/4] media: qcom: camss: Enable the streams API on SC7280 Hitesh Patel
2026-10-13 8:33 ` [PATCH v5 4/4] media: qcom: camss: Do not link CSID source pads the CSID does not have Hitesh Patel
2026-10-13 9:47 ` [PATCH v5 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API Hitesh Patel
2026-10-13 11:31 ` Gjorgji Rosikopulos (Consultant)
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®