From b1e11053d6fe8a75ee29e6a4cfa78fd914f3b3f6 Mon Sep 17 00:00:00 2001 From: Sandy Huang Date: Thu, 15 Apr 2021 11:30:50 +0800 Subject: [PATCH] drm/rockchip: dw-hdmi: attach CONNECTOR_ID prop to identify multi HDMI Change-Id: I10efb880a050b5db54571f8041d5841ac368488d Signed-off-by: Sandy Huang --- drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c index bde38ba2e544..10ce8b9d6430 100644 --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c @@ -115,6 +115,7 @@ struct rockchip_hdmi { bool unsupported_yuv_input; bool unsupported_deep_color; bool mode_changed; + u8 id; unsigned long bus_format; unsigned long output_bus_format; @@ -924,6 +925,7 @@ dw_hdmi_rockchip_attach_properties(struct drm_connector *connector, { struct rockchip_hdmi *hdmi = (struct rockchip_hdmi *)data; struct drm_property *prop; + struct rockchip_drm_private *private = connector->dev->dev_private; switch (color) { case MEDIA_BUS_FMT_RGB101010_1X30: @@ -1029,6 +1031,7 @@ dw_hdmi_rockchip_attach_properties(struct drm_connector *connector, prop = connector->dev->mode_config.hdr_output_metadata_property; if (version >= 0x211a) drm_object_attach_property(&connector->base, prop, 0); + drm_object_attach_property(&connector->base, private->connector_id_prop, 0); } static void @@ -1123,6 +1126,7 @@ dw_hdmi_rockchip_get_property(struct drm_connector *connector, struct rockchip_hdmi *hdmi = (struct rockchip_hdmi *)data; struct drm_display_info *info = &connector->display_info; struct drm_mode_config *config = &connector->dev->mode_config; + struct rockchip_drm_private *private = connector->dev->dev_private; if (property == hdmi->color_depth_property) { *val = hdmi->colordepth; @@ -1168,6 +1172,9 @@ dw_hdmi_rockchip_get_property(struct drm_connector *connector, } else if (property == hdmi->colorimetry_property) { *val = hdmi->colorimetry; return 0; + } else if (property == private->connector_id_prop) { + *val = hdmi->id; + return 0; } DRM_ERROR("failed to get rockchip hdmi connector property\n"); @@ -1431,7 +1438,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master, struct drm_device *drm = data; struct drm_encoder *encoder; struct rockchip_hdmi *hdmi; - int ret; + int ret, id; if (!pdev->dev.of_node) return -ENODEV; @@ -1446,6 +1453,10 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master, if (!plat_data) return -ENOMEM; + id = of_alias_get_id(dev->of_node, "hdmi"); + if (id < 0) + id = 0; + hdmi->id = id; hdmi->dev = &pdev->dev; hdmi->chip_data = plat_data->phy_data; plat_data->phy_data = hdmi;