Lines Matching full:mixer

5  *   Quirks and vendor-specific extensions for mixer interfaces
35 #include "mixer.h"
58 static int snd_create_std_mono_ctl_offset(struct usb_mixer_interface *mixer, in snd_create_std_mono_ctl_offset() argument
74 snd_usb_mixer_elem_init_std(&cval->head, mixer, unitid); in snd_create_std_mono_ctl_offset()
108 /* Add control to mixer */ in snd_create_std_mono_ctl_offset()
112 static int snd_create_std_mono_ctl(struct usb_mixer_interface *mixer, in snd_create_std_mono_ctl() argument
120 return snd_create_std_mono_ctl_offset(mixer, unitid, control, cmask, in snd_create_std_mono_ctl()
128 static int snd_create_std_mono_table(struct usb_mixer_interface *mixer, in snd_create_std_mono_table() argument
134 err = snd_create_std_mono_ctl(mixer, t->unitid, t->control, in snd_create_std_mono_table()
145 static int add_single_ctl_with_resume(struct usb_mixer_interface *mixer, in add_single_ctl_with_resume() argument
159 list->mixer = mixer; in add_single_ctl_with_resume()
201 struct usb_mixer_interface *mixer = urb->context; in snd_usb_soundblaster_remote_complete() local
202 const struct rc_config *rc = mixer->rc_cfg; in snd_usb_soundblaster_remote_complete()
208 code = mixer->rc_buffer[rc->offset]; in snd_usb_soundblaster_remote_complete()
210 code |= mixer->rc_buffer[rc->offset + 1] << 8; in snd_usb_soundblaster_remote_complete()
212 /* the Mute button actually changes the mixer control */ in snd_usb_soundblaster_remote_complete()
214 snd_usb_mixer_notify_id(mixer, rc->mute_mixer_id); in snd_usb_soundblaster_remote_complete()
215 mixer->rc_code = code; in snd_usb_soundblaster_remote_complete()
216 wake_up(&mixer->rc_waitq); in snd_usb_soundblaster_remote_complete()
222 struct usb_mixer_interface *mixer = hw->private_data; in snd_usb_sbrc_hwdep_read() local
228 err = wait_event_interruptible(mixer->rc_waitq, in snd_usb_sbrc_hwdep_read()
229 (rc_code = xchg(&mixer->rc_code, 0)) != 0); in snd_usb_sbrc_hwdep_read()
242 struct usb_mixer_interface *mixer = hw->private_data; in snd_usb_sbrc_hwdep_poll() local
244 poll_wait(file, &mixer->rc_waitq, wait); in snd_usb_sbrc_hwdep_poll()
245 return mixer->rc_code ? EPOLLIN | EPOLLRDNORM : 0; in snd_usb_sbrc_hwdep_poll()
248 static int snd_usb_soundblaster_remote_init(struct usb_mixer_interface *mixer) in snd_usb_soundblaster_remote_init() argument
254 if (rc_configs[i].usb_id == mixer->chip->usb_id) in snd_usb_soundblaster_remote_init()
258 mixer->rc_cfg = &rc_configs[i]; in snd_usb_soundblaster_remote_init()
260 len = mixer->rc_cfg->packet_length; in snd_usb_soundblaster_remote_init()
262 init_waitqueue_head(&mixer->rc_waitq); in snd_usb_soundblaster_remote_init()
263 err = snd_hwdep_new(mixer->chip->card, "SB remote control", 0, &hwdep); in snd_usb_soundblaster_remote_init()
267 "%s remote control", mixer->chip->card->shortname); in snd_usb_soundblaster_remote_init()
269 hwdep->private_data = mixer; in snd_usb_soundblaster_remote_init()
274 mixer->rc_urb = usb_alloc_urb(0, GFP_KERNEL); in snd_usb_soundblaster_remote_init()
275 if (!mixer->rc_urb) in snd_usb_soundblaster_remote_init()
277 mixer->rc_setup_packet = kmalloc(sizeof(*mixer->rc_setup_packet), GFP_KERNEL); in snd_usb_soundblaster_remote_init()
278 if (!mixer->rc_setup_packet) { in snd_usb_soundblaster_remote_init()
279 usb_free_urb(mixer->rc_urb); in snd_usb_soundblaster_remote_init()
280 mixer->rc_urb = NULL; in snd_usb_soundblaster_remote_init()
283 mixer->rc_setup_packet->bRequestType = in snd_usb_soundblaster_remote_init()
285 mixer->rc_setup_packet->bRequest = UAC_GET_MEM; in snd_usb_soundblaster_remote_init()
286 mixer->rc_setup_packet->wValue = cpu_to_le16(0); in snd_usb_soundblaster_remote_init()
287 mixer->rc_setup_packet->wIndex = cpu_to_le16(0); in snd_usb_soundblaster_remote_init()
288 mixer->rc_setup_packet->wLength = cpu_to_le16(len); in snd_usb_soundblaster_remote_init()
289 usb_fill_control_urb(mixer->rc_urb, mixer->chip->dev, in snd_usb_soundblaster_remote_init()
290 usb_rcvctrlpipe(mixer->chip->dev, 0), in snd_usb_soundblaster_remote_init()
291 (u8 *)mixer->rc_setup_packet, mixer->rc_buffer, len, in snd_usb_soundblaster_remote_init()
292 snd_usb_soundblaster_remote_complete, mixer); in snd_usb_soundblaster_remote_init()
304 static int snd_audigy2nx_led_update(struct usb_mixer_interface *mixer, in snd_audigy2nx_led_update() argument
307 struct snd_usb_audio *chip = mixer->chip; in snd_audigy2nx_led_update()
337 struct usb_mixer_interface *mixer = list->mixer; in snd_audigy2nx_led_put() local
348 err = snd_audigy2nx_led_update(mixer, value, index); in snd_audigy2nx_led_put()
356 return snd_audigy2nx_led_update(list->mixer, priv_value >> 8, in snd_audigy2nx_led_resume()
374 static int snd_audigy2nx_controls_create(struct usb_mixer_interface *mixer) in snd_audigy2nx_controls_create() argument
382 if (mixer->chip->usb_id == USB_ID(0x041e, 0x3042) && i == 0) in snd_audigy2nx_controls_create()
385 if (mixer->chip->usb_id == USB_ID(0x041e, 0x30df) && i == 0) in snd_audigy2nx_controls_create()
388 (mixer->chip->usb_id == USB_ID(0x041e, 0x3040) || in snd_audigy2nx_controls_create()
389 mixer->chip->usb_id == USB_ID(0x041e, 0x3042) || in snd_audigy2nx_controls_create()
390 mixer->chip->usb_id == USB_ID(0x041e, 0x30df) || in snd_audigy2nx_controls_create()
391 mixer->chip->usb_id == USB_ID(0x041e, 0x3048))) in snd_audigy2nx_controls_create()
397 err = add_single_ctl_with_resume(mixer, 0, in snd_audigy2nx_controls_create()
425 struct usb_mixer_interface *mixer = entry->private_data; in snd_audigy2nx_proc_read() local
429 snd_iprintf(buffer, "%s jacks\n\n", mixer->chip->card->shortname); in snd_audigy2nx_proc_read()
430 if (mixer->chip->usb_id == USB_ID(0x041e, 0x3020)) in snd_audigy2nx_proc_read()
432 else if (mixer->chip->usb_id == USB_ID(0x041e, 0x3040) || in snd_audigy2nx_proc_read()
433 mixer->chip->usb_id == USB_ID(0x041e, 0x3048)) in snd_audigy2nx_proc_read()
440 CLASS(snd_usb_lock, pm)(mixer->chip); in snd_audigy2nx_proc_read()
443 err = snd_usb_ctl_msg(mixer->chip->dev, in snd_audigy2nx_proc_read()
444 usb_rcvctrlpipe(mixer->chip->dev, 0), in snd_audigy2nx_proc_read()
471 static int snd_emu0204_ch_switch_update(struct usb_mixer_interface *mixer, in snd_emu0204_ch_switch_update() argument
474 struct snd_usb_audio *chip = mixer->chip; in snd_emu0204_ch_switch_update()
493 struct usb_mixer_interface *mixer = list->mixer; in snd_emu0204_ch_switch_put() local
504 err = snd_emu0204_ch_switch_update(mixer, value); in snd_emu0204_ch_switch_put()
510 return snd_emu0204_ch_switch_update(list->mixer, in snd_emu0204_ch_switch_resume()
523 static int snd_emu0204_controls_create(struct usb_mixer_interface *mixer) in snd_emu0204_controls_create() argument
525 return add_single_ctl_with_resume(mixer, 0, in snd_emu0204_controls_create()
565 snd_ctl_notify(me->mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE, in snd_dualsense_ih_event()
580 snd_dev = mei->info.head.mixer->chip->dev; in snd_dualsense_ih_match()
674 snd_ctl_notify(me->mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE, in snd_dualsense_ih_start()
698 snd_ctl_notify(list->mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE, in snd_dualsense_resume_jack()
713 static int snd_dualsense_jack_create(struct usb_mixer_interface *mixer, in snd_dualsense_jack_create() argument
725 snd_usb_mixer_elem_init_std(&mei->info.head, mixer, in snd_dualsense_jack_create()
751 idev_id->vendor = USB_ID_VENDOR(mixer->chip->usb_id); in snd_dualsense_jack_create()
752 idev_id->product = USB_ID_PRODUCT(mixer->chip->usb_id); in snd_dualsense_jack_create()
769 dev_warn(&mixer->chip->dev->dev, in snd_dualsense_jack_create()
777 static int snd_dualsense_controls_create(struct usb_mixer_interface *mixer) in snd_dualsense_controls_create() argument
781 err = snd_dualsense_jack_create(mixer, "Headphone Jack", true); in snd_dualsense_controls_create()
785 return snd_dualsense_jack_create(mixer, "Headset Mic Jack", false); in snd_dualsense_controls_create()
798 static int snd_xonar_u1_switch_update(struct usb_mixer_interface *mixer, in snd_xonar_u1_switch_update() argument
801 struct snd_usb_audio *chip = mixer->chip; in snd_xonar_u1_switch_update()
828 err = snd_xonar_u1_switch_update(list->mixer, new_status); in snd_xonar_u1_switch_put()
834 return snd_xonar_u1_switch_update(list->mixer, in snd_xonar_u1_switch_resume()
847 static int snd_xonar_u1_controls_create(struct usb_mixer_interface *mixer) in snd_xonar_u1_controls_create() argument
849 return add_single_ctl_with_resume(mixer, 0, in snd_xonar_u1_controls_create()
937 struct snd_usb_audio *chip = list->mixer->chip; in snd_mbox1_clk_switch_get()
953 static int snd_mbox1_clk_switch_update(struct usb_mixer_interface *mixer, int is_spdif_sync) in snd_mbox1_clk_switch_update() argument
955 struct snd_usb_audio *chip = mixer->chip; in snd_mbox1_clk_switch_update()
982 struct usb_mixer_interface *mixer = list->mixer; in snd_mbox1_clk_switch_put() local
992 err = snd_mbox1_clk_switch_update(mixer, new_val); in snd_mbox1_clk_switch_put()
1009 return snd_mbox1_clk_switch_update(list->mixer, list->kctl->private_value); in snd_mbox1_clk_switch_resume()
1021 static int snd_mbox1_src_switch_update(struct usb_mixer_interface *mixer, int is_spdif_input) in snd_mbox1_src_switch_update() argument
1023 struct snd_usb_audio *chip = mixer->chip; in snd_mbox1_src_switch_update()
1049 struct usb_mixer_interface *mixer = list->mixer; in snd_mbox1_src_switch_put() local
1059 err = snd_mbox1_src_switch_update(mixer, new_val); in snd_mbox1_src_switch_put()
1076 return snd_mbox1_src_switch_update(list->mixer, list->kctl->private_value); in snd_mbox1_src_switch_resume()
1101 static int snd_mbox1_controls_create(struct usb_mixer_interface *mixer) in snd_mbox1_controls_create() argument
1105 err = add_single_ctl_with_resume(mixer, 0, in snd_mbox1_controls_create()
1111 return add_single_ctl_with_resume(mixer, 1, in snd_mbox1_controls_create()
1120 static int snd_ni_control_init_val(struct usb_mixer_interface *mixer, in snd_ni_control_init_val() argument
1123 struct usb_device *dev = mixer->chip->dev; in snd_ni_control_init_val()
1151 struct snd_usb_audio *chip = list->mixer->chip; in snd_ni_update_cur_val()
1234 static int snd_nativeinstruments_create_mixer(struct usb_mixer_interface *mixer, in snd_nativeinstruments_create_mixer() argument
1253 err = add_single_ctl_with_resume(mixer, 0, in snd_nativeinstruments_create_mixer()
1258 snd_ni_control_init_val(mixer, list->kctl); in snd_nativeinstruments_create_mixer()
1277 static int snd_ftu_eff_switch_init(struct usb_mixer_interface *mixer, in snd_ftu_eff_switch_init() argument
1280 struct usb_device *dev = mixer->chip->dev; in snd_ftu_eff_switch_init()
1291 snd_usb_ctrl_intf(mixer->hostif) | ((pval & 0xff) << 8), in snd_ftu_eff_switch_init()
1309 struct snd_usb_audio *chip = list->mixer->chip; in snd_ftu_eff_switch_update()
1324 snd_usb_ctrl_intf(list->mixer->hostif) | ((pval & 0xff) << 8), in snd_ftu_eff_switch_update()
1346 static int snd_ftu_create_effect_switch(struct usb_mixer_interface *mixer, in snd_ftu_create_effect_switch() argument
1361 err = add_single_ctl_with_resume(mixer, bUnitID, in snd_ftu_create_effect_switch()
1367 snd_ftu_eff_switch_init(mixer, list->kctl); in snd_ftu_create_effect_switch()
1372 static int snd_ftu_create_volume_ctls(struct usb_mixer_interface *mixer) in snd_ftu_create_volume_ctls() argument
1388 err = snd_create_std_mono_ctl(mixer, id, control, in snd_ftu_create_volume_ctls()
1399 err = snd_create_std_mono_ctl(mixer, id, control, in snd_ftu_create_volume_ctls()
1410 /* This control needs a volume quirk, see mixer.c */
1411 static int snd_ftu_create_effect_volume_ctl(struct usb_mixer_interface *mixer) in snd_ftu_create_effect_volume_ctl() argument
1419 return snd_create_std_mono_ctl(mixer, id, control, cmask, val_type, in snd_ftu_create_effect_volume_ctl()
1423 /* This control needs a volume quirk, see mixer.c */
1424 static int snd_ftu_create_effect_duration_ctl(struct usb_mixer_interface *mixer) in snd_ftu_create_effect_duration_ctl() argument
1432 return snd_create_std_mono_ctl(mixer, id, control, cmask, val_type, in snd_ftu_create_effect_duration_ctl()
1436 /* This control needs a volume quirk, see mixer.c */
1437 static int snd_ftu_create_effect_feedback_ctl(struct usb_mixer_interface *mixer) in snd_ftu_create_effect_feedback_ctl() argument
1445 return snd_create_std_mono_ctl(mixer, id, control, cmask, val_type, in snd_ftu_create_effect_feedback_ctl()
1449 static int snd_ftu_create_effect_return_ctls(struct usb_mixer_interface *mixer) in snd_ftu_create_effect_return_ctls() argument
1463 err = snd_create_std_mono_ctl(mixer, id, control, in snd_ftu_create_effect_return_ctls()
1473 static int snd_ftu_create_effect_send_ctls(struct usb_mixer_interface *mixer) in snd_ftu_create_effect_send_ctls() argument
1487 err = snd_create_std_mono_ctl(mixer, id, control, cmask, in snd_ftu_create_effect_send_ctls()
1497 err = snd_create_std_mono_ctl(mixer, id, control, cmask, in snd_ftu_create_effect_send_ctls()
1506 static int snd_ftu_create_mixer(struct usb_mixer_interface *mixer) in snd_ftu_create_mixer() argument
1510 err = snd_ftu_create_volume_ctls(mixer); in snd_ftu_create_mixer()
1514 err = snd_ftu_create_effect_switch(mixer, 1, 6); in snd_ftu_create_mixer()
1518 err = snd_ftu_create_effect_volume_ctl(mixer); in snd_ftu_create_mixer()
1522 err = snd_ftu_create_effect_duration_ctl(mixer); in snd_ftu_create_mixer()
1526 err = snd_ftu_create_effect_feedback_ctl(mixer); in snd_ftu_create_mixer()
1530 err = snd_ftu_create_effect_return_ctls(mixer); in snd_ftu_create_mixer()
1534 err = snd_ftu_create_effect_send_ctls(mixer); in snd_ftu_create_mixer()
1544 struct usb_mixer_interface *mixer; in snd_emuusb_set_samplerate() local
1548 list_for_each_entry(mixer, &chip->mixer_list, list) { in snd_emuusb_set_samplerate()
1549 if (mixer->id_elems[unitid]) { in snd_emuusb_set_samplerate()
1550 cval = mixer_elem_list_to_info(mixer->id_elems[unitid]); in snd_emuusb_set_samplerate()
1554 snd_usb_mixer_notify_id(mixer, unitid); in snd_emuusb_set_samplerate()
1561 /* C400/C600 volume controls, this control needs a volume quirk, see mixer.c */
1562 static int snd_c400_create_vol_ctls(struct usb_mixer_interface *mixer) in snd_c400_create_vol_ctls() argument
1574 switch (mixer->chip->usb_id) { in snd_c400_create_vol_ctls()
1599 err = snd_create_std_mono_ctl_offset(mixer, id, control, in snd_c400_create_vol_ctls()
1610 /* This control needs a volume quirk, see mixer.c */
1611 static int snd_c400_create_effect_volume_ctl(struct usb_mixer_interface *mixer) in snd_c400_create_effect_volume_ctl() argument
1619 return snd_create_std_mono_ctl(mixer, id, control, cmask, val_type, in snd_c400_create_effect_volume_ctl()
1623 /* This control needs a volume quirk, see mixer.c */
1624 static int snd_c400_create_effect_duration_ctl(struct usb_mixer_interface *mixer) in snd_c400_create_effect_duration_ctl() argument
1632 return snd_create_std_mono_ctl(mixer, id, control, cmask, val_type, in snd_c400_create_effect_duration_ctl()
1636 /* This control needs a volume quirk, see mixer.c */
1637 static int snd_c400_create_effect_feedback_ctl(struct usb_mixer_interface *mixer) in snd_c400_create_effect_feedback_ctl() argument
1645 return snd_create_std_mono_ctl(mixer, id, control, cmask, val_type, in snd_c400_create_effect_feedback_ctl()
1649 static int snd_c400_create_effect_vol_ctls(struct usb_mixer_interface *mixer) in snd_c400_create_effect_vol_ctls() argument
1661 switch (mixer->chip->usb_id) { in snd_c400_create_effect_vol_ctls()
1684 err = snd_create_std_mono_ctl(mixer, id, control, in snd_c400_create_effect_vol_ctls()
1694 static int snd_c400_create_effect_ret_vol_ctls(struct usb_mixer_interface *mixer) in snd_c400_create_effect_ret_vol_ctls() argument
1706 switch (mixer->chip->usb_id) { in snd_c400_create_effect_ret_vol_ctls()
1726 err = snd_create_std_mono_ctl_offset(mixer, id, control, in snd_c400_create_effect_ret_vol_ctls()
1736 static int snd_c400_create_mixer(struct usb_mixer_interface *mixer) in snd_c400_create_mixer() argument
1740 err = snd_c400_create_vol_ctls(mixer); in snd_c400_create_mixer()
1744 err = snd_c400_create_effect_vol_ctls(mixer); in snd_c400_create_mixer()
1748 err = snd_c400_create_effect_ret_vol_ctls(mixer); in snd_c400_create_mixer()
1752 err = snd_ftu_create_effect_switch(mixer, 2, 0x43); in snd_c400_create_mixer()
1756 err = snd_c400_create_effect_volume_ctl(mixer); in snd_c400_create_mixer()
1760 err = snd_c400_create_effect_duration_ctl(mixer); in snd_c400_create_mixer()
1764 err = snd_c400_create_effect_feedback_ctl(mixer); in snd_c400_create_mixer()
1772 * The mixer units for Ebox-44 are corrupt, and even where they
1774 * stereo. So we provide a good mixer here.
1880 struct snd_usb_audio *chip = list->mixer->chip; in snd_microii_spdif_default_get()
1925 struct snd_usb_audio *chip = list->mixer->chip; in snd_microii_spdif_default_update()
2008 struct snd_usb_audio *chip = list->mixer->chip; in snd_microii_spdif_switch_update()
2067 static int snd_microii_controls_create(struct usb_mixer_interface *mixer) in snd_microii_controls_create() argument
2077 err = add_single_ctl_with_resume(mixer, 0, in snd_microii_controls_create()
2097 static int snd_soundblaster_e1_switch_update(struct usb_mixer_interface *mixer, in snd_soundblaster_e1_switch_update() argument
2100 struct snd_usb_audio *chip = mixer->chip; in snd_soundblaster_e1_switch_update()
2125 err = snd_soundblaster_e1_switch_update(list->mixer, value); in snd_soundblaster_e1_switch_put()
2131 return snd_soundblaster_e1_switch_update(list->mixer, in snd_soundblaster_e1_switch_resume()
2154 static int snd_soundblaster_e1_switch_create(struct usb_mixer_interface *mixer) in snd_soundblaster_e1_switch_create() argument
2156 return add_single_ctl_with_resume(mixer, 0, in snd_soundblaster_e1_switch_create()
2226 struct snd_usb_audio *chip = cval->head.mixer->chip; in realtek_ctl_connector_get()
2274 snd_ctl_notify(list->mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE, in realtek_resume_jack()
2279 static int realtek_add_jack(struct usb_mixer_interface *mixer, in realtek_add_jack() argument
2288 snd_usb_mixer_elem_init_std(&cval->head, mixer, in realtek_add_jack()
2306 static int dell_dock_mixer_create(struct usb_mixer_interface *mixer) in dell_dock_mixer_create() argument
2309 struct usb_device *dev = mixer->chip->dev; in dell_dock_mixer_create()
2312 realtek_hda_set(mixer->chip, in dell_dock_mixer_create()
2325 err = realtek_add_jack(mixer, "Line Out Jack", REALTEK_LINE1); in dell_dock_mixer_create()
2328 err = realtek_add_jack(mixer, "Headphone Jack", REALTEK_HP_OUT); in dell_dock_mixer_create()
2331 err = realtek_add_jack(mixer, "Headset Mic Jack", in dell_dock_mixer_create()
2338 static void dell_dock_init_vol(struct usb_mixer_interface *mixer, int ch, int id) in dell_dock_init_vol() argument
2340 struct snd_usb_audio *chip = mixer->chip; in dell_dock_init_vol()
2346 snd_usb_ctrl_intf(mixer->hostif) | (id << 8), in dell_dock_init_vol()
2350 static int dell_dock_mixer_init(struct usb_mixer_interface *mixer) in dell_dock_mixer_init() argument
2353 dell_dock_init_vol(mixer, 1, 16); in dell_dock_mixer_init()
2354 dell_dock_init_vol(mixer, 2, 16); in dell_dock_mixer_init()
2355 dell_dock_init_vol(mixer, 1, 19); in dell_dock_mixer_init()
2356 dell_dock_init_vol(mixer, 2, 19); in dell_dock_mixer_init()
2441 struct snd_usb_audio *chip = list->mixer->chip; in snd_rme_get_status1()
2556 struct snd_usb_audio *chip = list->mixer->chip; in snd_rme_current_freq_get()
2713 static int snd_rme_controls_create(struct usb_mixer_interface *mixer) in snd_rme_controls_create() argument
2718 err = add_single_ctl_with_resume(mixer, 0, in snd_rme_controls_create()
2779 static int snd_bbfpro_ctl_update(struct usb_mixer_interface *mixer, u8 reg, in snd_bbfpro_ctl_update() argument
2783 struct snd_usb_audio *chip = mixer->chip; in snd_bbfpro_ctl_update()
2875 struct usb_mixer_interface *mixer = list->mixer; in snd_bbfpro_ctl_put() local
2902 err = snd_bbfpro_ctl_update(mixer, reg, idx, val); in snd_bbfpro_ctl_put()
2916 return snd_bbfpro_ctl_update(list->mixer, reg, idx, value); in snd_bbfpro_ctl_resume()
2919 static int snd_bbfpro_gain_update(struct usb_mixer_interface *mixer, in snd_bbfpro_gain_update() argument
2922 struct snd_usb_audio *chip = mixer->chip; in snd_bbfpro_gain_update()
2979 struct usb_mixer_interface *mixer = list->mixer; in snd_bbfpro_gain_put() local
3001 err = snd_bbfpro_gain_update(mixer, channel, value); in snd_bbfpro_gain_put()
3020 return snd_bbfpro_gain_update(list->mixer, channel, value); in snd_bbfpro_gain_resume()
3023 static int snd_bbfpro_vol_update(struct usb_mixer_interface *mixer, u16 index, in snd_bbfpro_vol_update() argument
3026 struct snd_usb_audio *chip = mixer->chip; in snd_bbfpro_vol_update()
3074 struct usb_mixer_interface *mixer = list->mixer; in snd_bbfpro_vol_put() local
3091 err = snd_bbfpro_vol_update(mixer, idx, new_val); in snd_bbfpro_vol_put()
3101 return snd_bbfpro_vol_update(list->mixer, idx, val); in snd_bbfpro_vol_resume()
3132 static int snd_bbfpro_ctl_add(struct usb_mixer_interface *mixer, u8 reg, in snd_bbfpro_ctl_add() argument
3142 return add_single_ctl_with_resume(mixer, 0, snd_bbfpro_ctl_resume, in snd_bbfpro_ctl_add()
3146 static int snd_bbfpro_gain_add(struct usb_mixer_interface *mixer, u8 channel, in snd_bbfpro_gain_add() argument
3154 return add_single_ctl_with_resume(mixer, 0, snd_bbfpro_gain_resume, in snd_bbfpro_gain_add()
3158 static int snd_bbfpro_vol_add(struct usb_mixer_interface *mixer, u16 index, in snd_bbfpro_vol_add() argument
3166 return add_single_ctl_with_resume(mixer, 0, snd_bbfpro_vol_resume, in snd_bbfpro_vol_add()
3170 static int snd_bbfpro_controls_create(struct usb_mixer_interface *mixer) in snd_bbfpro_controls_create() argument
3190 err = snd_bbfpro_vol_add(mixer, (26 * o + i), name); in snd_bbfpro_controls_create()
3198 err = snd_bbfpro_vol_add(mixer, (26 * o + 12 + i), in snd_bbfpro_controls_create()
3209 err = snd_bbfpro_vol_add(mixer, in snd_bbfpro_controls_create()
3223 err = snd_bbfpro_gain_add(mixer, i, name); in snd_bbfpro_controls_create()
3229 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG1, in snd_bbfpro_controls_create()
3235 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG1, in snd_bbfpro_controls_create()
3241 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG1, in snd_bbfpro_controls_create()
3247 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG1, in snd_bbfpro_controls_create()
3254 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG2, in snd_bbfpro_controls_create()
3260 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG2, in snd_bbfpro_controls_create()
3266 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG2, in snd_bbfpro_controls_create()
3272 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG2, in snd_bbfpro_controls_create()
3278 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG2, in snd_bbfpro_controls_create()
3284 err = snd_bbfpro_ctl_add(mixer, SND_BBFPRO_CTL_REG2, in snd_bbfpro_controls_create()
3321 struct snd_usb_audio *chip = list->mixer->chip; in snd_rme_digiface_write_reg()
3339 struct snd_usb_audio *chip = list->mixer->chip; in snd_rme_digiface_read_status()
3663 * Mixer apps currently need to drive the mixer using raw USB requests,
3684 static int snd_rme_digiface_controls_create(struct usb_mixer_interface *mixer) in snd_rme_digiface_controls_create() argument
3689 err = add_single_ctl_with_resume(mixer, 0, in snd_rme_digiface_controls_create()
4102 // playback channels are fixed and controlled by hardware knobs on the mixer
4148 static int snd_djm_controls_update(struct usb_mixer_interface *mixer, in snd_djm_controls_update() argument
4156 CLASS(snd_usb_lock, pm)(mixer->chip); in snd_djm_controls_update()
4160 return snd_usb_ctl_msg(mixer->chip->dev, in snd_djm_controls_update()
4161 usb_sndctrlpipe(mixer->chip->dev, 0), in snd_djm_controls_update()
4179 struct usb_mixer_interface *mixer = list->mixer; in snd_djm_controls_put() local
4190 return snd_djm_controls_update(mixer, device, group, value); in snd_djm_controls_put()
4200 return snd_djm_controls_update(list->mixer, device, group, value); in snd_djm_controls_resume()
4203 static int snd_djm_controls_create(struct usb_mixer_interface *mixer, in snd_djm_controls_create() argument
4227 err = snd_djm_controls_update(mixer, device_idx, i, value); in snd_djm_controls_create()
4230 err = add_single_ctl_with_resume(mixer, 0, snd_djm_controls_resume, in snd_djm_controls_create()
4238 int snd_usb_mixer_apply_create_quirk(struct usb_mixer_interface *mixer) in snd_usb_mixer_apply_create_quirk() argument
4242 err = snd_usb_soundblaster_remote_init(mixer); in snd_usb_mixer_apply_create_quirk()
4246 switch (mixer->chip->usb_id) { in snd_usb_mixer_apply_create_quirk()
4249 err = snd_us16x08_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4256 err = snd_audigy2nx_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4259 snd_card_ro_proc_new(mixer->chip->card, "audigy2nx", in snd_usb_mixer_apply_create_quirk()
4260 mixer, snd_audigy2nx_proc_read); in snd_usb_mixer_apply_create_quirk()
4265 err = snd_emu0204_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4271 err = snd_dualsense_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4277 err = snd_c400_create_mixer(mixer); in snd_usb_mixer_apply_create_quirk()
4282 err = snd_ftu_create_mixer(mixer); in snd_usb_mixer_apply_create_quirk()
4288 err = snd_xonar_u1_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4292 err = snd_microii_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4296 err = snd_mbox1_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4301 mixer, in snd_usb_mixer_apply_create_quirk()
4308 mixer, in snd_usb_mixer_apply_create_quirk()
4315 err = snd_create_std_mono_table(mixer, ebox44_table); in snd_usb_mixer_apply_create_quirk()
4323 err = snd_scarlett_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4346 err = snd_scarlett2_init(mixer); in snd_usb_mixer_apply_create_quirk()
4352 err = snd_fcp_init(mixer); in snd_usb_mixer_apply_create_quirk()
4356 err = snd_soundblaster_e1_switch_create(mixer); in snd_usb_mixer_apply_create_quirk()
4359 err = dell_dock_mixer_create(mixer); in snd_usb_mixer_apply_create_quirk()
4362 err = dell_dock_mixer_init(mixer); in snd_usb_mixer_apply_create_quirk()
4365 err = dell_dock_mixer_create(mixer); in snd_usb_mixer_apply_create_quirk()
4371 err = snd_rme_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4375 err = snd_sc1810_init_mixer(mixer); in snd_usb_mixer_apply_create_quirk()
4378 err = snd_sc1810_init_mixer(mixer); in snd_usb_mixer_apply_create_quirk()
4381 err = snd_bbfpro_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4385 err = snd_rme_digiface_controls_create(mixer); in snd_usb_mixer_apply_create_quirk()
4388 err = snd_djm_controls_create(mixer, SND_DJM_250MK2_IDX); in snd_usb_mixer_apply_create_quirk()
4391 err = snd_djm_controls_create(mixer, SND_DJM_450_IDX); in snd_usb_mixer_apply_create_quirk()
4394 err = snd_djm_controls_create(mixer, SND_DJM_750_IDX); in snd_usb_mixer_apply_create_quirk()
4397 err = snd_djm_controls_create(mixer, SND_DJM_750MK2_IDX); in snd_usb_mixer_apply_create_quirk()
4400 err = snd_djm_controls_create(mixer, SND_DJM_850_IDX); in snd_usb_mixer_apply_create_quirk()
4403 err = snd_djm_controls_create(mixer, SND_DJM_900NXS2_IDX); in snd_usb_mixer_apply_create_quirk()
4406 err = snd_djm_controls_create(mixer, SND_DJM_A9_IDX); in snd_usb_mixer_apply_create_quirk()
4409 err = snd_djm_controls_create(mixer, SND_DJM_V10_IDX); in snd_usb_mixer_apply_create_quirk()
4416 void snd_usb_mixer_resume_quirk(struct usb_mixer_interface *mixer) in snd_usb_mixer_resume_quirk() argument
4418 switch (mixer->chip->usb_id) { in snd_usb_mixer_resume_quirk()
4420 dell_dock_mixer_init(mixer); in snd_usb_mixer_resume_quirk()
4425 void snd_usb_mixer_rc_memory_change(struct usb_mixer_interface *mixer, in snd_usb_mixer_rc_memory_change() argument
4428 if (!mixer->rc_cfg) in snd_usb_mixer_rc_memory_change()
4433 mixer->rc_urb->dev = mixer->chip->dev; in snd_usb_mixer_rc_memory_change()
4434 usb_submit_urb(mixer->rc_urb, GFP_ATOMIC); in snd_usb_mixer_rc_memory_change()
4443 if (mixer->chip->usb_id == USB_ID(0x041e, 0x3040) || in snd_usb_mixer_rc_memory_change()
4444 mixer->chip->usb_id == USB_ID(0x041e, 0x3048)) in snd_usb_mixer_rc_memory_change()
4445 snd_usb_mixer_notify_id(mixer, mixer->rc_cfg->mute_mixer_id); in snd_usb_mixer_rc_memory_change()
4448 usb_audio_dbg(mixer->chip, "memory change in unknown unit %d\n", unitid); in snd_usb_mixer_rc_memory_change()
4453 static void snd_dragonfly_quirk_db_scale(struct usb_mixer_interface *mixer, in snd_dragonfly_quirk_db_scale() argument
4474 usb_audio_info(mixer->chip, "applying DragonFly dB scale quirk (0-50 variant)\n"); in snd_dragonfly_quirk_db_scale()
4483 usb_audio_info(mixer->chip, "ignoring too narrow dB range on a DragonFly device"); in snd_dragonfly_quirk_db_scale()
4534 void snd_usb_mixer_fu_apply_quirk(struct usb_mixer_interface *mixer, in snd_usb_mixer_fu_apply_quirk() argument
4538 switch (mixer->chip->usb_id) { in snd_usb_mixer_fu_apply_quirk()
4541 snd_dragonfly_quirk_db_scale(mixer, cval, kctl); in snd_usb_mixer_fu_apply_quirk()
4546 if (mixer->chip->quirk_flags & QUIRK_FLAG_MIXER_PLAYBACK_MIN_MUTE) in snd_usb_mixer_fu_apply_quirk()
4548 usb_audio_info(mixer->chip, in snd_usb_mixer_fu_apply_quirk()
4554 if (mixer->chip->quirk_flags & QUIRK_FLAG_MIXER_CAPTURE_MIN_MUTE) in snd_usb_mixer_fu_apply_quirk()
4556 usb_audio_info(mixer->chip, in snd_usb_mixer_fu_apply_quirk()
4561 if (USB_ID_VENDOR(mixer->chip->usb_id) == 0x047f && in snd_usb_mixer_fu_apply_quirk()
4563 snd_fix_plt_name(mixer->chip, &kctl->id); in snd_usb_mixer_fu_apply_quirk()