Commit 4f163eb8 authored by Sascha Hauer's avatar Sascha Hauer

mx31: calls to gpio_request moved into platform code

In order to use the gpiolib, we now have to call gpio_request in
the plaform code since it is not done in iomux code anymore.
Signed-off-by: default avatarSascha Hauer <s.hauer@pengutronix.de>
parent ef754d63
...@@ -187,7 +187,7 @@ static void __init mx31ads_init_expio(void) ...@@ -187,7 +187,7 @@ static void __init mx31ads_init_expio(void)
/* /*
* Configure INT line as GPIO input * Configure INT line as GPIO input
*/ */
mxc_iomux_setup_pin(IOMUX_MODE(MX31_PIN_GPIO1_4, IOMUX_CONFIG_GPIO), "expio"); mxc_iomux_alloc_pin(IOMUX_MODE(MX31_PIN_GPIO1_4, IOMUX_CONFIG_GPIO), "expio");
/* disable the interrupt and clear the status */ /* disable the interrupt and clear the status */
__raw_writew(0xFFFF, PBC_INTMASK_CLEAR_REG); __raw_writew(0xFFFF, PBC_INTMASK_CLEAR_REG);
......
...@@ -118,14 +118,21 @@ void __init mx31lite_map_io(void) ...@@ -118,14 +118,21 @@ void __init mx31lite_map_io(void)
*/ */
static void __init mxc_board_init(void) static void __init mxc_board_init(void)
{ {
int ret;
mxc_iomux_setup_multiple_pins(mx31lite_pins, ARRAY_SIZE(mx31lite_pins), mxc_iomux_setup_multiple_pins(mx31lite_pins, ARRAY_SIZE(mx31lite_pins),
"mx31lite"); "mx31lite");
mxc_register_device(&mxc_uart_device0, &uart_pdata); mxc_register_device(&mxc_uart_device0, &uart_pdata);
/* SMSC9117 IRQ pin */ /* SMSC9117 IRQ pin */
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_SFS6)); ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_SFS6), "sms9117-irq");
platform_device_register(&smsc911x_device); if (ret)
pr_warning("could not get LAN irq gpio\n");
else {
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_SFS6));
platform_device_register(&smsc911x_device);
}
} }
static void __init mx31lite_timer_init(void) static void __init mx31lite_timer_init(void)
......
...@@ -56,14 +56,40 @@ static int devboard_sdhc2_get_ro(struct device *dev) ...@@ -56,14 +56,40 @@ static int devboard_sdhc2_get_ro(struct device *dev)
static int devboard_sdhc2_init(struct device *dev, irq_handler_t detect_irq, static int devboard_sdhc2_init(struct device *dev, irq_handler_t detect_irq,
void *data) void *data)
{ {
return request_irq(gpio_to_irq(SDHC2_CD), detect_irq, int ret;
ret = gpio_request(SDHC2_CD, "sdhc-detect");
if (ret)
return ret;
gpio_direction_input(SDHC2_CD);
ret = gpio_request(SDHC2_WP, "sdhc-wp");
if (ret)
goto err_gpio_free;
gpio_direction_input(SDHC2_WP);
ret = request_irq(gpio_to_irq(SDHC2_CD), detect_irq,
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
"sdhc2-card-detect", data); "sdhc2-card-detect", data);
if (ret)
goto err_gpio_free_2;
return 0;
err_gpio_free_2:
gpio_free(SDHC2_WP);
err_gpio_free:
gpio_free(SDHC2_CD);
return ret;
} }
static void devboard_sdhc2_exit(struct device *dev, void *data) static void devboard_sdhc2_exit(struct device *dev, void *data)
{ {
free_irq(gpio_to_irq(SDHC2_CD), data); free_irq(gpio_to_irq(SDHC2_CD), data);
gpio_free(SDHC2_WP);
gpio_free(SDHC2_CD);
} }
static struct imxmmc_platform_data sdhc2_pdata = { static struct imxmmc_platform_data sdhc2_pdata = {
......
...@@ -60,14 +60,40 @@ static int marxbot_sdhc2_get_ro(struct device *dev) ...@@ -60,14 +60,40 @@ static int marxbot_sdhc2_get_ro(struct device *dev)
static int marxbot_sdhc2_init(struct device *dev, irq_handler_t detect_irq, static int marxbot_sdhc2_init(struct device *dev, irq_handler_t detect_irq,
void *data) void *data)
{ {
return request_irq(gpio_to_irq(SDHC2_CD), detect_irq, int ret;
ret = gpio_request(SDHC2_CD, "sdhc-detect");
if (ret)
return ret;
gpio_direction_input(SDHC2_CD);
ret = gpio_request(SDHC2_WP, "sdhc-wp");
if (ret)
goto err_gpio_free;
gpio_direction_input(SDHC2_WP);
ret = request_irq(gpio_to_irq(SDHC2_CD), detect_irq,
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
"sdhc2-card-detect", data); "sdhc2-card-detect", data);
if (ret)
goto err_gpio_free_2;
return 0;
err_gpio_free_2:
gpio_free(SDHC2_WP);
err_gpio_free:
gpio_free(SDHC2_CD);
return ret;
} }
static void marxbot_sdhc2_exit(struct device *dev, void *data) static void marxbot_sdhc2_exit(struct device *dev, void *data)
{ {
free_irq(gpio_to_irq(SDHC2_CD), data); free_irq(gpio_to_irq(SDHC2_CD), data);
gpio_free(SDHC2_WP);
gpio_free(SDHC2_CD);
} }
static struct imxmmc_platform_data sdhc2_pdata = { static struct imxmmc_platform_data sdhc2_pdata = {
......
...@@ -112,14 +112,40 @@ static int moboard_sdhc1_get_ro(struct device *dev) ...@@ -112,14 +112,40 @@ static int moboard_sdhc1_get_ro(struct device *dev)
static int moboard_sdhc1_init(struct device *dev, irq_handler_t detect_irq, static int moboard_sdhc1_init(struct device *dev, irq_handler_t detect_irq,
void *data) void *data)
{ {
return request_irq(gpio_to_irq(SDHC1_CD), detect_irq, int ret;
ret = gpio_request(SDHC1_CD, "sdhc-detect");
if (ret)
return ret;
gpio_direction_input(SDHC1_CD);
ret = gpio_request(SDHC1_WP, "sdhc-wp");
if (ret)
goto err_gpio_free;
gpio_direction_input(SDHC1_WP);
ret = request_irq(gpio_to_irq(SDHC1_CD), detect_irq,
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
"sdhc1-card-detect", data); "sdhc1-card-detect", data);
if (ret)
goto err_gpio_free_2;
return 0;
err_gpio_free_2:
gpio_free(SDHC1_WP);
err_gpio_free:
gpio_free(SDHC1_CD);
return ret;
} }
static void moboard_sdhc1_exit(struct device *dev, void *data) static void moboard_sdhc1_exit(struct device *dev, void *data)
{ {
free_irq(gpio_to_irq(SDHC1_CD), data); free_irq(gpio_to_irq(SDHC1_CD), data);
gpio_free(SDHC1_WP);
gpio_free(SDHC1_CD);
} }
static struct imxmmc_platform_data sdhc1_pdata = { static struct imxmmc_platform_data sdhc1_pdata = {
......
...@@ -280,27 +280,50 @@ static int pcm970_sdhc1_get_ro(struct device *dev) ...@@ -280,27 +280,50 @@ static int pcm970_sdhc1_get_ro(struct device *dev)
} }
#endif #endif
#define SDHC1_GPIO_WP IOMUX_TO_GPIO(MX31_PIN_SFS6)
#define SDHC1_GPIO_DET IOMUX_TO_GPIO(MX31_PIN_SCK6)
static int pcm970_sdhc1_init(struct device *dev, irq_handler_t detect_irq, static int pcm970_sdhc1_init(struct device *dev, irq_handler_t detect_irq,
void *data) void *data)
{ {
int ret; int ret;
int gpio_det, gpio_wp;
gpio_det = IOMUX_TO_GPIO(MX31_PIN_SCK6); ret = gpio_request(SDHC1_GPIO_DET, "sdhc-detect");
gpio_wp = IOMUX_TO_GPIO(MX31_PIN_SFS6); if (ret)
return ret;
gpio_direction_input(SDHC1_GPIO_DET);
gpio_direction_input(gpio_det); #ifdef PCM970_SDHC_RW_SWITCH
gpio_direction_input(gpio_wp); ret = gpio_request(SDHC1_GPIO_WP, "sdhc-wp");
if (ret)
goto err_gpio_free;
gpio_direction_input(SDHC1_GPIO_WP);
#endif
ret = request_irq(IOMUX_TO_IRQ(MX31_PIN_SCK6), detect_irq, ret = request_irq(IOMUX_TO_IRQ(MX31_PIN_SCK6), detect_irq,
IRQF_DISABLED | IRQF_TRIGGER_FALLING, IRQF_DISABLED | IRQF_TRIGGER_FALLING,
"sdhc-detect", data); "sdhc-detect", data);
if (ret)
goto err_gpio_free_2;
return 0;
err_gpio_free_2:
#ifdef PCM970_SDHC_RW_SWITCH
gpio_free(SDHC1_GPIO_WP);
err_gpio_free:
#endif
gpio_free(SDHC1_GPIO_DET);
return ret; return ret;
} }
static void pcm970_sdhc1_exit(struct device *dev, void *data) static void pcm970_sdhc1_exit(struct device *dev, void *data)
{ {
free_irq(IOMUX_TO_IRQ(MX31_PIN_SCK6), data); free_irq(IOMUX_TO_IRQ(MX31_PIN_SCK6), data);
gpio_free(SDHC1_GPIO_DET);
gpio_free(SDHC1_GPIO_WP);
} }
static struct imxmmc_platform_data sdhc_pdata = { static struct imxmmc_platform_data sdhc_pdata = {
...@@ -313,7 +336,6 @@ static struct imxmmc_platform_data sdhc_pdata = { ...@@ -313,7 +336,6 @@ static struct imxmmc_platform_data sdhc_pdata = {
static struct platform_device *devices[] __initdata = { static struct platform_device *devices[] __initdata = {
&pcm037_flash, &pcm037_flash,
&pcm037_eth,
&pcm037_sram_device, &pcm037_sram_device,
}; };
...@@ -370,6 +392,8 @@ static struct mx3fb_platform_data mx3fb_pdata = { ...@@ -370,6 +392,8 @@ static struct mx3fb_platform_data mx3fb_pdata = {
*/ */
static void __init mxc_board_init(void) static void __init mxc_board_init(void)
{ {
int ret;
mxc_iomux_setup_multiple_pins(pcm037_pins, ARRAY_SIZE(pcm037_pins), mxc_iomux_setup_multiple_pins(pcm037_pins, ARRAY_SIZE(pcm037_pins),
"pcm037"); "pcm037");
...@@ -382,7 +406,14 @@ static void __init mxc_board_init(void) ...@@ -382,7 +406,14 @@ static void __init mxc_board_init(void)
mxc_register_device(&mxc_w1_master_device, NULL); mxc_register_device(&mxc_w1_master_device, NULL);
/* LAN9217 IRQ pin */ /* LAN9217 IRQ pin */
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1)); ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1), "lan9217-irq");
if (ret)
pr_warning("could not get LAN irq gpio\n");
else {
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1));
platform_device_register(&pcm037_eth);
}
#ifdef CONFIG_I2C_IMX #ifdef CONFIG_I2C_IMX
i2c_register_board_info(1, pcm037_i2c_devices, i2c_register_board_info(1, pcm037_i2c_devices,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment