Lines Matching full:mixer
5 * Quirks and vendor-specific extensions for mixer interfaces
34 #include "mixer.h"
57 static int snd_create_std_mono_ctl_offset(struct usb_mixer_interface *mixer, in snd_create_std_mono_ctl_offset() argument
73 snd_usb_mixer_elem_init_std(&cval->head, mixer, unitid); in snd_create_std_mono_ctl_offset()
106 /* Add control to mixer */ in snd_create_std_mono_ctl_offset()
110 static int snd_create_std_mono_ctl(struct usb_mixer_interface *mixer, in snd_create_std_mono_ctl() argument
118 return snd_create_std_mono_ctl_offset(mixer, unitid, control, cmask, in snd_create_std_mono_ctl()
125 static int snd_create_std_mono_table(struct usb_mixer_interface *mixer, in snd_create_std_mono_table() argument
131 err = snd_create_std_mono_ctl(mixer, t->unitid, t->control, in snd_create_std_mono_table()
141 static int add_single_ctl_with_resume(struct usb_mixer_interface *mixer, in add_single_ctl_with_resume() argument
155 list->mixer = mixer; in add_single_ctl_with_resume()
197 struct usb_mixer_interface *mixer = urb->context; in snd_usb_soundblaster_remote_complete() local
198 const struct rc_config *rc = mixer->rc_cfg; in snd_usb_soundblaster_remote_complete()
204 code = mixer->rc_buffer[rc->offset]; in snd_usb_soundblaster_remote_complete()
206 code |= mixer->rc_buffer[rc->offset + 1] << 8; in snd_usb_soundblaster_remote_complete()
208 /* the Mute button actually changes the mixer control */ in snd_usb_soundblaster_remote_complete()
210 snd_usb_mixer_notify_id(mixer, rc->mute_mixer_id); in snd_usb_soundblaster_remote_complete()
211 mixer->rc_code = code; in snd_usb_soundblaster_remote_complete()
213 wake_up(&mixer->rc_waitq); in snd_usb_soundblaster_remote_complete()
219 struct usb_mixer_interface *mixer = hw->private_data; in snd_usb_sbrc_hwdep_read() local
225 err = wait_event_interruptible(mixer->rc_waitq, in snd_usb_sbrc_hwdep_read()
226 (rc_code = xchg(&mixer->rc_code, 0)) != 0); in snd_usb_sbrc_hwdep_read()
239 struct usb_mixer_interface *mixer = hw->private_data; in snd_usb_sbrc_hwdep_poll() local
241 poll_wait(file, &mixer->rc_waitq, wait); in snd_usb_sbrc_hwdep_poll()
242 return mixer->rc_code ? EPOLLIN | EPOLLRDNORM : 0; in snd_usb_sbrc_hwdep_poll()
245 static int snd_usb_soundblaster_remote_init(struct usb_mixer_interface *mixer) in snd_usb_soundblaster_remote_init() argument
251 if (rc_configs[i].usb_id == mixer->chip->usb_id) in snd_usb_soundblaster_remote_init()
255 mixer->rc_cfg = &rc_configs[i]; in snd_usb_soundblaster_remote_init()
257 len = mixer->rc_cfg->packet_length; in snd_usb_soundblaster_remote_init()
259 init_waitqueue_head(&mixer->rc_waitq); in snd_usb_soundblaster_remote_init()
260 err = snd_hwdep_new(mixer->chip->card, "SB remote control", 0, &hwdep); in snd_usb_soundblaster_remote_init()
264 "%s remote control", mixer->chip->card->shortname); in snd_usb_soundblaster_remote_init()
266 hwdep->private_data = mixer; in snd_usb_soundblaster_remote_init()
271 mixer->rc_urb = usb_alloc_urb(0, GFP_KERNEL); in snd_usb_soundblaster_remote_init()
272 if (!mixer->rc_urb) in snd_usb_soundblaster_remote_init()
274 mixer->rc_setup_packet = kmalloc(sizeof(*mixer->rc_setup_packet), GFP_KERNEL); in snd_usb_soundblaster_remote_init()
275 if (!mixer->rc_setup_packet) { in snd_usb_soundblaster_remote_init()
276 usb_free_urb(mixer->rc_urb); in snd_usb_soundblaster_remote_init()
277 mixer->rc_urb = NULL; in snd_usb_soundblaster_remote_init()
280 mixer->rc_setup_packet->bRequestType = in snd_usb_soundblaster_remote_init()
282 mixer->rc_setup_packet->bRequest = UAC_GET_MEM; in snd_usb_soundblaster_remote_init()
283 mixer->rc_setup_packet->wValue = cpu_to_le16(0); in snd_usb_soundblaster_remote_init()
284 mixer->rc_setup_packet->wIndex = cpu_to_le16(0); in snd_usb_soundblaster_remote_init()
285 mixer->rc_setup_packet->wLength = cpu_to_le16(len); in snd_usb_soundblaster_remote_init()
286 usb_fill_control_urb(mixer->rc_urb, mixer->chip->dev, in snd_usb_soundblaster_remote_init()
287 usb_rcvctrlpipe(mixer->chip->dev, 0), in snd_usb_soundblaster_remote_init()
288 (u8*)mixer->rc_setup_packet, mixer->rc_buffer, len, in snd_usb_soundblaster_remote_init()
289 snd_usb_soundblaster_remote_complete, mixer); in snd_usb_soundblaster_remote_init()
301 static int snd_audigy2nx_led_update(struct usb_mixer_interface *mixer, in snd_audigy2nx_led_update() argument
304 struct snd_usb_audio *chip = mixer->chip; in snd_audigy2nx_led_update()
335 struct usb_mixer_interface *mixer = list->mixer; in snd_audigy2nx_led_put() local
346 err = snd_audigy2nx_led_update(mixer, value, index); in snd_audigy2nx_led_put()
354 return snd_audigy2nx_led_update(list->mixer, priv_value >> 8, in snd_audigy2nx_led_resume()
372 static int snd_audigy2nx_controls_create(struct usb_mixer_interface *mixer) in snd_audigy2nx_controls_create() argument
380 if ((mixer->chip->usb_id == USB_ID(0x041e, 0x3042)) && i == 0) in snd_audigy2nx_controls_create()
383 if ((mixer->chip->usb_id == USB_ID(0x041e, 0x30df)) && i == 0) in snd_audigy2nx_controls_create()
386 (mixer->chip->usb_id == USB_ID(0x041e, 0x3040) || in snd_audigy2nx_controls_create()
387 mixer->chip->usb_id == USB_ID(0x041e, 0x3042) || in snd_audigy2nx_controls_create()
388 mixer->chip->usb_id == USB_ID(0x041e, 0x30df) || in snd_audigy2nx_controls_create()
389 mixer->chip->usb_id == USB_ID(0x041e, 0x3048))) in snd_audigy2nx_controls_create()
395 err = add_single_ctl_with_resume(mixer, 0, in snd_audigy2nx_controls_create()
423 struct usb_mixer_interface *mixer = entry->private_data; in snd_audigy2nx_proc_read() local
427 snd_iprintf(buffer, "%s jacks\n\n", mixer->chip->card->shortname); in snd_audigy2nx_proc_read()
428 if (mixer->chip->usb_id == USB_ID(0x041e, 0x3020)) in snd_audigy2nx_proc_read()
430 else if (mixer->chip->usb_id == USB_ID(0x041e, 0x3040) || in snd_audigy2nx_proc_read()
431 mixer->chip->usb_id == USB_ID(0x041e, 0x3048)) in snd_audigy2nx_proc_read()
438 err = snd_usb_lock_shutdown(mixer->chip); in snd_audigy2nx_proc_read()
441 err = snd_usb_ctl_msg(mixer->chip->dev, in snd_audigy2nx_proc_read()
442 usb_rcvctrlpipe(mixer->chip->dev, 0), in snd_audigy2nx_proc_read()
446 snd_usb_unlock_shutdown(mixer->chip); in snd_audigy2nx_proc_read()
470 static int snd_emu0204_ch_switch_update(struct usb_mixer_interface *mixer, in snd_emu0204_ch_switch_update() argument
473 struct snd_usb_audio *chip = mixer->chip; in snd_emu0204_ch_switch_update()
495 struct usb_mixer_interface *mixer = list->mixer; in snd_emu0204_ch_switch_put() local
506 err = snd_emu0204_ch_switch_update(mixer, value); in snd_emu0204_ch_switch_put()
512 return snd_emu0204_ch_switch_update(list->mixer, in snd_emu0204_ch_switch_resume()
525 static int snd_emu0204_controls_create(struct usb_mixer_interface *mixer) in snd_emu0204_controls_create() argument
527 return add_single_ctl_with_resume(mixer, 0, in snd_emu0204_controls_create()
541 static int snd_xonar_u1_switch_update(struct usb_mixer_interface *mixer, in snd_xonar_u1_switch_update() argument
544 struct snd_usb_audio *chip = mixer->chip; in snd_xonar_u1_switch_update()
574 err = snd_xonar_u1_switch_update(list->mixer, new_status); in snd_xonar_u1_switch_put()
580 return snd_xonar_u1_switch_update(list->mixer, in snd_xonar_u1_switch_resume()
593 static int snd_xonar_u1_controls_create(struct usb_mixer_interface *mixer) in snd_xonar_u1_controls_create() argument
595 return add_single_ctl_with_resume(mixer, 0, in snd_xonar_u1_controls_create()
683 struct snd_usb_audio *chip = list->mixer->chip; in snd_mbox1_clk_switch_get()
702 static int snd_mbox1_clk_switch_update(struct usb_mixer_interface *mixer, int is_spdif_sync) in snd_mbox1_clk_switch_update() argument
704 struct snd_usb_audio *chip = mixer->chip; in snd_mbox1_clk_switch_update()
734 struct usb_mixer_interface *mixer = list->mixer; in snd_mbox1_clk_switch_put() local
744 err = snd_mbox1_clk_switch_update(mixer, new_val); in snd_mbox1_clk_switch_put()
761 return snd_mbox1_clk_switch_update(list->mixer, list->kctl->private_value); in snd_mbox1_clk_switch_resume()
773 static int snd_mbox1_src_switch_update(struct usb_mixer_interface *mixer, int is_spdif_input) in snd_mbox1_src_switch_update() argument
775 struct snd_usb_audio *chip = mixer->chip; in snd_mbox1_src_switch_update()
804 struct usb_mixer_interface *mixer = list->mixer; in snd_mbox1_src_switch_put() local
814 err = snd_mbox1_src_switch_update(mixer, new_val); in snd_mbox1_src_switch_put()
831 return snd_mbox1_src_switch_update(list->mixer, list->kctl->private_value); in snd_mbox1_src_switch_resume()
856 static int snd_mbox1_controls_create(struct usb_mixer_interface *mixer) in snd_mbox1_controls_create() argument
859 err = add_single_ctl_with_resume(mixer, 0, in snd_mbox1_controls_create()
865 return add_single_ctl_with_resume(mixer, 1, in snd_mbox1_controls_create()
874 static int snd_ni_control_init_val(struct usb_mixer_interface *mixer, in snd_ni_control_init_val() argument
877 struct usb_device *dev = mixer->chip->dev; in snd_ni_control_init_val()
905 struct snd_usb_audio *chip = list->mixer->chip; in snd_ni_update_cur_val()
991 static int snd_nativeinstruments_create_mixer(struct usb_mixer_interface *mixer, in snd_nativeinstruments_create_mixer() argument
1010 err = add_single_ctl_with_resume(mixer, 0, in snd_nativeinstruments_create_mixer()
1015 snd_ni_control_init_val(mixer, list->kctl); in snd_nativeinstruments_create_mixer()
1034 static int snd_ftu_eff_switch_init(struct usb_mixer_interface *mixer, in snd_ftu_eff_switch_init() argument
1037 struct usb_device *dev = mixer->chip->dev; in snd_ftu_eff_switch_init()
1048 snd_usb_ctrl_intf(mixer->hostif) | ((pval & 0xff) << 8), in snd_ftu_eff_switch_init()
1066 struct snd_usb_audio *chip = list->mixer->chip; in snd_ftu_eff_switch_update()
1082 snd_usb_ctrl_intf(list->mixer->hostif) | ((pval & 0xff) << 8), in snd_ftu_eff_switch_update()
1106 static int snd_ftu_create_effect_switch(struct usb_mixer_interface *mixer, in snd_ftu_create_effect_switch() argument
1121 err = add_single_ctl_with_resume(mixer, bUnitID, in snd_ftu_create_effect_switch()
1127 snd_ftu_eff_switch_init(mixer, list->kctl); in snd_ftu_create_effect_switch()
1132 static int snd_ftu_create_volume_ctls(struct usb_mixer_interface *mixer) in snd_ftu_create_volume_ctls() argument
1148 err = snd_create_std_mono_ctl(mixer, id, control, in snd_ftu_create_volume_ctls()
1159 err = snd_create_std_mono_ctl(mixer, id, control, in snd_ftu_create_volume_ctls()
1170 /* This control needs a volume quirk, see mixer.c */
1171 static int snd_ftu_create_effect_volume_ctl(struct usb_mixer_interface *mixer) in snd_ftu_create_effect_volume_ctl() argument
1179 return snd_create_std_mono_ctl(mixer, id, control, cmask, val_type, in snd_ftu_create_effect_volume_ctl()
1183 /* This control needs a volume quirk, see mixer.c */
1184 static int snd_ftu_create_effect_duration_ctl(struct usb_mixer_interface *mixer) in snd_ftu_create_effect_duration_ctl() argument
1192 return snd_create_std_mono_ctl(mixer, id, control, cmask, val_type, in snd_ftu_create_effect_duration_ctl()
1196 /* This control needs a volume quirk, see mixer.c */
1197 static int snd_ftu_create_effect_feedback_ctl(struct usb_mixer_interface *mixer) in snd_ftu_create_effect_feedback_ctl() argument
1205 return snd_create_std_mono_ctl(mixer, id, control, cmask, val_type, in snd_ftu_create_effect_feedback_ctl()
1209 static int snd_ftu_create_effect_return_ctls(struct usb_mixer_interface *mixer) in snd_ftu_create_effect_return_ctls() argument
1223 err = snd_create_std_mono_ctl(mixer, id, control, in snd_ftu_create_effect_return_ctls()
1233 static int snd_ftu_create_effect_send_ctls(struct usb_mixer_interface *mixer) in snd_ftu_create_effect_send_ctls() argument
1247 err = snd_create_std_mono_ctl(mixer, id, control, cmask, in snd_ftu_create_effect_send_ctls()
1257 err = snd_create_std_mono_ctl(mixer, id, control, cmask, in snd_ftu_create_effect_send_ctls()
1266 static int snd_ftu_create_mixer(struct usb_mixer_interface *mixer) in snd_ftu_create_mixer() argument
1270 err = snd_ftu_create_volume_ctls(mixer); in snd_ftu_create_mixer()
1274 err = snd_ftu_create_effect_switch(mixer, 1, 6); in snd_ftu_create_mixer()
1278 err = snd_ftu_create_effect_volume_ctl(mixer); in snd_ftu_create_mixer()
1282 err = snd_ftu_create_effect_duration_ctl(mixer); in snd_ftu_create_mixer()
1286 err = snd_ftu_create_effect_feedback_ctl(mixer); in snd_ftu_create_mixer()
1290 err = snd_ftu_create_effect_return_ctls(mixer); in snd_ftu_create_mixer()
1294 err = snd_ftu_create_effect_send_ctls(mixer); in snd_ftu_create_mixer()
1304 struct usb_mixer_interface *mixer; in snd_emuusb_set_samplerate() local
1308 list_for_each_entry(mixer, &chip->mixer_list, list) { in snd_emuusb_set_samplerate()
1309 if (mixer->id_elems[unitid]) { in snd_emuusb_set_samplerate()
1310 cval = mixer_elem_list_to_info(mixer->id_elems[unitid]); in snd_emuusb_set_samplerate()
1314 snd_usb_mixer_notify_id(mixer, unitid); in snd_emuusb_set_samplerate()
1321 /* C400/C600 volume controls, this control needs a volume quirk, see mixer.c */
1322 static int snd_c400_create_vol_ctls(struct usb_mixer_interface *mixer) in snd_c400_create_vol_ctls() argument
1334 switch (mixer->chip->usb_id) { in snd_c400_create_vol_ctls()
1359 err = snd_create_std_mono_ctl_offset(mixer, id, control, in snd_c400_create_vol_ctls()
1370 /* This control needs a volume quirk, see mixer.c */
1371 static int snd_c400_create_effect_volume_ctl(struct usb_mixer_interface *mixer) in snd_c400_create_effect_volume_ctl() argument
1379 return snd_create_std_mono_ctl(mixer, id, control, cmask, val_type, in snd_c400_create_effect_volume_ctl()
1383 /* This control needs a volume quirk, see mixer.c */
1384 static int snd_c400_create_effect_duration_ctl(struct usb_mixer_interface *mixer) in snd_c400_create_effect_duration_ctl() argument
1392 return snd_create_std_mono_ctl(mixer, id, control, cmask, val_type, in snd_c400_create_effect_duration_ctl()
1396 /* This control needs a volume quirk, see mixer.c */
1397 static int snd_c400_create_effect_feedback_ctl(struct usb_mixer_interface *mixer) in snd_c400_create_effect_feedback_ctl() argument
1405 return snd_create_std_mono_ctl(mixer, id, control, cmask, val_type, in snd_c400_create_effect_feedback_ctl()
1409 static int snd_c400_create_effect_vol_ctls(struct usb_mixer_interface *mixer) in snd_c400_create_effect_vol_ctls() argument
1421 switch (mixer->chip->usb_id) { in snd_c400_create_effect_vol_ctls()
1444 err = snd_create_std_mono_ctl(mixer, id, control, in snd_c400_create_effect_vol_ctls()
1454 static int snd_c400_create_effect_ret_vol_ctls(struct usb_mixer_interface *mixer) in snd_c400_create_effect_ret_vol_ctls() argument
1466 switch (mixer->chip->usb_id) { in snd_c400_create_effect_ret_vol_ctls()
1486 err = snd_create_std_mono_ctl_offset(mixer, id, control, in snd_c400_create_effect_ret_vol_ctls()
1496 static int snd_c400_create_mixer(struct usb_mixer_interface *mixer) in snd_c400_create_mixer() argument
1500 err = snd_c400_create_vol_ctls(mixer); in snd_c400_create_mixer()
1504 err = snd_c400_create_effect_vol_ctls(mixer); in snd_c400_create_mixer()
1508 err = snd_c400_create_effect_ret_vol_ctls(mixer); in snd_c400_create_mixer()
1512 err = snd_ftu_create_effect_switch(mixer, 2, 0x43); in snd_c400_create_mixer()
1516 err = snd_c400_create_effect_volume_ctl(mixer); in snd_c400_create_mixer()
1520 err = snd_c400_create_effect_duration_ctl(mixer); in snd_c400_create_mixer()
1524 err = snd_c400_create_effect_feedback_ctl(mixer); in snd_c400_create_mixer()
1532 * The mixer units for Ebox-44 are corrupt, and even where they
1534 * stereo. So we provide a good mixer here.
1640 struct snd_usb_audio *chip = list->mixer->chip; in snd_microii_spdif_default_get()
1692 struct snd_usb_audio *chip = list->mixer->chip; in snd_microii_spdif_default_update()
1779 struct snd_usb_audio *chip = list->mixer->chip; in snd_microii_spdif_switch_update()
1842 static int snd_microii_controls_create(struct usb_mixer_interface *mixer) in snd_microii_controls_create() argument
1852 err = add_single_ctl_with_resume(mixer, 0, in snd_microii_controls_create()
1872 static int snd_soundblaster_e1_switch_update(struct usb_mixer_interface *mixer, in snd_soundblaster_e1_switch_update() argument
1875 struct snd_usb_audio *chip = mixer->chip; in snd_soundblaster_e1_switch_update()
1903 err = snd_soundblaster_e1_switch_update(list->mixer, value); in snd_soundblaster_e1_switch_put()
1909 return snd_soundblaster_e1_switch_update(list->mixer, in snd_soundblaster_e1_switch_resume()
1932 static int snd_soundblaster_e1_switch_create(struct usb_mixer_interface *mixer) in snd_soundblaster_e1_switch_create() argument
1934 return add_single_ctl_with_resume(mixer, 0, in snd_soundblaster_e1_switch_create()
2004 struct snd_usb_audio *chip = cval->head.mixer->chip; in realtek_ctl_connector_get()
2056 snd_ctl_notify(list->mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE, in realtek_resume_jack()
2061 static int realtek_add_jack(struct usb_mixer_interface *mixer, in realtek_add_jack() argument
2070 snd_usb_mixer_elem_init_std(&cval->head, mixer, in realtek_add_jack()
2088 static int dell_dock_mixer_create(struct usb_mixer_interface *mixer) in dell_dock_mixer_create() argument
2091 struct usb_device *dev = mixer->chip->dev; in dell_dock_mixer_create()
2094 realtek_hda_set(mixer->chip, in dell_dock_mixer_create()
2107 err = realtek_add_jack(mixer, "Line Out Jack", REALTEK_LINE1); in dell_dock_mixer_create()
2110 err = realtek_add_jack(mixer, "Headphone Jack", REALTEK_HP_OUT); in dell_dock_mixer_create()
2113 err = realtek_add_jack(mixer, "Headset Mic Jack", in dell_dock_mixer_create()
2120 static void dell_dock_init_vol(struct usb_mixer_interface *mixer, int ch, int id) in dell_dock_init_vol() argument
2122 struct snd_usb_audio *chip = mixer->chip; in dell_dock_init_vol()
2128 snd_usb_ctrl_intf(mixer->hostif) | (id << 8), in dell_dock_init_vol()
2132 static int dell_dock_mixer_init(struct usb_mixer_interface *mixer) in dell_dock_mixer_init() argument
2135 dell_dock_init_vol(mixer, 1, 16); in dell_dock_mixer_init()
2136 dell_dock_init_vol(mixer, 2, 16); in dell_dock_mixer_init()
2137 dell_dock_init_vol(mixer, 1, 19); in dell_dock_mixer_init()
2138 dell_dock_init_vol(mixer, 2, 19); in dell_dock_mixer_init()
2222 struct snd_usb_audio *chip = list->mixer->chip; in snd_rme_get_status1()
2340 struct snd_usb_audio *chip = list->mixer->chip; in snd_rme_current_freq_get()
2500 static int snd_rme_controls_create(struct usb_mixer_interface *mixer) in snd_rme_controls_create() argument
2505 err = add_single_ctl_with_resume(mixer, 0, in snd_rme_controls_create()
2566 static int snd_bbfpro_ctl_update(struct usb_mixer_interface *mixer, u8 reg, in snd_bbfpro_ctl_update() argument
2571 struct snd_usb_audio *chip = mixer->chip; in snd_bbfpro_ctl_update()
2666 struct usb_mixer_interface *mixer = list->mixer; in snd_bbfpro_ctl_put() local
2693 err = snd_bbfpro_ctl_update(mixer, reg, idx, val); in snd_bbfpro_ctl_put()
2707 return snd_bbfpro_ctl_update(list->mixer, reg, idx, value); in snd_bbfpro_ctl_resume()
2710 static int snd_bbfpro_gain_update(struct usb_mixer_interface *mixer, in snd_bbfpro_gain_update() argument
2714 struct snd_usb_audio *chip = mixer->chip; in snd_bbfpro_gain_update()
2774 struct usb_mixer_interface *mixer = list->mixer; in snd_bbfpro_gain_put() local
2796 err = snd_bbfpro_gain_update(mixer, channel, value); in snd_bbfpro_gain_put()
2815 return snd_bbfpro_gain_update(list->mixer, channel, value); in snd_bbfpro_gain_resume()
2818 static int snd_bbfpro_vol_update(struct usb_mixer_interface *mixer, u16 index, in snd_bbfpro_vol_update() argument
2821 struct snd_usb_audio *chip = mixer->chip; in snd_bbfpro_vol_update()
2873 struct usb_mixer_interface *mixer = list->mixer; in snd_bbfpro_vol_put() local
2890 err = snd_bbfpro_vol_update(mixer, idx, new_val); in snd_bbfpro_vol_put()
2900 return snd_bbfpro_vol_update(list->mixer, idx, val); in snd_bbfpro_vol_resume()
2931 static int snd_bbfpro_ctl_add(struct usb_mixer_interface *mixer, u8 reg, in snd_bbfpro_ctl_add() argument
2941 return add_single_ctl_with_resume(mixer, 0, snd_bbfpro_ctl_resume, in snd_bbfpro_ctl_add()
2945 static int snd_bbfpro_gain_add(struct usb_mixer_interface *mixer, u8 channel, in snd_bbfpro_gain_add() argument
2953 return add_single_ctl_with_resume(mixer, 0, snd_bbfpro_gain_resume, in snd_bbfpro_gain_add()
2957 static int snd_bbfpro_vol_add(struct usb_mixer_interface *mixer, u16 index, in snd_bbfpro_vol_add() argument
2965 return add_single_ctl_with_resume(mixer, 0, snd_bbfpro_vol_resume, in snd_bbfpro_vol_add()
2969 static int snd_bbfpro_controls_create(struct usb_mixer_interface *mixer) in snd_bbfpro_controls_create() argument
2989 err = snd_bbfpro_vol_add(mixer, (26 * o + i), name); in snd_bbfpro_controls_create()
2997 err = snd_bbfpro_vol_add(mixer, (26 * o + 12 + i), in snd_bbfpro_controls_create()
3008 err = snd_bbfpro_vol_add(mixer, in snd_bbfpro_controls_create()
3022 err = snd_bbfpro_gain_add(mixer, i, name); in snd_bbfpro_controls_create()
3028 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG1, in snd_bbfpro_controls_create()
3034 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG1, in snd_bbfpro_controls_create()
3040 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG1, in snd_bbfpro_controls_create()
3046 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG1, in snd_bbfpro_controls_create()
3053 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG2, in snd_bbfpro_controls_create()
3059 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG2, in snd_bbfpro_controls_create()
3065 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG2, in snd_bbfpro_controls_create()
3071 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG2, in snd_bbfpro_controls_create()
3077 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG2, in snd_bbfpro_controls_create()
3083 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG2, in snd_bbfpro_controls_create()
3120 struct snd_usb_audio *chip = list->mixer->chip; in snd_rme_digiface_write_reg()
3138 struct snd_usb_audio *chip = list->mixer->chip; in snd_rme_digiface_read_status()
3464 * Mixer apps currently need to drive the mixer using raw USB requests,
3485 static int snd_rme_digiface_controls_create(struct usb_mixer_interface *mixer) in snd_rme_digiface_controls_create() argument
3490 err = add_single_ctl_with_resume(mixer, 0, in snd_rme_digiface_controls_create()
3899 static int snd_djm_controls_update(struct usb_mixer_interface *mixer, in snd_djm_controls_update() argument
3908 err = snd_usb_lock_shutdown(mixer->chip); in snd_djm_controls_update()
3913 mixer->chip->dev, usb_sndctrlpipe(mixer->chip->dev, 0), in snd_djm_controls_update()
3920 snd_usb_unlock_shutdown(mixer->chip); in snd_djm_controls_update()
3934 struct usb_mixer_interface *mixer = list->mixer; in snd_djm_controls_put() local
3945 return snd_djm_controls_update(mixer, device, group, value); in snd_djm_controls_put()
3955 return snd_djm_controls_update(list->mixer, device, group, value); in snd_djm_controls_resume()
3958 static int snd_djm_controls_create(struct usb_mixer_interface *mixer, in snd_djm_controls_create() argument
3982 err = snd_djm_controls_update(mixer, device_idx, i, value); in snd_djm_controls_create()
3985 err = add_single_ctl_with_resume(mixer, 0, snd_djm_controls_resume, in snd_djm_controls_create()
3993 int snd_usb_mixer_apply_create_quirk(struct usb_mixer_interface *mixer) in snd_usb_mixer_apply_create_quirk() argument
3997 err = snd_usb_soundblaster_remote_init(mixer); in snd_usb_mixer_apply_create_quirk()
4001 switch (mixer->chip->usb_id) { in snd_usb_mixer_apply_create_quirk()
4004 err = snd_us16x08_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4011 err = snd_audigy2nx_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4014 snd_card_ro_proc_new(mixer->chip->card, "audigy2nx", in snd_usb_mixer_apply_create_quirk()
4015 mixer, snd_audigy2nx_proc_read); in snd_usb_mixer_apply_create_quirk()
4020 err = snd_emu0204_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4025 err = snd_c400_create_mixer(mixer); in snd_usb_mixer_apply_create_quirk()
4030 err = snd_ftu_create_mixer(mixer); in snd_usb_mixer_apply_create_quirk()
4036 err = snd_xonar_u1_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4040 err = snd_microii_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4044 err = snd_mbox1_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4048 err = snd_nativeinstruments_create_mixer(mixer, in snd_usb_mixer_apply_create_quirk()
4054 err = snd_nativeinstruments_create_mixer(mixer, in snd_usb_mixer_apply_create_quirk()
4061 err = snd_create_std_mono_table(mixer, ebox44_table); in snd_usb_mixer_apply_create_quirk()
4069 err = snd_scarlett_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4092 err = snd_scarlett2_init(mixer); in snd_usb_mixer_apply_create_quirk()
4098 err = snd_fcp_init(mixer); in snd_usb_mixer_apply_create_quirk()
4102 err = snd_soundblaster_e1_switch_create(mixer); in snd_usb_mixer_apply_create_quirk()
4105 err = dell_dock_mixer_create(mixer); in snd_usb_mixer_apply_create_quirk()
4108 err = dell_dock_mixer_init(mixer); in snd_usb_mixer_apply_create_quirk()
4111 err = dell_dock_mixer_create(mixer); in snd_usb_mixer_apply_create_quirk()
4117 err = snd_rme_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4121 err = snd_sc1810_init_mixer(mixer); in snd_usb_mixer_apply_create_quirk()
4124 err = snd_bbfpro_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4128 err = snd_rme_digiface_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4131 err = snd_djm_controls_create(mixer, SND_DJM_250MK2_IDX); in snd_usb_mixer_apply_create_quirk()
4134 err = snd_djm_controls_create(mixer, SND_DJM_450_IDX); in snd_usb_mixer_apply_create_quirk()
4137 err = snd_djm_controls_create(mixer, SND_DJM_750_IDX); in snd_usb_mixer_apply_create_quirk()
4140 err = snd_djm_controls_create(mixer, SND_DJM_750MK2_IDX); in snd_usb_mixer_apply_create_quirk()
4143 err = snd_djm_controls_create(mixer, SND_DJM_850_IDX); in snd_usb_mixer_apply_create_quirk()
4146 err = snd_djm_controls_create(mixer, SND_DJM_900NXS2_IDX); in snd_usb_mixer_apply_create_quirk()
4149 err = snd_djm_controls_create(mixer, SND_DJM_A9_IDX); in snd_usb_mixer_apply_create_quirk()
4156 void snd_usb_mixer_resume_quirk(struct usb_mixer_interface *mixer) in snd_usb_mixer_resume_quirk() argument
4158 switch (mixer->chip->usb_id) { in snd_usb_mixer_resume_quirk()
4160 dell_dock_mixer_init(mixer); in snd_usb_mixer_resume_quirk()
4165 void snd_usb_mixer_rc_memory_change(struct usb_mixer_interface *mixer, in snd_usb_mixer_rc_memory_change() argument
4168 if (!mixer->rc_cfg) in snd_usb_mixer_rc_memory_change()
4173 mixer->rc_urb->dev = mixer->chip->dev; in snd_usb_mixer_rc_memory_change()
4174 usb_submit_urb(mixer->rc_urb, GFP_ATOMIC); in snd_usb_mixer_rc_memory_change()
4183 if (mixer->chip->usb_id == USB_ID(0x041e, 0x3040) || in snd_usb_mixer_rc_memory_change()
4184 mixer->chip->usb_id == USB_ID(0x041e, 0x3048)) in snd_usb_mixer_rc_memory_change()
4185 snd_usb_mixer_notify_id(mixer, mixer->rc_cfg->mute_mixer_id); in snd_usb_mixer_rc_memory_change()
4188 usb_audio_dbg(mixer->chip, "memory change in unknown unit %d\n", unitid); in snd_usb_mixer_rc_memory_change()
4193 static void snd_dragonfly_quirk_db_scale(struct usb_mixer_interface *mixer, in snd_dragonfly_quirk_db_scale() argument
4213 usb_audio_info(mixer->chip, "applying DragonFly dB scale quirk (0-50 variant)\n"); in snd_dragonfly_quirk_db_scale()
4222 usb_audio_info(mixer->chip, "ignoring too narrow dB range on a DragonFly device"); in snd_dragonfly_quirk_db_scale()
4273 void snd_usb_mixer_fu_apply_quirk(struct usb_mixer_interface *mixer, in snd_usb_mixer_fu_apply_quirk() argument
4277 switch (mixer->chip->usb_id) { in snd_usb_mixer_fu_apply_quirk()
4280 snd_dragonfly_quirk_db_scale(mixer, cval, kctl); in snd_usb_mixer_fu_apply_quirk()
4292 if (USB_ID_VENDOR(mixer->chip->usb_id) == 0x047f && in snd_usb_mixer_fu_apply_quirk()
4294 snd_fix_plt_name(mixer->chip, &kctl->id); in snd_usb_mixer_fu_apply_quirk()