From 9e347ade990e8e8d8984779462a2bcbfc5d71e41 Mon Sep 17 00:00:00 2001
From: Rudolf Cornelissen
Date: Sun, 28 Jun 2009 15:22:31 +0000
Subject: [PATCH] now checking for max. resolution on analog screens as well as
on digital screens. Resolutions above 'native' resolutions are nolonger
accepted. Bumped version to 0.94, updated docs.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31292 a95241bf-73f2-0310-859d-f6bbb57e9c96
---
.../accelerants/nvidia/ProposeDisplayMode.c | 28 ++++---------------
.../accelerants/nvidia/engine/nv_general.c | 2 +-
.../drivers/graphics/nvidia/UPDATE.html | 4 +--
3 files changed, 8 insertions(+), 26 deletions(-)
diff --git a/src/add-ons/accelerants/nvidia/ProposeDisplayMode.c b/src/add-ons/accelerants/nvidia/ProposeDisplayMode.c
index 503e571626..b34d63d1a1 100644
--- a/src/add-ons/accelerants/nvidia/ProposeDisplayMode.c
+++ b/src/add-ons/accelerants/nvidia/ProposeDisplayMode.c
@@ -186,39 +186,21 @@ PROPOSE_DISPLAY_MODE(display_mode *target, const display_mode *low, const displa
}
}
- /* check if screen(s) can display the requested resolution (if connected) */
- if (si->ps.monitors & CRTC1_TMDS) {
- if (target->timing.h_display > si->ps.p1_timing.h_display
- || target->timing.v_display > si->ps.p1_timing.v_display) {
- LOG(4, ("PROPOSEMODE: panel at crtc11 can't display requested resolution, aborted.\n"));
- return B_ERROR;
- }
- }
- if (si->ps.monitors & CRTC2_TMDS) {
- if (target->timing.h_display > si->ps.p2_timing.h_display
- || target->timing.v_display > si->ps.p2_timing.v_display) {
- LOG(4, ("PROPOSEMODE: panel at crtc2 can't display requested resolution, aborted.\n"));
- return B_ERROR;
- }
- }
-//still expand/update concerning edid, among others.. (setup accounting for cross-connected vga screens...):
-/*
- if (si->ps.monitors & CRTC1_VGA) {
+ /* check if screen(s) can display the requested resolution (if we have it's EDID info) */
+ if (si->ps.crtc1_screen.have_edid) {
if (target->timing.h_display > si->ps.crtc1_screen.timing.h_display
|| target->timing.v_display > si->ps.crtc1_screen.timing.v_display) {
- LOG(4, ("PROPOSEMODE: analog screen at crtc1 can't display requested resolution, aborted.\n"));
+ LOG(4, ("PROPOSEMODE: screen at crtc1 can't display requested resolution, aborted.\n"));
return B_ERROR;
}
}
- if (si->ps.monitors & CRTC2_VGA) {
+ if (si->ps.crtc2_screen.have_edid) {
if (target->timing.h_display > si->ps.crtc2_screen.timing.h_display
|| target->timing.v_display > si->ps.crtc2_screen.timing.v_display) {
- LOG(4, ("PROPOSEMODE: analog screen at crtc2 can't display requested resolution, aborted.\n"));
+ LOG(4, ("PROPOSEMODE: screen at crtc2 can't display requested resolution, aborted.\n"));
return B_ERROR;
}
}
-*/
-//end still update.
/* validate display vs. virtual */
if (target->timing.h_display > target->virtual_width || want_same_width)
diff --git a/src/add-ons/accelerants/nvidia/engine/nv_general.c b/src/add-ons/accelerants/nvidia/engine/nv_general.c
index 28449b71a8..514ec83a51 100644
--- a/src/add-ons/accelerants/nvidia/engine/nv_general.c
+++ b/src/add-ons/accelerants/nvidia/engine/nv_general.c
@@ -92,7 +92,7 @@ status_t nv_general_powerup()
{
status_t status;
- LOG(1,("POWERUP: Haiku nVidia Accelerant 0.93 running.\n"));
+ LOG(1,("POWERUP: Haiku nVidia Accelerant 0.94 running.\n"));
/* log VBLANK INT usability status */
if (si->ps.int_assigned)
diff --git a/src/add-ons/kernel/drivers/graphics/nvidia/UPDATE.html b/src/add-ons/kernel/drivers/graphics/nvidia/UPDATE.html
index 043c4ff00e..30f4d74c33 100644
--- a/src/add-ons/kernel/drivers/graphics/nvidia/UPDATE.html
+++ b/src/add-ons/kernel/drivers/graphics/nvidia/UPDATE.html
@@ -4,7 +4,7 @@
Changes done for each driverversion:
-head (SVN 0.93, Rudolf)
+head (SVN 0.94, Rudolf)
- Fixed driver assuming enabling AGP mode succeeded on some occasions if it did not block it itself. Blocking AGP mode completely via the AGP busmanager (option 'block_agp') resulted in a crashing acceleration engine because it was setup for AGP transfers instead of using PCI transfers. Error was solved with help from user kraton.
- Fixed shared_info struct problem occuring when 3D 'accelerant' is used (tested Alpha 4.1): the TVencoder type definition list apparantly gets some memory assigned these days when done inside the definition of shared_info. Moved encoder list outside the shared_info definition.
@@ -18,7 +18,7 @@
- Added 'block_acc' option in nvidia.settings to completely disable the acceleration engine. Use this as a work-around if the acceleration engine misbehaves.
- Fixed card/system hanging after trying to log LVDS/TMDS distinction info. This (at least) fixes one NV34 trying to startup after a failed kernel VESA modeswitch without using the driver's coldstart option. Might very well help on other type cards too.
- HDTV video upto/including 1920x1080p can now be played back using overlay on Geforce cards where overlay is supported. On TNT1/TNT2/TNT2-M64 this can't be done and bitmap output is used.
-
- Added partial DDC/EDID support: dumping monitor specs to logfile, detecting analog connected screens and doing analog widescreen autodetection.
+
- Added partial DDC/EDID support: dumping monitor specs to logfile, detecting analog connected screens, doing analog widescreen autodetection and checking max. resolutions when setting a mode on analog screens (digitally connected screens had this check in place already).
- Added confirmed support for laptop card with ID 0x01d7: Quadro NVS 110M/GeForce 7300 Go. Also fixed support for laptop card with ID 0x01d8: GeForce 7400 Go: the 'laptop' definition was missing here.
- Fixed acceleration engine crashes on at least G72 cards (Geforce 7300/7400/7500) by powering up new part(s) of the acceleration engines too..
- Modified GPU PTimer programming which according to the Nouveau project fixes LVDS panel programming in some cases.