implemented haiku-specific hook GET_ACCELERANT_DEVICE_INFO. Haiku's screen prefs panel now indicates the brand name of the screen and only offers fully compatible modes for a connected screen if I understand it correctly. Note: currently only working for analog connected screens, digital connected screens coming up next. Updated docs, bumped version to 0.96.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32627 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
5b9093e57c
commit
9b53cf03cd
@ -5,18 +5,19 @@
|
||||
Other authors:
|
||||
Mark Watson;
|
||||
Apsed;
|
||||
Rudolf Cornelissen 10/2002-6/2009.
|
||||
Rudolf Cornelissen 10/2002-8/2009.
|
||||
*/
|
||||
|
||||
#ifndef DRIVERINTERFACE_H
|
||||
#define DRIVERINTERFACE_H
|
||||
|
||||
#include <Accelerant.h>
|
||||
#include "video_overlay.h"
|
||||
#include <video_overlay.h>
|
||||
#include <Drivers.h>
|
||||
#include <PCI.h>
|
||||
#include <OS.h>
|
||||
#include "AGP.h"
|
||||
#include <edid.h>
|
||||
#include <AGP.h>
|
||||
|
||||
#define DRIVER_PREFIX "nvidia"
|
||||
#define DEVICE_FORMAT "%04x_%04x_%02x%02x%02x"
|
||||
@ -237,10 +238,12 @@ typedef struct { // apsed, see comments in nvidia.settings
|
||||
|
||||
/* monitor info gathered via EDID */
|
||||
typedef struct {
|
||||
bool have_edid; /* have read useable edid info from screen */
|
||||
bool have_native_edid; /* gathered 'native' EDID either via DDC or via GPU */
|
||||
bool digital; /* screen connection type: analog (VGA) or digital (DVI) */
|
||||
display_timing timing; /* 'native modeline' fetched for screen */
|
||||
float aspect; /* screen's aspect ratio */
|
||||
bool have_full_edid; /* EDID read succesfully via DDC */
|
||||
edid1_info full_edid; /* complete EDID info as fetched via DDC */
|
||||
} edid_specs;
|
||||
|
||||
/* shared info */
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
Other authors:
|
||||
Mark Watson,
|
||||
Rudolf Cornelissen 10/2002-3/2009
|
||||
Rudolf Cornelissen 10/2002-8/2009
|
||||
*/
|
||||
|
||||
#define MODULE_BIT 0x08000000
|
||||
@ -63,6 +63,9 @@ void * get_accelerant_hook(uint32 feature, void *data)
|
||||
HOOK(PROPOSE_DISPLAY_MODE);
|
||||
HOOK(SET_DISPLAY_MODE);
|
||||
HOOK(GET_DISPLAY_MODE);
|
||||
#ifdef __HAIKU__
|
||||
HOOK(GET_EDID_INFO);
|
||||
#endif
|
||||
HOOK(GET_FRAME_BUFFER_CONFIG);
|
||||
HOOK(GET_PIXEL_CLOCK_LIMITS);
|
||||
HOOK(MOVE_DISPLAY);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
Author:
|
||||
Rudolf Cornelissen 7/2004-01/2006
|
||||
Rudolf Cornelissen 7/2004-08/2009
|
||||
*/
|
||||
|
||||
#define MODULE_BIT 0x04000000
|
||||
@ -23,3 +23,57 @@ status_t GET_ACCELERANT_DEVICE_INFO(accelerant_device_info * adi)
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
#ifdef __HAIKU__
|
||||
|
||||
status_t GET_EDID_INFO(void* info, size_t size, uint32* _version)
|
||||
{
|
||||
if ((!si->ps.crtc1_screen.have_full_edid) && (!si->ps.crtc2_screen.have_full_edid)) {
|
||||
LOG(4,("GET_EDID_INFO: EDID info not available\n"));
|
||||
return B_ERROR;
|
||||
}
|
||||
if (size < sizeof(struct edid1_info)) {
|
||||
LOG(4,("GET_EDID_INFO: not enough memory available\n"));
|
||||
return B_BUFFER_OVERFLOW;
|
||||
}
|
||||
|
||||
LOG(4,("GET_EDID_INFO: returning info\n"));
|
||||
|
||||
/* if we have two screens, make the best of it (go for the best compatible info) */
|
||||
if ((si->ps.crtc1_screen.have_full_edid) && (si->ps.crtc2_screen.have_full_edid)) {
|
||||
/* return info on screen with lowest aspect (4:3 takes precedence over ws) */
|
||||
if (si->ps.crtc1_screen.aspect < si->ps.crtc2_screen.aspect)
|
||||
memcpy(info, &si->ps.crtc1_screen.full_edid, sizeof(struct edid1_info));
|
||||
if (si->ps.crtc1_screen.aspect > si->ps.crtc2_screen.aspect)
|
||||
memcpy(info, &si->ps.crtc2_screen.full_edid, sizeof(struct edid1_info));
|
||||
|
||||
/* if both screens have the same aspect, return info on the one with
|
||||
* the lowest native resolution */
|
||||
if (si->ps.crtc1_screen.aspect == si->ps.crtc2_screen.aspect) {
|
||||
if ((si->ps.crtc1_screen.timing.h_display) < (si->ps.crtc2_screen.timing.h_display))
|
||||
memcpy(info, &si->ps.crtc1_screen.full_edid, sizeof(struct edid1_info));
|
||||
if ((si->ps.crtc1_screen.timing.h_display) > (si->ps.crtc2_screen.timing.h_display))
|
||||
memcpy(info, &si->ps.crtc2_screen.full_edid, sizeof(struct edid1_info));
|
||||
|
||||
/* if both screens have the same resolution and aspect, return info on the
|
||||
* one used as main screen */
|
||||
if ((si->ps.crtc1_screen.timing.h_display) == (si->ps.crtc2_screen.timing.h_display)) {
|
||||
if (si->ps.crtc2_prim)
|
||||
memcpy(info, &si->ps.crtc2_screen.full_edid, sizeof(struct edid1_info));
|
||||
else
|
||||
memcpy(info, &si->ps.crtc1_screen.full_edid, sizeof(struct edid1_info));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* there's just one screen of which we have EDID information, return it */
|
||||
if (si->ps.crtc1_screen.have_full_edid)
|
||||
memcpy(info, &si->ps.crtc1_screen.full_edid, sizeof(struct edid1_info));
|
||||
else
|
||||
memcpy(info, &si->ps.crtc2_screen.full_edid, sizeof(struct edid1_info));
|
||||
}
|
||||
|
||||
*_version = EDID_VERSION_1;
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
#endif // __HAIKU__
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
Other authors for NV driver:
|
||||
Mark Watson,
|
||||
Rudolf Cornelissen 9/2002-7/2009
|
||||
Rudolf Cornelissen 9/2002-8/2009
|
||||
*/
|
||||
|
||||
#define MODULE_BIT 0x00400000
|
||||
@ -192,14 +192,14 @@ PROPOSE_DISPLAY_MODE(display_mode *target, const display_mode *low, const displa
|
||||
note:
|
||||
allowing 2 pixels more for horizontal display for the 1366 mode, since multiples of 8
|
||||
are required for the CRTCs horizontal timing programming) */
|
||||
if (si->ps.crtc1_screen.have_edid) {
|
||||
if (si->ps.crtc1_screen.have_native_edid) {
|
||||
if ((target->timing.h_display - 2) > si->ps.crtc1_screen.timing.h_display
|
||||
|| target->timing.v_display > si->ps.crtc1_screen.timing.v_display) {
|
||||
LOG(4, ("PROPOSEMODE: screen at crtc1 can't display requested resolution, aborted.\n"));
|
||||
return B_ERROR;
|
||||
}
|
||||
}
|
||||
if (si->ps.crtc2_screen.have_edid) {
|
||||
if (si->ps.crtc2_screen.have_native_edid) {
|
||||
if ((target->timing.h_display - 2) > si->ps.crtc2_screen.timing.h_display
|
||||
|| target->timing.v_display > si->ps.crtc2_screen.timing.v_display) {
|
||||
LOG(4, ("PROPOSEMODE: screen at crtc2 can't display requested resolution, aborted.\n"));
|
||||
|
@ -2,14 +2,14 @@
|
||||
Copyright 1999, Be Incorporated. All Rights Reserved.
|
||||
This file may be used under the terms of the Be Sample Code License.
|
||||
|
||||
Modified by Rudolf Cornelissen 2/2005.
|
||||
Modified by Rudolf Cornelissen 8/2009.
|
||||
*/
|
||||
|
||||
#if !defined(GENERIC_H)
|
||||
#define GENERIC_H
|
||||
|
||||
#include <Accelerant.h>
|
||||
#include "video_overlay.h"
|
||||
#include <video_overlay.h>
|
||||
|
||||
#define DEBUG 1
|
||||
|
||||
@ -26,6 +26,9 @@ status_t GET_MODE_LIST(display_mode *dm);
|
||||
status_t PROPOSE_DISPLAY_MODE(display_mode *target, const display_mode *low, const display_mode *high);
|
||||
status_t SET_DISPLAY_MODE(display_mode *mode_to_set);
|
||||
status_t GET_DISPLAY_MODE(display_mode *current_mode);
|
||||
#ifdef __HAIKU__
|
||||
status_t GET_EDID_INFO(void* info, size_t size, uint32* _version);
|
||||
#endif
|
||||
status_t GET_FRAME_BUFFER_CONFIG(frame_buffer_config *a_frame_buffer);
|
||||
status_t GET_PIXEL_CLOCK_LIMITS(display_mode *dm, uint32 *low, uint32 *high);
|
||||
status_t MOVE_DISPLAY(uint16 h_display_start, uint16 v_display_start);
|
||||
|
@ -597,7 +597,8 @@ i2c_ExtractSpecsEDID(edid1_info* edid, edid_specs* specs)
|
||||
uint32 i;
|
||||
edid1_detailed_timing edid_timing;
|
||||
|
||||
specs->have_edid = false;
|
||||
specs->have_full_edid = false;
|
||||
specs->have_native_edid = false;
|
||||
specs->timing.h_display = 0;
|
||||
specs->timing.v_display = 0;
|
||||
|
||||
@ -641,9 +642,6 @@ i2c_ExtractSpecsEDID(edid1_info* edid, edid_specs* specs)
|
||||
/* check if we actually got a modeline */
|
||||
if (!specs->timing.h_display || !specs->timing.v_display) return B_ERROR;
|
||||
|
||||
/* we succesfully fetched the specs we need */
|
||||
specs->have_edid = true;
|
||||
|
||||
/* determine screen aspect ratio */
|
||||
specs->aspect =
|
||||
(specs->timing.h_display / ((float)specs->timing.v_display));
|
||||
@ -652,6 +650,14 @@ i2c_ExtractSpecsEDID(edid1_info* edid, edid_specs* specs)
|
||||
specs->digital = false;
|
||||
if (edid->display.input_type) specs->digital = true;
|
||||
|
||||
/* and also copy full edid1_info for reference */
|
||||
memcpy(&(specs->full_edid), edid, sizeof(specs->full_edid));
|
||||
|
||||
/* we succesfully fetched the specs we need */
|
||||
specs->have_native_edid = true;
|
||||
/* we also got full and valid EDID via DDC */
|
||||
specs->have_full_edid = true;
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
@ -659,8 +665,8 @@ i2c_ExtractSpecsEDID(edid1_info* edid, edid_specs* specs)
|
||||
static void
|
||||
i2c_DumpSpecsEDID(edid_specs* specs)
|
||||
{
|
||||
LOG(4,("I2C: specsEDID: have_edid: %s\n", specs->have_edid ? "True" : "False"));
|
||||
if (!specs->have_edid) return;
|
||||
LOG(4,("I2C: specsEDID: have_native_edid: %s\n", specs->have_native_edid ? "True" : "False"));
|
||||
if (!specs->have_native_edid) return;
|
||||
LOG(4,("I2C: specsEDID: timing.pixel_clock %.3f Mhz\n", specs->timing.pixel_clock / 1000.0));
|
||||
LOG(4,("I2C: specsEDID: timing.h_display %d\n", specs->timing.h_display));
|
||||
LOG(4,("I2C: specsEDID: timing.h_sync_start %d\n", specs->timing.h_sync_start));
|
||||
@ -690,8 +696,10 @@ void i2c_DetectScreens(void)
|
||||
{
|
||||
edid1_info edid;
|
||||
|
||||
si->ps.con1_screen.have_edid = false;
|
||||
si->ps.con2_screen.have_edid = false;
|
||||
si->ps.con1_screen.have_native_edid = false;
|
||||
si->ps.con2_screen.have_native_edid = false;
|
||||
si->ps.con1_screen.have_full_edid = false;
|
||||
si->ps.con2_screen.have_full_edid = false;
|
||||
si->ps.con1_screen.aspect = 0;
|
||||
si->ps.con2_screen.aspect = 0;
|
||||
|
||||
@ -734,7 +742,7 @@ void i2c_DetectScreens(void)
|
||||
/* fetch optimum (native) modeline */
|
||||
switch (si->ps.card_arch) {
|
||||
case NV40A:
|
||||
if (!si->ps.con2_screen.have_edid) {
|
||||
if (!si->ps.con2_screen.have_native_edid) {
|
||||
i2c_ExtractSpecsEDID(&edid, &si->ps.con2_screen);
|
||||
} else {
|
||||
LOG(4,("I2C: DetectScreens: WARNING, unexpected behaviour detected!\n"));
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* Read initialisation information from card */
|
||||
/* some bits are hacks, where PINS is not known */
|
||||
/* Author:
|
||||
Rudolf Cornelissen 7/2003-7/2009
|
||||
Rudolf Cornelissen 7/2003-8/2009
|
||||
*/
|
||||
|
||||
#define MODULE_BIT 0x00002000
|
||||
@ -2559,10 +2559,12 @@ static void setup_output_matrix()
|
||||
/* head 1 will be the primary head */
|
||||
si->ps.crtc2_prim = false;
|
||||
/* no screens usable */
|
||||
si->ps.crtc1_screen.have_edid = false;
|
||||
si->ps.crtc1_screen.have_native_edid = false;
|
||||
si->ps.crtc1_screen.have_full_edid = false;
|
||||
si->ps.crtc1_screen.timing.h_display = 0;
|
||||
si->ps.crtc1_screen.timing.v_display = 0;
|
||||
si->ps.crtc2_screen.have_edid = false;
|
||||
si->ps.crtc2_screen.have_native_edid = false;
|
||||
si->ps.crtc2_screen.have_full_edid = false;
|
||||
si->ps.crtc2_screen.timing.h_display = 0;
|
||||
si->ps.crtc2_screen.timing.v_display = 0;
|
||||
|
||||
@ -2576,7 +2578,7 @@ static void setup_output_matrix()
|
||||
/* detect analog monitors. First try EDID, else use load sensing. */
|
||||
/* (load sensing is confirmed working OK on NV04, NV05, NV11, NV18, NV28 and NV34.) */
|
||||
/* primary connector: */
|
||||
if (si->ps.con1_screen.have_edid) {
|
||||
if (si->ps.con1_screen.have_native_edid) {
|
||||
if (!si->ps.con1_screen.digital) si->ps.monitors |= CRTC1_VGA;
|
||||
} else {
|
||||
if (nv_dac_crt_connected()) {
|
||||
@ -2603,7 +2605,7 @@ static void setup_output_matrix()
|
||||
si->ps.crtc1_screen.timing.v_sync_end = si->ps.p1_timing.v_sync_end;
|
||||
si->ps.crtc1_screen.timing.v_total = si->ps.p1_timing.v_total;
|
||||
si->ps.crtc1_screen.timing.flags = si->ps.p1_timing.flags;
|
||||
si->ps.crtc1_screen.have_edid = true;
|
||||
si->ps.crtc1_screen.have_native_edid = true;
|
||||
si->ps.crtc1_screen.aspect =
|
||||
(si->ps.p1_timing.h_display / ((float)si->ps.p1_timing.v_display));
|
||||
si->ps.crtc1_screen.digital = true;
|
||||
@ -2633,7 +2635,7 @@ static void setup_output_matrix()
|
||||
si->ps.crtc2_screen.timing.v_sync_end = si->ps.p2_timing.v_sync_end;
|
||||
si->ps.crtc2_screen.timing.v_total = si->ps.p2_timing.v_total;
|
||||
si->ps.crtc2_screen.timing.flags = si->ps.p2_timing.flags;
|
||||
si->ps.crtc2_screen.have_edid = true;
|
||||
si->ps.crtc2_screen.have_native_edid = true;
|
||||
si->ps.crtc2_screen.aspect =
|
||||
(si->ps.p2_timing.h_display / ((float)si->ps.p2_timing.v_display));
|
||||
si->ps.crtc2_screen.digital = true;
|
||||
@ -2648,7 +2650,7 @@ static void setup_output_matrix()
|
||||
/* (load sensing is confirmed working OK on NV18, NV28 and NV34.) */
|
||||
|
||||
/* secondary connector */
|
||||
if (si->ps.con2_screen.have_edid) {
|
||||
if (si->ps.con2_screen.have_native_edid) {
|
||||
if (!si->ps.con2_screen.digital) si->ps.monitors |= CRTC2_VGA;
|
||||
} else {
|
||||
if (nv_dac2_crt_connected()) {
|
||||
|
@ -4,6 +4,7 @@ SetSubDirSupportedPlatformsBeOSCompatible ;
|
||||
|
||||
UsePrivateHeaders graphics ;
|
||||
UsePrivateHeaders [ FDirName graphics nvidia ] ;
|
||||
UsePrivateHeaders [ FDirName graphics common ] ;
|
||||
|
||||
KernelAddon nvidia :
|
||||
driver.c
|
||||
|
@ -45,12 +45,13 @@ Geforce 8xxx and later series cards (NV50, G80, also known as GPGPU, general pur
|
||||
<li>Basic AGP mode support on AGP cards, using the new (seperate) Haiku AGP busmanager;
|
||||
<li>Basic ('legacy') PCIe support;
|
||||
<li>Coldstart support for analog connected screens on most cards except TNT1, GeForce 6xxx and 7xxx series;
|
||||
<li>TVout support on cards with Brooktree BT868/BT869 and Conexant CX25870/CX25871 encoders (use 'Dualhead Setup' <strong>0.04</strong> from BeBits for now).
|
||||
<li>TVout support on cards with Brooktree BT868/BT869 and Conexant CX25870/CX25871 encoders (use 'Dualhead Setup' <strong>0.04</strong> from BeBits for now);
|
||||
<li>DDC/EDID support for monitor capability detection.
|
||||
</ul>
|
||||
<strong>Known limitations:</strong>
|
||||
<ul>
|
||||
<li>If you want BScreen 'Sync_to_Retrace' capability make sure you enabled 'assign IRQ to VGA card' in your system BIOS (if available);
|
||||
<li>If the driver still seems to create 'random' trouble make sure you have a fully functional VGA BIOS, or system BIOS for embedded cards (check for updates on the manufacturor's site). Make sure you mail me if you still have trouble but also if this version fixed that!
|
||||
<li>If the driver seems to create 'random' trouble make sure you have a fully functional VGA BIOS, or system BIOS for embedded cards (check for updates on the manufacturor's site). Make sure you mail me if you still have trouble but also if this version fixed that!
|
||||
<li>If on a laptop the internal panel doesn't work when you connect an external monitor, make sure you set 'output device selection' to 'internal' (instead of 'auto') in the system BIOS if it has such an option. If you have this symptom on a normal card, or on a laptop without that BIOS option then you are probably out of luck for dualhead support;
|
||||
<li><strong>NV40 architecture cards:</strong> (GeForce 6xxx, but 6800 AGP seems to be OK)<br>
|
||||
Secondary analog monitor load detection doesn't work and we can't control very well to which connector the card's output gets routed (lack of specs). This means you might have to experiment a bit with the way you connect your monitor to the card. A single analog or DVI screen should work OK, and two analog screens should be OK as well.
|
||||
@ -93,13 +94,13 @@ You have to reboot in order to apply the original configuration.<br>
|
||||
<hr>
|
||||
<a name="settings"></a><h2>Settings:</h2><br>
|
||||
Please read this information carefully *before* installing and using the Haiku Nvidia TNT/GeForce graphics driver. It might spare you some trouble afterwards..<br>
|
||||
<p>The driver uses a file named <strong>nv.settings</strong> to determine how to use your card. After installation this file will be located at <strong>home/config/settings/kernel/drivers/</strong>. How you should setup this file depends on what you want to do with the driver. While it has a 'failsave' default configuration, you might be able to do better than that... Anyway, read the nifty details below.<br>
|
||||
<p>The driver uses a file named <strong>nvidia.settings</strong> to determine how to use your card. After installation this file will be located at <strong>home/config/settings/kernel/drivers/</strong>. How you should setup this file depends on what you want to do with the driver. While it has a 'failsave' default configuration, you might be able to do better than that... Anyway, read the nifty details below.<br>
|
||||
<br>
|
||||
<strong>Note:</strong> The driver only reads this file during it's initialisation. This means that you have to reboot in order to let changes take effect.<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<strong>nv.settings driver configuration:</strong><br>
|
||||
<strong>nvidia.settings driver configuration:</strong><br>
|
||||
<ul>
|
||||
<li><strong>usebios:</strong><br>
|
||||
The name of this item may be somewhat misleading, it might be changed in the future. It actually tells the driver if it should coldstart the card or not. The driver will rely on the VGA BIOS to have coldstarted the card before BeOS booted if you specify 'true'.<br>
|
||||
@ -252,7 +253,7 @@ The acceleration engine is disabled.
|
||||
</ul>
|
||||
<hr>
|
||||
<br>
|
||||
<a href="mailto:info.be-hold@inter.nl.net">Rudolf Cornelissen.</a>
|
||||
<p>(Page last updated on June 23, 2009)</p>
|
||||
Rudolf Cornelissen.<br>
|
||||
<p>(Page last updated on August 23, 2009)</p>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -4,7 +4,7 @@
|
||||
</head>
|
||||
<body>
|
||||
<p><h2>Changes done for each driverversion:</h2></p>
|
||||
<p><h1>head (SVN 0.94, Rudolf)</h1></p>
|
||||
<p><h1>head (SVN 0.96, Rudolf)</h1></p>
|
||||
<ul>
|
||||
<li>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.
|
||||
<li>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,11 +18,12 @@
|
||||
<li>Added 'block_acc' option in nvidia.settings to completely disable the acceleration engine. Use this as a work-around if the acceleration engine misbehaves.
|
||||
<li>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.
|
||||
<li>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.
|
||||
<li>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).
|
||||
<li>Added DDC/EDID support: detecting connected screens, doing widescreen autodetection, checking max. resolutions when setting a mode, returning full EDID info to the app_server when requested (implemented new haiku-specific driverhook GET_EDID_INFO). Haiku's screen preferences panel should now only offer screen-compatible modes.
|
||||
<li>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.
|
||||
<li>Fixed acceleration engine crashes on at least G72 cards (Geforce 7300/7400/7500) by powering up new part(s) of the acceleration engines too..
|
||||
<li>Modified GPU PTimer programming which according to the Nouveau project fixes LVDS panel programming in some cases.
|
||||
<li>Corrected/Added detection of third I2C bus on cards that support it. The old detection method for a third and (non-existing) fourth bus was faulty. The driver uses I2C channels for monitor DDC/EDID and TVencoder communications.
|
||||
<li>DDC/EDID fetching now also works on GCC4 binaries due to a fixed fault in the accelerants/common code (which is used for that function).
|
||||
</ul>
|
||||
<p><h1>nv_driver 0.80 (Rudolf)</h1></p>
|
||||
<ul>
|
||||
|
Loading…
Reference in New Issue
Block a user