lkml.org 
[lkml]   [2024]   [Feb]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 8/9] media: qcom: camss: Decompose register and link operations
    Date
    From: Atanas Filipov <quic_afilipov@quicinc.com>

    Split link and register operations.
    Add dedicated link callback according to SoC identifier.

    Signed-off-by: Atanas Filipov <quic_afilipov@quicinc.com>
    Signed-off-by: Radoslav Tsvetkov <quic_rtsvetko@quicinc.com>
    ---
    drivers/media/platform/qcom/camss/camss.c | 140 ++++++++++++----------
    drivers/media/platform/qcom/camss/camss.h | 1 +
    2 files changed, 80 insertions(+), 61 deletions(-)

    diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
    index fc9940e883c5..244849db39dc 100644
    --- a/drivers/media/platform/qcom/camss/camss.c
    +++ b/drivers/media/platform/qcom/camss/camss.c
    @@ -1452,72 +1452,30 @@ static int camss_init_subdevices(struct camss *camss)
    }

    /*
    - * camss_register_entities - Register subdev nodes and create links
    + * camss_link_entities - Register subdev nodes and create links
    * @camss: CAMSS device
    *
    * Return 0 on success or a negative error code on failure
    */
    -static int camss_register_entities(struct camss *camss)
    +static int camss_link_entities(struct camss *camss)
    {
    int i, j, k;
    int ret;

    - for (i = 0; i < camss->res->csiphy_num; i++) {
    - ret = msm_csiphy_register_entity(&camss->csiphy[i],
    - &camss->v4l2_dev);
    - if (ret < 0) {
    - dev_err(camss->dev,
    - "Failed to register csiphy%d entity: %d\n",
    - i, ret);
    - goto err_reg_csiphy;
    - }
    - }
    -
    - for (i = 0; i < camss->res->csid_num; i++) {
    - ret = msm_csid_register_entity(&camss->csid[i],
    - &camss->v4l2_dev);
    - if (ret < 0) {
    - dev_err(camss->dev,
    - "Failed to register csid%d entity: %d\n",
    - i, ret);
    - goto err_reg_csid;
    - }
    - }
    -
    - ret = msm_ispif_register_entities(camss->ispif,
    - &camss->v4l2_dev);
    - if (ret < 0) {
    - dev_err(camss->dev, "Failed to register ispif entities: %d\n",
    - ret);
    - goto err_reg_ispif;
    - }
    -
    - for (i = 0; i < camss->res->vfe_num; i++) {
    - ret = msm_vfe_register_entities(&camss->vfe[i],
    - &camss->v4l2_dev);
    - if (ret < 0) {
    - dev_err(camss->dev,
    - "Failed to register vfe%d entities: %d\n",
    - i, ret);
    - goto err_reg_vfe;
    - }
    - }
    -
    for (i = 0; i < camss->res->csiphy_num; i++) {
    for (j = 0; j < camss->res->csid_num; j++) {
    - ret = media_create_pad_link(
    - &camss->csiphy[i].subdev.entity,
    - MSM_CSIPHY_PAD_SRC,
    - &camss->csid[j].subdev.entity,
    - MSM_CSID_PAD_SINK,
    - 0);
    + ret = media_create_pad_link(&camss->csiphy[i].subdev.entity,
    + MSM_CSIPHY_PAD_SRC,
    + &camss->csid[j].subdev.entity,
    + MSM_CSID_PAD_SINK,
    + 0);
    if (ret < 0) {
    dev_err(camss->dev,
    "Failed to link %s->%s entities: %d\n",
    camss->csiphy[i].subdev.entity.name,
    camss->csid[j].subdev.entity.name,
    ret);
    - goto err_link;
    + return ret;
    }
    }
    }
    @@ -1525,19 +1483,18 @@ static int camss_register_entities(struct camss *camss)
    if (camss->ispif) {
    for (i = 0; i < camss->res->csid_num; i++) {
    for (j = 0; j < camss->ispif->line_num; j++) {
    - ret = media_create_pad_link(
    - &camss->csid[i].subdev.entity,
    - MSM_CSID_PAD_SRC,
    - &camss->ispif->line[j].subdev.entity,
    - MSM_ISPIF_PAD_SINK,
    - 0);
    + ret = media_create_pad_link(&camss->csid[i].subdev.entity,
    + MSM_CSID_PAD_SRC,
    + &camss->ispif->line[j].subdev.entity,
    + MSM_ISPIF_PAD_SINK,
    + 0);
    if (ret < 0) {
    dev_err(camss->dev,
    "Failed to link %s->%s entities: %d\n",
    camss->csid[i].subdev.entity.name,
    camss->ispif->line[j].subdev.entity.name,
    ret);
    - goto err_link;
    + return ret;
    }
    }
    }
    @@ -1559,7 +1516,7 @@ static int camss_register_entities(struct camss *camss)
    ispif->entity.name,
    vfe->entity.name,
    ret);
    - goto err_link;
    + return ret;
    }
    }
    } else {
    @@ -1580,15 +1537,67 @@ static int camss_register_entities(struct camss *camss)
    csid->entity.name,
    vfe->entity.name,
    ret);
    - goto err_link;
    + return ret;
    }
    }
    }

    + return 0;
    +}
    +
    +/*
    + * camss_register_entities - Register subdev nodes and create links
    + * @camss: CAMSS device
    + *
    + * Return 0 on success or a negative error code on failure
    + */
    +static int camss_register_entities(struct camss *camss)
    +{
    + int i;
    + int ret;
    +
    + for (i = 0; i < camss->res->csiphy_num; i++) {
    + ret = msm_csiphy_register_entity(&camss->csiphy[i],
    + &camss->v4l2_dev);
    + if (ret < 0) {
    + dev_err(camss->dev,
    + "Failed to register csiphy%d entity: %d\n",
    + i, ret);
    + goto err_reg_csiphy;
    + }
    + }
    +
    + for (i = 0; i < camss->res->csid_num; i++) {
    + ret = msm_csid_register_entity(&camss->csid[i],
    + &camss->v4l2_dev);
    + if (ret < 0) {
    + dev_err(camss->dev,
    + "Failed to register csid%d entity: %d\n",
    + i, ret);
    + goto err_reg_csid;
    + }
    + }
    +
    + ret = msm_ispif_register_entities(camss->ispif,
    + &camss->v4l2_dev);
    + if (ret < 0) {
    + dev_err(camss->dev, "Failed to register ispif entities: %d\n", ret);
    + goto err_reg_ispif;
    + }
    +
    + for (i = 0; i < camss->res->vfe_num; i++) {
    + ret = msm_vfe_register_entities(&camss->vfe[i],
    + &camss->v4l2_dev);
    + if (ret < 0) {
    + dev_err(camss->dev,
    + "Failed to register vfe%d entities: %d\n",
    + i, ret);
    + goto err_reg_vfe;
    + }
    + }
    +
    return 0;

    -err_link:
    - i = camss->res->vfe_num;
    err_reg_vfe:
    for (i--; i >= 0; i--)
    msm_vfe_unregister_entities(&camss->vfe[i]);
    @@ -1908,6 +1917,10 @@ static int camss_probe(struct platform_device *pdev)
    if (ret < 0)
    goto err_v4l2_device_unregister;

    + ret = camss->res->link_entities(camss);
    + if (ret < 0)
    + goto err_register_subdevs;
    +
    if (num_subdevs) {
    camss->notifier.ops = &camss_subdev_notifier_ops;

    @@ -1987,6 +2000,7 @@ static const struct camss_resources msm8916_resources = {
    .csiphy_num = ARRAY_SIZE(csiphy_res_8x16),
    .csid_num = ARRAY_SIZE(csid_res_8x16),
    .vfe_num = ARRAY_SIZE(vfe_res_8x16),
    + .link_entities = camss_link_entities
    };

    static const struct camss_resources msm8996_resources = {
    @@ -1998,6 +2012,7 @@ static const struct camss_resources msm8996_resources = {
    .csiphy_num = ARRAY_SIZE(csiphy_res_8x96),
    .csid_num = ARRAY_SIZE(csid_res_8x96),
    .vfe_num = ARRAY_SIZE(vfe_res_8x96),
    + .link_entities = camss_link_entities
    };

    static const struct camss_resources sdm660_resources = {
    @@ -2009,6 +2024,7 @@ static const struct camss_resources sdm660_resources = {
    .csiphy_num = ARRAY_SIZE(csiphy_res_660),
    .csid_num = ARRAY_SIZE(csid_res_660),
    .vfe_num = ARRAY_SIZE(vfe_res_660),
    + .link_entities = camss_link_entities
    };

    static const struct camss_resources sdm845_resources = {
    @@ -2019,6 +2035,7 @@ static const struct camss_resources sdm845_resources = {
    .csiphy_num = ARRAY_SIZE(csiphy_res_845),
    .csid_num = ARRAY_SIZE(csid_res_845),
    .vfe_num = ARRAY_SIZE(vfe_res_845),
    + .link_entities = camss_link_entities
    };

    static const struct camss_resources sm8250_resources = {
    @@ -2032,6 +2049,7 @@ static const struct camss_resources sm8250_resources = {
    .csiphy_num = ARRAY_SIZE(csiphy_res_8250),
    .csid_num = ARRAY_SIZE(csid_res_8250),
    .vfe_num = ARRAY_SIZE(vfe_res_8250),
    + .link_entities = camss_link_entities
    };

    static const struct of_device_id camss_dt_match[] = {
    diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/platform/qcom/camss/camss.h
    index 5abde7481caf..fb997b94fd70 100644
    --- a/drivers/media/platform/qcom/camss/camss.h
    +++ b/drivers/media/platform/qcom/camss/camss.h
    @@ -105,6 +105,7 @@ struct camss_resources {
    const unsigned int csiphy_num;
    const unsigned int csid_num;
    const unsigned int vfe_num;
    + int (*link_entities)(struct camss *camss);
    };

    struct camss {
    --
    2.17.1

    \
     
     \ /
      Last update: 2024-05-27 15:24    [W:9.228 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site