diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2012-01-21 04:33:38 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2012-02-18 18:15:32 -0500 |
commit | cae154767a96563d33924872aacfdc63d584f707 (patch) | |
tree | 5071f9b5c462bb48b8f6539aeb62664a3e7ab20a | |
parent | ddb1e04a35846b6c5b6039e92555dafaf6ee03d2 (diff) |
MFD: ucb1x00-core: use mutexes instead of semaphores
Convert the ucb1x00 driver to use mutexes rather than the depreciated
semaphores for exclusive access to the ADC.
Acked-by: Jochen Friedrich <jochen@scram.de>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r-- | drivers/mfd/ucb1x00-core.c | 15 | ||||
-rw-r--r-- | include/linux/mfd/ucb1x00.h | 4 |
2 files changed, 9 insertions, 10 deletions
diff --git a/drivers/mfd/ucb1x00-core.c b/drivers/mfd/ucb1x00-core.c index c2757c11ce7b..7386f822d4cd 100644 --- a/drivers/mfd/ucb1x00-core.c +++ b/drivers/mfd/ucb1x00-core.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <linux/mutex.h> | 27 | #include <linux/mutex.h> |
28 | #include <linux/mfd/ucb1x00.h> | 28 | #include <linux/mfd/ucb1x00.h> |
29 | #include <linux/gpio.h> | 29 | #include <linux/gpio.h> |
30 | #include <linux/semaphore.h> | ||
31 | 30 | ||
32 | static DEFINE_MUTEX(ucb1x00_mutex); | 31 | static DEFINE_MUTEX(ucb1x00_mutex); |
33 | static LIST_HEAD(ucb1x00_drivers); | 32 | static LIST_HEAD(ucb1x00_drivers); |
@@ -99,7 +98,7 @@ void ucb1x00_io_write(struct ucb1x00 *ucb, unsigned int set, unsigned int clear) | |||
99 | * ucb1x00_enable must have been called to enable the comms | 98 | * ucb1x00_enable must have been called to enable the comms |
100 | * before using this function. | 99 | * before using this function. |
101 | * | 100 | * |
102 | * This function does not take any semaphores or spinlocks. | 101 | * This function does not take any mutexes or spinlocks. |
103 | */ | 102 | */ |
104 | unsigned int ucb1x00_io_read(struct ucb1x00 *ucb) | 103 | unsigned int ucb1x00_io_read(struct ucb1x00 *ucb) |
105 | { | 104 | { |
@@ -183,7 +182,7 @@ static int ucb1x00_gpio_direction_output(struct gpio_chip *chip, unsigned offset | |||
183 | * Any code wishing to use the ADC converter must call this | 182 | * Any code wishing to use the ADC converter must call this |
184 | * function prior to using it. | 183 | * function prior to using it. |
185 | * | 184 | * |
186 | * This function takes the ADC semaphore to prevent two or more | 185 | * This function takes the ADC mutex to prevent two or more |
187 | * concurrent uses, and therefore may sleep. As a result, it | 186 | * concurrent uses, and therefore may sleep. As a result, it |
188 | * can only be called from process context, not interrupt | 187 | * can only be called from process context, not interrupt |
189 | * context. | 188 | * context. |
@@ -193,7 +192,7 @@ static int ucb1x00_gpio_direction_output(struct gpio_chip *chip, unsigned offset | |||
193 | */ | 192 | */ |
194 | void ucb1x00_adc_enable(struct ucb1x00 *ucb) | 193 | void ucb1x00_adc_enable(struct ucb1x00 *ucb) |
195 | { | 194 | { |
196 | down(&ucb->adc_sem); | 195 | mutex_lock(&ucb->adc_mutex); |
197 | 196 | ||
198 | ucb->adc_cr |= UCB_ADC_ENA; | 197 | ucb->adc_cr |= UCB_ADC_ENA; |
199 | 198 | ||
@@ -215,7 +214,7 @@ void ucb1x00_adc_enable(struct ucb1x00 *ucb) | |||
215 | * complete (2 frames max without sync). | 214 | * complete (2 frames max without sync). |
216 | * | 215 | * |
217 | * If called for a synchronised ADC conversion, it may sleep | 216 | * If called for a synchronised ADC conversion, it may sleep |
218 | * with the ADC semaphore held. | 217 | * with the ADC mutex held. |
219 | */ | 218 | */ |
220 | unsigned int ucb1x00_adc_read(struct ucb1x00 *ucb, int adc_channel, int sync) | 219 | unsigned int ucb1x00_adc_read(struct ucb1x00 *ucb, int adc_channel, int sync) |
221 | { | 220 | { |
@@ -243,7 +242,7 @@ unsigned int ucb1x00_adc_read(struct ucb1x00 *ucb, int adc_channel, int sync) | |||
243 | * ucb1x00_adc_disable - disable the ADC converter | 242 | * ucb1x00_adc_disable - disable the ADC converter |
244 | * @ucb: UCB1x00 structure describing chip | 243 | * @ucb: UCB1x00 structure describing chip |
245 | * | 244 | * |
246 | * Disable the ADC converter and release the ADC semaphore. | 245 | * Disable the ADC converter and release the ADC mutex. |
247 | */ | 246 | */ |
248 | void ucb1x00_adc_disable(struct ucb1x00 *ucb) | 247 | void ucb1x00_adc_disable(struct ucb1x00 *ucb) |
249 | { | 248 | { |
@@ -251,7 +250,7 @@ void ucb1x00_adc_disable(struct ucb1x00 *ucb) | |||
251 | ucb1x00_reg_write(ucb, UCB_ADC_CR, ucb->adc_cr); | 250 | ucb1x00_reg_write(ucb, UCB_ADC_CR, ucb->adc_cr); |
252 | ucb1x00_disable(ucb); | 251 | ucb1x00_disable(ucb); |
253 | 252 | ||
254 | up(&ucb->adc_sem); | 253 | mutex_unlock(&ucb->adc_mutex); |
255 | } | 254 | } |
256 | 255 | ||
257 | /* | 256 | /* |
@@ -560,7 +559,7 @@ static int ucb1x00_probe(struct mcp *mcp) | |||
560 | 559 | ||
561 | spin_lock_init(&ucb->lock); | 560 | spin_lock_init(&ucb->lock); |
562 | spin_lock_init(&ucb->io_lock); | 561 | spin_lock_init(&ucb->io_lock); |
563 | sema_init(&ucb->adc_sem, 1); | 562 | mutex_init(&ucb->adc_mutex); |
564 | 563 | ||
565 | ucb->id = id; | 564 | ucb->id = id; |
566 | ucb->mcp = mcp; | 565 | ucb->mcp = mcp; |
diff --git a/include/linux/mfd/ucb1x00.h b/include/linux/mfd/ucb1x00.h index fd088cc6a4ca..a4b954381c2f 100644 --- a/include/linux/mfd/ucb1x00.h +++ b/include/linux/mfd/ucb1x00.h | |||
@@ -12,7 +12,7 @@ | |||
12 | 12 | ||
13 | #include <linux/mfd/mcp.h> | 13 | #include <linux/mfd/mcp.h> |
14 | #include <linux/gpio.h> | 14 | #include <linux/gpio.h> |
15 | #include <linux/semaphore.h> | 15 | #include <linux/mutex.h> |
16 | 16 | ||
17 | #define UCB_IO_DATA 0x00 | 17 | #define UCB_IO_DATA 0x00 |
18 | #define UCB_IO_DIR 0x01 | 18 | #define UCB_IO_DIR 0x01 |
@@ -124,7 +124,7 @@ struct ucb1x00 { | |||
124 | spinlock_t lock; | 124 | spinlock_t lock; |
125 | struct mcp *mcp; | 125 | struct mcp *mcp; |
126 | unsigned int irq; | 126 | unsigned int irq; |
127 | struct semaphore adc_sem; | 127 | struct mutex adc_mutex; |
128 | spinlock_t io_lock; | 128 | spinlock_t io_lock; |
129 | u16 id; | 129 | u16 id; |
130 | u16 io_dir; | 130 | u16 io_dir; |