1*4882a593Smuzhiyun========================= 2*4882a593SmuzhiyunOMAP2/3 Display Subsystem 3*4882a593Smuzhiyun========================= 4*4882a593Smuzhiyun 5*4882a593SmuzhiyunThis is an almost total rewrite of the OMAP FB driver in drivers/video/omap 6*4882a593Smuzhiyun(let's call it DSS1). The main differences between DSS1 and DSS2 are DSI, 7*4882a593SmuzhiyunTV-out and multiple display support, but there are lots of small improvements 8*4882a593Smuzhiyunalso. 9*4882a593Smuzhiyun 10*4882a593SmuzhiyunThe DSS2 driver (omapdss module) is in arch/arm/plat-omap/dss/, and the FB, 11*4882a593Smuzhiyunpanel and controller drivers are in drivers/video/omap2/. DSS1 and DSS2 live 12*4882a593Smuzhiyuncurrently side by side, you can choose which one to use. 13*4882a593Smuzhiyun 14*4882a593SmuzhiyunFeatures 15*4882a593Smuzhiyun-------- 16*4882a593Smuzhiyun 17*4882a593SmuzhiyunWorking and tested features include: 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun- MIPI DPI (parallel) output 20*4882a593Smuzhiyun- MIPI DSI output in command mode 21*4882a593Smuzhiyun- MIPI DBI (RFBI) output 22*4882a593Smuzhiyun- SDI output 23*4882a593Smuzhiyun- TV output 24*4882a593Smuzhiyun- All pieces can be compiled as a module or inside kernel 25*4882a593Smuzhiyun- Use DISPC to update any of the outputs 26*4882a593Smuzhiyun- Use CPU to update RFBI or DSI output 27*4882a593Smuzhiyun- OMAP DISPC planes 28*4882a593Smuzhiyun- RGB16, RGB24 packed, RGB24 unpacked 29*4882a593Smuzhiyun- YUV2, UYVY 30*4882a593Smuzhiyun- Scaling 31*4882a593Smuzhiyun- Adjusting DSS FCK to find a good pixel clock 32*4882a593Smuzhiyun- Use DSI DPLL to create DSS FCK 33*4882a593Smuzhiyun 34*4882a593SmuzhiyunTested boards include: 35*4882a593Smuzhiyun- OMAP3 SDP board 36*4882a593Smuzhiyun- Beagle board 37*4882a593Smuzhiyun- N810 38*4882a593Smuzhiyun 39*4882a593Smuzhiyunomapdss driver 40*4882a593Smuzhiyun-------------- 41*4882a593Smuzhiyun 42*4882a593SmuzhiyunThe DSS driver does not itself have any support for Linux framebuffer, V4L or 43*4882a593Smuzhiyunsuch like the current ones, but it has an internal kernel API that upper level 44*4882a593Smuzhiyundrivers can use. 45*4882a593Smuzhiyun 46*4882a593SmuzhiyunThe DSS driver models OMAP's overlays, overlay managers and displays in a 47*4882a593Smuzhiyunflexible way to enable non-common multi-display configuration. In addition to 48*4882a593Smuzhiyunmodelling the hardware overlays, omapdss supports virtual overlays and overlay 49*4882a593Smuzhiyunmanagers. These can be used when updating a display with CPU or system DMA. 50*4882a593Smuzhiyun 51*4882a593Smuzhiyunomapdss driver support for audio 52*4882a593Smuzhiyun-------------------------------- 53*4882a593SmuzhiyunThere exist several display technologies and standards that support audio as 54*4882a593Smuzhiyunwell. Hence, it is relevant to update the DSS device driver to provide an audio 55*4882a593Smuzhiyuninterface that may be used by an audio driver or any other driver interested in 56*4882a593Smuzhiyunthe functionality. 57*4882a593Smuzhiyun 58*4882a593SmuzhiyunThe audio_enable function is intended to prepare the relevant 59*4882a593SmuzhiyunIP for playback (e.g., enabling an audio FIFO, taking in/out of reset 60*4882a593Smuzhiyunsome IP, enabling companion chips, etc). It is intended to be called before 61*4882a593Smuzhiyunaudio_start. The audio_disable function performs the reverse operation and is 62*4882a593Smuzhiyunintended to be called after audio_stop. 63*4882a593Smuzhiyun 64*4882a593SmuzhiyunWhile a given DSS device driver may support audio, it is possible that for 65*4882a593Smuzhiyuncertain configurations audio is not supported (e.g., an HDMI display using a 66*4882a593SmuzhiyunVESA video timing). The audio_supported function is intended to query whether 67*4882a593Smuzhiyunthe current configuration of the display supports audio. 68*4882a593Smuzhiyun 69*4882a593SmuzhiyunThe audio_config function is intended to configure all the relevant audio 70*4882a593Smuzhiyunparameters of the display. In order to make the function independent of any 71*4882a593Smuzhiyunspecific DSS device driver, a struct omap_dss_audio is defined. Its purpose 72*4882a593Smuzhiyunis to contain all the required parameters for audio configuration. At the 73*4882a593Smuzhiyunmoment, such structure contains pointers to IEC-60958 channel status word 74*4882a593Smuzhiyunand CEA-861 audio infoframe structures. This should be enough to support 75*4882a593SmuzhiyunHDMI and DisplayPort, as both are based on CEA-861 and IEC-60958. 76*4882a593Smuzhiyun 77*4882a593SmuzhiyunThe audio_enable/disable, audio_config and audio_supported functions could be 78*4882a593Smuzhiyunimplemented as functions that may sleep. Hence, they should not be called 79*4882a593Smuzhiyunwhile holding a spinlock or a readlock. 80*4882a593Smuzhiyun 81*4882a593SmuzhiyunThe audio_start/audio_stop function is intended to effectively start/stop audio 82*4882a593Smuzhiyunplayback after the configuration has taken place. These functions are designed 83*4882a593Smuzhiyunto be used in an atomic context. Hence, audio_start should return quickly and be 84*4882a593Smuzhiyuncalled only after all the needed resources for audio playback (audio FIFOs, 85*4882a593SmuzhiyunDMA channels, companion chips, etc) have been enabled to begin data transfers. 86*4882a593Smuzhiyunaudio_stop is designed to only stop the audio transfers. The resources used 87*4882a593Smuzhiyunfor playback are released using audio_disable. 88*4882a593Smuzhiyun 89*4882a593SmuzhiyunThe enum omap_dss_audio_state may be used to help the implementations of 90*4882a593Smuzhiyunthe interface to keep track of the audio state. The initial state is _DISABLED; 91*4882a593Smuzhiyunthen, the state transitions to _CONFIGURED, and then, when it is ready to 92*4882a593Smuzhiyunplay audio, to _ENABLED. The state _PLAYING is used when the audio is being 93*4882a593Smuzhiyunrendered. 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun 96*4882a593SmuzhiyunPanel and controller drivers 97*4882a593Smuzhiyun---------------------------- 98*4882a593Smuzhiyun 99*4882a593SmuzhiyunThe drivers implement panel or controller specific functionality and are not 100*4882a593Smuzhiyunusually visible to users except through omapfb driver. They register 101*4882a593Smuzhiyunthemselves to the DSS driver. 102*4882a593Smuzhiyun 103*4882a593Smuzhiyunomapfb driver 104*4882a593Smuzhiyun------------- 105*4882a593Smuzhiyun 106*4882a593SmuzhiyunThe omapfb driver implements arbitrary number of standard linux framebuffers. 107*4882a593SmuzhiyunThese framebuffers can be routed flexibly to any overlays, thus allowing very 108*4882a593Smuzhiyundynamic display architecture. 109*4882a593Smuzhiyun 110*4882a593SmuzhiyunThe driver exports some omapfb specific ioctls, which are compatible with the 111*4882a593Smuzhiyunioctls in the old driver. 112*4882a593Smuzhiyun 113*4882a593SmuzhiyunThe rest of the non standard features are exported via sysfs. Whether the final 114*4882a593Smuzhiyunimplementation will use sysfs, or ioctls, is still open. 115*4882a593Smuzhiyun 116*4882a593SmuzhiyunV4L2 drivers 117*4882a593Smuzhiyun------------ 118*4882a593Smuzhiyun 119*4882a593SmuzhiyunV4L2 is being implemented in TI. 120*4882a593Smuzhiyun 121*4882a593SmuzhiyunFrom omapdss point of view the V4L2 drivers should be similar to framebuffer 122*4882a593Smuzhiyundriver. 123*4882a593Smuzhiyun 124*4882a593SmuzhiyunArchitecture 125*4882a593Smuzhiyun-------------------- 126*4882a593Smuzhiyun 127*4882a593SmuzhiyunSome clarification what the different components do: 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun - Framebuffer is a memory area inside OMAP's SRAM/SDRAM that contains the 130*4882a593Smuzhiyun pixel data for the image. Framebuffer has width and height and color 131*4882a593Smuzhiyun depth. 132*4882a593Smuzhiyun - Overlay defines where the pixels are read from and where they go on the 133*4882a593Smuzhiyun screen. The overlay may be smaller than framebuffer, thus displaying only 134*4882a593Smuzhiyun part of the framebuffer. The position of the overlay may be changed if 135*4882a593Smuzhiyun the overlay is smaller than the display. 136*4882a593Smuzhiyun - Overlay manager combines the overlays in to one image and feeds them to 137*4882a593Smuzhiyun display. 138*4882a593Smuzhiyun - Display is the actual physical display device. 139*4882a593Smuzhiyun 140*4882a593SmuzhiyunA framebuffer can be connected to multiple overlays to show the same pixel data 141*4882a593Smuzhiyunon all of the overlays. Note that in this case the overlay input sizes must be 142*4882a593Smuzhiyunthe same, but, in case of video overlays, the output size can be different. Any 143*4882a593Smuzhiyunframebuffer can be connected to any overlay. 144*4882a593Smuzhiyun 145*4882a593SmuzhiyunAn overlay can be connected to one overlay manager. Also DISPC overlays can be 146*4882a593Smuzhiyunconnected only to DISPC overlay managers, and virtual overlays can be only 147*4882a593Smuzhiyunconnected to virtual overlays. 148*4882a593Smuzhiyun 149*4882a593SmuzhiyunAn overlay manager can be connected to one display. There are certain 150*4882a593Smuzhiyunrestrictions which kinds of displays an overlay manager can be connected: 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun - DISPC TV overlay manager can be only connected to TV display. 153*4882a593Smuzhiyun - Virtual overlay managers can only be connected to DBI or DSI displays. 154*4882a593Smuzhiyun - DISPC LCD overlay manager can be connected to all displays, except TV 155*4882a593Smuzhiyun display. 156*4882a593Smuzhiyun 157*4882a593SmuzhiyunSysfs 158*4882a593Smuzhiyun----- 159*4882a593SmuzhiyunThe sysfs interface is mainly used for testing. I don't think sysfs 160*4882a593Smuzhiyuninterface is the best for this in the final version, but I don't quite know 161*4882a593Smuzhiyunwhat would be the best interfaces for these things. 162*4882a593Smuzhiyun 163*4882a593SmuzhiyunThe sysfs interface is divided to two parts: DSS and FB. 164*4882a593Smuzhiyun 165*4882a593Smuzhiyun/sys/class/graphics/fb? directory: 166*4882a593Smuzhiyunmirror 0=off, 1=on 167*4882a593Smuzhiyunrotate Rotation 0-3 for 0, 90, 180, 270 degrees 168*4882a593Smuzhiyunrotate_type 0 = DMA rotation, 1 = VRFB rotation 169*4882a593Smuzhiyunoverlays List of overlay numbers to which framebuffer pixels go 170*4882a593Smuzhiyunphys_addr Physical address of the framebuffer 171*4882a593Smuzhiyunvirt_addr Virtual address of the framebuffer 172*4882a593Smuzhiyunsize Size of the framebuffer 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun/sys/devices/platform/omapdss/overlay? directory: 175*4882a593Smuzhiyunenabled 0=off, 1=on 176*4882a593Smuzhiyuninput_size width,height (ie. the framebuffer size) 177*4882a593Smuzhiyunmanager Destination overlay manager name 178*4882a593Smuzhiyunname 179*4882a593Smuzhiyunoutput_size width,height 180*4882a593Smuzhiyunposition x,y 181*4882a593Smuzhiyunscreen_width width 182*4882a593Smuzhiyunglobal_alpha global alpha 0-255 0=transparent 255=opaque 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun/sys/devices/platform/omapdss/manager? directory: 185*4882a593Smuzhiyundisplay Destination display 186*4882a593Smuzhiyunname 187*4882a593Smuzhiyunalpha_blending_enabled 0=off, 1=on 188*4882a593Smuzhiyuntrans_key_enabled 0=off, 1=on 189*4882a593Smuzhiyuntrans_key_type gfx-destination, video-source 190*4882a593Smuzhiyuntrans_key_value transparency color key (RGB24) 191*4882a593Smuzhiyundefault_color default background color (RGB24) 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun/sys/devices/platform/omapdss/display? directory: 194*4882a593Smuzhiyun 195*4882a593Smuzhiyun=============== ============================================================= 196*4882a593Smuzhiyunctrl_name Controller name 197*4882a593Smuzhiyunmirror 0=off, 1=on 198*4882a593Smuzhiyunupdate_mode 0=off, 1=auto, 2=manual 199*4882a593Smuzhiyunenabled 0=off, 1=on 200*4882a593Smuzhiyunname 201*4882a593Smuzhiyunrotate Rotation 0-3 for 0, 90, 180, 270 degrees 202*4882a593Smuzhiyuntimings Display timings (pixclock,xres/hfp/hbp/hsw,yres/vfp/vbp/vsw) 203*4882a593Smuzhiyun When writing, two special timings are accepted for tv-out: 204*4882a593Smuzhiyun "pal" and "ntsc" 205*4882a593Smuzhiyunpanel_name 206*4882a593Smuzhiyuntear_elim Tearing elimination 0=off, 1=on 207*4882a593Smuzhiyunoutput_type Output type (video encoder only): "composite" or "svideo" 208*4882a593Smuzhiyun=============== ============================================================= 209*4882a593Smuzhiyun 210*4882a593SmuzhiyunThere are also some debugfs files at <debugfs>/omapdss/ which show information 211*4882a593Smuzhiyunabout clocks and registers. 212*4882a593Smuzhiyun 213*4882a593SmuzhiyunExamples 214*4882a593Smuzhiyun-------- 215*4882a593Smuzhiyun 216*4882a593SmuzhiyunThe following definitions have been made for the examples below:: 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun ovl0=/sys/devices/platform/omapdss/overlay0 219*4882a593Smuzhiyun ovl1=/sys/devices/platform/omapdss/overlay1 220*4882a593Smuzhiyun ovl2=/sys/devices/platform/omapdss/overlay2 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun mgr0=/sys/devices/platform/omapdss/manager0 223*4882a593Smuzhiyun mgr1=/sys/devices/platform/omapdss/manager1 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun lcd=/sys/devices/platform/omapdss/display0 226*4882a593Smuzhiyun dvi=/sys/devices/platform/omapdss/display1 227*4882a593Smuzhiyun tv=/sys/devices/platform/omapdss/display2 228*4882a593Smuzhiyun 229*4882a593Smuzhiyun fb0=/sys/class/graphics/fb0 230*4882a593Smuzhiyun fb1=/sys/class/graphics/fb1 231*4882a593Smuzhiyun fb2=/sys/class/graphics/fb2 232*4882a593Smuzhiyun 233*4882a593SmuzhiyunDefault setup on OMAP3 SDP 234*4882a593Smuzhiyun-------------------------- 235*4882a593Smuzhiyun 236*4882a593SmuzhiyunHere's the default setup on OMAP3 SDP board. All planes go to LCD. DVI 237*4882a593Smuzhiyunand TV-out are not in use. The columns from left to right are: 238*4882a593Smuzhiyunframebuffers, overlays, overlay managers, displays. Framebuffers are 239*4882a593Smuzhiyunhandled by omapfb, and the rest by the DSS:: 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun FB0 --- GFX -\ DVI 242*4882a593Smuzhiyun FB1 --- VID1 --+- LCD ---- LCD 243*4882a593Smuzhiyun FB2 --- VID2 -/ TV ----- TV 244*4882a593Smuzhiyun 245*4882a593SmuzhiyunExample: Switch from LCD to DVI 246*4882a593Smuzhiyun------------------------------- 247*4882a593Smuzhiyun 248*4882a593Smuzhiyun:: 249*4882a593Smuzhiyun 250*4882a593Smuzhiyun w=`cat $dvi/timings | cut -d "," -f 2 | cut -d "/" -f 1` 251*4882a593Smuzhiyun h=`cat $dvi/timings | cut -d "," -f 3 | cut -d "/" -f 1` 252*4882a593Smuzhiyun 253*4882a593Smuzhiyun echo "0" > $lcd/enabled 254*4882a593Smuzhiyun echo "" > $mgr0/display 255*4882a593Smuzhiyun fbset -fb /dev/fb0 -xres $w -yres $h -vxres $w -vyres $h 256*4882a593Smuzhiyun # at this point you have to switch the dvi/lcd dip-switch from the omap board 257*4882a593Smuzhiyun echo "dvi" > $mgr0/display 258*4882a593Smuzhiyun echo "1" > $dvi/enabled 259*4882a593Smuzhiyun 260*4882a593SmuzhiyunAfter this the configuration looks like::: 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun FB0 --- GFX -\ -- DVI 263*4882a593Smuzhiyun FB1 --- VID1 --+- LCD -/ LCD 264*4882a593Smuzhiyun FB2 --- VID2 -/ TV ----- TV 265*4882a593Smuzhiyun 266*4882a593SmuzhiyunExample: Clone GFX overlay to LCD and TV 267*4882a593Smuzhiyun---------------------------------------- 268*4882a593Smuzhiyun 269*4882a593Smuzhiyun:: 270*4882a593Smuzhiyun 271*4882a593Smuzhiyun w=`cat $tv/timings | cut -d "," -f 2 | cut -d "/" -f 1` 272*4882a593Smuzhiyun h=`cat $tv/timings | cut -d "," -f 3 | cut -d "/" -f 1` 273*4882a593Smuzhiyun 274*4882a593Smuzhiyun echo "0" > $ovl0/enabled 275*4882a593Smuzhiyun echo "0" > $ovl1/enabled 276*4882a593Smuzhiyun 277*4882a593Smuzhiyun echo "" > $fb1/overlays 278*4882a593Smuzhiyun echo "0,1" > $fb0/overlays 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun echo "$w,$h" > $ovl1/output_size 281*4882a593Smuzhiyun echo "tv" > $ovl1/manager 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun echo "1" > $ovl0/enabled 284*4882a593Smuzhiyun echo "1" > $ovl1/enabled 285*4882a593Smuzhiyun 286*4882a593Smuzhiyun echo "1" > $tv/enabled 287*4882a593Smuzhiyun 288*4882a593SmuzhiyunAfter this the configuration looks like (only relevant parts shown):: 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun FB0 +-- GFX ---- LCD ---- LCD 291*4882a593Smuzhiyun \- VID1 ---- TV ---- TV 292*4882a593Smuzhiyun 293*4882a593SmuzhiyunMisc notes 294*4882a593Smuzhiyun---------- 295*4882a593Smuzhiyun 296*4882a593SmuzhiyunOMAP FB allocates the framebuffer memory using the standard dma allocator. You 297*4882a593Smuzhiyuncan enable Contiguous Memory Allocator (CONFIG_CMA) to improve the dma 298*4882a593Smuzhiyunallocator, and if CMA is enabled, you use "cma=" kernel parameter to increase 299*4882a593Smuzhiyunthe global memory area for CMA. 300*4882a593Smuzhiyun 301*4882a593SmuzhiyunUsing DSI DPLL to generate pixel clock it is possible produce the pixel clock 302*4882a593Smuzhiyunof 86.5MHz (max possible), and with that you get 1280x1024@57 output from DVI. 303*4882a593Smuzhiyun 304*4882a593SmuzhiyunRotation and mirroring currently only supports RGB565 and RGB8888 modes. VRFB 305*4882a593Smuzhiyundoes not support mirroring. 306*4882a593Smuzhiyun 307*4882a593SmuzhiyunVRFB rotation requires much more memory than non-rotated framebuffer, so you 308*4882a593Smuzhiyunprobably need to increase your vram setting before using VRFB rotation. Also, 309*4882a593Smuzhiyunmany applications may not work with VRFB if they do not pay attention to all 310*4882a593Smuzhiyunframebuffer parameters. 311*4882a593Smuzhiyun 312*4882a593SmuzhiyunKernel boot arguments 313*4882a593Smuzhiyun--------------------- 314*4882a593Smuzhiyun 315*4882a593Smuzhiyunomapfb.mode=<display>:<mode>[,...] 316*4882a593Smuzhiyun - Default video mode for specified displays. For example, 317*4882a593Smuzhiyun "dvi:800x400MR-24@60". See drivers/video/modedb.c. 318*4882a593Smuzhiyun There are also two special modes: "pal" and "ntsc" that 319*4882a593Smuzhiyun can be used to tv out. 320*4882a593Smuzhiyun 321*4882a593Smuzhiyunomapfb.vram=<fbnum>:<size>[@<physaddr>][,...] 322*4882a593Smuzhiyun - VRAM allocated for a framebuffer. Normally omapfb allocates vram 323*4882a593Smuzhiyun depending on the display size. With this you can manually allocate 324*4882a593Smuzhiyun more or define the physical address of each framebuffer. For example, 325*4882a593Smuzhiyun "1:4M" to allocate 4M for fb1. 326*4882a593Smuzhiyun 327*4882a593Smuzhiyunomapfb.debug=<y|n> 328*4882a593Smuzhiyun - Enable debug printing. You have to have OMAPFB debug support enabled 329*4882a593Smuzhiyun in kernel config. 330*4882a593Smuzhiyun 331*4882a593Smuzhiyunomapfb.test=<y|n> 332*4882a593Smuzhiyun - Draw test pattern to framebuffer whenever framebuffer settings change. 333*4882a593Smuzhiyun You need to have OMAPFB debug support enabled in kernel config. 334*4882a593Smuzhiyun 335*4882a593Smuzhiyunomapfb.vrfb=<y|n> 336*4882a593Smuzhiyun - Use VRFB rotation for all framebuffers. 337*4882a593Smuzhiyun 338*4882a593Smuzhiyunomapfb.rotate=<angle> 339*4882a593Smuzhiyun - Default rotation applied to all framebuffers. 340*4882a593Smuzhiyun 0 - 0 degree rotation 341*4882a593Smuzhiyun 1 - 90 degree rotation 342*4882a593Smuzhiyun 2 - 180 degree rotation 343*4882a593Smuzhiyun 3 - 270 degree rotation 344*4882a593Smuzhiyun 345*4882a593Smuzhiyunomapfb.mirror=<y|n> 346*4882a593Smuzhiyun - Default mirror for all framebuffers. Only works with DMA rotation. 347*4882a593Smuzhiyun 348*4882a593Smuzhiyunomapdss.def_disp=<display> 349*4882a593Smuzhiyun - Name of default display, to which all overlays will be connected. 350*4882a593Smuzhiyun Common examples are "lcd" or "tv". 351*4882a593Smuzhiyun 352*4882a593Smuzhiyunomapdss.debug=<y|n> 353*4882a593Smuzhiyun - Enable debug printing. You have to have DSS debug support enabled in 354*4882a593Smuzhiyun kernel config. 355*4882a593Smuzhiyun 356*4882a593SmuzhiyunTODO 357*4882a593Smuzhiyun---- 358*4882a593Smuzhiyun 359*4882a593SmuzhiyunDSS locking 360*4882a593Smuzhiyun 361*4882a593SmuzhiyunError checking 362*4882a593Smuzhiyun 363*4882a593Smuzhiyun- Lots of checks are missing or implemented just as BUG() 364*4882a593Smuzhiyun 365*4882a593SmuzhiyunSystem DMA update for DSI 366*4882a593Smuzhiyun 367*4882a593Smuzhiyun- Can be used for RGB16 and RGB24P modes. Probably not for RGB24U (how 368*4882a593Smuzhiyun to skip the empty byte?) 369*4882a593Smuzhiyun 370*4882a593SmuzhiyunOMAP1 support 371*4882a593Smuzhiyun 372*4882a593Smuzhiyun- Not sure if needed 373