Commit 76b188c4 authored by Chris J Arges's avatar Chris J Arges Committed by Takashi Iwai

ALSA: usb-audio: Scarlett mixer interface for 6i6, 18i6, 18i8 and 18i20

This code contains the Scarlett mixer interface code that was originally
written by Tobias Hoffman and Robin Gareus. Because the device doesn't
properly implement UAC2 this code adds a mixer quirk for the device.

Changes from the original code include removing the metering code along with
dead code and comments. Compiler warnings were fixed. The code to initialize
the sampling rate was causing a crash this was fixed as discussed on the
mailing list. Error, and info messages were convered to dev_err and dev_info
interfaces. The custom scarlett_mixer_elem_info struct was replaced with the
more generic usb_mixer_elem_info to be able to recycle more code from mixer.c.

This patch also makes additional modifications based on upstream comments.
Individual control creation functions are removed and a generic
function is no used. Macros for function calls are removed to improve
readability. Hardcoded control initialization is removed. Save to HW
functionality has been removed. Strings for enums are created dynamically for
the mixer. Strings used for controls are now SNDRV_CTL_ELEM_ID_NAME_MAXLEN
length.
Signed-off-by: default avatarChris J Arges <chris.j.arges@canonical.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent eef90451
...@@ -9,6 +9,7 @@ snd-usb-audio-objs := card.o \ ...@@ -9,6 +9,7 @@ snd-usb-audio-objs := card.o \
helper.o \ helper.o \
mixer.o \ mixer.o \
mixer_quirks.o \ mixer_quirks.o \
mixer_scarlett.o \
pcm.o \ pcm.o \
proc.o \ proc.o \
quirks.o \ quirks.o \
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include "usbaudio.h" #include "usbaudio.h"
#include "mixer.h" #include "mixer.h"
#include "mixer_quirks.h" #include "mixer_quirks.h"
#include "mixer_scarlett.h"
#include "helper.h" #include "helper.h"
extern struct snd_kcontrol_new *snd_usb_feature_unit_ctl; extern struct snd_kcontrol_new *snd_usb_feature_unit_ctl;
...@@ -1770,6 +1771,14 @@ int snd_usb_mixer_apply_create_quirk(struct usb_mixer_interface *mixer) ...@@ -1770,6 +1771,14 @@ int snd_usb_mixer_apply_create_quirk(struct usb_mixer_interface *mixer)
/* detection is disabled in mixer_maps.c */ /* detection is disabled in mixer_maps.c */
err = snd_create_std_mono_table(mixer, ebox44_table); err = snd_create_std_mono_table(mixer, ebox44_table);
break; break;
case USB_ID(0x1235, 0x8012): /* Focusrite Scarlett 6i6 */
case USB_ID(0x1235, 0x8002): /* Focusrite Scarlett 8i6 */
case USB_ID(0x1235, 0x8004): /* Focusrite Scarlett 18i6 */
case USB_ID(0x1235, 0x8014): /* Focusrite Scarlett 18i8 */
case USB_ID(0x1235, 0x800c): /* Focusrite Scarlett 18i20 */
err = snd_scarlett_controls_create(mixer);
break;
} }
return err; return err;
......
This diff is collapsed.
#ifndef __USB_MIXER_SCARLETT_H
#define __USB_MIXER_SCARLETT_H
int snd_scarlett_controls_create(struct usb_mixer_interface *mixer);
#endif /* __USB_MIXER_SCARLETT_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment