If you have XFree86 (X11) installed on your machine, and you can use it successfully, it is a simple matter to convert the mode-lines in your XF86Config file to the required timings needed by the framebuffer devices.
The framebuffer device requires the following fields:
pixclock
- pixel clock in
pico seconds
left_margin
- time between
sync to display
right_margin
- time
between display to
sync
upper_margin
- time
between sync to
display
lower_margin
- time
between display to
sync
hsync_len
- horizontal
sync length
vsync_len
- vertical sync
length
An XFree86 mode line has the following fields:
Modeline "1280x1024" DCF HR SH1
SH2 HFL VR SV1 SV2
VFL
It is necessary to do some simple calculations to translate the XF86 mode-lines into a set of framebuffer device timings. As an example, we shall examine how to convert a mode-line taken from my XF86Config file:
Modeline "1280x1024" 110.0 1280
1328 1512 1712 1024 1025 1028
1054
First, calculate the required pixclock rate. XFree86 uses
megahertz whilst framebuffer devices uses picoseconds
(Why, I don't know). Divide one million by DCF. For
example: 1,000,000 / 110.0 =
9090.9091
Now we need to calculate the horizontal timings:
left_margin = HFL -
SH2
right_margin = SH1 -
HR
hsync_len = SH2 -
SH1
In our example, this would be:
left_margin = 1712 - 1512 =
200
right_margin = 1328 - 1280 =
48
hsync_len = 1512 - 1328 =
184
And now we need to calculate the vertical timings.
upper_margin = VFL -
SV2
lower_margin = SV1 -
VR
vsync_len = SV2 -
SV1
For our example, this would be:
upper_margin = 1054 - 1028 =
26
lower_margin = 1025 - 1024 =
1
vsync_len = 1028 - 1025 =
3
Now we can use this information to set up the framebuffer for the desired mode. For example, for the matroxfb framebuffer driver, it requires the following:
video=matrox:xres:<>,yres:<>,depth:<>,left:<>,right:<>,hslen:<>,upper:<>,lower:<>,vslen:<>
I put into my /etc/lilo.conf
the following line:
append =
"video=matroxfb:xres:1280,yres:1024,depth:32,left:200,right:48,hslen:184,upper:26,lower:0,vslen:3"
Note that in this case the pixel clock isn't used. It's only necessary if you don't like the default pixel clock rates. You can supply this as a parameter as well. Setting the pixclock is documented in other parts of this HOWTO.