As many of you may know, I recently purchased a Beaglebone, having gotten fed up waiting for the Raspberry Pi to become a reality. The Beaglebone is an embedded development board showcasing Texas Instruments' AM335x line of System-on-a-Chip (SoC) MPUs. For the $90 board, you get a USB slave and host, a 32-bit ARM processor, 256 MB of off-chip DDR RAM, about 60 3.3v GPIO pins, an Ethernet port, and all sorts of other fun things. I have eventual goals of building a complete device around the processor, so the Beaglebone is a great way to prototype as I go. Of course, almost any device I'd want to build needs a screen of some sort, so my first major challenge was interfacing an LCD. I chose a 320x240 pixel touchscreen with an SSD1289 controller, which I purchased for less than $20. I read enough to know that the AM335x has an on-board LCD controller, or LCDC, but the easy stuff ended there.
There's a lot of documentation on the internet about TI's LCDC Raster Engine, but very little documentation or code for the LCDC LIDD Engine, used to operate more intelligent LCD panels, so I hope to document here a lot of the lessons that I learned trying (painfully) to work with it. Since my current distro of choice for my Beaglebone is Angstrom, I'll also be discussing my lessons compiling kernel modules and patches for Angstrom. At the end of this article, you can download a patch to add SSD1289 support for 240x320 LCDs to your Beaglebone (or, with some work, another platform).