Commit ee17962e authored by Linus Walleij's avatar Linus Walleij Committed by Russell King

ARM: 5731/2: Fix U300 generic GPIO, remove ifdefs from MMCI v3

The #ifdefs in the MMCI driver were erroneous and just masking
a bug in the U300 generic GPIO implementation. This removes the
ifdefs and fixes the U300 generic GPIO instead.
Signed-off-by: default avatarLinus Walleij <linus.walleij@stericsson.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent aa45ee8f
...@@ -281,6 +281,16 @@ int gpio_unregister_callback(unsigned gpio) ...@@ -281,6 +281,16 @@ int gpio_unregister_callback(unsigned gpio)
} }
EXPORT_SYMBOL(gpio_unregister_callback); EXPORT_SYMBOL(gpio_unregister_callback);
/* Non-zero means valid */
int gpio_is_valid(int number)
{
if (number >= 0 &&
number < (U300_GPIO_NUM_PORTS * U300_GPIO_PINS_PER_PORT))
return 1;
return 0;
}
EXPORT_SYMBOL(gpio_is_valid);
int gpio_request(unsigned gpio, const char *label) int gpio_request(unsigned gpio, const char *label)
{ {
if (gpio_pin[gpio].users) if (gpio_pin[gpio].users)
......
...@@ -258,6 +258,7 @@ ...@@ -258,6 +258,7 @@
#define PIN_TO_PORT(val) (val >> 3) #define PIN_TO_PORT(val) (val >> 3)
/* These can be found in arch/arm/mach-u300/gpio.c */ /* These can be found in arch/arm/mach-u300/gpio.c */
extern int gpio_is_valid(int number);
extern int gpio_request(unsigned gpio, const char *label); extern int gpio_request(unsigned gpio, const char *label);
extern void gpio_free(unsigned gpio); extern void gpio_free(unsigned gpio);
extern int gpio_direction_input(unsigned gpio); extern int gpio_direction_input(unsigned gpio);
......
...@@ -678,7 +678,6 @@ static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id) ...@@ -678,7 +678,6 @@ static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id)
writel(0, host->base + MMCIMASK1); writel(0, host->base + MMCIMASK1);
writel(0xfff, host->base + MMCICLEAR); writel(0xfff, host->base + MMCICLEAR);
#ifdef CONFIG_GPIOLIB
if (gpio_is_valid(plat->gpio_cd)) { if (gpio_is_valid(plat->gpio_cd)) {
ret = gpio_request(plat->gpio_cd, DRIVER_NAME " (cd)"); ret = gpio_request(plat->gpio_cd, DRIVER_NAME " (cd)");
if (ret == 0) if (ret == 0)
...@@ -697,7 +696,6 @@ static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id) ...@@ -697,7 +696,6 @@ static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id)
else if (ret != -ENOSYS) else if (ret != -ENOSYS)
goto err_gpio_wp; goto err_gpio_wp;
} }
#endif
ret = request_irq(dev->irq[0], mmci_irq, IRQF_SHARED, DRIVER_NAME " (cmd)", host); ret = request_irq(dev->irq[0], mmci_irq, IRQF_SHARED, DRIVER_NAME " (cmd)", host);
if (ret) if (ret)
......
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