Lines Matching refs:mixer
46 * Support for loading mixer volume and mux configuration from the
59 * This ALSA mixer gives access to (model-dependent):
60 * - input, output, mixer-matrix muxes
61 * - mixer-matrix gain stages
139 #include "mixer.h"
153 /* mixer range from -80dB to +6dB in 0.5dB steps */
161 /* map from (dB + 80) * 2 to mixer value
190 /* Maximum number of inputs to the mixer */
193 /* Maximum number of outputs from the mixer */
255 * - dst_descr: printf format string for mixer controls
387 struct usb_mixer_interface *mixer;
1028 /* Devices without a mixer (Gen 3 Solo and 2i2) */
1183 struct usb_mixer_interface *mixer, u32 cmd,
1186 struct scarlett2_data *private = mixer->private_data;
1187 struct usb_device *dev = mixer->chip->dev;
1219 mixer->chip,
1236 mixer->chip,
1254 mixer->chip,
1280 struct usb_mixer_interface *mixer,
1290 return scarlett2_usb(mixer, SCARLETT2_USB_GET_DATA,
1296 struct usb_mixer_interface *mixer,
1299 struct scarlett2_data *private = mixer->private_data;
1310 err = scarlett2_usb_get(mixer, config_item->offset, buf, size);
1323 err = scarlett2_usb_get(mixer, config_item->offset, &value, 1);
1336 static void scarlett2_config_save(struct usb_mixer_interface *mixer)
1340 int err = scarlett2_usb(mixer, SCARLETT2_USB_DATA_CMD,
1344 usb_audio_err(mixer->chip, "config save failed: %d\n", err);
1353 scarlett2_config_save(private->mixer);
1358 struct usb_mixer_interface *mixer,
1361 struct scarlett2_data *private = mixer->private_data;
1393 err = scarlett2_usb_get(mixer, offset, &tmp, 1);
1409 err = scarlett2_usb(mixer, SCARLETT2_USB_SET_DATA,
1417 err = scarlett2_usb(mixer, SCARLETT2_USB_DATA_CMD,
1431 struct usb_mixer_interface *mixer,
1437 err = scarlett2_usb(mixer, SCARLETT2_USB_GET_SYNC,
1448 struct usb_mixer_interface *mixer,
1451 return scarlett2_usb_get(mixer, SCARLETT2_USB_VOLUME_STATUS_OFFSET,
1458 static int scarlett2_usb_get_mix(struct usb_mixer_interface *mixer,
1461 struct scarlett2_data *private = mixer->private_data;
1478 err = scarlett2_usb(mixer, SCARLETT2_USB_GET_MIX,
1501 static int scarlett2_usb_set_mix(struct usb_mixer_interface *mixer,
1504 struct scarlett2_data *private = mixer->private_data;
1523 return scarlett2_usb(mixer, SCARLETT2_USB_SET_MIX,
1583 usb_audio_err(private->mixer->chip,
1595 usb_audio_err(private->mixer->chip,
1605 static int scarlett2_usb_get_mux(struct usb_mixer_interface *mixer)
1607 struct scarlett2_data *private = mixer->private_data;
1623 err = scarlett2_usb(mixer, SCARLETT2_USB_GET_MUX,
1636 static int scarlett2_usb_set_mux(struct usb_mixer_interface *mixer)
1638 struct scarlett2_data *private = mixer->private_data;
1691 err = scarlett2_usb(mixer, SCARLETT2_USB_SET_MUX,
1702 static int scarlett2_usb_get_meter_levels(struct usb_mixer_interface *mixer,
1716 err = scarlett2_usb(mixer, SCARLETT2_USB_GET_METER,
1731 static int scarlett2_add_new_ctl(struct usb_mixer_interface *mixer,
1744 /* We set USB_MIXER_BESPOKEN type, so that the core USB mixer code
1748 elem->head.mixer = mixer;
1778 static int scarlett2_update_sync(struct usb_mixer_interface *mixer)
1780 struct scarlett2_data *private = mixer->private_data;
1783 return scarlett2_usb_get_sync_status(mixer, &private->sync);
1799 struct usb_mixer_interface *mixer = elem->head.mixer;
1800 struct scarlett2_data *private = mixer->private_data;
1806 err = scarlett2_update_sync(mixer);
1825 static int scarlett2_add_sync_ctl(struct usb_mixer_interface *mixer)
1827 struct scarlett2_data *private = mixer->private_data;
1829 /* devices without a mixer also don't support reporting sync status */
1833 return scarlett2_add_new_ctl(mixer, &scarlett2_sync_ctl,
1842 static int scarlett2_update_volumes(struct usb_mixer_interface *mixer)
1844 struct scarlett2_data *private = mixer->private_data;
1855 err = scarlett2_usb_get_volume_status(mixer, &volume_status);
1895 struct usb_mixer_interface *mixer = elem->head.mixer;
1896 struct scarlett2_data *private = mixer->private_data;
1902 err = scarlett2_update_volumes(mixer);
1933 struct usb_mixer_interface *mixer = elem->head.mixer;
1934 struct scarlett2_data *private = mixer->private_data;
1941 err = scarlett2_update_volumes(mixer);
1956 struct usb_mixer_interface *mixer = elem->head.mixer;
1957 struct scarlett2_data *private = mixer->private_data;
1970 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_LINE_OUT_VOLUME,
2013 struct usb_mixer_interface *mixer = elem->head.mixer;
2014 struct scarlett2_data *private = mixer->private_data;
2021 err = scarlett2_update_volumes(mixer);
2036 struct usb_mixer_interface *mixer = elem->head.mixer;
2037 struct scarlett2_data *private = mixer->private_data;
2052 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_MUTE_SWITCH,
2098 struct scarlett2_data *private = elem->head.mixer->private_data;
2105 static void scarlett2_vol_ctl_set_writable(struct usb_mixer_interface *mixer,
2108 struct scarlett2_data *private = mixer->private_data;
2109 struct snd_card *card = mixer->chip->card;
2133 static int scarlett2_sw_hw_change(struct usb_mixer_interface *mixer,
2136 struct scarlett2_data *private = mixer->private_data;
2145 scarlett2_vol_ctl_set_writable(mixer, ctl_index, !val);
2153 mixer, SCARLETT2_CONFIG_LINE_OUT_VOLUME,
2160 mixer, SCARLETT2_CONFIG_MUTE_SWITCH,
2166 return scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_SW_HW_SWITCH,
2174 struct usb_mixer_interface *mixer = elem->head.mixer;
2175 struct scarlett2_data *private = mixer->private_data;
2188 err = scarlett2_sw_hw_change(mixer, ctl_index, val);
2207 static int scarlett2_update_input_other(struct usb_mixer_interface *mixer)
2209 struct scarlett2_data *private = mixer->private_data;
2216 mixer, SCARLETT2_CONFIG_LEVEL_SWITCH,
2225 mixer, SCARLETT2_CONFIG_PAD_SWITCH,
2233 mixer, SCARLETT2_CONFIG_AIR_SWITCH,
2241 mixer, SCARLETT2_CONFIG_PHANTOM_SWITCH,
2247 mixer, SCARLETT2_CONFIG_PHANTOM_PERSISTENCE,
2270 struct usb_mixer_interface *mixer = elem->head.mixer;
2271 struct scarlett2_data *private = mixer->private_data;
2280 err = scarlett2_update_input_other(mixer);
2295 struct usb_mixer_interface *mixer = elem->head.mixer;
2296 struct scarlett2_data *private = mixer->private_data;
2313 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_LEVEL_SWITCH,
2337 struct usb_mixer_interface *mixer = elem->head.mixer;
2338 struct scarlett2_data *private = mixer->private_data;
2344 err = scarlett2_update_input_other(mixer);
2360 struct usb_mixer_interface *mixer = elem->head.mixer;
2361 struct scarlett2_data *private = mixer->private_data;
2377 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_PAD_SWITCH,
2401 struct usb_mixer_interface *mixer = elem->head.mixer;
2402 struct scarlett2_data *private = mixer->private_data;
2408 err = scarlett2_update_input_other(mixer);
2423 struct usb_mixer_interface *mixer = elem->head.mixer;
2424 struct scarlett2_data *private = mixer->private_data;
2440 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_AIR_SWITCH,
2464 struct usb_mixer_interface *mixer = elem->head.mixer;
2465 struct scarlett2_data *private = mixer->private_data;
2471 err = scarlett2_update_input_other(mixer);
2487 struct usb_mixer_interface *mixer = elem->head.mixer;
2488 struct scarlett2_data *private = mixer->private_data;
2504 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_PHANTOM_SWITCH,
2528 struct scarlett2_data *private = elem->head.mixer->private_data;
2538 struct usb_mixer_interface *mixer = elem->head.mixer;
2539 struct scarlett2_data *private = mixer->private_data;
2556 mixer, SCARLETT2_CONFIG_PHANTOM_PERSISTENCE, index, val);
2575 static int scarlett2_update_monitor_other(struct usb_mixer_interface *mixer)
2577 struct scarlett2_data *private = mixer->private_data;
2595 mixer, SCARLETT2_CONFIG_DIRECT_MONITOR,
2605 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE,
2611 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH,
2634 err = scarlett2_usb_get_config(mixer,
2650 struct usb_mixer_interface *mixer = elem->head.mixer;
2651 struct scarlett2_data *private = elem->head.mixer->private_data;
2657 err = scarlett2_update_monitor_other(mixer);
2672 struct usb_mixer_interface *mixer = elem->head.mixer;
2673 struct scarlett2_data *private = mixer->private_data;
2690 mixer, SCARLETT2_CONFIG_DIRECT_MONITOR, index, val);
2729 static int scarlett2_add_direct_monitor_ctl(struct usb_mixer_interface *mixer)
2731 struct scarlett2_data *private = mixer->private_data;
2743 mixer, &scarlett2_direct_monitor_ctl[info->direct_monitor - 1],
2763 struct usb_mixer_interface *mixer = elem->head.mixer;
2764 struct scarlett2_data *private = mixer->private_data;
2770 err = scarlett2_update_monitor_other(mixer);
2784 static int scarlett2_speaker_switch_enable(struct usb_mixer_interface *mixer)
2786 struct snd_card *card = mixer->chip->card;
2787 struct scarlett2_data *private = mixer->private_data;
2795 err = scarlett2_sw_hw_change(private->mixer, i, 1);
2819 static void scarlett2_speaker_switch_disable(struct usb_mixer_interface *mixer)
2821 struct snd_card *card = mixer->chip->card;
2822 struct scarlett2_data *private = mixer->private_data;
2842 struct usb_mixer_interface *mixer = elem->head.mixer;
2843 struct scarlett2_data *private = mixer->private_data;
2859 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE,
2866 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH,
2873 err = scarlett2_speaker_switch_enable(mixer);
2875 scarlett2_speaker_switch_disable(mixer);
2894 struct usb_mixer_interface *mixer)
2896 struct scarlett2_data *private = mixer->private_data;
2903 mixer, &scarlett2_speaker_switch_enum_ctl,
2924 struct usb_mixer_interface *mixer = elem->head.mixer;
2925 struct scarlett2_data *private = mixer->private_data;
2931 err = scarlett2_update_monitor_other(mixer);
2946 struct usb_mixer_interface *mixer = elem->head.mixer;
2947 struct scarlett2_data *private = mixer->private_data;
2963 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE,
2970 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH,
2992 struct usb_mixer_interface *mixer = elem->head.mixer;
2993 struct scarlett2_data *private = mixer->private_data;
3005 struct usb_mixer_interface *mixer = elem->head.mixer;
3006 struct scarlett2_data *private = mixer->private_data;
3029 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_TALKBACK_MAP,
3048 struct usb_mixer_interface *mixer)
3050 struct scarlett2_data *private = mixer->private_data;
3061 mixer, &scarlett2_talkback_enum_ctl,
3070 err = scarlett2_add_new_ctl(mixer, &scarlett2_talkback_map_ctl,
3085 struct usb_mixer_interface *mixer = elem->head.mixer;
3086 struct scarlett2_data *private = mixer->private_data;
3092 err = scarlett2_update_volumes(mixer);
3107 struct usb_mixer_interface *mixer = elem->head.mixer;
3108 struct scarlett2_data *private = mixer->private_data;
3128 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_DIM_MUTE,
3139 snd_ctl_notify(mixer->chip->card,
3160 static int scarlett2_add_line_out_ctls(struct usb_mixer_interface *mixer)
3162 struct scarlett2_data *private = mixer->private_data;
3173 err = scarlett2_add_new_ctl(mixer,
3193 err = scarlett2_add_new_ctl(mixer,
3203 err = scarlett2_add_new_ctl(mixer,
3214 scarlett2_vol_ctl_set_writable(mixer, i, 0);
3221 err = scarlett2_add_new_ctl(mixer,
3240 mixer, &scarlett2_dim_mute_ctl,
3252 static int scarlett2_add_line_in_ctls(struct usb_mixer_interface *mixer)
3254 struct scarlett2_data *private = mixer->private_data;
3265 err = scarlett2_add_new_ctl(mixer, &scarlett2_level_enum_ctl,
3274 err = scarlett2_add_new_ctl(mixer, &scarlett2_pad_ctl,
3283 err = scarlett2_add_new_ctl(mixer, &scarlett2_air_ctl,
3295 mixer, &scarlett2_phantom_ctl,
3308 mixer, &scarlett2_phantom_ctl,
3316 mixer, &scarlett2_phantom_persistence_ctl, 0, 1,
3344 struct scarlett2_data *private = elem->head.mixer->private_data;
3354 struct usb_mixer_interface *mixer = elem->head.mixer;
3355 struct scarlett2_data *private = mixer->private_data;
3373 err = scarlett2_usb_set_mix(mixer, mix_num);
3400 static int scarlett2_add_mixer_ctls(struct usb_mixer_interface *mixer)
3402 struct scarlett2_data *private = mixer->private_data;
3419 err = scarlett2_add_new_ctl(mixer, &scarlett2_mixer_ctl,
3434 struct scarlett2_data *private = elem->head.mixer->private_data;
3469 struct usb_mixer_interface *mixer = elem->head.mixer;
3470 struct scarlett2_data *private = mixer->private_data;
3477 err = scarlett2_usb_get_mux(mixer);
3492 struct usb_mixer_interface *mixer = elem->head.mixer;
3493 struct scarlett2_data *private = mixer->private_data;
3507 err = scarlett2_usb_set_mux(mixer);
3524 static int scarlett2_add_mux_enums(struct usb_mixer_interface *mixer)
3526 struct scarlett2_data *private = mixer->private_data;
3545 err = scarlett2_add_new_ctl(mixer,
3579 err = scarlett2_usb_get_meter_levels(elem->head.mixer, elem->channels,
3598 static int scarlett2_add_meter_ctl(struct usb_mixer_interface *mixer)
3600 struct scarlett2_data *private = mixer->private_data;
3602 /* devices without a mixer also don't support reporting levels */
3606 return scarlett2_add_new_ctl(mixer, &scarlett2_meter_ctl,
3617 struct scarlett2_data *private = elem->head.mixer->private_data;
3627 struct usb_mixer_interface *mixer = elem->head.mixer;
3628 struct scarlett2_data *private = mixer->private_data;
3643 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_MSD_SWITCH,
3661 static int scarlett2_add_msd_ctl(struct usb_mixer_interface *mixer)
3663 struct scarlett2_data *private = mixer->private_data;
3670 if (!private->msd_switch && !(mixer->chip->setup & SCARLETT2_MSD_ENABLE))
3674 return scarlett2_add_new_ctl(mixer, &scarlett2_msd_ctl,
3684 struct scarlett2_data *private = elem->head.mixer->private_data;
3694 struct usb_mixer_interface *mixer = elem->head.mixer;
3695 struct scarlett2_data *private = mixer->private_data;
3710 err = scarlett2_usb_set_config(mixer,
3729 static int scarlett2_add_standalone_ctl(struct usb_mixer_interface *mixer)
3731 struct scarlett2_data *private = mixer->private_data;
3737 return scarlett2_add_new_ctl(mixer, &scarlett2_standalone_ctl,
3743 static void scarlett2_private_free(struct usb_mixer_interface *mixer)
3745 struct scarlett2_data *private = mixer->private_data;
3749 mixer->private_data = NULL;
3752 static void scarlett2_private_suspend(struct usb_mixer_interface *mixer)
3754 struct scarlett2_data *private = mixer->private_data;
3757 scarlett2_config_save(private->mixer);
3812 static int scarlett2_init_private(struct usb_mixer_interface *mixer,
3825 mixer->private_data = private;
3826 mixer->private_free = scarlett2_private_free;
3827 mixer->private_suspend = scarlett2_private_suspend;
3832 private->mixer = mixer;
3834 return scarlett2_find_fc_interface(mixer->chip->dev, private);
3838 static int scarlett2_usb_init(struct usb_mixer_interface *mixer)
3840 struct usb_device *dev = mixer->chip->dev;
3841 struct scarlett2_data *private = mixer->private_data;
3856 err = scarlett2_usb(mixer, SCARLETT2_USB_INIT_1, NULL, 0, NULL, 0);
3862 return scarlett2_usb(mixer, SCARLETT2_USB_INIT_2, NULL, 0, NULL, 84);
3866 static int scarlett2_read_configs(struct usb_mixer_interface *mixer)
3868 struct scarlett2_data *private = mixer->private_data;
3880 mixer, SCARLETT2_CONFIG_MSD_SWITCH,
3890 err = scarlett2_update_input_other(mixer);
3894 err = scarlett2_update_monitor_other(mixer);
3898 /* the rest of the configuration is for devices with a mixer */
3903 mixer, SCARLETT2_CONFIG_STANDALONE_SWITCH,
3908 err = scarlett2_update_sync(mixer);
3912 err = scarlett2_usb_get_volume_status(mixer, &volume_status);
3945 err = scarlett2_usb_get_mix(mixer, i);
3950 return scarlett2_usb_get_mux(mixer);
3955 struct usb_mixer_interface *mixer)
3957 struct scarlett2_data *private = mixer->private_data;
3961 snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
3967 struct usb_mixer_interface *mixer)
3969 struct snd_card *card = mixer->chip->card;
3970 struct scarlett2_data *private = mixer->private_data;
3983 snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
3994 struct usb_mixer_interface *mixer)
3996 struct snd_card *card = mixer->chip->card;
3997 struct scarlett2_data *private = mixer->private_data;
4021 struct usb_mixer_interface *mixer)
4023 struct snd_card *card = mixer->chip->card;
4024 struct scarlett2_data *private = mixer->private_data;
4048 struct usb_mixer_interface *mixer)
4050 struct snd_card *card = mixer->chip->card;
4051 struct scarlett2_data *private = mixer->private_data;
4076 scarlett2_notify_dim_mute(mixer);
4090 struct usb_mixer_interface *mixer = urb->context;
4100 scarlett2_notify_sync(mixer);
4102 scarlett2_notify_monitor(mixer);
4104 scarlett2_notify_dim_mute(mixer);
4106 scarlett2_notify_input_other(mixer);
4108 scarlett2_notify_monitor_other(mixer);
4114 urb->dev = mixer->chip->dev;
4119 static int scarlett2_init_notify(struct usb_mixer_interface *mixer)
4121 struct usb_device *dev = mixer->chip->dev;
4122 struct scarlett2_data *private = mixer->private_data;
4126 if (mixer->urb) {
4127 usb_audio_err(mixer->chip,
4128 "%s: mixer urb already in use!\n", __func__);
4135 mixer->urb = usb_alloc_urb(0, GFP_KERNEL);
4136 if (!mixer->urb)
4143 usb_fill_int_urb(mixer->urb, dev, pipe,
4145 scarlett2_notify, mixer, private->bInterval);
4147 return usb_submit_urb(mixer->urb, GFP_KERNEL);
4150 static int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer)
4156 while (*info && (*info)->usb_id != mixer->chip->usb_id)
4162 err = scarlett2_init_private(mixer, *info);
4167 err = scarlett2_usb_init(mixer);
4172 err = scarlett2_read_configs(mixer);
4177 err = scarlett2_add_msd_ctl(mixer);
4182 if (((struct scarlett2_data *)mixer->private_data)->msd_switch)
4186 err = scarlett2_add_line_out_ctls(mixer);
4191 err = scarlett2_add_line_in_ctls(mixer);
4195 /* Create the input, output, and mixer mux input selections */
4196 err = scarlett2_add_mux_enums(mixer);
4200 /* Create the matrix mixer controls */
4201 err = scarlett2_add_mixer_ctls(mixer);
4206 err = scarlett2_add_meter_ctl(mixer);
4211 err = scarlett2_add_sync_ctl(mixer);
4216 err = scarlett2_add_direct_monitor_ctl(mixer);
4221 err = scarlett2_add_speaker_switch_ctl(mixer);
4226 err = scarlett2_add_talkback_ctls(mixer);
4231 err = scarlett2_add_standalone_ctl(mixer);
4236 err = scarlett2_init_notify(mixer);
4243 int snd_scarlett_gen2_init(struct usb_mixer_interface *mixer)
4245 struct snd_usb_audio *chip = mixer->chip;
4249 if (!mixer->protocol)
4267 err = snd_scarlett_gen2_controls_create(mixer);
4269 usb_audio_err(mixer->chip,