February 26, 2012   Posted by: Dr. Ace Jeangle

How to setup correct LCD resolution

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:

  1. Baseboard (BeagleBoard/PandaBoard) uses 1.8V level for I2C bus, but LCD requires 3.3V. So, we saved couple bucks on level translator (and you saved as well :).
  2. We get LVDS cables from LCD supplier without these 4 lines for EDID access. This is normal situation for LCDs that are supplied for notebooks. Making custom LVDS cable would increase the final price of our bundle.
  3. Some displays have different modes of operation with different resolution. And you can easy program different EDID data to PIC controller and switch between them during start-up.

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 omapfb.video_mode=1024x600MR-16@60 mem=456M@0x80000000 mem=512M@0xA0000000 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:1024x600MR-16@60
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 “omapfb.video_mode=1024x600MR-16@60” – 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.

28 comments posted in: How-To
28 comments
  1. Antti
    Feb 26, 2012

    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

    • Dr. Ace Jeangle
      Feb 27, 2012

      Hello Antti,

      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.

  2. Antti
    Feb 27, 2012

    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.

  3. Koen
    Feb 29, 2012

    Hello,

    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!

    With regards,
    Koen

    • Dr. Ace Jeangle
      Feb 29, 2012

      Hello Koen,

      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.

      • dagentooboy
        Mar 09, 2012

        Any progress on the Android ICS build guide?

        • Dr. Ace Jeangle
          Mar 09, 2012

          Yes, it is ready and tested. Will publish this week.

      • dogyeng
        Mar 30, 2012

        I have beagleboard_xm Rev C, your LCD and a v2 board. I’ve tried to change the line from 1024×768-16 to 1024x600MR-16@60. 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?

        • Dr. Ace Jeangle
          Mar 30, 2012

          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.

  4. Mark
    Mar 15, 2012

    Hi,
    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?

    Thanks,
    Mark

    • Dr. Ace Jeangle
      Mar 15, 2012

      Hello Mark,

      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.

      • Mark
        Mar 15, 2012

        Ok figured out the boot.txt and the boot.scr but the screen still wont turn on. Is there anything else I should try?

        • Dr. Ace Jeangle
          Mar 15, 2012

          Mark, please send both files “boot.txt” and “boot.scr” to me by email – I will check them.

          • Mark
            Mar 15, 2012

            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.

  5. Phung
    Mar 19, 2012

    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: support@chalk-elec.com but it couldn’t be delivered. Is there any way else for me to send you my boot file ?

  6. Weston Weems
    Apr 06, 2012

    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.

    • Dr. Ace Jeangle
      Apr 06, 2012

      Weston, thanks for useful info!

  7. Harald
    Jun 06, 2012

    Hi,

    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:1024x600MR-24@60”).

    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:1024x600MR-24@60 (I tried omapfb.mode=hdmi:1024x600MR-24@60 too).

    any help or hints what’s wrong with that 3.2.0 kernel?

    Thanks,

    Harald

    • Dr. Ace Jeangle
      Jun 06, 2012

      Hello Harald,

      Our LCD reflects video sent to P1 port (DVI-D), YOu will get no video if your kernel is configured for P2 (HDMI) output.

  8. Usman
    Jun 06, 2012

    Hello,
    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.
    Thanks
    Usman

  9. Benedikt Dietrich
    Aug 09, 2012

    Hi,

    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.

    Thanks,

    Benedikt

    • Dr. Ace Jeangle
      Aug 29, 2012

      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).

      • Benedikt Dietrich
        Sep 13, 2012

        Hi,

        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?

        Thanks,
        Benedikt

        • Dr. Ace Jeangle
          Sep 17, 2012

          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.

          • Benedikt Dietrich
            Sep 17, 2012

            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!
            Benedikt

          • Dr. Ace Jeangle
            Sep 17, 2012

            You used a little bit tricky kernel patch, but it works – nice to hear that!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Follow us