* [PATCH v4 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API
@ 2026-10-12 12:05 Hitesh Patel
2026-10-12 12:05 ` [PATCH v4 1/4] media: qcom: camss: csid: Match the current set_fmt pad op signature Hitesh Patel
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Hitesh Patel @ 2026-10-12 12:05 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
Gjorgji asked me to post what I have so he can fold it into v2 of
[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
so here it is. These four patches apply on top of that series; they do
not build without it.
1/4 and 2/4 are what that series needs to build and apply on current
linux-next. Only its patch 1/8 needs hand work; 2/8 to 8/8 apply
unchanged.
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 Bryan asked for the flag at the SoC rather than on each CSIPHY and
CSID. struct camss_resources is already the per-SoC descriptor, so
declaring streams_enable there and reading camss->res->streams_enable
takes SM8250 from fourteen assignments to one.
3/4 SC7280 enablement, now 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
Gjorgji, you thought this one could go away in v2. It cannot, and it
is worse than I first described: the pad count in your 4/8 is
num_pads = csid_is_lite(csid) ? MSM_CSID_PADS_NUM : MSM_CSID_PADS_NUM - 1;
which depends on lite-ness, not 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.
The CSIPHY rebase for your 1/8 is not included here, since it is your
patch to amend; the resolution is in my reply on that thread. The short
version is that 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 Gen2 (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.
A correction to the scope I gave on the 0/8 thread: I said I would
follow up with the two-camera MAX9296A case on linux-next. I withdraw
that. The upstream qcs6490-rb3gen2 files describe only the on-board
IMX577, and our GMSL mezzanine DT is not upstream and is not something
we plan to push, so that 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. If SER/DES behaviour matters for a future revision I
can retest there, but I cannot offer it against linux-next.
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.
v4: Posted as a series at Gjorgji's request, for folding into his v2.
Added 1/4 (set_fmt signature) and 2/4 (SoC-level flag, per Bryan).
3/4 is now a single line instead of fifteen. 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 | 4 ++--
drivers/media/platform/qcom/camss/camss-csiphy.h | 1 -
drivers/media/platform/qcom/camss/camss-vfe.c | 10 +++++-----
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, 16 insertions(+), 25 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v4 1/4] media: qcom: camss: csid: Match the current set_fmt pad op signature
2026-10-12 12:05 [PATCH v4 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API Hitesh Patel
@ 2026-10-12 12:05 ` Hitesh Patel
2026-10-12 13:46 ` Bryan O'Donoghue
2026-10-12 12:05 ` [PATCH v4 2/4] media: qcom: camss: Set the streams API flag per SoC Hitesh Patel
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Hitesh Patel @ 2026-10-12 12:05 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] 8+ messages in thread
* [PATCH v4 2/4] media: qcom: camss: Set the streams API flag per SoC
2026-10-12 12:05 [PATCH v4 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API Hitesh Patel
2026-10-12 12:05 ` [PATCH v4 1/4] media: qcom: camss: csid: Match the current set_fmt pad op signature Hitesh Patel
@ 2026-10-12 12:05 ` Hitesh Patel
2026-10-12 23:57 ` Bryan O'Donoghue
2026-10-12 12:05 ` [PATCH v4 3/4] media: qcom: camss: Enable the streams API on SC7280 Hitesh Patel
2026-10-12 12:05 ` [PATCH v4 4/4] media: qcom: camss: Do not link CSID source pads the CSID does not have Hitesh Patel
3 siblings, 1 reply; 8+ messages in thread
From: Hitesh Patel @ 2026-10-12 12:05 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 | 4 ++--
drivers/media/platform/qcom/camss/camss-csiphy.h | 1 -
drivers/media/platform/qcom/camss/camss-vfe.c | 10 +++++-----
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, 11 insertions(+), 25 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..cece9bcb4 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)
@@ -1238,7 +1238,7 @@ void msm_csiphy_unregister_entity(struct csiphy_device *csiphy)
if (!IS_ERR(csiphy->phy))
phy_exit(csiphy->phy);
v4l2_device_unregister_subdev(&csiphy->subdev);
- if (csiphy->res->streams_enable)
+ if (csiphy->camss->res->streams_enable)
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..13cbce9f9 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe.c
@@ -2168,7 +2168,7 @@ 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
+ v4l2_subdev_init(sd, vfe->camss->res->streams_enable ? &vfe_streams_v4l2_ops
: &vfe_v4l2_ops);
sd->internal_ops = &vfe_v4l2_internal_ops;
sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
@@ -2199,7 +2199,7 @@ int msm_vfe_register_entities(struct vfe_device *vfe,
goto error_init;
}
- if (vfe->res->streams_enable) {
+ if (vfe->camss->res->streams_enable) {
ret = v4l2_subdev_init_finalize(sd);
if (ret) {
dev_err(dev, "Failed to finalize subdev: %d\n", ret);
@@ -2255,7 +2255,7 @@ int msm_vfe_register_entities(struct vfe_device *vfe,
v4l2_device_unregister_subdev(sd);
error_subdev_cleanup:
- if (vfe->res->streams_enable)
+ if (vfe->camss->res->streams_enable)
v4l2_subdev_cleanup(sd);
error_reg_subdev:
@@ -2268,7 +2268,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 (vfe->camss->res->streams_enable)
v4l2_subdev_cleanup(sd);
media_entity_cleanup(&sd->entity);
}
@@ -2293,7 +2293,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 (vfe->camss->res->streams_enable)
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] 8+ messages in thread
* [PATCH v4 3/4] media: qcom: camss: Enable the streams API on SC7280
2026-10-12 12:05 [PATCH v4 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API Hitesh Patel
2026-10-12 12:05 ` [PATCH v4 1/4] media: qcom: camss: csid: Match the current set_fmt pad op signature Hitesh Patel
2026-10-12 12:05 ` [PATCH v4 2/4] media: qcom: camss: Set the streams API flag per SoC Hitesh Patel
@ 2026-10-12 12:05 ` Hitesh Patel
2026-10-12 12:05 ` [PATCH v4 4/4] media: qcom: camss: Do not link CSID source pads the CSID does not have Hitesh Patel
3 siblings, 0 replies; 8+ messages in thread
From: Hitesh Patel @ 2026-10-12 12:05 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] 8+ messages in thread
* [PATCH v4 4/4] media: qcom: camss: Do not link CSID source pads the CSID does not have
2026-10-12 12:05 [PATCH v4 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API Hitesh Patel
` (2 preceding siblings ...)
2026-10-12 12:05 ` [PATCH v4 3/4] media: qcom: camss: Enable the streams API on SC7280 Hitesh Patel
@ 2026-10-12 12:05 ` Hitesh Patel
3 siblings, 0 replies; 8+ messages in thread
From: Hitesh Patel @ 2026-10-12 12:05 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] 8+ messages in thread
* Re: [PATCH v4 1/4] media: qcom: camss: csid: Match the current set_fmt pad op signature
2026-10-12 12:05 ` [PATCH v4 1/4] media: qcom: camss: csid: Match the current set_fmt pad op signature Hitesh Patel
@ 2026-10-12 13:46 ` Bryan O'Donoghue
2026-10-12 13:47 ` Bryan O'Donoghue
0 siblings, 1 reply; 8+ messages in thread
From: Bryan O'Donoghue @ 2026-10-12 13:46 UTC (permalink / raw)
To: Hitesh Patel, linux-media
Cc: gjorgji.rosikopulos, bod, mchehab, vladimir.zapolskiy,
loic.poulain, dmitry.baryshkov, atanas.filipov, jigarkumar.zala,
linux-arm-msm, linux-kernel, ravi
On 12/10/2026 13:05, Hitesh Patel wrote:
> 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)
> {
Please add an appropriate Fixes: tag and Cc: stable@vger.kernel.org
---
bod
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 1/4] media: qcom: camss: csid: Match the current set_fmt pad op signature
2026-10-12 13:46 ` Bryan O'Donoghue
@ 2026-10-12 13:47 ` Bryan O'Donoghue
0 siblings, 0 replies; 8+ messages in thread
From: Bryan O'Donoghue @ 2026-10-12 13:47 UTC (permalink / raw)
To: Hitesh Patel, linux-media
Cc: gjorgji.rosikopulos, bod, mchehab, vladimir.zapolskiy,
loic.poulain, dmitry.baryshkov, atanas.filipov, jigarkumar.zala,
linux-arm-msm, linux-kernel, ravi
On 12/10/2026 14:46, Bryan O'Donoghue wrote:
> On 12/10/2026 13:05, Hitesh Patel wrote:
>> 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)
>> {
>
> Please add an appropriate Fixes: tag and Cc: stable@vger.kernel.org
>
> ---
> bod
Ah my mistake, this is a patch for Gjorgji's streams series.
---
bod
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v4 2/4] media: qcom: camss: Set the streams API flag per SoC
2026-10-12 12:05 ` [PATCH v4 2/4] media: qcom: camss: Set the streams API flag per SoC Hitesh Patel
@ 2026-10-12 23:57 ` Bryan O'Donoghue
0 siblings, 0 replies; 8+ messages in thread
From: Bryan O'Donoghue @ 2026-10-12 23:57 UTC (permalink / raw)
To: Hitesh Patel, linux-media
Cc: gjorgji.rosikopulos, bryan.odonoghue, mchehab,
vladimir.zapolskiy, loic.poulain, dmitry.baryshkov,
atanas.filipov, jigarkumar.zala, linux-arm-msm, linux-kernel,
ravi
On 12/10/2026 13:05, Hitesh Patel wrote:
> + bool streams_api = csiphy->camss->res->streams_enable;
> int ret;
> @@ -2168,7 +2168,7 @@ 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
> + v4l2_subdev_init(sd, vfe->camss->res->streams_enable ? &vfe_streams_v4l2_ops
> : &vfe_v4l2_ops);
> sd->internal_ops = &vfe_v4l2_internal_ops;
This is a pretty inconsistent pattern.
If you're booling in a variable, then Boole in a variable *
---
bod
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-10-12 23:57 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-12 12:05 [PATCH v4 0/4] media: qcom: camss: rebase fixes and SC7280 enablement for the streams API Hitesh Patel
2026-10-12 12:05 ` [PATCH v4 1/4] media: qcom: camss: csid: Match the current set_fmt pad op signature Hitesh Patel
2026-10-12 13:46 ` Bryan O'Donoghue
2026-10-12 13:47 ` Bryan O'Donoghue
2026-10-12 12:05 ` [PATCH v4 2/4] media: qcom: camss: Set the streams API flag per SoC Hitesh Patel
2026-10-12 23:57 ` Bryan O'Donoghue
2026-10-12 12:05 ` [PATCH v4 3/4] media: qcom: camss: Enable the streams API on SC7280 Hitesh Patel
2026-10-12 12:05 ` [PATCH v4 4/4] media: qcom: camss: Do not link CSID source pads the CSID does not have Hitesh Patel
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®