  <?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.alsa-project.org/main/index.php?action=history&amp;feed=atom&amp;title=Detailed_changes_v1.2.2_v1.2.3</id>
	<title>Detailed changes v1.2.2 v1.2.3 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.alsa-project.org/main/index.php?action=history&amp;feed=atom&amp;title=Detailed_changes_v1.2.2_v1.2.3"/>
	<link rel="alternate" type="text/html" href="https://www.alsa-project.org/main/index.php?title=Detailed_changes_v1.2.2_v1.2.3&amp;action=history"/>
	<updated>2026-04-06T12:04:22Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.0</generator>
	<entry>
		<id>https://www.alsa-project.org/main/index.php?title=Detailed_changes_v1.2.2_v1.2.3&amp;diff=7361&amp;oldid=prev</id>
		<title>Perex: 1 revision</title>
		<link rel="alternate" type="text/html" href="https://www.alsa-project.org/main/index.php?title=Detailed_changes_v1.2.2_v1.2.3&amp;diff=7361&amp;oldid=prev"/>
		<updated>2020-06-09T08:39:36Z</updated>

		<summary type="html">&lt;p&gt;1 revision&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:39, 9 June 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Perex</name></author>
	</entry>
	<entry>
		<id>https://www.alsa-project.org/main/index.php?title=Detailed_changes_v1.2.2_v1.2.3&amp;diff=7360&amp;oldid=prev</id>
		<title>Perex at 08:39, 9 June 2020</title>
		<link rel="alternate" type="text/html" href="https://www.alsa-project.org/main/index.php?title=Detailed_changes_v1.2.2_v1.2.3&amp;diff=7360&amp;oldid=prev"/>
		<updated>2020-06-09T08:39:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| __TOC__&lt;br /&gt;
|}&lt;br /&gt;
=Detailed changelog between 1.2.2 and 1.2.3 releases=&lt;br /&gt;
=Changelog between 1.2.2 and 1.2.3 releases=&lt;br /&gt;
==alsa-lib==&lt;br /&gt;
===Core===&lt;br /&gt;
- Release v1.2.3&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- snd_dlopen: implement the relocatable version for glibc&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 BugLink: https://github.com/alsa-project/alsa-lib/issues/34&amp;lt;/code&amp;gt;&lt;br /&gt;
- github actions: ubuntu - fix the non-interactive build&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- pcm: dmix: assembly: fix the interface for safety (mmx)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 - add mm0 in the clobber list if the compiler&lt;br /&gt;
   is aware of the mmx technology;&lt;br /&gt;
 - otherwise, add the mmx aliased x87 floating point&lt;br /&gt;
   registers in the clobbers;&lt;br /&gt;
 - the configure now checks if the compiler is aware of&lt;br /&gt;
   the MMX technology.&lt;br /&gt;
 &lt;br /&gt;
   The compiler assumes none of the mmx or x87 registers are used&lt;br /&gt;
   by the function. If it chooses to store some data in them, they&lt;br /&gt;
   will be overwritten by the chunk.&lt;br /&gt;
   Recall that any mmx instruction invalidate the whole set of&lt;br /&gt;
   x87 floating point registers.&lt;br /&gt;
 &lt;br /&gt;
   Note: currently does not impact the binary output.&amp;lt;/code&amp;gt;&lt;br /&gt;
- configure: add --embed for python3-config (python 3.8)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
===Config API===&lt;br /&gt;
- conf: add snd_config_is_array() function&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
===Control API===&lt;br /&gt;
- tlv: implement nearest rounding in snd_tlv_convert_from_dB() for xdir == 0&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 We should round-up values to nearest to get more precise results.&lt;br /&gt;
 &lt;br /&gt;
 BugLink: https://github.com/alsa-project/alsa-utils/issues/35&amp;lt;/code&amp;gt;&lt;br /&gt;
- control: use more precise rounding in snd_ctl_ascii_value_parse()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- snd_dlopen: do not use absolute plugin path for snd_dlopen() calls&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 In commit b906db19ef9f4fb7886003072e550391cc1ac651, the snd_dlopen()&lt;br /&gt;
 implements the automatic lookup to the ALSA_PLUGIN_DIR directory.&lt;br /&gt;
 It is not necessary to add the absolute paths in callers now.&lt;br /&gt;
 &lt;br /&gt;
 The plugin names are also searched in ld.so.conf paths as the fallback now,&lt;br /&gt;
 but it should not be a big problem.&lt;br /&gt;
 &lt;br /&gt;
 BugLink: https://github.com/alsa-project/alsa-lib/issues/34&amp;lt;/code&amp;gt;&lt;br /&gt;
- namehint: remember the direction from the upper levels&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The current code resets the direction info for each level.&lt;br /&gt;
 Simply remove this code.&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
- conf: namehint - add omit_noargs to the hint section&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Do not list simple surround devices in the namehint function by default.&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
===Mixer API===&lt;br /&gt;
- tlv: implement nearest rounding in snd_tlv_convert_from_dB() for xdir == 0&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 We should round-up values to nearest to get more precise results.&lt;br /&gt;
 &lt;br /&gt;
 BugLink: https://github.com/alsa-project/alsa-utils/issues/35&amp;lt;/code&amp;gt;&lt;br /&gt;
- snd_dlopen: do not use absolute plugin path for snd_dlopen() calls&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 In commit b906db19ef9f4fb7886003072e550391cc1ac651, the snd_dlopen()&lt;br /&gt;
 implements the automatic lookup to the ALSA_PLUGIN_DIR directory.&lt;br /&gt;
 It is not necessary to add the absolute paths in callers now.&lt;br /&gt;
 &lt;br /&gt;
 The plugin names are also searched in ld.so.conf paths as the fallback now,&lt;br /&gt;
 but it should not be a big problem.&lt;br /&gt;
 &lt;br /&gt;
 BugLink: https://github.com/alsa-project/alsa-lib/issues/34&amp;lt;/code&amp;gt;&lt;br /&gt;
===PCM API===&lt;br /&gt;
- pcm: Fix memory leak at snd_pcm_new when THREAD_SAVE_API is defined&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The pthread_mutexattr_t object should be destroyed by calling&lt;br /&gt;
 pthread_mutexattr_destroy(), otherwise it may cause a potential&lt;br /&gt;
 memory leak due to the different implement of pthread_mutexattr_init()&amp;lt;/code&amp;gt;&lt;br /&gt;
- pcm: clarify -ENODATA description (recovery, event)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- pcm: fix spelling in documentation for -EBADFD&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- pcm: add documentation for -ENODATA error code&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 This error code can be used e.g. with echo reference PCM devices&lt;br /&gt;
 (the SND_USE_CASE_MOD_ECHO_REF UCM token).&amp;lt;/code&amp;gt;&lt;br /&gt;
- snd_dlopen: do not use absolute plugin path for snd_dlopen() calls&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 In commit b906db19ef9f4fb7886003072e550391cc1ac651, the snd_dlopen()&lt;br /&gt;
 implements the automatic lookup to the ALSA_PLUGIN_DIR directory.&lt;br /&gt;
 It is not necessary to add the absolute paths in callers now.&lt;br /&gt;
 &lt;br /&gt;
 The plugin names are also searched in ld.so.conf paths as the fallback now,&lt;br /&gt;
 but it should not be a big problem.&lt;br /&gt;
 &lt;br /&gt;
 BugLink: https://github.com/alsa-project/alsa-lib/issues/34&amp;lt;/code&amp;gt;&lt;br /&gt;
- pcm: return immediately when the state is SETUP in snd_pcm_drain()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 We are already in the target state. Do not call the plugin callback.&amp;lt;/code&amp;gt;&lt;br /&gt;
- pcm: fix snd_pcm_drain() excluding SETUP state from valid states&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 once draining is done, the pcm enters the SETUP state, which ought to&lt;br /&gt;
 be valid for snd_pcm_drain()&amp;lt;/code&amp;gt;&lt;br /&gt;
- pcm: rate: Fix uninitialized variable warning&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The recent gcc warning indicates the uninitialized variable commit_err:&lt;br /&gt;
   pcm_rate.c:1104:6: warning: ‘commit_err’ may be used uninitialized in this function [-Wmaybe-uninitialized]&lt;br /&gt;
      if (commit_err &amp;amp;lt; 0)&lt;br /&gt;
          ^&lt;br /&gt;
 &lt;br /&gt;
 Add a proper initialization to commit_err.&amp;lt;/code&amp;gt;&lt;br /&gt;
- pcm: rate: Fix compile warning wrt bit ops and comparison&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 We've got a gcc warning:&lt;br /&gt;
   pcm_rate.c: In function ‘snd_pcm_rate_drain’:&lt;br /&gt;
   pcm_rate.c:1090:19: warning: suggest parentheses around comparison in operand of ‘&amp;amp;’ [-Wparentheses]&lt;br /&gt;
      if (pcm-&amp;amp;gt;mode &amp;amp; SND_PCM_NONBLOCK != 0) {&lt;br /&gt;
                    ^&lt;br /&gt;
 &lt;br /&gt;
 Drop the zero comparison for fixing the warning and for simplicity.&amp;lt;/code&amp;gt;&lt;br /&gt;
- pcm: dmix: assembly: give more freedom over the constraints&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Minor changes that could help the compiler to produce a&lt;br /&gt;
 better (smaller/faster) code.&amp;lt;/code&amp;gt;&lt;br /&gt;
- pcm: dmix: assembly: refactor the PIC mode&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Newer versions of GCC (&amp;amp;gt; 5.0) accept that ebx is declared&lt;br /&gt;
 in the clobber list even in PIC mode. Meanwhile, even&lt;br /&gt;
 unlikely, the compiler may use ebx as base address of&lt;br /&gt;
 one of the memory entry, making subsequent access to&lt;br /&gt;
 them unreliable ('size', 'dst_step', 'src_step', 'sum_step').&lt;br /&gt;
 &lt;br /&gt;
 Adding ebx in the clobber solves the problem.&lt;br /&gt;
 By the way, the entry 'old_ebx' is no longer required.&amp;lt;/code&amp;gt;&lt;br /&gt;
- pcm: dmix: assembly: fix the interface for safety (mmx)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 - add mm0 in the clobber list if the compiler&lt;br /&gt;
   is aware of the mmx technology;&lt;br /&gt;
 - otherwise, add the mmx aliased x87 floating point&lt;br /&gt;
   registers in the clobbers;&lt;br /&gt;
 - the configure now checks if the compiler is aware of&lt;br /&gt;
   the MMX technology.&lt;br /&gt;
 &lt;br /&gt;
   The compiler assumes none of the mmx or x87 registers are used&lt;br /&gt;
   by the function. If it chooses to store some data in them, they&lt;br /&gt;
   will be overwritten by the chunk.&lt;br /&gt;
   Recall that any mmx instruction invalidate the whole set of&lt;br /&gt;
   x87 floating point registers.&lt;br /&gt;
 &lt;br /&gt;
   Note: currently does not impact the binary output.&amp;lt;/code&amp;gt;&lt;br /&gt;
- pcm: dmix: assembly: fix the interface for safety&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 - move 'size' and 'old_ebx' in the output section&lt;br /&gt;
   since they are clobbered;&lt;br /&gt;
 - add the &amp;quot;memory&amp;quot; clobber since input pointers&lt;br /&gt;
   are accessed;&lt;br /&gt;
 - (minor) add the &amp;quot;cc&amp;quot; clobber since flags are&lt;br /&gt;
   clobbered.&lt;br /&gt;
 &lt;br /&gt;
   The compiler is missing some dataflow information&lt;br /&gt;
   about the execution of the assembly chunks.&lt;br /&gt;
   For instance, it assumes that 'size' remains unchanged&lt;br /&gt;
   and that no input pointer is accessed.&lt;br /&gt;
   The compiler optimizer may take advantage of these&lt;br /&gt;
   assumption and produce a wrong code.&lt;br /&gt;
 &lt;br /&gt;
 Note: currently produces the same binary output.&amp;lt;/code&amp;gt;&lt;br /&gt;
- pcm: dmix: assembly: change the token by symbolic names&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 It eases the refactoring of assembly chunk since we can now&lt;br /&gt;
 add/remove/move entries without worrying about maintaining&lt;br /&gt;
 the token numbering in the template.&lt;br /&gt;
 &lt;br /&gt;
 Note: does not impact the binary output.&amp;lt;/code&amp;gt;&lt;br /&gt;
- fix infinite draining of the rate plugin in SND_PCM_NONBLOCK mode&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The draining function of the rate plugin does not handle properly the&lt;br /&gt;
 SND_PCM_NONBLOCK case. It can write data to the slave plugin each time the&lt;br /&gt;
 function is called, but does not update its internal state in order to&lt;br /&gt;
 reach a stopping condition. Use a last_commit_ptr workaround to reach such&lt;br /&gt;
 condition.&amp;lt;/code&amp;gt;&lt;br /&gt;
- pcm: rate - fix the remaining size calculation in snd_pcm_rate_drain()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- pcm: dmix: fix sw_params handling of timestamp types in direct plugins&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 In pcms using direct plugins (dmix/dsnoop/dshare), the timestamp type could&lt;br /&gt;
 be different from the terminating hw plugin, then the kernel driver.&lt;br /&gt;
 &lt;br /&gt;
 Be sure such pcms have plugins using consistently the same timestamp type.&amp;lt;/code&amp;gt;&lt;br /&gt;
- pcm: add chmap option to route plugin&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Add a config definition &amp;quot;chmap&amp;quot; to override the channel maps in the same&lt;br /&gt;
 way as in the hw and null plugins.&amp;lt;/code&amp;gt;&lt;br /&gt;
===Topology API===&lt;br /&gt;
- topology: Add missing ATTRIBUTE_UNUSED&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ... to shut up the compiler warnings.&amp;lt;/code&amp;gt;&lt;br /&gt;
- topology: use snd_config_is_array() function&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ... instead the own array test.&amp;lt;/code&amp;gt;&lt;br /&gt;
- topology: Use bool parser to parse boolean value&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 It should be safe to change this as correct values with int would be 0&lt;br /&gt;
 or 1 and bool parser handles them correctly.&amp;lt;/code&amp;gt;&lt;br /&gt;
- topology: add back asrc to widget_map in dapm.c&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 BugLink: https://github.com/thesofproject/sof/issues/2543&amp;lt;/code&amp;gt;&lt;br /&gt;
===Use Case Manager API===&lt;br /&gt;
- ucm: fix the wrong return value in uc_mgr_open_ctl()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: remove strict: in ${OpenName} substitution&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: fix the error path in parse_toplevel_path()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: fix the wrong uc_mgr_open_ctl() call in if_eval_control_exists()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- use-case.h: define Linked variable&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 We have a requirement to &amp;quot;hide&amp;quot; some hardware drivers, because&lt;br /&gt;
 other (main) UCM configuration will refer them.&lt;br /&gt;
 &lt;br /&gt;
 BugLink: https://github.com/alsa-project/alsa-ucm-conf/issues/30&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm: implement CardIdByName substitution&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The syntax is ${CardIdByName:CARDNAME[#INDEX]}.&lt;br /&gt;
 &lt;br /&gt;
 The CARDNAME is the ALSA's soundcard name (short form).&lt;br /&gt;
 The INDEX is the instance (0 = first, 1 = second etc.).&lt;br /&gt;
 &lt;br /&gt;
 Example: ${CardIdByName:HDA Intel PCH}&lt;br /&gt;
 (which is identical to ${CardIdByName:HDA Intel PCH#0})&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm: shuffle code in compound_merge()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: substitute arguments in sequences only for syntax 3+&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: substitute RenameDevice and DeleteDevice lists&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: substitute Comment in Transition and Device&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: substitute verb name and file field&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: substitute component sequence string&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: substitute device strings in the device lists&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: substitute device / modifier names, too&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: implement the toplevel ucm configuration file parser&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 There is a big issue to validate all possible configuration paths.&lt;br /&gt;
 Let create ucm2/ucm.conf file which describe the lookups. It may&lt;br /&gt;
 be also customized later to follow the kernel-side development.&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm: substitute ${CardNumber}&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: substitute ${OpenName}&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: Define/DefineRegex is supported in Syntax 3&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: String condition - implement Empty&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: handle strict: prefix correctly for the UCM card name&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: substitute also value strings&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: allow to specify the toplevel directory using '/' as first character in File path&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: config - change the in-place include evaluation order&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: allow syntax version 3&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: substitute arguments in sequences&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: configuration - add DefineRegex&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Syntax:&lt;br /&gt;
 &lt;br /&gt;
   DefineRegex.VariableName {&lt;br /&gt;
     String &amp;quot;something to match&amp;quot;&lt;br /&gt;
     Regex &amp;quot;(me)thi(ng)&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
 Result:&lt;br /&gt;
 &lt;br /&gt;
 - configuration variable &amp;quot;VariableName&amp;quot; is equal to &amp;quot;mething&amp;quot;&lt;br /&gt;
 - configuration variable &amp;quot;VariableName1&amp;quot; is equal to &amp;quot;me&amp;quot;&lt;br /&gt;
 - configuration variable &amp;quot;VariableName2&amp;quot; is equal to &amp;quot;ng&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Notes:&lt;br /&gt;
 &lt;br /&gt;
 The &amp;quot;Flags&amp;quot; string in the DefineRegex compound may specify&lt;br /&gt;
 the compilation flags (e = extended, i = ignore case,&lt;br /&gt;
 s = no substitutes, n = newline). See 'man 3 regex' for&lt;br /&gt;
 more details.&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm: configuration - allow to define the configuration variables&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 It may be useful for the library files to use the runtime configuration&lt;br /&gt;
 variables.&lt;br /&gt;
 &lt;br /&gt;
 Example:&lt;br /&gt;
 &lt;br /&gt;
  Define.Var1 &amp;quot;hw:${CardId},2&amp;quot;&lt;br /&gt;
  Value.PlaybackPCM &amp;quot;${var:Var1}&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm: config - substitute File string to allow variables in include&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: configuration - substitute ${ConfDir} and ${ConfTopDir}&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: configuration - implement in-place Include&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 An example:&lt;br /&gt;
 &lt;br /&gt;
         Include {&lt;br /&gt;
                 File &amp;quot;Inc.conf&amp;quot;&lt;br /&gt;
                 Before.SectionDevice &amp;quot;Mic&amp;quot;&lt;br /&gt;
         }&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm: rename _once command to _boot command&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: rename SectionOnce to BootSequence&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: fix compilation error in set_defaults_user()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: fix SectionOnce comment&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: initialize mgr-&amp;amp;gt;once_list&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 BugLink: https://github.com/alsa-project/alsa-lib/pull/50&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm: handle 'set _defaults' command&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: handle 'set _once' command&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: execute SectionDefaults lately (when the first verb is set)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 We need a way to set the SectionOnce at first before SectionDefaults.&lt;br /&gt;
 It also does not make sense to run SectionDefaults when the API is&lt;br /&gt;
 used only to query for values or so.&lt;br /&gt;
 &lt;br /&gt;
 Execute the SectionDefaults commands only when the first verb&lt;br /&gt;
 is set (before the verb specific commands).&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm: parse SectionOnce section in the master UCM configuration file&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: merge the array items from the condition blocks&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- use-case.h: add USB as allowed device name&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Some USB devices are really generic where the&lt;br /&gt;
 PCM stream can be routed to different paths.&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm: fix copy-n-paste typo (RemoveDevice list)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: fix the device remove operation&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 - allow to remove device only from conflicting lists&lt;br /&gt;
 - unify the error codes when the device is not found (ENODEV)&amp;lt;/code&amp;gt;&lt;br /&gt;
- usecase: allow indexes also for modifier names&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: fix uc_mgr_scan_master_configs()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Skip the lookup, if the top level filename does not exist.&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm: clarify the index syntax for the device names&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
===Configuration===&lt;br /&gt;
- conf: USB-Audio: Add HP Thunderbolt Dock in the IEC958 blacklist&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Both headset and speaker on HP Thunderbolt Dock don't support IEC958&lt;br /&gt;
 interface.&amp;lt;/code&amp;gt;&lt;br /&gt;
- conf: remove debug printf() in snd_config_hook_load()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- conf: add support for XDG_CONFIG_HOME search path&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Include $XDG_CONFIG_HOME/alsa/asoundrc _or_ ~/.config/alsa/asoundrc as&lt;br /&gt;
 the last user-defined configuration.&lt;br /&gt;
 &lt;br /&gt;
 BugLink: https://github.com/alsa-project/alsa-lib/issues/49&amp;lt;/code&amp;gt;&lt;br /&gt;
- conf: load function (hook) - add OR support&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 While I was trying to work on XDG_CONFIG_HOME support, I though&lt;br /&gt;
 that it may be nice to support OR for the file specification.&lt;br /&gt;
 &lt;br /&gt;
 But then I found that we can already do this via the refer hook.&lt;br /&gt;
 &lt;br /&gt;
 I commit this change anyway, because the snd_config_hook_load()&lt;br /&gt;
 function is more clean now.&lt;br /&gt;
 &lt;br /&gt;
 The OR is implemented with three | characters like:&lt;br /&gt;
 &lt;br /&gt;
   &amp;quot;~/.asoundrc|||~/.asoundrc2|||/opt/some/other/path&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 (first file found wins)&amp;lt;/code&amp;gt;&lt;br /&gt;
- conf: USB-Audio.conf - add another card name for Asus Xonar 5&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 BugLink: https://github.com/alsa-project/alsa-lib/issues/48&amp;lt;/code&amp;gt;&lt;br /&gt;
- conf: add snd_config_is_array() function&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- conf: use bool type for the join member in the config structure&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- conf: change namehint for pcm.front&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 It seems that we have regressions for pcm.front (some&lt;br /&gt;
 applications are using this device also for the default&lt;br /&gt;
 raw input). Change the description and allow both&lt;br /&gt;
 directions.&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
- conf: USB-Audio: Fix S/PDIF output of ASUS Xonar AE&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ASUS Xonar AE is a PCI-Express card containing USB controller:&lt;br /&gt;
 &lt;br /&gt;
         USB controller [0c03]: ASMedia Technology Inc. ASM1042A USB 3.0 Host Controller [1b21:1142]&lt;br /&gt;
 &lt;br /&gt;
 and the actual USB sound card:&lt;br /&gt;
 &lt;br /&gt;
         ID 0b05:180f ASUSTek Computer, Inc. XONAR SOUND CARD&lt;br /&gt;
 &lt;br /&gt;
 As other Xonar USB sound cards, it uses second device for digital&lt;br /&gt;
 output.&amp;lt;/code&amp;gt;&lt;br /&gt;
- pcm: dmix: fix sw_params handling of timestamp types in direct plugins&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 In pcms using direct plugins (dmix/dsnoop/dshare), the timestamp type could&lt;br /&gt;
 be different from the terminating hw plugin, then the kernel driver.&lt;br /&gt;
 &lt;br /&gt;
 Be sure such pcms have plugins using consistently the same timestamp type.&amp;lt;/code&amp;gt;&lt;br /&gt;
- conf: fix namehint for pcm.front and pcm.iec958&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 As suggested in:&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
- conf: USB-Audio: Add C-Media USB Headphone Set to the IEC958 blacklist&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- Change PCM device number of Asus Xonar U5&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- conf: namehint - add omit_noargs to the hint section&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Do not list simple surround devices in the namehint function by default.&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
- conf: change the order of PCM devices in alsa.conf&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Appearently, some applications use the first device for probe or so.&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
===Dynamic Loader helpers===&lt;br /&gt;
- dlsym: fix the snd_dlopen(), incorrect variable use&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- dlsym: fix again snd_dlpath()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 There is double lock in 8d866e4cd886991f605399af6bd6cf4ac6eea3e2 .&amp;lt;/code&amp;gt;&lt;br /&gt;
- dlsym: fix the reference to the origin lib directory&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 There is reference to the variable on heap in&lt;br /&gt;
 commit 33089f30a316060094dfa95a2949fd479299c7 .&lt;br /&gt;
 &lt;br /&gt;
 Cache the origin directory better.&amp;lt;/code&amp;gt;&lt;br /&gt;
- snd_dlopen: implement the relocatable version for glibc&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 BugLink: https://github.com/alsa-project/alsa-lib/issues/34&amp;lt;/code&amp;gt;&lt;br /&gt;
===Kernel Headers===&lt;br /&gt;
- header: Fix build error with old kernel headers&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Old development environment doesn't necessarily contain the headers&lt;br /&gt;
 defining __kernel_long_t that is recently used for y2038 timespec&lt;br /&gt;
 conditional.  Define it explicitly in such a case.&amp;lt;/code&amp;gt;&lt;br /&gt;
===Simple Abstraction Mixer Modules===&lt;br /&gt;
- snd_dlopen: implement the relocatable version for glibc&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 BugLink: https://github.com/alsa-project/alsa-lib/issues/34&amp;lt;/code&amp;gt;&lt;br /&gt;
- snd_dlopen: do not use absolute plugin path for snd_dlopen() calls&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 In commit b906db19ef9f4fb7886003072e550391cc1ac651, the snd_dlopen()&lt;br /&gt;
 implements the automatic lookup to the ALSA_PLUGIN_DIR directory.&lt;br /&gt;
 It is not necessary to add the absolute paths in callers now.&lt;br /&gt;
 &lt;br /&gt;
 The plugin names are also searched in ld.so.conf paths as the fallback now,&lt;br /&gt;
 but it should not be a big problem.&lt;br /&gt;
 &lt;br /&gt;
 BugLink: https://github.com/alsa-project/alsa-lib/issues/34&amp;lt;/code&amp;gt;&lt;br /&gt;
===Test/Example code===&lt;br /&gt;
- test: pcm_min - add snd_pcm_drain() call and indentation fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
==alsa-utils==&lt;br /&gt;
===Core===&lt;br /&gt;
- Release v1.2.3&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- github actions: ubuntu - fix the non-interactive build&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- github workflow: fix tag fetch&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
===ALSA Control (alsactl)===&lt;br /&gt;
- alsactl: ucm - rename _once command to _boot command&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsactl: allow to compile alsactl without UCM support&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsactl: use the right priority for syslog messages&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsactl: add -D argument to execute also the UCM defaults section&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsactl: redirect alsa-lib errors&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsactl: add initial support for UCM init&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsactl: init - iterate through all cards for the initial settings&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The generic initialization code returns error code 99 (-99). Take&lt;br /&gt;
 all those codes equal or above (bellow) this value as non-fatal.&amp;lt;/code&amp;gt;&lt;br /&gt;
- alsactl: daemon.c - fix gcc warning in write_pid_file()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsactl: fix error handling for sched_setscheduler() call&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 As man page says: &amp;quot;If successful, the sched_setparam() function shall return zero.&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 Without update I got this output in the syslog (journalctl):&lt;br /&gt;
 abr 16 09:25:30 mypc alsactl[1652]: alsactl 1.2.2 daemon started&lt;br /&gt;
 abr 16 09:25:30 mypc alsactl[1652]: /usr/bin/alsactl: do_nice:165sched_setparam failed: No such file or directory&lt;br /&gt;
 &lt;br /&gt;
 If sched_setscheduler() returns 0, so it means that the call was successful.&amp;lt;/code&amp;gt;&lt;br /&gt;
- alsactl: avoid needless wakeups in monitor loop.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The timeout wasn't really being used for anything; disabling it should&lt;br /&gt;
 reduce idle energy consumption slightly.&lt;br /&gt;
 &lt;br /&gt;
 Tested-by: Takashi Sakamoto &amp;amp;lt;o-takashi@sakamocchi.jp&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
- alsactl: don't exit on EINTR from epoll_wait().&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Previously, things like attaching strace to a running 'alsactl monitor'&lt;br /&gt;
 process would cause it to exit.&lt;br /&gt;
 &lt;br /&gt;
 Tested-by: Takashi Sakamoto &amp;amp;lt;o-takashi@sakamocchi.jp&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
===alsa-info.sh===&lt;br /&gt;
- alsa-info.sh: increase version to 0.4.65&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsa-info: initial rpm/deb package info&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 This might become a Pandora's box given&lt;br /&gt;
 the amount of obscure package managers&lt;br /&gt;
 on the planet but these two account for&lt;br /&gt;
 most *nix-like systems with ALSA it seems.&lt;br /&gt;
 &lt;br /&gt;
 Added support for querying ALSA packages&lt;br /&gt;
 installed through rpm and dpkg; tested&lt;br /&gt;
 on ALT (rpm) and OS Elbrus (dpkg).&lt;br /&gt;
 &lt;br /&gt;
 Suggested-by: Anton Farygin &amp;amp;lt;rider@altlinux.org&amp;amp;gt;&lt;br /&gt;
 See-also: http://bugzilla.altlinux.org/38416&amp;lt;/code&amp;gt;&lt;br /&gt;
- alsa-info.sh: add ALT to DISTRO list&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Suggested-by: Anton Farygin &amp;amp;lt;rider@altlinux.org&amp;amp;gt;&lt;br /&gt;
 See-also: http://bugzilla.altlinux.org/38416&amp;lt;/code&amp;gt;&lt;br /&gt;
===alsaloop===&lt;br /&gt;
- alsaloop: reduce cumulative error caused by non-atomic samples calculation&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 When doing loopback between two audio card with&lt;br /&gt;
 same sampling frequency, I noticed slow increase&lt;br /&gt;
 of pitch_diff.&lt;br /&gt;
 &lt;br /&gt;
 When I changed order of get_queued_playback_samples()&lt;br /&gt;
 vs get_queued_capture_samples(), I noticed same drift&lt;br /&gt;
 of pitch_diff but if was decreasing this time.&lt;br /&gt;
 &lt;br /&gt;
 This seems to be caused by non-atomic consecutive&lt;br /&gt;
 snd_pcm_delay() invocation for playback then for&lt;br /&gt;
 capture. snd_pcm_delay() measures delay between&lt;br /&gt;
 read/write call and actual ADC/DAC operation.&lt;br /&gt;
 &lt;br /&gt;
 So while we get this value for playback path in&lt;br /&gt;
 get_queued_playback_samples(), next call to&lt;br /&gt;
 get_queued_capture_samples() will happen a little&lt;br /&gt;
 bit later so snd_pcm_delay() may return incorrect&lt;br /&gt;
 value.&lt;br /&gt;
 &lt;br /&gt;
 Be interleaving get_queued_{playback,capture}_samples()&lt;br /&gt;
 order, we divide this small error between playback&lt;br /&gt;
 and capture paths. I do not see any issues anymore&lt;br /&gt;
 with one-way drift of pitch_diff.&amp;lt;/code&amp;gt;&lt;br /&gt;
===alsamixer===&lt;br /&gt;
- alsamixer: suppress _XOPEN_SOURCE compile warning&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
===alsaucm===&lt;br /&gt;
- alsaucm: remove custom rules, alsactl is UCM aware now&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsactl: ucm - rename _once command to _boot command&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
===amixer===&lt;br /&gt;
- amixer: retype to double in convert_prange1() like in convert_prange()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- amixer: improve the raw percentual volume rounding&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 In commit &amp;quot;ae9ddeb63443cc2c46e0f0b915466cca0f800372&amp;quot; the rint() was&lt;br /&gt;
 changed to ceil(). Revert it back. The rint() rounding is more precise&lt;br /&gt;
 for most cases.&lt;br /&gt;
 &lt;br /&gt;
 Also, handle the special case where the percentual value is greather&lt;br /&gt;
 then zero. Set the min + 1 value in this case.&lt;br /&gt;
 &lt;br /&gt;
 At last, fix the return value in convert_prange() when range is zero.&amp;lt;/code&amp;gt;&lt;br /&gt;
==tinycompress==&lt;br /&gt;
===Core===&lt;br /&gt;
- Release v1.2.3&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
===Header files===&lt;br /&gt;
- sound: fix the snd_dec_alac structure&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Update of header to latest version bought wrong update for struct&lt;br /&gt;
 snd_dec_alac so fix it to correct version&amp;lt;/code&amp;gt;&lt;br /&gt;
- sound: update header to v0.2.0&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Kernel has upgraded compress headers with support for WMA, ALAC and APE&lt;br /&gt;
 and bumped version to 0.2.0, so update this header as well&amp;lt;/code&amp;gt;&lt;br /&gt;
==alsa-ucm-conf==&lt;br /&gt;
===Configuration===&lt;br /&gt;
- ucm2: fix more indentation issues&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm2: DB845c: Add ucm for DB845c board&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 DB845c board by default has two WSA881x speakers and HDMI&lt;br /&gt;
 audio connections.&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm2: codecs: wsa881x: add codec sequences&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Add default, enable/disable codec sequence for wsa881x codec&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm2: codecs: wcd934x: Add Codec sequences.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Add WCD934x codec sequences to be used by other platforms like DB845c&lt;br /&gt;
 and Lenovo YOGA C630&amp;lt;/code&amp;gt;&lt;br /&gt;
- chtmax98090: add generic chtmax98090.conf and move Quawks init to the generic HiFi.conf&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm2: chtmax98090: add generic HiFi.conf and SOF support&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Tested on Cyan Chromebook with both SOF and SST drivers.&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm2: enable possible SOF support in profile for Chromebook Asus C300&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm2: Add profile for Chromebook Asus C300&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ASUS Chromebook C300 alias Google QUAWKS is an Intel Baytrail platform&lt;br /&gt;
 with max98090 codec.  This patch adds the basic UCM snippet for the&lt;br /&gt;
 max98090 codec and HiFi.conf for this model.&lt;br /&gt;
 &lt;br /&gt;
 Note that MIC2 is used for the headset mic.  If another model with&lt;br /&gt;
 this codec uses a different ADC port, we'd need to create another&lt;br /&gt;
 profile snippet and rename the device.&lt;br /&gt;
 &lt;br /&gt;
 BugLink: https://apibugzilla.suse.com/show_bug.cgi?id=1171492&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm2: PAZ - move whole initialization to BootSequence&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 We need to remove the custom UCM rules from udev (alsa-utils).&lt;br /&gt;
 The 'alsactl init' is UCM aware and sufficient to initialize&lt;br /&gt;
 the soundcard now.&amp;lt;/code&amp;gt;&lt;br /&gt;
- SOF: bytcht selections&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Use the SOF driver name to load a config, using a File inclusion based&lt;br /&gt;
 on the legacy card name.&lt;br /&gt;
 &lt;br /&gt;
 Suggested-by: Jaroslav Kysela &amp;amp;lt;perex@perex.cz&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
- sof-bytcht-rt5650: reuse legacy settings&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Just test if controls for the legacy driver are available&amp;lt;/code&amp;gt;&lt;br /&gt;
- sof-bytcht-rt5645: reuse legacy settings&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Just test if controls for the legacy driver are available&amp;lt;/code&amp;gt;&lt;br /&gt;
- sof-bytcht-nau8824: reuse legacy settings&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Just test if controls for the legacy driver are available&amp;lt;/code&amp;gt;&lt;br /&gt;
- sof-bytcht-rt5672: reuse legacy settings&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Just test if controls for the legacy driver are available&amp;lt;/code&amp;gt;&lt;br /&gt;
- sof-bytcht-es8316: reuse legacy settings&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Just test if controls for the legacy driver are available&amp;lt;/code&amp;gt;&lt;br /&gt;
- sof-bytcht-cx2072x: reuse legacy settings&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Just test if controls for the legacy driver are available&amp;lt;/code&amp;gt;&lt;br /&gt;
- sof-bytcht-rt5651: reuse legacy settings&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Just test if controls for the legacy driver are available.&amp;lt;/code&amp;gt;&lt;br /&gt;
- sof-bytcht-rt5640: reuse legacy settings&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Just test if controls for the legacy driver are available&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm2: update README.md&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- chtrt5650: add Syntax 2&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm2: add initial ucm.conf for the latest alsa-lib&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: fix wrong If in sequence in HiFi-dual.conf&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- bytcr-rt5651: fix the cfg-mic:in1 / cfg-mic:in12 match error&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm2: fix chtrt5650 configuration (ucm-validator)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- Add initial support for Realtek ALC1220 TRX40 motherboards&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Tested with TRX40 Designare but should work on most TRX40 motherboards&lt;br /&gt;
 Tested with pulseaudio 36a4923f9bd05d4c5e2e8b1765f18edf452b9251&lt;br /&gt;
  with fix for 8 channel mixer element applied&lt;br /&gt;
 &lt;br /&gt;
 Tested with kernel 5.7.0-rc3&lt;br /&gt;
 &lt;br /&gt;
 The following are the notes of the testing and implementation&lt;br /&gt;
 &lt;br /&gt;
 * Back speaker works in 5.1 mode, becasue side channel&lt;br /&gt;
   shares jack with line-in and by default line-in is configured.&lt;br /&gt;
   Once jack retasking will work, it will work automatically&lt;br /&gt;
   Same for front mic that can be retasked to line-in&lt;br /&gt;
 &lt;br /&gt;
 * SPDIF is not tested physically yet. The SPDIF mute mixer control is recognised by&lt;br /&gt;
   pulseaudio correctly so profile is correct.&lt;br /&gt;
 &lt;br /&gt;
 * When all capture inputs are disconnected, pulseaudio thinks that the UCM2 profile&lt;br /&gt;
   is invalid and doesn't use it by default. It can be forced to use it by selecting&lt;br /&gt;
   it in the pavucontrol. Or you can for now comment out one of 'JackControl' statements,&lt;br /&gt;
   to make it think that one of the jacks is always plugged in.&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm2: fix indentation (use tabs)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm2: remove empty enable/disable sequence sections&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- sof-hda-dsp: change Headphones2 to Mic2&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- chtrt5645: Remove bogus JackHWMute settings&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 There is no reason why the internal microphone or speakers cannot&lt;br /&gt;
 be used when a headset is plugged in.&lt;br /&gt;
 &lt;br /&gt;
 The jack does not physically disconnect these, so the JackHWMute settings&lt;br /&gt;
 are wrong, remove them.&amp;lt;/code&amp;gt;&lt;br /&gt;
- chtrt5645: Add MEDION-E1239TMD60568-0.1-Wingman.conf symlink to chtrt5645-dmic2.conf&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The Medion Akoya E1239T 2-in-1 uses a digital mic connected to the&lt;br /&gt;
 dmic2 pin, rather then the default analog mic on in2.&lt;br /&gt;
 &lt;br /&gt;
 Add a long name symlink to chtrt5645-dmic2.conf for this, so that&lt;br /&gt;
 the right config is used.&amp;lt;/code&amp;gt;&lt;br /&gt;
- chtrt5645: Add ASUSTeKCOMPUTERINC.-T100HAN-1.0 symlink to chtrt5645-dmic1.conf&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 We already have a ASUSTeKCOMPUTERINC.-T100HAN-1.0-T100HAN symlink to&lt;br /&gt;
 chtrt5645-dmic1.conf, but since kernel commit 39870b0dec68 (&amp;quot;ASoC: DMI long&lt;br /&gt;
 name - avoid to add board name if matches with product name&amp;quot;), the kernel&lt;br /&gt;
 omits the (second) -T100HAN. So with newer kernels that no longer works.&lt;br /&gt;
 &lt;br /&gt;
 Arguably this is a kernel regressions, but chances are we already have&lt;br /&gt;
 some configs depending on the new behavior, so lets fix this on the&lt;br /&gt;
 UCM2 side by adding a second symlink using the new long name.&amp;lt;/code&amp;gt;&lt;br /&gt;
- bytcr-rt5651: Fix dmic check in HiFi-Components.conf&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The kernel sets cfg-mic:dmic not cfg-mic:dmic1 when a digital mic is&lt;br /&gt;
 used. The wrong check for cfg-mic:dmic1 causes there to be no &amp;quot;Mic&amp;quot;&lt;br /&gt;
 device at all, which causes the check for the ConflictingDevices section&lt;br /&gt;
 of the HeadSet (mic) device to fail like e.g. so:&lt;br /&gt;
 &lt;br /&gt;
 [hans@localhost ~]$ alsaucm -c bytcr-rt5651 set _verb HiFi set _enadev Speaker&lt;br /&gt;
 ALSA lib parser.c:1138:(verb_dev_list_add) error: unable to find device 'Mic'&lt;br /&gt;
 ALSA lib parser.c:1433:(parse_verb_file) error: device management error in verb 'HiFi'&lt;br /&gt;
 ALSA lib main.c:962:(snd_use_case_mgr_open) error: failed to import bytcr-rt5651 use case configuration -2&lt;br /&gt;
 alsaucm: error failed to open sound card bytcr-rt5651: No such file or directory&lt;br /&gt;
 &lt;br /&gt;
 This commit fixes this.&amp;lt;/code&amp;gt;&lt;br /&gt;
- update README files&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 - UCM validator&lt;br /&gt;
 - UCM paths for ucm2/&amp;lt;/code&amp;gt;&lt;br /&gt;
- hda-dsp: add basic ucm config&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Basic UCM configuration for Intel Skylake SST with HDA DSP generic&lt;br /&gt;
 machine driver enabling codec playback and capture on both HDA codec&lt;br /&gt;
 and DMIC ports.&amp;lt;/code&amp;gt;&lt;br /&gt;
- sof-hda-dsp: Support systems without integrated graphics audio&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 On systems where integrated graphics audio is not present&lt;br /&gt;
 or is disabled, the HDMI PCM nodes are disabled. Add rules to&lt;br /&gt;
 detect these systems by checking presence of HDMI jack controls&lt;br /&gt;
 with UCM2 rules.&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm2: treewide - JackHWMute fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- sof-bdw-rt5677: initial port to UCM2&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Tested on Pixel 2015/SAMUS Chromebook.&lt;br /&gt;
 &lt;br /&gt;
 Known limitations:&lt;br /&gt;
 Left/Right confusion (probably a firmware issue)&lt;br /&gt;
 PulseAudio does not switch capture devices on headset plug&amp;lt;/code&amp;gt;&lt;br /&gt;
===Description===&lt;br /&gt;
- update README files&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 - UCM validator&lt;br /&gt;
 - UCM paths for ucm2/&amp;lt;/code&amp;gt;&lt;br /&gt;
==alsa-topology-conf==&lt;br /&gt;
===Configuration files===&lt;br /&gt;
- topology: Add topology file for generic HDA DSP machine driver&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Provide conf file with topology for generic HDA DSP machine&lt;br /&gt;
 driver configuration. This topology is meant to be used with Intel&lt;br /&gt;
 Skylake SST driver.&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Perex</name></author>
	</entry>
</feed>