Control: tags -1 +patch +upstream Hello there,
following up on this bug and on some fediverse conversation [0]. # How to propose a patch to a maintainer, and produce a patched .deb package? I'll be demonstrating this from a Debian 12 pristine VPS, to make sure none of the assumptions I long use on my local machine apply. I guess this will also serve as a demonstration on how this is way too complex (or on how my knowledge is too outdated). ## Setup * Install the needed tools $ sudo apt update; sudo apt install -y devscripts quilt * Configure the local environment (needed for proper changelog generation) $ export DEBFULLNAME="Didier 'OdyX' Raboud" $ export [email protected] ## Get the source package Here, you can use either the binary package name, or the source package name. $ debcheckout alsa-ucm-conf; cd alsa-ucm-conf This gives you the latest maintainer view of the source package, in the alsa- ucm-conf directory, so very likely at the status of the latest unstable (which is what a patch will need to target). Let's make sure we base our work on the latest unstable upload: $ git checkout debian/1.2.14-1; git switch -c fix-bug-1110637 ## Patch the source code There are multiple ways to handle this patching, but let's just demonstrate the direct method, not fiddling with the patch queue manually: Let's just raw-apply the revert to the source package tree via "patch -R" $ wget -q -O - 'https://github.com/alsa-project/alsa-ucm-conf/commit/ 7283759a381ca1fc2589da213daa05f9d3b84aac.patch' | patch -p1 -R At this point, what one has is the upstream source, the debian/ repository, and some files patched. One needs a new changelog entry (so as to generate binary packages that do _not_ have the same version as provided by Debian: the '+' will sort later than the current version): $ dch --local +2025081100 "Revert 'USB-Audio: Add focusrite scarlett 18i20 lineup' (Closes: #1110637)" Finally, build a new source package. To do that, one needs the upstream tarball as available from the Debian archive, dget is convenient for this: $ cd ..; dget --download-only 'https://deb.debian.org/debian/pool/main/a/ alsa-ucm-conf/alsa-ucm-conf_1.2.14-1.dsc'; cd - Now we can generate a patch with our changes, using dpkg-source: $ dpkg-source --commit --include-removal It'll ask for a patch name (mostly, anything goes), and some metadata. I've attached the patch file to this email. Then one needs to remove all their local changes: $ quilt pop -a Finally, we can build the new source package: $ dpkg-buildpackage --build=source This gives us a set of new files: - ../alsa-ucm-conf_1.2.14-1+20250811001.dsc - ../alsa-ucm-conf_1.2.14-1+20250811001.debian.tar.xz We can see the full difference between the source packages this way: $ debdiff ../alsa-ucm-conf_1.2.14-1.dsc ../alsa-ucm- conf_1.2.14-1+20250811001.dsc I've attached the resulting .debdiff to this email. At this point, we have a source Debian package, but no installable binaries. So… ## Build a locally-patched Debian package from a source package Generally, one wants to build Debian packages in isolated environments (to avoid installing massive build-depends on one's main machine, to avoid pollution from the machine's environment, etc). A somewhat simple way to do this is to use `debocker` (which will leverage docker): $ sudo apt install debocker $ sudo adduser debian docker $ logout … login $ cd alsa-ucm-conf $ debocker build After a long process, this produces the following .deb file: - ../alsa-ucm-conf_1.2.14-1+20250811001_all.deb That said, in this particular case, as the source package has only very minimal build-depends, the following is enough (and much faster): $ dpkg-buildpackage --build=binary … which produces the same .deb file, which you can pass around and install wherever necessary. ## Bug-metadata update Finally, as we're giving the maintainer a patch, we can update the bug's metadata via Control pseudo-headers: Control tags -1 +patch +upstream (where -1 indicates that we're addressing this very bug number). I hope this all was more helpful than confusing! Best, OdyX [0] from https://wandering.shop/@aesthr/114999646041061682 On Sat, 9 Aug 2025 18:01:36 +0200 Esther Weidauer <[email protected]> wrote: > Reverting the changes introduce with commit 7283759 in alsa-ucm-conf > (https://github.com/alsa-project/alsa-ucm-conf/commit/ 7283759a381ca1fc2589da213daa05f9d3b84aac) > on my system has restored function to the audio interface, including the > correct pipewire graph. > > It really just seems to be that one commit causing this problem. > > I don't know how to produce patched deb packages so I could only do it > manually for now. > > Cheers > > Esther Weidauer > [email protected] > > pronouns: she/her > languages: english/german > > On 8/9/25 14:23, Esther Weidauer wrote: > > Package: alsa-ucm-conf > > Version: 1.2.14-1 > > Severity: important > > > > Dear Maintainer, > > > > alsa-ucm-conf 1.2.14 introduced an issue where support for the Focusrite > > Scarlett 18i20 audio interface was broken. The issue is described > > here: https://github.com/alsa-project/alsa-ucm-conf/issues/559 > > > > alsa-ucm-conf 1.2.14 ships with Debian Trixie, breaking those audio > > interfaces > > after the upgrade from Bookworm to Trixie. > > > > Currently the audio interface is not correctly recognized and audio > > playback impossible. I did not test recording but I assume that's > > affected too. > > > > Best regards > > > > -- System Information: > > Debian Release: 13.0 > > APT prefers testing-security > > APT policy: (500, 'testing-security'), (500, 'testing') > > Architecture: amd64 (x86_64) > > Foreign Architectures: i386 > > > > Kernel: Linux 6.12.38+deb13-amd64 (SMP w/24 CPU threads; PREEMPT) > > Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) > > (ignored: LC_ALL set to en_US.UTF-8), LANGUAGE=en > > Shell: /bin/sh linked to /usr/bin/dash > > Init: systemd (via /run/systemd/system) > > LSM: AppArmor: enabled > > > > Versions of packages alsa-ucm-conf depends on: > > ii libasound2t64 1.2.14-1 > > > > alsa-ucm-conf recommends no packages. > > > > alsa-ucm-conf suggests no packages. > >
diff -Nru alsa-ucm-conf-1.2.14/debian/changelog alsa-ucm-conf-1.2.14/debian/changelog --- alsa-ucm-conf-1.2.14/debian/changelog 2025-04-14 18:40:01.000000000 +0000 +++ alsa-ucm-conf-1.2.14/debian/changelog 2025-08-11 13:43:20.000000000 +0000 @@ -1,3 +1,10 @@ +alsa-ucm-conf (1.2.14-1+20250811001) UNRELEASED; urgency=medium + + * Revert 'USB-Audio: Add focusrite scarlett 18i20 lineup' (Closes: + #1110637) + + -- Didier 'OdyX' Raboud <[email protected]> Mon, 11 Aug 2025 13:43:20 +0000 + alsa-ucm-conf (1.2.14-1) unstable; urgency=medium * New upstream release. diff -Nru alsa-ucm-conf-1.2.14/debian/patches/0004-revert-Scarlett-18i20.patch alsa-ucm-conf-1.2.14/debian/patches/0004-revert-Scarlett-18i20.patch --- alsa-ucm-conf-1.2.14/debian/patches/0004-revert-Scarlett-18i20.patch 1970-01-01 00:00:00.000000000 +0000 +++ alsa-ucm-conf-1.2.14/debian/patches/0004-revert-Scarlett-18i20.patch 2025-08-11 13:43:20.000000000 +0000 @@ -0,0 +1,682 @@ +Description: Revert https://github.com/alsa-project/alsa-ucm-conf/commit/7283759a381ca1fc2589da213daa05f9d3b84aac.patch +Bug-Debian: https://bugs.debian.org/1110637 +Bug: https://github.com/alsa-project/alsa-ucm-conf/issues/559 +Last-Update: 2025-08-11 + +--- alsa-ucm-conf-1.2.14.orig/ucm2/USB-Audio/Focusrite/Scarlett-18i20-HiFi.conf ++++ /dev/null +@@ -1,552 +0,0 @@ +-Include.pcm_split.File "/common/pcm/split.conf" +- +-# This profile exposes the most common channel configurations to ensure basic functionality. +- +-Macro [ +- { +- SplitPCM { +- Name "18i20_stereo_out" +- Direction Playback +- Format S24_3LE +- Channels 2 +- HWChannels 20 +- HWChannelPos0 FL +- HWChannelPos1 FR +- HWChannelPos2 FL +- HWChannelPos3 FR +- HWChannelPos4 FL +- HWChannelPos5 FR +- HWChannelPos6 FL +- HWChannelPos7 FR +- HWChannelPos8 FL +- HWChannelPos9 FR +- HWChannelPos10 FL +- HWChannelPos11 FR +- HWChannelPos12 FL +- HWChannelPos13 FR +- HWChannelPos14 FL +- HWChannelPos15 FR +- HWChannelPos16 FL +- HWChannelPos17 FR +- HWChannelPos18 FL +- HWChannelPos19 FR +- } +- } +- { +- SplitPCM { +- Name "18i20_mono_in" +- Direction Capture +- Format S24_3LE +- Channels 1 +- HWChannels 20 +- HWChannelPos0 MONO +- HWChannelPos1 MONO +- HWChannelPos2 MONO +- HWChannelPos3 MONO +- HWChannelPos4 MONO +- HWChannelPos5 MONO +- HWChannelPos6 MONO +- HWChannelPos7 MONO +- HWChannelPos8 MONO +- HWChannelPos9 MONO +- HWChannelPos10 MONO +- HWChannelPos11 MONO +- HWChannelPos12 MONO +- HWChannelPos13 MONO +- HWChannelPos14 MONO +- HWChannelPos15 MONO +- HWChannelPos16 MONO +- HWChannelPos17 MONO +- HWChannelPos18 MONO +- HWChannelPos19 MONO +- } +- } +- { +- SplitPCM { +- Name "scarlett18i20_stereo_in" +- Direction Capture +- Format S24_3LE +- Channels 2 +- HWChannels 20 +- HWChannelPos0 FL +- HWChannelPos1 FR +- HWChannelPos2 FL +- HWChannelPos3 FR +- HWChannelPos4 FL +- HWChannelPos5 FR +- HWChannelPos6 FL +- HWChannelPos7 FR +- HWChannelPos8 FL +- HWChannelPos9 FR +- HWChannelPos10 FL +- HWChannelPos11 FR +- HWChannelPos12 FL +- HWChannelPos13 FR +- HWChannelPos14 FL +- HWChannelPos15 FR +- HWChannelPos16 FL +- HWChannelPos17 FR +- HWChannelPos18 FL +- HWChannelPos19 FR +- } +- } +- { +- SplitPCM { +- Name "18i20_adat_out" +- Direction Playback +- Format S24_3LE +- Channels 8 +- HWChannels 20 +- HWChannelPos0 UNKNOWN +- HWChannelPos1 UNKNOWN +- HWChannelPos2 UNKNOWN +- HWChannelPos3 UNKNOWN +- HWChannelPos4 UNKNOWN +- HWChannelPos5 UNKNOWN +- HWChannelPos6 UNKNOWN +- HWChannelPos7 UNKNOWN +- HWChannelPos8 UNKNOWN +- HWChannelPos9 UNKNOWN +- HWChannelPos10 UNKNOWN +- HWChannelPos11 UNKNOWN +- HWChannelPos12 UNKNOWN +- HWChannelPos13 UNKNOWN +- HWChannelPos14 UNKNOWN +- HWChannelPos15 UNKNOWN +- HWChannelPos16 UNKNOWN +- HWChannelPos17 UNKNOWN +- HWChannelPos18 UNKNOWN +- HWChannelPos19 UNKNOWN +- } +- } +- { +- SplitPCM { +- Name "18i20_adat_in" +- Direction Capture +- Format S24_3LE +- Channels 8 +- HWChannels 20 +- HWChannelPos0 UNKNOWN +- HWChannelPos1 UNKNOWN +- HWChannelPos2 UNKNOWN +- HWChannelPos3 UNKNOWN +- HWChannelPos4 UNKNOWN +- HWChannelPos5 UNKNOWN +- HWChannelPos6 UNKNOWN +- HWChannelPos7 UNKNOWN +- HWChannelPos8 UNKNOWN +- HWChannelPos9 UNKNOWN +- HWChannelPos10 UNKNOWN +- HWChannelPos11 UNKNOWN +- HWChannelPos12 UNKNOWN +- HWChannelPos13 UNKNOWN +- HWChannelPos14 UNKNOWN +- HWChannelPos15 UNKNOWN +- HWChannelPos16 UNKNOWN +- HWChannelPos17 UNKNOWN +- HWChannelPos18 UNKNOWN +- HWChannelPos19 UNKNOWN +- } +- } +-] +- +-# Analog Outputs +- +-SectionDevice."Line 1" { +- # not using .Headphones because this device has multiple headphone ports +- Comment "Headphones 1" +- +- Value { +- PlaybackPriority 255 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_stereo_out" +- Direction Playback +- HWChannels 20 +- Channels 2 +- Channel0 6 +- Channel1 7 +- ChannelPos0 FL +- ChannelPos1 FR +- } +-} +- +-SectionDevice."Line 2" { +- Comment "Headphones 2" +- +- Value { +- PlaybackPriority 254 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_stereo_out" +- Direction Playback +- HWChannels 20 +- Channels 2 +- Channel0 8 +- Channel1 9 +- ChannelPos0 FL +- ChannelPos1 FR +- } +-} +- +-SectionDevice."Line 3" { +- Comment "Line Output 1+2" +- +- Value { +- PlaybackPriority 192 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_stereo_out" +- Direction Playback +- HWChannels 20 +- Channels 2 +- Channel0 0 +- Channel1 1 +- ChannelPos0 FL +- ChannelPos1 FR +- } +-} +- +-SectionDevice."Line 4" { +- Comment "Line Output 3+4" +- +- Value { +- PlaybackPriority 191 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_stereo_out" +- Direction Playback +- HWChannels 20 +- Channels 2 +- Channel0 2 +- Channel1 3 +- ChannelPos0 FL +- ChannelPos1 FR +- } +-} +- +-SectionDevice."Line 5" { +- Comment "Line Output 5+6" +- +- Value { +- PlaybackPriority 190 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_stereo_out" +- Direction Playback +- HWChannels 20 +- Channels 2 +- Channel0 4 +- Channel1 5 +- ChannelPos0 FL +- ChannelPos1 FR +- } +-} +- +-SectionDevice."Line 6" { +- Comment "Line Output 7+8" +- +- ConflictingDevice [ +- "Line 1" +- ] +- +- Value { +- PlaybackPriority 189 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_stereo_out" +- Direction Playback +- HWChannels 20 +- Channels 2 +- Channel0 6 +- Channel1 7 +- ChannelPos0 FL +- ChannelPos1 FR +- } +-} +- +-SectionDevice."Line 7" { +- Comment "Line Output 9+10" +- +- Value { +- PlaybackPriority 188 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_stereo_out" +- Direction Playback +- HWChannels 20 +- Channels 2 +- Channel0 8 +- Channel1 9 +- ChannelPos0 FL +- ChannelPos1 FR +- } +-} +- +-# Analog Inputs +- +-SectionDevice."Mic 1" { +- Comment "Input 1 (Mic)" +- +- Value { +- CapturePriority 176 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_mono_in" +- Direction Capture +- HWChannels 20 +- Channels 1 +- Channel0 0 +- ChannelPos0 MONO +- } +-} +- +-SectionDevice."Mic 2" { +- Comment "Input 2 (Mic)" +- +- Value { +- CapturePriority 175 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_mono_in" +- Direction Capture +- HWChannels 20 +- Channels 1 +- Channel0 1 +- ChannelPos0 MONO +- } +-} +- +-SectionDevice."Line 8" { +- Comment "Input 3" +- +- Value { +- CapturePriority 174 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_mono_in" +- Direction Capture +- HWChannels 20 +- Channels 1 +- Channel0 2 +- ChannelPos0 MONO +- } +-} +- +-SectionDevice."Line 9" { +- Comment "Input 4" +- +- Value { +- CapturePriority 173 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_mono_in" +- Direction Capture +- HWChannels 20 +- Channels 1 +- Channel0 3 +- ChannelPos0 MONO +- } +-} +- +-SectionDevice."Line 10" { +- Comment "Input 5" +- +- Value { +- CapturePriority 172 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_mono_in" +- Direction Capture +- HWChannels 20 +- Channels 1 +- Channel0 4 +- ChannelPos0 MONO +- } +-} +- +-SectionDevice."Line 11" { +- Comment "Input 6" +- +- Value { +- CapturePriority 171 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_mono_in" +- Direction Capture +- HWChannels 20 +- Channels 1 +- Channel0 5 +- ChannelPos0 MONO +- } +-} +- +-SectionDevice."Line 12" { +- Comment "Input 7" +- +- Value { +- CapturePriority 170 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_mono_in" +- Direction Capture +- HWChannels 20 +- Channels 1 +- Channel0 6 +- ChannelPos0 MONO +- } +-} +- +-SectionDevice."Line 13" { +- Comment "Input 8" +- +- Value { +- CapturePriority 169 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_mono_in" +- Direction Capture +- HWChannels 20 +- Channels 1 +- Channel0 7 +- ChannelPos0 MONO +- } +-} +- +-# Digital (Consumer) Outputs +- +-SectionDevice."SPDIF 1" { +- Comment "S/PDIF Output" +- +- Value { +- PlaybackPriority 112 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_stereo_out" +- Direction Playback +- HWChannels 20 +- Channels 2 +- Channel0 10 +- Channel1 11 +- ChannelPos0 FL +- ChannelPos1 FR +- } +-} +- +-# Digital (Professional) Outputs +- +-SectionDevice."Direct 1" { +- Comment "ADAT Optical Output" +- +- Value { +- PlaybackPriority 48 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_adat_out" +- Direction Playback +- HWChannels 20 +- Channels 8 +- Channel0 12 +- Channel1 13 +- Channel2 14 +- Channel3 15 +- Channel4 16 +- Channel5 17 +- Channel6 18 +- Channel7 19 +- ChannelPos0 UNKNOWN +- ChannelPos1 UNKNOWN +- ChannelPos2 UNKNOWN +- ChannelPos3 UNKNOWN +- ChannelPos4 UNKNOWN +- ChannelPos5 UNKNOWN +- ChannelPos6 UNKNOWN +- ChannelPos7 UNKNOWN +- } +-} +- +-# Digital (Consumer) Inputs +- +-SectionDevice."SPDIF 2" { +- Comment "S/PDIF Input 1" +- +- Value { +- CapturePriority 112 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_mono_in" +- Direction Capture +- HWChannels 20 +- Channels 1 +- Channel0 10 +- ChannelPos0 MONO +- } +-} +- +-SectionDevice."SPDIF 3" { +- Comment "S/PDIF Input 2" +- +- Value { +- CapturePriority 111 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_mono_in" +- Direction Capture +- HWChannels 20 +- Channels 1 +- Channel0 11 +- ChannelPos0 MONO +- } +-} +- +-# Digital (Professional) Inputs +- +-SectionDevice."Direct 2" { +- Comment "ADAT Optical Input" +- +- Value { +- CapturePriority 48 +- } +- +- Macro.pcm_split.SplitPCMDevice { +- Name "18i20_adat_in" +- Direction Capture +- HWChannels 20 +- Channels 8 +- Channel0 12 +- Channel1 13 +- Channel2 14 +- Channel3 15 +- Channel4 16 +- Channel5 17 +- Channel6 18 +- Channel7 19 +- ChannelPos0 UNKNOWN +- ChannelPos1 UNKNOWN +- ChannelPos2 UNKNOWN +- ChannelPos3 UNKNOWN +- ChannelPos4 UNKNOWN +- ChannelPos5 UNKNOWN +- ChannelPos6 UNKNOWN +- ChannelPos7 UNKNOWN +- } +-} +--- alsa-ucm-conf-1.2.14.orig/ucm2/USB-Audio/Focusrite/Scarlett-18i20.conf ++++ /dev/null +@@ -1,97 +0,0 @@ +-# The 18i20 provides 20 playback and capture channels each: +-# +-# +----+---------------+-----------------+ +-# | Ch | Inputs | Outputs | +-# +====+===============+=================+ +-# | 0 | Line/XLR 1 | Line 1 | +-# | | | (Speaker Out L) | +-# +----+---------------+-----------------+ +-# | 1 | Line/XLR 2 | Line 2 | +-# | | | (Speaker Out R) | +-# +----+---------------+-----------------+ +-# | 2 | Line 3 | Line 3 | +-# +----+---------------+-----------------+ +-# | 3 | Line 4 | Line 4 | +-# +----+---------------+-----------------+ +-# | 4 | Line 5 | Line 5 | +-# +----+---------------+-----------------+ +-# | 5 | Line 6 | Line 6 | +-# +----+---------------+-----------------+ +-# | 6 | Line 7 | Line 7 | +-# | | | (Mirrored for | +-# | | | Headphone 1 L) | +-# +----+---------------+-----------------+ +-# | 7 | Line 8 | Line 8 | +-# | | | (Mirrored for | +-# | | | Headphone 1 R) | +-# +----+---------------+-----------------+ +-# | 8 | | Line 9 | +-# | | | (Mirrored for | +-# | | | Headphone 2 L) | +-# +----+---------------+-----------------+ +-# | 9 | | Line 10 | +-# | | | (Mirrored for | +-# | | | Headphone 2 R) | +-# +----+---------------+-----------------+ +-# | 10 | S/PDIF 1 | S/PDIF 1 | +-# +----+---------------+-----------------+ +-# | 11 | S/PDIF 2 | S/PDIF 2 | +-# +----+---------------+-----------------+ +-# | 12 | ADAT 1.1 | ADAT 1.1 | +-# +----+---------------+-----------------+ +-# | 13 | ADAT 1.2 | ADAT 1.2 | +-# +----+---------------+-----------------+ +-# | 14 | ADAT 1.3 | ADAT 1.3 | +-# +----+---------------+-----------------+ +-# | 15 | ADAT 1.4 | ADAT 1.4 | +-# +----+---------------+-----------------+ +-# | 16 | ADAT 1.5 | ADAT 1.5 | +-# +----+---------------+-----------------+ +-# | 17 | ADAT 1.6 | ADAT 1.6 | +-# +----+---------------+-----------------+ +-# | 18 | ADAT 1.7 | ADAT 1.7 | +-# +----+---------------+-----------------+ +-# | 19 | ADAT 1.8 | ADAT 1.8 | +-# +----+---------------+-----------------+ +-# +- +-Define.Generation "1st" +- +-If.gen2 { +- Condition { +- Type RegexMatch +- String "${CardComponents}" +- Regex "USB1235:8201" +- } +- True.Define.Generation "2nd" +-} +- +-If.gen3 { +- Condition { +- Type RegexMatch +- String "${CardComponents}" +- Regex "USB1235:8215" +- } +- True.Define.Generation "3rd" +-} +- +-If.gen4 { +- Condition { +- Type RegexMatch +- String "${CardComponents}" +- Regex "USB1235:821d" +- } +- True.Define.Generation "4th" +-} +- +-Comment "Focusrite Scarlett 18i20 ${var:Generation} Gen" +- +-SectionUseCase."HiFi" { +- Comment "HiFi" +- File "/USB-Audio/Focusrite/Scarlett-18i20-HiFi.conf" +-} +- +-Define.DirectPlaybackChannels 20 +-Define.DirectCaptureChannels 20 +- +-Include.dhw.File "/common/direct.conf" +--- alsa-ucm-conf-1.2.14.orig/ucm2/USB-Audio/USB-Audio.conf ++++ alsa-ucm-conf-1.2.14/ucm2/USB-Audio/USB-Audio.conf +@@ -341,19 +341,6 @@ If.focusrite-scarlett-2i { + } + } + +-If.focusrite-scarlett-18i20 { +- Condition { +- Type RegexMatch +- String "${CardComponents}" +- # 800C 1st Gen +- # 8201 2nd Gen +- # 8215 3rd Gen +- # 821d 4th Gen +- Regex "USB1235:8(00C|2(01|1(5|d)))" +- } +- True.Define.ProfileName "Focusrite/Scarlett-18i20" +-} +- + If.behringer-umc202hd { + Condition { + Type String diff -Nru alsa-ucm-conf-1.2.14/debian/patches/series alsa-ucm-conf-1.2.14/debian/patches/series --- alsa-ucm-conf-1.2.14/debian/patches/series 2025-04-14 18:39:37.000000000 +0000 +++ alsa-ucm-conf-1.2.14/debian/patches/series 2025-08-11 13:43:20.000000000 +0000 @@ -1,3 +1,4 @@ 0001-ucm2-add-PinePhone-configuration.patch 0002-ucm2-add-PineTab-configuration.patch 0003-ucm2-add-improved-Librem-5-profiles.patch +0004-revert-Scarlett-18i20.patch
Description: Revert https://github.com/alsa-project/alsa-ucm-conf/commit/7283759a381ca1fc2589da213daa05f9d3b84aac.patch Bug-Debian: https://bugs.debian.org/1110637 Bug: https://github.com/alsa-project/alsa-ucm-conf/issues/559 Last-Update: 2025-08-11 --- alsa-ucm-conf-1.2.14.orig/ucm2/USB-Audio/Focusrite/Scarlett-18i20-HiFi.conf +++ /dev/null @@ -1,552 +0,0 @@ -Include.pcm_split.File "/common/pcm/split.conf" - -# This profile exposes the most common channel configurations to ensure basic functionality. - -Macro [ - { - SplitPCM { - Name "18i20_stereo_out" - Direction Playback - Format S24_3LE - Channels 2 - HWChannels 20 - HWChannelPos0 FL - HWChannelPos1 FR - HWChannelPos2 FL - HWChannelPos3 FR - HWChannelPos4 FL - HWChannelPos5 FR - HWChannelPos6 FL - HWChannelPos7 FR - HWChannelPos8 FL - HWChannelPos9 FR - HWChannelPos10 FL - HWChannelPos11 FR - HWChannelPos12 FL - HWChannelPos13 FR - HWChannelPos14 FL - HWChannelPos15 FR - HWChannelPos16 FL - HWChannelPos17 FR - HWChannelPos18 FL - HWChannelPos19 FR - } - } - { - SplitPCM { - Name "18i20_mono_in" - Direction Capture - Format S24_3LE - Channels 1 - HWChannels 20 - HWChannelPos0 MONO - HWChannelPos1 MONO - HWChannelPos2 MONO - HWChannelPos3 MONO - HWChannelPos4 MONO - HWChannelPos5 MONO - HWChannelPos6 MONO - HWChannelPos7 MONO - HWChannelPos8 MONO - HWChannelPos9 MONO - HWChannelPos10 MONO - HWChannelPos11 MONO - HWChannelPos12 MONO - HWChannelPos13 MONO - HWChannelPos14 MONO - HWChannelPos15 MONO - HWChannelPos16 MONO - HWChannelPos17 MONO - HWChannelPos18 MONO - HWChannelPos19 MONO - } - } - { - SplitPCM { - Name "scarlett18i20_stereo_in" - Direction Capture - Format S24_3LE - Channels 2 - HWChannels 20 - HWChannelPos0 FL - HWChannelPos1 FR - HWChannelPos2 FL - HWChannelPos3 FR - HWChannelPos4 FL - HWChannelPos5 FR - HWChannelPos6 FL - HWChannelPos7 FR - HWChannelPos8 FL - HWChannelPos9 FR - HWChannelPos10 FL - HWChannelPos11 FR - HWChannelPos12 FL - HWChannelPos13 FR - HWChannelPos14 FL - HWChannelPos15 FR - HWChannelPos16 FL - HWChannelPos17 FR - HWChannelPos18 FL - HWChannelPos19 FR - } - } - { - SplitPCM { - Name "18i20_adat_out" - Direction Playback - Format S24_3LE - Channels 8 - HWChannels 20 - HWChannelPos0 UNKNOWN - HWChannelPos1 UNKNOWN - HWChannelPos2 UNKNOWN - HWChannelPos3 UNKNOWN - HWChannelPos4 UNKNOWN - HWChannelPos5 UNKNOWN - HWChannelPos6 UNKNOWN - HWChannelPos7 UNKNOWN - HWChannelPos8 UNKNOWN - HWChannelPos9 UNKNOWN - HWChannelPos10 UNKNOWN - HWChannelPos11 UNKNOWN - HWChannelPos12 UNKNOWN - HWChannelPos13 UNKNOWN - HWChannelPos14 UNKNOWN - HWChannelPos15 UNKNOWN - HWChannelPos16 UNKNOWN - HWChannelPos17 UNKNOWN - HWChannelPos18 UNKNOWN - HWChannelPos19 UNKNOWN - } - } - { - SplitPCM { - Name "18i20_adat_in" - Direction Capture - Format S24_3LE - Channels 8 - HWChannels 20 - HWChannelPos0 UNKNOWN - HWChannelPos1 UNKNOWN - HWChannelPos2 UNKNOWN - HWChannelPos3 UNKNOWN - HWChannelPos4 UNKNOWN - HWChannelPos5 UNKNOWN - HWChannelPos6 UNKNOWN - HWChannelPos7 UNKNOWN - HWChannelPos8 UNKNOWN - HWChannelPos9 UNKNOWN - HWChannelPos10 UNKNOWN - HWChannelPos11 UNKNOWN - HWChannelPos12 UNKNOWN - HWChannelPos13 UNKNOWN - HWChannelPos14 UNKNOWN - HWChannelPos15 UNKNOWN - HWChannelPos16 UNKNOWN - HWChannelPos17 UNKNOWN - HWChannelPos18 UNKNOWN - HWChannelPos19 UNKNOWN - } - } -] - -# Analog Outputs - -SectionDevice."Line 1" { - # not using .Headphones because this device has multiple headphone ports - Comment "Headphones 1" - - Value { - PlaybackPriority 255 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_stereo_out" - Direction Playback - HWChannels 20 - Channels 2 - Channel0 6 - Channel1 7 - ChannelPos0 FL - ChannelPos1 FR - } -} - -SectionDevice."Line 2" { - Comment "Headphones 2" - - Value { - PlaybackPriority 254 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_stereo_out" - Direction Playback - HWChannels 20 - Channels 2 - Channel0 8 - Channel1 9 - ChannelPos0 FL - ChannelPos1 FR - } -} - -SectionDevice."Line 3" { - Comment "Line Output 1+2" - - Value { - PlaybackPriority 192 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_stereo_out" - Direction Playback - HWChannels 20 - Channels 2 - Channel0 0 - Channel1 1 - ChannelPos0 FL - ChannelPos1 FR - } -} - -SectionDevice."Line 4" { - Comment "Line Output 3+4" - - Value { - PlaybackPriority 191 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_stereo_out" - Direction Playback - HWChannels 20 - Channels 2 - Channel0 2 - Channel1 3 - ChannelPos0 FL - ChannelPos1 FR - } -} - -SectionDevice."Line 5" { - Comment "Line Output 5+6" - - Value { - PlaybackPriority 190 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_stereo_out" - Direction Playback - HWChannels 20 - Channels 2 - Channel0 4 - Channel1 5 - ChannelPos0 FL - ChannelPos1 FR - } -} - -SectionDevice."Line 6" { - Comment "Line Output 7+8" - - ConflictingDevice [ - "Line 1" - ] - - Value { - PlaybackPriority 189 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_stereo_out" - Direction Playback - HWChannels 20 - Channels 2 - Channel0 6 - Channel1 7 - ChannelPos0 FL - ChannelPos1 FR - } -} - -SectionDevice."Line 7" { - Comment "Line Output 9+10" - - Value { - PlaybackPriority 188 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_stereo_out" - Direction Playback - HWChannels 20 - Channels 2 - Channel0 8 - Channel1 9 - ChannelPos0 FL - ChannelPos1 FR - } -} - -# Analog Inputs - -SectionDevice."Mic 1" { - Comment "Input 1 (Mic)" - - Value { - CapturePriority 176 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_mono_in" - Direction Capture - HWChannels 20 - Channels 1 - Channel0 0 - ChannelPos0 MONO - } -} - -SectionDevice."Mic 2" { - Comment "Input 2 (Mic)" - - Value { - CapturePriority 175 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_mono_in" - Direction Capture - HWChannels 20 - Channels 1 - Channel0 1 - ChannelPos0 MONO - } -} - -SectionDevice."Line 8" { - Comment "Input 3" - - Value { - CapturePriority 174 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_mono_in" - Direction Capture - HWChannels 20 - Channels 1 - Channel0 2 - ChannelPos0 MONO - } -} - -SectionDevice."Line 9" { - Comment "Input 4" - - Value { - CapturePriority 173 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_mono_in" - Direction Capture - HWChannels 20 - Channels 1 - Channel0 3 - ChannelPos0 MONO - } -} - -SectionDevice."Line 10" { - Comment "Input 5" - - Value { - CapturePriority 172 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_mono_in" - Direction Capture - HWChannels 20 - Channels 1 - Channel0 4 - ChannelPos0 MONO - } -} - -SectionDevice."Line 11" { - Comment "Input 6" - - Value { - CapturePriority 171 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_mono_in" - Direction Capture - HWChannels 20 - Channels 1 - Channel0 5 - ChannelPos0 MONO - } -} - -SectionDevice."Line 12" { - Comment "Input 7" - - Value { - CapturePriority 170 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_mono_in" - Direction Capture - HWChannels 20 - Channels 1 - Channel0 6 - ChannelPos0 MONO - } -} - -SectionDevice."Line 13" { - Comment "Input 8" - - Value { - CapturePriority 169 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_mono_in" - Direction Capture - HWChannels 20 - Channels 1 - Channel0 7 - ChannelPos0 MONO - } -} - -# Digital (Consumer) Outputs - -SectionDevice."SPDIF 1" { - Comment "S/PDIF Output" - - Value { - PlaybackPriority 112 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_stereo_out" - Direction Playback - HWChannels 20 - Channels 2 - Channel0 10 - Channel1 11 - ChannelPos0 FL - ChannelPos1 FR - } -} - -# Digital (Professional) Outputs - -SectionDevice."Direct 1" { - Comment "ADAT Optical Output" - - Value { - PlaybackPriority 48 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_adat_out" - Direction Playback - HWChannels 20 - Channels 8 - Channel0 12 - Channel1 13 - Channel2 14 - Channel3 15 - Channel4 16 - Channel5 17 - Channel6 18 - Channel7 19 - ChannelPos0 UNKNOWN - ChannelPos1 UNKNOWN - ChannelPos2 UNKNOWN - ChannelPos3 UNKNOWN - ChannelPos4 UNKNOWN - ChannelPos5 UNKNOWN - ChannelPos6 UNKNOWN - ChannelPos7 UNKNOWN - } -} - -# Digital (Consumer) Inputs - -SectionDevice."SPDIF 2" { - Comment "S/PDIF Input 1" - - Value { - CapturePriority 112 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_mono_in" - Direction Capture - HWChannels 20 - Channels 1 - Channel0 10 - ChannelPos0 MONO - } -} - -SectionDevice."SPDIF 3" { - Comment "S/PDIF Input 2" - - Value { - CapturePriority 111 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_mono_in" - Direction Capture - HWChannels 20 - Channels 1 - Channel0 11 - ChannelPos0 MONO - } -} - -# Digital (Professional) Inputs - -SectionDevice."Direct 2" { - Comment "ADAT Optical Input" - - Value { - CapturePriority 48 - } - - Macro.pcm_split.SplitPCMDevice { - Name "18i20_adat_in" - Direction Capture - HWChannels 20 - Channels 8 - Channel0 12 - Channel1 13 - Channel2 14 - Channel3 15 - Channel4 16 - Channel5 17 - Channel6 18 - Channel7 19 - ChannelPos0 UNKNOWN - ChannelPos1 UNKNOWN - ChannelPos2 UNKNOWN - ChannelPos3 UNKNOWN - ChannelPos4 UNKNOWN - ChannelPos5 UNKNOWN - ChannelPos6 UNKNOWN - ChannelPos7 UNKNOWN - } -} --- alsa-ucm-conf-1.2.14.orig/ucm2/USB-Audio/Focusrite/Scarlett-18i20.conf +++ /dev/null @@ -1,97 +0,0 @@ -# The 18i20 provides 20 playback and capture channels each: -# -# +----+---------------+-----------------+ -# | Ch | Inputs | Outputs | -# +====+===============+=================+ -# | 0 | Line/XLR 1 | Line 1 | -# | | | (Speaker Out L) | -# +----+---------------+-----------------+ -# | 1 | Line/XLR 2 | Line 2 | -# | | | (Speaker Out R) | -# +----+---------------+-----------------+ -# | 2 | Line 3 | Line 3 | -# +----+---------------+-----------------+ -# | 3 | Line 4 | Line 4 | -# +----+---------------+-----------------+ -# | 4 | Line 5 | Line 5 | -# +----+---------------+-----------------+ -# | 5 | Line 6 | Line 6 | -# +----+---------------+-----------------+ -# | 6 | Line 7 | Line 7 | -# | | | (Mirrored for | -# | | | Headphone 1 L) | -# +----+---------------+-----------------+ -# | 7 | Line 8 | Line 8 | -# | | | (Mirrored for | -# | | | Headphone 1 R) | -# +----+---------------+-----------------+ -# | 8 | | Line 9 | -# | | | (Mirrored for | -# | | | Headphone 2 L) | -# +----+---------------+-----------------+ -# | 9 | | Line 10 | -# | | | (Mirrored for | -# | | | Headphone 2 R) | -# +----+---------------+-----------------+ -# | 10 | S/PDIF 1 | S/PDIF 1 | -# +----+---------------+-----------------+ -# | 11 | S/PDIF 2 | S/PDIF 2 | -# +----+---------------+-----------------+ -# | 12 | ADAT 1.1 | ADAT 1.1 | -# +----+---------------+-----------------+ -# | 13 | ADAT 1.2 | ADAT 1.2 | -# +----+---------------+-----------------+ -# | 14 | ADAT 1.3 | ADAT 1.3 | -# +----+---------------+-----------------+ -# | 15 | ADAT 1.4 | ADAT 1.4 | -# +----+---------------+-----------------+ -# | 16 | ADAT 1.5 | ADAT 1.5 | -# +----+---------------+-----------------+ -# | 17 | ADAT 1.6 | ADAT 1.6 | -# +----+---------------+-----------------+ -# | 18 | ADAT 1.7 | ADAT 1.7 | -# +----+---------------+-----------------+ -# | 19 | ADAT 1.8 | ADAT 1.8 | -# +----+---------------+-----------------+ -# - -Define.Generation "1st" - -If.gen2 { - Condition { - Type RegexMatch - String "${CardComponents}" - Regex "USB1235:8201" - } - True.Define.Generation "2nd" -} - -If.gen3 { - Condition { - Type RegexMatch - String "${CardComponents}" - Regex "USB1235:8215" - } - True.Define.Generation "3rd" -} - -If.gen4 { - Condition { - Type RegexMatch - String "${CardComponents}" - Regex "USB1235:821d" - } - True.Define.Generation "4th" -} - -Comment "Focusrite Scarlett 18i20 ${var:Generation} Gen" - -SectionUseCase."HiFi" { - Comment "HiFi" - File "/USB-Audio/Focusrite/Scarlett-18i20-HiFi.conf" -} - -Define.DirectPlaybackChannels 20 -Define.DirectCaptureChannels 20 - -Include.dhw.File "/common/direct.conf" --- alsa-ucm-conf-1.2.14.orig/ucm2/USB-Audio/USB-Audio.conf +++ alsa-ucm-conf-1.2.14/ucm2/USB-Audio/USB-Audio.conf @@ -341,19 +341,6 @@ If.focusrite-scarlett-2i { } } -If.focusrite-scarlett-18i20 { - Condition { - Type RegexMatch - String "${CardComponents}" - # 800C 1st Gen - # 8201 2nd Gen - # 8215 3rd Gen - # 821d 4th Gen - Regex "USB1235:8(00C|2(01|1(5|d)))" - } - True.Define.ProfileName "Focusrite/Scarlett-18i20" -} - If.behringer-umc202hd { Condition { Type String
signature.asc
Description: This is a digitally signed message part.

