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.
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.
DSS2 development Git repository (Owner - Tomi Valkeinen)-DSS2 Development Git Repository
PSP DSS2 Development Git Repository (Owner - Vaibhav Hiremath) -PSP DSS2 Development Git Repository
Below is the basic block diagram of the Overall Video driver architecture -
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
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.
For technical support on OMAP please post your questions on The OMAP Forum. Please post only comments about the article OMAP3 DSS2 Architecture here. |
Links | ||||
|
联系客服