Lines Matching refs:mixer

82 	struct usb_mixer_interface *mixer;  member
141 ((cval)->head.mixer->ignore_ctl_error ? 0 : (err))
312 struct snd_usb_audio *chip = cval->head.mixer->chip; in get_ctl_value_v1()
348 struct snd_usb_audio *chip = cval->head.mixer->chip; in get_ctl_value_v2()
415 return (cval->head.mixer->protocol == UAC_VERSION_1) ? in get_ctl_value()
446 if (!cval->head.mixer->ignore_ctl_error) in snd_usb_get_cur_mix_value()
447 usb_audio_dbg(cval->head.mixer->chip, in snd_usb_get_cur_mix_value()
464 struct snd_usb_audio *chip = cval->head.mixer->chip; in snd_usb_mixer_set_ctl_value()
471 if (cval->head.mixer->protocol == UAC_VERSION_1) { in snd_usb_mixer_set_ctl_value()
532 usb_audio_dbg(cval->head.mixer->chip, in snd_usb_set_cur_mix_value()
596 struct usb_mixer_interface *mixer = list->mixer; in snd_usb_mixer_add_control() local
599 while (snd_ctl_find_id(mixer->chip->card, &kctl->id)) in snd_usb_mixer_add_control()
601 err = snd_ctl_add(mixer->chip->card, kctl); in snd_usb_mixer_add_control()
603 usb_audio_dbg(mixer->chip, "cannot add control (err = %d)\n", in snd_usb_mixer_add_control()
608 list->next_id_elem = mixer->id_elems[list->id]; in snd_usb_mixer_add_control()
609 mixer->id_elems[list->id] = list; in snd_usb_mixer_add_control()
762 switch (state->mixer->protocol) { in uac_mixer_unit_get_channels()
787 int protocol = state->mixer->protocol; in check_input_term()
1037 struct snd_usb_audio *chip = cval->head.mixer->chip; in volume_control_quirks()
1173 usb_audio_err(cval->head.mixer->chip, in get_min_max_with_quirks()
1175 cval->head.id, snd_usb_ctrl_intf(cval->head.mixer->chip), in get_min_max_with_quirks()
1280 snd_ctl_notify(cval->head.mixer->chip->card, in mixer_ctl_feature_info()
1383 struct snd_usb_audio *chip = cval->head.mixer->chip; in mixer_ctl_connector_get()
1393 if (cval->head.mixer->protocol == UAC_VERSION_2) { in mixer_ctl_connector_get()
1515 static void __build_feature_ctl(struct usb_mixer_interface *mixer, in __build_feature_ctl() argument
1542 snd_usb_mixer_elem_init_std(&cval->head, mixer, unitid); in __build_feature_ctl()
1551 if (mixer->protocol == UAC_VERSION_1) in __build_feature_ctl()
1580 usb_audio_err(mixer->chip, "cannot malloc kcontrol\n"); in __build_feature_ctl()
1589 len = snd_usb_copy_string_desc(mixer->chip, nameid, in __build_feature_ctl()
1605 len = get_term_name(mixer->chip, iterm, in __build_feature_ctl()
1609 len = get_term_name(mixer->chip, oterm, in __build_feature_ctl()
1618 check_no_speaker_on_headset(kctl, mixer->chip->card); in __build_feature_ctl()
1654 snd_usb_mixer_fu_apply_quirk(mixer, cval, unitid, kctl); in __build_feature_ctl()
1663 usb_audio_warn(mixer->chip, in __build_feature_ctl()
1666 usb_audio_warn(mixer->chip, in __build_feature_ctl()
1672 usb_audio_dbg(mixer->chip, "[%d] FU [%s] ch = %d, val = %d/%d/%d\n", in __build_feature_ctl()
1686 __build_feature_ctl(state->mixer, state->map, ctl_mask, control, in build_feature_ctl()
1690 static void build_feature_ctl_badd(struct usb_mixer_interface *mixer, in build_feature_ctl_badd() argument
1694 __build_feature_ctl(mixer, badd_map, ctl_mask, control, in build_feature_ctl_badd()
1698 static void get_connector_control_name(struct usb_mixer_interface *mixer, in get_connector_control_name() argument
1702 int name_len = get_term_name(mixer->chip, term, name, name_size, 0); in get_connector_control_name()
1719 static void build_connector_control(struct usb_mixer_interface *mixer, in build_connector_control() argument
1728 snd_usb_mixer_elem_init_std(&cval->head, mixer, term->id); in build_connector_control()
1739 if (mixer->protocol == UAC_VERSION_2) in build_connector_control()
1750 usb_audio_err(mixer->chip, "cannot malloc kcontrol\n"); in build_connector_control()
1754 get_connector_control_name(mixer, term, is_input, kctl->id.name, in build_connector_control()
1769 if (state->mixer->protocol != UAC_VERSION_2) in parse_clock_source_unit()
1791 snd_usb_mixer_elem_init_std(&cval->head, state->mixer, hdr->bClockID); in parse_clock_source_unit()
1836 if (state->mixer->protocol == UAC_VERSION_1) { in parse_audio_feature_unit()
1858 } else if (state->mixer->protocol == UAC_VERSION_2) { in parse_audio_feature_unit()
1927 if (state->mixer->protocol == UAC_VERSION_1) { in parse_audio_feature_unit()
2027 snd_usb_mixer_elem_init_std(&cval->head, state->mixer, unitid); in build_mixer_unit_ctl()
2031 __u8 *c = uac_mixer_unit_bmControls(desc, state->mixer->protocol); in build_mixer_unit_ctl()
2069 if (state->mixer->protocol == UAC_VERSION_2) { in parse_audio_input_terminal()
2074 } else if (state->mixer->protocol == UAC_VERSION_3) { in parse_audio_input_terminal()
2087 build_connector_control(state->mixer, &iterm, true); in parse_audio_input_terminal()
2132 state->mixer->protocol); in parse_audio_mixer_unit()
2333 desc->bLength < num_ins + uac_processing_unit_bControlSize(desc, state->mixer->protocol)) { in build_audio_procunit()
2352 __u8 *controls = uac_processing_unit_bmControls(desc, state->mixer->protocol); in build_audio_procunit()
2354 if (state->mixer->protocol == UAC_VERSION_1) { in build_audio_procunit()
2370 snd_usb_mixer_elem_init_std(&cval->head, state->mixer, unitid); in build_audio_procunit()
2375 if (state->mixer->protocol > UAC_VERSION_1 && in build_audio_procunit()
2385 switch (state->mixer->protocol) { in build_audio_procunit()
2400 state->mixer->protocol); in build_audio_procunit()
2438 nameid = uac_processing_unit_iProcessing(desc, state->mixer->protocol); in build_audio_procunit()
2466 switch (state->mixer->protocol) { in parse_audio_processing_unit()
2613 snd_usb_mixer_elem_init_std(&cval->head, state->mixer, unitid); in parse_audio_selector_unit()
2621 switch (state->mixer->protocol) { in parse_audio_selector_unit()
2676 switch (state->mixer->protocol) { in parse_audio_selector_unit()
2722 int protocol = state->mixer->protocol; in parse_audio_unit()
2792 static void snd_usb_mixer_free(struct usb_mixer_interface *mixer) in snd_usb_mixer_free() argument
2795 snd_usb_mixer_disconnect(mixer); in snd_usb_mixer_free()
2797 kfree(mixer->id_elems); in snd_usb_mixer_free()
2798 if (mixer->urb) { in snd_usb_mixer_free()
2799 kfree(mixer->urb->transfer_buffer); in snd_usb_mixer_free()
2800 usb_free_urb(mixer->urb); in snd_usb_mixer_free()
2802 usb_free_urb(mixer->rc_urb); in snd_usb_mixer_free()
2803 kfree(mixer->rc_setup_packet); in snd_usb_mixer_free()
2804 kfree(mixer); in snd_usb_mixer_free()
2809 struct usb_mixer_interface *mixer = device->device_data; in snd_usb_mixer_dev_free() local
2810 snd_usb_mixer_free(mixer); in snd_usb_mixer_dev_free()
2883 static bool uac3_badd_func_has_valid_channels(struct usb_mixer_interface *mixer, in uac3_badd_func_has_valid_channels() argument
2893 usb_audio_warn(mixer->chip, "BAAD %s: no channels?", in uac3_badd_func_has_valid_channels()
2902 usb_audio_warn(mixer->chip, "BAAD %s c_chmask mismatch", in uac3_badd_func_has_valid_channels()
2908 usb_audio_warn(mixer->chip, "BAAD %s p_chmask mismatch", in uac3_badd_func_has_valid_channels()
2922 static int snd_usb_mixer_controls_badd(struct usb_mixer_interface *mixer, in snd_usb_mixer_controls_badd() argument
2925 struct usb_device *dev = mixer->chip->dev; in snd_usb_mixer_controls_badd()
2927 int badd_profile = mixer->chip->badd_profile; in snd_usb_mixer_controls_badd()
2974 usb_audio_err(mixer->chip, in snd_usb_mixer_controls_badd()
2998 usb_audio_dbg(mixer->chip, in snd_usb_mixer_controls_badd()
3017 if (!uac3_badd_func_has_valid_channels(mixer, f, c_chmask, p_chmask)) in snd_usb_mixer_controls_badd()
3024 build_feature_ctl_badd(mixer, 0, UAC_FU_MUTE, in snd_usb_mixer_controls_badd()
3027 build_feature_ctl_badd(mixer, p_chmask, UAC_FU_VOLUME, in snd_usb_mixer_controls_badd()
3034 build_feature_ctl_badd(mixer, 0, UAC_FU_MUTE, in snd_usb_mixer_controls_badd()
3037 build_feature_ctl_badd(mixer, c_chmask, UAC_FU_VOLUME, in snd_usb_mixer_controls_badd()
3044 build_feature_ctl_badd(mixer, 0, UAC_FU_MUTE, in snd_usb_mixer_controls_badd()
3047 build_feature_ctl_badd(mixer, 1, UAC_FU_VOLUME, in snd_usb_mixer_controls_badd()
3059 build_connector_control(mixer, &iterm, true); in snd_usb_mixer_controls_badd()
3065 build_connector_control(mixer, &oterm, false); in snd_usb_mixer_controls_badd()
3076 static int snd_usb_mixer_controls(struct usb_mixer_interface *mixer) in snd_usb_mixer_controls() argument
3084 state.chip = mixer->chip; in snd_usb_mixer_controls()
3085 state.mixer = mixer; in snd_usb_mixer_controls()
3086 state.buffer = mixer->hostif->extra; in snd_usb_mixer_controls()
3087 state.buflen = mixer->hostif->extralen; in snd_usb_mixer_controls()
3094 mixer->ignore_ctl_error = map->ignore_ctl_error; in snd_usb_mixer_controls()
3100 while ((p = snd_usb_find_csint_desc(mixer->hostif->extra, in snd_usb_mixer_controls()
3101 mixer->hostif->extralen, in snd_usb_mixer_controls()
3103 if (mixer->protocol == UAC_VERSION_1) { in snd_usb_mixer_controls()
3116 } else if (mixer->protocol == UAC_VERSION_2) { in snd_usb_mixer_controls()
3140 build_connector_control(state.mixer, &state.oterm, in snd_usb_mixer_controls()
3167 build_connector_control(state.mixer, &state.oterm, in snd_usb_mixer_controls()
3176 void snd_usb_mixer_notify_id(struct usb_mixer_interface *mixer, int unitid) in snd_usb_mixer_notify_id() argument
3180 for_each_mixer_elem(list, mixer, unitid) { in snd_usb_mixer_notify_id()
3185 snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE, in snd_usb_mixer_notify_id()
3208 struct usb_mixer_interface *mixer; in snd_usb_mixer_proc_read() local
3212 list_for_each_entry(mixer, &chip->mixer_list, list) { in snd_usb_mixer_proc_read()
3216 mixer->ignore_ctl_error); in snd_usb_mixer_proc_read()
3219 for_each_mixer_elem(list, mixer, unitid) { in snd_usb_mixer_proc_read()
3233 static void snd_usb_mixer_interrupt_v2(struct usb_mixer_interface *mixer, in snd_usb_mixer_interrupt_v2() argument
3243 usb_audio_dbg(mixer->chip, in snd_usb_mixer_interrupt_v2()
3249 for_each_mixer_elem(list, mixer, unitid) in snd_usb_mixer_interrupt_v2()
3255 for_each_mixer_elem(list, mixer, unitid) { in snd_usb_mixer_interrupt_v2()
3273 snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE, in snd_usb_mixer_interrupt_v2()
3286 usb_audio_dbg(mixer->chip, in snd_usb_mixer_interrupt_v2()
3296 struct usb_mixer_interface *mixer = urb->context; in snd_usb_mixer_interrupt() local
3303 if (mixer->protocol == UAC_VERSION_1) { in snd_usb_mixer_interrupt()
3319 snd_usb_mixer_rc_memory_change(mixer, status->bOriginator); in snd_usb_mixer_interrupt()
3321 snd_usb_mixer_notify_id(mixer, status->bOriginator); in snd_usb_mixer_interrupt()
3334 snd_usb_mixer_interrupt_v2(mixer, msg->bAttribute, in snd_usb_mixer_interrupt()
3344 urb->dev = mixer->chip->dev; in snd_usb_mixer_interrupt()
3350 static int snd_usb_mixer_status_create(struct usb_mixer_interface *mixer) in snd_usb_mixer_status_create() argument
3358 if (get_iface_desc(mixer->hostif)->bNumEndpoints < 1) in snd_usb_mixer_status_create()
3360 ep = get_endpoint(mixer->hostif, 0); in snd_usb_mixer_status_create()
3369 mixer->urb = usb_alloc_urb(0, GFP_KERNEL); in snd_usb_mixer_status_create()
3370 if (!mixer->urb) { in snd_usb_mixer_status_create()
3374 usb_fill_int_urb(mixer->urb, mixer->chip->dev, in snd_usb_mixer_status_create()
3375 usb_rcvintpipe(mixer->chip->dev, epnum), in snd_usb_mixer_status_create()
3377 snd_usb_mixer_interrupt, mixer, ep->bInterval); in snd_usb_mixer_status_create()
3378 usb_submit_urb(mixer->urb, GFP_KERNEL); in snd_usb_mixer_status_create()
3385 struct usb_mixer_interface *mixer = snd_kcontrol_chip(kcontrol); in keep_iface_ctl_get() local
3387 ucontrol->value.integer.value[0] = mixer->chip->keep_iface; in keep_iface_ctl_get()
3394 struct usb_mixer_interface *mixer = snd_kcontrol_chip(kcontrol); in keep_iface_ctl_put() local
3397 if (mixer->chip->keep_iface == keep_iface) in keep_iface_ctl_put()
3399 mixer->chip->keep_iface = keep_iface; in keep_iface_ctl_put()
3411 static int create_keep_iface_ctl(struct usb_mixer_interface *mixer) in create_keep_iface_ctl() argument
3413 struct snd_kcontrol *kctl = snd_ctl_new1(&keep_iface_ctl, mixer); in create_keep_iface_ctl()
3416 if (snd_ctl_find_id(mixer->chip->card, &kctl->id)) { in create_keep_iface_ctl()
3421 return snd_ctl_add(mixer->chip->card, kctl); in create_keep_iface_ctl()
3430 struct usb_mixer_interface *mixer; in snd_usb_create_mixer() local
3436 mixer = kzalloc(sizeof(*mixer), GFP_KERNEL); in snd_usb_create_mixer()
3437 if (!mixer) in snd_usb_create_mixer()
3439 mixer->chip = chip; in snd_usb_create_mixer()
3440 mixer->ignore_ctl_error = ignore_error; in snd_usb_create_mixer()
3441 mixer->id_elems = kcalloc(MAX_ID_ELEMS, sizeof(*mixer->id_elems), in snd_usb_create_mixer()
3443 if (!mixer->id_elems) { in snd_usb_create_mixer()
3444 kfree(mixer); in snd_usb_create_mixer()
3448 mixer->hostif = &usb_ifnum_to_if(chip->dev, ctrlif)->altsetting[0]; in snd_usb_create_mixer()
3449 switch (get_iface_desc(mixer->hostif)->bInterfaceProtocol) { in snd_usb_create_mixer()
3452 mixer->protocol = UAC_VERSION_1; in snd_usb_create_mixer()
3455 mixer->protocol = UAC_VERSION_2; in snd_usb_create_mixer()
3458 mixer->protocol = UAC_VERSION_3; in snd_usb_create_mixer()
3462 if (mixer->protocol == UAC_VERSION_3 && in snd_usb_create_mixer()
3464 err = snd_usb_mixer_controls_badd(mixer, ctrlif); in snd_usb_create_mixer()
3468 err = snd_usb_mixer_controls(mixer); in snd_usb_create_mixer()
3473 err = snd_usb_mixer_status_create(mixer); in snd_usb_create_mixer()
3477 err = create_keep_iface_ctl(mixer); in snd_usb_create_mixer()
3481 snd_usb_mixer_apply_create_quirk(mixer); in snd_usb_create_mixer()
3483 err = snd_device_new(chip->card, SNDRV_DEV_CODEC, mixer, &dev_ops); in snd_usb_create_mixer()
3491 list_add(&mixer->list, &chip->mixer_list); in snd_usb_create_mixer()
3495 snd_usb_mixer_free(mixer); in snd_usb_create_mixer()
3499 void snd_usb_mixer_disconnect(struct usb_mixer_interface *mixer) in snd_usb_mixer_disconnect() argument
3501 if (mixer->disconnected) in snd_usb_mixer_disconnect()
3503 if (mixer->urb) in snd_usb_mixer_disconnect()
3504 usb_kill_urb(mixer->urb); in snd_usb_mixer_disconnect()
3505 if (mixer->rc_urb) in snd_usb_mixer_disconnect()
3506 usb_kill_urb(mixer->rc_urb); in snd_usb_mixer_disconnect()
3507 mixer->disconnected = true; in snd_usb_mixer_disconnect()
3512 static void snd_usb_mixer_inactivate(struct usb_mixer_interface *mixer) in snd_usb_mixer_inactivate() argument
3514 usb_kill_urb(mixer->urb); in snd_usb_mixer_inactivate()
3515 usb_kill_urb(mixer->rc_urb); in snd_usb_mixer_inactivate()
3518 static int snd_usb_mixer_activate(struct usb_mixer_interface *mixer) in snd_usb_mixer_activate() argument
3522 if (mixer->urb) { in snd_usb_mixer_activate()
3523 err = usb_submit_urb(mixer->urb, GFP_NOIO); in snd_usb_mixer_activate()
3531 int snd_usb_mixer_suspend(struct usb_mixer_interface *mixer) in snd_usb_mixer_suspend() argument
3533 snd_usb_mixer_inactivate(mixer); in snd_usb_mixer_suspend()
3567 int snd_usb_mixer_resume(struct usb_mixer_interface *mixer, bool reset_resume) in snd_usb_mixer_resume() argument
3575 for_each_mixer_elem(list, mixer, id) { in snd_usb_mixer_resume()
3585 snd_usb_mixer_resume_quirk(mixer); in snd_usb_mixer_resume()
3587 return snd_usb_mixer_activate(mixer); in snd_usb_mixer_resume()
3592 struct usb_mixer_interface *mixer, in snd_usb_mixer_elem_init_std() argument
3595 list->mixer = mixer; in snd_usb_mixer_elem_init_std()