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: Fabio Estevam <fabio.estevam@freescale.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
b2a08e3e46
commit
581f84e24b
2 changed files with 0 additions and 33 deletions
|
@ -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)
|
||||||
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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue