I think this problem has been reported, but is there a solution ?

For example, the following code snipplet (similar to the example on
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceui40/html/cerefrotatingcontentofscreen.asp )
will hand on a Dell Axim x30 if display_orientation is different from the
current orientation.

DEVMODE devMode = {0};
devMode.dmSize = sizeof devMode;
devMode.dmFields = DM_DISPLAYORIENTATION;
devMode.dmDisplayOrientation = display_orientation;

ChangeDisplaySettingsEx((const TCHAR *)NULL, &devMode, (HWND)NULL,
CDS_RESET, NULL);

If the screen is currently rotated to landscape and display_orientation is
DMDO_0 (Portrait), ChangeDisplaySettingsEx hangs.

Also, interestingly, this bug seems to impact GXOpenDisplay.

GXOpenDisplay apparently calls ChangeDisplaySettingsEx to reset the screen
to Portrait, and because ChangeDisplaySettingsEx hangs, this causes
GXOpenDisplay to hang when the screen current rotation is not Portrait.

For us (and for all game developers!), it's a real show-stopper:

On devices like the Dell Axim x30, the IOControl GETRAWFRAMEBUFFER is not
implemented, and the only way to get the raw frame buffer address is through
GAPI. But when the screen is rotated to landscape when the application is
lauched, GXOpenDisplay hangs (because of the problem described above), and
any attempt to programatically reset the display to Portrait by calling
ChangeDisplaySettingsEx will also hang!

So basically, when an application is lauched when the screen is oriented in
landscape, applications cannot get the raw frame buffer address. On the
other hand, if the application is lanched when the screen is in portrait,
and then if the screen is lated rotated to landscape, applications have no
problem accessing the raw frame buffer.

I suspect that this problem affects all games on the x30.

It also affects applications like PocketTV and Betaplayer.