How do I convert XFree86 mode-lines into framebuffer device timings?

Framebuffer HOWTO
Prev |  | Next

# 15. How do I convert XFree86 mode-lines into framebuffer device timings?

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.

Prev | Home | Next
Setting up the X11 FBdev driver |  | Changing the Linux Logo