]> 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:25:33 +0000 (10:25 -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>
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 ca1b23a44e0a6f79afaf126c701afbe4ce7c5d15..86da619c3721a1aae09a008d66538f9daf31c034 100644 (file)
@@ -1686,7 +1686,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 96a30c29b5e454456227444aa25c8aea8323a71b..3b6ac8445e413cbdaf6a8340b8cf6e08746cba9c 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;
        }