Lines Matching full:mixer

44  * Support for loading mixer volume and mux configuration from the
54 * This ALSA mixer gives access to (model-dependent):
55 * - input, output, mixer-matrix muxes
56 * - mixer-matrix gain stages
80 * | | Mixer | | |
133 #include "mixer.h"
147 /* mixer range from -80dB to +6dB in 0.5dB steps */
155 /* map from (dB + 80) * 2 to mixer value
184 /* Maximum number of inputs to the mixer */
187 /* Maximum number of outputs from the mixer */
203 * - Mixer I/O
238 * - dst_descr: printf format string for mixer controls
274 .dst_descr = "Mixer Input %02d Capture"
311 /* Gen 3 devices without a mixer have a different
372 struct usb_mixer_interface *mixer; member
947 /* scarlett2_config_items[0] is for devices without a mixer
948 * scarlett2_config_items[1] is for devices with a mixer
953 /* Devices without a mixer (Solo and 2i2 Gen 3) */
973 /* Devices with a mixer (Gen 2 and all other Gen 3) */
1059 struct usb_mixer_interface *mixer, u32 cmd, in scarlett2_usb() argument
1062 struct scarlett2_data *private = mixer->private_data; in scarlett2_usb()
1063 struct usb_device *dev = mixer->chip->dev; in scarlett2_usb()
1095 mixer->chip, in scarlett2_usb()
1112 mixer->chip, in scarlett2_usb()
1130 mixer->chip, in scarlett2_usb()
1156 struct usb_mixer_interface *mixer, in scarlett2_usb_get() argument
1166 return scarlett2_usb(mixer, SCARLETT2_USB_GET_DATA, in scarlett2_usb_get()
1172 struct usb_mixer_interface *mixer, in scarlett2_usb_get_config() argument
1175 struct scarlett2_data *private = mixer->private_data; in scarlett2_usb_get_config()
1186 err = scarlett2_usb_get(mixer, config_item->offset, buf, size); in scarlett2_usb_get_config()
1199 err = scarlett2_usb_get(mixer, config_item->offset, &value, 1); in scarlett2_usb_get_config()
1212 static void scarlett2_config_save(struct usb_mixer_interface *mixer) in scarlett2_config_save() argument
1216 scarlett2_usb(mixer, SCARLETT2_USB_DATA_CMD, in scarlett2_config_save()
1227 scarlett2_config_save(private->mixer); in scarlett2_config_save_work()
1232 struct usb_mixer_interface *mixer, in scarlett2_usb_set_config() argument
1235 struct scarlett2_data *private = mixer->private_data; in scarlett2_usb_set_config()
1267 scarlett2_usb_get(mixer, offset, &tmp, 1); in scarlett2_usb_set_config()
1280 err = scarlett2_usb(mixer, SCARLETT2_USB_SET_DATA, in scarlett2_usb_set_config()
1288 err = scarlett2_usb(mixer, SCARLETT2_USB_DATA_CMD, in scarlett2_usb_set_config()
1302 struct usb_mixer_interface *mixer, in scarlett2_usb_get_sync_status() argument
1308 err = scarlett2_usb(mixer, SCARLETT2_USB_GET_SYNC, in scarlett2_usb_get_sync_status()
1319 struct usb_mixer_interface *mixer, in scarlett2_usb_get_volume_status() argument
1322 return scarlett2_usb_get(mixer, SCARLETT2_USB_VOLUME_STATUS_OFFSET, in scarlett2_usb_get_volume_status()
1329 static int scarlett2_usb_get_mix(struct usb_mixer_interface *mixer, in scarlett2_usb_get_mix() argument
1332 struct scarlett2_data *private = mixer->private_data; in scarlett2_usb_get_mix()
1349 err = scarlett2_usb(mixer, SCARLETT2_USB_GET_MIX, in scarlett2_usb_get_mix()
1372 static int scarlett2_usb_set_mix(struct usb_mixer_interface *mixer, in scarlett2_usb_set_mix() argument
1375 struct scarlett2_data *private = mixer->private_data; in scarlett2_usb_set_mix()
1394 return scarlett2_usb(mixer, SCARLETT2_USB_SET_MIX, in scarlett2_usb_set_mix()
1454 usb_audio_err(private->mixer->chip, in scarlett2_usb_populate_mux()
1466 usb_audio_err(private->mixer->chip, in scarlett2_usb_populate_mux()
1476 static int scarlett2_usb_get_mux(struct usb_mixer_interface *mixer) in scarlett2_usb_get_mux() argument
1478 struct scarlett2_data *private = mixer->private_data; in scarlett2_usb_get_mux()
1494 err = scarlett2_usb(mixer, SCARLETT2_USB_GET_MUX, in scarlett2_usb_get_mux()
1507 static int scarlett2_usb_set_mux(struct usb_mixer_interface *mixer) in scarlett2_usb_set_mux() argument
1509 struct scarlett2_data *private = mixer->private_data; in scarlett2_usb_set_mux()
1562 err = scarlett2_usb(mixer, SCARLETT2_USB_SET_MUX, in scarlett2_usb_set_mux()
1573 static int scarlett2_usb_get_meter_levels(struct usb_mixer_interface *mixer, in scarlett2_usb_get_meter_levels() argument
1587 err = scarlett2_usb(mixer, SCARLETT2_USB_GET_METER, in scarlett2_usb_get_meter_levels()
1602 static int scarlett2_add_new_ctl(struct usb_mixer_interface *mixer, in scarlett2_add_new_ctl() argument
1615 /* We set USB_MIXER_BESPOKEN type, so that the core USB mixer code in scarlett2_add_new_ctl()
1619 elem->head.mixer = mixer; in scarlett2_add_new_ctl()
1649 static int scarlett2_update_sync(struct usb_mixer_interface *mixer) in scarlett2_update_sync() argument
1651 struct scarlett2_data *private = mixer->private_data; in scarlett2_update_sync()
1654 return scarlett2_usb_get_sync_status(mixer, &private->sync); in scarlett2_update_sync()
1670 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_sync_ctl_get() local
1671 struct scarlett2_data *private = mixer->private_data; in scarlett2_sync_ctl_get()
1675 scarlett2_update_sync(mixer); in scarlett2_sync_ctl_get()
1690 static int scarlett2_add_sync_ctl(struct usb_mixer_interface *mixer) in scarlett2_add_sync_ctl() argument
1692 struct scarlett2_data *private = mixer->private_data; in scarlett2_add_sync_ctl()
1694 /* devices without a mixer also don't support reporting sync status */ in scarlett2_add_sync_ctl()
1698 return scarlett2_add_new_ctl(mixer, &scarlett2_sync_ctl, in scarlett2_add_sync_ctl()
1707 static int scarlett2_update_volumes(struct usb_mixer_interface *mixer) in scarlett2_update_volumes() argument
1709 struct scarlett2_data *private = mixer->private_data; in scarlett2_update_volumes()
1720 err = scarlett2_usb_get_volume_status(mixer, &volume_status); in scarlett2_update_volumes()
1760 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_master_volume_ctl_get() local
1761 struct scarlett2_data *private = mixer->private_data; in scarlett2_master_volume_ctl_get()
1765 scarlett2_update_volumes(mixer); in scarlett2_master_volume_ctl_get()
1785 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_volume_ctl_get() local
1786 struct scarlett2_data *private = mixer->private_data; in scarlett2_volume_ctl_get()
1791 scarlett2_update_volumes(mixer); in scarlett2_volume_ctl_get()
1802 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_volume_ctl_put() local
1803 struct scarlett2_data *private = mixer->private_data; in scarlett2_volume_ctl_put()
1816 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_LINE_OUT_VOLUME, in scarlett2_volume_ctl_put()
1859 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_mute_ctl_get() local
1860 struct scarlett2_data *private = mixer->private_data; in scarlett2_mute_ctl_get()
1865 scarlett2_update_volumes(mixer); in scarlett2_mute_ctl_get()
1876 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_mute_ctl_put() local
1877 struct scarlett2_data *private = mixer->private_data; in scarlett2_mute_ctl_put()
1892 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_MUTE_SWITCH, in scarlett2_mute_ctl_put()
1938 struct scarlett2_data *private = elem->head.mixer->private_data; in scarlett2_sw_hw_enum_ctl_get()
1945 static void scarlett2_vol_ctl_set_writable(struct usb_mixer_interface *mixer, in scarlett2_vol_ctl_set_writable() argument
1948 struct scarlett2_data *private = mixer->private_data; in scarlett2_vol_ctl_set_writable()
1949 struct snd_card *card = mixer->chip->card; in scarlett2_vol_ctl_set_writable()
1973 static int scarlett2_sw_hw_change(struct usb_mixer_interface *mixer, in scarlett2_sw_hw_change() argument
1976 struct scarlett2_data *private = mixer->private_data; in scarlett2_sw_hw_change()
1985 scarlett2_vol_ctl_set_writable(mixer, ctl_index, !val); in scarlett2_sw_hw_change()
1993 mixer, SCARLETT2_CONFIG_LINE_OUT_VOLUME, in scarlett2_sw_hw_change()
2000 mixer, SCARLETT2_CONFIG_MUTE_SWITCH, in scarlett2_sw_hw_change()
2006 return scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_SW_HW_SWITCH, in scarlett2_sw_hw_change()
2014 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_sw_hw_enum_ctl_put() local
2015 struct scarlett2_data *private = mixer->private_data; in scarlett2_sw_hw_enum_ctl_put()
2028 err = scarlett2_sw_hw_change(mixer, ctl_index, val); in scarlett2_sw_hw_enum_ctl_put()
2047 static int scarlett2_update_input_other(struct usb_mixer_interface *mixer) in scarlett2_update_input_other() argument
2049 struct scarlett2_data *private = mixer->private_data; in scarlett2_update_input_other()
2056 mixer, SCARLETT2_CONFIG_LEVEL_SWITCH, in scarlett2_update_input_other()
2065 mixer, SCARLETT2_CONFIG_PAD_SWITCH, in scarlett2_update_input_other()
2073 mixer, SCARLETT2_CONFIG_AIR_SWITCH, in scarlett2_update_input_other()
2081 mixer, SCARLETT2_CONFIG_PHANTOM_SWITCH, in scarlett2_update_input_other()
2087 mixer, SCARLETT2_CONFIG_PHANTOM_PERSISTENCE, in scarlett2_update_input_other()
2110 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_level_enum_ctl_get() local
2111 struct scarlett2_data *private = mixer->private_data; in scarlett2_level_enum_ctl_get()
2118 scarlett2_update_input_other(mixer); in scarlett2_level_enum_ctl_get()
2129 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_level_enum_ctl_put() local
2130 struct scarlett2_data *private = mixer->private_data; in scarlett2_level_enum_ctl_put()
2147 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_LEVEL_SWITCH, in scarlett2_level_enum_ctl_put()
2171 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_pad_ctl_get() local
2172 struct scarlett2_data *private = mixer->private_data; in scarlett2_pad_ctl_get()
2176 scarlett2_update_input_other(mixer); in scarlett2_pad_ctl_get()
2188 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_pad_ctl_put() local
2189 struct scarlett2_data *private = mixer->private_data; in scarlett2_pad_ctl_put()
2205 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_PAD_SWITCH, in scarlett2_pad_ctl_put()
2229 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_air_ctl_get() local
2230 struct scarlett2_data *private = mixer->private_data; in scarlett2_air_ctl_get()
2234 scarlett2_update_input_other(mixer); in scarlett2_air_ctl_get()
2245 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_air_ctl_put() local
2246 struct scarlett2_data *private = mixer->private_data; in scarlett2_air_ctl_put()
2262 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_AIR_SWITCH, in scarlett2_air_ctl_put()
2286 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_phantom_ctl_get() local
2287 struct scarlett2_data *private = mixer->private_data; in scarlett2_phantom_ctl_get()
2291 scarlett2_update_input_other(mixer); in scarlett2_phantom_ctl_get()
2303 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_phantom_ctl_put() local
2304 struct scarlett2_data *private = mixer->private_data; in scarlett2_phantom_ctl_put()
2320 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_PHANTOM_SWITCH, in scarlett2_phantom_ctl_put()
2344 struct scarlett2_data *private = elem->head.mixer->private_data; in scarlett2_phantom_persistence_ctl_get()
2354 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_phantom_persistence_ctl_put() local
2355 struct scarlett2_data *private = mixer->private_data; in scarlett2_phantom_persistence_ctl_put()
2372 mixer, SCARLETT2_CONFIG_PHANTOM_PERSISTENCE, index, val); in scarlett2_phantom_persistence_ctl_put()
2391 static int scarlett2_update_monitor_other(struct usb_mixer_interface *mixer) in scarlett2_update_monitor_other() argument
2393 struct scarlett2_data *private = mixer->private_data; in scarlett2_update_monitor_other()
2411 mixer, SCARLETT2_CONFIG_DIRECT_MONITOR, in scarlett2_update_monitor_other()
2421 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE, in scarlett2_update_monitor_other()
2427 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH, in scarlett2_update_monitor_other()
2450 err = scarlett2_usb_get_config(mixer, in scarlett2_update_monitor_other()
2466 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_direct_monitor_ctl_get() local
2467 struct scarlett2_data *private = elem->head.mixer->private_data; in scarlett2_direct_monitor_ctl_get()
2471 scarlett2_update_monitor_other(mixer); in scarlett2_direct_monitor_ctl_get()
2482 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_direct_monitor_ctl_put() local
2483 struct scarlett2_data *private = mixer->private_data; in scarlett2_direct_monitor_ctl_put()
2500 mixer, SCARLETT2_CONFIG_DIRECT_MONITOR, index, val); in scarlett2_direct_monitor_ctl_put()
2539 static int scarlett2_add_direct_monitor_ctl(struct usb_mixer_interface *mixer) in scarlett2_add_direct_monitor_ctl() argument
2541 struct scarlett2_data *private = mixer->private_data; in scarlett2_add_direct_monitor_ctl()
2553 mixer, &scarlett2_direct_monitor_ctl[info->direct_monitor - 1], in scarlett2_add_direct_monitor_ctl()
2573 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_speaker_switch_enum_ctl_get() local
2574 struct scarlett2_data *private = mixer->private_data; in scarlett2_speaker_switch_enum_ctl_get()
2578 scarlett2_update_monitor_other(mixer); in scarlett2_speaker_switch_enum_ctl_get()
2588 static int scarlett2_speaker_switch_enable(struct usb_mixer_interface *mixer) in scarlett2_speaker_switch_enable() argument
2590 struct snd_card *card = mixer->chip->card; in scarlett2_speaker_switch_enable()
2591 struct scarlett2_data *private = mixer->private_data; in scarlett2_speaker_switch_enable()
2599 err = scarlett2_sw_hw_change(private->mixer, i, 1); in scarlett2_speaker_switch_enable()
2623 static void scarlett2_speaker_switch_disable(struct usb_mixer_interface *mixer) in scarlett2_speaker_switch_disable() argument
2625 struct snd_card *card = mixer->chip->card; in scarlett2_speaker_switch_disable()
2626 struct scarlett2_data *private = mixer->private_data; in scarlett2_speaker_switch_disable()
2646 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_speaker_switch_enum_ctl_put() local
2647 struct scarlett2_data *private = mixer->private_data; in scarlett2_speaker_switch_enum_ctl_put()
2663 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE, in scarlett2_speaker_switch_enum_ctl_put()
2670 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH, in scarlett2_speaker_switch_enum_ctl_put()
2677 err = scarlett2_speaker_switch_enable(mixer); in scarlett2_speaker_switch_enum_ctl_put()
2679 scarlett2_speaker_switch_disable(mixer); in scarlett2_speaker_switch_enum_ctl_put()
2698 struct usb_mixer_interface *mixer) in scarlett2_add_speaker_switch_ctl() argument
2700 struct scarlett2_data *private = mixer->private_data; in scarlett2_add_speaker_switch_ctl()
2707 mixer, &scarlett2_speaker_switch_enum_ctl, in scarlett2_add_speaker_switch_ctl()
2728 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_talkback_enum_ctl_get() local
2729 struct scarlett2_data *private = mixer->private_data; in scarlett2_talkback_enum_ctl_get()
2733 scarlett2_update_monitor_other(mixer); in scarlett2_talkback_enum_ctl_get()
2744 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_talkback_enum_ctl_put() local
2745 struct scarlett2_data *private = mixer->private_data; in scarlett2_talkback_enum_ctl_put()
2761 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE, in scarlett2_talkback_enum_ctl_put()
2768 mixer, SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH, in scarlett2_talkback_enum_ctl_put()
2790 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_talkback_map_ctl_get() local
2791 struct scarlett2_data *private = mixer->private_data; in scarlett2_talkback_map_ctl_get()
2803 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_talkback_map_ctl_put() local
2804 struct scarlett2_data *private = mixer->private_data; in scarlett2_talkback_map_ctl_put()
2827 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_TALKBACK_MAP, in scarlett2_talkback_map_ctl_put()
2846 struct usb_mixer_interface *mixer) in scarlett2_add_talkback_ctls() argument
2848 struct scarlett2_data *private = mixer->private_data; in scarlett2_add_talkback_ctls()
2859 mixer, &scarlett2_talkback_enum_ctl, in scarlett2_add_talkback_ctls()
2868 err = scarlett2_add_new_ctl(mixer, &scarlett2_talkback_map_ctl, in scarlett2_add_talkback_ctls()
2883 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_dim_mute_ctl_get() local
2884 struct scarlett2_data *private = mixer->private_data; in scarlett2_dim_mute_ctl_get()
2888 scarlett2_update_volumes(mixer); in scarlett2_dim_mute_ctl_get()
2899 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_dim_mute_ctl_put() local
2900 struct scarlett2_data *private = mixer->private_data; in scarlett2_dim_mute_ctl_put()
2920 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_DIM_MUTE, in scarlett2_dim_mute_ctl_put()
2931 snd_ctl_notify(mixer->chip->card, in scarlett2_dim_mute_ctl_put()
2952 static int scarlett2_add_line_out_ctls(struct usb_mixer_interface *mixer) in scarlett2_add_line_out_ctls() argument
2954 struct scarlett2_data *private = mixer->private_data; in scarlett2_add_line_out_ctls()
2965 err = scarlett2_add_new_ctl(mixer, in scarlett2_add_line_out_ctls()
2985 err = scarlett2_add_new_ctl(mixer, in scarlett2_add_line_out_ctls()
2995 err = scarlett2_add_new_ctl(mixer, in scarlett2_add_line_out_ctls()
3006 scarlett2_vol_ctl_set_writable(mixer, i, 0); in scarlett2_add_line_out_ctls()
3013 err = scarlett2_add_new_ctl(mixer, in scarlett2_add_line_out_ctls()
3032 mixer, &scarlett2_dim_mute_ctl, in scarlett2_add_line_out_ctls()
3044 static int scarlett2_add_line_in_ctls(struct usb_mixer_interface *mixer) in scarlett2_add_line_in_ctls() argument
3046 struct scarlett2_data *private = mixer->private_data; in scarlett2_add_line_in_ctls()
3057 err = scarlett2_add_new_ctl(mixer, &scarlett2_level_enum_ctl, in scarlett2_add_line_in_ctls()
3066 err = scarlett2_add_new_ctl(mixer, &scarlett2_pad_ctl, in scarlett2_add_line_in_ctls()
3075 err = scarlett2_add_new_ctl(mixer, &scarlett2_air_ctl, in scarlett2_add_line_in_ctls()
3087 mixer, &scarlett2_phantom_ctl, in scarlett2_add_line_in_ctls()
3100 mixer, &scarlett2_phantom_ctl, in scarlett2_add_line_in_ctls()
3108 mixer, &scarlett2_phantom_persistence_ctl, 0, 1, in scarlett2_add_line_in_ctls()
3117 /*** Mixer Volume Controls ***/
3136 struct scarlett2_data *private = elem->head.mixer->private_data; in scarlett2_mixer_ctl_get()
3146 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_mixer_ctl_put() local
3147 struct scarlett2_data *private = mixer->private_data; in scarlett2_mixer_ctl_put()
3164 err = scarlett2_usb_set_mix(mixer, mix_num); in scarlett2_mixer_ctl_put()
3191 static int scarlett2_add_mixer_ctls(struct usb_mixer_interface *mixer) in scarlett2_add_mixer_ctls() argument
3193 struct scarlett2_data *private = mixer->private_data; in scarlett2_add_mixer_ctls()
3210 err = scarlett2_add_new_ctl(mixer, &scarlett2_mixer_ctl, in scarlett2_add_mixer_ctls()
3225 struct scarlett2_data *private = elem->head.mixer->private_data; in scarlett2_mux_src_enum_ctl_info()
3260 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_mux_src_enum_ctl_get() local
3261 struct scarlett2_data *private = mixer->private_data; in scarlett2_mux_src_enum_ctl_get()
3273 scarlett2_usb_get_mux(mixer); in scarlett2_mux_src_enum_ctl_get()
3284 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_mux_src_enum_ctl_put() local
3285 struct scarlett2_data *private = mixer->private_data; in scarlett2_mux_src_enum_ctl_put()
3306 err = scarlett2_usb_set_mux(mixer); in scarlett2_mux_src_enum_ctl_put()
3323 static int scarlett2_add_mux_enums(struct usb_mixer_interface *mixer) in scarlett2_add_mux_enums() argument
3325 struct scarlett2_data *private = mixer->private_data; in scarlett2_add_mux_enums()
3344 err = scarlett2_add_new_ctl(mixer, in scarlett2_add_mux_enums()
3378 err = scarlett2_usb_get_meter_levels(elem->head.mixer, elem->channels, in scarlett2_meter_ctl_get()
3397 static int scarlett2_add_meter_ctl(struct usb_mixer_interface *mixer) in scarlett2_add_meter_ctl() argument
3399 struct scarlett2_data *private = mixer->private_data; in scarlett2_add_meter_ctl()
3401 /* devices without a mixer also don't support reporting levels */ in scarlett2_add_meter_ctl()
3405 return scarlett2_add_new_ctl(mixer, &scarlett2_meter_ctl, in scarlett2_add_meter_ctl()
3416 struct scarlett2_data *private = elem->head.mixer->private_data; in scarlett2_msd_ctl_get()
3426 struct usb_mixer_interface *mixer = elem->head.mixer; in scarlett2_msd_ctl_put() local
3427 struct scarlett2_data *private = mixer->private_data; in scarlett2_msd_ctl_put()
3442 err = scarlett2_usb_set_config(mixer, SCARLETT2_CONFIG_MSD_SWITCH, in scarlett2_msd_ctl_put()
3460 static int scarlett2_add_msd_ctl(struct usb_mixer_interface *mixer) in scarlett2_add_msd_ctl() argument
3462 struct scarlett2_data *private = mixer->private_data; in scarlett2_add_msd_ctl()
3469 if (!private->msd_switch && !(mixer->chip->setup & SCARLETT2_MSD_ENABLE)) in scarlett2_add_msd_ctl()
3473 return scarlett2_add_new_ctl(mixer, &scarlett2_msd_ctl, in scarlett2_add_msd_ctl()
3479 static void scarlett2_private_free(struct usb_mixer_interface *mixer) in scarlett2_private_free() argument
3481 struct scarlett2_data *private = mixer->private_data; in scarlett2_private_free()
3485 mixer->private_data = NULL; in scarlett2_private_free()
3488 static void scarlett2_private_suspend(struct usb_mixer_interface *mixer) in scarlett2_private_suspend() argument
3490 struct scarlett2_data *private = mixer->private_data; in scarlett2_private_suspend()
3493 scarlett2_config_save(private->mixer); in scarlett2_private_suspend()
3548 static int scarlett2_init_private(struct usb_mixer_interface *mixer, in scarlett2_init_private() argument
3561 mixer->private_data = private; in scarlett2_init_private()
3562 mixer->private_free = scarlett2_private_free; in scarlett2_init_private()
3563 mixer->private_suspend = scarlett2_private_suspend; in scarlett2_init_private()
3568 private->mixer = mixer; in scarlett2_init_private()
3570 return scarlett2_find_fc_interface(mixer->chip->dev, private); in scarlett2_init_private()
3574 static int scarlett2_usb_init(struct usb_mixer_interface *mixer) in scarlett2_usb_init() argument
3576 struct usb_device *dev = mixer->chip->dev; in scarlett2_usb_init()
3577 struct scarlett2_data *private = mixer->private_data; in scarlett2_usb_init()
3592 err = scarlett2_usb(mixer, SCARLETT2_USB_INIT_1, NULL, 0, NULL, 0); in scarlett2_usb_init()
3598 return scarlett2_usb(mixer, SCARLETT2_USB_INIT_2, NULL, 0, NULL, 84); in scarlett2_usb_init()
3602 static int scarlett2_read_configs(struct usb_mixer_interface *mixer) in scarlett2_read_configs() argument
3604 struct scarlett2_data *private = mixer->private_data; in scarlett2_read_configs()
3616 mixer, SCARLETT2_CONFIG_MSD_SWITCH, in scarlett2_read_configs()
3626 err = scarlett2_update_input_other(mixer); in scarlett2_read_configs()
3630 err = scarlett2_update_monitor_other(mixer); in scarlett2_read_configs()
3634 /* the rest of the configuration is for devices with a mixer */ in scarlett2_read_configs()
3638 err = scarlett2_update_sync(mixer); in scarlett2_read_configs()
3642 err = scarlett2_usb_get_volume_status(mixer, &volume_status); in scarlett2_read_configs()
3675 err = scarlett2_usb_get_mix(mixer, i); in scarlett2_read_configs()
3680 return scarlett2_usb_get_mux(mixer); in scarlett2_read_configs()
3685 struct usb_mixer_interface *mixer) in scarlett2_notify_sync() argument
3687 struct scarlett2_data *private = mixer->private_data; in scarlett2_notify_sync()
3691 snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE, in scarlett2_notify_sync()
3697 struct usb_mixer_interface *mixer) in scarlett2_notify_monitor() argument
3699 struct snd_card *card = mixer->chip->card; in scarlett2_notify_monitor()
3700 struct scarlett2_data *private = mixer->private_data; in scarlett2_notify_monitor()
3713 snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE, in scarlett2_notify_monitor()
3724 struct usb_mixer_interface *mixer) in scarlett2_notify_dim_mute() argument
3726 struct snd_card *card = mixer->chip->card; in scarlett2_notify_dim_mute()
3727 struct scarlett2_data *private = mixer->private_data; in scarlett2_notify_dim_mute()
3751 struct usb_mixer_interface *mixer) in scarlett2_notify_input_other() argument
3753 struct snd_card *card = mixer->chip->card; in scarlett2_notify_input_other()
3754 struct scarlett2_data *private = mixer->private_data; in scarlett2_notify_input_other()
3778 struct usb_mixer_interface *mixer) in scarlett2_notify_monitor_other() argument
3780 struct snd_card *card = mixer->chip->card; in scarlett2_notify_monitor_other()
3781 struct scarlett2_data *private = mixer->private_data; in scarlett2_notify_monitor_other()
3806 scarlett2_notify_dim_mute(mixer); in scarlett2_notify_monitor_other()
3820 struct usb_mixer_interface *mixer = urb->context; in scarlett2_notify() local
3830 scarlett2_notify_sync(mixer); in scarlett2_notify()
3832 scarlett2_notify_monitor(mixer); in scarlett2_notify()
3834 scarlett2_notify_dim_mute(mixer); in scarlett2_notify()
3836 scarlett2_notify_input_other(mixer); in scarlett2_notify()
3838 scarlett2_notify_monitor_other(mixer); in scarlett2_notify()
3844 urb->dev = mixer->chip->dev; in scarlett2_notify()
3849 static int scarlett2_init_notify(struct usb_mixer_interface *mixer) in scarlett2_init_notify() argument
3851 struct usb_device *dev = mixer->chip->dev; in scarlett2_init_notify()
3852 struct scarlett2_data *private = mixer->private_data; in scarlett2_init_notify()
3856 if (mixer->urb) { in scarlett2_init_notify()
3857 usb_audio_err(mixer->chip, in scarlett2_init_notify()
3858 "%s: mixer urb already in use!\n", __func__); in scarlett2_init_notify()
3865 mixer->urb = usb_alloc_urb(0, GFP_KERNEL); in scarlett2_init_notify()
3866 if (!mixer->urb) in scarlett2_init_notify()
3873 usb_fill_int_urb(mixer->urb, dev, pipe, in scarlett2_init_notify()
3875 scarlett2_notify, mixer, private->bInterval); in scarlett2_init_notify()
3877 return usb_submit_urb(mixer->urb, GFP_KERNEL); in scarlett2_init_notify()
3880 static int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer) in snd_scarlett_gen2_controls_create() argument
3886 while (*info && (*info)->usb_id != mixer->chip->usb_id) in snd_scarlett_gen2_controls_create()
3892 err = scarlett2_init_private(mixer, *info); in snd_scarlett_gen2_controls_create()
3897 err = scarlett2_usb_init(mixer); in snd_scarlett_gen2_controls_create()
3902 err = scarlett2_read_configs(mixer); in snd_scarlett_gen2_controls_create()
3907 err = scarlett2_add_msd_ctl(mixer); in snd_scarlett_gen2_controls_create()
3912 if (((struct scarlett2_data *)mixer->private_data)->msd_switch) in snd_scarlett_gen2_controls_create()
3916 err = scarlett2_add_line_out_ctls(mixer); in snd_scarlett_gen2_controls_create()
3921 err = scarlett2_add_line_in_ctls(mixer); in snd_scarlett_gen2_controls_create()
3925 /* Create the input, output, and mixer mux input selections */ in snd_scarlett_gen2_controls_create()
3926 err = scarlett2_add_mux_enums(mixer); in snd_scarlett_gen2_controls_create()
3930 /* Create the matrix mixer controls */ in snd_scarlett_gen2_controls_create()
3931 err = scarlett2_add_mixer_ctls(mixer); in snd_scarlett_gen2_controls_create()
3936 err = scarlett2_add_meter_ctl(mixer); in snd_scarlett_gen2_controls_create()
3941 err = scarlett2_add_sync_ctl(mixer); in snd_scarlett_gen2_controls_create()
3946 err = scarlett2_add_direct_monitor_ctl(mixer); in snd_scarlett_gen2_controls_create()
3951 err = scarlett2_add_speaker_switch_ctl(mixer); in snd_scarlett_gen2_controls_create()
3956 err = scarlett2_add_talkback_ctls(mixer); in snd_scarlett_gen2_controls_create()
3961 err = scarlett2_init_notify(mixer); in snd_scarlett_gen2_controls_create()
3968 int snd_scarlett_gen2_init(struct usb_mixer_interface *mixer) in snd_scarlett_gen2_init() argument
3970 struct snd_usb_audio *chip = mixer->chip; in snd_scarlett_gen2_init()
3974 if (!mixer->protocol) in snd_scarlett_gen2_init()
3979 "Focusrite Scarlett Gen 2/3 Mixer Driver disabled; " in snd_scarlett_gen2_init()
3989 "Focusrite Scarlett Gen 2/3 Mixer Driver enabled pid=0x%04x", in snd_scarlett_gen2_init()
3992 err = snd_scarlett_gen2_controls_create(mixer); in snd_scarlett_gen2_init()
3994 usb_audio_err(mixer->chip, in snd_scarlett_gen2_init()
3995 "Error initialising Scarlett Mixer Driver: %d", in snd_scarlett_gen2_init()