Intel 855GME graphic driver woes....

J

jrevanswork

I'm working on an embedded product using a Freetech P8F216 mobo with a
Celeron-M 1.4 processor and the Intel 855GME (ICH-4) chipset. I have
XPE SP2 and a decent image (with EWF) that works well. As for my video
woes, I am trying to use the "Intel(R) Embedded Graphics driver package
for Microsoft* Windows* Version 4.1, October 2005" driver
(IEGD_4_1_Windows), but I have two problems.

1.) If I power up the system without anything plugged into the VGA
port, the driver defaults to the internal LVDS connection, which we
don't use, and then the output never comes back to the VGA connector
unless you boot into safe mode. I found a cheesy way of getting around
this: I deleted lvds.sys from the drivers directory, so the LVDS stuff
doesn't work, but I doubt that is the best solution.

2.) The IEGD_4_1_Windows driver has a problem rendering Java stuff. I
have JRE 1.5 installed on the system, and just going to Control Panel
and clicking on the Java icon will result in parts of the dialog not
being displayed properly. It's very odd. To see if it was driver
related, I installed the big, non-embedded XP Pro driver (Driver
Revision: 6.14.10.4421, Package: 25033, Production Version
14.18.0.4421, November 9, 2005) and then the Java works. The problem
that I have with this solution, is that problem number one occurs again
and I can't just simply delete a .sys file to fix it. I have tried
disabling the LVDS output device in device manager, deleting it's
existance from registry, making sure that single display output is
selected, etc. I just can't find a solution. Could I be missing a
component in my XPE build that gets manually installed when I install
the XP Pro version of the driver?


I contacted Intel and this is what they said:

============================
1. This is expected behavior. The fact that the monitor was
disconnected is seen as a hardware change, which will revert the
settings as you are seeing. This is how the Intel(R) drivers work and
not an issue.

2. This issue has not been duplicated nor has it been reported by other
customers. Please contact Sun* Microsystems for additional information
and troubleshooting assistance.
============================


So, if I setup the intel driver to be "single display", "VGA port only"
and don't plug a monitor into the VGA port, they think it's okay to
switch the output to the LVDS connector, which isn't even used on my
system? That's not acceptable to me and I need to find a way to disable
this.

And I don't believe that the other problem is Sun's fault, since just
updating the Intel driver (from the XPE ver to XP Pro ver fixes the
problem).

Anyone have any ideas on how to get around my two problems? If I can
get the XP Embedded driver to properly display Java stuff, then I'd be
okay, because I can use my "delete lvds.sys" fix. Otherwise, I need to
figure out how to force the XP Pro driver to never use the LVDS output,
which I can't seem to do.

Jim Evans
R&D Software Engineer
 
N

No Never

Dear Jim,
1. This is expected behavior. The fact that the monitor was
disconnected is seen as a hardware change, which will revert the
settings as you are seeing. This is how the Intel(R) drivers work and
not an issue.

They are right. It's windows philosophy.

From my point of view you've two possibilities:

1.) Plug in a Monitor when you make the image and activate it.
After the image is "settled" EWF will keep information and every time
a Monitor is plugged in from boot-on it will work.

2.) Set a registry key to achieve this behaviour if you're not shure if a
monitor is plugged in
when image is "commited".
Start at the following:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ialm\Device0]
"DisplayDeviceMode"=hex:02,00,00,00
"Display2_UID1"=hex:37,00,00,01

Hope this hint helps you a little bit further,

Regards, Wolfgang
 
J

jrevanswork

They are right. It's windows philosophy.

I would think that removing the VGA port would do this, but not
unplugging the monitor. Especially when I tell the driver to only use
the VGA port. I'm not a native windows programmer if you can't
tell....
From my point of view you've two possibilities:

1.) Plug in a Monitor when you make the image and activate it.
After the image is "settled" EWF will keep information and every time
a Monitor is plugged in from boot-on it will work.

I actually do have the image EWF committed with a monitor attached, but
when I power up without the monitor, *poof*, bye-bye VGA output....
Since I'm using RAM overlay, I guess the driver just stuffs whatever it
wants into the registry and uses it for that session.
2.) Set a registry key to achieve this behaviour if you're not shure if a
monitor is plugged in when image is "commited".
Start at the following:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ialm\Device0]
"DisplayDeviceMode"=hex:02,00,00,00
"Display2_UID1"=hex:37,00,00,01

Hope this hint helps you a little bit further,
Regards, Wolfgang

Interesting, Wolfgang. I'll give it a try to see if it makes a
difference. Can you provide any detail to why those values for those
keys?

Here's what's in the registry when I power up with a monitor and all is
fine:

"DisplayDeviceMode"=hex:00,00,00,00
"PrimaryDisplayDevice"=hex:00,00,00,00
"Display1_UID1"=hex:00,00,00,01
"Display1_DisplayFlags"=hex:3c,20,00,02
"Display2_UID1"=hex:00,00,00,00
"Display2_DisplayFlags"=hex:00,00,00,00

If I power down, unplug the monitor and power up again (in the VGA
disabled state that I don't want), I get these settings:

"DisplayDeviceMode"=hex:00,00,00,00
"PrimaryDisplayDevice"=hex:00,00,00,00
"Display1_UID1"=hex:00,00,04,04
"Display1_DisplayFlags"=hex:3c,20,00,0c
"Display2_UID1"=hex:00,00,00,00
"Display2_DisplayFlags"=hex:00,00,00,00

Jim
 
J

jrevanswork

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ialm\Device0]
"DisplayDeviceMode"=hex:02,00,00,00
"Display2_UID1"=hex:37,00,00,01
Hope this hint helps you a little bit further,
Regards, Wolfgang

Wolfgang, I just tried this and it had no effect. I changed those two
settings, committed the EWF and powered down. I unplugged my monitor,
powered up, let the system boot, then plugged the monitor back in.
Still no video output on the VGA connector.

As matter of fact, when I remote desktopped in, "DisplayDeviceMode" was
back to "00,00,00,00" and "Display2_UID1" was back to "00,00,00,00".

Argh!

Any more ideas? I'd like to totally disable the LVDS output, like I
did with the embedded driver when I deleted the lvds.sys file.

Jim
 
N

No Never

Hello Jim,

We misunderstud a little bit.
From what I know is true:
1.)
If you boot your system without a monitor on VGA-port
Windows is detecting that no monitor is connected to VGA-port.
It turns of the VGA-port as it is of no use.
2.)
Now you can use the drivers tools to reenable the VGA-port.
(which switches on the monitor).
(Don't realize how it can be done. In my Version of the driver
there is an icon on the right side to configure graphics and
where you can enable the Monitor).
I've not tested is there is a command line tool to do that
(Which may be an alternative for you).
-
I did not have the problem that I want steady output on VGA.
(Which would also be nice so if you've a solution pls let me know).
My problem was much more simple:
When I make the image I don't have a monitor connected.
Then the VGA-port is switched off and never turned on again on boot.
The registry setting i manually add is the one the driver sets in the
registry
if you enable "dual display support".
(Unfortunately there's no information about these keys as they are driver
specific so I can't tell you what they are ...)
Hence I manually tell windows that (even if there's no monitor available
when the
image is commited) it is possible to find a vga-monitor on boot up.
But still: If windows does not find a monitor on boot up it switches of the
port!
So, sorry but your problem is more complicated than mine was.
(I only wanted both VGA and LVDS if VGA is connected on boot)

Regards, Wolfgang

P.S.:
;-) Yes your're right.
 
M

mich1985

Hello Jim,
please remove the port drivers which are not required in the ssigd.inf
file. How to make this is described in the inf file.
And take a look at the PortOrder key in your case the value should be
5000 (this key is described in the UsersGuide.pdf).

Regards,
flo
 
B

Ben Harris

I'm working on an embedded product using a Freetech P8F216 mobo with a
Celeron-M 1.4 processor and the Intel 855GME (ICH-4) chipset. I have
XPE SP2 and a decent image (with EWF) that works well. As for my video
woes, I am trying to use the "Intel(R) Embedded Graphics driver package
for Microsoft* Windows* Version 4.1, October 2005" driver
(IEGD_4_1_Windows), but I have two problems.

1.) If I power up the system without anything plugged into the VGA
port, the driver defaults to the internal LVDS connection, which we
don't use, and then the output never comes back to the VGA connector
unless you boot into safe mode. I found a cheesy way of getting around
this: I deleted lvds.sys from the drivers directory, so the LVDS stuff
doesn't work, but I doubt that is the best solution.

2.) The IEGD_4_1_Windows driver has a problem rendering Java stuff. I
have JRE 1.5 installed on the system, and just going to Control Panel
and clicking on the Java icon will result in parts of the dialog not
being displayed properly. It's very odd. To see if it was driver
related, I installed the big, non-embedded XP Pro driver (Driver
Revision: 6.14.10.4421, Package: 25033, Production Version
14.18.0.4421, November 9, 2005) and then the Java works. The problem
that I have with this solution, is that problem number one occurs again
and I can't just simply delete a .sys file to fix it. I have tried
disabling the LVDS output device in device manager, deleting it's
existance from registry, making sure that single display output is
selected, etc. I just can't find a solution. Could I be missing a
component in my XPE build that gets manually installed when I install
the XP Pro version of the driver?


I contacted Intel and this is what they said:

============================
1. This is expected behavior. The fact that the monitor was
disconnected is seen as a hardware change, which will revert the
settings as you are seeing. This is how the Intel(R) drivers work and
not an issue.

2. This issue has not been duplicated nor has it been reported by other
customers. Please contact Sun* Microsystems for additional information
and troubleshooting assistance.
============================


So, if I setup the intel driver to be "single display", "VGA port only"
and don't plug a monitor into the VGA port, they think it's okay to
switch the output to the LVDS connector, which isn't even used on my
system? That's not acceptable to me and I need to find a way to disable
this.

And I don't believe that the other problem is Sun's fault, since just
updating the Intel driver (from the XPE ver to XP Pro ver fixes the
problem).

Anyone have any ideas on how to get around my two problems? If I can
get the XP Embedded driver to properly display Java stuff, then I'd be
okay, because I can use my "delete lvds.sys" fix. Otherwise, I need to
figure out how to force the XP Pro driver to never use the LVDS output,
which I can't seem to do.

Jim Evans
R&D Software Engineer

We had a similar problem with one of our own motherboards a few months
back, and I managed to find a way around it by creating the C++ program
I've attached the source for at the bottom of this post. By setting the
registry settings in the Intel section, and then 'refreshing' the video
display mode, it would then enable the VGA connector if it hadn't been
plugged in during startup. I made this program run automatically once
Windows had started.

As the motherboard is our own design, we managed to solve it on a more
permanent basis by having our BIOS developer add some code into the BIOS
which makes it think the LCD panel is always closed (imagine a laptop
environment). The Intel driver picks up on this and always enables the
VGA connector regardless when it gets to Windows.

Sorry there aren't many comments in the code - it was only intended for
my own use, and we managed to solve it using the BIOS method before we
released the 'workaround', and it was no longer needed.

Hope it helps!

--
Ben Harris
Design Engineer

Arcom, Clifton Road, Direct: +44 (0)1223 403456
Cambridge CB1 7EA United Kingdom Phone: +44 (0)1223 411200




******************************************************************

#include "stdafx.h"
#include <windows.h>

BOOL CreateRegistry(char * szSection, char * szEntry, char * szValue)
{
BOOL Succeeded = FALSE;
HKEY hTopKey = 0 ;
HKEY hMasterKey = 0 ;
DWORD dwDisposition = 0 ;
LONG lReturn = 0 ;

hTopKey = HKEY_LOCAL_MACHINE ;

// Open registry key.
// Create new key if it doesn't exist.
lReturn = RegCreateKeyEx (hTopKey,
szSection,
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_SET_VALUE,
NULL,
&hMasterKey,
&dwDisposition);


if (lReturn == ERROR_SUCCESS)
{
// Write the registry value
lReturn = RegSetValueEx (hMasterKey,
szEntry,
0,
REG_BINARY,
(CONST BYTE *) szValue,
(DWORD) sizeof(szValue));

if (lReturn == ERROR_SUCCESS)
{
Succeeded = TRUE;
}
}

// Close registry key.
if (hMasterKey)
RegCloseKey (hMasterKey);

return Succeeded;
}

int _tmain(int argc, _TCHAR* argv[])
{

char DisplayDeviceMode[] = {0x01, 0x00, 0x00, 0x00};
char Display1_UID1[] = {0x5a, 0x00, 0x00, 0x01};
char Display1_UID2[] = {0x5d, 0x00, 0x04, 0x04};

CreateRegistry("SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0",
"DisplayDeviceMode",
DisplayDeviceMode);

CreateRegistry("SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0",
"Display1_UID1",
Display1_UID1);

CreateRegistry("SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0",
"Display1_UID2",
Display1_UID2);

LONG lResult;
DISPLAY_DEVICE lpDisplayDevice;
DEVMODE lpDevMode;

lpDisplayDevice.cb = sizeof(lpDisplayDevice);
lpDevMode.dmSize = sizeof(lpDevMode);

lResult = EnumDisplayDevices(
NULL, // reserved
0, // display device
&lpDisplayDevice, // device information
0 // reserved
);

lResult = EnumDisplaySettings(
lpDisplayDevice.DeviceName, // display device
ENUM_REGISTRY_SETTINGS, // graphics mode
&lpDevMode // graphics mode settings
);

lResult = ChangeDisplaySettings(
&lpDevMode, // graphics mode
CDS_RESET // graphics mode options
);

return 0;
}
 
N

No Never

Hello flo,

Could you tell me where to find this "UsersGuide.pdf" you mentioned ?

Regards, Wolfgang
 
S

steves

Ben - thanks! That is very useful!

JREvans -
Since you know the registry keys, how about if you deny write
permission to that
key after it is all set up.

1) Login as Admin
2) Start Regedit, select registry branch you want to deny access to.
i.e. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ialm]
3) Right click, Select Permissions.
Select the desired group, (System? Users?, Everyone?) and deny
write access.

This is certainly less flexible and more Hacky and ugly than Bens
method,
but it is very easy to try and implement, even on a system in the
field.

SteveS
stevesATeyeDASHimagingDOTcom

Ben said:
I'm working on an embedded product using a Freetech P8F216 mobo with a
Celeron-M 1.4 processor and the Intel 855GME (ICH-4) chipset. I have
XPE SP2 and a decent image (with EWF) that works well. As for my video
woes, I am trying to use the "Intel(R) Embedded Graphics driver package
for Microsoft* Windows* Version 4.1, October 2005" driver
(IEGD_4_1_Windows), but I have two problems.

1.) If I power up the system without anything plugged into the VGA
port, the driver defaults to the internal LVDS connection, which we
don't use, and then the output never comes back to the VGA connector
unless you boot into safe mode. I found a cheesy way of getting around
this: I deleted lvds.sys from the drivers directory, so the LVDS stuff
doesn't work, but I doubt that is the best solution.

2.) The IEGD_4_1_Windows driver has a problem rendering Java stuff. I
have JRE 1.5 installed on the system, and just going to Control Panel
and clicking on the Java icon will result in parts of the dialog not
being displayed properly. It's very odd. To see if it was driver
related, I installed the big, non-embedded XP Pro driver (Driver
Revision: 6.14.10.4421, Package: 25033, Production Version
14.18.0.4421, November 9, 2005) and then the Java works. The problem
that I have with this solution, is that problem number one occurs again
and I can't just simply delete a .sys file to fix it. I have tried
disabling the LVDS output device in device manager, deleting it's
existance from registry, making sure that single display output is
selected, etc. I just can't find a solution. Could I be missing a
component in my XPE build that gets manually installed when I install
the XP Pro version of the driver?


I contacted Intel and this is what they said:

============================
1. This is expected behavior. The fact that the monitor was
disconnected is seen as a hardware change, which will revert the
settings as you are seeing. This is how the Intel(R) drivers work and
not an issue.

2. This issue has not been duplicated nor has it been reported by other
customers. Please contact Sun* Microsystems for additional information
and troubleshooting assistance.
============================


So, if I setup the intel driver to be "single display", "VGA port only"
and don't plug a monitor into the VGA port, they think it's okay to
switch the output to the LVDS connector, which isn't even used on my
system? That's not acceptable to me and I need to find a way to disable
this.

And I don't believe that the other problem is Sun's fault, since just
updating the Intel driver (from the XPE ver to XP Pro ver fixes the
problem).

Anyone have any ideas on how to get around my two problems? If I can
get the XP Embedded driver to properly display Java stuff, then I'd be
okay, because I can use my "delete lvds.sys" fix. Otherwise, I need to
figure out how to force the XP Pro driver to never use the LVDS output,
which I can't seem to do.

Jim Evans
R&D Software Engineer

We had a similar problem with one of our own motherboards a few months
back, and I managed to find a way around it by creating the C++ program
I've attached the source for at the bottom of this post. By setting the
registry settings in the Intel section, and then 'refreshing' the video
display mode, it would then enable the VGA connector if it hadn't been
plugged in during startup. I made this program run automatically once
Windows had started.

As the motherboard is our own design, we managed to solve it on a more
permanent basis by having our BIOS developer add some code into the BIOS
which makes it think the LCD panel is always closed (imagine a laptop
environment). The Intel driver picks up on this and always enables the
VGA connector regardless when it gets to Windows.

Sorry there aren't many comments in the code - it was only intended for
my own use, and we managed to solve it using the BIOS method before we
released the 'workaround', and it was no longer needed.

Hope it helps!

--
Ben Harris
Design Engineer

Arcom, Clifton Road, Direct: +44 (0)1223 403456
Cambridge CB1 7EA United Kingdom Phone: +44 (0)1223 411200




******************************************************************

#include "stdafx.h"
#include <windows.h>

BOOL CreateRegistry(char * szSection, char * szEntry, char * szValue)
{
BOOL Succeeded = FALSE;
HKEY hTopKey = 0 ;
HKEY hMasterKey = 0 ;
DWORD dwDisposition = 0 ;
LONG lReturn = 0 ;

hTopKey = HKEY_LOCAL_MACHINE ;

// Open registry key.
// Create new key if it doesn't exist.
lReturn = RegCreateKeyEx (hTopKey,
szSection,
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_SET_VALUE,
NULL,
&hMasterKey,
&dwDisposition);


if (lReturn == ERROR_SUCCESS)
{
// Write the registry value
lReturn = RegSetValueEx (hMasterKey,
szEntry,
0,
REG_BINARY,
(CONST BYTE *) szValue,
(DWORD) sizeof(szValue));

if (lReturn == ERROR_SUCCESS)
{
Succeeded = TRUE;
}
}

// Close registry key.
if (hMasterKey)
RegCloseKey (hMasterKey);

return Succeeded;
}

int _tmain(int argc, _TCHAR* argv[])
{

char DisplayDeviceMode[] = {0x01, 0x00, 0x00, 0x00};
char Display1_UID1[] = {0x5a, 0x00, 0x00, 0x01};
char Display1_UID2[] = {0x5d, 0x00, 0x04, 0x04};

CreateRegistry("SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0",
"DisplayDeviceMode",
DisplayDeviceMode);

CreateRegistry("SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0",
"Display1_UID1",
Display1_UID1);

CreateRegistry("SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0",
"Display1_UID2",
Display1_UID2);

LONG lResult;
DISPLAY_DEVICE lpDisplayDevice;
DEVMODE lpDevMode;

lpDisplayDevice.cb = sizeof(lpDisplayDevice);
lpDevMode.dmSize = sizeof(lpDevMode);

lResult = EnumDisplayDevices(
NULL, // reserved
0, // display device
&lpDisplayDevice, // device information
0 // reserved
);

lResult = EnumDisplaySettings(
lpDisplayDevice.DeviceName, // display device
ENUM_REGISTRY_SETTINGS, // graphics mode
&lpDevMode // graphics mode settings
);

lResult = ChangeDisplaySettings(
&lpDevMode, // graphics mode
CDS_RESET // graphics mode options
);

return 0;
}
 
N

No Never

This is cool. Many thanks.

Did not know there is a new embedded Graphics driver.

Regards, Wolfgang
 
J

jrevanswork

Ben,

I finally got around to trying this code, but I couldn't get it to
compile. Instead, I get the dreaded "error C2065: 'EnumDisplayDevices'
: undeclared identifier" error when trying to compile. (XP Pro, VC++
6.0 with SP6 installed). I tried tracking down all of the stuff
dealing with WINVER (already set at 0x0500), multimon, etc. Even the
MSDN example code wouldn't compile for me.

I finally did get a mutated version working by swiping some code
from the web which does callback stuff like this (which I've never used
before....):

HINSTANCE hLib= LoadLibrary("User32.DLL");

pfnEnumDisplayDevices = (PFNEnumDisplayDevices)
GetProcAddress(hLib,"EnumDisplayDevicesA");
pfnEnumDisplayMonitors = (PFNEnumDisplayMonitors)
GetProcAddress(hLib,"EnumDisplayMonitors");
pfnGetMonitorInfo = (PFNGetMonitorInfo)
GetProcAddress(hLib,"GetMonitorInfoA");

Anyways, with my mutated program, it set the registry items that you
specified but it didn't really work. Well, actually, it sort of
worked, sometimes.... Let me explain.

I put the executable in the startup folder to run, but if I power down,
detach the monitor then power up again, the monitor is still shut off.
But... if I "remote desktop" in, and end my session with the command
"%windir%\system32\tscon.exe 0 /dest:console" (in order to return the
console to the local monitor without a login) then the monitor is
sometimes re-enabled. (Yes, only sometimes....)

I tried creating a batch file to run at startup which runs the
executable then calls "%windir%\system32\tscon.exe 0 /dest:console",
but that doesn't re-enable the monitor when I power up without it
plugged in, then replug it after boot. Actually, one time, it did
work, but the monitor was at 640x480 which is also not good.

This whole approach seemed very flaky where sometimes changes would
take effect and sometimes they wouldn't. I can't seem to figure it
out.



As somebody else suggested, I also tried (separately) changing the
permissions on the registry to take away the ability to write to this
key/subkeys, but that didn't seem to make a difference. I think that I
had the permissions set correctly, but the advanced deny/allow stuff
was sort of confusing. I would be okay with this solution if it
worked.




I would also be okay if I could get the XP Pro driver to not load the
support for the LVDS device (like I was able to do for the Embedded XP
driver). I tried mangling the ialmnt5.inf file, but I haven't had any
luck yet. Anyone know what I need to remove from the ialmnt5.inf file
in order to lose LVDS support? It's not clear cut like the XPE
driver's .inf file.



Anyone have any other ideas for me?

Jim Evans
 
B

Ben Harris

Ben,

I finally got around to trying this code, but I couldn't get it to
compile. Instead, I get the dreaded "error C2065: 'EnumDisplayDevices'
: undeclared identifier" error when trying to compile. (XP Pro, VC++
6.0 with SP6 installed). I tried tracking down all of the stuff
dealing with WINVER (already set at 0x0500), multimon, etc. Even the
MSDN example code wouldn't compile for me.

I finally did get a mutated version working by swiping some code
from the web which does callback stuff like this (which I've never used
before....):

HINSTANCE hLib= LoadLibrary("User32.DLL");

pfnEnumDisplayDevices = (PFNEnumDisplayDevices)
GetProcAddress(hLib,"EnumDisplayDevicesA");
pfnEnumDisplayMonitors = (PFNEnumDisplayMonitors)
GetProcAddress(hLib,"EnumDisplayMonitors");
pfnGetMonitorInfo = (PFNGetMonitorInfo)
GetProcAddress(hLib,"GetMonitorInfoA");

Anyways, with my mutated program, it set the registry items that you
specified but it didn't really work. Well, actually, it sort of
worked, sometimes.... Let me explain.

I put the executable in the startup folder to run, but if I power down,
detach the monitor then power up again, the monitor is still shut off.
But... if I "remote desktop" in, and end my session with the command
"%windir%\system32\tscon.exe 0 /dest:console" (in order to return the
console to the local monitor without a login) then the monitor is
sometimes re-enabled. (Yes, only sometimes....)

I tried creating a batch file to run at startup which runs the
executable then calls "%windir%\system32\tscon.exe 0 /dest:console",
but that doesn't re-enable the monitor when I power up without it
plugged in, then replug it after boot. Actually, one time, it did
work, but the monitor was at 640x480 which is also not good.

This whole approach seemed very flaky where sometimes changes would
take effect and sometimes they wouldn't. I can't seem to figure it
out.



As somebody else suggested, I also tried (separately) changing the
permissions on the registry to take away the ability to write to this
key/subkeys, but that didn't seem to make a difference. I think that I
had the permissions set correctly, but the advanced deny/allow stuff
was sort of confusing. I would be okay with this solution if it
worked.




I would also be okay if I could get the XP Pro driver to not load the
support for the LVDS device (like I was able to do for the Embedded XP
driver). I tried mangling the ialmnt5.inf file, but I haven't had any
luck yet. Anyone know what I need to remove from the ialmnt5.inf file
in order to lose LVDS support? It's not clear cut like the XPE
driver's .inf file.



Anyone have any other ideas for me?

Jim Evans

Hi Jim,

I think, in order to get it to compile properly I had to install the SDK
(or could have been the DDK), and add the LIB and INCLUDE directories to
Visaul Studio 6, pointing to where the SDK was installed.

You may find that the values specified for

char DisplayDeviceMode[] = {0x01, 0x00, 0x00, 0x00};
char Display1_UID1[] = {0x5a, 0x00, 0x00, 0x01};
char Display1_UID2[] = {0x5d, 0x00, 0x04, 0x04};

are not correct for your display. These were simply the values that I
found were different when I compared registry snapshots when the VGA
input was enabled and disabled. I made a note of the settings which were
present when the screen was working correctly, and those are the values
you see here.
 
J

jrevanswork

Ben,

Thanks for your pointers. I dug through our MSDN cabinet and found
what appears to be the latest SDK (Feb 2003 Edition, Disc 0004.7 May
2003) and installed it. Then I struggled to find the correct way to
register it, but I finally got it. Phew.

I ran InCtrl5 to get a snapshot of what the DisplayDeviceMode and
UID1/2 are set to, when the system is configured the way that I want.
I put those values in, but still no luck. It's in my startup folder,
but if I power up without a monitor attached, let it boot up, then plug
the monitor into the VGA port, I have no video signal.

Can you think of any other registry that I might need to change?
I'm really running out of ideas and I've lost several days trying to
find a solution.

I wish that Intel would look into the Java rendering problem with
the XPE driver. Anyone else use Java with the 855GME XPE driver? Am I
just missing some direct3d stuff or something else that I don't know
about? All I know is that if I have the XPE driver installed, the Java
stuff doesn't render properly. If I install the XP Pro driver, the
Java stuff renders fine. ARgh!!!!!!

JimE
 
A

Adora Belle Dearheart

We had a similar issue on one of our systems. In our case, the main VGA
stops working if there's no monitor attached at boot, and system
defaults to the Digital Flat Panel that it doesn't actually have. THe
only way we found to fix this was a BIOS update.
 
J

jrevanswork

We had a similar issue on one of our systems. In our case, the main VGA
stops working if there's no monitor attached at boot, and system
defaults to the Digital Flat Panel that it doesn't actually have. THe
only way we found to fix this was a BIOS update.

That is definitely the same problem that I am seeing.

What sort of BIOS update did you have done? For our mobo (Freetech
P8F216), there's only one BIOS available (Phoenix based). In advanced
chipset features, there are some "on-chip VGA settings". Specifically:
- "On-Chip VGA enable/disable"
- "On-Chip Frame Buffer Size" (set at 32MB)
- "Boot Display (set at CRT), choose from
(AUTO,CRT,LCD,CRT+LCD,DVI,TV,CRT+DVI,CRT_TV)
- "LCD Type" set at 1, selectable from 1 to 16
- "TV Standard" set at Off. Select from (Off, NTSC, PAL, SECAM)

Unfortunately, these settings only seem to apply to boot time, not once
Windows starts up. Our hardware vendor looked into the problem and
said that it's a Windows issue, since Windows detects that a monitor
isn't attached to the VGA port and actively disables the device. I
suppose that if we get the BIOS modified to say that the monitor is
always attached, that would solve our problem. I have no idea how
somebody would get that done.

I know that it's possible to re-enable it via software, but I'm not
sure exactly how.... By using the code that Ben gave me and fooling
with other registry keys, I could sometimes get the monitor to come
back on when I used remote desktop to connect to the machine. I'm not
sure what the connection is there, but I've really like to make it
work.

Jim
 
A

Adora Belle Dearheart

That is definitely the same problem that I am seeing.

What sort of BIOS update did you have done? For our mobo (Freetech
P8F216), there's only one BIOS available (Phoenix based). In advanced
chipset features, there are some "on-chip VGA settings". Specifically:
- "On-Chip VGA enable/disable"
- "On-Chip Frame Buffer Size" (set at 32MB)
- "Boot Display (set at CRT), choose from
(AUTO,CRT,LCD,CRT+LCD,DVI,TV,CRT+DVI,CRT_TV)
- "LCD Type" set at 1, selectable from 1 to 16
- "TV Standard" set at Off. Select from (Off, NTSC, PAL, SECAM)

Unfortunately, these settings only seem to apply to boot time, not once
Windows starts up. Our hardware vendor looked into the problem and
said that it's a Windows issue, since Windows detects that a monitor
isn't attached to the VGA port and actively disables the device. I
suppose that if we get the BIOS modified to say that the monitor is
always attached, that would solve our problem. I have no idea how
somebody would get that done.

I know that it's possible to re-enable it via software, but I'm not
sure exactly how.... By using the code that Ben gave me and fooling
with other registry keys, I could sometimes get the monitor to come
back on when I used remote desktop to connect to the machine. I'm not
sure what the connection is there, but I've really like to make it
work.

Jim
Well we're producing so many of these things that we say jump and the
hardware manufacturer misunderstands us three times, sends us the wrong
thing twice then finally gets a grip on how high. Er.
So quite what it does I don't know, and they're in the far east so while
I'm sure they'd tell me if I asked, I'm not sure their answer would
actually make any sense. But, basically, once I showed them the
behaviour we were experiencing, and the fact that once it was in this
state it was only possible to get out of it by VNCing in, changing the
settings, then resetting the BIOS, they sent us something that fixed it.
 
J

jrevanswork

Argh! Still no luck here on my 855GME motherboard..... If I power up
without the VGA monitor attached, then plug it in later while the
system is already running, there's no video signal.

I've taken Ben's program from earlier in this thread and it now updates
the following registry entries to their "working" values:

HKEY_LOCAL_MACHINE,
"SYSTEM\\ControlSet001\\Services\\ialm\\Device0\\Display2_UID1"

HKEY_LOCAL_MACHINE,
"SYSTEM\\ControlSet001\\Services\\ialm\\Device0\\DisplayDeviceMode"

HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\Display2_UID1"

HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\DisplayDeviceMode"

HKEY_CURRENT_CONFIG,
"SYSTEM\\CurrentControlSet\\Services\\iAlm\\Device0\\DefaultSettings.XResolution"

HKEY_CURRENT_CONFIG,
"SYSTEM\\CurrentControlSet\\Services\\iAlm\\Device0\\DefaultSettings.YResolution",

HKEY_LOCAL_MACHINE, "SYSTEM\\ControlSet001\\Hardware
Profiles\\Current\\System\\CurrentControlSet\\Services\\iAlm\\Device0\\DefaultSettings.XResolution"

HKEY_LOCAL_MACHINE, "SYSTEM\\ControlSet001\\Hardware
Profiles\\Current\\System\\CurrentControlSet\\Services\\iAlm\\Device0\\DefaultSettings.YResolution",

HKEY_LOCAL_MACHINE,
"SYSTEM\\ControlSet001\\Services\\ialm\\Device0\\Display1_DisplaySize"

HKEY_LOCAL_MACHINE,
"SYSTEM\\ControlSet001\\Services\\ialm\\Device0\\Display1_UID1"

HKEY_LOCAL_MACHINE,
"SYSTEM\\ControlSet002\\Services\\ialm\\Device0\\Display1_DisplaySize"

HKEY_LOCAL_MACHINE,
"SYSTEM\\ControlSet002\\Services\\ialm\\Device0\\Display1_UID1"

HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\Display1_DisplaySize"

HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\Display1_UID1"

HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\Display1_UID1"

HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\Display1_UID2"

HKEY_CURRENT_CONFIG,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\DefaultSettings.XResolution"

HKEY_CURRENT_CONFIG,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\DefaultSettings.YResolution"

HKEY_CURRENT_CONFIG,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\DefaultSettings.VRefresh"

HKEY_CURRENT_CONFIG,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\Attach.ToDesktop"


Did I miss something important? If so, somebody please tell me what I
need to change in order to get my VGA connector to come back on......

Any other ideas?

JimE
 
B

Ben Harris

Argh! Still no luck here on my 855GME motherboard..... If I power up
without the VGA monitor attached, then plug it in later while the
system is already running, there's no video signal.

I've taken Ben's program from earlier in this thread and it now updates
the following registry entries to their "working" values:

HKEY_LOCAL_MACHINE,
"SYSTEM\\ControlSet001\\Services\\ialm\\Device0\\Display2_UID1"

HKEY_LOCAL_MACHINE,
"SYSTEM\\ControlSet001\\Services\\ialm\\Device0\\DisplayDeviceMode"

HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\Display2_UID1"

HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\DisplayDeviceMode"

HKEY_CURRENT_CONFIG,
"SYSTEM\\CurrentControlSet\\Services\\iAlm\\Device0\\DefaultSettings.XResolution"

HKEY_CURRENT_CONFIG,
"SYSTEM\\CurrentControlSet\\Services\\iAlm\\Device0\\DefaultSettings.YResolution",

HKEY_LOCAL_MACHINE, "SYSTEM\\ControlSet001\\Hardware
Profiles\\Current\\System\\CurrentControlSet\\Services\\iAlm\\Device0\\DefaultSettings.XResolution"

HKEY_LOCAL_MACHINE, "SYSTEM\\ControlSet001\\Hardware
Profiles\\Current\\System\\CurrentControlSet\\Services\\iAlm\\Device0\\DefaultSettings.YResolution",

HKEY_LOCAL_MACHINE,
"SYSTEM\\ControlSet001\\Services\\ialm\\Device0\\Display1_DisplaySize"

HKEY_LOCAL_MACHINE,
"SYSTEM\\ControlSet001\\Services\\ialm\\Device0\\Display1_UID1"

HKEY_LOCAL_MACHINE,
"SYSTEM\\ControlSet002\\Services\\ialm\\Device0\\Display1_DisplaySize"

HKEY_LOCAL_MACHINE,
"SYSTEM\\ControlSet002\\Services\\ialm\\Device0\\Display1_UID1"

HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\Display1_DisplaySize"

HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\Display1_UID1"

HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\Display1_UID1"

HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\Display1_UID2"

HKEY_CURRENT_CONFIG,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\DefaultSettings.XResolution"

HKEY_CURRENT_CONFIG,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\DefaultSettings.YResolution"

HKEY_CURRENT_CONFIG,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\DefaultSettings.VRefresh"

HKEY_CURRENT_CONFIG,
"SYSTEM\\CurrentControlSet\\Services\\ialm\\Device0\\Attach.ToDesktop"


Did I miss something important? If so, somebody please tell me what I
need to change in order to get my VGA connector to come back on......

Any other ideas?

JimE

I'm not sure if it'll make a difference, but you seem to be using a
combination of CurrentControlSet and ControlSet001. CurrentControlSet
will always reference whichever version of the ControlSet is being used
(ControlSet001 or ControlSet002). The other copy of the ControlSet is a
there for backup purposes only. It could be though, that you're updating
some of the current values and some of the backup values. If I were you,
I'd only update the CurrentControlSet version of the values, and that
way you'll know you're updating the ones that Windows is actually using.

I just want to make sure you are running the section of code after the
registry updates, aren't you? Those commands are the ones which actually
refresh the display, and the updated registry settings get applied.

Have you taken a look at the MSDN documentation about the
EnumDisplayDevices, EnumDisplaySettings and ChangeDisplaySettings
functions? It could be that some of the parameters aren't correct for
your system.

EnumDisplayDevices:
http://msdn.microsoft.com/library/en-us/gdi/devcons_2303.asp

EnumDisplaySettings:
http://msdn.microsoft.com/library/en-us/gdi/devcons_84oj.asp

ChangeDisplaySettings:
http://msdn.microsoft.com/library/en-us/gdi/devcons_7gz7.asp
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top