hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/usb/gadget/legacy/audio.c
....@@ -17,65 +17,103 @@
1717
1818 USB_GADGET_COMPOSITE_OPTIONS();
1919
20
-#if !defined(CONFIG_GADGET_UAC1) || !defined(CONFIG_GADGET_UAC1_LEGACY)
21
-#include "u_uac.h"
20
+#ifndef CONFIG_GADGET_UAC1
21
+#include "u_uac2.h"
2222
2323 /* Playback(USB-IN) Default Stereo - Fl/Fr */
24
-static int p_chmask = UAC_DEF_PCHMASK;
25
-module_param(p_chmask, uint, S_IRUGO);
24
+static int p_chmask = UAC2_DEF_PCHMASK;
25
+module_param(p_chmask, uint, 0444);
2626 MODULE_PARM_DESC(p_chmask, "Playback Channel Mask");
2727
2828 /* Playback Default 48 KHz */
29
-static int p_srate = UAC_DEF_PSRATE;
30
-module_param(p_srate, uint, S_IRUGO);
31
-MODULE_PARM_DESC(p_srate, "Playback Sampling Rate");
29
+static int p_srates[UAC_MAX_RATES] = {UAC2_DEF_PSRATE};
30
+static int p_srates_cnt = 1;
31
+module_param_array_named(p_srate, p_srates, uint, &p_srates_cnt, 0444);
32
+MODULE_PARM_DESC(p_srate, "Playback Sampling Rates (array)");
3233
3334 /* Playback Default 16bits/sample */
34
-static int p_ssize = UAC_DEF_PSSIZE;
35
-module_param(p_ssize, uint, S_IRUGO);
35
+static int p_ssize = UAC2_DEF_PSSIZE;
36
+module_param(p_ssize, uint, 0444);
3637 MODULE_PARM_DESC(p_ssize, "Playback Sample Size(bytes)");
3738
3839 /* Capture(USB-OUT) Default Stereo - Fl/Fr */
39
-static int c_chmask = UAC_DEF_CCHMASK;
40
-module_param(c_chmask, uint, S_IRUGO);
40
+static int c_chmask = UAC2_DEF_CCHMASK;
41
+module_param(c_chmask, uint, 0444);
4142 MODULE_PARM_DESC(c_chmask, "Capture Channel Mask");
4243
4344 /* Capture Default 64 KHz */
44
-static int c_srate = UAC_DEF_CSRATE;
45
-module_param(c_srate, uint, S_IRUGO);
46
-MODULE_PARM_DESC(c_srate, "Capture Sampling Rate");
45
+static int c_srates[UAC_MAX_RATES] = {UAC2_DEF_CSRATE};
46
+static int c_srates_cnt = 1;
47
+module_param_array_named(c_srate, c_srates, uint, &c_srates_cnt, 0444);
48
+MODULE_PARM_DESC(c_srate, "Capture Sampling Rates (array)");
4749
4850 /* Capture Default 16bits/sample */
49
-static int c_ssize = UAC_DEF_CSSIZE;
50
-module_param(c_ssize, uint, S_IRUGO);
51
+static int c_ssize = UAC2_DEF_CSSIZE;
52
+module_param(c_ssize, uint, 0444);
53
+MODULE_PARM_DESC(c_ssize, "Capture Sample Size(bytes)");
54
+#else
55
+#ifndef CONFIG_GADGET_UAC1_LEGACY
56
+#include "u_uac1.h"
57
+
58
+/* Playback(USB-IN) Default Stereo - Fl/Fr */
59
+static int p_chmask = UAC1_DEF_PCHMASK;
60
+module_param(p_chmask, uint, 0444);
61
+MODULE_PARM_DESC(p_chmask, "Playback Channel Mask");
62
+
63
+/* Playback Default 48 KHz */
64
+static int p_srates[UAC_MAX_RATES] = {UAC1_DEF_PSRATE};
65
+static int p_srates_cnt = 1;
66
+module_param_array_named(p_srate, p_srates, uint, &p_srates_cnt, 0444);
67
+MODULE_PARM_DESC(p_srate, "Playback Sampling Rates (array)");
68
+
69
+/* Playback Default 16bits/sample */
70
+static int p_ssize = UAC1_DEF_PSSIZE;
71
+module_param(p_ssize, uint, 0444);
72
+MODULE_PARM_DESC(p_ssize, "Playback Sample Size(bytes)");
73
+
74
+/* Capture(USB-OUT) Default Stereo - Fl/Fr */
75
+static int c_chmask = UAC1_DEF_CCHMASK;
76
+module_param(c_chmask, uint, 0444);
77
+MODULE_PARM_DESC(c_chmask, "Capture Channel Mask");
78
+
79
+/* Capture Default 48 KHz */
80
+static int c_srates[UAC_MAX_RATES] = {UAC1_DEF_CSRATE};
81
+static int c_srates_cnt = 1;
82
+module_param_array_named(c_srate, c_srates, uint, &c_srates_cnt, 0444);
83
+MODULE_PARM_DESC(c_srate, "Capture Sampling Rates (array)");
84
+
85
+/* Capture Default 16bits/sample */
86
+static int c_ssize = UAC1_DEF_CSSIZE;
87
+module_param(c_ssize, uint, 0444);
5188 MODULE_PARM_DESC(c_ssize, "Capture Sample Size(bytes)");
5289 #else /* CONFIG_GADGET_UAC1_LEGACY */
5390 #include "u_uac1_legacy.h"
5491
5592 static char *fn_play = FILE_PCM_PLAYBACK;
56
-module_param(fn_play, charp, S_IRUGO);
93
+module_param(fn_play, charp, 0444);
5794 MODULE_PARM_DESC(fn_play, "Playback PCM device file name");
5895
5996 static char *fn_cap = FILE_PCM_CAPTURE;
60
-module_param(fn_cap, charp, S_IRUGO);
97
+module_param(fn_cap, charp, 0444);
6198 MODULE_PARM_DESC(fn_cap, "Capture PCM device file name");
6299
63100 static char *fn_cntl = FILE_CONTROL;
64
-module_param(fn_cntl, charp, S_IRUGO);
101
+module_param(fn_cntl, charp, 0444);
65102 MODULE_PARM_DESC(fn_cntl, "Control device file name");
66103
67104 static int req_buf_size = UAC1_OUT_EP_MAX_PACKET_SIZE;
68
-module_param(req_buf_size, int, S_IRUGO);
105
+module_param(req_buf_size, int, 0444);
69106 MODULE_PARM_DESC(req_buf_size, "ISO OUT endpoint request buffer size");
70107
71108 static int req_count = UAC1_REQ_COUNT;
72
-module_param(req_count, int, S_IRUGO);
109
+module_param(req_count, int, 0444);
73110 MODULE_PARM_DESC(req_count, "ISO OUT endpoint request count");
74111
75112 static int audio_buf_size = UAC1_AUDIO_BUF_SIZE;
76
-module_param(audio_buf_size, int, S_IRUGO);
113
+module_param(audio_buf_size, int, 0444);
77114 MODULE_PARM_DESC(audio_buf_size, "Audio buffer size");
78115 #endif /* CONFIG_GADGET_UAC1_LEGACY */
116
+#endif
79117
80118 /* string IDs are assigned dynamically */
81119
....@@ -201,10 +239,16 @@
201239
202240 static int audio_bind(struct usb_composite_dev *cdev)
203241 {
204
-#if !defined(CONFIG_GADGET_UAC1) || !defined(CONFIG_GADGET_UAC1_LEGACY)
205
- struct f_uac_opts *uac_opts;
242
+#ifndef CONFIG_GADGET_UAC1
243
+ struct f_uac2_opts *uac2_opts;
244
+ int i;
245
+#else
246
+#ifndef CONFIG_GADGET_UAC1_LEGACY
247
+ struct f_uac1_opts *uac1_opts;
248
+ int i;
206249 #else
207250 struct f_uac1_legacy_opts *uac1_opts;
251
+#endif
208252 #endif
209253 int status;
210254
....@@ -212,11 +256,9 @@
212256 fi_uac2 = usb_get_function_instance("uac2");
213257 if (IS_ERR(fi_uac2))
214258 return PTR_ERR(fi_uac2);
215
- uac_opts = container_of(fi_uac2, struct f_uac_opts, func_inst);
216259 #else
217260 #ifndef CONFIG_GADGET_UAC1_LEGACY
218261 fi_uac1 = usb_get_function_instance("uac1");
219
- uac_opts = container_of(fi_uac1, struct f_uac_opts, func_inst);
220262 #else
221263 fi_uac1 = usb_get_function_instance("uac1_legacy");
222264 #endif
....@@ -224,17 +266,37 @@
224266 return PTR_ERR(fi_uac1);
225267 #endif
226268
227
-#if !defined(CONFIG_GADGET_UAC1) || !defined(CONFIG_GADGET_UAC1_LEGACY)
228
- memset(uac_opts, 0x0, sizeof(*uac_opts));
229
- uac_opts->p_chmask = p_chmask;
230
- uac_opts->p_srate[0] = p_srate;
231
- uac_opts->p_srate_active = p_srate;
232
- uac_opts->p_ssize = p_ssize;
233
- uac_opts->c_chmask = c_chmask;
234
- uac_opts->c_srate[0] = c_srate;
235
- uac_opts->c_srate_active = c_srate;
236
- uac_opts->c_ssize = c_ssize;
237
- uac_opts->req_number = UAC_DEF_REQ_NUM;
269
+#ifndef CONFIG_GADGET_UAC1
270
+ uac2_opts = container_of(fi_uac2, struct f_uac2_opts, func_inst);
271
+ uac2_opts->p_chmask = p_chmask;
272
+
273
+ for (i = 0; i < p_srates_cnt; ++i)
274
+ uac2_opts->p_srates[i] = p_srates[i];
275
+
276
+ uac2_opts->p_ssize = p_ssize;
277
+ uac2_opts->c_chmask = c_chmask;
278
+
279
+ for (i = 0; i < c_srates_cnt; ++i)
280
+ uac2_opts->c_srates[i] = c_srates[i];
281
+
282
+ uac2_opts->c_ssize = c_ssize;
283
+ uac2_opts->req_number = UAC2_DEF_REQ_NUM;
284
+#else
285
+#ifndef CONFIG_GADGET_UAC1_LEGACY
286
+ uac1_opts = container_of(fi_uac1, struct f_uac1_opts, func_inst);
287
+ uac1_opts->p_chmask = p_chmask;
288
+
289
+ for (i = 0; i < p_srates_cnt; ++i)
290
+ uac1_opts->p_srates[i] = p_srates[i];
291
+
292
+ uac1_opts->p_ssize = p_ssize;
293
+ uac1_opts->c_chmask = c_chmask;
294
+
295
+ for (i = 0; i < c_srates_cnt; ++i)
296
+ uac1_opts->c_srates[i] = c_srates[i];
297
+
298
+ uac1_opts->c_ssize = c_ssize;
299
+ uac1_opts->req_number = UAC1_DEF_REQ_NUM;
238300 #else /* CONFIG_GADGET_UAC1_LEGACY */
239301 uac1_opts = container_of(fi_uac1, struct f_uac1_legacy_opts, func_inst);
240302 uac1_opts->fn_play = fn_play;
....@@ -244,6 +306,7 @@
244306 uac1_opts->req_count = req_count;
245307 uac1_opts->audio_buf_size = audio_buf_size;
246308 #endif /* CONFIG_GADGET_UAC1_LEGACY */
309
+#endif
247310
248311 status = usb_string_ids_tab(cdev, strings_dev);
249312 if (status < 0)