10
10
#include <linux/clk.h>
11
11
#include <linux/err.h>
12
12
#include <linux/io.h>
13
- #include <linux/spinlock .h>
13
+ #include <linux/mutex .h>
14
14
#include <linux/atmel-ssc.h>
15
15
#include <linux/slab.h>
16
16
#include <linux/module.h>
20
20
#include "../../sound/soc/atmel/atmel_ssc_dai.h"
21
21
22
22
/* Serialize access to ssc_list and user count */
23
- static DEFINE_SPINLOCK (user_lock );
23
+ static DEFINE_MUTEX (user_lock );
24
24
static LIST_HEAD (ssc_list );
25
25
26
26
struct ssc_device * ssc_request (unsigned int ssc_num )
27
27
{
28
28
int ssc_valid = 0 ;
29
29
struct ssc_device * ssc ;
30
30
31
- spin_lock (& user_lock );
31
+ mutex_lock (& user_lock );
32
32
list_for_each_entry (ssc , & ssc_list , list ) {
33
33
if (ssc -> pdev -> dev .of_node ) {
34
34
if (of_alias_get_id (ssc -> pdev -> dev .of_node , "ssc" )
@@ -44,18 +44,18 @@ struct ssc_device *ssc_request(unsigned int ssc_num)
44
44
}
45
45
46
46
if (!ssc_valid ) {
47
- spin_unlock (& user_lock );
47
+ mutex_unlock (& user_lock );
48
48
pr_err ("ssc: ssc%d platform device is missing\n" , ssc_num );
49
49
return ERR_PTR (- ENODEV );
50
50
}
51
51
52
52
if (ssc -> user ) {
53
- spin_unlock (& user_lock );
53
+ mutex_unlock (& user_lock );
54
54
dev_dbg (& ssc -> pdev -> dev , "module busy\n" );
55
55
return ERR_PTR (- EBUSY );
56
56
}
57
57
ssc -> user ++ ;
58
- spin_unlock (& user_lock );
58
+ mutex_unlock (& user_lock );
59
59
60
60
clk_prepare (ssc -> clk );
61
61
@@ -67,14 +67,14 @@ void ssc_free(struct ssc_device *ssc)
67
67
{
68
68
bool disable_clk = true;
69
69
70
- spin_lock (& user_lock );
70
+ mutex_lock (& user_lock );
71
71
if (ssc -> user )
72
72
ssc -> user -- ;
73
73
else {
74
74
disable_clk = false;
75
75
dev_dbg (& ssc -> pdev -> dev , "device already free\n" );
76
76
}
77
- spin_unlock (& user_lock );
77
+ mutex_unlock (& user_lock );
78
78
79
79
if (disable_clk )
80
80
clk_unprepare (ssc -> clk );
@@ -237,9 +237,9 @@ static int ssc_probe(struct platform_device *pdev)
237
237
return - ENXIO ;
238
238
}
239
239
240
- spin_lock (& user_lock );
240
+ mutex_lock (& user_lock );
241
241
list_add_tail (& ssc -> list , & ssc_list );
242
- spin_unlock (& user_lock );
242
+ mutex_unlock (& user_lock );
243
243
244
244
platform_set_drvdata (pdev , ssc );
245
245
@@ -258,9 +258,9 @@ static int ssc_remove(struct platform_device *pdev)
258
258
259
259
ssc_sound_dai_remove (ssc );
260
260
261
- spin_lock (& user_lock );
261
+ mutex_lock (& user_lock );
262
262
list_del (& ssc -> list );
263
- spin_unlock (& user_lock );
263
+ mutex_unlock (& user_lock );
264
264
265
265
return 0 ;
266
266
}
0 commit comments