]> git.itanic.dy.fi Git - linux-stable/commitdiff
drm/amd/display: hpd rx irq not working with eDP interface
authorRobin Chen <robin.chen@amd.com>
Fri, 17 Feb 2023 12:47:57 +0000 (20:47 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 May 2023 12:02:04 +0000 (14:02 +0200)
[ Upstream commit eeefe7c4820b6baa0462a8b723ea0a3b5846ccae ]

[Why]
This is the fix for the defect of commit ab144f0b4ad6
("drm/amd/display: Allow individual control of eDP hotplug support").

[How]
To revise the default eDP hotplug setting and use the enum to git rid
of the magic number for different options.

Fixes: ab144f0b4ad6 ("drm/amd/display: Allow individual control of eDP hotplug support")
Cc: stable@vger.kernel.org
Cc: Mario Limonciello <mario.limonciello@amd.com>
Reviewed-by: Wenjing Liu <Wenjing.Liu@amd.com>
Acked-by: Qingqing Zhuo <qingqing.zhuo@amd.com>
Signed-off-by: Robin Chen <robin.chen@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/amd/display/dc/dc_types.h
drivers/gpu/drm/amd/display/dc/link/link_factory.c

index f28b8597cc1e6a7ade12284e1bb2164fc07baad7..cba65766ef47b3be4f7eecc667f48585b35aca44 100644 (file)
@@ -1086,4 +1086,11 @@ struct dc_dpia_bw_alloc {
 };
 
 #define MAX_SINKS_PER_LINK 4
+
+enum dc_hpd_enable_select {
+       HPD_EN_FOR_ALL_EDP = 0,
+       HPD_EN_FOR_PRIMARY_EDP_ONLY,
+       HPD_EN_FOR_SECONDARY_EDP_ONLY,
+};
+
 #endif /* DC_TYPES_H_ */
index aeb26a4d539e9f339c57dc6452841cd90f3164f6..8aaf14afa427135d9446dc68b0f2ad3083d17719 100644 (file)
@@ -274,14 +274,18 @@ static bool dc_link_construct_phy(struct dc_link *link,
                                link->irq_source_hpd = DC_IRQ_SOURCE_INVALID;
 
                        switch (link->dc->config.allow_edp_hotplug_detection) {
-                       case 1: // only the 1st eDP handles hotplug
+                       case HPD_EN_FOR_ALL_EDP:
+                               link->irq_source_hpd_rx =
+                                               dal_irq_get_rx_source(link->hpd_gpio);
+                               break;
+                       case HPD_EN_FOR_PRIMARY_EDP_ONLY:
                                if (link->link_index == 0)
                                        link->irq_source_hpd_rx =
                                                dal_irq_get_rx_source(link->hpd_gpio);
                                else
                                        link->irq_source_hpd = DC_IRQ_SOURCE_INVALID;
                                break;
-                       case 2: // only the 2nd eDP handles hotplug
+                       case HPD_EN_FOR_SECONDARY_EDP_ONLY:
                                if (link->link_index == 1)
                                        link->irq_source_hpd_rx =
                                                dal_irq_get_rx_source(link->hpd_gpio);
@@ -289,6 +293,7 @@ static bool dc_link_construct_phy(struct dc_link *link,
                                        link->irq_source_hpd = DC_IRQ_SOURCE_INVALID;
                                break;
                        default:
+                               link->irq_source_hpd = DC_IRQ_SOURCE_INVALID;
                                break;
                        }
                }