blob: d0aea91922047277ad563687a75022083d045f83 [file] [log] [blame]
Tomi Valkeinen4d1a7c12009-08-04 15:47:11 +03001OMAP2/3 Display Subsystem
2-------------------------
3
4This is an almost total rewrite of the OMAP FB driver in drivers/video/omap
5(let's call it DSS1). The main differences between DSS1 and DSS2 are DSI,
6TV-out and multiple display support, but there are lots of small improvements
7also.
8
9The DSS2 driver (omapdss module) is in arch/arm/plat-omap/dss/, and the FB,
10panel and controller drivers are in drivers/video/omap2/. DSS1 and DSS2 live
11currently side by side, you can choose which one to use.
12
13Features
14--------
15
16Working and tested features include:
17
18- MIPI DPI (parallel) output
19- MIPI DSI output in command mode
20- MIPI DBI (RFBI) output
21- SDI output
22- TV output
23- All pieces can be compiled as a module or inside kernel
24- Use DISPC to update any of the outputs
25- Use CPU to update RFBI or DSI output
26- OMAP DISPC planes
27- RGB16, RGB24 packed, RGB24 unpacked
28- YUV2, UYVY
29- Scaling
30- Adjusting DSS FCK to find a good pixel clock
31- Use DSI DPLL to create DSS FCK
32
33Tested boards include:
34- OMAP3 SDP board
35- Beagle board
36- N810
37
38omapdss driver
39--------------
40
41The DSS driver does not itself have any support for Linux framebuffer, V4L or
42such like the current ones, but it has an internal kernel API that upper level
43drivers can use.
44
45The DSS driver models OMAP's overlays, overlay managers and displays in a
46flexible way to enable non-common multi-display configuration. In addition to
47modelling the hardware overlays, omapdss supports virtual overlays and overlay
48managers. These can be used when updating a display with CPU or system DMA.
49
50Panel and controller drivers
51----------------------------
52
53The drivers implement panel or controller specific functionality and are not
54usually visible to users except through omapfb driver. They register
55themselves to the DSS driver.
56
57omapfb driver
58-------------
59
60The omapfb driver implements arbitrary number of standard linux framebuffers.
61These framebuffers can be routed flexibly to any overlays, thus allowing very
62dynamic display architecture.
63
64The driver exports some omapfb specific ioctls, which are compatible with the
65ioctls in the old driver.
66
67The rest of the non standard features are exported via sysfs. Whether the final
68implementation will use sysfs, or ioctls, is still open.
69
70V4L2 drivers
71------------
72
73V4L2 is being implemented in TI.
74
75From omapdss point of view the V4L2 drivers should be similar to framebuffer
76driver.
77
78Architecture
79--------------------
80
81Some clarification what the different components do:
82
83 - Framebuffer is a memory area inside OMAP's SRAM/SDRAM that contains the
84 pixel data for the image. Framebuffer has width and height and color
85 depth.
86 - Overlay defines where the pixels are read from and where they go on the
87 screen. The overlay may be smaller than framebuffer, thus displaying only
88 part of the framebuffer. The position of the overlay may be changed if
89 the overlay is smaller than the display.
90 - Overlay manager combines the overlays in to one image and feeds them to
91 display.
92 - Display is the actual physical display device.
93
94A framebuffer can be connected to multiple overlays to show the same pixel data
95on all of the overlays. Note that in this case the overlay input sizes must be
96the same, but, in case of video overlays, the output size can be different. Any
97framebuffer can be connected to any overlay.
98
99An overlay can be connected to one overlay manager. Also DISPC overlays can be
100connected only to DISPC overlay managers, and virtual overlays can be only
101connected to virtual overlays.
102
103An overlay manager can be connected to one display. There are certain
104restrictions which kinds of displays an overlay manager can be connected:
105
106 - DISPC TV overlay manager can be only connected to TV display.
107 - Virtual overlay managers can only be connected to DBI or DSI displays.
108 - DISPC LCD overlay manager can be connected to all displays, except TV
109 display.
110
111Sysfs
112-----
113The sysfs interface is mainly used for testing. I don't think sysfs
114interface is the best for this in the final version, but I don't quite know
115what would be the best interfaces for these things.
116
117The sysfs interface is divided to two parts: DSS and FB.
118
119/sys/class/graphics/fb? directory:
120mirror 0=off, 1=on
121rotate Rotation 0-3 for 0, 90, 180, 270 degrees
122rotate_type 0 = DMA rotation, 1 = VRFB rotation
123overlays List of overlay numbers to which framebuffer pixels go
124phys_addr Physical address of the framebuffer
125virt_addr Virtual address of the framebuffer
126size Size of the framebuffer
127
128/sys/devices/platform/omapdss/overlay? directory:
129enabled 0=off, 1=on
130input_size width,height (ie. the framebuffer size)
131manager Destination overlay manager name
132name
133output_size width,height
134position x,y
135screen_width width
136global_alpha global alpha 0-255 0=transparent 255=opaque
137
138/sys/devices/platform/omapdss/manager? directory:
139display Destination display
140name
141alpha_blending_enabled 0=off, 1=on
142trans_key_enabled 0=off, 1=on
143trans_key_type gfx-destination, video-source
144trans_key_value transparency color key (RGB24)
145default_color default background color (RGB24)
146
147/sys/devices/platform/omapdss/display? directory:
148ctrl_name Controller name
149mirror 0=off, 1=on
150update_mode 0=off, 1=auto, 2=manual
151enabled 0=off, 1=on
152name
153rotate Rotation 0-3 for 0, 90, 180, 270 degrees
154timings Display timings (pixclock,xres/hfp/hbp/hsw,yres/vfp/vbp/vsw)
155 When writing, two special timings are accepted for tv-out:
156 "pal" and "ntsc"
157panel_name
158tear_elim Tearing elimination 0=off, 1=on
Grazvydas Ignotas0aca3c62012-04-24 00:08:54 +0300159output_type Output type (video encoder only): "composite" or "svideo"
Tomi Valkeinen4d1a7c12009-08-04 15:47:11 +0300160
161There are also some debugfs files at <debugfs>/omapdss/ which show information
162about clocks and registers.
163
164Examples
165--------
166
167The following definitions have been made for the examples below:
168
169ovl0=/sys/devices/platform/omapdss/overlay0
170ovl1=/sys/devices/platform/omapdss/overlay1
171ovl2=/sys/devices/platform/omapdss/overlay2
172
173mgr0=/sys/devices/platform/omapdss/manager0
174mgr1=/sys/devices/platform/omapdss/manager1
175
176lcd=/sys/devices/platform/omapdss/display0
177dvi=/sys/devices/platform/omapdss/display1
178tv=/sys/devices/platform/omapdss/display2
179
180fb0=/sys/class/graphics/fb0
181fb1=/sys/class/graphics/fb1
182fb2=/sys/class/graphics/fb2
183
184Default setup on OMAP3 SDP
185--------------------------
186
187Here's the default setup on OMAP3 SDP board. All planes go to LCD. DVI
188and TV-out are not in use. The columns from left to right are:
189framebuffers, overlays, overlay managers, displays. Framebuffers are
190handled by omapfb, and the rest by the DSS.
191
192FB0 --- GFX -\ DVI
193FB1 --- VID1 --+- LCD ---- LCD
194FB2 --- VID2 -/ TV ----- TV
195
196Example: Switch from LCD to DVI
197----------------------
198
199w=`cat $dvi/timings | cut -d "," -f 2 | cut -d "/" -f 1`
200h=`cat $dvi/timings | cut -d "," -f 3 | cut -d "/" -f 1`
201
202echo "0" > $lcd/enabled
203echo "" > $mgr0/display
204fbset -fb /dev/fb0 -xres $w -yres $h -vxres $w -vyres $h
205# at this point you have to switch the dvi/lcd dip-switch from the omap board
206echo "dvi" > $mgr0/display
207echo "1" > $dvi/enabled
208
209After this the configuration looks like:
210
211FB0 --- GFX -\ -- DVI
212FB1 --- VID1 --+- LCD -/ LCD
213FB2 --- VID2 -/ TV ----- TV
214
215Example: Clone GFX overlay to LCD and TV
216-------------------------------
217
218w=`cat $tv/timings | cut -d "," -f 2 | cut -d "/" -f 1`
219h=`cat $tv/timings | cut -d "," -f 3 | cut -d "/" -f 1`
220
221echo "0" > $ovl0/enabled
222echo "0" > $ovl1/enabled
223
224echo "" > $fb1/overlays
225echo "0,1" > $fb0/overlays
226
227echo "$w,$h" > $ovl1/output_size
228echo "tv" > $ovl1/manager
229
230echo "1" > $ovl0/enabled
231echo "1" > $ovl1/enabled
232
233echo "1" > $tv/enabled
234
235After this the configuration looks like (only relevant parts shown):
236
237FB0 +-- GFX ---- LCD ---- LCD
238 \- VID1 ---- TV ---- TV
239
240Misc notes
241----------
242
243OMAP FB allocates the framebuffer memory using the OMAP VRAM allocator.
244
245Using DSI DPLL to generate pixel clock it is possible produce the pixel clock
246of 86.5MHz (max possible), and with that you get 1280x1024@57 output from DVI.
247
248Rotation and mirroring currently only supports RGB565 and RGB8888 modes. VRFB
249does not support mirroring.
250
251VRFB rotation requires much more memory than non-rotated framebuffer, so you
252probably need to increase your vram setting before using VRFB rotation. Also,
253many applications may not work with VRFB if they do not pay attention to all
254framebuffer parameters.
255
256Kernel boot arguments
257---------------------
258
Tomi Valkeinen0bf3d5a2010-11-10 11:45:20 +0200259vram=<size>[,<physaddr>]
260 - Amount of total VRAM to preallocate and optionally a physical start
261 memory address. For example, "10M". omapfb allocates memory for
262 framebuffers from VRAM.
Tomi Valkeinen4d1a7c12009-08-04 15:47:11 +0300263
264omapfb.mode=<display>:<mode>[,...]
265 - Default video mode for specified displays. For example,
266 "dvi:800x400MR-24@60". See drivers/video/modedb.c.
267 There are also two special modes: "pal" and "ntsc" that
268 can be used to tv out.
269
270omapfb.vram=<fbnum>:<size>[@<physaddr>][,...]
271 - VRAM allocated for a framebuffer. Normally omapfb allocates vram
272 depending on the display size. With this you can manually allocate
273 more or define the physical address of each framebuffer. For example,
274 "1:4M" to allocate 4M for fb1.
275
276omapfb.debug=<y|n>
277 - Enable debug printing. You have to have OMAPFB debug support enabled
278 in kernel config.
279
280omapfb.test=<y|n>
281 - Draw test pattern to framebuffer whenever framebuffer settings change.
282 You need to have OMAPFB debug support enabled in kernel config.
283
284omapfb.vrfb=<y|n>
285 - Use VRFB rotation for all framebuffers.
286
287omapfb.rotate=<angle>
288 - Default rotation applied to all framebuffers.
289 0 - 0 degree rotation
290 1 - 90 degree rotation
291 2 - 180 degree rotation
292 3 - 270 degree rotation
293
294omapfb.mirror=<y|n>
295 - Default mirror for all framebuffers. Only works with DMA rotation.
296
297omapdss.def_disp=<display>
298 - Name of default display, to which all overlays will be connected.
299 Common examples are "lcd" or "tv".
300
301omapdss.debug=<y|n>
302 - Enable debug printing. You have to have DSS debug support enabled in
303 kernel config.
304
305TODO
306----
307
308DSS locking
309
310Error checking
311- Lots of checks are missing or implemented just as BUG()
312
313System DMA update for DSI
314- Can be used for RGB16 and RGB24P modes. Probably not for RGB24U (how
315 to skip the empty byte?)
316
317OMAP1 support
318- Not sure if needed
319