Commit 867b3e77 authored by Jean-Paul Saman's avatar Jean-Paul Saman

davinci-audio: use mutex iso semaphore

parent 443bdfed
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <linux/sound.h> #include <linux/sound.h>
#include <linux/soundcard.h> #include <linux/soundcard.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <sound/davincisound.h> #include <sound/davincisound.h>
#include <asm/gpio.h> #include <asm/gpio.h>
...@@ -256,7 +257,6 @@ static audio_state_t aic32_state = { ...@@ -256,7 +257,6 @@ static audio_state_t aic32_state = {
.hw_remove = __exit_p(davinci_aic32_remove), .hw_remove = __exit_p(davinci_aic32_remove),
.hw_suspend = davinci_aic32_suspend, .hw_suspend = davinci_aic32_suspend,
.hw_resume = davinci_aic32_resume, .hw_resume = davinci_aic32_resume,
.sem = __SEMAPHORE_INIT(aic32_state.sem, 1),
}; };
/* This will be defined in the audio.h */ /* This will be defined in the audio.h */
...@@ -1308,7 +1308,7 @@ static int davinci_aic32_probe(void) ...@@ -1308,7 +1308,7 @@ static int davinci_aic32_probe(void)
aic32_local.volume = DEFAULT_OUTPUT_VOLUME; aic32_local.volume = DEFAULT_OUTPUT_VOLUME;
aic32_local.line = DEFAULT_INPUT_VOLUME; aic32_local.line = DEFAULT_INPUT_VOLUME;
/* either of SOUND_MASK_LINE/SOUND_MASK_MIC */ /* either of SOUND_MASK_LINE/SOUND_MASK_MIC */
aic32_local.recsrc = SOUND_MASK_LINE; aic32_local.recsrc = SOUND_MASK_LINE;
aic32_local.igain = DEFAULT_INPUT_IGAIN; aic32_local.igain = DEFAULT_INPUT_IGAIN;
aic32_local.ogain = DEFAULT_INPUT_OGAIN; aic32_local.ogain = DEFAULT_INPUT_OGAIN;
aic32_local.nochan = STEREO; aic32_local.nochan = STEREO;
......
...@@ -238,7 +238,6 @@ static audio_state_t aic33_state = { ...@@ -238,7 +238,6 @@ static audio_state_t aic33_state = {
.hw_remove = __exit_p(davinci_aic33_remove), .hw_remove = __exit_p(davinci_aic33_remove),
.hw_suspend = davinci_aic33_suspend, .hw_suspend = davinci_aic33_suspend,
.hw_resume = davinci_aic33_resume, .hw_resume = davinci_aic33_resume,
.sem = __SEMAPHORE_INIT(aic33_state.sem, 1),
}; };
/* This will be defined in the audio.h */ /* This will be defined in the audio.h */
......
...@@ -47,11 +47,11 @@ ...@@ -47,11 +47,11 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/mutex.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/semaphore.h>
#include "davinci-audio-dma-intfc.h" #include "davinci-audio-dma-intfc.h"
#include "davinci-audio.h" #include "davinci-audio.h"
...@@ -438,7 +438,7 @@ int audio_register_codec(audio_state_t * codec_state) ...@@ -438,7 +438,7 @@ int audio_register_codec(audio_state_t * codec_state)
} }
memcpy(&audio_state, codec_state, sizeof(audio_state_t)); memcpy(&audio_state, codec_state, sizeof(audio_state_t));
sema_init(&audio_state.sem, 1); mutex_init(&audio_state.mutex);
ret = platform_device_register(&davinci_audio_device); ret = platform_device_register(&davinci_audio_device);
if (ret != 0) { if (ret != 0) {
...@@ -487,6 +487,7 @@ int audio_unregister_codec(audio_state_t * codec_state) ...@@ -487,6 +487,7 @@ int audio_unregister_codec(audio_state_t * codec_state)
platform_driver_unregister(&davinci_audio_driver); platform_driver_unregister(&davinci_audio_driver);
platform_device_unregister(&davinci_audio_device); platform_device_unregister(&davinci_audio_device);
mutex_destroy(&audio_state.mutex);
memset(&audio_state, 0, sizeof(audio_state_t)); memset(&audio_state, 0, sizeof(audio_state_t));
FN_OUT(0); FN_OUT(0);
...@@ -1051,11 +1052,11 @@ static int audio_open(struct inode *inode, struct file *file) ...@@ -1051,11 +1052,11 @@ static int audio_open(struct inode *inode, struct file *file)
} }
if (file->f_flags & O_NONBLOCK) { if (file->f_flags & O_NONBLOCK) {
if(down_trylock(&state->sem)) if (mutex_trylock(&state->mutex) == 0)
return -EAGAIN; return -EAGAIN;
} }
else else
down(&state->sem); mutex_lock(&state->mutex);
/* access control */ /* access control */
err = -ENODEV; err = -ENODEV;
...@@ -1126,7 +1127,7 @@ static int audio_open(struct inode *inode, struct file *file) ...@@ -1126,7 +1127,7 @@ static int audio_open(struct inode *inode, struct file *file)
err = 0; err = 0;
out: out:
up(&state->sem); mutex_unlock(&state->mutex);
if (err) { if (err) {
module_put(state->owner); module_put(state->owner);
module_put(THIS_MODULE); module_put(THIS_MODULE);
...@@ -1148,7 +1149,7 @@ static int audio_release(struct inode *inode, struct file *file) ...@@ -1148,7 +1149,7 @@ static int audio_release(struct inode *inode, struct file *file)
FN_IN; FN_IN;
down(&state->sem); mutex_lock(&state->mutex);
if (file->f_mode & FMODE_READ) { if (file->f_mode & FMODE_READ) {
audio_discard_buf(is); audio_discard_buf(is);
...@@ -1174,7 +1175,7 @@ static int audio_release(struct inode *inode, struct file *file) ...@@ -1174,7 +1175,7 @@ static int audio_release(struct inode *inode, struct file *file)
state->wr_ref = 0; state->wr_ref = 0;
} }
up(&state->sem); mutex_unlock(&state->mutex);
module_put(state->owner); module_put(state->owner);
module_put(THIS_MODULE); module_put(THIS_MODULE);
......
...@@ -92,7 +92,7 @@ typedef struct { ...@@ -92,7 +92,7 @@ typedef struct {
int (*hw_suspend) (void); int (*hw_suspend) (void);
int (*hw_resume) (void); int (*hw_resume) (void);
struct pm_dev *pm_dev; struct pm_dev *pm_dev;
struct semaphore sem; /* to protect against races in attach() */ struct mutex mutex; /* to protect against races in attach() */
} audio_state_t; } audio_state_t;
#ifdef AUDIO_PM #ifdef AUDIO_PM
......
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