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
mach-pxa
zylonite_pxa320.c
Go to the documentation of this file.
1
/*
2
* linux/arch/arm/mach-pxa/zylonite_pxa320.c
3
*
4
* PXA320 specific support code for the
5
* PXA3xx Development Platform (aka Zylonite)
6
*
7
* Copyright (C) 2007 Marvell Internation Ltd.
8
* 2007-08-21: eric miao <
[email protected]
>
9
* initial version
10
*
11
* This program is free software; you can redistribute it and/or modify
12
* it under the terms of the GNU General Public License version 2 as
13
* published by the Free Software Foundation.
14
*/
15
16
#include <linux/module.h>
17
#include <linux/kernel.h>
18
#include <
linux/init.h
>
19
#include <
linux/gpio.h
>
20
21
#include <
mach/pxa320.h
>
22
#include <
mach/zylonite.h
>
23
24
#include "
generic.h
"
25
26
static
mfp_cfg_t
mfp_cfg[]
__initdata
= {
27
/* LCD */
28
GPIO6_2_LCD_LDD_0
,
29
GPIO7_2_LCD_LDD_1
,
30
GPIO8_2_LCD_LDD_2
,
31
GPIO9_2_LCD_LDD_3
,
32
GPIO10_2_LCD_LDD_4
,
33
GPIO11_2_LCD_LDD_5
,
34
GPIO12_2_LCD_LDD_6
,
35
GPIO13_2_LCD_LDD_7
,
36
GPIO63_LCD_LDD_8
,
37
GPIO64_LCD_LDD_9
,
38
GPIO65_LCD_LDD_10
,
39
GPIO66_LCD_LDD_11
,
40
GPIO67_LCD_LDD_12
,
41
GPIO68_LCD_LDD_13
,
42
GPIO69_LCD_LDD_14
,
43
GPIO70_LCD_LDD_15
,
44
GPIO71_LCD_LDD_16
,
45
GPIO72_LCD_LDD_17
,
46
GPIO73_LCD_CS_N
,
47
GPIO74_LCD_VSYNC
,
48
GPIO14_2_LCD_FCLK
,
49
GPIO15_2_LCD_LCLK
,
50
GPIO16_2_LCD_PCLK
,
51
GPIO17_2_LCD_BIAS
,
52
GPIO14_PWM3_OUT
,
/* backlight */
53
54
/* FFUART */
55
GPIO41_UART1_RXD
|
MFP_LPM_EDGE_FALL
,
56
GPIO42_UART1_TXD
,
57
GPIO43_UART1_CTS
,
58
GPIO44_UART1_DCD
,
59
GPIO45_UART1_DSR
|
MFP_LPM_EDGE_FALL
,
60
GPIO46_UART1_RI
,
61
GPIO47_UART1_DTR
,
62
GPIO48_UART1_RTS
,
63
64
/* AC97 */
65
GPIO34_AC97_SYSCLK
,
66
GPIO35_AC97_SDATA_IN_0
,
67
GPIO37_AC97_SDATA_OUT
,
68
GPIO38_AC97_SYNC
,
69
GPIO39_AC97_BITCLK
,
70
GPIO40_AC97_nACRESET
,
71
GPIO36_GPIO
,
/* SDATA_IN_1 but unused - configure to GPIO */
72
73
/* SSP3 */
74
GPIO89_SSP3_SCLK
,
75
GPIO90_SSP3_FRM
,
76
GPIO91_SSP3_TXD
,
77
GPIO92_SSP3_RXD
,
78
79
/* WM9713 IRQ */
80
GPIO15_GPIO
,
81
82
/* I2C */
83
GPIO32_I2C_SCL
,
84
GPIO33_I2C_SDA
,
85
86
/* Keypad */
87
GPIO105_KP_DKIN_0
|
MFP_LPM_EDGE_BOTH
,
88
GPIO106_KP_DKIN_1
|
MFP_LPM_EDGE_BOTH
,
89
GPIO113_KP_MKIN_0
|
MFP_LPM_EDGE_BOTH
,
90
GPIO114_KP_MKIN_1
|
MFP_LPM_EDGE_BOTH
,
91
GPIO115_KP_MKIN_2
|
MFP_LPM_EDGE_BOTH
,
92
GPIO116_KP_MKIN_3
|
MFP_LPM_EDGE_BOTH
,
93
GPIO117_KP_MKIN_4
|
MFP_LPM_EDGE_BOTH
,
94
GPIO118_KP_MKIN_5
|
MFP_LPM_EDGE_BOTH
,
95
GPIO119_KP_MKIN_6
|
MFP_LPM_EDGE_BOTH
,
96
GPIO120_KP_MKIN_7
|
MFP_LPM_EDGE_BOTH
,
97
GPIO121_KP_MKOUT_0
,
98
GPIO122_KP_MKOUT_1
,
99
GPIO123_KP_MKOUT_2
,
100
GPIO124_KP_MKOUT_3
,
101
GPIO125_KP_MKOUT_4
,
102
GPIO126_KP_MKOUT_5
,
103
GPIO127_KP_MKOUT_6
,
104
GPIO5_2_KP_MKOUT_7
,
105
106
/* Ethernet */
107
GPIO4_nCS3
,
108
GPIO90_GPIO
,
109
110
/* MMC1 */
111
GPIO18_MMC1_DAT0
,
112
GPIO19_MMC1_DAT1
|
MFP_LPM_EDGE_BOTH
,
113
GPIO20_MMC1_DAT2
,
114
GPIO21_MMC1_DAT3
,
115
GPIO22_MMC1_CLK
,
116
GPIO23_MMC1_CMD
,
/* CMD0 for slot 0 */
117
GPIO31_GPIO
,
/* CMD1 default as GPIO for slot 0 */
118
119
/* MMC2 */
120
GPIO24_MMC2_DAT0
,
121
GPIO25_MMC2_DAT1
|
MFP_LPM_EDGE_BOTH
,
122
GPIO26_MMC2_DAT2
,
123
GPIO27_MMC2_DAT3
,
124
GPIO28_MMC2_CLK
,
125
GPIO29_MMC2_CMD
,
126
127
/* USB Host */
128
GPIO2_2_USBH_PEN
,
129
GPIO3_2_USBH_PWR
,
130
131
/* Debug LEDs */
132
GPIO1_2_GPIO
|
MFP_LPM_DRIVE_HIGH
,
133
GPIO4_2_GPIO
|
MFP_LPM_DRIVE_HIGH
,
134
};
135
136
#define NUM_LCD_DETECT_PINS 7
137
138
static
int
lcd_detect_pins[]
__initdata
= {
139
MFP_PIN_GPIO72
,
/* LCD_LDD_17 - ORIENT */
140
MFP_PIN_GPIO71
,
/* LCD_LDD_16 - LCDID[5] */
141
MFP_PIN_GPIO17_2
,
/* LCD_BIAS - LCDID[4] */
142
MFP_PIN_GPIO15_2
,
/* LCD_LCLK - LCDID[3] */
143
MFP_PIN_GPIO14_2
,
/* LCD_FCLK - LCDID[2] */
144
MFP_PIN_GPIO73
,
/* LCD_CS_N - LCDID[1] */
145
MFP_PIN_GPIO74
,
/* LCD_VSYNC - LCDID[0] */
146
/*
147
* set the MFP_PIN_GPIO 14/15/17 to alternate function other than
148
* GPIO to avoid input level confliction with 14_2, 15_2, 17_2
149
*/
150
MFP_PIN_GPIO14
,
151
MFP_PIN_GPIO15
,
152
MFP_PIN_GPIO17
,
153
};
154
155
static
int
lcd_detect_mfpr[]
__initdata
= {
156
/* AF0, DS 1X, Pull Neither, Edge Clear */
157
0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440,
158
0xc442,
/* Backlight, Pull-Up, AF2 */
159
0x8445,
/* AF5 */
160
0x8445,
/* AF5 */
161
};
162
163
static
void
__init
zylonite_detect_lcd_panel(
void
)
164
{
165
unsigned
long
mfpr_save[
ARRAY_SIZE
(lcd_detect_pins)];
166
int
i
,
gpio
,
id
= 0;
167
168
/* save the original MFP settings of these pins and configure them
169
* as GPIO Input, DS01X, Pull Neither, Edge Clear
170
*/
171
for
(i = 0; i <
ARRAY_SIZE
(lcd_detect_pins); i++) {
172
mfpr_save[
i
] = pxa3xx_mfp_read(lcd_detect_pins[i]);
173
pxa3xx_mfp_write(lcd_detect_pins[i], lcd_detect_mfpr[i]);
174
}
175
176
for
(i = 0; i <
NUM_LCD_DETECT_PINS
; i++) {
177
id
=
id
<< 1;
178
gpio =
mfp_to_gpio
(lcd_detect_pins[i]);
179
gpio_request
(gpio,
"LCD_ID_PINS"
);
180
gpio_direction_input
(gpio);
181
182
if
(
gpio_get_value
(gpio))
183
id
=
id
| 0x1;
184
gpio_free
(gpio);
185
}
186
187
/* lcd id, flush out bit 1 */
188
lcd_id
=
id
& 0x3d;
189
190
/* lcd orientation, portrait or landscape */
191
lcd_orientation
= (
id
>> 6) & 0x1;
192
193
/* restore the original MFP settings */
194
for
(i = 0; i <
ARRAY_SIZE
(lcd_detect_pins); i++)
195
pxa3xx_mfp_write(lcd_detect_pins[i], mfpr_save[i]);
196
}
197
198
void
__init
zylonite_pxa320_init
(
void
)
199
{
200
if
(
cpu_is_pxa320
()) {
201
/* initialize MFP */
202
pxa3xx_mfp_config(
ARRAY_AND_SIZE
(mfp_cfg));
203
204
/* detect LCD panel */
205
zylonite_detect_lcd_panel();
206
207
/* GPIO pin assignment */
208
gpio_eth_irq
=
mfp_to_gpio
(
MFP_PIN_GPIO9
);
209
gpio_debug_led1
=
mfp_to_gpio
(
MFP_PIN_GPIO1_2
);
210
gpio_debug_led2
=
mfp_to_gpio
(
MFP_PIN_GPIO4_2
);
211
212
/* WM9713 IRQ */
213
wm9713_irq
=
mfp_to_gpio
(
MFP_PIN_GPIO15
);
214
}
215
}
Generated on Thu Jan 10 2013 13:01:25 for Linux Kernel by
1.8.2