added preliminary flatpanel detection stuff
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6844 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
Other authors:
|
||||
Mark Watson;
|
||||
Apsed;
|
||||
Rudolf Cornelissen 10/2002-1/2004.
|
||||
Rudolf Cornelissen 10/2002-2/2004.
|
||||
*/
|
||||
|
||||
#ifndef DRIVERINTERFACE_H
|
||||
@@ -200,10 +200,11 @@ typedef struct {
|
||||
CH7005,
|
||||
CH7006,
|
||||
CH7007,
|
||||
CH7008,
|
||||
SAA7102,
|
||||
SAA7103,
|
||||
SAA7104,
|
||||
SAA7108,
|
||||
SAA7114,
|
||||
SAA7105,
|
||||
BT868,
|
||||
BT869,
|
||||
CX25870,
|
||||
@@ -219,6 +220,8 @@ typedef struct {
|
||||
uint32 card_type; /* see card_type enum above */
|
||||
uint32 card_arch; /* see card_arch enum above */
|
||||
bool laptop; /* mobile chipset or not ('internal' flatpanel!) */
|
||||
uint16 panel_width; /* native horizontal resolution for laptop panels */
|
||||
uint16 panel_height; /* navive vertical resolution for laptop panels */
|
||||
uint32 tvout_chip_type; /* see tvchip_type enum above */
|
||||
status_t pins_status; /* B_OK if read correctly, B_ERROR if faked */
|
||||
bool sdram; /* TRUE if SDRAM card: needed info for 2D acceleration */
|
||||
|
||||
@@ -482,6 +482,9 @@
|
||||
#define NVDAC_GENCTRL 0x00680600
|
||||
#define NVDAC_TSTCTRL 0x00680608
|
||||
#define NVDAC_TSTDATA 0x00680610
|
||||
/* (flatpanel registers) */
|
||||
#define NVDAC_FP_VDISPEND 0x00680800
|
||||
#define NVDAC_FP_HDISPEND 0x00680820
|
||||
/* secondary head */
|
||||
#define NVDAC2_CURPOS 0x00682300
|
||||
#define NVDAC2_PIXPLLC 0x00680520
|
||||
@@ -489,6 +492,9 @@
|
||||
#define NVDAC2_PIXPLLC2 0x0068057c /* NV31, NV36 only */
|
||||
#define NVDAC2_GENCTRL 0x00682600
|
||||
#define NVDAC2_TSTCTRL 0x00682608
|
||||
/* (flatpanel registers) */
|
||||
#define NVDAC2_FP_VDISPEND 0x00682800
|
||||
#define NVDAC2_FP_HDISPEND 0x00682820
|
||||
|
||||
/* Nvidia CRTC indexed registers */
|
||||
/* VGA standard registers: */
|
||||
@@ -524,6 +530,7 @@
|
||||
#define NVCRTCX_CURCTL2 0x2f
|
||||
#define NVCRTCX_CURCTL1 0x30
|
||||
#define NVCRTCX_CURCTL0 0x31
|
||||
#define NVCRTCX_LCD 0x33
|
||||
#define NVCRTCX_INTERLACE 0x39
|
||||
#define NVCRTCX_EXTRA 0x41
|
||||
#define NVCRTCX_OWNER 0x44
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* Authors:
|
||||
Mark Watson 12/1999,
|
||||
Apsed,
|
||||
Rudolf Cornelissen 10/2002-2/2004
|
||||
Rudolf Cornelissen 10/2002-3/2004
|
||||
*/
|
||||
|
||||
#define MODULE_BIT 0x00008000
|
||||
@@ -80,7 +80,7 @@ status_t nv_general_powerup()
|
||||
{
|
||||
status_t status;
|
||||
|
||||
LOG(1,("POWERUP: nVidia (open)BeOS Accelerant 0.09-final running.\n"));
|
||||
LOG(1,("POWERUP: nVidia (open)BeOS Accelerant 0.10-1 running.\n"));
|
||||
|
||||
/* preset no laptop */
|
||||
si->ps.laptop = false;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* Read initialisation information from card */
|
||||
/* some bits are hacks, where PINS is not known */
|
||||
/* Author:
|
||||
Rudolf Cornelissen 7/2003-1/2004
|
||||
Rudolf Cornelissen 7/2003-3/2004
|
||||
*/
|
||||
|
||||
#define MODULE_BIT 0x00002000
|
||||
@@ -241,6 +241,73 @@ void fake_pins(void)
|
||||
si->ps.tvout_chip_type = ???;
|
||||
}
|
||||
*/
|
||||
|
||||
/* detect if the BIOS enabled a LCD (internal panel or DVI) or TVout */
|
||||
{
|
||||
/* both TMDS transmitters (used for LCD/DVI) and TVencoders are slave devices */
|
||||
bool slavedev1_active = false, slavedev2_active = false;
|
||||
bool tvout1_active = false, tvout2_active = false;
|
||||
|
||||
/* check primary head: */
|
||||
/* enable access to CRTC1 on dualhead cards */
|
||||
if (si->ps.secondary_head) CRTCW(OWNER, 0x00);
|
||||
|
||||
/* unlock CRTC1 */
|
||||
CRTCW(LOCK, 0x57);
|
||||
CRTCW(VSYNCE ,(CRTCR(VSYNCE) & 0x7f));
|
||||
/* detect active slave device (if any) */
|
||||
slavedev1_active = (CRTCR(PIXEL) & 0x80);
|
||||
if (slavedev1_active)
|
||||
{
|
||||
/* if the panel isn't selected, tvout is.. */
|
||||
tvout1_active = !(CRTCR(LCD) & 0x01);
|
||||
}
|
||||
|
||||
if (si->ps.secondary_head)
|
||||
{
|
||||
/* check secondary head: */
|
||||
/* enable access to CRTC2 */
|
||||
CRTCW(OWNER, 0x03);
|
||||
/* unlock CRTC2 */
|
||||
CRTCW(LOCK, 0x57);
|
||||
CRTCW(VSYNCE ,(CRTCR(VSYNCE) & 0x7f));
|
||||
/* detect active slave device (if any) */
|
||||
slavedev2_active = (CRTCR(PIXEL) & 0x80);
|
||||
if (slavedev2_active)
|
||||
{
|
||||
/* if the panel isn't selected, tvout is.. */
|
||||
tvout2_active = !(CRTCR(LCD) & 0x01);
|
||||
}
|
||||
}
|
||||
|
||||
/* fixme: doing some logging, but (also) use for DVI outputs on non-laptops.. */
|
||||
if (slavedev1_active && ! tvout1_active)
|
||||
{
|
||||
LOG(2,("CRTC1 is currently programmed for DFP\n"));
|
||||
LOG(2,("panel size is %d x %d\n",
|
||||
((DACR(FP_HDISPEND) & 0x0000ffff) + 1),
|
||||
((DACR(FP_VDISPEND) & 0x0000ffff) + 1)));
|
||||
}
|
||||
if (slavedev2_active && ! tvout2_active)
|
||||
{
|
||||
LOG(2,("CRTC2 is currently programmed for DFP\n"));
|
||||
LOG(2,("panel size is %d x %d\n",
|
||||
((DAC2R(FP_HDISPEND) & 0x0000ffff) + 1),
|
||||
((DAC2R(FP_VDISPEND) & 0x0000ffff) + 1)));
|
||||
}
|
||||
|
||||
/* fixme?: assuming laptop panel always on CRTC1 for now... */
|
||||
if (si->ps.laptop)
|
||||
{
|
||||
si->ps.panel_width = ((DACR(FP_HDISPEND) & 0x0000ffff) + 1);
|
||||
si->ps.panel_height = ((DACR(FP_VDISPEND) & 0x0000ffff) + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
si->ps.panel_width = 0;
|
||||
si->ps.panel_height = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void pinsnv4_fake(void)
|
||||
@@ -666,17 +733,20 @@ void dump_pins(void)
|
||||
case CH7007:
|
||||
msg = "Chrontel CH7007";
|
||||
break;
|
||||
case CH7008:
|
||||
msg = "Chrontel CH7008";
|
||||
break;
|
||||
case SAA7102:
|
||||
msg = "Philips SAA7102";
|
||||
break;
|
||||
case SAA7103:
|
||||
msg = "Philips SAA7103";
|
||||
break;
|
||||
case SAA7104:
|
||||
msg = "Philips SAA7104";
|
||||
break;
|
||||
case SAA7108:
|
||||
msg = "Philips SAA7108";
|
||||
break;
|
||||
case SAA7114:
|
||||
msg = "Philips SAA7114";
|
||||
case SAA7105:
|
||||
msg = "Philips SAA7105";
|
||||
break;
|
||||
case BT868:
|
||||
msg = "Brooktree/Conexant BT868";
|
||||
@@ -707,5 +777,11 @@ void dump_pins(void)
|
||||
if (si->ps.sdram) LOG(2,("SDRAM card\n")); else LOG(2,("SGRAM card\n"));
|
||||
LOG(2,("laptop: "));
|
||||
if (si->ps.laptop) LOG(2,("yes\n")); else LOG(2,("no\n"));
|
||||
//fixme: testing...
|
||||
// if (si->ps.laptop)
|
||||
{
|
||||
LOG(2,("panel width: %d\n", si->ps.panel_width));
|
||||
LOG(2,("panel height: %d\n", si->ps.panel_height));
|
||||
}
|
||||
LOG(2,("INFO: end pinsdump.\n"));
|
||||
}
|
||||
|
||||
@@ -4,6 +4,10 @@
|
||||
</head>
|
||||
<body>
|
||||
<p><h2>Changes done for each driverversion:</h2></p>
|
||||
<p><h1>head (0.10-1), (Rudolf)</h1></p>
|
||||
<ul>
|
||||
<li>Trying to detect digital flatpanels... (preliminary stuff)
|
||||
</ul>
|
||||
<p><h1>nv_driver 0.09, (Rudolf)</h1></p>
|
||||
<ul>
|
||||
<li>Fixed NV11 trouble with repeating screen(s) on the right side of the monitor;
|
||||
|
||||
Reference in New Issue
Block a user