2019-06-12 20:52:45 +03:00
================================
2005-04-17 02:20:36 +04:00
Driver for PXA25x LCD controller
================================
The driver supports the following options, either via
options=<OPTIONS> when modular or video=pxafb:<OPTIONS> when built in.
2019-06-12 20:52:45 +03:00
For example::
2008-12-16 06:54:34 +03:00
modprobe pxafb options=vmem:2M,mode:640x480-8,passive
2019-06-12 20:52:45 +03:00
or on the kernel command line::
2008-12-16 06:54:34 +03:00
video=pxafb:vmem:2M,mode:640x480-8,passive
vmem: VIDEO_MEM_SIZE
2019-06-12 20:52:45 +03:00
2008-12-16 06:54:34 +03:00
Amount of video memory to allocate (can be suffixed with K or M
for kilobytes or megabytes)
2005-04-17 02:20:36 +04:00
mode:XRESxYRES[-BPP]
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
XRES == LCCR1_PPL + 1
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
YRES == LLCR2_LPP + 1
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
The resolution of the display in pixels
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
BPP == The bit depth. Valid values are 1, 2, 4, 8 and 16.
pixclock:PIXCLOCK
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
Pixel clock in picoseconds
left:LEFT == LCCR1_BLW + 1
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
right:RIGHT == LCCR1_ELW + 1
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
hsynclen:HSYNC == LCCR1_HSW + 1
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
upper:UPPER == LCCR2_BFW
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
lower:LOWER == LCCR2_EFR
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
vsynclen:VSYNC == LCCR2_VSW + 1
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
Display margins and sync times
color | mono => LCCR0_CMS
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
umm...
active | passive => LCCR0_PAS
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
Active (TFT) or Passive (STN) display
single | dual => LCCR0_SDS
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
Single or dual panel passive display
4pix | 8pix => LCCR0_DPD
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
4 or 8 pixel monochrome single panel data
2019-06-12 20:52:45 +03:00
hsync:HSYNC, vsync:VSYNC
2005-04-17 02:20:36 +04:00
Horizontal and vertical sync. 0 => active low, 1 => active
high.
dpc:DPC
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
Double pixel clock. 1=>true, 0=>false
outputen:POLARITY
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
Output Enable Polarity. 0 => active low, 1 => active high
pixclockpol:POLARITY
2019-06-12 20:52:45 +03:00
2005-04-17 02:20:36 +04:00
pixel clock polarity
0 => falling edge, 1 => rising edge
2008-12-23 12:49:43 +03:00
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
2019-06-12 20:52:45 +03:00
'struct fb_var_screeninfo', the amount is decided by::
2008-12-23 12:49:43 +03:00
2019-06-12 20:52:45 +03:00
var->xres_virtual * var->yres_virtual * bpp
2008-12-23 12:49:43 +03:00
bpp = 16 -- for RGB565 or RGBT555
2019-06-12 20:52:45 +03:00
bpp = 24 -- for YUV444 packed
bpp = 24 -- for YUV444 planar
bpp = 16 -- for YUV422 planar (1 pixel = 1 Y + 1/2 Cb + 1/2 Cr)
bpp = 12 -- for YUV420 planar (1 pixel = 1 Y + 1/4 Cb + 1/4 Cr)
2008-12-23 12:49:43 +03:00
NOTE:
a. overlay does not support panning in x-direction, thus
2019-06-12 20:52:45 +03:00
var->xres_virtual will always be equal to var->xres
2008-12-23 12:49:43 +03:00
b. line length of overlay(s) must be on a 32-bit word boundary,
2019-06-12 20:52:45 +03:00
for YUV planar modes, it is a requirement for the component
2008-12-23 12:49:43 +03:00
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
2019-06-12 20:52:45 +03:00
word boundary, otherwise the fb_check_var() will just fail.
2008-12-23 12:49:43 +03:00
d. the rectangle of the overlay should be within the base plane,
2019-06-12 20:52:45 +03:00
otherwise fail
2008-12-23 12:49:43 +03:00
Applications should follow the sequence below to operate an overlay
framebuffer:
2019-06-12 20:52:45 +03:00
a. open("/dev/fb[1-2]", ...)
2008-12-23 12:49:43 +03:00
b. ioctl(fd, FBIOGET_VSCREENINFO, ...)
c. modify 'var' with desired parameters:
2019-06-12 20:52:45 +03:00
2008-12-23 12:49:43 +03:00
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
2019-06-12 20:52:45 +03:00
2008-12-23 12:49:43 +03:00
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,
2019-06-12 20:52:45 +03:00
the detailed bit fields are shown below::
2008-12-23 12:49:43 +03:00
2019-06-12 20:52:45 +03:00
31 23 20 10 0
+-----------------+---+----------+----------+
| ... unused ... |FOR| XPOS | YPOS |
+-----------------+---+----------+----------+
2008-12-23 12:49:43 +03:00
FOR - color format, as defined by OVERLAY_FORMAT_* in pxafb.h
2019-06-12 20:52:45 +03:00
- 0 - RGB
- 1 - YUV444 PACKED
- 2 - YUV444 PLANAR
- 3 - YUV422 PLANAR
- 4 - YUR420 PLANAR
2008-12-23 12:49:43 +03:00
XPOS - starting horizontal position
2019-06-12 20:52:45 +03:00
2008-12-23 12:49:43 +03:00
YPOS - starting vertical position