diff options
Diffstat (limited to 'arch/arm/mach-mx3/iomux.c')
-rw-r--r-- | arch/arm/mach-mx3/iomux.c | 25 |
1 files changed, 6 insertions, 19 deletions
diff --git a/arch/arm/mach-mx3/iomux.c b/arch/arm/mach-mx3/iomux.c index 40ffc5a664d9..c66ccbcdc11b 100644 --- a/arch/arm/mach-mx3/iomux.c +++ b/arch/arm/mach-mx3/iomux.c | |||
@@ -21,7 +21,6 @@ | |||
21 | #include <linux/module.h> | 21 | #include <linux/module.h> |
22 | #include <linux/spinlock.h> | 22 | #include <linux/spinlock.h> |
23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | #include <linux/gpio.h> | ||
25 | #include <linux/kernel.h> | 24 | #include <linux/kernel.h> |
26 | #include <mach/hardware.h> | 25 | #include <mach/hardware.h> |
27 | #include <mach/gpio.h> | 26 | #include <mach/gpio.h> |
@@ -94,15 +93,13 @@ void mxc_iomux_set_pad(enum iomux_pins pin, u32 config) | |||
94 | EXPORT_SYMBOL(mxc_iomux_set_pad); | 93 | EXPORT_SYMBOL(mxc_iomux_set_pad); |
95 | 94 | ||
96 | /* | 95 | /* |
97 | * setups a single pin: | 96 | * allocs a single pin: |
98 | * - reserves the pin so that it is not claimed by another driver | 97 | * - reserves the pin so that it is not claimed by another driver |
99 | * - setups the iomux according to the configuration | 98 | * - setups the iomux according to the configuration |
100 | * - if the pin is configured as a GPIO, we claim it through kernel gpiolib | ||
101 | */ | 99 | */ |
102 | int mxc_iomux_setup_pin(const unsigned int pin, const char *label) | 100 | int mxc_iomux_alloc_pin(const unsigned int pin, const char *label) |
103 | { | 101 | { |
104 | unsigned pad = pin & IOMUX_PADNUM_MASK; | 102 | unsigned pad = pin & IOMUX_PADNUM_MASK; |
105 | unsigned gpio; | ||
106 | 103 | ||
107 | if (pad >= (PIN_MAX + 1)) { | 104 | if (pad >= (PIN_MAX + 1)) { |
108 | printk(KERN_ERR "mxc_iomux: Attempt to request nonexistant pin %u for \"%s\"\n", | 105 | printk(KERN_ERR "mxc_iomux: Attempt to request nonexistant pin %u for \"%s\"\n", |
@@ -113,19 +110,13 @@ int mxc_iomux_setup_pin(const unsigned int pin, const char *label) | |||
113 | if (test_and_set_bit(pad, mxc_pin_alloc_map)) { | 110 | if (test_and_set_bit(pad, mxc_pin_alloc_map)) { |
114 | printk(KERN_ERR "mxc_iomux: pin %u already used. Allocation for \"%s\" failed\n", | 111 | printk(KERN_ERR "mxc_iomux: pin %u already used. Allocation for \"%s\" failed\n", |
115 | pad, label ? label : "?"); | 112 | pad, label ? label : "?"); |
116 | return -EINVAL; | 113 | return -EBUSY; |
117 | } | 114 | } |
118 | mxc_iomux_mode(pin); | 115 | mxc_iomux_mode(pin); |
119 | 116 | ||
120 | /* if we have a gpio, we can allocate it */ | ||
121 | gpio = (pin & IOMUX_GPIONUM_MASK) >> IOMUX_GPIONUM_SHIFT; | ||
122 | if (gpio < (GPIO_PORT_MAX + 1) * 32) | ||
123 | if (gpio_request(gpio, label)) | ||
124 | return -EINVAL; | ||
125 | |||
126 | return 0; | 117 | return 0; |
127 | } | 118 | } |
128 | EXPORT_SYMBOL(mxc_iomux_setup_pin); | 119 | EXPORT_SYMBOL(mxc_iomux_alloc_pin); |
129 | 120 | ||
130 | int mxc_iomux_setup_multiple_pins(unsigned int *pin_list, unsigned count, | 121 | int mxc_iomux_setup_multiple_pins(unsigned int *pin_list, unsigned count, |
131 | const char *label) | 122 | const char *label) |
@@ -135,7 +126,8 @@ int mxc_iomux_setup_multiple_pins(unsigned int *pin_list, unsigned count, | |||
135 | int ret = -EINVAL; | 126 | int ret = -EINVAL; |
136 | 127 | ||
137 | for (i = 0; i < count; i++) { | 128 | for (i = 0; i < count; i++) { |
138 | if (mxc_iomux_setup_pin(*p, label)) | 129 | ret = mxc_iomux_alloc_pin(*p, label); |
130 | if (ret) | ||
139 | goto setup_error; | 131 | goto setup_error; |
140 | p++; | 132 | p++; |
141 | } | 133 | } |
@@ -150,14 +142,9 @@ EXPORT_SYMBOL(mxc_iomux_setup_multiple_pins); | |||
150 | void mxc_iomux_release_pin(const unsigned int pin) | 142 | void mxc_iomux_release_pin(const unsigned int pin) |
151 | { | 143 | { |
152 | unsigned pad = pin & IOMUX_PADNUM_MASK; | 144 | unsigned pad = pin & IOMUX_PADNUM_MASK; |
153 | unsigned gpio; | ||
154 | 145 | ||
155 | if (pad < (PIN_MAX + 1)) | 146 | if (pad < (PIN_MAX + 1)) |
156 | clear_bit(pad, mxc_pin_alloc_map); | 147 | clear_bit(pad, mxc_pin_alloc_map); |
157 | |||
158 | gpio = (pin & IOMUX_GPIONUM_MASK) >> IOMUX_GPIONUM_SHIFT; | ||
159 | if (gpio < (GPIO_PORT_MAX + 1) * 32) | ||
160 | gpio_free(gpio); | ||
161 | } | 148 | } |
162 | EXPORT_SYMBOL(mxc_iomux_release_pin); | 149 | EXPORT_SYMBOL(mxc_iomux_release_pin); |
163 | 150 | ||