Blame view

Documentation/fb/pxafb.txt 4.56 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
  Driver for PXA25x LCD controller
  ================================
  
  The driver supports the following options, either via
  options=<OPTIONS> when modular or video=pxafb:<OPTIONS> when built in.
  
  For example:
77e196752   Eric Miao   [ARM] pxafb: allo...
8
  	modprobe pxafb options=vmem:2M,mode:640x480-8,passive
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
9
  or on the kernel command line
77e196752   Eric Miao   [ARM] pxafb: allo...
10
11
12
13
14
  	video=pxafb:vmem:2M,mode:640x480-8,passive
  
  vmem: VIDEO_MEM_SIZE
  	Amount of video memory to allocate (can be suffixed with K or M
  	for kilobytes or megabytes)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
  
  mode:XRESxYRES[-BPP]
  	XRES == LCCR1_PPL + 1
  	YRES == LLCR2_LPP + 1
  		The resolution of the display in pixels
  	BPP == The bit depth. Valid values are 1, 2, 4, 8 and 16.
  
  pixclock:PIXCLOCK
  	Pixel clock in picoseconds
  
  left:LEFT == LCCR1_BLW + 1
  right:RIGHT == LCCR1_ELW + 1
  hsynclen:HSYNC == LCCR1_HSW + 1
  upper:UPPER == LCCR2_BFW
  lower:LOWER == LCCR2_EFR
  vsynclen:VSYNC == LCCR2_VSW + 1
  	Display margins and sync times
  
  color | mono => LCCR0_CMS
  	umm...
  
  active | passive => LCCR0_PAS
  	Active (TFT) or Passive (STN) display
  
  single | dual => LCCR0_SDS
  	Single or dual panel passive display
  
  4pix | 8pix => LCCR0_DPD
  	4 or 8 pixel monochrome single panel data
  
  hsync:HSYNC
  vsync:VSYNC
  	Horizontal and vertical sync. 0 => active low, 1 => active
  	high.
  
  dpc:DPC
  	Double pixel clock. 1=>true, 0=>false
  
  outputen:POLARITY
  	Output Enable Polarity. 0 => active low, 1 => active high
  
  pixclockpol:POLARITY
  	pixel clock polarity
  	0 => falling edge, 1 => rising edge
198fc108e   Eric Miao   [ARM] pxafb: add ...
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
  
  
  Overlay Support for PXA27x and later LCD controllers
  ====================================================
  
    PXA27x and later processors support overlay1 and overlay2 on-top of the
    base framebuffer (although under-neath the base is also possible). They
    support palette and no-palette RGB formats, as well as YUV formats (only
    available on overlay2). These overlays have dedicated DMA channels and
    behave in a similar way as a framebuffer.
  
    However, there are some differences between these overlay framebuffers
    and normal framebuffers, as listed below:
  
    1. overlay can start at a 32-bit word aligned position within the base
       framebuffer, which means they have a start (x, y). This information
       is encoded into var->nonstd (no, var->xoffset and var->yoffset are
       not for such purpose).
  
    2. overlay framebuffer is allocated dynamically according to specified
       'struct fb_var_screeninfo', the amount is decided by:
  
          var->xres_virtual * var->yres_virtual * bpp
  
       bpp = 16 -- for RGB565 or RGBT555
           = 24 -- for YUV444 packed
           = 24 -- for YUV444 planar
  	 = 16 -- for YUV422 planar (1 pixel = 1 Y + 1/2 Cb + 1/2 Cr)
  	 = 12 -- for YUV420 planar (1 pixel = 1 Y + 1/4 Cb + 1/4 Cr)
  
       NOTE:
  
       a. overlay does not support panning in x-direction, thus
          var->xres_virtual will always be equal to var->xres
  
       b. line length of overlay(s) must be on a 32-bit word boundary,
          for YUV planar modes, it is a requirement for the component
  	with minimum bits per pixel,  e.g. for YUV420, Cr component
  	for one pixel is actually 2-bits, it means the line length
  	should be a multiple of 16-pixels
  
       c. starting horizontal position (XPOS) should start on a 32-bit
          word boundary, otherwise the fb_check_var() will just fail.
  
       d. the rectangle of the overlay should be within the base plane,
          otherwise fail
  
       Applications should follow the sequence below to operate an overlay
       framebuffer:
  
           a. open("/dev/fb[1-2]", ...)
  	 b. ioctl(fd, FBIOGET_VSCREENINFO, ...)
  	 c. modify 'var' with desired parameters:
  	    1) var->xres and var->yres
  	    2) larger var->yres_virtual if more memory is required,
  	       usually for double-buffering
  	    3) var->nonstd for starting (x, y) and color format
  	    4) var->{red, green, blue, transp} if RGB mode is to be used
  	 d. ioctl(fd, FBIOPUT_VSCREENINFO, ...)
  	 e. ioctl(fd, FBIOGET_FSCREENINFO, ...)
  	 f. mmap
  	 g. ...
  
    3. for YUV planar formats, these are actually not supported within the
       framebuffer framework, application has to take care of the offsets
       and lengths of each component within the framebuffer.
  
    4. var->nonstd is used to pass starting (x, y) position and color format,
       the detailed bit fields are shown below:
  
      31                23  20         10          0
       +-----------------+---+----------+----------+
       |  ... unused ... |FOR|   XPOS   |   YPOS   |
       +-----------------+---+----------+----------+
  
       FOR  - color format, as defined by OVERLAY_FORMAT_* in pxafb.h
              0 - RGB
  	    1 - YUV444 PACKED
  	    2 - YUV444 PLANAR
  	    3 - YUV422 PLANAR
  	    4 - YUR420 PLANAR
  
       XPOS - starting horizontal position
       YPOS - starting vertical position