xref: /OK3568_Linux_fs/kernel/Documentation/arm/omap/dss.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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