summaryrefslogtreecommitdiff
path: root/include/asm-arm/arch-mx28/pinctrl.h
blob: 6f0eea0b4bf0d1af001d3e56f1ea648b9d9e2584 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
/*
 *
 * (C) Copyright 2009-2010 Freescale Semiconductor, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
#ifndef __PINCTRL_H
#define __PINCTRL_H

#define PIN_BITS		(5)
#define PINS_PER_BANK		(1 << PIN_BITS)
#define PINID_2_BANK(id)	((id) >> PIN_BITS)
#define PINID_2_PIN(id)		((id) & (PINS_PER_BANK - 1))
#define PINID_ENCODE(bank, pin)	(((bank) << PIN_BITS) + (pin))

/*
 * Each pin may be routed up to four different HW interfaces
 * including GPIO
 */
enum pin_fun {
	PIN_FUN1 = 0,
	PIN_FUN2,
	PIN_FUN3,
	PIN_GPIO
};

/*
 * Each pin may have different output drive strength in range from
 * 4mA to 20mA. The most common case is 4, 8 and 12 mA strengths.
 */
enum pad_strength {
	PAD_4MA = 0,
	PAD_8MA,
	PAD_12MA,
	PAD_RESV
};

/*
 * Each pin can be programmed for 1.8V or 3.3V
 */
enum pad_voltage {
	PAD_1V8 = 0,
	PAD_3V3
};

/*
 * Structure to define a group of pins and their parameters
 */
struct pin_desc {
	u32 id;
	enum pin_fun fun;
	enum pad_strength strength;
	enum pad_voltage voltage;
	u32 pullup:1;
};

struct pin_group {
	struct pin_desc *pins;
	int nr_pins;
};

extern void pin_gpio_direction(u32 id, u32 output);
extern u32 pin_gpio_get(u32 id);
extern void pin_gpio_set(u32 id, u32 val);
extern void pin_set_type(u32 id, enum pin_fun cfg);
extern void pin_set_strength(u32 id, enum pad_strength strength);
extern void pin_set_voltage(u32 id, enum pad_voltage volt);
extern void pin_set_pullup(u32 id, u32 pullup);
extern void pin_set_group(struct pin_group *pin_group);

/*
 * Definitions of all i.MX28 pins
 */
/* Bank 0 */
#define PINID_GPMI_D00		PINID_ENCODE(0, 0)
#define PINID_GPMI_D01		PINID_ENCODE(0, 1)
#define PINID_GPMI_D02		PINID_ENCODE(0, 2)
#define PINID_GPMI_D03		PINID_ENCODE(0, 3)
#define PINID_GPMI_D04		PINID_ENCODE(0, 4)
#define PINID_GPMI_D05		PINID_ENCODE(0, 5)
#define PINID_GPMI_D06		PINID_ENCODE(0, 6)
#define PINID_GPMI_D07		PINID_ENCODE(0, 7)
#define PINID_GPMI_CE0N		PINID_ENCODE(0, 16)
#define PINID_GPMI_CE1N		PINID_ENCODE(0, 17)
#define PINID_GPMI_CE2N		PINID_ENCODE(0, 18)
#define PINID_GPMI_CE3N		PINID_ENCODE(0, 19)
#define PINID_GPMI_RDY0		PINID_ENCODE(0, 20)
#define PINID_GPMI_RDY1		PINID_ENCODE(0, 21)
#define PINID_GPMI_RDY2		PINID_ENCODE(0, 22)
#define PINID_GPMI_RDY3		PINID_ENCODE(0, 23)
#define PINID_GPMI_RDN		PINID_ENCODE(0, 24)
#define PINID_GPMI_WRN		PINID_ENCODE(0, 25)
#define PINID_GPMI_ALE		PINID_ENCODE(0, 26)
#define PINID_GPMI_CLE		PINID_ENCODE(0, 27)
#define PINID_GPMI_RESETN	PINID_ENCODE(0, 28)

#define PINID_SSP1_DATA0	PINID_ENCODE(0, 0)
#define PINID_SSP1_DATA1	PINID_ENCODE(0, 1)
#define PINID_SSP1_DATA2	PINID_ENCODE(0, 2)
#define PINID_SSP1_DATA3	PINID_ENCODE(0, 3)
#define PINID_SSP1_DATA4	PINID_ENCODE(0, 4)
#define PINID_SSP1_DATA5	PINID_ENCODE(0, 5)
#define PINID_SSP1_DATA6	PINID_ENCODE(0, 6)
#define PINID_SSP1_DATA7	PINID_ENCODE(0, 7)
#define PINID_SSP1_DETECT	PINID_ENCODE(0, 20)
#define PINID_SSP1_CMD		PINID_ENCODE(0, 21)
#define PINID_SSP1_SCK		PINID_ENCODE(0, 25)
#define PINID_SSP1_GPIO_WP	PINID_ENCODE(0, 28)

/* Bank 1 */
#define PINID_LCD_D00		PINID_ENCODE(1, 0)
#define PINID_LCD_D01		PINID_ENCODE(1, 1)
#define PINID_LCD_D02		PINID_ENCODE(1, 2)
#define PINID_LCD_D03		PINID_ENCODE(1, 3)
#define PINID_LCD_D04		PINID_ENCODE(1, 4)
#define PINID_LCD_D05		PINID_ENCODE(1, 5)
#define PINID_LCD_D06		PINID_ENCODE(1, 6)
#define PINID_LCD_D07		PINID_ENCODE(1, 7)
#define PINID_LCD_D08		PINID_ENCODE(1, 8)
#define PINID_LCD_D09		PINID_ENCODE(1, 9)
#define PINID_LCD_D10		PINID_ENCODE(1, 10)
#define PINID_LCD_D11		PINID_ENCODE(1, 11)
#define PINID_LCD_D12		PINID_ENCODE(1, 12)
#define PINID_LCD_D13		PINID_ENCODE(1, 13)
#define PINID_LCD_D14		PINID_ENCODE(1, 14)
#define PINID_LCD_D15		PINID_ENCODE(1, 15)
#define PINID_LCD_D16		PINID_ENCODE(1, 16)
#define PINID_LCD_D17		PINID_ENCODE(1, 17)
#define PINID_LCD_D18		PINID_ENCODE(1, 18)
#define PINID_LCD_D19		PINID_ENCODE(1, 19)
#define PINID_LCD_D20		PINID_ENCODE(1, 20)
#define PINID_LCD_D21		PINID_ENCODE(1, 21)
#define PINID_LCD_D22		PINID_ENCODE(1, 22)
#define PINID_LCD_D23		PINID_ENCODE(1, 23)
#define PINID_LCD_RD_E		PINID_ENCODE(1, 24)
#define PINID_LCD_WR_RWN	PINID_ENCODE(1, 25)
#define PINID_LCD_RS		PINID_ENCODE(1, 26)
#define PINID_LCD_CS		PINID_ENCODE(1, 27)
#define PINID_LCD_VSYNC		PINID_ENCODE(1, 28)
#define PINID_LCD_HSYNC		PINID_ENCODE(1, 29)
#define PINID_LCD_DOTCK		PINID_ENCODE(1, 30)
#define PINID_LCD_ENABLE	PINID_ENCODE(1, 31)

/* Bank 2 */
#define PINID_SSP0_DATA0	PINID_ENCODE(2, 0)
#define PINID_SSP0_DATA1	PINID_ENCODE(2, 1)
#define PINID_SSP0_DATA2	PINID_ENCODE(2, 2)
#define PINID_SSP0_DATA3	PINID_ENCODE(2, 3)
#define PINID_SSP0_DATA4	PINID_ENCODE(2, 4)
#define PINID_SSP0_DATA5	PINID_ENCODE(2, 5)
#define PINID_SSP0_DATA6	PINID_ENCODE(2, 6)
#define PINID_SSP0_DATA7	PINID_ENCODE(2, 7)
#define PINID_SSP0_CMD		PINID_ENCODE(2, 8)
#define PINID_SSP0_DETECT	PINID_ENCODE(2, 9)
#define PINID_SSP0_SCK		PINID_ENCODE(2, 10)
#define PINID_SSP0_GPIO_WP	PINID_ENCODE(2, 12)
#define PINID_SSP2_SCK		PINID_ENCODE(2, 16)
#define PINID_SSP2_MOSI		PINID_ENCODE(2, 17)
#define PINID_SSP2_MISO		PINID_ENCODE(2, 18)
#define PINID_SSP2_SS0		PINID_ENCODE(2, 19)
#define PINID_SSP2_SS1		PINID_ENCODE(2, 20)
#define PINID_SSP2_SS2		PINID_ENCODE(2, 21)
#define PINID_SSP3_SCK		PINID_ENCODE(2, 24)
#define PINID_SSP3_MOSI		PINID_ENCODE(2, 25)
#define PINID_SSP3_MISO		PINID_ENCODE(2, 26)
#define PINID_SSP3_SS0		PINID_ENCODE(2, 27)

/* Bank 3 */
#define PINID_AUART0_RX		PINID_ENCODE(3, 0)
#define PINID_AUART0_TX		PINID_ENCODE(3, 1)
#define PINID_AUART0_CTS	PINID_ENCODE(3, 2)
#define PINID_AUART0_RTS	PINID_ENCODE(3, 3)
#define PINID_AUART1_RX		PINID_ENCODE(3, 4)
#define PINID_AUART1_TX		PINID_ENCODE(3, 5)
#define PINID_AUART1_CTS	PINID_ENCODE(3, 6)
#define PINID_AUART1_RTS	PINID_ENCODE(3, 7)
#define PINID_AUART2_RX		PINID_ENCODE(3, 8)
#define PINID_AUART2_TX		PINID_ENCODE(3, 9)
#define PINID_AUART2_CTS	PINID_ENCODE(3, 10)
#define PINID_AUART2_RTS	PINID_ENCODE(3, 11)
#define PINID_AUART3_RX		PINID_ENCODE(3, 12)
#define PINID_AUART3_TX		PINID_ENCODE(3, 13)
#define PINID_AUART3_CTS	PINID_ENCODE(3, 14)
#define PINID_AUART3_RTS	PINID_ENCODE(3, 15)
#define PINID_PWM0		PINID_ENCODE(3, 16)
#define PINID_PWM1		PINID_ENCODE(3, 17)
#define PINID_PWM2		PINID_ENCODE(3, 18)
#define PINID_SAIF0_MCLK	PINID_ENCODE(3, 20)
#define PINID_SAIF0_LRCLK	PINID_ENCODE(3, 21)
#define PINID_SAIF0_BITCLK	PINID_ENCODE(3, 22)
#define PINID_SAIF0_SDATA0	PINID_ENCODE(3, 23)
#define PINID_I2C0_SCL		PINID_ENCODE(3, 24)
#define PINID_I2C0_SDA		PINID_ENCODE(3, 25)
#define PINID_SAIF1_SDATA0	PINID_ENCODE(3, 26)
#define PINID_SPDIF		PINID_ENCODE(3, 27)
#define PINID_PWM3		PINID_ENCODE(3, 28)
#define PINID_PWM4		PINID_ENCODE(3, 29)
#define PINID_LCD_RESET		PINID_ENCODE(3, 30)

/* Bank 4 */
#define PINID_ENET0_MDC		PINID_ENCODE(4, 0)
#define PINID_ENET0_MDIO	PINID_ENCODE(4, 1)
#define PINID_ENET0_RX_EN	PINID_ENCODE(4, 2)
#define PINID_ENET0_RXD0	PINID_ENCODE(4, 3)
#define PINID_ENET0_RXD1	PINID_ENCODE(4, 4)
#define PINID_ENET0_TX_CLK	PINID_ENCODE(4, 5)
#define PINID_ENET0_TX_EN	PINID_ENCODE(4, 6)
#define PINID_ENET0_TXD0	PINID_ENCODE(4, 7)
#define PINID_ENET0_TXD1	PINID_ENCODE(4, 8)
#define PINID_ENET0_RXD2	PINID_ENCODE(4, 9)
#define PINID_ENET0_RXD3	PINID_ENCODE(4, 10)
#define PINID_ENET0_TXD2	PINID_ENCODE(4, 11)
#define PINID_ENET0_TXD3	PINID_ENCODE(4, 12)
#define PINID_ENET0_RX_CLK	PINID_ENCODE(4, 13)
#define PINID_ENET0_COL		PINID_ENCODE(4, 14)
#define PINID_ENET0_CRS		PINID_ENCODE(4, 15)
#define PINID_ENET_CLK		PINID_ENCODE(4, 16)
#define PINID_JTAG_RTCK		PINID_ENCODE(4, 20)

#endif