Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
arm
plat-versatile
clcd.c
Go to the documentation of this file.
1
#include <linux/device.h>
2
#include <
linux/dma-mapping.h
>
3
#include <
linux/amba/bus.h
>
4
#include <
linux/amba/clcd.h
>
5
#include <
plat/clcd.h
>
6
7
static
struct
clcd_panel
vga = {
8
.mode = {
9
.name =
"VGA"
,
10
.refresh = 60,
11
.xres = 640,
12
.yres = 480,
13
.pixclock = 39721,
14
.left_margin = 40,
15
.right_margin = 24,
16
.upper_margin = 32,
17
.lower_margin = 11,
18
.hsync_len = 96,
19
.vsync_len = 2,
20
.sync = 0,
21
.vmode =
FB_VMODE_NONINTERLACED
,
22
},
23
.width = -1,
24
.height = -1,
25
.tim2 =
TIM2_BCD
|
TIM2_IPC
,
26
.cntl =
CNTL_LCDTFT
|
CNTL_BGR
|
CNTL_LCDVCOMP
(1),
27
.caps =
CLCD_CAP_5551
|
CLCD_CAP_565
|
CLCD_CAP_888
,
28
.bpp = 16,
29
};
30
31
static
struct
clcd_panel
xvga = {
32
.mode = {
33
.name =
"XVGA"
,
34
.refresh = 60,
35
.xres = 1024,
36
.yres = 768,
37
.pixclock = 15748,
38
.left_margin = 152,
39
.right_margin = 48,
40
.upper_margin = 23,
41
.lower_margin = 3,
42
.hsync_len = 104,
43
.vsync_len = 4,
44
.sync = 0,
45
.vmode =
FB_VMODE_NONINTERLACED
,
46
},
47
.width = -1,
48
.height = -1,
49
.tim2 =
TIM2_BCD
|
TIM2_IPC
,
50
.cntl =
CNTL_LCDTFT
|
CNTL_BGR
|
CNTL_LCDVCOMP
(1),
51
.caps =
CLCD_CAP_5551
|
CLCD_CAP_565
|
CLCD_CAP_888
,
52
.bpp = 16,
53
};
54
55
/* Sanyo TM38QV67A02A - 3.8 inch QVGA (320x240) Color TFT */
56
static
struct
clcd_panel
sanyo_tm38qv67a02a = {
57
.mode = {
58
.name =
"Sanyo TM38QV67A02A"
,
59
.refresh = 116,
60
.xres = 320,
61
.yres = 240,
62
.pixclock = 100000,
63
.left_margin = 6,
64
.right_margin = 6,
65
.upper_margin = 5,
66
.lower_margin = 5,
67
.hsync_len = 6,
68
.vsync_len = 6,
69
.sync = 0,
70
.vmode =
FB_VMODE_NONINTERLACED
,
71
},
72
.width = -1,
73
.height = -1,
74
.tim2 =
TIM2_BCD
,
75
.cntl =
CNTL_LCDTFT
|
CNTL_BGR
|
CNTL_LCDVCOMP
(1),
76
.caps =
CLCD_CAP_5551
,
77
.bpp = 16,
78
};
79
80
static
struct
clcd_panel
sanyo_2_5_in = {
81
.mode = {
82
.name =
"Sanyo QVGA Portrait"
,
83
.refresh = 116,
84
.xres = 240,
85
.yres = 320,
86
.pixclock = 100000,
87
.left_margin = 20,
88
.right_margin = 10,
89
.upper_margin = 2,
90
.lower_margin = 2,
91
.hsync_len = 10,
92
.vsync_len = 2,
93
.sync =
FB_SYNC_HOR_HIGH_ACT
|
FB_SYNC_VERT_HIGH_ACT
,
94
.vmode =
FB_VMODE_NONINTERLACED
,
95
},
96
.width = -1,
97
.height = -1,
98
.tim2 =
TIM2_IVS
|
TIM2_IHS
|
TIM2_IPC
,
99
.cntl =
CNTL_LCDTFT
|
CNTL_BGR
|
CNTL_LCDVCOMP
(1),
100
.caps =
CLCD_CAP_5551
,
101
.bpp = 16,
102
};
103
104
/* Epson L2F50113T00 - 2.2 inch 176x220 Color TFT */
105
static
struct
clcd_panel
epson_l2f50113t00 = {
106
.mode = {
107
.name =
"Epson L2F50113T00"
,
108
.refresh = 390,
109
.xres = 176,
110
.yres = 220,
111
.pixclock = 62500,
112
.left_margin = 3,
113
.right_margin = 2,
114
.upper_margin = 1,
115
.lower_margin = 0,
116
.hsync_len = 3,
117
.vsync_len = 2,
118
.sync = 0,
119
.vmode =
FB_VMODE_NONINTERLACED
,
120
},
121
.width = -1,
122
.height = -1,
123
.tim2 =
TIM2_BCD
|
TIM2_IPC
,
124
.cntl =
CNTL_LCDTFT
|
CNTL_BGR
|
CNTL_LCDVCOMP
(1),
125
.caps =
CLCD_CAP_5551
,
126
.bpp = 16,
127
};
128
129
static
struct
clcd_panel
*panels[] = {
130
&vga,
131
&xvga,
132
&sanyo_tm38qv67a02a,
133
&sanyo_2_5_in,
134
&epson_l2f50113t00,
135
};
136
137
struct
clcd_panel
*
versatile_clcd_get_panel
(
const
char
*
name
)
138
{
139
int
i
;
140
141
for
(i = 0; i <
ARRAY_SIZE
(panels); i++)
142
if
(
strcmp
(panels[i]->
mode
.name, name) == 0)
143
break
;
144
145
if
(i <
ARRAY_SIZE
(panels))
146
return
panels[i];
147
148
pr_err
(
"CLCD: couldn't get parameters for panel %s\n"
, name);
149
150
return
NULL
;
151
}
152
153
int
versatile_clcd_setup_dma
(
struct
clcd_fb
*
fb
,
unsigned
long
framesize)
154
{
155
dma_addr_t
dma
;
156
157
fb->
fb
.screen_base =
dma_alloc_writecombine
(&fb->
dev
->dev, framesize,
158
&dma,
GFP_KERNEL
);
159
if
(!fb->
fb
.screen_base) {
160
pr_err
(
"CLCD: unable to map framebuffer\n"
);
161
return
-
ENOMEM
;
162
}
163
164
fb->
fb
.fix.smem_start =
dma
;
165
fb->
fb
.fix.smem_len = framesize;
166
167
return
0;
168
}
169
170
int
versatile_clcd_mmap_dma
(
struct
clcd_fb
*
fb
,
struct
vm_area_struct
*vma)
171
{
172
return
dma_mmap_writecombine(&fb->
dev
->dev, vma,
173
fb->
fb
.screen_base,
174
fb->
fb
.fix.smem_start,
175
fb->
fb
.fix.smem_len);
176
}
177
178
void
versatile_clcd_remove_dma
(
struct
clcd_fb
*
fb
)
179
{
180
dma_free_writecombine
(&fb->
dev
->dev, fb->
fb
.fix.smem_len,
181
fb->
fb
.screen_base, fb->
fb
.fix.smem_start);
182
}
Generated on Thu Jan 10 2013 13:03:27 for Linux Kernel by
1.8.2