mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-10 21:35:08 +00:00
ALSA: usb-audio: Scarlett Gen 2 mixer interface
Add mixer quirk for the Focusrite Scarlett 6i6, 18i8, and 18i20 Gen 2 audio interfaces. Although the interfaces are USB compliant, additional input/output level controls and hardware routing/mixing functionality are available using proprietary USB requests. Signed-off-by: Geoffrey D. Bennett <g@b4.vu> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
2127c01b7f
commit
9e4d5c1be2
@ -11,6 +11,7 @@ snd-usb-audio-objs := card.o \
|
|||||||
mixer.o \
|
mixer.o \
|
||||||
mixer_quirks.o \
|
mixer_quirks.o \
|
||||||
mixer_scarlett.o \
|
mixer_scarlett.o \
|
||||||
|
mixer_scarlett_gen2.o \
|
||||||
mixer_us16x08.o \
|
mixer_us16x08.o \
|
||||||
pcm.o \
|
pcm.o \
|
||||||
power.o \
|
power.o \
|
||||||
|
@ -3509,6 +3509,8 @@ void snd_usb_mixer_disconnect(struct usb_mixer_interface *mixer)
|
|||||||
usb_kill_urb(mixer->urb);
|
usb_kill_urb(mixer->urb);
|
||||||
if (mixer->rc_urb)
|
if (mixer->rc_urb)
|
||||||
usb_kill_urb(mixer->rc_urb);
|
usb_kill_urb(mixer->rc_urb);
|
||||||
|
if (mixer->private_free)
|
||||||
|
mixer->private_free(mixer);
|
||||||
mixer->disconnected = true;
|
mixer->disconnected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3536,6 +3538,8 @@ static int snd_usb_mixer_activate(struct usb_mixer_interface *mixer)
|
|||||||
int snd_usb_mixer_suspend(struct usb_mixer_interface *mixer)
|
int snd_usb_mixer_suspend(struct usb_mixer_interface *mixer)
|
||||||
{
|
{
|
||||||
snd_usb_mixer_inactivate(mixer);
|
snd_usb_mixer_inactivate(mixer);
|
||||||
|
if (mixer->private_suspend)
|
||||||
|
mixer->private_suspend(mixer);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,6 +28,10 @@ struct usb_mixer_interface {
|
|||||||
struct media_mixer_ctl *media_mixer_ctl;
|
struct media_mixer_ctl *media_mixer_ctl;
|
||||||
|
|
||||||
bool disconnected;
|
bool disconnected;
|
||||||
|
|
||||||
|
void *private_data;
|
||||||
|
void (*private_free)(struct usb_mixer_interface *mixer);
|
||||||
|
void (*private_suspend)(struct usb_mixer_interface *mixer);
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_CHANNELS 16 /* max logical channels */
|
#define MAX_CHANNELS 16 /* max logical channels */
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#include "mixer.h"
|
#include "mixer.h"
|
||||||
#include "mixer_quirks.h"
|
#include "mixer_quirks.h"
|
||||||
#include "mixer_scarlett.h"
|
#include "mixer_scarlett.h"
|
||||||
|
#include "mixer_scarlett_gen2.h"
|
||||||
#include "mixer_us16x08.h"
|
#include "mixer_us16x08.h"
|
||||||
#include "helper.h"
|
#include "helper.h"
|
||||||
|
|
||||||
@ -2258,6 +2259,12 @@ int snd_usb_mixer_apply_create_quirk(struct usb_mixer_interface *mixer)
|
|||||||
err = snd_scarlett_controls_create(mixer);
|
err = snd_scarlett_controls_create(mixer);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case USB_ID(0x1235, 0x8203): /* Focusrite Scarlett 6i6 2nd Gen */
|
||||||
|
case USB_ID(0x1235, 0x8204): /* Focusrite Scarlett 18i8 2nd Gen */
|
||||||
|
case USB_ID(0x1235, 0x8201): /* Focusrite Scarlett 18i20 2nd Gen */
|
||||||
|
err = snd_scarlett_gen2_controls_create(mixer);
|
||||||
|
break;
|
||||||
|
|
||||||
case USB_ID(0x041e, 0x323b): /* Creative Sound Blaster E1 */
|
case USB_ID(0x041e, 0x323b): /* Creative Sound Blaster E1 */
|
||||||
err = snd_soundblaster_e1_switch_create(mixer);
|
err = snd_soundblaster_e1_switch_create(mixer);
|
||||||
break;
|
break;
|
||||||
|
2075
sound/usb/mixer_scarlett_gen2.c
Normal file
2075
sound/usb/mixer_scarlett_gen2.c
Normal file
File diff suppressed because it is too large
Load Diff
7
sound/usb/mixer_scarlett_gen2.h
Normal file
7
sound/usb/mixer_scarlett_gen2.h
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
#ifndef __USB_MIXER_SCARLETT_GEN2_H
|
||||||
|
#define __USB_MIXER_SCARLETT_GEN2_H
|
||||||
|
|
||||||
|
int snd_scarlett_gen2_controls_create(struct usb_mixer_interface *mixer);
|
||||||
|
|
||||||
|
#endif /* __USB_MIXER_SCARLETT_GEN2_H */
|
Loading…
x
Reference in New Issue
Block a user