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

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to