diff options
Diffstat (limited to 'arch/arm/mach-mx3')
-rw-r--r-- | arch/arm/mach-mx3/mx31ads.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-mx3/mx31lite.c | 11 | ||||
-rw-r--r-- | arch/arm/mach-mx3/mx31moboard-devboard.c | 28 | ||||
-rw-r--r-- | arch/arm/mach-mx3/mx31moboard-marxbot.c | 28 | ||||
-rw-r--r-- | arch/arm/mach-mx3/mx31moboard.c | 28 | ||||
-rw-r--r-- | arch/arm/mach-mx3/pcm037.c | 45 |
6 files changed, 129 insertions, 13 deletions
diff --git a/arch/arm/mach-mx3/mx31ads.c b/arch/arm/mach-mx3/mx31ads.c index db2e06a8123d..30e2767a78ae 100644 --- a/arch/arm/mach-mx3/mx31ads.c +++ b/arch/arm/mach-mx3/mx31ads.c | |||
@@ -187,7 +187,7 @@ static void __init mx31ads_init_expio(void) | |||
187 | /* | 187 | /* |
188 | * Configure INT line as GPIO input | 188 | * Configure INT line as GPIO input |
189 | */ | 189 | */ |
190 | mxc_iomux_setup_pin(IOMUX_MODE(MX31_PIN_GPIO1_4, IOMUX_CONFIG_GPIO), "expio"); | 190 | mxc_iomux_alloc_pin(IOMUX_MODE(MX31_PIN_GPIO1_4, IOMUX_CONFIG_GPIO), "expio"); |
191 | 191 | ||
192 | /* disable the interrupt and clear the status */ | 192 | /* disable the interrupt and clear the status */ |
193 | __raw_writew(0xFFFF, PBC_INTMASK_CLEAR_REG); | 193 | __raw_writew(0xFFFF, PBC_INTMASK_CLEAR_REG); |
diff --git a/arch/arm/mach-mx3/mx31lite.c b/arch/arm/mach-mx3/mx31lite.c index 74734e50de24..e70922913164 100644 --- a/arch/arm/mach-mx3/mx31lite.c +++ b/arch/arm/mach-mx3/mx31lite.c | |||
@@ -118,14 +118,21 @@ void __init mx31lite_map_io(void) | |||
118 | */ | 118 | */ |
119 | static void __init mxc_board_init(void) | 119 | static void __init mxc_board_init(void) |
120 | { | 120 | { |
121 | int ret; | ||
122 | |||
121 | mxc_iomux_setup_multiple_pins(mx31lite_pins, ARRAY_SIZE(mx31lite_pins), | 123 | mxc_iomux_setup_multiple_pins(mx31lite_pins, ARRAY_SIZE(mx31lite_pins), |
122 | "mx31lite"); | 124 | "mx31lite"); |
123 | 125 | ||
124 | mxc_register_device(&mxc_uart_device0, &uart_pdata); | 126 | mxc_register_device(&mxc_uart_device0, &uart_pdata); |
125 | 127 | ||
126 | /* SMSC9117 IRQ pin */ | 128 | /* SMSC9117 IRQ pin */ |
127 | gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_SFS6)); | 129 | ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_SFS6), "sms9117-irq"); |
128 | platform_device_register(&smsc911x_device); | 130 | if (ret) |
131 | pr_warning("could not get LAN irq gpio\n"); | ||
132 | else { | ||
133 | gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_SFS6)); | ||
134 | platform_device_register(&smsc911x_device); | ||
135 | } | ||
129 | } | 136 | } |
130 | 137 | ||
131 | static void __init mx31lite_timer_init(void) | 138 | static void __init mx31lite_timer_init(void) |
diff --git a/arch/arm/mach-mx3/mx31moboard-devboard.c b/arch/arm/mach-mx3/mx31moboard-devboard.c index 0a69a4f212a3..b3e8f251ac79 100644 --- a/arch/arm/mach-mx3/mx31moboard-devboard.c +++ b/arch/arm/mach-mx3/mx31moboard-devboard.c | |||
@@ -56,14 +56,40 @@ static int devboard_sdhc2_get_ro(struct device *dev) | |||
56 | static int devboard_sdhc2_init(struct device *dev, irq_handler_t detect_irq, | 56 | static int devboard_sdhc2_init(struct device *dev, irq_handler_t detect_irq, |
57 | void *data) | 57 | void *data) |
58 | { | 58 | { |
59 | return request_irq(gpio_to_irq(SDHC2_CD), detect_irq, | 59 | int ret; |
60 | |||
61 | ret = gpio_request(SDHC2_CD, "sdhc-detect"); | ||
62 | if (ret) | ||
63 | return ret; | ||
64 | |||
65 | gpio_direction_input(SDHC2_CD); | ||
66 | |||
67 | ret = gpio_request(SDHC2_WP, "sdhc-wp"); | ||
68 | if (ret) | ||
69 | goto err_gpio_free; | ||
70 | gpio_direction_input(SDHC2_WP); | ||
71 | |||
72 | ret = request_irq(gpio_to_irq(SDHC2_CD), detect_irq, | ||
60 | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, | 73 | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, |
61 | "sdhc2-card-detect", data); | 74 | "sdhc2-card-detect", data); |
75 | if (ret) | ||
76 | goto err_gpio_free_2; | ||
77 | |||
78 | return 0; | ||
79 | |||
80 | err_gpio_free_2: | ||
81 | gpio_free(SDHC2_WP); | ||
82 | err_gpio_free: | ||
83 | gpio_free(SDHC2_CD); | ||
84 | |||
85 | return ret; | ||
62 | } | 86 | } |
63 | 87 | ||
64 | static void devboard_sdhc2_exit(struct device *dev, void *data) | 88 | static void devboard_sdhc2_exit(struct device *dev, void *data) |
65 | { | 89 | { |
66 | free_irq(gpio_to_irq(SDHC2_CD), data); | 90 | free_irq(gpio_to_irq(SDHC2_CD), data); |
91 | gpio_free(SDHC2_WP); | ||
92 | gpio_free(SDHC2_CD); | ||
67 | } | 93 | } |
68 | 94 | ||
69 | static struct imxmmc_platform_data sdhc2_pdata = { | 95 | static struct imxmmc_platform_data sdhc2_pdata = { |
diff --git a/arch/arm/mach-mx3/mx31moboard-marxbot.c b/arch/arm/mach-mx3/mx31moboard-marxbot.c index 4fc271145b0c..53ce7ff0637c 100644 --- a/arch/arm/mach-mx3/mx31moboard-marxbot.c +++ b/arch/arm/mach-mx3/mx31moboard-marxbot.c | |||
@@ -60,14 +60,40 @@ static int marxbot_sdhc2_get_ro(struct device *dev) | |||
60 | static int marxbot_sdhc2_init(struct device *dev, irq_handler_t detect_irq, | 60 | static int marxbot_sdhc2_init(struct device *dev, irq_handler_t detect_irq, |
61 | void *data) | 61 | void *data) |
62 | { | 62 | { |
63 | return request_irq(gpio_to_irq(SDHC2_CD), detect_irq, | 63 | int ret; |
64 | |||
65 | ret = gpio_request(SDHC2_CD, "sdhc-detect"); | ||
66 | if (ret) | ||
67 | return ret; | ||
68 | |||
69 | gpio_direction_input(SDHC2_CD); | ||
70 | |||
71 | ret = gpio_request(SDHC2_WP, "sdhc-wp"); | ||
72 | if (ret) | ||
73 | goto err_gpio_free; | ||
74 | gpio_direction_input(SDHC2_WP); | ||
75 | |||
76 | ret = request_irq(gpio_to_irq(SDHC2_CD), detect_irq, | ||
64 | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, | 77 | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, |
65 | "sdhc2-card-detect", data); | 78 | "sdhc2-card-detect", data); |
79 | if (ret) | ||
80 | goto err_gpio_free_2; | ||
81 | |||
82 | return 0; | ||
83 | |||
84 | err_gpio_free_2: | ||
85 | gpio_free(SDHC2_WP); | ||
86 | err_gpio_free: | ||
87 | gpio_free(SDHC2_CD); | ||
88 | |||
89 | return ret; | ||
66 | } | 90 | } |
67 | 91 | ||
68 | static void marxbot_sdhc2_exit(struct device *dev, void *data) | 92 | static void marxbot_sdhc2_exit(struct device *dev, void *data) |
69 | { | 93 | { |
70 | free_irq(gpio_to_irq(SDHC2_CD), data); | 94 | free_irq(gpio_to_irq(SDHC2_CD), data); |
95 | gpio_free(SDHC2_WP); | ||
96 | gpio_free(SDHC2_CD); | ||
71 | } | 97 | } |
72 | 98 | ||
73 | static struct imxmmc_platform_data sdhc2_pdata = { | 99 | static struct imxmmc_platform_data sdhc2_pdata = { |
diff --git a/arch/arm/mach-mx3/mx31moboard.c b/arch/arm/mach-mx3/mx31moboard.c index 2cca3f2e72b9..0df6ac610b65 100644 --- a/arch/arm/mach-mx3/mx31moboard.c +++ b/arch/arm/mach-mx3/mx31moboard.c | |||
@@ -112,14 +112,40 @@ static int moboard_sdhc1_get_ro(struct device *dev) | |||
112 | static int moboard_sdhc1_init(struct device *dev, irq_handler_t detect_irq, | 112 | static int moboard_sdhc1_init(struct device *dev, irq_handler_t detect_irq, |
113 | void *data) | 113 | void *data) |
114 | { | 114 | { |
115 | return request_irq(gpio_to_irq(SDHC1_CD), detect_irq, | 115 | int ret; |
116 | |||
117 | ret = gpio_request(SDHC1_CD, "sdhc-detect"); | ||
118 | if (ret) | ||
119 | return ret; | ||
120 | |||
121 | gpio_direction_input(SDHC1_CD); | ||
122 | |||
123 | ret = gpio_request(SDHC1_WP, "sdhc-wp"); | ||
124 | if (ret) | ||
125 | goto err_gpio_free; | ||
126 | gpio_direction_input(SDHC1_WP); | ||
127 | |||
128 | ret = request_irq(gpio_to_irq(SDHC1_CD), detect_irq, | ||
116 | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, | 129 | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, |
117 | "sdhc1-card-detect", data); | 130 | "sdhc1-card-detect", data); |
131 | if (ret) | ||
132 | goto err_gpio_free_2; | ||
133 | |||
134 | return 0; | ||
135 | |||
136 | err_gpio_free_2: | ||
137 | gpio_free(SDHC1_WP); | ||
138 | err_gpio_free: | ||
139 | gpio_free(SDHC1_CD); | ||
140 | |||
141 | return ret; | ||
118 | } | 142 | } |
119 | 143 | ||
120 | static void moboard_sdhc1_exit(struct device *dev, void *data) | 144 | static void moboard_sdhc1_exit(struct device *dev, void *data) |
121 | { | 145 | { |
122 | free_irq(gpio_to_irq(SDHC1_CD), data); | 146 | free_irq(gpio_to_irq(SDHC1_CD), data); |
147 | gpio_free(SDHC1_WP); | ||
148 | gpio_free(SDHC1_CD); | ||
123 | } | 149 | } |
124 | 150 | ||
125 | static struct imxmmc_platform_data sdhc1_pdata = { | 151 | static struct imxmmc_platform_data sdhc1_pdata = { |
diff --git a/arch/arm/mach-mx3/pcm037.c b/arch/arm/mach-mx3/pcm037.c index 350cff5cc48a..c6f61a1f06c8 100644 --- a/arch/arm/mach-mx3/pcm037.c +++ b/arch/arm/mach-mx3/pcm037.c | |||
@@ -280,27 +280,50 @@ static int pcm970_sdhc1_get_ro(struct device *dev) | |||
280 | } | 280 | } |
281 | #endif | 281 | #endif |
282 | 282 | ||
283 | #define SDHC1_GPIO_WP IOMUX_TO_GPIO(MX31_PIN_SFS6) | ||
284 | #define SDHC1_GPIO_DET IOMUX_TO_GPIO(MX31_PIN_SCK6) | ||
285 | |||
283 | static int pcm970_sdhc1_init(struct device *dev, irq_handler_t detect_irq, | 286 | static int pcm970_sdhc1_init(struct device *dev, irq_handler_t detect_irq, |
284 | void *data) | 287 | void *data) |
285 | { | 288 | { |
286 | int ret; | 289 | int ret; |
287 | int gpio_det, gpio_wp; | ||
288 | 290 | ||
289 | gpio_det = IOMUX_TO_GPIO(MX31_PIN_SCK6); | 291 | ret = gpio_request(SDHC1_GPIO_DET, "sdhc-detect"); |
290 | gpio_wp = IOMUX_TO_GPIO(MX31_PIN_SFS6); | 292 | if (ret) |
293 | return ret; | ||
294 | |||
295 | gpio_direction_input(SDHC1_GPIO_DET); | ||
291 | 296 | ||
292 | gpio_direction_input(gpio_det); | 297 | #ifdef PCM970_SDHC_RW_SWITCH |
293 | gpio_direction_input(gpio_wp); | 298 | ret = gpio_request(SDHC1_GPIO_WP, "sdhc-wp"); |
299 | if (ret) | ||
300 | goto err_gpio_free; | ||
301 | gpio_direction_input(SDHC1_GPIO_WP); | ||
302 | #endif | ||
294 | 303 | ||
295 | ret = request_irq(IOMUX_TO_IRQ(MX31_PIN_SCK6), detect_irq, | 304 | ret = request_irq(IOMUX_TO_IRQ(MX31_PIN_SCK6), detect_irq, |
296 | IRQF_DISABLED | IRQF_TRIGGER_FALLING, | 305 | IRQF_DISABLED | IRQF_TRIGGER_FALLING, |
297 | "sdhc-detect", data); | 306 | "sdhc-detect", data); |
307 | if (ret) | ||
308 | goto err_gpio_free_2; | ||
309 | |||
310 | return 0; | ||
311 | |||
312 | err_gpio_free_2: | ||
313 | #ifdef PCM970_SDHC_RW_SWITCH | ||
314 | gpio_free(SDHC1_GPIO_WP); | ||
315 | err_gpio_free: | ||
316 | #endif | ||
317 | gpio_free(SDHC1_GPIO_DET); | ||
318 | |||
298 | return ret; | 319 | return ret; |
299 | } | 320 | } |
300 | 321 | ||
301 | static void pcm970_sdhc1_exit(struct device *dev, void *data) | 322 | static void pcm970_sdhc1_exit(struct device *dev, void *data) |
302 | { | 323 | { |
303 | free_irq(IOMUX_TO_IRQ(MX31_PIN_SCK6), data); | 324 | free_irq(IOMUX_TO_IRQ(MX31_PIN_SCK6), data); |
325 | gpio_free(SDHC1_GPIO_DET); | ||
326 | gpio_free(SDHC1_GPIO_WP); | ||
304 | } | 327 | } |
305 | 328 | ||
306 | static struct imxmmc_platform_data sdhc_pdata = { | 329 | static struct imxmmc_platform_data sdhc_pdata = { |
@@ -313,7 +336,6 @@ static struct imxmmc_platform_data sdhc_pdata = { | |||
313 | 336 | ||
314 | static struct platform_device *devices[] __initdata = { | 337 | static struct platform_device *devices[] __initdata = { |
315 | &pcm037_flash, | 338 | &pcm037_flash, |
316 | &pcm037_eth, | ||
317 | &pcm037_sram_device, | 339 | &pcm037_sram_device, |
318 | }; | 340 | }; |
319 | 341 | ||
@@ -370,6 +392,8 @@ static struct mx3fb_platform_data mx3fb_pdata = { | |||
370 | */ | 392 | */ |
371 | static void __init mxc_board_init(void) | 393 | static void __init mxc_board_init(void) |
372 | { | 394 | { |
395 | int ret; | ||
396 | |||
373 | mxc_iomux_setup_multiple_pins(pcm037_pins, ARRAY_SIZE(pcm037_pins), | 397 | mxc_iomux_setup_multiple_pins(pcm037_pins, ARRAY_SIZE(pcm037_pins), |
374 | "pcm037"); | 398 | "pcm037"); |
375 | 399 | ||
@@ -382,7 +406,14 @@ static void __init mxc_board_init(void) | |||
382 | mxc_register_device(&mxc_w1_master_device, NULL); | 406 | mxc_register_device(&mxc_w1_master_device, NULL); |
383 | 407 | ||
384 | /* LAN9217 IRQ pin */ | 408 | /* LAN9217 IRQ pin */ |
385 | gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1)); | 409 | ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1), "lan9217-irq"); |
410 | if (ret) | ||
411 | pr_warning("could not get LAN irq gpio\n"); | ||
412 | else { | ||
413 | gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1)); | ||
414 | platform_device_register(&pcm037_eth); | ||
415 | } | ||
416 | |||
386 | 417 | ||
387 | #ifdef CONFIG_I2C_IMX | 418 | #ifdef CONFIG_I2C_IMX |
388 | i2c_register_board_info(1, pcm037_i2c_devices, | 419 | i2c_register_board_info(1, pcm037_i2c_devices, |