* M-Audio FT C600 - driver missing control for disabling the Output Gain Knob @ 2026-05-01 20:10 simon 2026-05-01 21:11 ` Olivia Mackintosh 0 siblings, 1 reply; 5+ messages in thread From: simon @ 2026-05-01 20:10 UTC (permalink / raw) To: alsa-devel; +Cc: eldad, matthew.gruskin [-- Attachment #1: Type: text/plain, Size: 750 bytes --] Hi all, I recently thrifted a C600 for a bargain price, and happily most of the functionality is working fine. I did notice a couple of controls (as seen in Windows app) are not presented under Linux. There is the ability to disable the large Output Gain Knob (on right side of the device), which by defaults controls all of the stereo outputs (1/2, 3/4, 5/6). Snooping the USB bus under Windows I see there is a USB packet sent with a bit mapped values to disable gain control of each stereo output. Wireshark Caps available if needed/wanted. I suspect this is a moderately easy fix, and likely applies to the C400 as well. Happy to work with/test patches to get this implement, but I'm not experienced with building ALSA. Cheers, Simon. [-- Attachment #2: C600_out12_volume_off.PNG --] [-- Type: image/png, Size: 57215 bytes --] [-- Attachment #3: C600_out12_volume_on.PNG --] [-- Type: image/png, Size: 57612 bytes --] [-- Attachment #4: C600_disable_knob_level_control.PNG --] [-- Type: image/png, Size: 27835 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: M-Audio FT C600 - driver missing control for disabling the Output Gain Knob 2026-05-01 20:10 M-Audio FT C600 - driver missing control for disabling the Output Gain Knob simon @ 2026-05-01 21:11 ` Olivia Mackintosh 2026-05-02 18:19 ` simon 0 siblings, 1 reply; 5+ messages in thread From: Olivia Mackintosh @ 2026-05-01 21:11 UTC (permalink / raw) To: alsa-devel; +Cc: simon On Fri, May 01, 2026 at 04:10:51PM -0400, simon@mungewell.org wrote: > Hi all, > I recently thrifted a C600 for a bargain price, and happily most of the > functionality is working fine. I did notice a couple of controls (as seen in > Windows app) are not presented under Linux. > > There is the ability to disable the large Output Gain Knob (on right side of > the device), which by defaults controls all of the stereo outputs (1/2, 3/4, > 5/6). > > Snooping the USB bus under Windows I see there is a USB packet sent with a > bit mapped values to disable gain control of each stereo output. Wireshark > Caps available if needed/wanted. > > I suspect this is a moderately easy fix, and likely applies to the C400 as > well. Happy to work with/test patches to get this implement, but I'm not > experienced with building ALSA. > > Cheers, > Simon. Hi Simon, Congratuations on the thrift! Happy to help where I can as I have some experience with making alsa controls. You're on the right track having captured the control values. There seems to already be c400 controls set up in the mixer_quirks.c file, so it should be fairly straightforward to adapt this to also support the c600. Let me know if you need support in any way. Olivia ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: M-Audio FT C600 - driver missing control for disabling the Output Gain Knob 2026-05-01 21:11 ` Olivia Mackintosh @ 2026-05-02 18:19 ` simon 2026-05-03 23:13 ` RFC: M-Audio FT C600 - " simon 0 siblings, 1 reply; 5+ messages in thread From: simon @ 2026-05-02 18:19 UTC (permalink / raw) To: livvy; +Cc: alsa-devel [-- Attachment #1: Type: text/plain, Size: 712 bytes --] On 2026-05-01 17:11, Olivia Mackintosh wrote: > There seems to already be c400 controls set up in the mixer_quirks.c > file, so it should be fairly straightforward to adapt this to also > support the c600. Thanks for the pointer, I've had a look and it seems that way the 'effect type' is set would be a good reference to clone/modify. https://github.com/torvalds/linux/blob/master/sound/usb/mixer_quirks.c#L1302 I jumped back into Windows and captured changing the effect type which does a similar thing on the USB bus, though I did note that 'bRequest' is different and I don't understand why - and of course the 'wValue/wIndex' are too. Pulling down the Kernel source, so I can build locally. Simon [-- Attachment #2: C600_effect_vs_output_gain_knob.png --] [-- Type: image/png, Size: 55133 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* RFC: M-Audio FT C600 - control for disabling the Output Gain Knob 2026-05-02 18:19 ` simon @ 2026-05-03 23:13 ` simon 2026-05-04 19:07 ` Olivia Mackintosh 0 siblings, 1 reply; 5+ messages in thread From: simon @ 2026-05-03 23:13 UTC (permalink / raw) To: alsa-devel; +Cc: Eldad Zack [-- Attachment #1: Type: text/plain, Size: 577 bytes --] Hi all, Managed to pull a small patch together to enabling/disabling the Output Gain Knob, as is done in the Windows driver/control application. The outputs act in stereo pairs (1/2, 3/4, 5/6), the device defaults to all 'adjusted' with the knob and you can now select any combination (or none). This code likely works on the C400 as well, but I do not have that device to test/confirm. Tested against Linux 6.8.0, as that's what I run locally. I can formally sign/submit a patch if there's no comments. Is that done here or on the kernel mailing lists? Cheers, Simon. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: c600_out_gain_knob_disable.patch --] [-- Type: text/x-diff; name=c600_out_gain_knob_disable.patch, Size: 2540 bytes --] diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c index 065a4be0d771..1ec98716c871 100644 --- a/sound/usb/mixer_quirks.c +++ b/sound/usb/mixer_quirks.c @@ -1042,7 +1042,7 @@ static int snd_ftu_eff_switch_init(struct usb_mixer_interface *mixer, err = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), UAC_GET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_IN, - pval & 0xff00, + (pval & 0xff00) | ((pval & 0xff0000) >> 16), snd_usb_ctrl_intf(mixer->chip) | ((pval & 0xff) << 8), value, 2); if (err < 0) @@ -1076,7 +1076,7 @@ static int snd_ftu_eff_switch_update(struct usb_mixer_elem_list *list) usb_sndctrlpipe(chip->dev, 0), UAC_SET_CUR, USB_RECIP_INTERFACE | USB_TYPE_CLASS | USB_DIR_OUT, - pval & 0xff00, + (pval & 0xff00) | ((pval & 0xff0000) >> 16), snd_usb_ctrl_intf(chip) | ((pval & 0xff) << 8), value, 2); snd_usb_unlock_shutdown(chip); @@ -1491,6 +1491,44 @@ static int snd_c400_create_effect_ret_vol_ctls(struct usb_mixer_interface *mixer return 0; } +/* output gain knob selectively adjusts outputs as stereo pairs */ +/* reuses functions from FTU effect switch */ +static int snd_c400_knob_switch_info(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_info *uinfo) +{ + static const char *const texts[8] = { + "None", "1/2", "3/4", "1/2 3/4", + "5/6", "1/2 5/6", "3/4 5/6", "1/2 3/4 5/6" + }; + + return snd_ctl_enum_info(uinfo, 1, ARRAY_SIZE(texts), texts); +} + +static int snd_c400_create_knob_switch(struct usb_mixer_interface *mixer, + int validx, int bUnitID) +{ + static struct snd_kcontrol_new template = { + .iface = SNDRV_CTL_ELEM_IFACE_MIXER, + .name = "Output Gain Knob", + .index = 0, + .access = SNDRV_CTL_ELEM_ACCESS_READWRITE, + .info = snd_c400_knob_switch_info, + .get = snd_ftu_eff_switch_get, + .put = snd_ftu_eff_switch_put + }; + struct usb_mixer_elem_list *list; + int err; + + err = add_single_ctl_with_resume(mixer, bUnitID, + snd_ftu_eff_switch_update, + &template, &list); + if (err < 0) + return err; + list->kctl->private_value = (validx << 8) | bUnitID; + snd_ftu_eff_switch_init(mixer, list->kctl); + return 0; +} + static int snd_c400_create_mixer(struct usb_mixer_interface *mixer) { int err; @@ -1523,6 +1561,10 @@ static int snd_c400_create_mixer(struct usb_mixer_interface *mixer) if (err < 0) return err; + err = snd_c400_create_knob_switch(mixer, 0x0900, 0x20); + if (err < 0) + return err; + return 0; } ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: RFC: M-Audio FT C600 - control for disabling the Output Gain Knob 2026-05-03 23:13 ` RFC: M-Audio FT C600 - " simon @ 2026-05-04 19:07 ` Olivia Mackintosh 0 siblings, 0 replies; 5+ messages in thread From: Olivia Mackintosh @ 2026-05-04 19:07 UTC (permalink / raw) To: simon, alsa-devel; +Cc: Eldad Zack > I can formally sign/submit a patch if there's no comments. Is that done > here or on the kernel mailing lists? You can submit patch here following https://kernel.org/doc/html/latest/process/submitting-patches.html but it would be best to rebase/test against the tiwai/sound tree :) https://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git/ Regards, Olivia ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-05-04 19:08 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-05-01 20:10 M-Audio FT C600 - driver missing control for disabling the Output Gain Knob simon 2026-05-01 21:11 ` Olivia Mackintosh 2026-05-02 18:19 ` simon 2026-05-03 23:13 ` RFC: M-Audio FT C600 - " simon 2026-05-04 19:07 ` Olivia Mackintosh
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.