]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - include/asm-arm/arch-mx35/iomux.h
applied patches from Freescale and Ka-Ro
[karo-tx-uboot.git] / include / asm-arm / arch-mx35 / iomux.h
1 /*
2  * Copyright 2008-2009 Freescale Semiconductor, Inc. All Rights Reserved.
3  */
4
5 /*
6  * The code contained herein is licensed under the GNU General Public
7  * License. You may obtain a copy of the GNU General Public License
8  * Version 2 or later at the following locations:
9  *
10  * http://www.opensource.org/licenses/gpl-license.html
11  * http://www.gnu.org/copyleft/gpl.html
12  */
13 #ifndef __MACH_MX35_IOMUX_H__
14 #define __MACH_MX35_IOMUX_H__
15
16 #include <asm/arch/mx35.h>
17
18 /*!
19  * @file mach-mx35/iomux.h
20  *
21  * @brief I/O Muxing control definitions and functions
22  *
23  * @ingroup GPIO_MX35
24  */
25
26 /*!
27  * various IOMUX functions
28  */
29 typedef enum iomux_pin_config {
30         MUX_CONFIG_FUNC = 0,    /*!< used as function */
31         MUX_CONFIG_ALT1,        /*!< used as alternate function 1 */
32         MUX_CONFIG_ALT2,        /*!< used as alternate function 2 */
33         MUX_CONFIG_ALT3,        /*!< used as alternate function 3 */
34         MUX_CONFIG_ALT4,        /*!< used as alternate function 4 */
35         MUX_CONFIG_ALT5,        /*!< used as alternate function 5 */
36         MUX_CONFIG_ALT6,        /*!< used as alternate function 6 */
37         MUX_CONFIG_ALT7,        /*!< used as alternate function 7 */
38         MUX_CONFIG_SION = 0x1 << 4,     /*!< used as LOOPBACK:MUX SION bit */
39         MUX_CONFIG_GPIO = MUX_CONFIG_ALT5,      /*!< used as GPIO */
40 } iomux_pin_cfg_t;
41
42 /*!
43  * various IOMUX pad functions
44  */
45 typedef enum iomux_pad_config {
46         PAD_CTL_DRV_3_3V = 0x0 << 13,
47         PAD_CTL_DRV_1_8V = 0x1 << 13,
48         PAD_CTL_HYS_CMOS = 0x0 << 8,
49         PAD_CTL_HYS_SCHMITZ = 0x1 << 8,
50         PAD_CTL_PKE_NONE = 0x0 << 7,
51         PAD_CTL_PKE_ENABLE = 0x1 << 7,
52         PAD_CTL_PUE_KEEPER = 0x0 << 6,
53         PAD_CTL_PUE_PUD = 0x1 << 6,
54         PAD_CTL_100K_PD = 0x0 << 4,
55         PAD_CTL_47K_PU = 0x1 << 4,
56         PAD_CTL_100K_PU = 0x2 << 4,
57         PAD_CTL_22K_PU = 0x3 << 4,
58         PAD_CTL_ODE_CMOS = 0x0 << 3,
59         PAD_CTL_ODE_OpenDrain = 0x1 << 3,
60         PAD_CTL_DRV_NORMAL = 0x0 << 1,
61         PAD_CTL_DRV_HIGH = 0x1 << 1,
62         PAD_CTL_DRV_MAX = 0x2 << 1,
63         PAD_CTL_SRE_SLOW = 0x0 << 0,
64         PAD_CTL_SRE_FAST = 0x1 << 0
65 } iomux_pad_config_t;
66
67 /*!
68  * various IOMUX general purpose functions
69  */
70 typedef enum iomux_gp_func {
71         MUX_SDCTL_CSD0_SEL = 0x1 << 0,
72         MUX_SDCTL_CSD1_SEL = 0x1 << 1,
73         MUX_TAMPER_DETECT_EN = 0x1 << 2,
74 } iomux_gp_func_t;
75
76 /*!
77  * various IOMUX input select register index
78  */
79 typedef enum iomux_input_select {
80         MUX_IN_AMX_P5_RXCLK = 0,
81         MUX_IN_AMX_P5_RXFS,
82         MUX_IN_AMX_P6_DA,
83         MUX_IN_AMX_P6_DB,
84         MUX_IN_AMX_P6_RXCLK,
85         MUX_IN_AMX_P6_RXFS,
86         MUX_IN_AMX_P6_TXCLK,
87         MUX_IN_AMX_P6_TXFS,
88         MUX_IN_CAN1_CANRX,
89         MUX_IN_CAN2_CANRX,
90         MUX_IN_CCM_32K_MUXED,
91         MUX_IN_CCM_PMIC_RDY,
92         MUX_IN_CSPI1_SS2_B,
93         MUX_IN_CSPI1_SS3_B,
94         MUX_IN_CSPI2_CLK_IN,
95         MUX_IN_CSPI2_DATAREADY_B,
96         MUX_IN_CSPI2_MISO,
97         MUX_IN_CSPI2_MOSI,
98         MUX_IN_CSPI2_SS0_B,
99         MUX_IN_CSPI2_SS1_B,
100         MUX_IN_CSPI2_SS2_B,
101         MUX_IN_CSPI2_SS3_B,
102         MUX_IN_EMI_WEIM_DTACK_B,
103         MUX_IN_ESDHC1_DAT4_IN,
104         MUX_IN_ESDHC1_DAT5_IN,
105         MUX_IN_ESDHC1_DAT6_IN,
106         MUX_IN_ESDHC1_DAT7_IN,
107         MUX_IN_ESDHC3_CARD_CLK_IN,
108         MUX_IN_ESDHC3_CMD_IN,
109         MUX_IN_ESDHC3_DAT0,
110         MUX_IN_ESDHC3_DAT1,
111         MUX_IN_ESDHC3_DAT2,
112         MUX_IN_ESDHC3_DAT3,
113         MUX_IN_GPIO1_IN_0,
114         MUX_IN_GPIO1_IN_10,
115         MUX_IN_GPIO1_IN_11,
116         MUX_IN_GPIO1_IN_1,
117         MUX_IN_GPIO1_IN_20,
118         MUX_IN_GPIO1_IN_21,
119         MUX_IN_GPIO1_IN_22,
120         MUX_IN_GPIO1_IN_2,
121         MUX_IN_GPIO1_IN_3,
122         MUX_IN_GPIO1_IN_4,
123         MUX_IN_GPIO1_IN_5,
124         MUX_IN_GPIO1_IN_6,
125         MUX_IN_GPIO1_IN_7,
126         MUX_IN_GPIO1_IN_8,
127         MUX_IN_GPIO1_IN_9,
128         MUX_IN_GPIO2_IN_0,
129         MUX_IN_GPIO2_IN_10,
130         MUX_IN_GPIO2_IN_11,
131         MUX_IN_GPIO2_IN_12,
132         MUX_IN_GPIO2_IN_13,
133         MUX_IN_GPIO2_IN_14,
134         MUX_IN_GPIO2_IN_15,
135         MUX_IN_GPIO2_IN_16,
136         MUX_IN_GPIO2_IN_17,
137         MUX_IN_GPIO2_IN_18,
138         MUX_IN_GPIO2_IN_19,
139         MUX_IN_GPIO2_IN_20,
140         MUX_IN_GPIO2_IN_21,
141         MUX_IN_GPIO2_IN_22,
142         MUX_IN_GPIO2_IN_23,
143         MUX_IN_GPIO2_IN_24,
144         MUX_IN_GPIO2_IN_25,
145         MUX_IN_GPIO2_IN_26,
146         MUX_IN_GPIO2_IN_27,
147         MUX_IN_GPIO2_IN_28,
148         MUX_IN_GPIO2_IN_29,
149         MUX_IN_GPIO2_IN_2,
150         MUX_IN_GPIO2_IN_30,
151         MUX_IN_GPIO2_IN_31,
152         MUX_IN_GPIO2_IN_3,
153         MUX_IN_GPIO2_IN_4,
154         MUX_IN_GPIO2_IN_5,
155         MUX_IN_GPIO2_IN_6,
156         MUX_IN_GPIO2_IN_7,
157         MUX_IN_GPIO2_IN_8,
158         MUX_IN_GPIO2_IN_9,
159         MUX_IN_GPIO3_IN_0,
160         MUX_IN_GPIO3_IN_10,
161         MUX_IN_GPIO3_IN_11,
162         MUX_IN_GPIO3_IN_12,
163         MUX_IN_GPIO3_IN_13,
164         MUX_IN_GPIO3_IN_14,
165         MUX_IN_GPIO3_IN_15,
166         MUX_IN_GPIO3_IN_4,
167         MUX_IN_GPIO3_IN_5,
168         MUX_IN_GPIO3_IN_6,
169         MUX_IN_GPIO3_IN_7,
170         MUX_IN_GPIO3_IN_8,
171         MUX_IN_GPIO3_IN_9,
172         MUX_IN_I2C3_SCL_IN,
173         MUX_IN_I2C3_SDA_IN,
174         MUX_IN_IPU_DISPB_D0_VSYNC,
175         MUX_IN_IPU_DISPB_D12_VSYNC,
176         MUX_IN_IPU_DISPB_SD_D,
177         MUX_IN_IPU_SENSB_DATA_0,
178         MUX_IN_IPU_SENSB_DATA_1,
179         MUX_IN_IPU_SENSB_DATA_2,
180         MUX_IN_IPU_SENSB_DATA_3,
181         MUX_IN_IPU_SENSB_DATA_4,
182         MUX_IN_IPU_SENSB_DATA_5,
183         MUX_IN_IPU_SENSB_DATA_6,
184         MUX_IN_IPU_SENSB_DATA_7,
185         MUX_IN_KPP_COL_0,
186         MUX_IN_KPP_COL_1,
187         MUX_IN_KPP_COL_2,
188         MUX_IN_KPP_COL_3,
189         MUX_IN_KPP_COL_4,
190         MUX_IN_KPP_COL_5,
191         MUX_IN_KPP_COL_6,
192         MUX_IN_KPP_COL_7,
193         MUX_IN_KPP_ROW_0,
194         MUX_IN_KPP_ROW_1,
195         MUX_IN_KPP_ROW_2,
196         MUX_IN_KPP_ROW_3,
197         MUX_IN_KPP_ROW_4,
198         MUX_IN_KPP_ROW_5,
199         MUX_IN_KPP_ROW_6,
200         MUX_IN_KPP_ROW_7,
201         MUX_IN_OWIRE_BATTERY_LINE,
202         MUX_IN_SPDIF_HCKT_CLK2,
203         MUX_IN_SPDIF_SPDIF_IN1,
204         MUX_IN_UART3_UART_RTS_B,
205         MUX_IN_UART3_UART_RXD_MUX,
206         MUX_IN_USB_OTG_DATA_0,
207         MUX_IN_USB_OTG_DATA_1,
208         MUX_IN_USB_OTG_DATA_2,
209         MUX_IN_USB_OTG_DATA_3,
210         MUX_IN_USB_OTG_DATA_4,
211         MUX_IN_USB_OTG_DATA_5,
212         MUX_IN_USB_OTG_DATA_6,
213         MUX_IN_USB_OTG_DATA_7,
214         MUX_IN_USB_OTG_DIR,
215         MUX_IN_USB_OTG_NXT,
216         MUX_IN_USB_UH2_DATA_0,
217         MUX_IN_USB_UH2_DATA_1,
218         MUX_IN_USB_UH2_DATA_2,
219         MUX_IN_USB_UH2_DATA_3,
220         MUX_IN_USB_UH2_DATA_4,
221         MUX_IN_USB_UH2_DATA_5,
222         MUX_IN_USB_UH2_DATA_6,
223         MUX_IN_USB_UH2_DATA_7,
224         MUX_IN_USB_UH2_DIR,
225         MUX_IN_USB_UH2_NXT,
226         MUX_IN_USB_UH2_USB_OC,
227 } iomux_input_select_t;
228
229 /*!
230  * various IOMUX input functions
231  */
232 typedef enum iomux_input_config {
233         INPUT_CTL_PATH0 = 0x0,
234         INPUT_CTL_PATH1,
235         INPUT_CTL_PATH2,
236         INPUT_CTL_PATH3,
237         INPUT_CTL_PATH4,
238         INPUT_CTL_PATH5,
239         INPUT_CTL_PATH6,
240         INPUT_CTL_PATH7,
241 } iomux_input_cfg_t;
242
243 /*!
244  * Request ownership for an IO pin. This function has to be the first one
245  * being called before that pin is used. The caller has to check the
246  * return value to make sure it returns 0.
247  *
248  * @param  pin          a name defined by \b iomux_pin_name_t
249  * @param  cfg          an input function as defined in \b #iomux_pin_cfg_t
250  *
251  * @return              0 if successful; Non-zero otherwise
252  */
253 int mxc_request_iomux(iomux_pin_name_t pin, iomux_pin_cfg_t cfg);
254
255 /*!
256  * Release ownership for an IO pin
257  *
258  * @param  pin          a name defined by \b iomux_pin_name_t
259  * @param  cfg          an input function as defined in \b #iomux_pin_cfg_t
260  */
261 void mxc_free_iomux(iomux_pin_name_t pin, iomux_pin_cfg_t cfg);
262
263 /*!
264  * This function enables/disables the general purpose function for a particular
265  * signal.
266  *
267  * @param  gp   one signal as defined in \b #iomux_gp_func_t
268  * @param  en   \b #true to enable; \b #false to disable
269  */
270 void mxc_iomux_set_gpr(iomux_gp_func_t gp, int en);
271
272 /*!
273  * This function configures the pad value for a IOMUX pin.
274  *
275  * @param  pin          a pin number as defined in \b #iomux_pin_name_t
276  * @param  config       the ORed value of elements defined in \b
277  *                              #iomux_pad_config_t
278  */
279 void mxc_iomux_set_pad(iomux_pin_name_t pin, u32 config);
280
281 /*!
282  * This function configures input path.
283  *
284  * @param  input        index of input select register as defined in \b
285  *                              #iomux_input_select_t
286  * @param  config       the binary value of elements defined in \b
287  *                              #iomux_input_cfg_t
288  */
289 void mxc_iomux_set_input(iomux_input_select_t input, u32 config);
290 #endif