NOTICE: The Processors Wiki will End-of-Life in December of 2020. It is recommended to download any files or other content you may need that are hosted on processors.wiki.ti.com. The site is now set to read only.

OMAP3 DSS2 Architecture

From Texas Instruments Wiki
Jump to: navigation, search

OMAP3 DSS2 Architecture[edit]

  • Background
  • Useful Links
  • Software Architecture Block Diagram
  • Directory Structure
  • How to add/support new display panel

NOTE:This is initial draft which explains some basic interfaces, and will be subject to change to cover most of the aspects of DSS2. If you have any issues/comments, Please leave that at the bottom of this page.

Background[edit]

There are 2 versions of software present for OMAP35x DSS2 module, one is developed by TI and another is developed/evolved from Open Source Community effort. To differentiate between these two software's we are calling TI version as DSS1 and community version as DSS2.

As far as features support is concerned DSS2 is feature rich as compared to DSS1, it has support for most of the interfaces like, DPI, RFBI, VENC, DSI, SDI, etc... Where as DSS1 is only focused towards DPI and VENC interface.

From PSP release point of view, all the releases of PSP1.0.x is based out of DSS1 (only supports DPI and VENC out). PSP releases greater than 02.0x.xx.xx and 03.0x.xx.xx packages are based out of DSS2.

NOTE: Please note that the scope of this document is to understand DSS2 architecture and its components.

Useful Links[edit]

DSS2 development Git repository (Owner - Tomi Valkeinen)- DSS2 Development Git Repository

PSP DSS2 Development Git Repository (Owner - Vaibhav Hiremath) - PSP DSS2 Development Git Repository

Software Architecture Block Diagram[edit]

Below is the basic block diagram of the Overall Video driver architecture -

Dss2-sw-arch.JPG


Directory Structure[edit]

Below is the directory structure for the video (DSS2 + driver) -

Linux home directory (linux-2.6.x)

drivers/video/omap2/ -
dss/ -
core.c
dss.c
display.c
manager.c
overlay.c
dpi.c
venc.c
dsi.c
sdi.c
rfbi.c
omapfb/ -
omapfb-main.c
omapfb-ioctl.c
omapfb-sysfs.c
displays/ -
panel-generic.c
panel-samsung-lte430wq-f0c.c
panel-sharp-ls037v7dw01.c
panel-taal.c
drivers/media/video/omap/ -
omap_vout.c
omap_voutlib.c

How to add/support new display panel[edit]

The DSS2 software is completely based on registration mechanism which enables users to add support for any kind of LCD panel (DSI, DPI, etc..)

NOTE: For illustration purpose we will take/discuss DPI LCD panel (sharp-ls037v7dw01).

Important data structure -

struct omap_video_timings {

       u16 x_res; /*in pixels*/
       u16 y_res; /*in pixels*/
       u32 pixel_clock; /*in Khz*/
       u16 hsw; /* Horizontal synchronization pulse width */
       u16 hfp; /* Horizontal front porch */
       u16 hbp; /* Horizontal back porch */
       u16 vsw; /* Vertical synchronization pulse width */
       u16 vfp; /* Vertical front porch */
       u16 vbp; /* Vertical back porch */

};

The above structure contains all the LCD panel specific timing parameters which we need to pass it to the DSS2 during drivers probe function call. For sharp-ls037v7dw01 LCD panel, the parameters will look like -

static struct omap_video_timings sharp_ls_timings = {

       .x_res = 480,
       .y_res = 640,
       .pixel_clock    = 19200,
       .hsw            = 2,
       .hfp            = 1,
       .hbp            = 28,
       .vsw            = 1,
       .vfp            = 1,
       .vbp            = 1,

};

struct omap_dss_driver {

       struct device_driver driver;
       int (*probe)(struct omap_dss_device *);
       void (*remove)(struct omap_dss_device *);
       int (*enable)(struct omap_dss_device *display);
       void (*disable)(struct omap_dss_device *display);
       int (*suspend)(struct omap_dss_device *display);
       int (*resume)(struct omap_dss_device *display);
       int (*run_test)(struct omap_dss_device *display, int test);
       void (*setup_update)(struct omap_dss_device *dssdev, u16 x, u16 y, u16 w, u16 h);
       int (*enable_te)(struct omap_dss_device *dssdev, bool enable);
       int (*wait_for_te)(struct omap_dss_device *dssdev);
       u8 (*get_rotate)(struct omap_dss_device *dssdev);
       int (*set_rotate)(struct omap_dss_device *dssdev, u8 rotate);
       bool (*get_mirror)(struct omap_dss_device *dssdev);
       int (*set_mirror)(struct omap_dss_device *dssdev, bool enable);
       int (*memory_read)(struct omap_dss_device *dssdev, void *buf, size_t size, u16 x, u16 y, u16 w, u16 h);

};

The above data structure actually registers LCD Panel and its call back functions to DSS2 library. For sharp-ls037v7dw01 LCD panel the structure will look like -

static struct omap_dss_driver sharp_ls_driver = {

       .probe          = sharp_ls_panel_probe,
       .remove         = sharp_ls_panel_remove,
       .enable         = sharp_ls_panel_enable,
       .disable        = sharp_ls_panel_disable,
       .suspend        = sharp_ls_panel_suspend,
       .resume         = sharp_ls_panel_resume,
       .driver         = {
               .name   = "sharp_ls_panel",
               .owner  = THIS_MODULE,
       },

};

Pass this structure from the __init call of LCD panel file in the "omap_dss_register_driver" function.


PSP release already supports some of the LCD panel, user has to copy and rename one of the file to his LCD panel and modify it according to LCD Panel requirements. Based on the LCD panel most of the function may remain empty, doing nothing.

NOTE: Please do not forget to register device for your newly added LCD panel driver in your board specific file.

E2e.jpg {{
  1. switchcategory:MultiCore=
  • For technical support on MultiCore devices, please post your questions in the C6000 MultiCore Forum
  • For questions related to the BIOS MultiCore SDK (MCSDK), please use the BIOS Forum

Please post only comments related to the article OMAP3 DSS2 Architecture here.

Keystone=
  • For technical support on MultiCore devices, please post your questions in the C6000 MultiCore Forum
  • For questions related to the BIOS MultiCore SDK (MCSDK), please use the BIOS Forum

Please post only comments related to the article OMAP3 DSS2 Architecture here.

C2000=For technical support on the C2000 please post your questions on The C2000 Forum. Please post only comments about the article OMAP3 DSS2 Architecture here. DaVinci=For technical support on DaVincoplease post your questions on The DaVinci Forum. Please post only comments about the article OMAP3 DSS2 Architecture here. MSP430=For technical support on MSP430 please post your questions on The MSP430 Forum. Please post only comments about the article OMAP3 DSS2 Architecture here. OMAP35x=For technical support on OMAP please post your questions on The OMAP Forum. Please post only comments about the article OMAP3 DSS2 Architecture here. OMAPL1=For technical support on OMAP please post your questions on The OMAP Forum. Please post only comments about the article OMAP3 DSS2 Architecture here. MAVRK=For technical support on MAVRK please post your questions on The MAVRK Toolbox Forum. Please post only comments about the article OMAP3 DSS2 Architecture here. For technical support please post your questions at http://e2e.ti.com. Please post only comments about the article OMAP3 DSS2 Architecture here.

}}

Hyperlink blue.png Links

Amplifiers & Linear
Audio
Broadband RF/IF & Digital Radio
Clocks & Timers
Data Converters

DLP & MEMS
High-Reliability
Interface
Logic
Power Management

Processors

Switches & Multiplexers
Temperature Sensors & Control ICs
Wireless Connectivity