打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
OMAP3 DSS2 Architecture

OMAP3 DSS2 Architecture

  • 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

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

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

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


Directory Structure

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

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.

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
为何ARM linux会引入Device Tree
简化的字符设备驱动程序scull
OTG Transceiver --- ISP1301 的驱动代码分析(一)
Linux I2C驱动完全分析(一)
Linux ALSA声卡驱动之三:PCM设备的创建
Device Drivers, Part 7: Generic Hardware Access in Linux
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服