From befbf015152d7ce4f95aa036d42337752ac86b67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Wed, 1 Dec 2021 11:35:02 +0100 Subject: [PATCH] intel_extreme: implement get_preferred_mode for vbt on mobile MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this avoids searching in edid information in this case. Change-Id: I330341f089f71cd5de657a6630b5414d02db771f Reviewed-on: https://review.haiku-os.org/c/haiku/+/4749 Reviewed-by: Jérôme Duval --- .../intel_extreme/accelerant_protos.h | 1 + .../accelerants/intel_extreme/hooks.cpp | 2 ++ .../accelerants/intel_extreme/mode.cpp | 23 +++++++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/src/add-ons/accelerants/intel_extreme/accelerant_protos.h b/src/add-ons/accelerants/intel_extreme/accelerant_protos.h index ac65b155c2..ddda9f9600 100644 --- a/src/add-ons/accelerants/intel_extreme/accelerant_protos.h +++ b/src/add-ons/accelerants/intel_extreme/accelerant_protos.h @@ -33,6 +33,7 @@ uint32 intel_accelerant_mode_count(void); status_t intel_get_mode_list(display_mode* dm); status_t intel_propose_display_mode(display_mode* target, const display_mode* low, const display_mode* high); +status_t intel_get_preferred_mode(display_mode* preferredMode); status_t intel_set_display_mode(display_mode* mode); status_t intel_get_display_mode(display_mode* currentMode); status_t intel_get_edid_info(void* info, size_t size, uint32* _version); diff --git a/src/add-ons/accelerants/intel_extreme/hooks.cpp b/src/add-ons/accelerants/intel_extreme/hooks.cpp index 815a1cc8f2..f19fbb7db6 100644 --- a/src/add-ons/accelerants/intel_extreme/hooks.cpp +++ b/src/add-ons/accelerants/intel_extreme/hooks.cpp @@ -38,6 +38,8 @@ get_accelerant_hook(uint32 feature, void* data) return (void*)intel_get_mode_list; case B_PROPOSE_DISPLAY_MODE: return (void*)intel_propose_display_mode; + case B_GET_PREFERRED_DISPLAY_MODE: + return (void*)intel_get_preferred_mode; case B_SET_DISPLAY_MODE: return (void*)intel_set_display_mode; case B_GET_DISPLAY_MODE: diff --git a/src/add-ons/accelerants/intel_extreme/mode.cpp b/src/add-ons/accelerants/intel_extreme/mode.cpp index 1937fdc53e..3bd6aa816f 100644 --- a/src/add-ons/accelerants/intel_extreme/mode.cpp +++ b/src/add-ons/accelerants/intel_extreme/mode.cpp @@ -526,6 +526,29 @@ intel_get_display_mode(display_mode* _currentMode) } +status_t +intel_get_preferred_mode(display_mode* preferredMode) +{ + TRACE("%s\n", __func__); + display_mode mode; + + if (gInfo->has_edid || !gInfo->shared_info->got_vbt + || !gInfo->shared_info->device_type.IsMobile()) { + return B_ERROR; + } + + mode.timing = gInfo->shared_info->panel_timing; + mode.space = B_RGB32; + mode.virtual_width = mode.timing.h_display; + mode.virtual_height = mode.timing.v_display; + mode.h_display_start = 0; + mode.v_display_start = 0; + mode.flags = 0; + memcpy(preferredMode, &mode, sizeof(mode)); + return B_OK; +} + + status_t intel_get_edid_info(void* info, size_t size, uint32* _version) {