1. linux-5.7/sound/usb/mixer_quirks.c:34:#include "mixer_scarlett.h"
  2. linux-5.7/sound/usb/mixer_quirks.c:35:#include "mixer_scarlett_gen2.h"
  3. linux-5.7/sound/usb/mixer_quirks.c:2259: case USB_ID(0x1235, 0x8012): /* Focusrite Scarlett 6i6 */
  4. linux-5.7/sound/usb/mixer_quirks.c:2260: case USB_ID(0x1235, 0x8002): /* Focusrite Scarlett 8i6 */
  5. linux-5.7/sound/usb/mixer_quirks.c:2261: case USB_ID(0x1235, 0x8004): /* Focusrite Scarlett 18i6 */
  6. linux-5.7/sound/usb/mixer_quirks.c:2262: case USB_ID(0x1235, 0x8014): /* Focusrite Scarlett 18i8 */
  7. linux-5.7/sound/usb/mixer_quirks.c:2263: case USB_ID(0x1235, 0x800c): /* Focusrite Scarlett 18i20 */
  8. linux-5.7/sound/usb/mixer_quirks.c:2264: err = snd_scarlett_controls_create(mixer);
  9. linux-5.7/sound/usb/mixer_quirks.c:2267: case USB_ID(0x1235, 0x8203): /* Focusrite Scarlett 6i6 2nd Gen */
  10. linux-5.7/sound/usb/mixer_quirks.c:2268: case USB_ID(0x1235, 0x8204): /* Focusrite Scarlett 18i8 2nd Gen */
  11. linux-5.7/sound/usb/mixer_quirks.c:2269: case USB_ID(0x1235, 0x8201): /* Focusrite Scarlett 18i20 2nd Gen */
  12. linux-5.7/sound/usb/mixer_quirks.c:2270: err = snd_scarlett_gen2_controls_create(mixer);
  13. linux-5.7/sound/usb/mixer_scarlett_gen2.h:2:#ifndef __USB_MIXER_SCARLETT_GEN2_H
  14. linux-5.7/sound/usb/mixer_scarlett_gen2.h:3:#define __USB_MIXER_SCARLETT_GEN2_H
  15. linux-5.7/sound/usb/mixer_scarlett_gen2.h:5:int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer);
  16. linux-5.7/sound/usb/mixer_scarlett_gen2.h:7:#endif /* __USB_MIXER_SCARLETT_GEN2_H */
  17. linux-5.7/sound/usb/mixer_scarlett.c:3: * Scarlett Driver for ALSA
  18. linux-5.7/sound/usb/mixer_scarlett.c:19: * Rewritten and extended to support more models, e.g. Scarlett 18i8.
  19. linux-5.7/sound/usb/mixer_scarlett.c:30:/* Mixer Interface for the Focusrite Scarlett 18i6 audio interface.
  20. linux-5.7/sound/usb/mixer_scarlett.c:33: * Scarlett MixControl (v 1.2.128.0) and the Focusrite(R) Scarlett 18i6
  21. linux-5.7/sound/usb/mixer_scarlett.c:133:#include "mixer_scarlett.h"
  22. linux-5.7/sound/usb/mixer_scarlett.c:136:#define SND_SCARLETT_LEVEL_BIAS 128
  23. linux-5.7/sound/usb/mixer_scarlett.c:137:#define SND_SCARLETT_MATRIX_IN_MAX 18
  24. linux-5.7/sound/usb/mixer_scarlett.c:138:#define SND_SCARLETT_CONTROLS_MAX 10
  25. linux-5.7/sound/usb/mixer_scarlett.c:139:#define SND_SCARLETT_OFFSETS_MAX 5
  26. linux-5.7/sound/usb/mixer_scarlett.c:142: SCARLETT_OUTPUTS,
  27. linux-5.7/sound/usb/mixer_scarlett.c:143: SCARLETT_SWITCH_IMPEDANCE,
  28. linux-5.7/sound/usb/mixer_scarlett.c:144: SCARLETT_SWITCH_PAD,
  29. linux-5.7/sound/usb/mixer_scarlett.c:145: SCARLETT_SWITCH_GAIN,
  30. linux-5.7/sound/usb/mixer_scarlett.c:149: SCARLETT_OFFSET_PCM = 0,
  31. linux-5.7/sound/usb/mixer_scarlett.c:150: SCARLETT_OFFSET_ANALOG = 1,
  32. linux-5.7/sound/usb/mixer_scarlett.c:151: SCARLETT_OFFSET_SPDIF = 2,
  33. linux-5.7/sound/usb/mixer_scarlett.c:152: SCARLETT_OFFSET_ADAT = 3,
  34. linux-5.7/sound/usb/mixer_scarlett.c:153: SCARLETT_OFFSET_MIX = 4,
  35. linux-5.7/sound/usb/mixer_scarlett.c:156:struct scarlett_mixer_elem_enum_info {
  36. linux-5.7/sound/usb/mixer_scarlett.c:159: int offsets[SND_SCARLETT_OFFSETS_MAX];
  37. linux-5.7/sound/usb/mixer_scarlett.c:163:struct scarlett_mixer_control {
  38. linux-5.7/sound/usb/mixer_scarlett.c:169:struct scarlett_device_info {
  39. linux-5.7/sound/usb/mixer_scarlett.c:175: struct scarlett_mixer_elem_enum_info opt_master;
  40. linux-5.7/sound/usb/mixer_scarlett.c:176: struct scarlett_mixer_elem_enum_info opt_matrix;
  41. linux-5.7/sound/usb/mixer_scarlett.c:179: int matrix_mux_init[SND_SCARLETT_MATRIX_IN_MAX];
  42. linux-5.7/sound/usb/mixer_scarlett.c:182: const struct scarlett_mixer_control controls[SND_SCARLETT_CONTROLS_MAX];
  43. linux-5.7/sound/usb/mixer_scarlett.c:187:static const struct scarlett_mixer_elem_enum_info opt_pad = {
  44. linux-5.7/sound/usb/mixer_scarlett.c:196:static const struct scarlett_mixer_elem_enum_info opt_gain = {
  45. linux-5.7/sound/usb/mixer_scarlett.c:205:static const struct scarlett_mixer_elem_enum_info opt_impedance = {
  46. linux-5.7/sound/usb/mixer_scarlett.c:214:static const struct scarlett_mixer_elem_enum_info opt_clock = {
  47. linux-5.7/sound/usb/mixer_scarlett.c:223:static const struct scarlett_mixer_elem_enum_info opt_sync = {
  48. linux-5.7/sound/usb/mixer_scarlett.c:232:static int scarlett_ctl_switch_info(struct snd_kcontrol *kctl,
  49. linux-5.7/sound/usb/mixer_scarlett.c:244:static int scarlett_ctl_switch_get(struct snd_kcontrol *kctl,
  50. linux-5.7/sound/usb/mixer_scarlett.c:262:static int scarlett_ctl_switch_put(struct snd_kcontrol *kctl,
  51. linux-5.7/sound/usb/mixer_scarlett.c:288:static int scarlett_ctl_resume(struct usb_mixer_elem_list *list)
  52. linux-5.7/sound/usb/mixer_scarlett.c:300:static int scarlett_ctl_info(struct snd_kcontrol *kctl,
  53. linux-5.7/sound/usb/mixer_scarlett.c:309: SND_SCARLETT_LEVEL_BIAS;
  54. linux-5.7/sound/usb/mixer_scarlett.c:314:static int scarlett_ctl_get(struct snd_kcontrol *kctl,
  55. linux-5.7/sound/usb/mixer_scarlett.c:326: SND_SCARLETT_LEVEL_BIAS;
  56. linux-5.7/sound/usb/mixer_scarlett.c:333:static int scarlett_ctl_put(struct snd_kcontrol *kctl,
  57. linux-5.7/sound/usb/mixer_scarlett.c:346: SND_SCARLETT_LEVEL_BIAS;
  58. linux-5.7/sound/usb/mixer_scarlett.c:360:static void scarlett_generate_name(int i, char *dst, int offsets[])
  59. linux-5.7/sound/usb/mixer_scarlett.c:362: if (i > offsets[SCARLETT_OFFSET_MIX])
  60. linux-5.7/sound/usb/mixer_scarlett.c:364: 'A'+(i - offsets[SCARLETT_OFFSET_MIX] - 1));
  61. linux-5.7/sound/usb/mixer_scarlett.c:365: else if (i > offsets[SCARLETT_OFFSET_ADAT])
  62. linux-5.7/sound/usb/mixer_scarlett.c:366: sprintf(dst, "ADAT %d", i - offsets[SCARLETT_OFFSET_ADAT]);
  63. linux-5.7/sound/usb/mixer_scarlett.c:367: else if (i > offsets[SCARLETT_OFFSET_SPDIF])
  64. linux-5.7/sound/usb/mixer_scarlett.c:368: sprintf(dst, "SPDIF %d", i - offsets[SCARLETT_OFFSET_SPDIF]);
  65. linux-5.7/sound/usb/mixer_scarlett.c:369: else if (i > offsets[SCARLETT_OFFSET_ANALOG])
  66. linux-5.7/sound/usb/mixer_scarlett.c:370: sprintf(dst, "Analog %d", i - offsets[SCARLETT_OFFSET_ANALOG]);
  67. linux-5.7/sound/usb/mixer_scarlett.c:371: else if (i > offsets[SCARLETT_OFFSET_PCM])
  68. linux-5.7/sound/usb/mixer_scarlett.c:372: sprintf(dst, "PCM %d", i - offsets[SCARLETT_OFFSET_PCM]);
  69. linux-5.7/sound/usb/mixer_scarlett.c:377:static int scarlett_ctl_enum_dynamic_info(struct snd_kcontrol *kctl,
  70. linux-5.7/sound/usb/mixer_scarlett.c:381: struct scarlett_mixer_elem_enum_info *opt = elem->private_data;
  71. linux-5.7/sound/usb/mixer_scarlett.c:392: scarlett_generate_name(uinfo->value.enumerated.item,
  72. linux-5.7/sound/usb/mixer_scarlett.c:399:static int scarlett_ctl_enum_info(struct snd_kcontrol *kctl,
  73. linux-5.7/sound/usb/mixer_scarlett.c:403: struct scarlett_mixer_elem_enum_info *opt = elem->private_data;
  74. linux-5.7/sound/usb/mixer_scarlett.c:409:static int scarlett_ctl_enum_get(struct snd_kcontrol *kctl,
  75. linux-5.7/sound/usb/mixer_scarlett.c:413: struct scarlett_mixer_elem_enum_info *opt = elem->private_data;
  76. linux-5.7/sound/usb/mixer_scarlett.c:427:static int scarlett_ctl_enum_put(struct snd_kcontrol *kctl,
  77. linux-5.7/sound/usb/mixer_scarlett.c:431: struct scarlett_mixer_elem_enum_info *opt = elem->private_data;
  78. linux-5.7/sound/usb/mixer_scarlett.c:447:static int scarlett_ctl_enum_resume(struct usb_mixer_elem_list *list)
  79. linux-5.7/sound/usb/mixer_scarlett.c:456:static int scarlett_ctl_meter_get(struct snd_kcontrol *kctl,
  80. linux-5.7/sound/usb/mixer_scarlett.c:478:static const struct snd_kcontrol_new usb_scarlett_ctl_switch = {
  81. linux-5.7/sound/usb/mixer_scarlett.c:481: .info = scarlett_ctl_switch_info,
  82. linux-5.7/sound/usb/mixer_scarlett.c:482: .get = scarlett_ctl_switch_get,
  83. linux-5.7/sound/usb/mixer_scarlett.c:483: .put = scarlett_ctl_switch_put,
  84. linux-5.7/sound/usb/mixer_scarlett.c:486:static const DECLARE_TLV_DB_SCALE(db_scale_scarlett_gain, -12800, 100, 0);
  85. linux-5.7/sound/usb/mixer_scarlett.c:488:static const struct snd_kcontrol_new usb_scarlett_ctl = {
  86. linux-5.7/sound/usb/mixer_scarlett.c:493: .info = scarlett_ctl_info,
  87. linux-5.7/sound/usb/mixer_scarlett.c:494: .get = scarlett_ctl_get,
  88. linux-5.7/sound/usb/mixer_scarlett.c:495: .put = scarlett_ctl_put,
  89. linux-5.7/sound/usb/mixer_scarlett.c:497: .tlv = { .p = db_scale_scarlett_gain }
  90. linux-5.7/sound/usb/mixer_scarlett.c:500:static const struct snd_kcontrol_new usb_scarlett_ctl_master = {
  91. linux-5.7/sound/usb/mixer_scarlett.c:505: .info = scarlett_ctl_info,
  92. linux-5.7/sound/usb/mixer_scarlett.c:506: .get = scarlett_ctl_get,
  93. linux-5.7/sound/usb/mixer_scarlett.c:507: .put = scarlett_ctl_put,
  94. linux-5.7/sound/usb/mixer_scarlett.c:509: .tlv = { .p = db_scale_scarlett_gain }
  95. linux-5.7/sound/usb/mixer_scarlett.c:512:static const struct snd_kcontrol_new usb_scarlett_ctl_enum = {
  96. linux-5.7/sound/usb/mixer_scarlett.c:515: .info = scarlett_ctl_enum_info,
  97. linux-5.7/sound/usb/mixer_scarlett.c:516: .get = scarlett_ctl_enum_get,
  98. linux-5.7/sound/usb/mixer_scarlett.c:517: .put = scarlett_ctl_enum_put,
  99. linux-5.7/sound/usb/mixer_scarlett.c:520:static const struct snd_kcontrol_new usb_scarlett_ctl_dynamic_enum = {
  100. linux-5.7/sound/usb/mixer_scarlett.c:523: .info = scarlett_ctl_enum_dynamic_info,
  101. linux-5.7/sound/usb/mixer_scarlett.c:524: .get = scarlett_ctl_enum_get,
  102. linux-5.7/sound/usb/mixer_scarlett.c:525: .put = scarlett_ctl_enum_put,
  103. linux-5.7/sound/usb/mixer_scarlett.c:528:static const struct snd_kcontrol_new usb_scarlett_ctl_sync = {
  104. linux-5.7/sound/usb/mixer_scarlett.c:532: .info = scarlett_ctl_enum_info,
  105. linux-5.7/sound/usb/mixer_scarlett.c:533: .get = scarlett_ctl_meter_get,
  106. linux-5.7/sound/usb/mixer_scarlett.c:541: const struct scarlett_mixer_elem_enum_info *opt,
  107. linux-5.7/sound/usb/mixer_scarlett.c:562: /* add scarlett_mixer_elem_enum_info struct */
  108. linux-5.7/sound/usb/mixer_scarlett.c:586: const struct scarlett_device_info *info)
  109. linux-5.7/sound/usb/mixer_scarlett.c:595: err = add_new_ctl(mixer, &usb_scarlett_ctl_switch,
  110. linux-5.7/sound/usb/mixer_scarlett.c:596: scarlett_ctl_resume, 0x0a, 0x01,
  111. linux-5.7/sound/usb/mixer_scarlett.c:604: err = add_new_ctl(mixer, &usb_scarlett_ctl_master,
  112. linux-5.7/sound/usb/mixer_scarlett.c:605: scarlett_ctl_resume, 0x0a, 0x02,
  113. linux-5.7/sound/usb/mixer_scarlett.c:613: err = add_new_ctl(mixer, &usb_scarlett_ctl_dynamic_enum,
  114. linux-5.7/sound/usb/mixer_scarlett.c:614: scarlett_ctl_enum_resume, 0x33, 0x00,
  115. linux-5.7/sound/usb/mixer_scarlett.c:623: err = add_new_ctl(mixer, &usb_scarlett_ctl_dynamic_enum,
  116. linux-5.7/sound/usb/mixer_scarlett.c:624: scarlett_ctl_enum_resume, 0x33, 0x00,
  117. linux-5.7/sound/usb/mixer_scarlett.c:636:static const struct scarlett_device_info s6i6_info = {
  118. linux-5.7/sound/usb/mixer_scarlett.c:658: { .num = 0, .type = SCARLETT_OUTPUTS, .name = "Monitor" },
  119. linux-5.7/sound/usb/mixer_scarlett.c:659: { .num = 1, .type = SCARLETT_OUTPUTS, .name = "Headphone" },
  120. linux-5.7/sound/usb/mixer_scarlett.c:660: { .num = 2, .type = SCARLETT_OUTPUTS, .name = "SPDIF" },
  121. linux-5.7/sound/usb/mixer_scarlett.c:661: { .num = 1, .type = SCARLETT_SWITCH_IMPEDANCE, .name = NULL},
  122. linux-5.7/sound/usb/mixer_scarlett.c:662: { .num = 1, .type = SCARLETT_SWITCH_PAD, .name = NULL},
  123. linux-5.7/sound/usb/mixer_scarlett.c:663: { .num = 2, .type = SCARLETT_SWITCH_IMPEDANCE, .name = NULL},
  124. linux-5.7/sound/usb/mixer_scarlett.c:664: { .num = 2, .type = SCARLETT_SWITCH_PAD, .name = NULL},
  125. linux-5.7/sound/usb/mixer_scarlett.c:665: { .num = 3, .type = SCARLETT_SWITCH_GAIN, .name = NULL},
  126. linux-5.7/sound/usb/mixer_scarlett.c:666: { .num = 4, .type = SCARLETT_SWITCH_GAIN, .name = NULL},
  127. linux-5.7/sound/usb/mixer_scarlett.c:678:static const struct scarlett_device_info s8i6_info = {
  128. linux-5.7/sound/usb/mixer_scarlett.c:700: { .num = 0, .type = SCARLETT_OUTPUTS, .name = "Monitor" },
  129. linux-5.7/sound/usb/mixer_scarlett.c:701: { .num = 1, .type = SCARLETT_OUTPUTS, .name = "Headphone" },
  130. linux-5.7/sound/usb/mixer_scarlett.c:702: { .num = 2, .type = SCARLETT_OUTPUTS, .name = "SPDIF" },
  131. linux-5.7/sound/usb/mixer_scarlett.c:703: { .num = 1, .type = SCARLETT_SWITCH_IMPEDANCE, .name = NULL},
  132. linux-5.7/sound/usb/mixer_scarlett.c:704: { .num = 2, .type = SCARLETT_SWITCH_IMPEDANCE, .name = NULL},
  133. linux-5.7/sound/usb/mixer_scarlett.c:705: { .num = 3, .type = SCARLETT_SWITCH_PAD, .name = NULL},
  134. linux-5.7/sound/usb/mixer_scarlett.c:706: { .num = 4, .type = SCARLETT_SWITCH_PAD, .name = NULL},
  135. linux-5.7/sound/usb/mixer_scarlett.c:717:static const struct scarlett_device_info s18i6_info = {
  136. linux-5.7/sound/usb/mixer_scarlett.c:739: { .num = 0, .type = SCARLETT_OUTPUTS, .name = "Monitor" },
  137. linux-5.7/sound/usb/mixer_scarlett.c:740: { .num = 1, .type = SCARLETT_OUTPUTS, .name = "Headphone" },
  138. linux-5.7/sound/usb/mixer_scarlett.c:741: { .num = 2, .type = SCARLETT_OUTPUTS, .name = "SPDIF" },
  139. linux-5.7/sound/usb/mixer_scarlett.c:742: { .num = 1, .type = SCARLETT_SWITCH_IMPEDANCE, .name = NULL},
  140. linux-5.7/sound/usb/mixer_scarlett.c:743: { .num = 2, .type = SCARLETT_SWITCH_IMPEDANCE, .name = NULL},
  141. linux-5.7/sound/usb/mixer_scarlett.c:754:static const struct scarlett_device_info s18i8_info = {
  142. linux-5.7/sound/usb/mixer_scarlett.c:776: { .num = 0, .type = SCARLETT_OUTPUTS, .name = "Monitor" },
  143. linux-5.7/sound/usb/mixer_scarlett.c:777: { .num = 1, .type = SCARLETT_OUTPUTS, .name = "Headphone 1" },
  144. linux-5.7/sound/usb/mixer_scarlett.c:778: { .num = 2, .type = SCARLETT_OUTPUTS, .name = "Headphone 2" },
  145. linux-5.7/sound/usb/mixer_scarlett.c:779: { .num = 3, .type = SCARLETT_OUTPUTS, .name = "SPDIF" },
  146. linux-5.7/sound/usb/mixer_scarlett.c:780: { .num = 1, .type = SCARLETT_SWITCH_IMPEDANCE, .name = NULL},
  147. linux-5.7/sound/usb/mixer_scarlett.c:781: { .num = 1, .type = SCARLETT_SWITCH_PAD, .name = NULL},
  148. linux-5.7/sound/usb/mixer_scarlett.c:782: { .num = 2, .type = SCARLETT_SWITCH_IMPEDANCE, .name = NULL},
  149. linux-5.7/sound/usb/mixer_scarlett.c:783: { .num = 2, .type = SCARLETT_SWITCH_PAD, .name = NULL},
  150. linux-5.7/sound/usb/mixer_scarlett.c:784: { .num = 3, .type = SCARLETT_SWITCH_PAD, .name = NULL},
  151. linux-5.7/sound/usb/mixer_scarlett.c:785: { .num = 4, .type = SCARLETT_SWITCH_PAD, .name = NULL},
  152. linux-5.7/sound/usb/mixer_scarlett.c:796:static const struct scarlett_device_info s18i20_info = {
  153. linux-5.7/sound/usb/mixer_scarlett.c:818: { .num = 0, .type = SCARLETT_OUTPUTS, .name = "Monitor" },
  154. linux-5.7/sound/usb/mixer_scarlett.c:819: { .num = 1, .type = SCARLETT_OUTPUTS, .name = "Line 3/4" },
  155. linux-5.7/sound/usb/mixer_scarlett.c:820: { .num = 2, .type = SCARLETT_OUTPUTS, .name = "Line 5/6" },
  156. linux-5.7/sound/usb/mixer_scarlett.c:821: { .num = 3, .type = SCARLETT_OUTPUTS, .name = "Line 7/8" },
  157. linux-5.7/sound/usb/mixer_scarlett.c:822: { .num = 4, .type = SCARLETT_OUTPUTS, .name = "Line 9/10" },
  158. linux-5.7/sound/usb/mixer_scarlett.c:823: { .num = 5, .type = SCARLETT_OUTPUTS, .name = "SPDIF" },
  159. linux-5.7/sound/usb/mixer_scarlett.c:824: { .num = 6, .type = SCARLETT_OUTPUTS, .name = "ADAT 1/2" },
  160. linux-5.7/sound/usb/mixer_scarlett.c:825: { .num = 7, .type = SCARLETT_OUTPUTS, .name = "ADAT 3/4" },
  161. linux-5.7/sound/usb/mixer_scarlett.c:826: { .num = 8, .type = SCARLETT_OUTPUTS, .name = "ADAT 5/6" },
  162. linux-5.7/sound/usb/mixer_scarlett.c:827: { .num = 9, .type = SCARLETT_OUTPUTS, .name = "ADAT 7/8" },
  163. linux-5.7/sound/usb/mixer_scarlett.c:828: /*{ .num = 1, .type = SCARLETT_SWITCH_IMPEDANCE, .name = NULL},
  164. linux-5.7/sound/usb/mixer_scarlett.c:829: { .num = 1, .type = SCARLETT_SWITCH_PAD, .name = NULL},
  165. linux-5.7/sound/usb/mixer_scarlett.c:830: { .num = 2, .type = SCARLETT_SWITCH_IMPEDANCE, .name = NULL},
  166. linux-5.7/sound/usb/mixer_scarlett.c:831: { .num = 2, .type = SCARLETT_SWITCH_PAD, .name = NULL},
  167. linux-5.7/sound/usb/mixer_scarlett.c:832: { .num = 3, .type = SCARLETT_SWITCH_PAD, .name = NULL},
  168. linux-5.7/sound/usb/mixer_scarlett.c:833: { .num = 4, .type = SCARLETT_SWITCH_PAD, .name = NULL},*/
  169. linux-5.7/sound/usb/mixer_scarlett.c:845:static int scarlett_controls_create_generic(struct usb_mixer_interface *mixer,
  170. linux-5.7/sound/usb/mixer_scarlett.c:846: const struct scarlett_device_info *info)
  171. linux-5.7/sound/usb/mixer_scarlett.c:850: const struct scarlett_mixer_control *ctl;
  172. linux-5.7/sound/usb/mixer_scarlett.c:854: err = add_new_ctl(mixer, &usb_scarlett_ctl_switch,
  173. linux-5.7/sound/usb/mixer_scarlett.c:855: scarlett_ctl_resume, 0x0a, 0x01, 0,
  174. linux-5.7/sound/usb/mixer_scarlett.c:861: err = add_new_ctl(mixer, &usb_scarlett_ctl_master,
  175. linux-5.7/sound/usb/mixer_scarlett.c:862: scarlett_ctl_resume, 0x0a, 0x02, 0,
  176. linux-5.7/sound/usb/mixer_scarlett.c:873: case SCARLETT_OUTPUTS:
  177. linux-5.7/sound/usb/mixer_scarlett.c:878: case SCARLETT_SWITCH_IMPEDANCE:
  178. linux-5.7/sound/usb/mixer_scarlett.c:880: err = add_new_ctl(mixer, &usb_scarlett_ctl_enum,
  179. linux-5.7/sound/usb/mixer_scarlett.c:881: scarlett_ctl_enum_resume, 0x01,
  180. linux-5.7/sound/usb/mixer_scarlett.c:887: case SCARLETT_SWITCH_PAD:
  181. linux-5.7/sound/usb/mixer_scarlett.c:889: err = add_new_ctl(mixer, &usb_scarlett_ctl_enum,
  182. linux-5.7/sound/usb/mixer_scarlett.c:890: scarlett_ctl_enum_resume, 0x01,
  183. linux-5.7/sound/usb/mixer_scarlett.c:896: case SCARLETT_SWITCH_GAIN:
  184. linux-5.7/sound/usb/mixer_scarlett.c:898: err = add_new_ctl(mixer, &usb_scarlett_ctl_enum,
  185. linux-5.7/sound/usb/mixer_scarlett.c:899: scarlett_ctl_enum_resume, 0x01,
  186. linux-5.7/sound/usb/mixer_scarlett.c:912: * Create and initialize a mixer for the Focusrite(R) Scarlett
  187. linux-5.7/sound/usb/mixer_scarlett.c:914:int snd_scarlett_controls_create(struct usb_mixer_interface *mixer)
  188. linux-5.7/sound/usb/mixer_scarlett.c:918: const struct scarlett_device_info *info;
  189. linux-5.7/sound/usb/mixer_scarlett.c:947: err = scarlett_controls_create_generic(mixer, info);
  190. linux-5.7/sound/usb/mixer_scarlett.c:955: err = add_new_ctl(mixer, &usb_scarlett_ctl_dynamic_enum,
  191. linux-5.7/sound/usb/mixer_scarlett.c:956: scarlett_ctl_enum_resume, 0x32,
  192. linux-5.7/sound/usb/mixer_scarlett.c:965: err = add_new_ctl(mixer, &usb_scarlett_ctl,
  193. linux-5.7/sound/usb/mixer_scarlett.c:966: scarlett_ctl_resume, 0x3c, 0x00,
  194. linux-5.7/sound/usb/mixer_scarlett.c:978: err = add_new_ctl(mixer, &usb_scarlett_ctl_dynamic_enum,
  195. linux-5.7/sound/usb/mixer_scarlett.c:979: scarlett_ctl_enum_resume, 0x34,
  196. linux-5.7/sound/usb/mixer_scarlett.c:987: err = add_new_ctl(mixer, &usb_scarlett_ctl_enum,
  197. linux-5.7/sound/usb/mixer_scarlett.c:988: scarlett_ctl_enum_resume, 0x28, 0x01, 0,
  198. linux-5.7/sound/usb/mixer_scarlett.c:995: err = add_new_ctl(mixer, &usb_scarlett_ctl_sync, NULL, 0x3c, 0x00, 2,
  199. linux-5.7/sound/usb/mixer_scarlett_gen2.c:3: * Focusrite Scarlett 6i6/18i8/18i20 Gen 2 Driver for ALSA
  200. linux-5.7/sound/usb/mixer_scarlett_gen2.c:7: * Based on the Scarlett (Gen 1) Driver for ALSA:
  201. linux-5.7/sound/usb/mixer_scarlett_gen2.c:22:/* Mixer Interface for the Focusrite Scarlett 6i6/18i8/18i20 Gen 2 audio
  202. linux-5.7/sound/usb/mixer_scarlett_gen2.c:27: * between Focusrite Control 2.3.4 and the Focusrite(R) Scarlett 18i20
  203. linux-5.7/sound/usb/mixer_scarlett_gen2.c:30: * Scarlett 18i8 support added in April 2019.
  204. linux-5.7/sound/usb/mixer_scarlett_gen2.c:32: * Scarlett 6i6 support added in June 2019 (thanks to Martin Wittmann
  205. linux-5.7/sound/usb/mixer_scarlett_gen2.c:106:#include "mixer_scarlett_gen2.h"
  206. linux-5.7/sound/usb/mixer_scarlett_gen2.c:109:#define SCARLETT2_ENABLE 0x01
  207. linux-5.7/sound/usb/mixer_scarlett_gen2.c:112:#define SCARLETT2_VOLUME_BIAS 127
  208. linux-5.7/sound/usb/mixer_scarlett_gen2.c:115:#define SCARLETT2_MIXER_MIN_DB -80
  209. linux-5.7/sound/usb/mixer_scarlett_gen2.c:116:#define SCARLETT2_MIXER_BIAS (-SCARLETT2_MIXER_MIN_DB * 2)
  210. linux-5.7/sound/usb/mixer_scarlett_gen2.c:117:#define SCARLETT2_MIXER_MAX_DB 6
  211. linux-5.7/sound/usb/mixer_scarlett_gen2.c:118:#define SCARLETT2_MIXER_MAX_VALUE \
  212. linux-5.7/sound/usb/mixer_scarlett_gen2.c:119: ((SCARLETT2_MIXER_MAX_DB - SCARLETT2_MIXER_MIN_DB) * 2)
  213. linux-5.7/sound/usb/mixer_scarlett_gen2.c:124:static const u16 scarlett2_mixer_values[173] = {
  214. linux-5.7/sound/usb/mixer_scarlett_gen2.c:142:#define SCARLETT2_ANALOGUE_MAX 10
  215. linux-5.7/sound/usb/mixer_scarlett_gen2.c:145:#define SCARLETT2_LEVEL_SWITCH_MAX 2
  216. linux-5.7/sound/usb/mixer_scarlett_gen2.c:146:#define SCARLETT2_PAD_SWITCH_MAX 4
  217. linux-5.7/sound/usb/mixer_scarlett_gen2.c:149:#define SCARLETT2_INPUT_MIX_MAX 18
  218. linux-5.7/sound/usb/mixer_scarlett_gen2.c:152:#define SCARLETT2_OUTPUT_MIX_MAX 10
  219. linux-5.7/sound/usb/mixer_scarlett_gen2.c:157:#define SCARLETT2_MUX_MAX 64
  220. linux-5.7/sound/usb/mixer_scarlett_gen2.c:162:#define SCARLETT2_NUM_METERS 56
  221. linux-5.7/sound/usb/mixer_scarlett_gen2.c:173: SCARLETT2_PORT_TYPE_NONE = 0,
  222. linux-5.7/sound/usb/mixer_scarlett_gen2.c:174: SCARLETT2_PORT_TYPE_ANALOGUE = 1,
  223. linux-5.7/sound/usb/mixer_scarlett_gen2.c:175: SCARLETT2_PORT_TYPE_SPDIF = 2,
  224. linux-5.7/sound/usb/mixer_scarlett_gen2.c:176: SCARLETT2_PORT_TYPE_ADAT = 3,
  225. linux-5.7/sound/usb/mixer_scarlett_gen2.c:177: SCARLETT2_PORT_TYPE_MIX = 4,
  226. linux-5.7/sound/usb/mixer_scarlett_gen2.c:178: SCARLETT2_PORT_TYPE_PCM = 5,
  227. linux-5.7/sound/usb/mixer_scarlett_gen2.c:179: SCARLETT2_PORT_TYPE_COUNT = 6,
  228. linux-5.7/sound/usb/mixer_scarlett_gen2.c:184: SCARLETT2_PORT_IN = 0,
  229. linux-5.7/sound/usb/mixer_scarlett_gen2.c:185: SCARLETT2_PORT_OUT = 1,
  230. linux-5.7/sound/usb/mixer_scarlett_gen2.c:186: SCARLETT2_PORT_OUT_44 = 2,
  231. linux-5.7/sound/usb/mixer_scarlett_gen2.c:187: SCARLETT2_PORT_OUT_88 = 3,
  232. linux-5.7/sound/usb/mixer_scarlett_gen2.c:188: SCARLETT2_PORT_OUT_176 = 4,
  233. linux-5.7/sound/usb/mixer_scarlett_gen2.c:189: SCARLETT2_PORT_DIRECTIONS = 5,
  234. linux-5.7/sound/usb/mixer_scarlett_gen2.c:193:#define SCARLETT2_BUTTON_MAX 2
  235. linux-5.7/sound/usb/mixer_scarlett_gen2.c:195:static const char *const scarlett2_button_names[SCARLETT2_BUTTON_MAX] = {
  236. linux-5.7/sound/usb/mixer_scarlett_gen2.c:206:struct scarlett2_ports {
  237. linux-5.7/sound/usb/mixer_scarlett_gen2.c:208: int num[SCARLETT2_PORT_DIRECTIONS];
  238. linux-5.7/sound/usb/mixer_scarlett_gen2.c:214:struct scarlett2_device_info {
  239. linux-5.7/sound/usb/mixer_scarlett_gen2.c:219: const char * const line_out_descrs[SCARLETT2_ANALOGUE_MAX];
  240. linux-5.7/sound/usb/mixer_scarlett_gen2.c:220: struct scarlett2_ports ports[SCARLETT2_PORT_TYPE_COUNT];
  241. linux-5.7/sound/usb/mixer_scarlett_gen2.c:223:struct scarlett2_mixer_data {
  242. linux-5.7/sound/usb/mixer_scarlett_gen2.c:228: const struct scarlett2_device_info *info;
  243. linux-5.7/sound/usb/mixer_scarlett_gen2.c:230: u16 scarlett2_seq;
  244. linux-5.7/sound/usb/mixer_scarlett_gen2.c:233: u8 vol[SCARLETT2_ANALOGUE_MAX];
  245. linux-5.7/sound/usb/mixer_scarlett_gen2.c:234: u8 vol_sw_hw_switch[SCARLETT2_ANALOGUE_MAX];
  246. linux-5.7/sound/usb/mixer_scarlett_gen2.c:235: u8 level_switch[SCARLETT2_LEVEL_SWITCH_MAX];
  247. linux-5.7/sound/usb/mixer_scarlett_gen2.c:236: u8 pad_switch[SCARLETT2_PAD_SWITCH_MAX];
  248. linux-5.7/sound/usb/mixer_scarlett_gen2.c:237: u8 buttons[SCARLETT2_BUTTON_MAX];
  249. linux-5.7/sound/usb/mixer_scarlett_gen2.c:239: struct snd_kcontrol *vol_ctls[SCARLETT2_ANALOGUE_MAX];
  250. linux-5.7/sound/usb/mixer_scarlett_gen2.c:240: struct snd_kcontrol *button_ctls[SCARLETT2_BUTTON_MAX];
  251. linux-5.7/sound/usb/mixer_scarlett_gen2.c:241: u8 mux[SCARLETT2_MUX_MAX];
  252. linux-5.7/sound/usb/mixer_scarlett_gen2.c:242: u8 mix[SCARLETT2_INPUT_MIX_MAX * SCARLETT2_OUTPUT_MIX_MAX];
  253. linux-5.7/sound/usb/mixer_scarlett_gen2.c:247:static const struct scarlett2_device_info s6i6_gen2_info = {
  254. linux-5.7/sound/usb/mixer_scarlett_gen2.c:264: [SCARLETT2_PORT_TYPE_NONE] = {
  255. linux-5.7/sound/usb/mixer_scarlett_gen2.c:270: [SCARLETT2_PORT_TYPE_ANALOGUE] = {
  256. linux-5.7/sound/usb/mixer_scarlett_gen2.c:277: [SCARLETT2_PORT_TYPE_SPDIF] = {
  257. linux-5.7/sound/usb/mixer_scarlett_gen2.c:284: [SCARLETT2_PORT_TYPE_MIX] = {
  258. linux-5.7/sound/usb/mixer_scarlett_gen2.c:291: [SCARLETT2_PORT_TYPE_PCM] = {
  259. linux-5.7/sound/usb/mixer_scarlett_gen2.c:301:static const struct scarlett2_device_info s18i8_gen2_info = {
  260. linux-5.7/sound/usb/mixer_scarlett_gen2.c:320: [SCARLETT2_PORT_TYPE_NONE] = {
  261. linux-5.7/sound/usb/mixer_scarlett_gen2.c:326: [SCARLETT2_PORT_TYPE_ANALOGUE] = {
  262. linux-5.7/sound/usb/mixer_scarlett_gen2.c:333: [SCARLETT2_PORT_TYPE_SPDIF] = {
  263. linux-5.7/sound/usb/mixer_scarlett_gen2.c:344: [SCARLETT2_PORT_TYPE_ADAT] = {
  264. linux-5.7/sound/usb/mixer_scarlett_gen2.c:350: [SCARLETT2_PORT_TYPE_MIX] = {
  265. linux-5.7/sound/usb/mixer_scarlett_gen2.c:357: [SCARLETT2_PORT_TYPE_PCM] = {
  266. linux-5.7/sound/usb/mixer_scarlett_gen2.c:367:static const struct scarlett2_device_info s18i20_gen2_info = {
  267. linux-5.7/sound/usb/mixer_scarlett_gen2.c:390: [SCARLETT2_PORT_TYPE_NONE] = {
  268. linux-5.7/sound/usb/mixer_scarlett_gen2.c:396: [SCARLETT2_PORT_TYPE_ANALOGUE] = {
  269. linux-5.7/sound/usb/mixer_scarlett_gen2.c:403: [SCARLETT2_PORT_TYPE_SPDIF] = {
  270. linux-5.7/sound/usb/mixer_scarlett_gen2.c:414: [SCARLETT2_PORT_TYPE_ADAT] = {
  271. linux-5.7/sound/usb/mixer_scarlett_gen2.c:421: [SCARLETT2_PORT_TYPE_MIX] = {
  272. linux-5.7/sound/usb/mixer_scarlett_gen2.c:428: [SCARLETT2_PORT_TYPE_PCM] = {
  273. linux-5.7/sound/usb/mixer_scarlett_gen2.c:439:static int scarlett2_get_port_start_num(const struct scarlett2_ports *ports,
  274. linux-5.7/sound/usb/mixer_scarlett_gen2.c:453:#define SCARLETT2_USB_VENDOR_SPECIFIC_INTERFACE 5
  275. linux-5.7/sound/usb/mixer_scarlett_gen2.c:454:#define SCARLETT2_USB_INTERRUPT_ENDPOINT 4
  276. linux-5.7/sound/usb/mixer_scarlett_gen2.c:455:#define SCARLETT2_USB_INTERRUPT_MAX_DATA 64
  277. linux-5.7/sound/usb/mixer_scarlett_gen2.c:456:#define SCARLETT2_USB_INTERRUPT_INTERVAL 3
  278. linux-5.7/sound/usb/mixer_scarlett_gen2.c:459:#define SCARLETT2_USB_INTERRUPT_VOL_CHANGE 0x400000
  279. linux-5.7/sound/usb/mixer_scarlett_gen2.c:460:#define SCARLETT2_USB_INTERRUPT_BUTTON_CHANGE 0x200000
  280. linux-5.7/sound/usb/mixer_scarlett_gen2.c:463:#define SCARLETT2_USB_VENDOR_SPECIFIC_CMD_REQ 2
  281. linux-5.7/sound/usb/mixer_scarlett_gen2.c:464:#define SCARLETT2_USB_VENDOR_SPECIFIC_CMD_RESP 3
  282. linux-5.7/sound/usb/mixer_scarlett_gen2.c:466:#define SCARLETT2_USB_INIT_SEQ 0x00000000
  283. linux-5.7/sound/usb/mixer_scarlett_gen2.c:467:#define SCARLETT2_USB_GET_METER_LEVELS 0x00001001
  284. linux-5.7/sound/usb/mixer_scarlett_gen2.c:468:#define SCARLETT2_USB_SET_MIX 0x00002002
  285. linux-5.7/sound/usb/mixer_scarlett_gen2.c:469:#define SCARLETT2_USB_SET_MUX 0x00003002
  286. linux-5.7/sound/usb/mixer_scarlett_gen2.c:470:#define SCARLETT2_USB_GET_DATA 0x00800000
  287. linux-5.7/sound/usb/mixer_scarlett_gen2.c:471:#define SCARLETT2_USB_SET_DATA 0x00800001
  288. linux-5.7/sound/usb/mixer_scarlett_gen2.c:472:#define SCARLETT2_USB_DATA_CMD 0x00800002
  289. linux-5.7/sound/usb/mixer_scarlett_gen2.c:473:#define SCARLETT2_USB_CONFIG_SAVE 6
  290. linux-5.7/sound/usb/mixer_scarlett_gen2.c:475:#define SCARLETT2_USB_VOLUME_STATUS_OFFSET 0x31
  291. linux-5.7/sound/usb/mixer_scarlett_gen2.c:476:#define SCARLETT2_USB_METER_LEVELS_GET_MAGIC 1
  292. linux-5.7/sound/usb/mixer_scarlett_gen2.c:478:/* volume status is read together (matches scarlett2_config_items[]) */
  293. linux-5.7/sound/usb/mixer_scarlett_gen2.c:479:struct scarlett2_usb_volume_status {
  294. linux-5.7/sound/usb/mixer_scarlett_gen2.c:481: u8 buttons[SCARLETT2_BUTTON_MAX];
  295. linux-5.7/sound/usb/mixer_scarlett_gen2.c:486: s16 sw_vol[SCARLETT2_ANALOGUE_MAX];
  296. linux-5.7/sound/usb/mixer_scarlett_gen2.c:489: s16 hw_vol[SCARLETT2_ANALOGUE_MAX];
  297. linux-5.7/sound/usb/mixer_scarlett_gen2.c:491: u8 pad2[SCARLETT2_ANALOGUE_MAX];
  298. linux-5.7/sound/usb/mixer_scarlett_gen2.c:494: u8 sw_hw_switch[SCARLETT2_ANALOGUE_MAX];
  299. linux-5.7/sound/usb/mixer_scarlett_gen2.c:504: SCARLETT2_CONFIG_BUTTONS = 0,
  300. linux-5.7/sound/usb/mixer_scarlett_gen2.c:505: SCARLETT2_CONFIG_LINE_OUT_VOLUME = 1,
  301. linux-5.7/sound/usb/mixer_scarlett_gen2.c:506: SCARLETT2_CONFIG_SW_HW_SWITCH = 2,
  302. linux-5.7/sound/usb/mixer_scarlett_gen2.c:507: SCARLETT2_CONFIG_LEVEL_SWITCH = 3,
  303. linux-5.7/sound/usb/mixer_scarlett_gen2.c:508: SCARLETT2_CONFIG_PAD_SWITCH = 4,
  304. linux-5.7/sound/usb/mixer_scarlett_gen2.c:509: SCARLETT2_CONFIG_COUNT = 5
  305. linux-5.7/sound/usb/mixer_scarlett_gen2.c:515:struct scarlett2_config {
  306. linux-5.7/sound/usb/mixer_scarlett_gen2.c:521:static const struct scarlett2_config
  307. linux-5.7/sound/usb/mixer_scarlett_gen2.c:522: scarlett2_config_items[SCARLETT2_CONFIG_COUNT] = {
  308. linux-5.7/sound/usb/mixer_scarlett_gen2.c:560:struct scarlett2_usb_packet {
  309. linux-5.7/sound/usb/mixer_scarlett_gen2.c:569:#define SCARLETT2_USB_PACKET_LEN (sizeof(struct scarlett2_usb_packet))
  310. linux-5.7/sound/usb/mixer_scarlett_gen2.c:571:static void scarlett2_fill_request_header(struct scarlett2_mixer_data *private,
  311. linux-5.7/sound/usb/mixer_scarlett_gen2.c:572: struct scarlett2_usb_packet *req,
  312. linux-5.7/sound/usb/mixer_scarlett_gen2.c:576: u16 seq = private->scarlett2_seq++;
  313. linux-5.7/sound/usb/mixer_scarlett_gen2.c:585:/* Send a proprietary format request to the Scarlett interface */
  314. linux-5.7/sound/usb/mixer_scarlett_gen2.c:586:static int scarlett2_usb(
  315. linux-5.7/sound/usb/mixer_scarlett_gen2.c:590: struct scarlett2_mixer_data *private = mixer->private_data;
  316. linux-5.7/sound/usb/mixer_scarlett_gen2.c:591: u16 req_buf_size = sizeof(struct scarlett2_usb_packet) + req_size;
  317. linux-5.7/sound/usb/mixer_scarlett_gen2.c:592: u16 resp_buf_size = sizeof(struct scarlett2_usb_packet) + resp_size;
  318. linux-5.7/sound/usb/mixer_scarlett_gen2.c:593: struct scarlett2_usb_packet *req = NULL, *resp = NULL;
  319. linux-5.7/sound/usb/mixer_scarlett_gen2.c:612: scarlett2_fill_request_header(private, req, cmd, req_size);
  320. linux-5.7/sound/usb/mixer_scarlett_gen2.c:619: SCARLETT2_USB_VENDOR_SPECIFIC_CMD_REQ,
  321. linux-5.7/sound/usb/mixer_scarlett_gen2.c:622: SCARLETT2_USB_VENDOR_SPECIFIC_INTERFACE,
  322. linux-5.7/sound/usb/mixer_scarlett_gen2.c:629: "Scarlett Gen 2 USB request result cmd %x was %d\n",
  323. linux-5.7/sound/usb/mixer_scarlett_gen2.c:639: SCARLETT2_USB_VENDOR_SPECIFIC_CMD_RESP,
  324. linux-5.7/sound/usb/mixer_scarlett_gen2.c:642: SCARLETT2_USB_VENDOR_SPECIFIC_INTERFACE,
  325. linux-5.7/sound/usb/mixer_scarlett_gen2.c:651: "Scarlett Gen 2 USB response result cmd %x was %d\n",
  326. linux-5.7/sound/usb/mixer_scarlett_gen2.c:664: "Scarlett Gen 2 USB invalid response; "
  327. linux-5.7/sound/usb/mixer_scarlett_gen2.c:687:/* Send SCARLETT2_USB_DATA_CMD SCARLETT2_USB_CONFIG_SAVE */
  328. linux-5.7/sound/usb/mixer_scarlett_gen2.c:688:static void scarlett2_config_save(struct usb_mixer_interface *mixer)
  329. linux-5.7/sound/usb/mixer_scarlett_gen2.c:690: __le32 req = cpu_to_le32(SCARLETT2_USB_CONFIG_SAVE);
  330. linux-5.7/sound/usb/mixer_scarlett_gen2.c:692: scarlett2_usb(mixer, SCARLETT2_USB_DATA_CMD,
  331. linux-5.7/sound/usb/mixer_scarlett_gen2.c:698:static void scarlett2_config_save_work(struct work_struct *work)
  332. linux-5.7/sound/usb/mixer_scarlett_gen2.c:700: struct scarlett2_mixer_data *private =
  333. linux-5.7/sound/usb/mixer_scarlett_gen2.c:701: container_of(work, struct scarlett2_mixer_data, work.work);
  334. linux-5.7/sound/usb/mixer_scarlett_gen2.c:703: scarlett2_config_save(private->mixer);
  335. linux-5.7/sound/usb/mixer_scarlett_gen2.c:709:static int scarlett2_usb_set_config(
  336. linux-5.7/sound/usb/mixer_scarlett_gen2.c:713: const struct scarlett2_config config_item =
  337. linux-5.7/sound/usb/mixer_scarlett_gen2.c:714: scarlett2_config_items[config_item_num];
  338. linux-5.7/sound/usb/mixer_scarlett_gen2.c:722: struct scarlett2_mixer_data *private = mixer->private_data;
  339. linux-5.7/sound/usb/mixer_scarlett_gen2.c:731: err = scarlett2_usb(mixer, SCARLETT2_USB_SET_DATA,
  340. linux-5.7/sound/usb/mixer_scarlett_gen2.c:739: err = scarlett2_usb(mixer, SCARLETT2_USB_DATA_CMD,
  341. linux-5.7/sound/usb/mixer_scarlett_gen2.c:751:static int scarlett2_usb_get(
  342. linux-5.7/sound/usb/mixer_scarlett_gen2.c:762: return scarlett2_usb(mixer, SCARLETT2_USB_GET_DATA,
  343. linux-5.7/sound/usb/mixer_scarlett_gen2.c:767:static int scarlett2_usb_get_config(
  344. linux-5.7/sound/usb/mixer_scarlett_gen2.c:771: const struct scarlett2_config config_item =
  345. linux-5.7/sound/usb/mixer_scarlett_gen2.c:772: scarlett2_config_items[config_item_num];
  346. linux-5.7/sound/usb/mixer_scarlett_gen2.c:775: return scarlett2_usb_get(mixer, config_item.offset, buf, size);
  347. linux-5.7/sound/usb/mixer_scarlett_gen2.c:779:static int scarlett2_usb_get_volume_status(
  348. linux-5.7/sound/usb/mixer_scarlett_gen2.c:781: struct scarlett2_usb_volume_status *buf)
  349. linux-5.7/sound/usb/mixer_scarlett_gen2.c:783: return scarlett2_usb_get(mixer, SCARLETT2_USB_VOLUME_STATUS_OFFSET,
  350. linux-5.7/sound/usb/mixer_scarlett_gen2.c:790:static int scarlett2_usb_set_mix(struct usb_mixer_interface *mixer,
  351. linux-5.7/sound/usb/mixer_scarlett_gen2.c:793: struct scarlett2_mixer_data *private = mixer->private_data;
  352. linux-5.7/sound/usb/mixer_scarlett_gen2.c:794: const struct scarlett2_device_info *info = private->info;
  353. linux-5.7/sound/usb/mixer_scarlett_gen2.c:798: __le16 data[SCARLETT2_INPUT_MIX_MAX];
  354. linux-5.7/sound/usb/mixer_scarlett_gen2.c:803: info->ports[SCARLETT2_PORT_TYPE_MIX].num[SCARLETT2_PORT_OUT];
  355. linux-5.7/sound/usb/mixer_scarlett_gen2.c:809: scarlett2_mixer_values[private->mix[j]]
  356. linux-5.7/sound/usb/mixer_scarlett_gen2.c:812: return scarlett2_usb(mixer, SCARLETT2_USB_SET_MIX,
  357. linux-5.7/sound/usb/mixer_scarlett_gen2.c:818:static u32 scarlett2_mux_src_num_to_id(const struct scarlett2_ports *ports,
  358. linux-5.7/sound/usb/mixer_scarlett_gen2.c:824: port_type < SCARLETT2_PORT_TYPE_COUNT;
  359. linux-5.7/sound/usb/mixer_scarlett_gen2.c:826: if (num < ports[port_type].num[SCARLETT2_PORT_IN])
  360. linux-5.7/sound/usb/mixer_scarlett_gen2.c:828: num -= ports[port_type].num[SCARLETT2_PORT_IN];
  361. linux-5.7/sound/usb/mixer_scarlett_gen2.c:836:static int scarlett2_usb_set_mux(struct usb_mixer_interface *mixer)
  362. linux-5.7/sound/usb/mixer_scarlett_gen2.c:838: struct scarlett2_mixer_data *private = mixer->private_data;
  363. linux-5.7/sound/usb/mixer_scarlett_gen2.c:839: const struct scarlett2_device_info *info = private->info;
  364. linux-5.7/sound/usb/mixer_scarlett_gen2.c:840: const struct scarlett2_ports *ports = info->ports;
  365. linux-5.7/sound/usb/mixer_scarlett_gen2.c:843: static const int assignment_order[SCARLETT2_PORT_TYPE_COUNT] = {
  366. linux-5.7/sound/usb/mixer_scarlett_gen2.c:844: SCARLETT2_PORT_TYPE_PCM,
  367. linux-5.7/sound/usb/mixer_scarlett_gen2.c:845: SCARLETT2_PORT_TYPE_ANALOGUE,
  368. linux-5.7/sound/usb/mixer_scarlett_gen2.c:846: SCARLETT2_PORT_TYPE_SPDIF,
  369. linux-5.7/sound/usb/mixer_scarlett_gen2.c:847: SCARLETT2_PORT_TYPE_ADAT,
  370. linux-5.7/sound/usb/mixer_scarlett_gen2.c:848: SCARLETT2_PORT_TYPE_MIX,
  371. linux-5.7/sound/usb/mixer_scarlett_gen2.c:849: SCARLETT2_PORT_TYPE_NONE,
  372. linux-5.7/sound/usb/mixer_scarlett_gen2.c:855: __le32 data[SCARLETT2_MUX_MAX];
  373. linux-5.7/sound/usb/mixer_scarlett_gen2.c:861: for (rate = 0, port_dir_rate = SCARLETT2_PORT_OUT_44;
  374. linux-5.7/sound/usb/mixer_scarlett_gen2.c:862: port_dir_rate <= SCARLETT2_PORT_OUT_176;
  375. linux-5.7/sound/usb/mixer_scarlett_gen2.c:869: order_num < SCARLETT2_PORT_TYPE_COUNT;
  376. linux-5.7/sound/usb/mixer_scarlett_gen2.c:872: int j = scarlett2_get_port_start_num(ports,
  377. linux-5.7/sound/usb/mixer_scarlett_gen2.c:873: SCARLETT2_PORT_OUT,
  378. linux-5.7/sound/usb/mixer_scarlett_gen2.c:889: scarlett2_mux_src_num_to_id(
  379. linux-5.7/sound/usb/mixer_scarlett_gen2.c:895: j += ports[port_type].num[SCARLETT2_PORT_OUT] -
  380. linux-5.7/sound/usb/mixer_scarlett_gen2.c:899: err = scarlett2_usb(mixer, SCARLETT2_USB_SET_MUX,
  381. linux-5.7/sound/usb/mixer_scarlett_gen2.c:910:static int scarlett2_usb_get_meter_levels(struct usb_mixer_interface *mixer,
  382. linux-5.7/sound/usb/mixer_scarlett_gen2.c:918: u32 resp[SCARLETT2_NUM_METERS];
  383. linux-5.7/sound/usb/mixer_scarlett_gen2.c:922: req.num_meters = cpu_to_le16(SCARLETT2_NUM_METERS);
  384. linux-5.7/sound/usb/mixer_scarlett_gen2.c:923: req.magic = cpu_to_le32(SCARLETT2_USB_METER_LEVELS_GET_MAGIC);
  385. linux-5.7/sound/usb/mixer_scarlett_gen2.c:924: err = scarlett2_usb(mixer, SCARLETT2_USB_GET_METER_LEVELS,
  386. linux-5.7/sound/usb/mixer_scarlett_gen2.c:930: for (i = 0; i < SCARLETT2_NUM_METERS; i++)
  387. linux-5.7/sound/usb/mixer_scarlett_gen2.c:939:static int scarlett2_add_new_ctl(struct usb_mixer_interface *mixer,
  388. linux-5.7/sound/usb/mixer_scarlett_gen2.c:981:static int scarlett2_update_volumes(struct usb_mixer_interface *mixer)
  389. linux-5.7/sound/usb/mixer_scarlett_gen2.c:983: struct scarlett2_mixer_data *private = mixer->private_data;
  390. linux-5.7/sound/usb/mixer_scarlett_gen2.c:984: const struct scarlett2_ports *ports = private->info->ports;
  391. linux-5.7/sound/usb/mixer_scarlett_gen2.c:985: struct scarlett2_usb_volume_status volume_status;
  392. linux-5.7/sound/usb/mixer_scarlett_gen2.c:987: ports[SCARLETT2_PORT_TYPE_ANALOGUE].num[SCARLETT2_PORT_OUT];
  393. linux-5.7/sound/usb/mixer_scarlett_gen2.c:992: err = scarlett2_usb_get_volume_status(mixer, &volume_status);
  394. linux-5.7/sound/usb/mixer_scarlett_gen2.c:997: volume_status.master_vol + SCARLETT2_VOLUME_BIAS,
  395. linux-5.7/sound/usb/mixer_scarlett_gen2.c:998: 0, SCARLETT2_VOLUME_BIAS);
  396. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1011:static int scarlett2_volume_ctl_info(struct snd_kcontrol *kctl,
  397. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1019: uinfo->value.integer.max = SCARLETT2_VOLUME_BIAS;
  398. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1024:static int scarlett2_master_volume_ctl_get(struct snd_kcontrol *kctl,
  399. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1029: struct scarlett2_mixer_data *private = mixer->private_data;
  400. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1033: scarlett2_update_volumes(mixer);
  401. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1041:static int scarlett2_volume_ctl_get(struct snd_kcontrol *kctl,
  402. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1046: struct scarlett2_mixer_data *private = mixer->private_data;
  403. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1051: scarlett2_update_volumes(mixer);
  404. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1059:static int scarlett2_volume_ctl_put(struct snd_kcontrol *kctl,
  405. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1064: struct scarlett2_mixer_data *private = mixer->private_data;
  406. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1077: err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_LINE_OUT_VOLUME,
  407. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1078: index, val - SCARLETT2_VOLUME_BIAS);
  408. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1088: db_scale_scarlett2_gain, -SCARLETT2_VOLUME_BIAS * 100, 0
  409. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1091:static const struct snd_kcontrol_new scarlett2_master_volume_ctl = {
  410. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1096: .info = scarlett2_volume_ctl_info,
  411. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1097: .get = scarlett2_master_volume_ctl_get,
  412. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1099: .tlv = { .p = db_scale_scarlett2_gain }
  413. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1102:static const struct snd_kcontrol_new scarlett2_line_out_volume_ctl = {
  414. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1107: .info = scarlett2_volume_ctl_info,
  415. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1108: .get = scarlett2_volume_ctl_get,
  416. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1109: .put = scarlett2_volume_ctl_put,
  417. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1111: .tlv = { .p = db_scale_scarlett2_gain }
  418. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1116:static int scarlett2_sw_hw_enum_ctl_info(struct snd_kcontrol *kctl,
  419. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1126:static int scarlett2_sw_hw_enum_ctl_get(struct snd_kcontrol *kctl,
  420. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1130: struct scarlett2_mixer_data *private = elem->head.mixer->private_data;
  421. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1137:static int scarlett2_sw_hw_enum_ctl_put(struct snd_kcontrol *kctl,
  422. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1142: struct scarlett2_mixer_data *private = mixer->private_data;
  423. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1171: err = scarlett2_usb_set_config(
  424. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1172: mixer, SCARLETT2_CONFIG_LINE_OUT_VOLUME,
  425. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1173: index, private->master_vol - SCARLETT2_VOLUME_BIAS);
  426. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1182: err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_SW_HW_SWITCH,
  427. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1190:static const struct snd_kcontrol_new scarlett2_sw_hw_enum_ctl = {
  428. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1193: .info = scarlett2_sw_hw_enum_ctl_info,
  429. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1194: .get = scarlett2_sw_hw_enum_ctl_get,
  430. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1195: .put = scarlett2_sw_hw_enum_ctl_put,
  431. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1200:static int scarlett2_level_enum_ctl_info(struct snd_kcontrol *kctl,
  432. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1210:static int scarlett2_level_enum_ctl_get(struct snd_kcontrol *kctl,
  433. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1214: struct scarlett2_mixer_data *private = elem->head.mixer->private_data;
  434. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1221:static int scarlett2_level_enum_ctl_put(struct snd_kcontrol *kctl,
  435. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1226: struct scarlett2_mixer_data *private = mixer->private_data;
  436. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1242: err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_LEVEL_SWITCH,
  437. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1250:static const struct snd_kcontrol_new scarlett2_level_enum_ctl = {
  438. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1253: .info = scarlett2_level_enum_ctl_info,
  439. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1254: .get = scarlett2_level_enum_ctl_get,
  440. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1255: .put = scarlett2_level_enum_ctl_put,
  441. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1260:static int scarlett2_pad_ctl_get(struct snd_kcontrol *kctl,
  442. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1264: struct scarlett2_mixer_data *private = elem->head.mixer->private_data;
  443. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1271:static int scarlett2_pad_ctl_put(struct snd_kcontrol *kctl,
  444. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1276: struct scarlett2_mixer_data *private = mixer->private_data;
  445. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1292: err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_PAD_SWITCH,
  446. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1300:static const struct snd_kcontrol_new scarlett2_pad_ctl = {
  447. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1304: .get = scarlett2_pad_ctl_get,
  448. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1305: .put = scarlett2_pad_ctl_put,
  449. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1310:static int scarlett2_button_ctl_get(struct snd_kcontrol *kctl,
  450. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1315: struct scarlett2_mixer_data *private = mixer->private_data;
  451. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1319: scarlett2_update_volumes(mixer);
  452. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1327:static int scarlett2_button_ctl_put(struct snd_kcontrol *kctl,
  453. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1332: struct scarlett2_mixer_data *private = mixer->private_data;
  454. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1348: err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_BUTTONS,
  455. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1356:static const struct snd_kcontrol_new scarlett2_button_ctl = {
  456. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1360: .get = scarlett2_button_ctl_get,
  457. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1361: .put = scarlett2_button_ctl_put
  458. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1366:static int scarlett2_add_line_out_ctls(struct usb_mixer_interface *mixer)
  459. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1368: struct scarlett2_mixer_data *private = mixer->private_data;
  460. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1369: const struct scarlett2_device_info *info = private->info;
  461. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1370: const struct scarlett2_ports *ports = info->ports;
  462. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1372: ports[SCARLETT2_PORT_TYPE_ANALOGUE].num[SCARLETT2_PORT_OUT];
  463. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1379: err = scarlett2_add_new_ctl(mixer,
  464. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1380: &scarlett2_master_volume_ctl,
  465. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1398: err = scarlett2_add_new_ctl(mixer,
  466. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1399: &scarlett2_line_out_volume_ctl,
  467. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1414: err = scarlett2_add_new_ctl(mixer,
  468. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1415: &scarlett2_sw_hw_enum_ctl,
  469. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1424: err = scarlett2_add_new_ctl(mixer, &scarlett2_button_ctl,
  470. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1425: i, 1, scarlett2_button_names[i],
  471. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1436:static int scarlett2_add_line_in_ctls(struct usb_mixer_interface *mixer)
  472. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1438: struct scarlett2_mixer_data *private = mixer->private_data;
  473. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1439: const struct scarlett2_device_info *info = private->info;
  474. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1446: err = scarlett2_add_new_ctl(mixer, &scarlett2_level_enum_ctl,
  475. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1455: err = scarlett2_add_new_ctl(mixer, &scarlett2_pad_ctl,
  476. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1466:static int scarlett2_mixer_ctl_info(struct snd_kcontrol *kctl,
  477. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1474: uinfo->value.integer.max = SCARLETT2_MIXER_MAX_VALUE;
  478. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1479:static int scarlett2_mixer_ctl_get(struct snd_kcontrol *kctl,
  479. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1483: struct scarlett2_mixer_data *private = elem->head.mixer->private_data;
  480. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1489:static int scarlett2_mixer_ctl_put(struct snd_kcontrol *kctl,
  481. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1494: struct scarlett2_mixer_data *private = mixer->private_data;
  482. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1495: const struct scarlett2_device_info *info = private->info;
  483. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1496: const struct scarlett2_ports *ports = info->ports;
  484. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1503: num_mixer_in = ports[SCARLETT2_PORT_TYPE_MIX].num[SCARLETT2_PORT_OUT];
  485. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1510: err = scarlett2_usb_set_mix(mixer, mix_num);
  486. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1520: db_scale_scarlett2_mixer,
  487. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1521: SCARLETT2_MIXER_MIN_DB * 100,
  488. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1522: SCARLETT2_MIXER_MAX_DB * 100
  489. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1525:static const struct snd_kcontrol_new scarlett2_mixer_ctl = {
  490. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1530: .info = scarlett2_mixer_ctl_info,
  491. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1531: .get = scarlett2_mixer_ctl_get,
  492. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1532: .put = scarlett2_mixer_ctl_put,
  493. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1533: .private_value = SCARLETT2_MIXER_MAX_DB, /* max value */
  494. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1534: .tlv = { .p = db_scale_scarlett2_mixer }
  495. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1537:static int scarlett2_add_mixer_ctls(struct usb_mixer_interface *mixer)
  496. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1539: struct scarlett2_mixer_data *private = mixer->private_data;
  497. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1540: const struct scarlett2_ports *ports = private->info->ports;
  498. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1545: int num_inputs = ports[SCARLETT2_PORT_TYPE_MIX].num[SCARLETT2_PORT_OUT];
  499. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1546: int num_outputs = ports[SCARLETT2_PORT_TYPE_MIX].num[SCARLETT2_PORT_IN];
  500. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1553: err = scarlett2_add_new_ctl(mixer, &scarlett2_mixer_ctl,
  501. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1565:static int scarlett2_mux_src_enum_ctl_info(struct snd_kcontrol *kctl,
  502. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1569: struct scarlett2_mixer_data *private = elem->head.mixer->private_data;
  503. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1570: const struct scarlett2_ports *ports = private->info->ports;
  504. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1583: port_type < SCARLETT2_PORT_TYPE_COUNT;
  505. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1585: if (item < ports[port_type].num[SCARLETT2_PORT_IN]) {
  506. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1591: item -= ports[port_type].num[SCARLETT2_PORT_IN];
  507. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1597:static int scarlett2_mux_src_enum_ctl_get(struct snd_kcontrol *kctl,
  508. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1601: struct scarlett2_mixer_data *private = elem->head.mixer->private_data;
  509. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1607:static int scarlett2_mux_src_enum_ctl_put(struct snd_kcontrol *kctl,
  510. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1612: struct scarlett2_mixer_data *private = mixer->private_data;
  511. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1626: err = scarlett2_usb_set_mux(mixer);
  512. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1635:static const struct snd_kcontrol_new scarlett2_mux_src_enum_ctl = {
  513. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1638: .info = scarlett2_mux_src_enum_ctl_info,
  514. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1639: .get = scarlett2_mux_src_enum_ctl_get,
  515. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1640: .put = scarlett2_mux_src_enum_ctl_put,
  516. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1643:static int scarlett2_add_mux_enums(struct usb_mixer_interface *mixer)
  517. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1645: struct scarlett2_mixer_data *private = mixer->private_data;
  518. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1646: const struct scarlett2_ports *ports = private->info->ports;
  519. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1650: port_type < SCARLETT2_PORT_TYPE_COUNT;
  520. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1653: channel < ports[port_type].num[SCARLETT2_PORT_OUT];
  521. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1662: err = scarlett2_add_new_ctl(mixer,
  522. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1663: &scarlett2_mux_src_enum_ctl,
  523. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1675:static int scarlett2_meter_ctl_info(struct snd_kcontrol *kctl,
  524. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1688:static int scarlett2_meter_ctl_get(struct snd_kcontrol *kctl,
  525. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1692: u16 meter_levels[SCARLETT2_NUM_METERS];
  526. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1695: err = scarlett2_usb_get_meter_levels(elem->head.mixer, meter_levels);
  527. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1705:static const struct snd_kcontrol_new scarlett2_meter_ctl = {
  528. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1709: .info = scarlett2_meter_ctl_info,
  529. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1710: .get = scarlett2_meter_ctl_get
  530. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1713:static int scarlett2_add_meter_ctl(struct usb_mixer_interface *mixer)
  531. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1715: return scarlett2_add_new_ctl(mixer, &scarlett2_meter_ctl,
  532. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1716: 0, SCARLETT2_NUM_METERS,
  533. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1722:static void scarlett2_private_free(struct usb_mixer_interface *mixer)
  534. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1724: struct scarlett2_mixer_data *private = mixer->private_data;
  535. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1731:static void scarlett2_private_suspend(struct usb_mixer_interface *mixer)
  536. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1733: struct scarlett2_mixer_data *private = mixer->private_data;
  537. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1736: scarlett2_config_save(private->mixer);
  538. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1741:static int scarlett2_count_mux_srcs(const struct scarlett2_ports *ports)
  539. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1746: port_type < SCARLETT2_PORT_TYPE_COUNT;
  540. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1748: count += ports[port_type].num[SCARLETT2_PORT_IN];
  541. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1756:static void scarlett2_init_routing(u8 *mux,
  542. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1757: const struct scarlett2_ports *ports)
  543. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1763: SCARLETT2_PORT_TYPE_ANALOGUE,
  544. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1764: SCARLETT2_PORT_TYPE_SPDIF,
  545. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1765: SCARLETT2_PORT_TYPE_ADAT,
  546. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1770: output_num = scarlett2_get_port_start_num(ports,
  547. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1771: SCARLETT2_PORT_OUT,
  548. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1772: SCARLETT2_PORT_TYPE_PCM);
  549. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1773: output_count = ports[SCARLETT2_PORT_TYPE_PCM].num[SCARLETT2_PORT_OUT];
  550. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1778: input_num = scarlett2_get_port_start_num(
  551. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1779: ports, SCARLETT2_PORT_IN, port_type);
  552. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1780: input_count = ports[port_type].num[SCARLETT2_PORT_IN];
  553. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1788: input_num = scarlett2_get_port_start_num(ports,
  554. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1789: SCARLETT2_PORT_IN,
  555. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1790: SCARLETT2_PORT_TYPE_PCM);
  556. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1791: input_count = ports[SCARLETT2_PORT_TYPE_PCM].num[SCARLETT2_PORT_IN];
  557. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1796: output_num = scarlett2_get_port_start_num(
  558. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1797: ports, SCARLETT2_PORT_OUT, port_type);
  559. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1798: output_count = ports[port_type].num[SCARLETT2_PORT_OUT];
  560. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1807:static int scarlett2_init_private(struct usb_mixer_interface *mixer,
  561. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1808: const struct scarlett2_device_info *info)
  562. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1810: struct scarlett2_mixer_data *private =
  563. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1811: kzalloc(sizeof(struct scarlett2_mixer_data), GFP_KERNEL);
  564. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1818: INIT_DELAYED_WORK(&private->work, scarlett2_config_save_work);
  565. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1820: private->num_mux_srcs = scarlett2_count_mux_srcs(info->ports);
  566. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1821: private->scarlett2_seq = 0;
  567. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1824: mixer->private_free = scarlett2_private_free;
  568. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1825: mixer->private_suspend = scarlett2_private_suspend;
  569. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1828: scarlett2_init_routing(private->mux, info->ports);
  570. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1831: return scarlett2_usb(mixer, SCARLETT2_USB_INIT_SEQ, NULL, 0, NULL, 0);
  571. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1835:static int scarlett2_read_configs(struct usb_mixer_interface *mixer)
  572. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1837: struct scarlett2_mixer_data *private = mixer->private_data;
  573. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1838: const struct scarlett2_device_info *info = private->info;
  574. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1839: const struct scarlett2_ports *ports = info->ports;
  575. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1841: ports[SCARLETT2_PORT_TYPE_ANALOGUE].num[SCARLETT2_PORT_OUT];
  576. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1842: u8 level_switches[SCARLETT2_LEVEL_SWITCH_MAX];
  577. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1843: u8 pad_switches[SCARLETT2_PAD_SWITCH_MAX];
  578. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1844: struct scarlett2_usb_volume_status volume_status;
  579. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1848: err = scarlett2_usb_get_config(
  580. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1850: SCARLETT2_CONFIG_LEVEL_SWITCH,
  581. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1860: err = scarlett2_usb_get_config(
  582. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1862: SCARLETT2_CONFIG_PAD_SWITCH,
  583. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1871: err = scarlett2_usb_get_volume_status(mixer, &volume_status);
  584. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1876: volume_status.master_vol + SCARLETT2_VOLUME_BIAS,
  585. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1877: 0, SCARLETT2_VOLUME_BIAS);
  586. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1889: volume = clamp(volume + SCARLETT2_VOLUME_BIAS,
  587. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1890: 0, SCARLETT2_VOLUME_BIAS);
  588. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1901:static void scarlett2_mixer_interrupt_vol_change(
  589. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1904: struct scarlett2_mixer_data *private = mixer->private_data;
  590. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1905: const struct scarlett2_ports *ports = private->info->ports;
  591. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1907: ports[SCARLETT2_PORT_TYPE_ANALOGUE].num[SCARLETT2_PORT_OUT];
  592. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1924:static void scarlett2_mixer_interrupt_button_change(
  593. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1927: struct scarlett2_mixer_data *private = mixer->private_data;
  594. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1938:static void scarlett2_mixer_interrupt(struct urb *urb)
  595. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1950: if (data & SCARLETT2_USB_INTERRUPT_VOL_CHANGE)
  596. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1951: scarlett2_mixer_interrupt_vol_change(mixer);
  597. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1952: if (data & SCARLETT2_USB_INTERRUPT_BUTTON_CHANGE)
  598. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1953: scarlett2_mixer_interrupt_button_change(mixer);
  599. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1956: "scarlett mixer interrupt length %d\n", len);
  600. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1968:static int scarlett2_mixer_status_create(struct usb_mixer_interface *mixer)
  601. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1972: SCARLETT2_USB_INTERRUPT_ENDPOINT);
  602. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1988: transfer_buffer = kmalloc(SCARLETT2_USB_INTERRUPT_MAX_DATA, GFP_KERNEL);
  603. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1993: transfer_buffer, SCARLETT2_USB_INTERRUPT_MAX_DATA,
  604. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1994: scarlett2_mixer_interrupt, mixer,
  605. linux-5.7/sound/usb/mixer_scarlett_gen2.c:1995: SCARLETT2_USB_INTERRUPT_INTERVAL);
  606. linux-5.7/sound/usb/mixer_scarlett_gen2.c:2001:int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer)
  607. linux-5.7/sound/usb/mixer_scarlett_gen2.c:2003: const struct scarlett2_device_info *info;
  608. linux-5.7/sound/usb/mixer_scarlett_gen2.c:2024: if (!(mixer->chip->setup & SCARLETT2_ENABLE)) {
  609. linux-5.7/sound/usb/mixer_scarlett_gen2.c:2026: "Focusrite Scarlett Gen 2 Mixer Driver disabled; "
  610. linux-5.7/sound/usb/mixer_scarlett_gen2.c:2033: err = scarlett2_init_private(mixer, info);
  611. linux-5.7/sound/usb/mixer_scarlett_gen2.c:2038: err = scarlett2_read_configs(mixer);
  612. linux-5.7/sound/usb/mixer_scarlett_gen2.c:2043: err = scarlett2_add_line_out_ctls(mixer);
  613. linux-5.7/sound/usb/mixer_scarlett_gen2.c:2048: err = scarlett2_add_line_in_ctls(mixer);
  614. linux-5.7/sound/usb/mixer_scarlett_gen2.c:2053: err = scarlett2_add_mux_enums(mixer);
  615. linux-5.7/sound/usb/mixer_scarlett_gen2.c:2058: err = scarlett2_add_mixer_ctls(mixer);
  616. linux-5.7/sound/usb/mixer_scarlett_gen2.c:2063: err = scarlett2_add_meter_ctl(mixer);
  617. linux-5.7/sound/usb/mixer_scarlett_gen2.c:2069: err = scarlett2_mixer_status_create(mixer);
  618. linux-5.7/sound/usb/Makefile:13: mixer_scarlett.o \
  619. linux-5.7/sound/usb/Makefile:14: mixer_scarlett_gen2.o \
  620. linux-5.7/sound/usb/mixer_scarlett.h:2:#ifndef __USB_MIXER_SCARLETT_H
  621. linux-5.7/sound/usb/mixer_scarlett.h:3:#define __USB_MIXER_SCARLETT_H
  622. linux-5.7/sound/usb/mixer_scarlett.h:5:int snd_scarlett_controls_create(struct usb_mixer_interface *mixer);
  623. linux-5.7/sound/usb/mixer_scarlett.h:7:#endif /* __USB_MIXER_SCARLETT_H */
  624. linux-5.7/sound/usb/quirks.c:1810: case USB_ID(0x1235, 0x8200): /* Focusrite Scarlett 2i4 2nd gen */
  625. linux-5.7/sound/usb/quirks.c:1811: case USB_ID(0x1235, 0x8202): /* Focusrite Scarlett 2i2 2nd gen */
  626. linux-5.7/sound/usb/quirks.c:1812: case USB_ID(0x1235, 0x8205): /* Focusrite Scarlett Solo 2nd gen */

Scarlet Solo 2nd gen, seems supported in kernel 5.7..