]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: Allow embedded connectors without DDC
authorTimur Kristóf <timur.kristof@gmail.com>
Tue, 28 Apr 2026 11:40:40 +0000 (13:40 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 29 Apr 2026 14:41:15 +0000 (10:41 -0400)
On some laptops, the embedded panel may not have
a DDC (display data channel) available. On these,
the EDID may be hardcoded in ACPI or the VBIOS.

In this case, use GPIO_DDC_LINE_UNKNOWN and don't fail.

Fixes: def3488eb0fd ("drm/amd/display: refactor HPD to increase flexibility")
Link: https://gitlab.freedesktop.org/drm/amd/-/work_items/5192
Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 75b8a6ca0e8bc3ce24572f854e95f8721b321179)

drivers/gpu/drm/amd/display/dc/dc.h
drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c
drivers/gpu/drm/amd/display/dc/link/link_factory.c

index 7f55ba09b19112b859f9d4d126c9f3fa694a81d3..37714d4371fba13628e7fbffc26a9aad27aa9858 100644 (file)
@@ -1682,7 +1682,7 @@ struct dc_scratch_space {
        struct dc_link_training_overrides preferred_training_settings;
        struct dp_audio_test_data audio_test_data;
 
-       uint8_t ddc_hw_inst;
+       enum gpio_ddc_line ddc_hw_inst;
 
        uint8_t hpd_src;
 
index a2c46350e44e8a1489e1c9e234995840b45aeced..95f8b7c7d657a1de4525ff50fe96a08fa45e2a28 100644 (file)
@@ -646,6 +646,9 @@ failure:
 enum gpio_ddc_line dal_ddc_get_line(
        const struct ddc *ddc)
 {
+       if (!ddc)
+               return GPIO_DDC_LINE_UNKNOWN;
+
        return (enum gpio_ddc_line)dal_gpio_get_enum(ddc->pin_data);
 }
 
index 7e7682d7dfc834700641bd8cdfbabf372195cfcd..ae4c4ad05baa026f84b71ea403e67d5c9f01ce9c 100644 (file)
@@ -568,7 +568,9 @@ static bool construct_phy(struct dc_link *link,
                goto ddc_create_fail;
        }
 
-       if (!link->ddc->ddc_pin) {
+       /* Embedded display connectors such as LVDS may not have DDC. */
+       if (!link->ddc->ddc_pin &&
+           !dc_is_embedded_signal(link->connector_signal)) {
                DC_ERROR("Failed to get I2C info for connector!\n");
                goto ddc_create_fail;
        }