Am 03.12.25 um 10:07 schrieb Tvrtko Ursulin:
Convert the swapping of width and height quirk to a callback.

Signed-off-by: Tvrtko Ursulin <[email protected]>
Suggested-by: Ard Biesheuvel <[email protected]>
Cc: Thomas Zimmermann <[email protected]>
Cc: Ard Biesheuvel <[email protected]>
Cc: Melissa Wen <[email protected]>
Cc: [email protected]

Reviewed-by: Thomas Zimmermann <[email protected]>

---
  drivers/firmware/efi/sysfb_efi.c | 24 +++++++++++++++++-------
  1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/drivers/firmware/efi/sysfb_efi.c b/drivers/firmware/efi/sysfb_efi.c
index 14b61414c33a..eacf9a50eab2 100644
--- a/drivers/firmware/efi/sysfb_efi.c
+++ b/drivers/firmware/efi/sysfb_efi.c
@@ -231,6 +231,16 @@ static const struct dmi_system_id efifb_dmi_system_table[] 
__initconst = {
        {},
  };
+static int __init efifb_swap_width_height(const struct dmi_system_id *id)
+{
+       swap(screen_info.lfb_width, screen_info.lfb_height);
+       screen_info.lfb_linelength = (unsigned int)screen_info.lfb_depth *
+                                    screen_info.lfb_width /
+                                    BITS_PER_BYTE;
+
+       return 1;
+}
+
  /*
   * Some devices have a portrait LCD but advertise a landscape resolution (and
   * pitch). We simply swap width and height for these devices so that we can
@@ -248,6 +258,7 @@ static const struct dmi_system_id 
efifb_dmi_swap_width_height[] __initconst = {
                        DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "MIIX 310-10ICR"),
                        DMI_EXACT_MATCH(DMI_BIOS_VERSION, "1HCN44WW"),
                },
+               .callback = efifb_swap_width_height,
        },
        {
                /* Lenovo MIIX 320-10ICR with 800x1280 portrait screen */
@@ -256,6 +267,7 @@ static const struct dmi_system_id 
efifb_dmi_swap_width_height[] __initconst = {
                        DMI_EXACT_MATCH(DMI_PRODUCT_VERSION,
                                        "Lenovo MIIX 320-10ICR"),
                },
+               .callback = efifb_swap_width_height,
        },
        {
                /* Lenovo D330 with 800x1280 or 1200x1920 portrait screen */
@@ -264,6 +276,7 @@ static const struct dmi_system_id 
efifb_dmi_swap_width_height[] __initconst = {
                        DMI_EXACT_MATCH(DMI_PRODUCT_VERSION,
                                        "Lenovo ideapad D330-10IGM"),
                },
+               .callback = efifb_swap_width_height,
        },
        {
                /* Lenovo IdeaPad Duet 3 10IGL5 with 1200x1920 portrait screen 
*/
@@ -272,6 +285,7 @@ static const struct dmi_system_id 
efifb_dmi_swap_width_height[] __initconst = {
                        DMI_EXACT_MATCH(DMI_PRODUCT_VERSION,
                                        "IdeaPad Duet 3 10IGL5"),
                },
+               .callback = efifb_swap_width_height,
        },
        {
                /* Lenovo Yoga Book X91F / X91L */
@@ -280,6 +294,7 @@ static const struct dmi_system_id 
efifb_dmi_swap_width_height[] __initconst = {
                        /* Non exact match to match F + L versions */
                        DMI_MATCH(DMI_PRODUCT_NAME, "Lenovo YB1-X91"),
                },
+               .callback = efifb_swap_width_height,
        },
        {},
  };
@@ -355,13 +370,8 @@ __init void sysfb_apply_efi_quirks(void)
            !(screen_info.capabilities & VIDEO_CAPABILITY_SKIP_QUIRKS))
                dmi_check_system(efifb_dmi_system_table);
- if (screen_info.orig_video_isVGA == VIDEO_TYPE_EFI &&
-           dmi_check_system(efifb_dmi_swap_width_height)) {
-               swap(screen_info.lfb_width, screen_info.lfb_height);
-               screen_info.lfb_linelength = (unsigned 
int)screen_info.lfb_depth *
-                                            screen_info.lfb_width /
-                                            BITS_PER_BYTE;
-       }
+       if (screen_info.orig_video_isVGA == VIDEO_TYPE_EFI)
+               dmi_check_system(efifb_dmi_swap_width_height);
  }
__init void sysfb_set_efifb_fwnode(struct platform_device *pd)

--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)


Reply via email to