From 8ca55b56f0ab1758693fa7508f09f4520f0d8d53 Mon Sep 17 00:00:00 2001 From: Rudolf Cornelissen Date: Thu, 20 Oct 2005 20:04:51 +0000 Subject: [PATCH] FIXED a STUPID BUG I stumbled on for a lot of GeForce 6200 cardsjam If you have such a card and had trouble using the driver it's time to upgrade now :). Fixed are PLL refreshrate calculations and dualhead detection: rewrote the detection code to be much less breakable now when new cards are added to the driver-supported list. Bumped version to 0.57. Sorry about this to the people who reported trouble with those 6200's to me... git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14462 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../accelerants/nvidia/engine/nv_general.c | 4 +- .../accelerants/nvidia/engine/nv_info.c | 73 ++++++------------- 2 files changed, 26 insertions(+), 51 deletions(-) diff --git a/src/add-ons/accelerants/nvidia/engine/nv_general.c b/src/add-ons/accelerants/nvidia/engine/nv_general.c index cff101cfef..f49fc06f76 100644 --- a/src/add-ons/accelerants/nvidia/engine/nv_general.c +++ b/src/add-ons/accelerants/nvidia/engine/nv_general.c @@ -91,14 +91,14 @@ status_t nv_general_powerup() { status_t status; + LOG(1,("POWERUP: Haiku nVidia Accelerant 0.57 running.\n")); + /* log VBLANK INT usability status */ if (si->ps.int_assigned) LOG(4,("POWERUP: Usable INT assigned to HW; Vblank semaphore enabled\n")); else LOG(4,("POWERUP: No (usable) INT assigned to HW; Vblank semaphore disabled\n")); - LOG(1,("POWERUP: Haiku nVidia Accelerant 0.56 running.\n")); - /* preset no laptop */ si->ps.laptop = false; diff --git a/src/add-ons/accelerants/nvidia/engine/nv_info.c b/src/add-ons/accelerants/nvidia/engine/nv_info.c index 6bbb7c4706..b774e954c2 100644 --- a/src/add-ons/accelerants/nvidia/engine/nv_info.c +++ b/src/add-ons/accelerants/nvidia/engine/nv_info.c @@ -3051,63 +3051,38 @@ static void getstrap_arch_nv10_20_30_40(void) uint32 dev_manID = CFGR(DEVID); uint32 strapinfo = NV_REG32(NV32_NVSTRAPINFO2); + /* determine if we have a dualhead card */ + si->ps.secondary_head = false; + switch (si->ps.card_type) + { + case NV04: + case NV05: + case NV05M64: + case NV06: + case NV10: + case NV15: + case NV20: + break; + default: + if ((dev_manID & 0xfff0ffff) == 0x01a010de) + { + /* this is a singlehead NV11! */ + } + else + { + si->ps.secondary_head = true; + } + } + /* determine PLL reference crystal frequency: three types are used... */ if (strapinfo & 0x00000040) si->ps.f_ref = 14.31818; else si->ps.f_ref = 13.50000; - switch (dev_manID & 0xfff0ffff) + if ((si->ps.secondary_head) && (si->ps.card_type != NV11)) { - /* Nvidia cards: */ - case 0x004010de: - case 0x00c010de: - case 0x00f010de: - case 0x014010de: - case 0x017010de: - case 0x018010de: - case 0x01f010de: - case 0x025010de: - case 0x028010de: - case 0x030010de: - case 0x031010de: - case 0x032010de: - case 0x033010de: - case 0x034010de: - /* Varisys cards: */ - case 0x35001888: if (strapinfo & 0x00400000) si->ps.f_ref = 27.00000; - break; - default: - break; - } - - /* determine if we have a dualhead card */ - switch (dev_manID & 0xfff0ffff) - { - /* Nvidia cards: */ - case 0x004010de: - case 0x00c010de: - case 0x00f010de: - case 0x011010de: - case 0x014010de: - case 0x017010de: - case 0x018010de: - case 0x01f010de: - case 0x025010de: - case 0x028010de: - case 0x030010de: - case 0x031010de: - case 0x032010de: - case 0x033010de: - case 0x034010de: - /* Varisys cards: */ - case 0x35001888: - si->ps.secondary_head = true; - break; - default: - si->ps.secondary_head = false; - break; } }