Most of modern LCD panels have embedded EEPROM memory with I2C interface that stores important information about its capabilities (including LCD resolution). This data usually takes 128 bytes and is referred as Extended Display Identification Data (EDID). Linux kernel searches for available EEPROM memories during startup and read this data.
Our v2 PCB uses a little bit different approach. It does not provide direct access from baseboard to LCD EDID info. Instead of this, it has PIC controller with embedded EEPROM, that can be programmed with EDID information and will pretend to baseboard to be LCD EDID EEPROM. This was done for three main reasons:
Our current PIC firmware (version 1.0) does not include EDID procedure. New version with EDID support will be published soon. Therefore, below is short guide on manual changing of LCD resolution for Ubuntu and Android.
Linux kernel allows to assign manual LCD resolution in bootargs supplied by u-boot. This is usually done by script called “boot.scr” in “boot” partition that is loaded and executed by u-boot. “boot.scr” has special format and usually is created with the help of “mkimage” util from source file called “boot.txt”. Below is example of my “boot.txt” that I use for Android (Linaro build 12.01):
setenv initrd_high "0xffffffff" setenv fdt_high "0xffffffff" setenv bootcmd "fatload mmc 0:1 0x80200000 uImage; fatload mmc 0:1 0x81600000 uInitrd; bootm 0x80200000 0x81600000" setenv bootargs "console=ttyO2,115200n8 rootwait ro earlyprintk fixrtc nocompcache vram=48M omapfb.vram=0:24M,1:24M [email protected] [email protected] [email protected] init=/init androidboot.console=ttyO2" boot
and for Ubuntu:
fatload mmc 0:1 0x80000000 uImage fatload mmc 0:1 0x81600000 uInitrd setenv bootargs ro elevator=noop vram=12M omapfb.mode=dvi:[email protected] bootm 0x80000000 0x81600000
You should consider above “boot.txt” files as examples only, because they highly depend on OS and baseboard that you use.
The most important bootarg here is “[email protected]” – that’s exactly where we setup LCD resolution. 1024×600 sets resolution, “M” indicates the kernel will calculate a VESA mode on-the-fly instead of using modedb look-up, the “R” indicates reduced blanking which is for LCD panels, “16” is the color depth, “@60” is the # of frames per second.
Lets generate “boot.scr” file with the following commands:
mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Run uImage" -d boot.txt boot.scr chmod a+x boot.scr
“mkimage” is available in package “uboot-mkimage”.
Now copy generate “boot.scr” file to boot partition on your SD card, unmount it, put into baseboard and try. You should have native 1024×600 resolution now.
Thanks for the tutorial, it goes a long way. Is there, however, anything else that could affect the display? I did all the steps here, but I’ve still only got vertical stripes on the monitor (http://imgur.com/QYboO). I have a 640×480 6″ NEC panel (http://goo.gl/gsNrn), and a Pandaboard rev A2 running Ubuntu 10.10.
Here is my boot.txt file (before using mkimage): http://pastebin.com/Lcedk0TA
I guess, the problem is with incorrect connection between our PCB and your LCD panel.
Please, check your LVDS cable and also ensure that you have correct configuration on pins MSL, DPS, FRC.
That’s very possible, and I’ve ordered one of your bundles with the 10″ display and pre-made cables in order to rule out hardware problems. I’ll get back to you if this does not fix the issue.
I’ve recently bought your hardware, and after lots of configuration i’ve got it semi-working on a Beagleboard XM with Ubuntu 11.10, running Openbox as WM.
The touchscreen however, only acts as a mouse, not as a multi touch interface. Do you have any idea how to work this?
Also, you seem to have running Android 4.0 ICS on a beagleboard XM, with touchscreen. Can you tell me what package you’ve used? Was it easy to setup?
I had an ICS running a minute ago, but the touchscreen wasn’t responding..
I’d like to hear from you!
You can check this webpage for instructions on multi-touch support: http://lii-enac.fr/en/architecture/linux-input/multitouch-devices.html
You will need to build custom kernel.
Also, we are preparing detailed instructions on building Android ICS image that will work with our bundle. Will post it this week.
Any progress on the Android ICS build guide?
Yes, it is ready and tested. Will publish this week.
I have beagleboard_xm Rev C, your LCD and a v2 board. I’ve tried to change the line from 1024×768-16 to [email protected] Then screen is adjusted properly, but the touch is not working.
I can’t find post in order to build Android ICS for beagleboard_xm at your website. Where can I find related refrence?
Touchscreen driver is in main branch of kernel since 2.6.35, so you can use the same instructions for custom kernel building as for Pandaboard.
I am getting confused on this tutorial. Are we supposed to create our own file called “boot.txt” or do we edit an original one? Also, if the boot.txt samples you put up are just examples how do we know what to exactly put in our boot.txt file? Is there some sort of way to find that out? If there is a file called boot.txt where would it be located?
You don’t have to create boot.txt file from the scratch. Just edit existing file – you can find it on “boot” partition of your SD card.
This file is a source, and should be translated to executable script file “boot.scr” with help of mkimage tool.
Ok figured out the boot.txt and the boot.scr but the screen still wont turn on. Is there anything else I should try?
Mark, please send both files “boot.txt” and “boot.scr” to me by email – I will check them.
I sent them to you. I had to use my yahoo email address to send them because gmail or my school email wouldn’t allow me to send those files.
Hope you receive them.
Dear Dr.Ace Jeangle !
Recently, I’ve bought your 10” LCD and a v2 board. I’ve tried to connect them to my Pandaboard rev A4, follow the instructions from chalkboard electronics webpage.
But ’till now, I can’t get the LCD to turn on, still blackscreen even the light on the back panel is on.
I’m using Ubuntu Linaro 12.02 and i think the problem is my boot.scr.
I’ve sent an email to the address: [email protected] but it couldn’t be delivered. Is there any way else for me to send you my boot file ?
Please, refer to this post: https://chalk-elec.com/?p=1478
Android/Pandaboard tips… by default android AOSP is setup for generic720p. When connecting up a smaller 7inch low res screen, I had to modify generic-dpi-panel, and omap4panda.c in the kernel to reflect timings of the panels.
After making those modifications, 7inch lvds panel worked great.
Weston, thanks for useful info!
your display/touch works fine on my Pandaboard ES with the android 4.0.3 image and kernel 3.0.8 you’ve supplied — thanks for that great service gettings started!!
now I have to step to android 4.0.4 and kernel 3.2.0++ (for non-LCD reasons;) and I’ve tried the Linaro 12.05 prebuilt binaries here http://releases.linaro.org/12.05/android/leb-panda/
but with this kernel I do not get any output on the LCD anymore 🙁
one observation which bothers me:
with your 3.0.8 kenel, I had to connect a DVI-monitor to P1 (DVI-D) port and this monitor also got 1024×600 resolution too (due to the kernel command line arg “omapfb.mode=dvi:[email protected]”).
now with Linaro’s 3.2.0 kernel, the DVI-monitor must be connected to P2 (HDMI-1080P) port and the monitor (1280×1024 physical) *always* gets a 1920×1080 signal, even with omapfb.mode=dvi:[email protected] (I tried omapfb.mode=hdmi:[email protected] too).
any help or hints what’s wrong with that 3.2.0 kernel?
Our LCD reflects video sent to P1 port (DVI-D), YOu will get no video if your kernel is configured for P2 (HDMI) output.
I have recently configured Android ICS on Pandaboard ES with your 7″ LCD touchscreen using the instructions mentioned in your blog and it worked perfectly fine. Now I have to port Ubuntu 11.10 on Pandaboard ES with LCD touchscreen capability but even after I modify the boot.scr to set the correct resolution as mentioned in this post the LCD is not displaying anything. Please let me know how can I port Ubuntu 11.10 on Pandaboard ES with LCD touchscreen capability.
You should use distribution from http://rcn-ee.net/deb/rootfs/
I am using the 10″ display together with the Pandaboard ES and Android 4.0.4 AOSP. I have set the bootargs directly in uboot as described above, but the resolution is still not correct.
A ‘cat /sys/devices/omapdss/display0/timings’ gives me 76800,1280/110/20/40,720/5/20/5
Any idea why it is not working? What are the correct timings for the 10″ display? Then I could hard code it in the kernel driver.
Another problem I have is that the display seems to be dimmed all the time.
We have 2 versions of 10″ LCD, with 1024×600 and 1280×800 resolution. Which one you bought? Display dimming is because of ambient light sensor. You can switch to manual brightness control (see our Support/How-to section).
the light sensor didn’t react on any change of the environment lighting situation. I now enforce full brightness as suggested in one of the posts. I have the 1024×600 version. Using your build for Panda, the display works with the correct resolution. I need to build AOSP on my own. If I do so and apply the changes as suggested above the resolution is not correct. Any idea?
Another problem I am facing (if using your build) is that the touch sensor from time to time does not work. After disconnecting and reconnecting the USB cable it usually works again. Any idea why it crashes?
I would suggest to check connections of both: ambient light sensor and flex touch cable from LCD, because most often these problems happen because of loose connection.
OK, I got it working now. For some reasons in my case modifying the BOOTCMD does not change the display resolution.
I instead replaced the generic 720p entry in kernel/drivers/video/omap2/displays/panel-generic-dpi.c with the following entry:
/* Chalkboard LCD 10″ 1024×600*/
.x_res = 1024,
.y_res = 600,
.pixel_clock = 42666,
.hfp = 48,
.hsw = 32,
.hbp = 80,
.vfp = 6,
.vsw = 10,
.vbp = 3,
.acbi = 0x0,
.acb = 0x0,
.config = OMAP_DSS_LCD_TFT,
.power_on_delay = 0,
.power_off_delay = 0,
.name = “generic_720p”,
Then I recompiled the kernel. The resolution of the display is correct, now.
For the touch I have installed the provided idc file, but got errors. Only after commenting all lines except the following two, Android accepted the file:
device.internal = 1
touch.deviceType = touchScreen
Now, everything works 🙂
Thanks for your help!
You used a little bit tricky kernel patch, but it works – nice to hear that!