[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