diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-mx3/mach-pcm043.c | 14 | ||||
-rw-r--r-- | arch/arm/mach-mx5/board-mx51_babbage.c | 12 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/iomux-v3.h | 90 | ||||
-rw-r--r-- | arch/arm/plat-mxc/iomux-v3.c | 25 |
4 files changed, 66 insertions, 75 deletions
diff --git a/arch/arm/mach-mx3/mach-pcm043.c b/arch/arm/mach-mx3/mach-pcm043.c index e229a7476f0a..bcf83fc7e701 100644 --- a/arch/arm/mach-mx3/mach-pcm043.c +++ b/arch/arm/mach-mx3/mach-pcm043.c | |||
@@ -237,7 +237,7 @@ static void pcm043_ac97_warm_reset(struct snd_ac97 *ac97) | |||
237 | return; | 237 | return; |
238 | } | 238 | } |
239 | 239 | ||
240 | mxc_iomux_v3_setup_pad(&txfs_gpio); | 240 | mxc_iomux_v3_setup_pad(txfs_gpio); |
241 | 241 | ||
242 | /* warm reset */ | 242 | /* warm reset */ |
243 | gpio_direction_output(AC97_GPIO_TXFS, 1); | 243 | gpio_direction_output(AC97_GPIO_TXFS, 1); |
@@ -245,7 +245,7 @@ static void pcm043_ac97_warm_reset(struct snd_ac97 *ac97) | |||
245 | gpio_set_value(AC97_GPIO_TXFS, 0); | 245 | gpio_set_value(AC97_GPIO_TXFS, 0); |
246 | 246 | ||
247 | gpio_free(AC97_GPIO_TXFS); | 247 | gpio_free(AC97_GPIO_TXFS); |
248 | mxc_iomux_v3_setup_pad(&txfs); | 248 | mxc_iomux_v3_setup_pad(txfs); |
249 | } | 249 | } |
250 | 250 | ||
251 | static void pcm043_ac97_cold_reset(struct snd_ac97 *ac97) | 251 | static void pcm043_ac97_cold_reset(struct snd_ac97 *ac97) |
@@ -269,9 +269,9 @@ static void pcm043_ac97_cold_reset(struct snd_ac97 *ac97) | |||
269 | if (ret) | 269 | if (ret) |
270 | goto err3; | 270 | goto err3; |
271 | 271 | ||
272 | mxc_iomux_v3_setup_pad(&txfs_gpio); | 272 | mxc_iomux_v3_setup_pad(txfs_gpio); |
273 | mxc_iomux_v3_setup_pad(&txd_gpio); | 273 | mxc_iomux_v3_setup_pad(txd_gpio); |
274 | mxc_iomux_v3_setup_pad(&reset_gpio); | 274 | mxc_iomux_v3_setup_pad(reset_gpio); |
275 | 275 | ||
276 | gpio_direction_output(AC97_GPIO_TXFS, 0); | 276 | gpio_direction_output(AC97_GPIO_TXFS, 0); |
277 | gpio_direction_output(AC97_GPIO_TXD, 0); | 277 | gpio_direction_output(AC97_GPIO_TXD, 0); |
@@ -281,8 +281,8 @@ static void pcm043_ac97_cold_reset(struct snd_ac97 *ac97) | |||
281 | udelay(10); | 281 | udelay(10); |
282 | gpio_direction_output(AC97_GPIO_RESET, 1); | 282 | gpio_direction_output(AC97_GPIO_RESET, 1); |
283 | 283 | ||
284 | mxc_iomux_v3_setup_pad(&txd); | 284 | mxc_iomux_v3_setup_pad(txd); |
285 | mxc_iomux_v3_setup_pad(&txfs); | 285 | mxc_iomux_v3_setup_pad(txfs); |
286 | 286 | ||
287 | gpio_free(AC97_GPIO_RESET); | 287 | gpio_free(AC97_GPIO_RESET); |
288 | err3: | 288 | err3: |
diff --git a/arch/arm/mach-mx5/board-mx51_babbage.c b/arch/arm/mach-mx5/board-mx51_babbage.c index 368a315e9ace..24e335ca7627 100644 --- a/arch/arm/mach-mx5/board-mx51_babbage.c +++ b/arch/arm/mach-mx5/board-mx51_babbage.c | |||
@@ -193,7 +193,7 @@ static int gpio_usbh1_active(void) | |||
193 | int ret; | 193 | int ret; |
194 | 194 | ||
195 | /* Set USBH1_STP to GPIO and toggle it */ | 195 | /* Set USBH1_STP to GPIO and toggle it */ |
196 | mxc_iomux_v3_setup_pad(&usbh1stp_gpio); | 196 | mxc_iomux_v3_setup_pad(usbh1stp_gpio); |
197 | ret = gpio_request(BABBAGE_USBH1_STP, "usbh1_stp"); | 197 | ret = gpio_request(BABBAGE_USBH1_STP, "usbh1_stp"); |
198 | 198 | ||
199 | if (ret) { | 199 | if (ret) { |
@@ -206,7 +206,7 @@ static int gpio_usbh1_active(void) | |||
206 | gpio_free(BABBAGE_USBH1_STP); | 206 | gpio_free(BABBAGE_USBH1_STP); |
207 | 207 | ||
208 | /* De-assert USB PHY RESETB */ | 208 | /* De-assert USB PHY RESETB */ |
209 | mxc_iomux_v3_setup_pad(&phyreset_gpio); | 209 | mxc_iomux_v3_setup_pad(phyreset_gpio); |
210 | ret = gpio_request(BABBAGE_PHY_RESET, "phy_reset"); | 210 | ret = gpio_request(BABBAGE_PHY_RESET, "phy_reset"); |
211 | 211 | ||
212 | if (ret) { | 212 | if (ret) { |
@@ -352,7 +352,8 @@ static const struct spi_imx_master mx51_babbage_spi_pdata __initconst = { | |||
352 | static void __init mxc_board_init(void) | 352 | static void __init mxc_board_init(void) |
353 | { | 353 | { |
354 | iomux_v3_cfg_t usbh1stp = MX51_PAD_USBH1_STP__USBH1_STP; | 354 | iomux_v3_cfg_t usbh1stp = MX51_PAD_USBH1_STP__USBH1_STP; |
355 | iomux_v3_cfg_t power_key = MX51_PAD_EIM_A27__GPIO_2_21; | 355 | iomux_v3_cfg_t power_key = (MX51_PAD_EIM_A27__GPIO_2_21 & |
356 | ~MUX_PAD_CTRL_MASK) | MX51_GPIO_PAD_CTRL_2; | ||
356 | 357 | ||
357 | #if defined(CONFIG_CPU_FREQ_IMX) | 358 | #if defined(CONFIG_CPU_FREQ_IMX) |
358 | get_cpu_op = mx51_get_cpu_op; | 359 | get_cpu_op = mx51_get_cpu_op; |
@@ -364,8 +365,7 @@ static void __init mxc_board_init(void) | |||
364 | imx51_add_fec(NULL); | 365 | imx51_add_fec(NULL); |
365 | 366 | ||
366 | /* Set the PAD settings for the pwr key. */ | 367 | /* Set the PAD settings for the pwr key. */ |
367 | power_key.pad_ctrl = MX51_GPIO_PAD_CTRL_2; | 368 | mxc_iomux_v3_setup_pad(power_key); |
368 | mxc_iomux_v3_setup_pad(&power_key); | ||
369 | imx51_add_gpio_keys(&imx_button_data); | 369 | imx51_add_gpio_keys(&imx_button_data); |
370 | 370 | ||
371 | imx51_add_imx_i2c(0, &babbage_i2c_data); | 371 | imx51_add_imx_i2c(0, &babbage_i2c_data); |
@@ -382,7 +382,7 @@ static void __init mxc_board_init(void) | |||
382 | gpio_usbh1_active(); | 382 | gpio_usbh1_active(); |
383 | mxc_register_device(&mxc_usbh1_device, &usbh1_config); | 383 | mxc_register_device(&mxc_usbh1_device, &usbh1_config); |
384 | /* setback USBH1_STP to be function */ | 384 | /* setback USBH1_STP to be function */ |
385 | mxc_iomux_v3_setup_pad(&usbh1stp); | 385 | mxc_iomux_v3_setup_pad(usbh1stp); |
386 | babbage_usbhub_reset(); | 386 | babbage_usbhub_reset(); |
387 | 387 | ||
388 | imx51_add_sdhci_esdhc_imx(0, NULL); | 388 | imx51_add_sdhci_esdhc_imx(0, NULL); |
diff --git a/arch/arm/plat-mxc/include/mach/iomux-v3.h b/arch/arm/plat-mxc/include/mach/iomux-v3.h index 811716fbfbe6..1462a1c18940 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-v3.h +++ b/arch/arm/plat-mxc/include/mach/iomux-v3.h | |||
@@ -42,58 +42,42 @@ | |||
42 | * If <padname> or <padmode> refers to a GPIO, it is named | 42 | * If <padname> or <padmode> refers to a GPIO, it is named |
43 | * GPIO_<unit>_<num> | 43 | * GPIO_<unit>_<num> |
44 | * | 44 | * |
45 | */ | 45 | * IOMUX/PAD Bit field definitions |
46 | 46 | * | |
47 | typedef struct deprecated_pad_desc { | 47 | * MUX_CTRL_OFS: 0..11 (12) |
48 | unsigned mux_ctrl_ofs:12; /* IOMUXC_SW_MUX_CTL_PAD offset */ | 48 | * PAD_CTRL_OFS: 12..23 (12) |
49 | unsigned mux_mode:8; | 49 | * SEL_INPUT_OFS: 24..35 (12) |
50 | unsigned pad_ctrl_ofs:12; /* IOMUXC_SW_PAD_CTRL offset */ | 50 | * MUX_MODE + SION: 36..40 (5) |
51 | #define NO_PAD_CTRL (1 << 16) | 51 | * PAD_CTRL + NO_PAD_CTRL: 41..57 (17) |
52 | unsigned pad_ctrl:17; | 52 | * SEL_INP: 58..61 (4) |
53 | unsigned select_input_ofs:12; /* IOMUXC_SELECT_INPUT offset */ | 53 | * reserved: 63 (1) |
54 | unsigned select_input:3; | 54 | */ |
55 | } iomux_v3_cfg_t; | 55 | |
56 | 56 | typedef u64 iomux_v3_cfg_t; | |
57 | static inline unsigned int MUX_CTRL_OFS(iomux_v3_cfg_t *pad) | 57 | |
58 | { | 58 | #define MUX_CTRL_OFS_SHIFT 0 |
59 | return pad->mux_ctrl_ofs; | 59 | #define MUX_CTRL_OFS_MASK ((iomux_v3_cfg_t)0xfff << MUX_CTRL_OFS_SHIFT) |
60 | } | 60 | #define MUX_PAD_CTRL_OFS_SHIFT 12 |
61 | 61 | #define MUX_PAD_CTRL_OFS_MASK ((iomux_v3_cfg_t)0xfff << MUX_PAD_CTRL_OFS_SHIFT) | |
62 | static inline unsigned int MUX_MODE(iomux_v3_cfg_t *pad) | 62 | #define MUX_SEL_INPUT_OFS_SHIFT 24 |
63 | { | 63 | #define MUX_SEL_INPUT_OFS_MASK ((iomux_v3_cfg_t)0xfff << MUX_SEL_INPUT_OFS_SHIFT) |
64 | return pad->mux_mode; | 64 | |
65 | } | 65 | #define MUX_MODE_SHIFT 36 |
66 | 66 | #define MUX_MODE_MASK ((iomux_v3_cfg_t)0x1f << MUX_MODE_SHIFT) | |
67 | static inline unsigned int MUX_SELECT_INPUT_OFS(iomux_v3_cfg_t *pad) | 67 | #define MUX_PAD_CTRL_SHIFT 41 |
68 | { | 68 | #define MUX_PAD_CTRL_MASK ((iomux_v3_cfg_t)0x1ffff << MUX_PAD_CTRL_SHIFT) |
69 | return pad->select_input_ofs; | 69 | #define NO_PAD_CTRL ((iomux_v3_cfg_t)1 << (MUX_PAD_CTRL_SHIFT + 16)) |
70 | } | 70 | #define MUX_SEL_INPUT_SHIFT 58 |
71 | 71 | #define MUX_SEL_INPUT_MASK ((iomux_v3_cfg_t)0xf << MUX_SEL_INPUT_SHIFT) | |
72 | static inline unsigned int MUX_SELECT_INPUT(iomux_v3_cfg_t *pad) | 72 | |
73 | { | 73 | #define IOMUX_PAD(_pad_ctrl_ofs, _mux_ctrl_ofs, _mux_mode, _sel_input_ofs, \ |
74 | return pad->select_input; | 74 | _sel_input, _pad_ctrl) \ |
75 | } | 75 | (((iomux_v3_cfg_t)(_mux_ctrl_ofs) << MUX_CTRL_OFS_SHIFT) | \ |
76 | 76 | ((iomux_v3_cfg_t)(_mux_mode) << MUX_MODE_SHIFT) | \ | |
77 | static inline unsigned int MUX_PAD_CTRL_OFS(iomux_v3_cfg_t *pad) | 77 | ((iomux_v3_cfg_t)(_pad_ctrl_ofs) << MUX_PAD_CTRL_OFS_SHIFT) | \ |
78 | { | 78 | ((iomux_v3_cfg_t)(_pad_ctrl) << MUX_PAD_CTRL_SHIFT) | \ |
79 | return pad->pad_ctrl_ofs; | 79 | ((iomux_v3_cfg_t)(_sel_input_ofs) << MUX_SEL_INPUT_OFS_SHIFT) | \ |
80 | } | 80 | ((iomux_v3_cfg_t)(_sel_input) << MUX_SEL_INPUT_SHIFT)) |
81 | |||
82 | static inline unsigned int MUX_PAD_CTRL(iomux_v3_cfg_t *pad) | ||
83 | { | ||
84 | return pad->pad_ctrl; | ||
85 | } | ||
86 | |||
87 | #define IOMUX_PAD(_pad_ctrl_ofs, _mux_ctrl_ofs, _mux_mode, _select_input_ofs, \ | ||
88 | _select_input, _pad_ctrl) \ | ||
89 | { \ | ||
90 | .mux_ctrl_ofs = _mux_ctrl_ofs, \ | ||
91 | .mux_mode = _mux_mode, \ | ||
92 | .pad_ctrl_ofs = _pad_ctrl_ofs, \ | ||
93 | .pad_ctrl = _pad_ctrl, \ | ||
94 | .select_input_ofs = _select_input_ofs, \ | ||
95 | .select_input = _select_input, \ | ||
96 | } | ||
97 | 81 | ||
98 | /* | 82 | /* |
99 | * Use to set PAD control | 83 | * Use to set PAD control |
@@ -137,7 +121,7 @@ static inline unsigned int MUX_PAD_CTRL(iomux_v3_cfg_t *pad) | |||
137 | /* | 121 | /* |
138 | * setups a single pad in the iomuxer | 122 | * setups a single pad in the iomuxer |
139 | */ | 123 | */ |
140 | int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t *pad); | 124 | int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad); |
141 | 125 | ||
142 | /* | 126 | /* |
143 | * setups mutliple pads | 127 | * setups mutliple pads |
diff --git a/arch/arm/plat-mxc/iomux-v3.c b/arch/arm/plat-mxc/iomux-v3.c index 4cbbf2c6ea74..99a9cdb9d6be 100644 --- a/arch/arm/plat-mxc/iomux-v3.c +++ b/arch/arm/plat-mxc/iomux-v3.c | |||
@@ -34,17 +34,24 @@ static void __iomem *base; | |||
34 | /* | 34 | /* |
35 | * configures a single pad in the iomuxer | 35 | * configures a single pad in the iomuxer |
36 | */ | 36 | */ |
37 | int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t *pad) | 37 | int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad) |
38 | { | 38 | { |
39 | if (MUX_CTRL_OFS(pad)) | 39 | u32 mux_ctrl_ofs = (pad & MUX_CTRL_OFS_MASK) >> MUX_CTRL_OFS_SHIFT; |
40 | __raw_writel(MUX_MODE(pad), base + MUX_CTRL_OFS(pad)); | 40 | u32 mux_mode = (pad & MUX_MODE_MASK) >> MUX_MODE_SHIFT; |
41 | u32 sel_input_ofs = (pad & MUX_SEL_INPUT_OFS_MASK) >> MUX_SEL_INPUT_OFS_SHIFT; | ||
42 | u32 sel_input = (pad & MUX_SEL_INPUT_MASK) >> MUX_SEL_INPUT_SHIFT; | ||
43 | u32 pad_ctrl_ofs = (pad & MUX_PAD_CTRL_OFS_MASK) >> MUX_PAD_CTRL_OFS_SHIFT; | ||
44 | u32 pad_ctrl = (pad & MUX_PAD_CTRL_MASK) >> MUX_PAD_CTRL_SHIFT; | ||
41 | 45 | ||
42 | if (MUX_SELECT_INPUT_OFS(pad)) | 46 | if (mux_ctrl_ofs) |
43 | __raw_writel(MUX_SELECT_INPUT(pad), | 47 | __raw_writel(mux_mode, base + mux_ctrl_ofs); |
44 | base + MUX_SELECT_INPUT_OFS(pad)); | 48 | |
49 | if (sel_input_ofs) | ||
50 | __raw_writel(sel_input, base + sel_input_ofs); | ||
51 | |||
52 | if (!(pad_ctrl & NO_PAD_CTRL) && pad_ctrl_ofs) | ||
53 | __raw_writel(pad_ctrl, base + pad_ctrl_ofs); | ||
45 | 54 | ||
46 | if (!(MUX_PAD_CTRL(pad) & NO_PAD_CTRL) && MUX_PAD_CTRL_OFS(pad)) | ||
47 | __raw_writel(MUX_PAD_CTRL(pad), base + MUX_PAD_CTRL_OFS(pad)); | ||
48 | return 0; | 55 | return 0; |
49 | } | 56 | } |
50 | EXPORT_SYMBOL(mxc_iomux_v3_setup_pad); | 57 | EXPORT_SYMBOL(mxc_iomux_v3_setup_pad); |
@@ -56,7 +63,7 @@ int mxc_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t *pad_list, unsigned count) | |||
56 | int ret; | 63 | int ret; |
57 | 64 | ||
58 | for (i = 0; i < count; i++) { | 65 | for (i = 0; i < count; i++) { |
59 | ret = mxc_iomux_v3_setup_pad(p); | 66 | ret = mxc_iomux_v3_setup_pad(*p); |
60 | if (ret) | 67 | if (ret) |
61 | return ret; | 68 | return ret; |
62 | p++; | 69 | p++; |