Commit 581f84e2 authored by Fabio Estevam's avatar Fabio Estevam Committed by Sascha Hauer

mxc: iomuxv1: Do not use gpio_request when setting the pin as GPIO

When setting the IOMUX of multiple pins via mxc_gpio_setup_multiple_pins, gpio_request
is called and this prevents subsequent calls of gpio_request done by drivers to succeed.

Remove gpio_request call from mxc_gpio_setup_multiple_pins function.

As gpio_request is removed from mxc_gpio_setup_multiple_pins, there is no need to have
mxc_gpio_release_multiple_pins anymore, so remove this function.

Tested on a mx27_3ds board and after applying this patch it is possible to define all the
IOMUX setup in a static array
Signed-off-by: default avatarFabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: default avatarSascha Hauer <s.hauer@pengutronix.de>
parent b2a08e3e
...@@ -98,7 +98,6 @@ ...@@ -98,7 +98,6 @@
extern int mxc_gpio_mode(int gpio_mode); extern int mxc_gpio_mode(int gpio_mode);
extern int mxc_gpio_setup_multiple_pins(const int *pin_list, unsigned count, extern int mxc_gpio_setup_multiple_pins(const int *pin_list, unsigned count,
const char *label); const char *label);
extern void mxc_gpio_release_multiple_pins(const int *pin_list, int count);
extern int __init imx_iomuxv1_init(void __iomem *base, int numports); extern int __init imx_iomuxv1_init(void __iomem *base, int numports);
......
...@@ -172,45 +172,13 @@ static int imx_iomuxv1_setup_multiple(const int *list, unsigned count) ...@@ -172,45 +172,13 @@ static int imx_iomuxv1_setup_multiple(const int *list, unsigned count)
int mxc_gpio_setup_multiple_pins(const int *pin_list, unsigned count, int mxc_gpio_setup_multiple_pins(const int *pin_list, unsigned count,
const char *label) const char *label)
{ {
size_t i;
int ret; int ret;
for (i = 0; i < count; ++i) {
unsigned gpio = pin_list[i] & (GPIO_PIN_MASK | GPIO_PORT_MASK);
ret = gpio_request(gpio, label);
if (ret)
goto err_gpio_request;
}
ret = imx_iomuxv1_setup_multiple(pin_list, count); ret = imx_iomuxv1_setup_multiple(pin_list, count);
if (ret)
goto err_setup;
return 0;
err_setup:
BUG_ON(i != count);
err_gpio_request:
mxc_gpio_release_multiple_pins(pin_list, i);
return ret; return ret;
} }
EXPORT_SYMBOL(mxc_gpio_setup_multiple_pins); EXPORT_SYMBOL(mxc_gpio_setup_multiple_pins);
void mxc_gpio_release_multiple_pins(const int *pin_list, int count)
{
size_t i;
for (i = 0; i < count; ++i) {
unsigned gpio = pin_list[i] & (GPIO_PIN_MASK | GPIO_PORT_MASK);
gpio_free(gpio);
}
}
EXPORT_SYMBOL(mxc_gpio_release_multiple_pins);
int __init imx_iomuxv1_init(void __iomem *base, int numports) int __init imx_iomuxv1_init(void __iomem *base, int numports)
{ {
imx_iomuxv1_baseaddr = base; imx_iomuxv1_baseaddr = base;
......
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