From 1c88f77dccc78e8a59d74f767cfc28d69bc52f2c Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sun, 22 Aug 2021 18:14:17 +0200 Subject: [PATCH] app_server: turn DPMS on only after setting a valid mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It's not allowed to enable the screen before having set a mode. At least in the case of the intel_extreme driver, this creates some problem. Move the call just a bit later in the init process, where the mode is already set. Change-Id: Iaa665f0edc15316890032f1a5928f33634dc8749 Reviewed-on: https://review.haiku-os.org/c/haiku/+/4362 Reviewed-by: Adrien Destugues Reviewed-by: François Revol Reviewed-by: --- src/servers/app/Desktop.cpp | 2 ++ src/servers/app/Screen.cpp | 5 ----- src/servers/app/VirtualScreen.cpp | 8 +++++++- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/servers/app/Desktop.cpp b/src/servers/app/Desktop.cpp index 7c2304537c..e5ceb6ae22 100644 --- a/src/servers/app/Desktop.cpp +++ b/src/servers/app/Desktop.cpp @@ -519,6 +519,8 @@ Desktop::Init() return B_ERROR; } + HWInterface()->SetDPMSMode(B_DPMS_ON); + float brightness = fWorkspaces[0].StoredScreenConfiguration().Brightness(0); if (brightness > 0) HWInterface()->SetBrightness(brightness); diff --git a/src/servers/app/Screen.cpp b/src/servers/app/Screen.cpp index 7672c03849..f80517a779 100644 --- a/src/servers/app/Screen.cpp +++ b/src/servers/app/Screen.cpp @@ -74,11 +74,6 @@ Screen::Initialize() status = fHWInterface->Initialize(); } - // Turn on screen if this is not yet done by BIOS - if (status == B_OK) - fHWInterface->SetDPMSMode(B_DPMS_ON); - - return status; } diff --git a/src/servers/app/VirtualScreen.cpp b/src/servers/app/VirtualScreen.cpp index 94a9e1e1f2..1a9f7e2662 100644 --- a/src/servers/app/VirtualScreen.cpp +++ b/src/servers/app/VirtualScreen.cpp @@ -124,8 +124,11 @@ VirtualScreen::AddScreen(Screen* screen, ScreenConfigurations& configurations) // we found settings for this screen, and try to apply them now status = screen->SetMode(mode); } + if (status != B_OK) { - status_t status = screen->SetPreferredMode(); + // We found no configuration or it wasn't valid, try to fallback to + // sane values + status = screen->SetPreferredMode(); if (status != B_OK) status = screen->SetBestMode(1024, 768, B_RGB32, 60.f); if (status != B_OK) @@ -133,6 +136,9 @@ VirtualScreen::AddScreen(Screen* screen, ScreenConfigurations& configurations) if (status != B_OK) { debug_printf("app_server: Failed to set mode: %s\n", strerror(status)); + + delete item; + return status; } }