Quoting Bjorn Andersson (2021-10-05 16:13:19)
diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c index 5d3ee5ef07c2..eaf08f9e7d87 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;
int connector_type;
+};
+struct msm_dp_config {
struct msm_dp_desc *descs;
const?
size_t num_descs;
+};
+static const struct msm_dp_config sc7180_dp_cfg = {
.descs = (struct msm_dp_desc[]) {
const?
{ .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 struct msm_dp_desc *dp_display_get_desc(struct platform_device *pdev)
const msm_dp_desc?
+{
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;
struct msm_dp_desc *desc;
const?
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) {