lkml.org 
[lkml]   [2021]   [Oct]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 3/7] drm/msm/dp: Allow specifying connector_type per controller
    Date
    As the following patches introduced support for multiple DP blocks in a
    platform and some of those block might be eDP it becomes useful to be
    able to specify the connector type per block.

    Although there's only a single block at this point, the array of descs
    and the search in dp_display_get_desc() are introduced here to simplify
    the next patch, that does introduce support for multiple DP blocks.

    Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
    ---

    Changes since v4:
    - const the various struct msm_dp_desc instances
    - unsigned the connector_type


    The references to DRM_MODE_CONNECTOR_DisplayPort in dp_debug.c, that was
    highligted in the review of v4 has been removed in a separate patch.

    drivers/gpu/drm/msm/dp/dp_display.c | 43 ++++++++++++++++++++++++++++-
    drivers/gpu/drm/msm/dp/dp_display.h | 1 +
    drivers/gpu/drm/msm/dp/dp_drm.c | 2 +-
    3 files changed, 44 insertions(+), 2 deletions(-)

    diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
    index 5d3ee5ef07c2..6913970c8cf9 100644
    --- a/drivers/gpu/drm/msm/dp/dp_display.c
    +++ b/drivers/gpu/drm/msm/dp/dp_display.c
    @@ -115,8 +115,25 @@ struct dp_display_private {
    struct dp_audio *audio;
    };

    +struct msm_dp_desc {
    + phys_addr_t io_start;
    + unsigned int connector_type;
    +};
    +
    +struct msm_dp_config {
    + const struct msm_dp_desc *descs;
    + size_t num_descs;
    +};
    +
    +static const struct msm_dp_config sc7180_dp_cfg = {
    + .descs = (const struct msm_dp_desc[]) {
    + { .io_start = 0x0ae90000, .connector_type = DRM_MODE_CONNECTOR_DisplayPort },
    + },
    + .num_descs = 1,
    +};
    +
    static const struct of_device_id dp_dt_match[] = {
    - {.compatible = "qcom,sc7180-dp"},
    + { .compatible = "qcom,sc7180-dp", .data = &sc7180_dp_cfg },
    {}
    };

    @@ -1180,10 +1197,29 @@ int dp_display_request_irq(struct msm_dp *dp_display)
    return 0;
    }

    +static const struct msm_dp_desc *dp_display_get_desc(struct platform_device *pdev)
    +{
    + const struct msm_dp_config *cfg = of_device_get_match_data(&pdev->dev);
    + struct resource *res;
    + int i;
    +
    + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
    + if (!res)
    + return NULL;
    +
    + for (i = 0; i < cfg->num_descs; i++)
    + if (cfg->descs[i].io_start == res->start)
    + return &cfg->descs[i];
    +
    + dev_err(&pdev->dev, "unknown displayport instance\n");
    + return NULL;
    +}
    +
    static int dp_display_probe(struct platform_device *pdev)
    {
    int rc = 0;
    struct dp_display_private *dp;
    + const struct msm_dp_desc *desc;

    if (!pdev || !pdev->dev.of_node) {
    DRM_ERROR("pdev not found\n");
    @@ -1194,8 +1230,13 @@ static int dp_display_probe(struct platform_device *pdev)
    if (!dp)
    return -ENOMEM;

    + desc = dp_display_get_desc(pdev);
    + if (!desc)
    + return -EINVAL;
    +
    dp->pdev = pdev;
    dp->name = "drm_dp";
    + dp->dp_display.connector_type = desc->connector_type;

    rc = dp_init_sub_modules(dp);
    if (rc) {
    diff --git a/drivers/gpu/drm/msm/dp/dp_display.h b/drivers/gpu/drm/msm/dp/dp_display.h
    index 8b47cdabb67e..75fcabcfbbdd 100644
    --- a/drivers/gpu/drm/msm/dp/dp_display.h
    +++ b/drivers/gpu/drm/msm/dp/dp_display.h
    @@ -18,6 +18,7 @@ struct msm_dp {
    bool is_connected;
    bool audio_enabled;
    bool power_on;
    + unsigned int connector_type;

    hdmi_codec_plugged_cb plugged_cb;

    diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_drm.c
    index 764f4b81017e..f33e31523f56 100644
    --- a/drivers/gpu/drm/msm/dp/dp_drm.c
    +++ b/drivers/gpu/drm/msm/dp/dp_drm.c
    @@ -147,7 +147,7 @@ struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display)

    ret = drm_connector_init(dp_display->drm_dev, connector,
    &dp_connector_funcs,
    - DRM_MODE_CONNECTOR_DisplayPort);
    + dp_display->connector_type);
    if (ret)
    return ERR_PTR(ret);

    --
    2.29.2
    \
     
     \ /
      Last update: 2021-10-17 00:17    [W:2.487 / U:0.088 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site