Simulating a lower resolution on the OLPC XO Laptop

Jordan Crouse jordan at cosmicpenguin.net
Tue Nov 25 14:13:22 EST 2008


Thanks to Mitch, I fixed the scaling problem.  Based on conversations on 
IRC, I am afraid that you will be very disappointed, so I am going to 
try to explain in great detail how this all works.

First of all, you are going to need either build a new driver on your 
own, or convince your favorite maintainer to build one for you.  The fix 
is checked into the xf86-video-geode GIT tree HEAD.

Secondly, a bit of background on how this all works.  Unlike most modern 
GPUs, the Geode does not support scaling transforms - in simple terms, 
we cannot use the hardware to automatically scale a given rectangle on 
the screen, which is how scaling would normally work in a modern 3D 
compositor.  However, we do have the ability to scale the entire screen 
at once.   Again in simple terms, this means you can scale an effective 
display of say, 800x600 to 1200x900.  But this also means that the 
entire display needs to be put into a 800x600 mode.  This means you need 
to execute a mode switch, and your underlying display manager and window 
manager need to be able to grok the switch.  If you want to switch back 
to 1200x900 mode, then again, you'll have to take a mode switch.

So, assuming you are still with me, lets discuss how to actually pull 
this off.  The method depends on which X server you are using.   To 
easily tell, type 'xrandr' in a terminal - if you see a single 1200x900 
  mode, then you are using X 1.4.  If you see multiple modes, then you 
are using X 1.5.

** X 1.4 instructions **

For X 1.4, you need to add the mode that you want scale to 1200x900. 
For this example, lets use 800x600.  Add the mode to the xrandr database:

xrandr --newmode 800x600 0 800 0 0 0 600 0 0 0

You don't need to worry about setting accurate timings, since the driver 
is going to scale the mode to 1200x900 anyway.

Next, add the mode to the default output:

xrandr --addmode default 800x600

Now, if you type 'xrandr' you will see your new mode in the list.
Skip ahead to the X 1.5 instructions.

** X 1.5 instructions **

Type 'xrandr' in a terminal.  You will see a list of possible modes. 
Any mode not equal to 1200x900 will be scaled on the XO.  To set a mode,
type the following:

xrandr --output default --mode <modname>

The modename can be anything in the list. If you want to add something 
not in the list, refer to the X 1.4 instructions for how to do that. 
The screen should immediately scale.  To return to "normal" mode, set 
the 1200x900 mode.

That should be enough to get you started.

Jordan



More information about the Devel mailing list