1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
From 2508082b19a36af8ad56d401c910362b4d54ffca Mon Sep 17 00:00:00 2001
From: Matthias Reichl <hias@horus.com>
Date: Tue, 23 Feb 2016 17:28:23 +0100
Subject: [PATCH] ASoC: bcm: add missing .owner fields in sound card drivers
If snd_soc_card.owner is not set the kernel won't do usage refcounting
and one can remove the card driver module while it's in use (eg playback
active) - which leads to a kernel crash.
The missing owner field also prevents ALSA slot ordering
(options snd slots=module-name1,module-name-2,...) from working with
the I2S cards as it has no module name to match against.
Fix these issues by setting the .owner field in the snd_soc_card structs.
Signed-off-by: Matthias Reichl <hias@horus.com>
---
sound/soc/bcm/hifiberry_amp.c | 1 +
sound/soc/bcm/hifiberry_dac.c | 1 +
sound/soc/bcm/hifiberry_dacplus.c | 1 +
sound/soc/bcm/hifiberry_digi.c | 1 +
sound/soc/bcm/iqaudio-dac.c | 1 +
sound/soc/bcm/raspidac3.c | 1 +
sound/soc/bcm/rpi-dac.c | 1 +
sound/soc/bcm/rpi-proto.c | 1 +
8 files changed, 8 insertions(+)
--- a/sound/soc/bcm/hifiberry_amp.c
+++ b/sound/soc/bcm/hifiberry_amp.c
@@ -61,6 +61,7 @@ static struct snd_soc_dai_link snd_rpi_h
static struct snd_soc_card snd_rpi_hifiberry_amp = {
.name = "snd_rpi_hifiberry_amp",
+ .owner = THIS_MODULE,
.dai_link = snd_rpi_hifiberry_amp_dai,
.num_links = ARRAY_SIZE(snd_rpi_hifiberry_amp_dai),
};
--- a/sound/soc/bcm/hifiberry_dac.c
+++ b/sound/soc/bcm/hifiberry_dac.c
@@ -63,6 +63,7 @@ static struct snd_soc_dai_link snd_rpi_h
/* audio machine driver */
static struct snd_soc_card snd_rpi_hifiberry_dac = {
.name = "snd_rpi_hifiberry_dac",
+ .owner = THIS_MODULE,
.dai_link = snd_rpi_hifiberry_dac_dai,
.num_links = ARRAY_SIZE(snd_rpi_hifiberry_dac_dai),
};
--- a/sound/soc/bcm/hifiberry_dacplus.c
+++ b/sound/soc/bcm/hifiberry_dacplus.c
@@ -287,6 +287,7 @@ static struct snd_soc_dai_link snd_rpi_h
/* audio machine driver */
static struct snd_soc_card snd_rpi_hifiberry_dacplus = {
.name = "snd_rpi_hifiberry_dacplus",
+ .owner = THIS_MODULE,
.dai_link = snd_rpi_hifiberry_dacplus_dai,
.num_links = ARRAY_SIZE(snd_rpi_hifiberry_dacplus_dai),
};
--- a/sound/soc/bcm/hifiberry_digi.c
+++ b/sound/soc/bcm/hifiberry_digi.c
@@ -164,6 +164,7 @@ static struct snd_soc_dai_link snd_rpi_h
/* audio machine driver */
static struct snd_soc_card snd_rpi_hifiberry_digi = {
.name = "snd_rpi_hifiberry_digi",
+ .owner = THIS_MODULE,
.dai_link = snd_rpi_hifiberry_digi_dai,
.num_links = ARRAY_SIZE(snd_rpi_hifiberry_digi_dai),
};
--- a/sound/soc/bcm/iqaudio-dac.c
+++ b/sound/soc/bcm/iqaudio-dac.c
@@ -77,6 +77,7 @@ static struct snd_soc_dai_link snd_rpi_i
/* audio machine driver */
static struct snd_soc_card snd_rpi_iqaudio_dac = {
.name = "IQaudIODAC",
+ .owner = THIS_MODULE,
.dai_link = snd_rpi_iqaudio_dac_dai,
.num_links = ARRAY_SIZE(snd_rpi_iqaudio_dac_dai),
};
--- a/sound/soc/bcm/raspidac3.c
+++ b/sound/soc/bcm/raspidac3.c
@@ -128,6 +128,7 @@ static struct snd_soc_dai_link snd_rpi_r
/* audio machine driver */
static struct snd_soc_card snd_rpi_raspidac3 = {
.name = "RaspiDAC Rev.3x HiFi Audio Card",
+ .owner = THIS_MODULE,
.dai_link = snd_rpi_raspidac3_dai,
.num_links = ARRAY_SIZE(snd_rpi_raspidac3_dai),
};
--- a/sound/soc/bcm/rpi-dac.c
+++ b/sound/soc/bcm/rpi-dac.c
@@ -60,6 +60,7 @@ static struct snd_soc_dai_link snd_rpi_r
/* audio machine driver */
static struct snd_soc_card snd_rpi_rpi_dac = {
.name = "snd_rpi_rpi_dac",
+ .owner = THIS_MODULE,
.dai_link = snd_rpi_rpi_dac_dai,
.num_links = ARRAY_SIZE(snd_rpi_rpi_dac_dai),
};
--- a/sound/soc/bcm/rpi-proto.c
+++ b/sound/soc/bcm/rpi-proto.c
@@ -91,6 +91,7 @@ static struct snd_soc_dai_link snd_rpi_p
/* audio machine driver */
static struct snd_soc_card snd_rpi_proto = {
.name = "snd_rpi_proto",
+ .owner = THIS_MODULE,
.dai_link = snd_rpi_proto_dai,
.num_links = ARRAY_SIZE(snd_rpi_proto_dai),
};
|