| .. | .. |
|---|
| 17 | 17 | |
|---|
| 18 | 18 | USB_GADGET_COMPOSITE_OPTIONS(); |
|---|
| 19 | 19 | |
|---|
| 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" |
|---|
| 22 | 22 | |
|---|
| 23 | 23 | /* 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); |
|---|
| 26 | 26 | MODULE_PARM_DESC(p_chmask, "Playback Channel Mask"); |
|---|
| 27 | 27 | |
|---|
| 28 | 28 | /* 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)"); |
|---|
| 32 | 33 | |
|---|
| 33 | 34 | /* 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); |
|---|
| 36 | 37 | MODULE_PARM_DESC(p_ssize, "Playback Sample Size(bytes)"); |
|---|
| 37 | 38 | |
|---|
| 38 | 39 | /* 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); |
|---|
| 41 | 42 | MODULE_PARM_DESC(c_chmask, "Capture Channel Mask"); |
|---|
| 42 | 43 | |
|---|
| 43 | 44 | /* 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)"); |
|---|
| 47 | 49 | |
|---|
| 48 | 50 | /* 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); |
|---|
| 51 | 88 | MODULE_PARM_DESC(c_ssize, "Capture Sample Size(bytes)"); |
|---|
| 52 | 89 | #else /* CONFIG_GADGET_UAC1_LEGACY */ |
|---|
| 53 | 90 | #include "u_uac1_legacy.h" |
|---|
| 54 | 91 | |
|---|
| 55 | 92 | static char *fn_play = FILE_PCM_PLAYBACK; |
|---|
| 56 | | -module_param(fn_play, charp, S_IRUGO); |
|---|
| 93 | +module_param(fn_play, charp, 0444); |
|---|
| 57 | 94 | MODULE_PARM_DESC(fn_play, "Playback PCM device file name"); |
|---|
| 58 | 95 | |
|---|
| 59 | 96 | static char *fn_cap = FILE_PCM_CAPTURE; |
|---|
| 60 | | -module_param(fn_cap, charp, S_IRUGO); |
|---|
| 97 | +module_param(fn_cap, charp, 0444); |
|---|
| 61 | 98 | MODULE_PARM_DESC(fn_cap, "Capture PCM device file name"); |
|---|
| 62 | 99 | |
|---|
| 63 | 100 | static char *fn_cntl = FILE_CONTROL; |
|---|
| 64 | | -module_param(fn_cntl, charp, S_IRUGO); |
|---|
| 101 | +module_param(fn_cntl, charp, 0444); |
|---|
| 65 | 102 | MODULE_PARM_DESC(fn_cntl, "Control device file name"); |
|---|
| 66 | 103 | |
|---|
| 67 | 104 | 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); |
|---|
| 69 | 106 | MODULE_PARM_DESC(req_buf_size, "ISO OUT endpoint request buffer size"); |
|---|
| 70 | 107 | |
|---|
| 71 | 108 | static int req_count = UAC1_REQ_COUNT; |
|---|
| 72 | | -module_param(req_count, int, S_IRUGO); |
|---|
| 109 | +module_param(req_count, int, 0444); |
|---|
| 73 | 110 | MODULE_PARM_DESC(req_count, "ISO OUT endpoint request count"); |
|---|
| 74 | 111 | |
|---|
| 75 | 112 | 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); |
|---|
| 77 | 114 | MODULE_PARM_DESC(audio_buf_size, "Audio buffer size"); |
|---|
| 78 | 115 | #endif /* CONFIG_GADGET_UAC1_LEGACY */ |
|---|
| 116 | +#endif |
|---|
| 79 | 117 | |
|---|
| 80 | 118 | /* string IDs are assigned dynamically */ |
|---|
| 81 | 119 | |
|---|
| .. | .. |
|---|
| 201 | 239 | |
|---|
| 202 | 240 | static int audio_bind(struct usb_composite_dev *cdev) |
|---|
| 203 | 241 | { |
|---|
| 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; |
|---|
| 206 | 249 | #else |
|---|
| 207 | 250 | struct f_uac1_legacy_opts *uac1_opts; |
|---|
| 251 | +#endif |
|---|
| 208 | 252 | #endif |
|---|
| 209 | 253 | int status; |
|---|
| 210 | 254 | |
|---|
| .. | .. |
|---|
| 212 | 256 | fi_uac2 = usb_get_function_instance("uac2"); |
|---|
| 213 | 257 | if (IS_ERR(fi_uac2)) |
|---|
| 214 | 258 | return PTR_ERR(fi_uac2); |
|---|
| 215 | | - uac_opts = container_of(fi_uac2, struct f_uac_opts, func_inst); |
|---|
| 216 | 259 | #else |
|---|
| 217 | 260 | #ifndef CONFIG_GADGET_UAC1_LEGACY |
|---|
| 218 | 261 | fi_uac1 = usb_get_function_instance("uac1"); |
|---|
| 219 | | - uac_opts = container_of(fi_uac1, struct f_uac_opts, func_inst); |
|---|
| 220 | 262 | #else |
|---|
| 221 | 263 | fi_uac1 = usb_get_function_instance("uac1_legacy"); |
|---|
| 222 | 264 | #endif |
|---|
| .. | .. |
|---|
| 224 | 266 | return PTR_ERR(fi_uac1); |
|---|
| 225 | 267 | #endif |
|---|
| 226 | 268 | |
|---|
| 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; |
|---|
| 238 | 300 | #else /* CONFIG_GADGET_UAC1_LEGACY */ |
|---|
| 239 | 301 | uac1_opts = container_of(fi_uac1, struct f_uac1_legacy_opts, func_inst); |
|---|
| 240 | 302 | uac1_opts->fn_play = fn_play; |
|---|
| .. | .. |
|---|
| 244 | 306 | uac1_opts->req_count = req_count; |
|---|
| 245 | 307 | uac1_opts->audio_buf_size = audio_buf_size; |
|---|
| 246 | 308 | #endif /* CONFIG_GADGET_UAC1_LEGACY */ |
|---|
| 309 | +#endif |
|---|
| 247 | 310 | |
|---|
| 248 | 311 | status = usb_string_ids_tab(cdev, strings_dev); |
|---|
| 249 | 312 | if (status < 0) |
|---|