added dualhead switch mode

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6403 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Rudolf Cornelissen
2004-01-29 10:37:50 +00:00
parent 162cf2d0a5
commit 203b86df50
5 changed files with 46 additions and 45 deletions
@@ -478,11 +478,13 @@
#define NVDAC_CURPOS 0x00680300 #define NVDAC_CURPOS 0x00680300
#define NVDAC_PIXPLLC 0x00680508 #define NVDAC_PIXPLLC 0x00680508
#define NVDAC_PLLSEL 0x0068050c #define NVDAC_PLLSEL 0x0068050c
#define NVDAC_OUTPUT 0x0068052c
#define NVDAC_PIXPLLC2 0x00680578 /* NV31, NV36 only */ #define NVDAC_PIXPLLC2 0x00680578 /* NV31, NV36 only */
#define NVDAC_GENCTRL 0x00680600 #define NVDAC_GENCTRL 0x00680600
/* secondary head */ /* secondary head */
#define NVDAC2_CURPOS 0x00682300 #define NVDAC2_CURPOS 0x00682300
#define NVDAC2_PIXPLLC 0x00680520 #define NVDAC2_PIXPLLC 0x00680520
#define NVDAC2_OUTPUT 0x0068252c
#define NVDAC2_PIXPLLC2 0x0068057c /* NV31, NV36 only */ #define NVDAC2_PIXPLLC2 0x0068057c /* NV31, NV36 only */
#define NVDAC2_GENCTRL 0x00682600 #define NVDAC2_GENCTRL 0x00682600
+11 -27
View File
@@ -182,31 +182,26 @@ status_t SET_DISPLAY_MODE(display_mode *mode_to_set)
nv_crtc2_set_display_pitch (); nv_crtc2_set_display_pitch ();
/*work out where the "right" screen starts*/ /*work out where the "right" screen starts*/
startadd_right=startadd+(target.timing.h_display * (colour_depth1 >> 3)); startadd_right = startadd + (target.timing.h_display * (colour_depth1 >> 3));
/* set the outputs */ /* set the outputs if possible */
switch (si->ps.card_type) if (si->ps.secondary_head)
{ {
//fixme..
case G550:
switch (target.flags & DUALHEAD_BITS) switch (target.flags & DUALHEAD_BITS)
{ {
case DUALHEAD_ON: case DUALHEAD_ON:
case DUALHEAD_CLONE: case DUALHEAD_CLONE:
//fixme: set output connectors only /* connect outputs straight-through */
nv_general_dac_select(DS_CRTC1DAC_CRTC2MAVEN); nv_general_output_select(false);
break; break;
case DUALHEAD_SWITCH: case DUALHEAD_SWITCH:
//fixme: set output connectors only /* cross-connect outputs */
nv_general_dac_select(DS_CRTC1MAVEN_CRTC2DAC); nv_general_output_select(true);
break; break;
} }
break;
default:
break;
} }
/*Tell card what memory to display*/ /* Tell card what memory to display */
switch (target.flags & DUALHEAD_BITS) switch (target.flags & DUALHEAD_BITS)
{ {
case DUALHEAD_ON: case DUALHEAD_ON:
@@ -262,23 +257,12 @@ status_t SET_DISPLAY_MODE(display_mode *mode_to_set)
/* tell the card what memory to display */ /* tell the card what memory to display */
nv_crtc_set_display_start(startadd,colour_depth1); nv_crtc_set_display_start(startadd,colour_depth1);
/* enable primary analog output */
switch (si->ps.card_type)
{
case NV11:
// nv_general_dac_select(DS_CRTC1DAC_CRTC2MAVEN);
break;
case NV17:
// nv_general_dac_select(DS_CRTC1CON1_CRTC2CON2);
// gx50_general_output_select();
break;
default:
break;
}
/* set the timing */ /* set the timing */
nv_crtc_set_timing(target); nv_crtc_set_timing(target);
/* connect outputs straight-through */
if (si->ps.secondary_head) nv_general_output_select(false);
//fixme: shut-off the videoPLL if it exists... //fixme: shut-off the videoPLL if it exists...
} }
@@ -80,7 +80,7 @@ status_t nv_general_powerup()
{ {
status_t status; status_t status;
LOG(1,("POWERUP: nVidia (open)BeOS Accelerant 0.08-9 running.\n")); LOG(1,("POWERUP: nVidia (open)BeOS Accelerant 0.08-10 running.\n"));
/* preset no laptop */ /* preset no laptop */
si->ps.laptop = false; si->ps.laptop = false;
@@ -789,31 +789,45 @@ return nv_general_bios_to_powergraphics();
return B_OK; return B_OK;
} }
status_t gx50_general_output_select() status_t nv_general_output_select(bool cross)
{ {
/* make sure this call is warranted */ /* make sure this call is warranted */
if ((si->ps.card_type != NV11) && (si->ps.card_type != NV17)) return B_ERROR; if (si->ps.secondary_head)
/* choose primary analog outputconnector */
if ((si->ps.primary_dvi) && (si->ps.secondary_head) && (si->ps.tvout))
{ {
if (i2c_sec_tv_adapter() == B_OK) /* NV11 cards can't switch heads */
if (si->ps.card_type != NV11)
{ {
LOG(4,("INIT: secondary TV-adapter detected, using primary connector\n")); if (cross)
// DXIW(OUTPUTCONN,0x01); {
LOG(4,("INIT: switching outputs to be cross-connected\n"));
/* enable head 2 on connector 1 */
/* (b8 = select head for output,
* b0 = enable sync signals on output (if generated)) */
DACW(OUTPUT, 0x00000101);
/* enable head 1 on connector 2 */
DAC2W(OUTPUT, 0x00000001);
}
else
{
LOG(4,("INIT: switching outputs to be straight-through\n"));
/* enable head 1 on connector 1 */
DACW(OUTPUT, 0x00000001);
/* enable head 2 on connector 2 */
DAC2W(OUTPUT, 0x00000101);
}
} }
else else
{ {
LOG(4,("INIT: no secondary TV-adapter detected, using secondary connector\n")); LOG(4,("INIT: NV11 outputs are hardwired to be straight-through\n"));
// DXIW(OUTPUTCONN,0x04);
} }
return B_OK;
} }
else else
{ {
LOG(4,("INIT: using primary connector\n")); return B_ERROR;
// DXIW(OUTPUTCONN,0x01);
} }
return B_OK;
} }
/*connect CRTC1 to the specified DAC*/ /*connect CRTC1 to the specified DAC*/
@@ -1,7 +1,7 @@
/*general card functions*/ /*general card functions*/
status_t nv_general_powerup(void); status_t nv_general_powerup(void);
status_t nv_set_cas_latency(void); status_t nv_set_cas_latency(void);
status_t gx50_general_output_select(void); status_t nv_general_output_select(bool cross);
status_t nv_general_dac_select(int); status_t nv_general_dac_select(int);
status_t nv_general_wait_retrace(void); status_t nv_general_wait_retrace(void);
status_t nv_general_validate_pic_size (display_mode *target, uint32 *bytes_per_row, bool *acc_mode); status_t nv_general_validate_pic_size (display_mode *target, uint32 *bytes_per_row, bool *acc_mode);
@@ -4,7 +4,7 @@
</head> </head>
<body> <body>
<p><h2>Changes done for each driverversion:</h2></p> <p><h2>Changes done for each driverversion:</h2></p>
<p><h1>head (0.08-9, Rudolf)</h1></p> <p><h1>head (0.08-10, Rudolf)</h1></p>
<ul> <ul>
<li>Fixed GeForceFX 5600 and FX 5700 monitor 'refresh out of range' / shutoff fault. nVidia changed the pixelPLL for the NV31 and NV36; <li>Fixed GeForceFX 5600 and FX 5700 monitor 'refresh out of range' / shutoff fault. nVidia changed the pixelPLL for the NV31 and NV36;
<li>Fixed acceleration engine restrictions code to adhere to GeForceFX 5600 restrictions: those are still NV20 style for this card; <li>Fixed acceleration engine restrictions code to adhere to GeForceFX 5600 restrictions: those are still NV20 style for this card;
@@ -16,11 +16,12 @@
<li>Added card recognition for GeForceFX 5700, FX 5950 and some other (older) cards; <li>Added card recognition for GeForceFX 5700, FX 5950 and some other (older) cards;
<li>Added 256Mb RAM detection; <li>Added 256Mb RAM detection;
<li>Improved startup code: this should (could) fix random trouble on some cards like for instance hardcursor trouble on especially laptops; <li>Improved startup code: this should (could) fix random trouble on some cards like for instance hardcursor trouble on especially laptops;
<li>Added dualhead support (use Mark Watson's 'G400 Dualhead Setup' from BeBits for now): Note that dualhead switch mode still has to be setup; <li>Added dualhead support (use Mark Watson's 'G400 Dualhead Setup' from BeBits for now);
<li>Updated mode granularity and max virtual size checking/limiting to adhere to new CRTC setup for dualhead cards; <li>Updated mode granularity and max virtual size checking/limiting to adhere to new CRTC setup for dualhead cards;
<li>Added dualhead support for 8- and 15bit colordepths; <li>Added dualhead support for 8- and 15bit colordepths;
<li>Fixed move_display distortions in virtualscreens especially visible in 8-bit colordepth (for both heads); <li>Fixed move_display distortions in virtualscreens especially visible in 8-bit colordepth (for both heads);
<li>Added 'overlay follows head' for dualhead stretch and switch modes: if more than half the overlay output is on a screen, that screen gets the overlay output. <li>Added 'overlay follows head' for dualhead stretch and switch modes: if more than half the overlay output window is on a screen, that screen gets the overlay output;
<li>Added dualhead switch mode.
</ul> </ul>
<p><h1>nv_driver 0.07 (Rudolf)</h1></p> <p><h1>nv_driver 0.07 (Rudolf)</h1></p>
<ul> <ul>