By: Alex Pavloff (a l e x - at - p a v l o f f - d o t - n e t)
This page contains drivers also available on National Semiconductor's web page for the Geode family of processors. These drivers should work on most all Geode-based boards, such as the Advantech PCM-5820. If you have some questions/comments, email me, and if I have time, I might be able to help.
National has the drivers hidden behind an NDA, however, the sources are dual-licensed GPL/BSD. Check any source file for the full license details.
A Geode user in China, WHP, installed these drivers onto a machine and the monitor didn't work. These drivers properly fired up my LCD, but after looking at what he did to make it work, I now understand why: NSC doesn't think you'll use a LCD on a 5530. My durango.c file, with GFX_VIDEO_CS5530 not defined actually removed all 5530 specific code, including the code to disable the fixed timings needed for an LCD! With this defined, the code needed to set monitor timings properly is enabled. So, thanks to WHP for figuring that out.
In other news, Larwe.com has updated his section on the Geode, with the good news that the new XFree86 4.2.99 (soon to be released as XFree86 4.3) has native support for the Geode. Of course, there's always some issues here, so go over and check it out if you're interested.
In other other news, the framebuffer for Linux 2.6 is a complete rewrite that looks to make the entire system easier to develop for. Maybe when 2.6 rolls around I'll put together a proper framebuffer for the Geode.
In other other other news, these driver work fine under kernel 2.4.20.
I have created a .tar.gz file containing the files necessary to build a working geode framebuffer drivers under stock Linux 2.4.19. It's not pretty, it contains piles of unused files, fbset reports goofy numbers, and could still use some major cleanup, but it appears to work.
Untar these files into /drivers/video (I should have patched fbmem.c, Config.in, and Makefile, but I didn't), and run the kernel configuration again, adding the National Geode framebuffer device. This uses the 1.1.7 drivers.
Good luck.
kernel_framebuffer_117_complete_src.tar.gz
ReleaseNotes_Framebuffer_1.1.7.zip (it came as a zip from National, so I'm
passing it onto you!)
Framebuffer_graphics_v1.2.0.tar.gz
(version 1.2.0, which I tried quickly to use, and stopped after getting a raft
of undefined references, no doubt caused by my attempt to use their #defines to
adjust the configuration)
ReleaseNotes.txt (version 1.2.0 release notes,
which say that Not Much Has Changed since 1.1.7, which is why I haven't bothered
to make these work).
This driver was originally engineered for National's Geode based set-top-box and web-pad offerings. The drivers also contain the code for multiple operating systems. They are, therefore, massively overengineered compared to the normal Linux framebuffer drivers. They include support for TV-out, flat panel support via a 9211 chip, and I'm sure there's a configuration switch in there that will make the thing get up and cook me breakfast in the morning (sadly, I haven't found it yet).
The Release Notes for the framebuffer also assume that you are using a set-top-box or web-pad. The build process is also quite strange, and in fact, I didn't have much luck with it, and in fact, played with so many ways to make it work that I don't recall the steps I did to compile it the best way. Currently, I'm just copying all the files to one directory and editing the Makefiles. The part about these drivers that isn't in the documentation is that durango.c, panel.c and ddc.c contain various configuration #defines. These control other .c (!?) files to #include.
To work on a standard Geode 5530, I used these defines:
durango.c
#define GFX_DISPLAY_GU1 1 /* 1st generation display controller */
#define GFX_INIT_GU1 1 /* Geode family */
#define GFX_2DACCEL_GU1 1 /* 1st generation 2D accelerator */
#define GFX_VIDEO_DYNAMIC 1 /* runtime selection */
#define GFX_TV_DYNAMIC 1 /* runtime selection */
#define GFX_VGA_GU1 1 /* 1st generation graphics unit */
#define FB4MB 1 /* Set to use 4Mb video ram for Pyramid */
ddc.c
#define PLATFORM_5530 1 /* 5530 based platforms */
When I get more time, I'll try to create a "minimal" Geode driver and create a proper kernel patch.
xfree86_401_v110_complete_src.tar.gz
ReleaseNotes_Xfree_v1.1.0.zip
I got them to compile. I did not test them, and I only used the STB IMakefile. In their configuration, they refer to STB/PAD configurations. This picture from National should explain what they're doing:

Any notes on these drivers under later XFree86 versions would be appreciated.
Larwe.com (covers kernel configuration & XFree86 3.3.6)