diff options
author | Ryan Mallon <ryan@bluewatersys.com> | 2009-09-22 19:47:09 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-23 10:39:51 -0400 |
commit | 88017bda96a5fd568a982b01546c8fb1782dda62 (patch) | |
tree | fb31f14c593f882dac2db7acdfadbc469240dd6d /Documentation/fb | |
parent | c6012189a40d33213ead5d15769fab615443206f (diff) |
ep93xx video driver
EP93xx video driver plus documentation.
Signed-off-by: Ryan Mallon <ryan@bluewatersys.com>
Acked-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Daniele Venzano <linux@brownhat.org>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: Krzysztof Helt <krzysztof.h1@poczta.fm>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'Documentation/fb')
-rw-r--r-- | Documentation/fb/ep93xx-fb.txt | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/Documentation/fb/ep93xx-fb.txt b/Documentation/fb/ep93xx-fb.txt new file mode 100644 index 000000000000..5af1bd9effae --- /dev/null +++ b/Documentation/fb/ep93xx-fb.txt | |||
@@ -0,0 +1,135 @@ | |||
1 | ================================ | ||
2 | Driver for EP93xx LCD controller | ||
3 | ================================ | ||
4 | |||
5 | The EP93xx LCD controller can drive both standard desktop monitors and | ||
6 | embedded LCD displays. If you have a standard desktop monitor then you | ||
7 | can use the standard Linux video mode database. In your board file: | ||
8 | |||
9 | static struct ep93xxfb_mach_info some_board_fb_info = { | ||
10 | .num_modes = EP93XXFB_USE_MODEDB, | ||
11 | .bpp = 16, | ||
12 | }; | ||
13 | |||
14 | If you have an embedded LCD display then you need to define a video | ||
15 | mode for it as follows: | ||
16 | |||
17 | static struct fb_videomode some_board_video_modes[] = { | ||
18 | { | ||
19 | .name = "some_lcd_name", | ||
20 | /* Pixel clock, porches, etc */ | ||
21 | }, | ||
22 | }; | ||
23 | |||
24 | Note that the pixel clock value is in pico-seconds. You can use the | ||
25 | KHZ2PICOS macro to convert the pixel clock value. Most other values | ||
26 | are in pixel clocks. See Documentation/fb/framebuffer.txt for further | ||
27 | details. | ||
28 | |||
29 | The ep93xxfb_mach_info structure for your board should look like the | ||
30 | following: | ||
31 | |||
32 | static struct ep93xxfb_mach_info some_board_fb_info = { | ||
33 | .num_modes = ARRAY_SIZE(some_board_video_modes), | ||
34 | .modes = some_board_video_modes, | ||
35 | .default_mode = &some_board_video_modes[0], | ||
36 | .bpp = 16, | ||
37 | }; | ||
38 | |||
39 | The framebuffer device can be registered by adding the following to | ||
40 | your board initialisation function: | ||
41 | |||
42 | ep93xx_register_fb(&some_board_fb_info); | ||
43 | |||
44 | ===================== | ||
45 | Video Attribute Flags | ||
46 | ===================== | ||
47 | |||
48 | The ep93xxfb_mach_info structure has a flags field which can be used | ||
49 | to configure the controller. The video attributes flags are fully | ||
50 | documented in section 7 of the EP93xx users' guide. The following | ||
51 | flags are available: | ||
52 | |||
53 | EP93XXFB_PCLK_FALLING Clock data on the falling edge of the | ||
54 | pixel clock. The default is to clock | ||
55 | data on the rising edge. | ||
56 | |||
57 | EP93XXFB_SYNC_BLANK_HIGH Blank signal is active high. By | ||
58 | default the blank signal is active low. | ||
59 | |||
60 | EP93XXFB_SYNC_HORIZ_HIGH Horizontal sync is active high. By | ||
61 | default the horizontal sync is active low. | ||
62 | |||
63 | EP93XXFB_SYNC_VERT_HIGH Vertical sync is active high. By | ||
64 | default the vertical sync is active high. | ||
65 | |||
66 | The physical address of the framebuffer can be controlled using the | ||
67 | following flags: | ||
68 | |||
69 | EP93XXFB_USE_SDCSN0 Use SDCSn[0] for the framebuffer. This | ||
70 | is the default setting. | ||
71 | |||
72 | EP93XXFB_USE_SDCSN1 Use SDCSn[1] for the framebuffer. | ||
73 | |||
74 | EP93XXFB_USE_SDCSN2 Use SDCSn[2] for the framebuffer. | ||
75 | |||
76 | EP93XXFB_USE_SDCSN3 Use SDCSn[3] for the framebuffer. | ||
77 | |||
78 | ================== | ||
79 | Platform callbacks | ||
80 | ================== | ||
81 | |||
82 | The EP93xx framebuffer driver supports three optional platform | ||
83 | callbacks: setup, teardown and blank. The setup and teardown functions | ||
84 | are called when the framebuffer driver is installed and removed | ||
85 | respectively. The blank function is called whenever the display is | ||
86 | blanked or unblanked. | ||
87 | |||
88 | The setup and teardown devices pass the platform_device structure as | ||
89 | an argument. The fb_info and ep93xxfb_mach_info structures can be | ||
90 | obtained as follows: | ||
91 | |||
92 | static int some_board_fb_setup(struct platform_device *pdev) | ||
93 | { | ||
94 | struct ep93xxfb_mach_info *mach_info = pdev->dev.platform_data; | ||
95 | struct fb_info *fb_info = platform_get_drvdata(pdev); | ||
96 | |||
97 | /* Board specific framebuffer setup */ | ||
98 | } | ||
99 | |||
100 | ====================== | ||
101 | Setting the video mode | ||
102 | ====================== | ||
103 | |||
104 | The video mode is set using the following syntax: | ||
105 | |||
106 | video=XRESxYRES[-BPP][@REFRESH] | ||
107 | |||
108 | If the EP93xx video driver is built-in then the video mode is set on | ||
109 | the Linux kernel command line, for example: | ||
110 | |||
111 | video=ep93xx-fb:800x600-16@60 | ||
112 | |||
113 | If the EP93xx video driver is built as a module then the video mode is | ||
114 | set when the module is installed: | ||
115 | |||
116 | modprobe ep93xx-fb video=320x240 | ||
117 | |||
118 | ============== | ||
119 | Screenpage bug | ||
120 | ============== | ||
121 | |||
122 | At least on the EP9315 there is a silicon bug which causes bit 27 of | ||
123 | the VIDSCRNPAGE (framebuffer physical offset) to be tied low. There is | ||
124 | an unofficial errata for this bug at: | ||
125 | http://marc.info/?l=linux-arm-kernel&m=110061245502000&w=2 | ||
126 | |||
127 | By default the EP93xx framebuffer driver checks if the allocated physical | ||
128 | address has bit 27 set. If it does, then the memory is freed and an | ||
129 | error is returned. The check can be disabled by adding the following | ||
130 | option when loading the driver: | ||
131 | |||
132 | ep93xx-fb.check_screenpage_bug=0 | ||
133 | |||
134 | In some cases it may be possible to reconfigure your SDRAM layout to | ||
135 | avoid this bug. See section 13 of the EP93xx users' guide for details. | ||