fixed CRTC1 DPMS fault!

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6521 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Rudolf Cornelissen 2004-02-07 15:53:38 +00:00
parent b7af05771d
commit ae40d46cc6
4 changed files with 43 additions and 9 deletions

View File

@ -4,7 +4,7 @@
Other authors: Other authors:
Mark Watson, Mark Watson,
Rudolf Cornelissen 10/2002-1/2004. Rudolf Cornelissen 10/2002-2/2004.
*/ */
#define MODULE_BIT 0x00800000 #define MODULE_BIT 0x00800000
@ -114,7 +114,7 @@ status_t INIT_ACCELERANT(int the_fd) {
if (result != B_OK) goto error0; if (result != B_OK) goto error0;
// LOG now available: !NULL si // LOG now available: !NULL si
/* signal CRTC2 DPMS on G450/G550 which connector to program (before powerup) */ /* assume G450/G550 signals are connected straight through (before powerup) */
si->crossed_conns = false; si->crossed_conns = false;
/* call the device specific init code */ /* call the device specific init code */

View File

@ -5,7 +5,7 @@
Other authors: Other authors:
Mark Watson, Mark Watson,
Apsed, Apsed,
Rudolf Cornelissen 11/2002-1/2004 Rudolf Cornelissen 11/2002-2/2004
*/ */
#define MODULE_BIT 0x00200000 #define MODULE_BIT 0x00200000

View File

@ -2,7 +2,7 @@
/* Authors: /* Authors:
Mark Watson 2/2000, Mark Watson 2/2000,
Apsed, Apsed,
Rudolf Cornelissen 11/2002-1/2004 Rudolf Cornelissen 11/2002-2/2004
*/ */
#define MODULE_BIT 0x00040000 #define MODULE_BIT 0x00040000
@ -315,6 +315,21 @@ status_t gx00_crtc_dpms(bool display, bool h, bool v) // MIL2
VGAW_I(CRTC,0x17,0xC3); VGAW_I(CRTC,0x17,0xC3);
VGAW_I(CRTC,0x14,0x00); VGAW_I(CRTC,0x14,0x00);
/* make sure CRTC1 sync is patched through on connector on G450/G550! */
if (si->ps.card_type >= G450)
{
if (si->crossed_conns)
{
/* patch through HD15 hsync and vsync unmodified */
DXIW(SYNCCTRL, (DXIR(SYNCCTRL) & 0x0f));
}
else
{
/* patch through DVI-A hsync and vsync unmodified */
DXIW(SYNCCTRL, (DXIR(SYNCCTRL) & 0xf0));
}
}
return B_OK; return B_OK;
} }

View File

@ -1,7 +1,7 @@
/* Authors: /* Authors:
Mark Watson 12/1999, Mark Watson 12/1999,
Apsed, Apsed,
Rudolf Cornelissen 10/2002-1/2004 Rudolf Cornelissen 10/2002-2/2004
*/ */
#define MODULE_BIT 0x00008000 #define MODULE_BIT 0x00008000
@ -54,7 +54,7 @@ status_t gx00_general_powerup()
status_t status; status_t status;
uint32 card_class; uint32 card_class;
LOG(1,("POWERUP: Matrox (open)BeOS Accelerant 0.16-1 running.\n")); LOG(1,("POWERUP: Matrox (open)BeOS Accelerant 0.16-2 running.\n"));
/* detect card type and power it up */ /* detect card type and power it up */
switch(CFGR(DEVID)) switch(CFGR(DEVID))
@ -603,6 +603,17 @@ status_t g450_general_powerup()
/* log the PINS struct settings */ /* log the PINS struct settings */
dump_pins(); dump_pins();
//test:
//gx50_general_output_select();
/* check output connector setup */
if (si->ps.primary_dvi && si->ps.secondary_head &&
si->ps.secondary_tvout && (i2c_sec_tv_adapter() != B_OK))
{
/* signal CRTC2 DPMS which connector to program or readout */
si->crossed_conns = true;
}
/* if the user doesn't want a coldstart OR the BIOS pins info could not be found warmstart */ /* if the user doesn't want a coldstart OR the BIOS pins info could not be found warmstart */
if (si->settings.usebios || (result != B_OK)) return gx00_general_bios_to_powergraphics(); if (si->settings.usebios || (result != B_OK)) return gx00_general_bios_to_powergraphics();
@ -729,7 +740,8 @@ status_t g450_general_powerup()
/*turn on display one*/ /*turn on display one*/
gx00_crtc_dpms(true, true, true); gx00_crtc_dpms(true, true, true);
/* enable 'straight-through' sync outputs on both analog output connectors */ /* enable 'straight-through' sync outputs on both analog output connectors and
* make sure CRTC1 sync outputs are patched through! */
DXIW(SYNCCTRL,0x00); DXIW(SYNCCTRL,0x00);
return B_OK; return B_OK;
@ -741,23 +753,29 @@ status_t gx50_general_output_select()
if ((si->ps.card_type != G450) && (si->ps.card_type != G550)) return B_ERROR; if ((si->ps.card_type != G450) && (si->ps.card_type != G550)) return B_ERROR;
/* choose primary analog outputconnector */ /* choose primary analog outputconnector */
if ((si->ps.primary_dvi) && (si->ps.secondary_head) && (si->ps.secondary_tvout)) if (si->ps.primary_dvi && si->ps.secondary_head && si->ps.secondary_tvout)
{ {
if (i2c_sec_tv_adapter() == B_OK) if (i2c_sec_tv_adapter() == B_OK)
{ {
LOG(4,("INIT: secondary TV-adapter detected, using primary connector\n")); LOG(4,("INIT: secondary TV-adapter detected, using primary connector\n"));
DXIW(OUTPUTCONN,0x01); DXIW(OUTPUTCONN,0x01);
/* signal CRTC2 DPMS which connector to program */
si->crossed_conns = false;
} }
else else
{ {
LOG(4,("INIT: no secondary TV-adapter detected, using secondary connector\n")); LOG(4,("INIT: no secondary TV-adapter detected, using secondary connector\n"));
DXIW(OUTPUTCONN,0x04); DXIW(OUTPUTCONN,0x04);
/* signal CRTC2 DPMS which connector to program */
si->crossed_conns = true;
} }
} }
else else
{ {
LOG(4,("INIT: using primary connector\n")); LOG(4,("INIT: using primary connector\n"));
DXIW(OUTPUTCONN,0x01); DXIW(OUTPUTCONN,0x01);
/* signal CRTC2 DPMS which connector to program */
si->crossed_conns = false;
} }
return B_OK; return B_OK;
} }
@ -875,7 +893,8 @@ status_t gx00_general_bios_to_powergraphics()
case G550: case G550:
/* power up everything except DVI electronics (for now) */ /* power up everything except DVI electronics (for now) */
DXIW(PWRCTRL,0x1b); DXIW(PWRCTRL,0x1b);
/* enable 'straight-through' sync outputs on both analog output connectors */ /* enable 'straight-through' sync outputs on both analog output
* connectors and make sure CRTC1 sync outputs are patched through! */
DXIW(SYNCCTRL,0x00); DXIW(SYNCCTRL,0x00);
break; break;
default: default: