From nobody Thu Sep 24 22:13:41 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3A288221FC6; Sat, 19 Sep 2026 15:18:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789831140; cv=none; b=H4g4iPPXl4rWgpPCrbLFuWpdUD2Uj6SF90gwH3sqU8gGj7y3FeQuVkkEbU6inm/heCz+TjrNYfqGlSUpNjc9vZuLmunai612Ce7WqAqFjptyCrGy/HOnRPSph/jbim46XR0X0LPUs7CsRZt/Y/hDPLNpIbSeyul01ZCHGCIhLTk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789831140; c=relaxed/simple; bh=FF+sUXGaxDjwItzvZTxbniE3mfHwZUTiYW2dGIDQpbc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gsrauXAepyK/vdxnlzdLRsQurmcU3VI9ALukCslFk8E2ZbwuzrftCfXgOBjsLA968r1k8htT0OmnOt40yNmwywDXOmDSqhjnWKrVNPIQfCQSaRbCsHFYTHCBv1Yr04CxX+OlhZtLW4ZqI1m6JBmwPZN9GCG3q1F/LqyOSyx5jcY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.li; spf=pass smtp.mailfrom=gmx.li; dkim=pass (2048-bit key) header.d=gmx.li header.i=arc@gmx.li header.b=LiF07tmi; arc=none smtp.client-ip=212.227.15.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.li Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.li Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.li header.i=arc@gmx.li header.b="LiF07tmi" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.li; s=s31663417; t=1789831135; x=1790435935; i=arc@gmx.li; bh=DH7J+SE0flSCu6USYiWN6ZnQP49DIsaF8LQ12rBOd/M=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=LiF07tmi8cXefYuBuosPiY6jErK2qIMIui2niZNEFD5ta9tT1V4gk+T3tRoxeSSP 4zqF9KNblULA1e5jN13tX4mKgCzr4goKUgNqFvxKSXz1ddWp+35FTGfzskYUkpey2 gzgVuxLI3z3+4fUvreJgLbf/B4kDf9Yo/4axM+yyHs5pu0b4KG/Rt+WKBaQeGBPKI g66vBK3PhuTzAIyIVyRDfd8F/z5UuGUMevPdAyZH2O1Xh/qHYLiD6BAUv/UmA3b+t tM1X9/aFVMje6HVN6IyPKwKGEikCqECaIjBs6A1lNDIPQrKjAlaajPFVfNMt40joV QcxVuaFAsR4IVTheUQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MfpOd-1wb6zH432n-00e5Sh; Sat, 19 Sep 2026 17:18:55 +0200 From: Christian Ruppert To: Jaroslav Kysela , Takashi Iwai , linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org Cc: Christian Ruppert , Will Porter , Peter Drabik , Neil Andrews Subject: [PATCH 1/3] Fix Audient EVO4 master playback control name Date: Sat, 19 Sep 2026 17:18:38 +0200 Message-ID: <20260919151840.24371-2-arc@gmx.li> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260919151840.24371-1-arc@gmx.li> References: <20260919151840.24371-1-arc@gmx.li> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:jT0v88nRGdM55SKcRvFTWfiGuMQhjLGsHhhZm0oY7QKLr+siK5T UvdeQxq8hTyAeh/uTwwOBU8NIho6MYMht1Lzi34NXGP5Jth6v/N2dFBp1H8xX7R2fe5Q/yw gM+Rw6umtNn+/FQe1h8Knh9A6QSgjoo+rbKMoGSyhuNUkvwpnzdjzRR7cDaVAQxkbMYdPGL aKxiXIsVaBwP1gLLyGexQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:2uYRF7ZXO5w=;cjftyrBumrNO+qztzfQCv8Dbq7C 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 Content-Type: text/plain; charset="utf-8" The Audient EVO4 master volume mixer channel enumerates as 'EVO4 '. Rename it to 'Master' according to control-names.rst. Signed-off-by: Christian Ruppert --- sound/usb/mixer_maps.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c index 41454cb403d0..1a6ad776126b 100644 --- a/sound/usb/mixer_maps.c +++ b/sound/usb/mixer_maps.c @@ -505,6 +505,14 @@ static const struct usbmix_connector_map gigabyte_b450= _connector_map[] =3D { {} }; =20 +/* Audient EVO4: Rename FU 10 from 'EVO4 ' to 'Master' according to the + * ALSA naming convention + */ +static const struct usbmix_name_map audient_evo4_map[] =3D { + { 10, "Master Playback" }, + {} +}; + /* Audient iD14 MkI and MkII: FU 12 sits on the monitor mixer branch but is * traced through to the Speaker output terminal, so it is named "Speaker * Playback Volume". On MkII it controls only 4 of 6 playback channels. = MkI @@ -632,6 +640,11 @@ static const struct usbmix_ctl_map usbmix_ctl_maps[] = =3D { .id =3D USB_ID(0x2708, 0x0002), .map =3D audient_id14_map, }, + { + /* Audient EVO4 MkI */ + .id =3D USB_ID(0x2708, 0x0006), + .map =3D audient_evo4_map, + }, { /* Audient iD14 MkII */ .id =3D USB_ID(0x2708, 0x0008), --=20 2.55.0 From nobody Thu Sep 24 22:13:41 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 00EE02EEE76; Sat, 19 Sep 2026 15:19:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789831147; cv=none; b=lERZJwHQHexqw/776fxltXu2v4ROpa47c8d+X7stMmkIURj72PfC5UIg5tc9BlLyehRrnHQf+DSuR4KAp8JlJpguvYj26m1Cdw9WtZ1CI4aJl3YrDePr2E6MWZxrUpLiaxbR1MvOrjDj811oy4RemWm3jAJWhHtZRki2gMq7u2Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789831147; c=relaxed/simple; bh=H2TRv5GUDrJOgYFHG0jG5u85F80UTNHMaLW5I8eHOv4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gb6RUrswzlc2+99Yk/puWWjDLqAg7GP39IoEUIth78uoHx1GE/03Ai/0BUt626t8WNaJTZwaKnAQ41kll3qgu+JJ3gIuM/LjZYQKJcixzz9W5HkLBFhM5gth29r2vuEIm6oQe6g+tR0H0UFrUaS1XGOAFk69ocCnSFe7LjBgp/U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.li; spf=pass smtp.mailfrom=gmx.li; dkim=pass (2048-bit key) header.d=gmx.li header.i=arc@gmx.li header.b=OqG6nA+h; arc=none smtp.client-ip=212.227.15.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.li Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.li Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.li header.i=arc@gmx.li header.b="OqG6nA+h" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.li; s=s31663417; t=1789831137; x=1790435937; i=arc@gmx.li; bh=taIdo+PqbwTQh9kVociZXgOj82BRUkrICStCYDlLnw4=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=OqG6nA+hYS/6IPDW8belcPpPhBhTPoDwcnfhzDHiP9fttwzORgFsE3c87dDDLMBP vhehBEM4HSAZjULv0Fbb0xvxyAZ4znRRK8oserqc0EFH0g/XVOMQR8gZZ2+gN/uIr hchh6MzDTY9iociwp75Cw4wS3a7g0JcJu0jGw9pu0JURraaZFV2BIfJ25Ib02AXr/ +/yXjXFQ5Wo34+/2iwzBsbwqWCqMyWh/y1KI2jN2cJWxgnkPlA615mPEVePEzHHPn srMXGfmmzluTP5ArvlgABlrM300GuemmQ6y7MTOUJdnbTlixKmY5ZtzYo6w5f/5Jn CiMw8gqw8DGJJhGplQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MFKGZ-1x1c772rMX-00DaMB; Sat, 19 Sep 2026 17:18:56 +0200 From: Christian Ruppert To: Jaroslav Kysela , Takashi Iwai , linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org Cc: Christian Ruppert , Will Porter , Peter Drabik , Neil Andrews Subject: [PATCH 2/3] Add Audient EVO4 mixer quirks Date: Sat, 19 Sep 2026 17:18:39 +0200 Message-ID: <20260919151840.24371-3-arc@gmx.li> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260919151840.24371-1-arc@gmx.li> References: <20260919151840.24371-1-arc@gmx.li> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:oLa8EwVX6cihb1ox8Sw15bN+p26aKfLXR1IF5PA65GGo3Nd3b+a FxdRdWRfx7CaRMLWEp+ZpXJgiANw07a2BNDLCKu4XutdlcvCvwNCUVH7beYNyV3rK42UaiM hGCLpOP55D8fAEqepGdDigtdCe6KIAeBb4rGYY1qTLj33D4u7PhxZFFrzhbGO7KU/Gl8YoD 8AC1uN5QLZ8Ec2+lfQ9Lg== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:V+4cIP35wxc=;nfRhEMQ68agSyb3WMW6XQqrlOVv 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 pRLd0/Oq9rwmqGbhQY8hQP/96SB+amPZQbg== Content-Type: text/plain; charset="utf-8" The controls enumerated by the Audient EVO4 are incomplete. Add missing controls for * channel muting * the cross-fader * the recording mixer * phantom power The driver is structured so that it should be trivial to extend it to the EVO8 (and potentially other Audient devices) but we need a kind soul who has access to that hardware to correctly map the control names and test everything. Signed-off-by: Christian Ruppert --- MAINTAINERS | 7 + sound/usb/Makefile | 1 + sound/usb/mixer_evo.c | 505 +++++++++++++++++++++++++++++++++++++++ sound/usb/mixer_evo.h | 12 + sound/usb/mixer_quirks.c | 5 + 5 files changed, 530 insertions(+) create mode 100644 sound/usb/mixer_evo.c create mode 100644 sound/usb/mixer_evo.h diff --git a/MAINTAINERS b/MAINTAINERS index c2414447892c..5f8df442b1a5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4346,6 +4346,13 @@ F: drivers/net/ieee802154/at86rf230.h F: drivers/net/ieee802154/atusb.c F: drivers/net/ieee802154/atusb.h =20 +AUDIENT EVO MIXER DRIVER +M: Christian Ruppert +L: linux-sound@vger.kernel.org +S: Maintained +F: sound/usb/mixer_evo.c +F: sound/usb/mixer_evo.h + AUDIT SUBSYSTEM M: Paul Moore M: Eric Paris diff --git a/sound/usb/Makefile b/sound/usb/Makefile index e62794a87e73..2e842dcc73de 100644 --- a/sound/usb/Makefile +++ b/sound/usb/Makefile @@ -11,6 +11,7 @@ snd-usb-audio-y :=3D card.o \ helper.o \ implicit.o \ mixer.o \ + mixer_evo.o \ mixer_quirks.o \ mixer_scarlett.o \ mixer_scarlett2.o \ diff --git a/sound/usb/mixer_evo.c b/sound/usb/mixer_evo.c new file mode 100644 index 000000000000..c327b82c8d2d --- /dev/null +++ b/sound/usb/mixer_evo.c @@ -0,0 +1,505 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Audient EVO driver for ALSA + * Copyright (C) 2026 Christian Ruppert + * + * Based on the work of Ivan Hazucha for audient-evo-py. + * https://github.com/vanzaho/audient-evo-py/ + */ + + +#include +#include +#include +#include +#include +#include + +#include "usbaudio.h" +#include "mixer.h" +#include "mixer_quirks.h" +#include "helper.h" +#include "mixer_evo.h" + + +enum snd_evo_type { + SND_EVO_TYPE_MONITOR =3D 0, + SND_EVO_TYPE_PHANTOM, + SND_EVO_TYPE_MUTE, + SND_EVO_TYPE_MUTE_OUT, + SND_EVO_TYPE_MIXER, + SND_EVO_TYPE_NCTYPES +}; + +static const struct snd_evo_ctrl_type { + snd_ctl_elem_type_t type; + bool invert; + union { + int integer; + } min; + union { + int integer; + } max; + u16 wValue; + u16 wIndex; +} snd_evo_ctypes[SND_EVO_TYPE_NCTYPES] =3D { + [SND_EVO_TYPE_MONITOR] =3D { + .type =3D SNDRV_CTL_ELEM_TYPE_INTEGER, + .min.integer =3D 0, + .max.integer =3D 127, + .wValue =3D 0x0000, + .wIndex =3D 0x3800, + }, + [SND_EVO_TYPE_PHANTOM] =3D { + .type =3D SNDRV_CTL_ELEM_TYPE_BOOLEAN, + .invert =3D false, + .min.integer =3D 0, + .max.integer =3D 1, + .wValue =3D 0x0000, + .wIndex =3D 0x3A00, + }, + [SND_EVO_TYPE_MUTE] =3D { + .type =3D SNDRV_CTL_ELEM_TYPE_BOOLEAN, + .invert =3D true, + .min.integer =3D 0, + .max.integer =3D 1, + .wValue =3D 0x0200, + .wIndex =3D 0x3A00, + }, + [SND_EVO_TYPE_MUTE_OUT] =3D { + .type =3D SNDRV_CTL_ELEM_TYPE_BOOLEAN, + .invert =3D true, + .min.integer =3D 0, + .max.integer =3D 1, + .wValue =3D 0x0100, + .wIndex =3D 0x3B00, + }, + [SND_EVO_TYPE_MIXER] =3D { + .type =3D SNDRV_CTL_ELEM_TYPE_INTEGER, + .min.integer =3D -128 * 256, + .max.integer =3D 6 * 256, + .wValue =3D 0x0100, + .wIndex =3D 0x3C00, + }, +}; + +#define SND_EVO_FLAGS_DIRECTION (1L<<0) +#define SND_EVO_FLAGS_CAPTURE (1L<<0) +#define SND_EVO_FLAGS_PLAYBACK (0L<<0) + +struct snd_evo_ctrl { + char *basename; + enum snd_evo_type type; + unsigned int channels; + unsigned int hwchannels; + unsigned int val_offs; + unsigned long flags; +}; + +static const struct snd_evo_ctrl evo4_controls[] =3D { + { + .basename =3D "Master", + .type =3D SND_EVO_TYPE_MUTE_OUT, + .channels =3D 1, + .hwchannels =3D 1, + .val_offs =3D 0, + .flags =3D SND_EVO_FLAGS_PLAYBACK, + }, + { + .basename =3D "Mic", + .type =3D SND_EVO_TYPE_MUTE, + .channels =3D 4, + .hwchannels =3D 2, + .val_offs =3D 0, + .flags =3D SND_EVO_FLAGS_PLAYBACK, + }, + { + .basename =3D "Monitor", + .type =3D SND_EVO_TYPE_MONITOR, + .channels =3D 1, + .hwchannels =3D 1, + .val_offs =3D 0, + .flags =3D SND_EVO_FLAGS_PLAYBACK, + }, + { + .basename =3D "Mic 1", + .type =3D SND_EVO_TYPE_MIXER, + .channels =3D 2, + .hwchannels =3D 2, + .val_offs =3D 0, + .flags =3D SND_EVO_FLAGS_CAPTURE, + }, + { + .basename =3D "Mic 2", + .type =3D SND_EVO_TYPE_MIXER, + .channels =3D 2, + .hwchannels =3D 2, + .val_offs =3D 2, + .flags =3D SND_EVO_FLAGS_CAPTURE, + }, + { + .basename =3D "Master Left", + .type =3D SND_EVO_TYPE_MIXER, + .channels =3D 2, + .hwchannels =3D 2, + .val_offs =3D 4, + .flags =3D SND_EVO_FLAGS_CAPTURE, + }, + { + .basename =3D "Master Right", + .type =3D SND_EVO_TYPE_MIXER, + .channels =3D 2, + .hwchannels =3D 2, + .val_offs =3D 6, + .flags =3D SND_EVO_FLAGS_CAPTURE, + }, + { + .basename =3D "Loopback Left", + .type =3D SND_EVO_TYPE_MIXER, + .channels =3D 2, + .hwchannels =3D 2, + .val_offs =3D 8, + .flags =3D SND_EVO_FLAGS_CAPTURE, + }, + { + .basename =3D "Loopback Right", + .type =3D SND_EVO_TYPE_MIXER, + .channels =3D 2, + .hwchannels =3D 2, + .val_offs =3D 10, + .flags =3D SND_EVO_FLAGS_CAPTURE, + }, + { + .basename =3D "Mic 1 Phantom", + .type =3D SND_EVO_TYPE_PHANTOM, + .channels =3D 1, + .hwchannels =3D 1, + .val_offs =3D 0, + .flags =3D SND_EVO_FLAGS_CAPTURE, + }, + { + .basename =3D "Mic 2 Phantom", + .type =3D SND_EVO_TYPE_PHANTOM, + .channels =3D 1, + .hwchannels =3D 1, + .val_offs =3D 1, + .flags =3D SND_EVO_FLAGS_CAPTURE, + }, + { 0 }, /* sentinel */ +}; + +static const struct evo_devinfo { + u32 usb_id; + const struct snd_evo_ctrl *controls; +} evo_devinfo[] =3D { + { + .usb_id =3D USB_ID(USB_AUDIENT_VID, USB_EVO4_PID), + .controls =3D evo4_controls, + }, + { + .usb_id =3D USB_ID(USB_AUDIENT_VID, USB_EVO4_PID), + .controls =3D NULL, + }, + { 0 } /* sentinel */ +}; + + +static inline unsigned long snd_evo_kctl_priv(enum snd_evo_type type, + u8 valoffs, u8 hwchannels) +{ + unsigned long type_l =3D type & 0xFF; + unsigned long valoffs_l =3D valoffs & 0xFF; + unsigned long hwchannels_l =3D hwchannels & 0xFF; + + return (hwchannels_l << 16) | (valoffs_l << 8) | type_l; +} + +static __always_inline +const struct snd_evo_ctrl_type *snd_evo_kctl_type(struct snd_kcontrol *kct= l) +{ + return &snd_evo_ctypes[kctl->private_value & 0xFF]; +} + +static __always_inline u16 snd_evo_kctl_valoffs(struct snd_kcontrol *kctl) +{ + return (kctl->private_value >> 8) & 0xFF; +} + +static __always_inline u16 snd_evo_kctl_hwchannels(struct snd_kcontrol *kc= tl) +{ + return (kctl->private_value >> 16) & 0xFF; +} + +static inline u16 snd_evo_kctl_channels(struct snd_kcontrol *kctl) +{ + struct usb_mixer_elem_info *info =3D kctl->private_data; + + return info->channels; +} + + +#define EVO_REQ_CUR (0x01) +#define EVO_REQTYPE_SET (USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFAC= E) +#define EVO_REQTYPE_GET (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFAC= E) + +static inline int snd_evo_get_cur(struct usb_mixer_interface *mixer, + u16 value, u16 index, + void *buf, size_t len) +{ + struct usb_device *const dev =3D mixer->chip->dev; + + return snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), + EVO_REQ_CUR, EVO_REQTYPE_GET, + value, index, buf, len); +} + +static inline int snd_evo_set_cur(struct usb_mixer_interface *mixer, + u16 value, u16 index, + void *buf, size_t len) +{ + struct usb_device *const dev =3D mixer->chip->dev; + + return snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), + EVO_REQ_CUR, EVO_REQTYPE_SET, + value, index, buf, len); +} + + +static int snd_ctl_evo_boolean_get(struct snd_kcontrol *kctl, + struct snd_ctl_elem_value *ctl_val) +{ + struct usb_mixer_elem_list *const list =3D snd_kcontrol_chip(kctl); + struct usb_mixer_interface *const mixer =3D list->mixer; + + const unsigned int nchan =3D snd_evo_kctl_channels(kctl); + const unsigned int hwchan =3D snd_evo_kctl_hwchannels(kctl); + const struct snd_evo_ctrl_type *const ctype =3D snd_evo_kctl_type(kctl); + const u16 value =3D ctype->wValue + snd_evo_kctl_valoffs(kctl); + const u16 index =3D ctype->wIndex; + + int i; + + for (i =3D 0; i < hwchan; i++) { + u32 buf; + int ret; + + ret =3D snd_evo_get_cur(mixer, value + i, index, + &buf, sizeof(buf)); + if (ret < 0) + return ret; + + ctl_val->value.integer.value[i] =3D le32_to_cpu(buf) ? 1 : 0; + + if (ctype->invert) + ctl_val->value.integer.value[i] ^=3D 0x1; + } + + for (; i < nchan; i++) + ctl_val->value.integer.value[i] =3D ctype->invert + ? ctype->max.integer + : ctype->min.integer; + + return 0; +} + +static int snd_ctl_evo_boolean_set(struct snd_kcontrol *kctl, + struct snd_ctl_elem_value *ctl_val) +{ + struct usb_mixer_elem_list *list =3D snd_kcontrol_chip(kctl); + struct usb_mixer_interface *mixer =3D list->mixer; + + const unsigned int hwchan =3D snd_evo_kctl_hwchannels(kctl); + const struct snd_evo_ctrl_type *const ctype =3D snd_evo_kctl_type(kctl); + const u16 value =3D ctype->wValue + snd_evo_kctl_valoffs(kctl); + const u16 index =3D ctype->wIndex; + + int changed =3D 0; + int i; + + for (i =3D 0; i < hwchan; i++) { + u32 rbuf; + u32 buf =3D cpu_to_le32(ctl_val->value.integer.value[i] ? 1 : 0); + int ret; + + if (ctype->invert) + buf ^=3D 0x1; + + ret =3D snd_evo_get_cur(mixer, value + i, index, + &rbuf, sizeof(rbuf)); + if (ret < 0) + return ret; + + if (rbuf !=3D buf) { + changed =3D 1; + + ret =3D snd_evo_set_cur(mixer, value + i, index, + &buf, sizeof(buf)); + if (ret < 0) + return ret; + } + } + + return changed; +} + +static int snd_ctl_evo_integer_get(struct snd_kcontrol *kctl, + struct snd_ctl_elem_value *ctl_val) +{ + struct usb_mixer_elem_list *const list =3D snd_kcontrol_chip(kctl); + struct usb_mixer_interface *const mixer =3D list->mixer; + + const unsigned int nchan =3D snd_evo_kctl_channels(kctl); + const unsigned int hwchan =3D snd_evo_kctl_hwchannels(kctl); + const struct snd_evo_ctrl_type *const ctype =3D snd_evo_kctl_type(kctl); + const u16 value =3D ctype->wValue + snd_evo_kctl_valoffs(kctl); + const u16 index =3D ctype->wIndex; + + int i; + + for (i =3D 0; i < hwchan; i++) { + u16 buf; + s16 val; + int ret; + + ret =3D snd_evo_get_cur(mixer, value + i, index, + &buf, sizeof(buf)); + if (ret < 0) + return ret; + + val =3D le16_to_cpu(buf); + ctl_val->value.integer.value[i] =3D val; + } + + for (; i < nchan; i++) + ctl_val->value.integer.value[i] =3D ctype->min.integer; + + return 0; +} + +static int snd_ctl_evo_integer_set(struct snd_kcontrol *kctl, + struct snd_ctl_elem_value *ctl_val) +{ + struct usb_mixer_elem_list *list =3D snd_kcontrol_chip(kctl); + struct usb_mixer_interface *mixer =3D list->mixer; + + const unsigned int hwchan =3D snd_evo_kctl_hwchannels(kctl); + const struct snd_evo_ctrl_type *const ctype =3D snd_evo_kctl_type(kctl); + const u16 value =3D ctype->wValue + snd_evo_kctl_valoffs(kctl); + const u16 index =3D ctype->wIndex; + + int changed =3D 0; + int i; + + for (i =3D 0; i < hwchan; i++) { + s16 rbuf; + s16 buf =3D cpu_to_le16(ctl_val->value.integer.value[i]); + int ret; + + ret =3D snd_evo_get_cur(mixer, value + i, index, + &rbuf, sizeof(rbuf)); + if (ret < 0) + return ret; + + if (rbuf !=3D buf) { + changed =3D 1; + + ret =3D snd_evo_set_cur(mixer, value + i, index, + &buf, sizeof(buf)); + if (ret < 0) + return ret; + } + } + + return changed; +} + +static int snd_ctl_evo_info(struct snd_kcontrol *kctl, + struct snd_ctl_elem_info *uinfo) +{ + const struct snd_evo_ctrl_type *const ctype =3D snd_evo_kctl_type(kctl); + + uinfo->type =3D ctype->type; + uinfo->access =3D SNDRV_CTL_ELEM_ACCESS_READWRITE + | SNDRV_CTL_ELEM_ACCESS_VOLATILE; + uinfo->count =3D snd_evo_kctl_channels(kctl); + uinfo->value.integer.min =3D ctype->min.integer; + uinfo->value.integer.max =3D ctype->max.integer; + return 0; +} + + +static int snd_evo_add_ctrl(struct usb_mixer_interface *mixer, + const struct snd_evo_ctrl *ctrl) +{ + const struct snd_evo_ctrl_type *ctype =3D &snd_evo_ctypes[ctrl->type]; + char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; + struct snd_kcontrol_new knew =3D { 0 }; + struct snd_kcontrol *kctl; + struct usb_mixer_elem_info *elem; + + knew.iface =3D SNDRV_CTL_ELEM_IFACE_MIXER; + knew.name =3D name; + knew.info =3D snd_ctl_evo_info; + knew.private_value =3D snd_evo_kctl_priv(ctrl->type, ctrl->val_offs, + ctrl->hwchannels); + + switch (ctype->type) { + case SNDRV_CTL_ELEM_TYPE_INTEGER: + knew.get =3D snd_ctl_evo_integer_get; + knew.put =3D snd_ctl_evo_integer_set; + break; + case SNDRV_CTL_ELEM_TYPE_BOOLEAN: + knew.get =3D snd_ctl_evo_boolean_get; + knew.put =3D snd_ctl_evo_boolean_set; + break; + default: + return -EINVAL; + } + + snprintf(name, sizeof(name), "%s %s %s", ctrl->basename, + ((ctrl->flags & SND_EVO_FLAGS_DIRECTION) + =3D=3D SND_EVO_FLAGS_CAPTURE) ? "Capture" : "Playback", + (ctype->type =3D=3D SNDRV_CTL_ELEM_TYPE_BOOLEAN) + ? "Switch" : "Volume"); + + elem =3D kzalloc_obj(*elem); + if (!elem) + return -ENOMEM; + + elem->head.mixer =3D mixer; + elem->channels =3D ctrl->channels; + + kctl =3D snd_ctl_new1(&knew, elem); + if (!kctl) { + kfree(elem); + return -ENOMEM; + } + + kctl->private_free =3D snd_usb_mixer_elem_free; + + return snd_usb_mixer_add_control(&elem->head, kctl); +} + + +/* called from mixer_quirks.c */ +int snd_evo_controls_create(struct usb_mixer_interface *mixer) +{ + const struct evo_devinfo *info; + const struct snd_evo_ctrl *ctrl; + + for (info =3D evo_devinfo; info->controls; info++) + if (info->usb_id =3D=3D mixer->chip->usb_id) + break; + + if (!info->controls) + return -ENODEV; + + for (ctrl =3D info->controls; ctrl->basename; ctrl++) { + const int ret =3D snd_evo_add_ctrl(mixer, ctrl); + + if (ret < 0) + return ret; + } + + return 0; +} diff --git a/sound/usb/mixer_evo.h b/sound/usb/mixer_evo.h new file mode 100644 index 000000000000..7fe7e197185c --- /dev/null +++ b/sound/usb/mixer_evo.h @@ -0,0 +1,12 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __USB_MIXER_EVO_H +#define __USB_MIXER_EVO_H + +#include "mixer.h" + +#define USB_AUDIENT_VID (0x2708) +#define USB_EVO4_PID (0x0006) + +int snd_evo_controls_create(struct usb_mixer_interface *mixer); + +#endif /* __USB_MIXER_EVO_H */ diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c index fc622eb95dc5..1e266fdbbb8e 100644 --- a/sound/usb/mixer_quirks.c +++ b/sound/usb/mixer_quirks.c @@ -38,6 +38,7 @@ #include "mixer_scarlett2.h" #include "mixer_us16x08.h" #include "mixer_s1810c.h" +#include "mixer_evo.h" #include "helper.h" #include "fcp.h" =20 @@ -4539,6 +4540,10 @@ int snd_usb_mixer_apply_create_quirk(struct usb_mixe= r_interface *mixer) err =3D snd_fcp_init(mixer); break; =20 + case USB_ID(USB_AUDIENT_VID, USB_EVO4_PID): /* Audient EVO 4 */ + err =3D snd_evo_controls_create(mixer); + break; + case USB_ID(0x041e, 0x323b): /* Creative Sound Blaster E1 */ err =3D snd_soundblaster_e1_switch_create(mixer); break; --=20 2.55.0 From nobody Thu Sep 24 22:13:41 2026 Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 35613376466; Sat, 19 Sep 2026 15:19:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=212.227.15.15 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789831144; cv=none; b=P4lV6rxQYsYpIn/uItavngo/1hgolrcu55qKyaI/DJN0//a+OEy33o7X0Hy9r6mWADUKDdf2vAibLaCB0khaGdS/Af0Zozjv/5YE/nsraKusDXGdNSrxg8TWOfOQYPOkfvcfJkF4VepUzsuxqZpmKBFZ7nUz6/cKrWG0EbII8Pc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789831144; c=relaxed/simple; bh=xmC+QB2UU+zl2BiuIUMcTTovkYMQyK+LxWwik+0ccSE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Rz4gyXkfVv7ZzNtD2zoBP13gTeCEJuivM0F2XZxOLm9LrUlhsK+gGlSxX8P596vg7xEarQrPh9+a127gngRHD8bsyT2cvgKRc7Gug4ye1PnQ5xAbuU2WIul6Gjof3DrvPwxuvm7PE+wkaRGclpX/mqrELKKkWe5J4MA1+8TOM+8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.li; spf=pass smtp.mailfrom=gmx.li; dkim=pass (2048-bit key) header.d=gmx.li header.i=arc@gmx.li header.b=KXb+gB0o; arc=none smtp.client-ip=212.227.15.15 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.li Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmx.li Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmx.li header.i=arc@gmx.li header.b="KXb+gB0o" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.li; s=s31663417; t=1789831140; x=1790435940; i=arc@gmx.li; bh=5d9PFEsMCXl2qFqGQofGZLyaz32vCIcLD9l1YFijCCw=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:Message-ID:In-Reply-To: References:MIME-Version:Content-Transfer-Encoding:cc: content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=KXb+gB0ogdKJuXf0NphRVODRFeEJG65IVPM/wP8uU6jb5SRywKKt6OngPU5oN954 UTa57j6ySSJLc6MDKSWea69kbmdG4434BR1G60C2lTx5dCvfG4rhuN9QTRR6H5czC PH/XXEvnlzJjwXFCLbZkZNnqwOUGenWmbuSfsfaK/IpSMDc9CJBy0iSRm0QXCjAZ9 p4ZVZnzK8kmL0n5zkD/+rn0qMnMYI4Evlzo3QiHMYgsP4E8QHiXkD74iQypEGY6DW PeUnbeZUgOsSZF0gPaGpwQ+OHSjobwjj0L7T36F7h7sbzpaf/lvhJLJCZ/DT94PH1 8J34tgry7AAUXfYXLA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from client.hidden.invalid by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1N4hzZ-1wg3z10IRL-010O4L; Sat, 19 Sep 2026 17:19:00 +0200 From: Christian Ruppert To: Jaroslav Kysela , Takashi Iwai , linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org Cc: Christian Ruppert , Will Porter , Peter Drabik , Neil Andrews Subject: [PATCH 3/3] Add Kconfig option for Audient EVO4 mixer quirks Date: Sat, 19 Sep 2026 17:18:40 +0200 Message-ID: <20260919151840.24371-4-arc@gmx.li> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260919151840.24371-1-arc@gmx.li> References: <20260919151840.24371-1-arc@gmx.li> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:SRDl1NxvUu8peSfRR2iqqgmq9z5Tzobd9smnIyeAS3TumaKKgpl pjGCmI1z/tTuAGS26MeGl8BE7GYbxs2CbIF6HhkFa3NpfR2xrKJ3MpNnBJjNkJkgosnu9g0 vX53V+L9xPfrr5Xvnl+rcHlyRwfZNSFPTc0Di56riFvHqj7Z7C8FTeXig48VRXpw8z4KbWK rhaY9pqXsmgeuqwgv+yxQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:bM2r6pZQH5Q=;yN6+Kw56r5995YSRrLPTy6qLDEl 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 Content-Type: text/plain; charset="utf-8" Add Kconfig option for the Audient EVO4 support. This is split out from the evo4 driver so it can be optionally applied. Other mixer quirks don't seem to have Kconfig options so I leave it to the upstream to decide what to do with this. Signed-off-by: Christian Ruppert --- sound/usb/Kconfig | 10 ++++++++++ sound/usb/Makefile | 3 ++- sound/usb/mixer_quirks.c | 4 ++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/sound/usb/Kconfig b/sound/usb/Kconfig index b4588915efa1..21039dd4ae3a 100644 --- a/sound/usb/Kconfig +++ b/sound/usb/Kconfig @@ -175,6 +175,16 @@ config SND_USB_HIFACE To compile this driver as a module, choose M here: the module will be called snd-usb-hiface. =20 +config SND_USB_EVO + bool "Audient EVO advanced mixer features" + help + Support advanced mixer features for the Audient EVO4 USB audio + interface such as + * the recording mixer + * the monitor crossfader + * phantom power control + * missing channel mute buttons + config SND_BCD2000 tristate "Behringer BCD2000 MIDI driver" select SND_RAWMIDI diff --git a/sound/usb/Makefile b/sound/usb/Makefile index 2e842dcc73de..f3664adeab85 100644 --- a/sound/usb/Makefile +++ b/sound/usb/Makefile @@ -11,7 +11,6 @@ snd-usb-audio-y :=3D card.o \ helper.o \ implicit.o \ mixer.o \ - mixer_evo.o \ mixer_quirks.o \ mixer_scarlett.o \ mixer_scarlett2.o \ @@ -27,6 +26,8 @@ snd-usb-audio-y :=3D card.o \ snd-usb-audio-$(CONFIG_SND_USB_AUDIO_MIDI_V2) +=3D midi2.o snd-usb-audio-$(CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER) +=3D media.o =20 +snd-usb-audio-$(CONFIG_SND_USB_EVO) +=3D mixer_evo.o + snd-usbmidi-lib-y :=3D midi.o =20 # Toplevel Module Dependency diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c index 1e266fdbbb8e..c32ccff40122 100644 --- a/sound/usb/mixer_quirks.c +++ b/sound/usb/mixer_quirks.c @@ -38,7 +38,9 @@ #include "mixer_scarlett2.h" #include "mixer_us16x08.h" #include "mixer_s1810c.h" +#ifdef CONFIG_SND_USB_EVO #include "mixer_evo.h" +#endif #include "helper.h" #include "fcp.h" =20 @@ -4540,9 +4542,11 @@ int snd_usb_mixer_apply_create_quirk(struct usb_mixe= r_interface *mixer) err =3D snd_fcp_init(mixer); break; =20 +#ifdef CONFIG_SND_USB_EVO case USB_ID(USB_AUDIENT_VID, USB_EVO4_PID): /* Audient EVO 4 */ err =3D snd_evo_controls_create(mixer); break; +#endif =20 case USB_ID(0x041e, 0x323b): /* Creative Sound Blaster E1 */ err =3D snd_soundblaster_e1_switch_create(mixer); --=20 2.55.0