Open Bert636 opened 3 weeks ago
How strange! When it's in the not-working state, could you provide the output of dmesg | grep -A 5 -B 5 -i scarlett
and get a dump of the config: alsactl store Gen -f /tmp/scarlett.state
and upload that here. I'm wondering if the issue is a bogus config that alsa is loading when you connect your 2i2. Do you have a file /var/lib/alsa/asound.state
? If so, also try removing that file or moving it aside and unplugging/replugging your interface.
sudo dmesg | grep -A 5 -B 5 -i scarlett
[78517.993397] usb 1-7: device descriptor read/64, error -71 [78518.210402] usb 1-7: device descriptor read/64, error -71 [78519.607191] usb 1-7: new high-speed USB device number 44 using xhci_hcd [78519.733801] usb 1-7: New USB device found, idVendor=1235, idProduct=8219, bcdDevice= 8.50 [78519.733820] usb 1-7: New USB device strings: Mfr=1, Product=3, SerialNumber=2 [78519.733826] usb 1-7: Product: Scarlett 2i2 4th Gen [78519.733831] usb 1-7: Manufacturer: Focusrite [78519.733836] usb 1-7: SerialNumber: S2CYBZQ3A9380E [78521.238936] usb 1-7: Focusrite Scarlett Gen 4 Mixer Driver enabled (pid=0x8219); report any issues to https://github.com/geoffreybennett/scarlett-gen2/issues [78521.239276] usb 1-7: Firmware version 2128
state.Gen { control.1 { iface PCM name 'Playback Channel Map' value.0 0 value.1 0 comment { access read type INTEGER count 2 range '0 - 36' } } control.2 { iface PCM name 'Capture Channel Map' value.0 0 value.1 0 value.2 0 value.3 0 comment { access read type INTEGER count 4 range '0 - 36' } } control.3 { iface CARD name 'USB Internal Validity' value true comment { access read type BOOLEAN count 1 } } control.4 { iface CARD name 'Firmware Version' value 2128 comment { access read type INTEGER count 1 range '0 - 0' } } control.5 { iface CARD name 'Minimum Firmware Version' value 2115 comment { access read type INTEGER count 1 range '0 - 0' } } control.6 { iface MIXER name 'Line In 1 Level Capture Enum' value Inst comment { access 'read write' type ENUMERATED count 1 item.0 Line item.1 Inst } } control.7 { iface MIXER name 'Line In 2 Level Capture Enum' value Inst comment { access 'read write' type ENUMERATED count 1 item.0 Line item.1 Inst } } control.8 { iface MIXER name 'Line In 1 Air Capture Enum' value Off comment { access 'read write' type ENUMERATED count 1 item.0 Off item.1 Presence item.2 'Presence + Drive' } } control.9 { iface MIXER name 'Line In 2 Air Capture Enum' value Off comment { access 'read write' type ENUMERATED count 1 item.0 Off item.1 Presence item.2 'Presence + Drive' } } control.10 { iface MIXER name 'Line In 1-2 Phantom Power Capture Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.11 { iface MIXER name 'Input Select Capture Enum' value 'Input 1' comment { access 'read write' type ENUMERATED count 1 item.0 'Input 1' item.1 'Input 2' } } control.12 { iface MIXER name 'Line In 1 Gain Capture Volume' value 7 comment { access 'read write' type INTEGER count 1 range '0 - 70 (step 1)' dbmin 0 dbmax 6900 dbvalue.0 690 } } control.13 { iface MIXER name 'Line In 1 Autogain Capture Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.14 { iface MIXER name 'Line In 1 Autogain Status Capture Enum' value Success comment { access read type ENUMERATED count 1 item.0 Running item.1 Success item.2 SuccessDRover item.3 WarnMinGainLimit item.4 FailDRunder item.5 FailMaxGainLimit item.6 FailClipped item.7 Cancelled item.8 Invalid } } control.15 { iface MIXER name 'Line In 1 Safe Capture Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.16 { iface MIXER name 'Line In 1-2 Link Capture Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.17 { iface MIXER name 'Line In 2 Gain Capture Volume' value 9 comment { access 'read write' type INTEGER count 1 range '0 - 70 (step 1)' dbmin 0 dbmax 6900 dbvalue.0 887 } } control.18 { iface MIXER name 'Line In 2 Autogain Capture Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.19 { iface MIXER name 'Line In 2 Autogain Status Capture Enum' value Success comment { access read type ENUMERATED count 1 item.0 Running item.1 Success item.2 SuccessDRover item.3 WarnMinGainLimit item.4 FailDRunder item.5 FailMaxGainLimit item.6 FailClipped item.7 Cancelled item.8 Invalid } } control.20 { iface MIXER name 'Line In 2 Safe Capture Switch' value false comment { access 'read write' type BOOLEAN count 1 } } control.21 { iface MIXER name 'Analogue Output 01 Playback Enum' value 'Mix A' comment { access 'read write' type ENUMERATED count 1 item.0 Off item.1 'Analogue 1' item.2 'Analogue 2' item.3 'Mix A' item.4 'Mix B' item.5 'Mix C' item.6 'Mix D' item.7 'DSP 1' item.8 'DSP 2' item.9 'PCM 1' item.10 'PCM 2' } } control.22 { iface MIXER name 'Analogue Output 02 Playback Enum' value 'Mix B' comment { access 'read write' type ENUMERATED count 1 item.0 Off item.1 'Analogue 1' item.2 'Analogue 2' item.3 'Mix A' item.4 'Mix B' item.5 'Mix C' item.6 'Mix D' item.7 'DSP 1' item.8 'DSP 2' item.9 'PCM 1' item.10 'PCM 2' } } control.23 { iface MIXER name 'Mixer Input 01 Capture Enum' value 'PCM 1' comment { access 'read write' type ENUMERATED count 1 item.0 Off item.1 'Analogue 1' item.2 'Analogue 2' item.3 'Mix A' item.4 'Mix B' item.5 'Mix C' item.6 'Mix D' item.7 'DSP 1' item.8 'DSP 2' item.9 'PCM 1' item.10 'PCM 2' } } control.24 { iface MIXER name 'Mixer Input 02 Capture Enum' value 'PCM 2' comment { access 'read write' type ENUMERATED count 1 item.0 Off item.1 'Analogue 1' item.2 'Analogue 2' item.3 'Mix A' item.4 'Mix B' item.5 'Mix C' item.6 'Mix D' item.7 'DSP 1' item.8 'DSP 2' item.9 'PCM 1' item.10 'PCM 2' } } control.25 { iface MIXER name 'Mixer Input 03 Capture Enum' value 'DSP 1' comment { access 'read write' type ENUMERATED count 1 item.0 Off item.1 'Analogue 1' item.2 'Analogue 2' item.3 'Mix A' item.4 'Mix B' item.5 'Mix C' item.6 'Mix D' item.7 'DSP 1' item.8 'DSP 2' item.9 'PCM 1' item.10 'PCM 2' } } control.26 { iface MIXER name 'Mixer Input 04 Capture Enum' value 'DSP 2' comment { access 'read write' type ENUMERATED count 1 item.0 Off item.1 'Analogue 1' item.2 'Analogue 2' item.3 'Mix A' item.4 'Mix B' item.5 'Mix C' item.6 'Mix D' item.7 'DSP 1' item.8 'DSP 2' item.9 'PCM 1' item.10 'PCM 2' } } control.27 { iface MIXER name 'DSP Input 1 Capture Enum' value Off comment { access 'read write' type ENUMERATED count 1 item.0 Off item.1 'Analogue 1' item.2 'Analogue 2' item.3 'Mix A' item.4 'Mix B' item.5 'Mix C' item.6 'Mix D' item.7 'DSP 1' item.8 'DSP 2' item.9 'PCM 1' item.10 'PCM 2' } } control.28 { iface MIXER name 'DSP Input 2 Capture Enum' value 'Analogue 1' comment { access 'read write' type ENUMERATED count 1 item.0 Off item.1 'Analogue 1' item.2 'Analogue 2' item.3 'Mix A' item.4 'Mix B' item.5 'Mix C' item.6 'Mix D' item.7 'DSP 1' item.8 'DSP 2' item.9 'PCM 1' item.10 'PCM 2' } } control.29 { iface MIXER name 'PCM 01 Capture Enum' value 'Mix D' comment { access 'read write' type ENUMERATED count 1 item.0 Off item.1 'Analogue 1' item.2 'Analogue 2' item.3 'Mix A' item.4 'Mix B' item.5 'Mix C' item.6 'Mix D' item.7 'DSP 1' item.8 'DSP 2' item.9 'PCM 1' item.10 'PCM 2' } } control.30 { iface MIXER name 'PCM 02 Capture Enum' value 'DSP 1' comment { access 'read write' type ENUMERATED count 1 item.0 Off item.1 'Analogue 1' item.2 'Analogue 2' item.3 'Mix A' item.4 'Mix B' item.5 'Mix C' item.6 'Mix D' item.7 'DSP 1' item.8 'DSP 2' item.9 'PCM 1' item.10 'PCM 2' } } control.31 { iface MIXER name 'PCM 03 Capture Enum' value 'Mix C' comment { access 'read write' type ENUMERATED count 1 item.0 Off item.1 'Analogue 1' item.2 'Analogue 2' item.3 'Mix A' item.4 'Mix B' item.5 'Mix C' item.6 'Mix D' item.7 'DSP 1' item.8 'DSP 2' item.9 'PCM 1' item.10 'PCM 2' } } control.32 { iface MIXER name 'PCM 04 Capture Enum' value 'Mix D' comment { access 'read write' type ENUMERATED count 1 item.0 Off item.1 'Analogue 1' item.2 'Analogue 2' item.3 'Mix A' item.4 'Mix B' item.5 'Mix C' item.6 'Mix D' item.7 'DSP 1' item.8 'DSP 2' item.9 'PCM 1' item.10 'PCM 2' } } control.33 { iface MIXER name 'Mix A Input 01 Playback Volume' value 150 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -500 } } control.34 { iface MIXER name 'Mix A Input 02 Playback Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -8000 } } control.35 { iface MIXER name 'Mix A Input 03 Playback Volume' value 160 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 0 } } control.36 { iface MIXER name 'Mix A Input 04 Playback Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -8000 } } control.37 { iface MIXER name 'Mix B Input 01 Playback Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -8000 } } control.38 { iface MIXER name 'Mix B Input 02 Playback Volume' value 150 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -500 } } control.39 { iface MIXER name 'Mix B Input 03 Playback Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -8000 } } control.40 { iface MIXER name 'Mix B Input 04 Playback Volume' value 160 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 0 } } control.41 { iface MIXER name 'Mix C Input 01 Playback Volume' value 160 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 0 } } control.42 { iface MIXER name 'Mix C Input 02 Playback Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -8000 } } control.43 { iface MIXER name 'Mix C Input 03 Playback Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -8000 } } control.44 { iface MIXER name 'Mix C Input 04 Playback Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -8000 } } control.45 { iface MIXER name 'Mix D Input 01 Playback Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -8000 } } control.46 { iface MIXER name 'Mix D Input 02 Playback Volume' value 160 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 0 } } control.47 { iface MIXER name 'Mix D Input 03 Playback Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -8000 } } control.48 { iface MIXER name 'Mix D Input 04 Playback Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -8000 } } control.49 { iface PCM name 'Level Meter' value.0 0 value.1 0 value.2 0 value.3 0 value.4 0 value.5 0 value.6 0 value.7 0 value.8 0 value.9 0 value.10 0 value.11 0 comment { access 'read volatile' type INTEGER count 12 range '0 - 4095 (step 1)' } } control.50 { iface MIXER name 'Sync Status' value Locked comment { access read type ENUMERATED count 1 item.0 Unlocked item.1 Locked } } control.51 { iface MIXER name 'Direct Monitor Playback Enum' value Stereo comment { access 'read write' type ENUMERATED count 1 item.0 Off item.1 Mono item.2 Stereo } } control.52 { iface MIXER name 'Monitor 1 Mix A Input 01 Playback Volume' value 150 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -500 } } control.53 { iface MIXER name 'Monitor 1 Mix A Input 02 Playback Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -8000 } } control.54 { iface MIXER name 'Monitor 1 Mix A Input 03 Playback Volume' value 154 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -300 } } control.55 { iface MIXER name 'Monitor 1 Mix A Input 04 Playback Volume' value 154 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -300 } } control.56 { iface MIXER name 'Monitor 1 Mix B Input 01 Playback Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -8000 } } control.57 { iface MIXER name 'Monitor 1 Mix B Input 02 Playback Volume' value 150 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -500 } } control.58 { iface MIXER name 'Monitor 1 Mix B Input 03 Playback Volume' value 154 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -300 } } control.59 { iface MIXER name 'Monitor 1 Mix B Input 04 Playback Volume' value 154 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -300 } } control.60 { iface MIXER name 'Monitor 2 Mix A Input 01 Playback Volume' value 150 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -500 } } control.61 { iface MIXER name 'Monitor 2 Mix A Input 02 Playback Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -8000 } } control.62 { iface MIXER name 'Monitor 2 Mix A Input 03 Playback Volume' value 160 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 0 } } control.63 { iface MIXER name 'Monitor 2 Mix A Input 04 Playback Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -8000 } } control.64 { iface MIXER name 'Monitor 2 Mix B Input 01 Playback Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -8000 } } control.65 { iface MIXER name 'Monitor 2 Mix B Input 02 Playback Volume' value 150 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -500 } } control.66 { iface MIXER name 'Monitor 2 Mix B Input 03 Playback Volume' value 0 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 -8000 } } control.67 { iface MIXER name 'Monitor 2 Mix B Input 04 Playback Volume' value 160 comment { access 'read write' type INTEGER count 1 range '0 - 172 (step 1)' dbmin -8000 dbmax 600 dbvalue.0 0 } } }
I do have an /var/lib/alsa/asound.state. I tried moving it as you suggested - no change.
Okay, that config you've got there will make things not work. I'm guessing that config is also in your asound.state
file and being automatically reloaded by ALSA whenever you plug your interface in. The older Scarlett firmware version is only supported by the kernel driver for firmware updates, so ALSA doesn't have a chance to break things when you have the factory firmware loaded.
This procedure should fix your issues: after making sure the /var/lib/alsa/asound.state
file is gone, run scarlett2 reset-config
. Let me know what happens then. If it's still not working, please do alsactl store
again and upload here (use the github file upload thing rather than pasting into a comment — you may need to gzip the file or call it something.txt).
FYI, this is the routing config you've got there, as shown by alsa-scarlett-gui:
It should be looking more like this:
(note DSP Inputs 1/2 and PCM Inputs 1/2 connected wrong in yours compared to what it should be)
Thanks for the help. I reset the config and re-updated the firmware and it all works. The alsa gui is now also working and I have unplugged and replugged the 2i2 with nothing breaking. The /var/lib/alsa/asound.state file did not reappear. I also tested it on a different linux machine without changing anything on that machine, and it now works.
I wish I could explain with certainty how I messed this up in the first place so others could be warned, but I am not sure. I had first attempted to update the firmware using the debian package, then later installed the scarlett2 utility. I would imagine I somehow messed it up in the debian attempt.
The play-by-play on the eventual fix:
scarlett2 reset-config Selected device Scarlett 4th Gen 2i2 Resetting to default configuration... Erase progress: Done! Rebooting interface... scarlett2 Found 1 supported device: card1: Scarlett 4th Gen 2i2 (firmware 1999, update to 2128 available) scarlett2 update Selected device Scarlett 4th Gen 2i2 Found firmware version 2128 for Scarlett 4th Gen 2i2: /usr/lib/firmware/scarlett2/scarlett2-1235-8219-2128.bin Updating Scarlett 4th Gen 2i2 from firmware version 1999 to 2128 Resetting to default configuration... Erase progress: Done! Erasing upgrade firmware... Erase progress: Done! Firmware write progress: Done! Rebooting interface...
That's great news, thanks for reporting back!
Watch out for that asound.state being created again if you shut your system down while the device is plugged in; whatever config is on the device then will again be restored every time you connect your interface. Masking the systemd alsa-state service should prevent this from happening.
I upgraded a new fourth generation 2i2 to Firmware version 2128 using "scarlett2 update". Scarlett2 did not report any errors. The 2i2 unit lost the light-up volume indicator on input 1, and audacity showed no signal coming from either channel. I downgraded using "scarlett2 erase-firmware" and the unit regained functionality. The issue is repeatable: I can upgrade and lose functionality, then downgrade to restore functionality. I am running Ubuntu 24.04.1 LTS, kernel 6.8.0-45-generic. The upgraded 2i2 is also non-functional with Ubuntu 22.04.5 LTS. The problem seems to be with the firmware and not with the installer, because updating the firmware on the 2i2 using an Apple computer then returning the 2i2 to the linux computer results in the same behavior.