[PATCH v2 3/7] media: qcom: camss: Allow CSI2 PHY devices without CSIPHY resources
Loic Poulain
loic.poulain at oss.qualcomm.com
Wed Oct 28 07:43:22 PDT 2026
On Mon, Oct 26, 2026 at 11:50 PM Vladimir Zapolskiy <vz at kernel.org> wrote:
>
> If CAMSS CSIPHYs are supported by the stand-alone CSI2 PHY driver only,
> there is no need to provide description of legacy CSIPHY resources in
> the CAMSS driver, therefore if CSIPHY resources are not given for some
> supported platform, use CAMSS CSIPHY port numbers as CSIPHY identifiers.
>
> Signed-off-by: Vladimir Zapolskiy <vz at kernel.org>
Reviewed-by: Loic Poulain <loic.poulain at oss.qualcomm.com>
> ---
> drivers/media/platform/qcom/camss/camss-csiphy.c | 16 +++++++++++++---
> drivers/media/platform/qcom/camss/camss.c | 8 ++++++--
> 2 files changed, 19 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/media/platform/qcom/camss/camss-csiphy.c
> index f99eea2ef228..8ecd514451d2 100644
> --- a/drivers/media/platform/qcom/camss/camss-csiphy.c
> +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c
> @@ -799,6 +799,11 @@ int msm_csiphy_subdev_init_legacy(struct camss *camss,
> return ret;
> }
>
> +/* Fallback to generic SDM845 compatible formats for non-legacy CSIPHYs */
> +static const struct csiphy_subdev_resources csiphy_res_phy = {
> + .formats = &csiphy_formats_sdm845,
> +};
> +
> /*
> * msm_csiphy_subdev_init - Initialize CSIPHY device structure and resources
> * @camss: CAMSS structure
> @@ -808,7 +813,7 @@ int msm_csiphy_subdev_init_legacy(struct camss *camss,
> */
> int msm_csiphy_subdev_init(struct camss *camss, u8 port)
> {
> - const struct camss_subdev_resources *res = &camss->res->csiphy_res[port];
> + const struct camss_subdev_resources *res = camss->res->csiphy_res;
> struct csiphy_device *csiphy = &camss->csiphy[port];
> struct device *dev = camss->dev;
> struct device_node *ep, *remote;
> @@ -836,8 +841,13 @@ int msm_csiphy_subdev_init(struct camss *camss, u8 port)
> }
>
> csiphy->camss = camss;
> - csiphy->id = res->csiphy.id;
> - csiphy->res = &res->csiphy;
> + if (res) {
> + csiphy->id = res[port].csiphy.id;
> + csiphy->res = &res[port].csiphy;
> + } else {
> + csiphy->id = port;
> + csiphy->res = &csiphy_res_phy;
> + }
>
> snprintf(csiphy->name, ARRAY_SIZE(csiphy->name), "csi%d", csiphy->id);
>
> diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
> index c54185c93a8a..b0d60e70e4bb 100644
> --- a/drivers/media/platform/qcom/camss/camss.c
> +++ b/drivers/media/platform/qcom/camss/camss.c
> @@ -4796,7 +4796,10 @@ static void camss_detect_legacy_phy(struct camss *camss)
> struct device_node *remote;
> struct device_node *ep;
>
> - camss->legacy_phy = true;
> + /* Legacy CSIPHY description implies the provided CSIPHY resources */
> + camss->legacy_phy = !!camss->res->csiphy_res;
> + if (!camss->legacy_phy)
> + goto done;
>
> /* Find first remote-endpoint and determine if its a PHY */
> for_each_endpoint_of_node(camss->dev->of_node, ep) {
> @@ -4810,6 +4813,7 @@ static void camss_detect_legacy_phy(struct camss *camss)
> break;
> }
>
> +done:
> dev_dbg(camss->dev, "legacy phy mode %s\n",
> camss->legacy_phy ? "true" : "false");
> }
> @@ -4841,7 +4845,7 @@ static int camss_init_subdevices(struct camss *camss)
>
> if (ret < 0) {
> dev_err(camss->dev, "csiphy %d init fail\n",
> - res->csiphy_res[i].csiphy.id);
> + res->csiphy_res ? res->csiphy_res[i].csiphy.id : i);
> return ret;
> }
> }
> --
> 2.51.0
>
More information about the linux-phy
mailing list