This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

How to connect another display

Hello.

Zoom OMAP35x SOM devkit.

We are trying to connect another display to devkit.

Hardware connection is already done (at least as sad our engineer :) ).

So, the question is  how to set resolution and 24bit color mode?

  • Have a look at the following Wiki page and the associated links.

    http://processors.wiki.ti.com/index.php/Display_Subsystem

    BR,

    Steve

  • Thanks for answer.

    Is these some special things how to work with non-standart resolution?

    In my case it is 800x480 on my new display.

    I tried to set it using SYSFS entry. Resolution is really changed, but /sys/devices/platform/omapfb/graphics/fb0/modes still contains 480x272 mode, as in standart lcd-display resolution.

    My steps is:

    1. set standart resolution using bootargs (system can`t start without it)

    2. write new resolution parameters to /sys/devices/platform/omapdss/display0/timings 

    after it i starting program, that draws some graphics.

    it defines, that EGL window surface has width 480 and height 272 pixels.

    ???

    Thanks.

  • Alexey,

    There is not anything special you should need to do for these dynamic resolutions, but the methodology does depend on which Kernel version you are on.

    Have a look at the following which may give more information to you...

    http://processors.wiki.ti.com/index.php/UserGuideDisplayDrivers_PSP_03.00.00.05

    http://processors.wiki.ti.com/index.php/UserGuideOmap35xCaptureDriver_PSP_03.00.00.05

    http://processors.wiki.ti.com/index.php/Adding_new_DVI_resolutions

    http://processors.wiki.ti.com/index.php/Display_Subsystem

    BR,

    Steve

  • Steve, thanks to you answers.

    Now i know how to resolution and color depth mode.

    But, there is another problem.

    Out engineer, who makes physical connection to lcd-display, say that additional color bits (Blue0, Blue6, Blue7, Green6, Green7, Red0, Red6, Red7)

    are always 0. So, display shows graphics still in 16bpp mode.

    I changed color depth as it described in  article http://processors.wiki.ti.com/index.php/GSG:_AM35x_and_OMAP35x_Graphics_SDK_Additional_Procedures#Testing_the_support_for_ARGB8888_in_Frame_Buffer_Driver

  • Alexey,

    There are 2 parts to this.

    1) the frame buffer format

    2) the output format

    They can be different, and in fact often are since you can have multiple, and different, frame buffers all overlayed on the same output display.

    Please look at hardware register DISPC_CONTROL in order to set the correct "TFTDATALINES" value. This controls how many of the parallel output pins are active.

    The frame buffer needs to be configured as per your requirements but as I say, can be a completely different format to the actual outputs.

    BR,

    Steve

  • Steve

    Sorry for stupid question, but  how to view/change hardware registers?

    Give me please link to articles about this.

     

    Thanks,

    Aleksey

     

  • Aleksey,

    You can use these two functions to read and write physical addresses...

    unsigned long ReadPhysical(unsigned long Address)
    {
      int fd;
      void *map_base, *virt_addr;
      unsigned long read_result;

      if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) FATAL;
      map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, Address & ~MAP_MASK);
      if(map_base == (void *) -1) FATAL;
      virt_addr = map_base + (Address & MAP_MASK);
      read_result = *((unsigned long *) virt_addr);
      if(munmap(map_base, MAP_SIZE) == -1) FATAL;
      close(fd);
      return read_result;
    }

    void WritePhysical(unsigned long Address, unsigned long Data)
    {
      int fd;
      void *map_base, *virt_addr;
      if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) FATAL;
      map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, Address & ~MAP_MASK);
      if(map_base == (void *) -1) FATAL;
      virt_addr = map_base + (Address & MAP_MASK);
      *((unsigned long *) virt_addr) = Data;
      if(munmap(map_base, MAP_SIZE) == -1) FATAL;
      close(fd);
    }

    BR,

    Steve

  • Steve.

    All works fine.

    Thank you very much.

  • You are more than welcome :)

    BR,

    Steve