  <?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.1.2_v1.2.2</id>
	<title>Detailed changes v1.2.1.2 v1.2.2 - 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.1.2_v1.2.2"/>
	<link rel="alternate" type="text/html" href="https://www.alsa-project.org/main/index.php?title=Detailed_changes_v1.2.1.2_v1.2.2&amp;action=history"/>
	<updated>2026-04-05T17:46:40Z</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.1.2_v1.2.2&amp;diff=7350&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.1.2_v1.2.2&amp;diff=7350&amp;oldid=prev"/>
		<updated>2020-02-19T16:43:18Z</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 16:43, 19 February 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.1.2_v1.2.2&amp;diff=7349&amp;oldid=prev</id>
		<title>Perex at 16:43, 19 February 2020</title>
		<link rel="alternate" type="text/html" href="https://www.alsa-project.org/main/index.php?title=Detailed_changes_v1.2.1.2_v1.2.2&amp;diff=7349&amp;oldid=prev"/>
		<updated>2020-02-19T16:43:18Z</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.1.2 and 1.2.2 releases=&lt;br /&gt;
=Changelog between 1.1.7 and 1.2.2 releases=&lt;br /&gt;
==alsa-lib==&lt;br /&gt;
===Core===&lt;br /&gt;
- Release v1.2.2&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- github build.yml: cosmetic changes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- github: create test workflow for fedora and ubuntu&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- do not set close-on-exec flag on descriptor if it was already set&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 There is no need to set this again if O_CLOEXEC is supported.&amp;lt;/code&amp;gt;&lt;br /&gt;
- configure.ac: remove an unnecessary libtool fix&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 This code was added in commit 75d393a563efb578c79364a277087c6326267f52&lt;br /&gt;
 without explaining why. I assume it was a mistake, since it looks like&lt;br /&gt;
 the libtool problem should have gone away a long time ago. The referenced&lt;br /&gt;
 wiki page https://wiki.debian.org/RpathIssue says:&lt;br /&gt;
 &lt;br /&gt;
     Since libtool 1.5.2 (released 2004-01-25), on Linux libtool no&lt;br /&gt;
     longer sets RPATH for any directories in the dynamic linker search&lt;br /&gt;
     path, so this should no longer be an issue unless upstream used a&lt;br /&gt;
     really old version of libtool when creating their distribution&lt;br /&gt;
     tarball.&lt;br /&gt;
 &lt;br /&gt;
 This code caused problems in OpenEmbedded, where the libtool script is&lt;br /&gt;
 named &amp;quot;x86_64-oe-linux-libtool&amp;quot; or similar rather than just &amp;quot;libtool&amp;quot;,&lt;br /&gt;
 so the sed command failed with a file not found error. Rather than&lt;br /&gt;
 adapting the code to OpenEmbedded's peculiarities, it seems best to just&lt;br /&gt;
 remove the unnecessary code altogether.&lt;br /&gt;
 &lt;br /&gt;
 Note: The rpath is set (hardcoded) for 'make' but it is corrected&lt;br /&gt;
 for 'make install' by libtool.&amp;lt;/code&amp;gt;&lt;br /&gt;
- Update the attributes.m4 macro file from xine&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 This file was imported from the xine project. Update it to the current&lt;br /&gt;
 revision, which resolves the &amp;quot;no AC_LANG_SOURCE call detected in body&amp;quot;&lt;br /&gt;
 warnings with Autoconf 2.68 or later.&amp;lt;/code&amp;gt;&lt;br /&gt;
- Fix alsa/sound/*.h for external programs&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The recent update of sound/*.h to sync with the latest Linus uapi&lt;br /&gt;
 files broke the build of alsa-tools programs.  These files used to be&lt;br /&gt;
 a modified version of Linux sound/* header files, so that they could&lt;br /&gt;
 be built without Linux headers.  The special prefix like __user and&lt;br /&gt;
 other things were worked around there.&lt;br /&gt;
 &lt;br /&gt;
 We may do that again, but a better approach is to fix those things in&lt;br /&gt;
 Linux kernel uapi side, while we keep the minimal workaround in&lt;br /&gt;
 alsa-lib such as the __u16 and co type definitions.&lt;br /&gt;
 &lt;br /&gt;
 This patch is such an attempt, namely:&lt;br /&gt;
 - Keep the original $LINUX/uapi/sound/*.h in include/sound/uapi&lt;br /&gt;
   directory&lt;br /&gt;
 - The &amp;quot;fixes&amp;quot; are applied to some uapi headers, so that they don't&lt;br /&gt;
   contain Linux-specific prefix and use of opaque struct like&lt;br /&gt;
   snd_ctl_elem_id&lt;br /&gt;
 - The uapi headers are included indirectly from include/sound/*.h&lt;br /&gt;
 - Some headers have inclusion of type_compat.h for the Linux variable&lt;br /&gt;
   types and prefixes&lt;br /&gt;
 - type_compat.h tries to use &amp;amp;lt;linux/types.h&amp;amp;gt; when __linux__ is&lt;br /&gt;
   defined, instead of the own conflicting definitions&lt;br /&gt;
 &lt;br /&gt;
 The last type might need a bit more adjustment depending on the&lt;br /&gt;
 compiler, but it can be fixed locally without disturbing else.&amp;lt;/code&amp;gt;&lt;br /&gt;
===Control API===&lt;br /&gt;
- control: Remove access to the deprecated dimen fields&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The dimen fields of control element has been deprecated, and it's&lt;br /&gt;
 finally dropped in kernel 5.6 ABI definition.  Remove the&lt;br /&gt;
 corresponding accesses in alsa-lib code.&lt;br /&gt;
 &lt;br /&gt;
 As of this patch, it's disabled via ifdef, just to be sure.  The&lt;br /&gt;
 disabled code should be removed in a later stage as a cleanup.&amp;lt;/code&amp;gt;&lt;br /&gt;
- namehint: improve the previous patch (check the returned value)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- namehint: correct the @args check&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-plugins/issues/3&amp;lt;/code&amp;gt;&lt;br /&gt;
===Mixer API===&lt;br /&gt;
- mixer: Fix memory leak for more than 16 file descriptor case&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
===Topology API===&lt;br /&gt;
- topology: Drop SNDRV_CTL_ELEM_ACCESS_TIMESTAMP access&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 SNDRV_CTL_ELEM_ACCESS_TIMESTAMP is removed from 5.6 kernel ABI as the&lt;br /&gt;
 ctl timestamp field has been never used and deprecated.&lt;br /&gt;
 Drop the corresponding access from the topology code, too.&amp;lt;/code&amp;gt;&lt;br /&gt;
- topology: remove MAX_FILE definition and use correct PATH_MAX&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: cosmetic changes (functions)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: tplg_dbg() cleanups&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 - remove newline at the end&amp;lt;/code&amp;gt;&lt;br /&gt;
- topology: unify the log mechanism&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: move the elem-&amp;amp;gt;list delete to tplg_elem_free()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The tplg_elem_free() is called in the error path from many places&lt;br /&gt;
 and it is expected that the element object will be unregistered&lt;br /&gt;
 from the tplg structure, too.&amp;lt;/code&amp;gt;&lt;br /&gt;
- topology: implement snd_tplg_decode&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: fix the wrong memory access (object realloc)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: fix the ops parser (accept integer/hexa values)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: fix the TPLG_DEBUG compilation&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: implement shorter hexa uuid 00:00 parser&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: fix the unitialized tuples&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: dapm - fix the SNDERR() - Undefined&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: cleanup the SNDERR() calls&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 - remove the wrong new lines&lt;br /&gt;
 - remove error/warning prefixes (error is error)&amp;lt;/code&amp;gt;&lt;br /&gt;
- topology: add snd_tplg_version() function&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: add snd_tplg_create() with flags&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Add SND_TPLG_CREATE_VERBOSE and SND_TPLG_CREATE_DAPM_NOSORT&lt;br /&gt;
 flags for the special operations.&amp;lt;/code&amp;gt;&lt;br /&gt;
- topology: add snd_tplg_save()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: add parser to the tplg_table&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: move the topology element table from builder to elem&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 - use offsetof() for the lists&lt;br /&gt;
 - add other info to describe the elements&lt;br /&gt;
 - use the table in the element constructor&amp;lt;/code&amp;gt;&lt;br /&gt;
- topology: add snd_tplg_load() remove snd_tplg_build_bin_file()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: parser - recode tplg_parse_config()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: add binary output from the builder&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 - snd_tplg_build_bin()&lt;br /&gt;
 - snd_tplg_build_bin_file()&amp;lt;/code&amp;gt;&lt;br /&gt;
- topology: convert builder to use the mallocated memory&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: add tplg_get_unsigned() function&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: fix tplg_get_integer() - handle errno == ERANGE&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: use snd_config_get_bool() instead own implementation&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: avoid to use the atoi() directly when expected&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- Fix alsa/sound/*.h for external programs&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The recent update of sound/*.h to sync with the latest Linus uapi&lt;br /&gt;
 files broke the build of alsa-tools programs.  These files used to be&lt;br /&gt;
 a modified version of Linux sound/* header files, so that they could&lt;br /&gt;
 be built without Linux headers.  The special prefix like __user and&lt;br /&gt;
 other things were worked around there.&lt;br /&gt;
 &lt;br /&gt;
 We may do that again, but a better approach is to fix those things in&lt;br /&gt;
 Linux kernel uapi side, while we keep the minimal workaround in&lt;br /&gt;
 alsa-lib such as the __u16 and co type definitions.&lt;br /&gt;
 &lt;br /&gt;
 This patch is such an attempt, namely:&lt;br /&gt;
 - Keep the original $LINUX/uapi/sound/*.h in include/sound/uapi&lt;br /&gt;
   directory&lt;br /&gt;
 - The &amp;quot;fixes&amp;quot; are applied to some uapi headers, so that they don't&lt;br /&gt;
   contain Linux-specific prefix and use of opaque struct like&lt;br /&gt;
   snd_ctl_elem_id&lt;br /&gt;
 - The uapi headers are included indirectly from include/sound/*.h&lt;br /&gt;
 - Some headers have inclusion of type_compat.h for the Linux variable&lt;br /&gt;
   types and prefixes&lt;br /&gt;
 - type_compat.h tries to use &amp;amp;lt;linux/types.h&amp;amp;gt; when __linux__ is&lt;br /&gt;
   defined, instead of the own conflicting definitions&lt;br /&gt;
 &lt;br /&gt;
 The last type might need a bit more adjustment depending on the&lt;br /&gt;
 compiler, but it can be fixed locally without disturbing else.&amp;lt;/code&amp;gt;&lt;br /&gt;
- topology: more coding fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: dapm - merge identical index blocks like for other elems&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: dapm - coding fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: use list_insert() macro in tplg_elem_insert()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: make vebose output more nice&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: merge write_block to tplg_write_data&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: use size_t for calc_block_size()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: use an array describing blocks for the main build loop&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: file position and size cleanups&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 - try to use size_t/ssize_t&lt;br /&gt;
 - track the position in own variable, do not use lseek&amp;lt;/code&amp;gt;&lt;br /&gt;
- topology: remove vendor_fd/name from snd_tplg structure - not used&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
===Use Case Manager API===&lt;br /&gt;
- ucm: parser - add error message to verb_dev_list_add()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: fill missing device entries (conflicting / supported)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 It is not necessary to maintain this information in sync in the configuration&lt;br /&gt;
 files. Fill the missing entries to the complementary devices.&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm: implement RenameDevice and RemoveDevice verb management&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 With the conditionals, it may be useful to define the devices&lt;br /&gt;
 in the included configuration files. To satisfy the specification&lt;br /&gt;
 requirements (device naming) those device names might require&lt;br /&gt;
 to be renamed or deleted wrong references from the conflicting&lt;br /&gt;
 or supported lists.&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm: the ucm2/ subdirectory is driver name based&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: parser - use correct filename in parser_master_file()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: parser - cosmetic fixes in the comments&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: remove MAX_FILE definition and use correct PATH_MAX&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: split conf_file_name and conf_dir_name&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 With ucm2, the file name might differ from the directory&lt;br /&gt;
 name. Also, allocate those fields.&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm: fix the configuration directory (longname) for ucm2&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The new ucm2 expects that the longname directory is shared with&lt;br /&gt;
 the driver directory. Fix that for 'Syntax 2'.&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm: setup conf_format after getting ALSA_CONFIG_UCM_VAR successfully&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Set the conf_format to 1 after getting ALSA_CONFIG_UCM_VAR successfully.&lt;br /&gt;
 Otherwise, the conf_format is not set in this scenario.&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm: docs - remove MixerCopy values, add Priority for verb, improve priority docs&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: docs - add note about the sequences and device split&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: docs - change the Mic description to simple Microphone Device&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: docs - remove DigitalMic, it does not have sense&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: docs - add Mic/DigitalMic and multiple devices comments&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- src/ucm/main.c: fix build without mixer&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Commit 4ce38a5ff466d18039b2606938f866ea3a6c9f3c breaks the build without&lt;br /&gt;
 mixer on:&lt;br /&gt;
 &lt;br /&gt;
   CCLD     libasound.la&lt;br /&gt;
 /home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/8.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: ucm/.libs/libucm.a(main.o): in function `snd_use_case_set':&lt;br /&gt;
 main.c:(.text+0x185c): undefined reference to `snd_mixer_selem_id_parse'&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm: Do not fail to parse configs on cards with an empty CardComponents lists&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Since the UCM profiles for all Bay- and Cherry-Trail SST cards have been&lt;br /&gt;
 moved over to UCM2, parsing them fails with:&lt;br /&gt;
 &lt;br /&gt;
 ALSA lib ucm_subs.c:220:(uc_mgr_get_substituted_value) variable '${CardComponents}' is not defined in this context!&lt;br /&gt;
 &lt;br /&gt;
 This completely breaks audio support on all Bay- and Cherry-Trail devices.&lt;br /&gt;
 &lt;br /&gt;
 This is caused by these non-SOF ASoC using cards having an empty&lt;br /&gt;
 CardComponents list. Which in itself is fine, but is rejected by&lt;br /&gt;
 the ucm_subs.c code. This commit changes the ucm_subs code to accept&lt;br /&gt;
 an empty string as a valid value for CardComponents restoring audio&lt;br /&gt;
 functionality on these boards.&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm: docs - add JackCTL, rearrange JackControl and JackDev&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- use-case: docs - add PlaybackMixerCopy and CaptureMixerCopy&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: docs - allow spaces in device names for JackHWMute&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: add _identifiers list&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: return always at least NULL if no list is available in snd_use_case_get_list()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm: Use strncmp to avoid access-out-of-boundary&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 If the length of the identifier is less than the length of the prefix,&lt;br /&gt;
 access-out-of-boundary will occur in memcmp().&amp;lt;/code&amp;gt;&lt;br /&gt;
===Configuration===&lt;br /&gt;
- Quote strings containing [ or ] when saving an alsa config&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- topology: add snd_tplg_save()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsa-lib: fix the array parser (unique compound keys)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The code from the old import may merge arrays wrongly and&lt;br /&gt;
 the result is a compound with same keys like:&lt;br /&gt;
 &lt;br /&gt;
 Input:&lt;br /&gt;
 &lt;br /&gt;
         lines [&lt;br /&gt;
                 &amp;quot;SSP0.OUT, , BUF1.3&amp;quot;&lt;br /&gt;
         ]&lt;br /&gt;
         lines [&lt;br /&gt;
                 &amp;quot;BUF2.0, , SSP0.IN&amp;quot;&lt;br /&gt;
         ]&lt;br /&gt;
 &lt;br /&gt;
 Parsed contents:&lt;br /&gt;
 &lt;br /&gt;
         lines {&lt;br /&gt;
                 0 'SSP0.OUT, , BUF1.3'&lt;br /&gt;
                 0 'BUF2.0, , SSP0.IN'&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
 Proper parsed contents (create+merge mode):&lt;br /&gt;
 &lt;br /&gt;
         lines {&lt;br /&gt;
                 0 'SSP0.OUT, , BUF1.3'&lt;br /&gt;
                 1 'BUF2.0, , SSP0.IN'&lt;br /&gt;
         }&amp;lt;/code&amp;gt;&lt;br /&gt;
===Documentation===&lt;br /&gt;
- README.md: add build status badge&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
===Kernel Headers===&lt;br /&gt;
- uapi: Sync with 5.6 kernel ABI&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 This is a sync with 5.6-rc1 kernel headers.  The copy is performed&lt;br /&gt;
 from the sanitized headers installed via make headers_install.&amp;lt;/code&amp;gt;&lt;br /&gt;
- uapi: Move typedefs from uapi to sound/*&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 For keeping uapi/*.h cleaner.&amp;lt;/code&amp;gt;&lt;br /&gt;
- type_compat: Add missing __s64 and __u64 definitions for non-Linux&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Just for the case without Linux-compatible definitions.&amp;lt;/code&amp;gt;&lt;br /&gt;
- Fix alsa/sound/*.h for external programs&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The recent update of sound/*.h to sync with the latest Linus uapi&lt;br /&gt;
 files broke the build of alsa-tools programs.  These files used to be&lt;br /&gt;
 a modified version of Linux sound/* header files, so that they could&lt;br /&gt;
 be built without Linux headers.  The special prefix like __user and&lt;br /&gt;
 other things were worked around there.&lt;br /&gt;
 &lt;br /&gt;
 We may do that again, but a better approach is to fix those things in&lt;br /&gt;
 Linux kernel uapi side, while we keep the minimal workaround in&lt;br /&gt;
 alsa-lib such as the __u16 and co type definitions.&lt;br /&gt;
 &lt;br /&gt;
 This patch is such an attempt, namely:&lt;br /&gt;
 - Keep the original $LINUX/uapi/sound/*.h in include/sound/uapi&lt;br /&gt;
   directory&lt;br /&gt;
 - The &amp;quot;fixes&amp;quot; are applied to some uapi headers, so that they don't&lt;br /&gt;
   contain Linux-specific prefix and use of opaque struct like&lt;br /&gt;
   snd_ctl_elem_id&lt;br /&gt;
 - The uapi headers are included indirectly from include/sound/*.h&lt;br /&gt;
 - Some headers have inclusion of type_compat.h for the Linux variable&lt;br /&gt;
   types and prefixes&lt;br /&gt;
 - type_compat.h tries to use &amp;amp;lt;linux/types.h&amp;amp;gt; when __linux__ is&lt;br /&gt;
   defined, instead of the own conflicting definitions&lt;br /&gt;
 &lt;br /&gt;
 The last type might need a bit more adjustment depending on the&lt;br /&gt;
 compiler, but it can be fixed locally without disturbing else.&amp;lt;/code&amp;gt;&lt;br /&gt;
===Utils===&lt;br /&gt;
- alsa.m4: another fix to not link all binaries with -latopology&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Preserve LIBS when the -latopology is tested. It's added later.&amp;lt;/code&amp;gt;&lt;br /&gt;
- alsa.m4: another try to fix the libatopology detection&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
==alsa-ucm-conf==&lt;br /&gt;
===Core===&lt;br /&gt;
- github: create validate workflow&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
===Configuration===&lt;br /&gt;
- broadwell-rt286: more conformance and other fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Remove JackHWMute, because the hardware does not forcibly shut off&lt;br /&gt;
 the internal speakers or microphone when the jack is in use.&lt;br /&gt;
 &lt;br /&gt;
 The CaptureMixerElem and CaptureMasterElem devices were swapped. Do&lt;br /&gt;
 not manually set the &amp;quot;ADC0 Capture Switch&amp;quot; when disabling a capture&lt;br /&gt;
 device; it will be set automatically instead.&lt;br /&gt;
 &lt;br /&gt;
 Correct &amp;quot;Handset&amp;quot; to &amp;quot;Headset&amp;quot;. Apply maximum gain to the headset&lt;br /&gt;
 microphone (&amp;quot;AMIC Volume&amp;quot;) when in use, based on testing.&amp;lt;/code&amp;gt;&lt;br /&gt;
- ucm2: treewide - remove Playback and Capture channels=2 assignments&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The value 2 is the default.&amp;lt;/code&amp;gt;&lt;br /&gt;
- sof-hda-dsp: corrections and fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- bytcht-es8316: corrections and fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- bytcr-rt5640: corrections and fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- kblrt5660: corrections and fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- PandaBoardES: corrections and fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- PandaBoard: corrections and fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- SDP4430: corrections and fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- PAZ00: corrections and fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- GoogleNyan: corrections and fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- chtrt5645: corrections and fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- SDP4430: corrections and fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- VEYRON-I2S: corrections and fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- GoogleNyan: comment CaptureControl, what is this?&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- broadwell-rt286: add correct prefix to Priority field names&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- sof-hda-dsp: fix typo (PlaybackMixerMaster -&amp;amp;gt; PlaybackMasterElem)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- SDP4430: corrections and fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- skylake-rt286: fixes and corrections&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- chtnau8824: fixes and corrections&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- cht-bsw-rt5672: fixes and corrections&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- HDA-Intel/HiFi-dual: fixes and corrections&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- Dell-WD15-Dock: cleaups and corrections&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- DB820c: cleanups and corrections&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- DB410c: cleanups and corrections&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- DAISY-I2S: added back PCM devices&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- bytcht-es8316: cleanups and corrections&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- bytcht-cx2072x: cleanups and corrections&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- bytcr-rt5651: cleanups and corrections&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- bytcr-rt5640: cleanups and corrections&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- broxton-rt298: corrections, cleanups&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- broadwell-rt286: add support for hardware volume, conformance fixes&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- ucm2: fix the verb path in chtrt5645/chtrt5645-dmic2.conf&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- bytcht-es8316: Fix missing including of HeadPhones.conf after ucm2 conversion&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The conversion to ucm2 format missed adding an include for:&lt;br /&gt;
 &lt;br /&gt;
 codecs/es8316/HeadPhones.conf&lt;br /&gt;
 &lt;br /&gt;
 Leading to no sound on the headphones output, this commit adds the missing&lt;br /&gt;
 include fixing this.&amp;lt;/code&amp;gt;&lt;br /&gt;
- sof-hda-dsp: Use more strict names according latest use-case.h&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Also remove ConflictinDevice section from the digital microphone.&lt;br /&gt;
 Those paths are independent.&lt;br /&gt;
 &lt;br /&gt;
 BugLink: https://github.com/alsa-project/alsa-ucm-conf/pull/7&amp;lt;/code&amp;gt;&lt;br /&gt;
- sof-hda-dsp: Fix the Dmic0 CaptureMixerElem for v1.4.1 firmware&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
===Description===&lt;br /&gt;
- README.md: add build status badge&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- README: remove topologies note&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
=Detailed changelog between 1.1.8 and 1.2.2 releases=&lt;br /&gt;
=Changelog between 1.1.7 and 1.2.2 releases=&lt;br /&gt;
==tinycompress==&lt;br /&gt;
===Core===&lt;br /&gt;
- Release v1.2.2&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- fcplay: initial addition&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 This tool was forked from tinycompress cplay. The fork was required due&lt;br /&gt;
 to this linking against libavcodec which is GPL. This uses libav APIs to&lt;br /&gt;
 parse the compressed files and send the audio stream to compressed&lt;br /&gt;
 device using tinycompress APIs&lt;br /&gt;
 &lt;br /&gt;
 Right now it supports only playback on MP3 (no problems now not finding&lt;br /&gt;
 sync word) and flac files.&lt;br /&gt;
 &lt;br /&gt;
 Tested-by: Srinivas Kandagatla &amp;amp;lt;srinivas.kandagatla@linaro.org&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
- tinycompress: Add pc file&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Add pc file for the users of this lib&amp;lt;/code&amp;gt;&lt;br /&gt;
===/Makefile.am===&lt;br /&gt;
- tinycompress: Add pc file&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Add pc file for the users of this lib&amp;lt;/code&amp;gt;&lt;br /&gt;
===/src/utils-lgpl/Makefile.am===&lt;br /&gt;
- fcplay: initial addition&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 This tool was forked from tinycompress cplay. The fork was required due&lt;br /&gt;
 to this linking against libavcodec which is GPL. This uses libav APIs to&lt;br /&gt;
 parse the compressed files and send the audio stream to compressed&lt;br /&gt;
 device using tinycompress APIs&lt;br /&gt;
 &lt;br /&gt;
 Right now it supports only playback on MP3 (no problems now not finding&lt;br /&gt;
 sync word) and flac files.&lt;br /&gt;
 &lt;br /&gt;
 Tested-by: Srinivas Kandagatla &amp;amp;lt;srinivas.kandagatla@linaro.org&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
===Header files===&lt;br /&gt;
- sound: update header for FLAC&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
===Utilities===&lt;br /&gt;
- fcplay: initial addition&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 This tool was forked from tinycompress cplay. The fork was required due&lt;br /&gt;
 to this linking against libavcodec which is GPL. This uses libav APIs to&lt;br /&gt;
 parse the compressed files and send the audio stream to compressed&lt;br /&gt;
 device using tinycompress APIs&lt;br /&gt;
 &lt;br /&gt;
 Right now it supports only playback on MP3 (no problems now not finding&lt;br /&gt;
 sync word) and flac files.&lt;br /&gt;
 &lt;br /&gt;
 Tested-by: Srinivas Kandagatla &amp;amp;lt;srinivas.kandagatla@linaro.org&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
===pkg-config===&lt;br /&gt;
- tinycompress: Add pc file&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Add pc file for the users of this lib&amp;lt;/code&amp;gt;&lt;br /&gt;
=Detailed changelog between 1.2.1 and 1.2.2 releases=&lt;br /&gt;
=Changelog between 1.1.7 and 1.2.2 releases=&lt;br /&gt;
==alsa-utils==&lt;br /&gt;
===Core===&lt;br /&gt;
- Release v1.2.2&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- configure: fix the inverted libatopology check&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- github workflow: try to fix the empty version&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- github build.yml: try to fix the tag fetch issue (private working dirs)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- README.md: add build status badge&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- github: create test workflow for fedora and ubuntu&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- configure: fix new libatopology check&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- configure: Fix linking of alsatplg with the older libs&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-utils/issues/33&amp;lt;/code&amp;gt;&lt;br /&gt;
===ALSA Control (alsactl)===&lt;br /&gt;
- Use %lli for long long in printf&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The `L` length modifier only applies to floating-point conversion&lt;br /&gt;
 specifiers, and `ll` is used for `long long` integers.&lt;br /&gt;
 &lt;br /&gt;
 Although glibc accepts %Li, musl does not and returns EINVAL.&amp;lt;/code&amp;gt;&lt;br /&gt;
- Use __func__ instead of __FUNCTION__&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 They are equivalent, but __func__ is in C99. __FUNCTION__ exists only&lt;br /&gt;
 for backwards compatibility with old gcc versions.&lt;br /&gt;
 &lt;br /&gt;
 Reviewd-by: Takashi Sakamoto &amp;amp;lt;o-takashi@sakamocchi.jp&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
- alsactl: fix --sched-idle (set it really to SCHED_IDLE)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsactl: sysfs - add /sys/kernel/uevent_seqnum check to init&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- treewide: Fix printf formats&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Found with cppcheck&amp;lt;/code&amp;gt;&lt;br /&gt;
===ALSA RawMidi Utility (amidi)===&lt;br /&gt;
- Avoid empty initializer list&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 To zero-initialize an object, use `{0}` instead.&amp;lt;/code&amp;gt;&lt;br /&gt;
- treewide: sys/poll to poll&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Fixes warning on musl:&lt;br /&gt;
 &lt;br /&gt;
 warning redirecting incorrect #include &amp;amp;lt;sys/poll.h&amp;amp;gt; to &amp;amp;lt;poll.h&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
===Audio Transfer utility===&lt;br /&gt;
- Avoid pointer arithmetic on `void *`&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The pointer operand to the binary `+` operator must be to a complete&lt;br /&gt;
 object type.&amp;lt;/code&amp;gt;&lt;br /&gt;
- treewide: Fix wrong formats on 32-bit&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 uint64_t evaluates to unsigned long long on 32-bit, not unsigned long.&lt;br /&gt;
 Use the proper formats.&amp;lt;/code&amp;gt;&lt;br /&gt;
===alsa-info.sh===&lt;br /&gt;
- alsa-info.sh: Warn after actual upload failure; do not ping server&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Check the return value of wget to determine if the upload actually&lt;br /&gt;
 failed. If so, display the message about upload failure, then exit.&lt;br /&gt;
 &lt;br /&gt;
 Do not ping the web server; the result does not indicate whether a&lt;br /&gt;
 file upload will succeed or not.&amp;lt;/code&amp;gt;&lt;br /&gt;
- alsa-info.sh: Perform test for wget earlier&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 If wget is not present, do not ask about uploading the information.&amp;lt;/code&amp;gt;&lt;br /&gt;
- alsa-info.sh: Condense nested commands for formatting upload result&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsa-info.sh: Condense nested commands for file upload&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsa-info.sh: Remove progress spinner during upload without dialog&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The spinner did not actually provide information about the status&lt;br /&gt;
 of the file upload, and caused other problems: it would repeatedly&lt;br /&gt;
 spawn new pgrep processes (without a delay between them), and it&lt;br /&gt;
 blocked the script if any wget process was running on the system.&amp;lt;/code&amp;gt;&lt;br /&gt;
- alsa-info.sh: Replace gauge with infobox for upload dialog&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The gauge did not actually show the upload progress; in fact, the&lt;br /&gt;
 dialog did not even appear until after the upload was completed.&lt;br /&gt;
 &lt;br /&gt;
 Use an infobox instead, which will be displayed while wget runs.&amp;lt;/code&amp;gt;&lt;br /&gt;
- alsa-info.sh: Exit script after writing information to stdout&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The '--stdout' option is mutually exclusive with uploading the file.&amp;lt;/code&amp;gt;&lt;br /&gt;
- alsa-info.sh: Use existing function to print ALSA configuration files&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsa-info.sh: Simplify iteration over cards when calling amixer&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Read card names directly from individual procfs files, and pass them&lt;br /&gt;
 to amixer using the '-c' option.&amp;lt;/code&amp;gt;&lt;br /&gt;
- alsa-info.sh: Read from /proc/modules and sort the result&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Sorting the list of loaded modules makes it much easier to compare&lt;br /&gt;
 two alsa-info.txt files, even if they are both from the same system&lt;br /&gt;
 (since the order actually changes after each reboot).&lt;br /&gt;
 &lt;br /&gt;
 lsmod just formats the contents of /proc/modules. After this script&lt;br /&gt;
 calls lsmod, it strips everything but module names from the output.&lt;br /&gt;
 This same result can be obtained just as easily by reading directly&lt;br /&gt;
 from /proc/modules; then there is no need to remove the header line&lt;br /&gt;
 printed by lsmod before sorting the output.&amp;lt;/code&amp;gt;&lt;br /&gt;
- alsa-info.sh: Consolidate PCI device output&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Include numeric IDs and subsystem info in the PCI device output,&lt;br /&gt;
 without placing them in a separate section.&amp;lt;/code&amp;gt;&lt;br /&gt;
===alsaloop===&lt;br /&gt;
- treewide: Fix printf formats&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Found with cppcheck&amp;lt;/code&amp;gt;&lt;br /&gt;
===alsamixer===&lt;br /&gt;
- Avoid empty initializer list&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 To zero-initialize an object, use `{0}` instead.&amp;lt;/code&amp;gt;&lt;br /&gt;
===alsatplg (topology)===&lt;br /&gt;
- alsatplg: add documentation for -z,--dapm-nosort (-h)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsatplg: add decode command&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsatplg: add -V,--version option&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsatplg: rewrite to use the new libatopology functions&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Add '-u,--dump' operation.&lt;br /&gt;
 Add '-g,--group' and '-x,--nocheck' modifiers.&lt;br /&gt;
 Add '-z,--dapm-nosort' modifier.&lt;br /&gt;
 Allow to operate with stdin/stdout for the file input/output.&amp;lt;/code&amp;gt;&lt;br /&gt;
- alsatplg: fix another small leak in normalize_config()&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsatplg: add -s,--sort and fix memory leaks&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsatplg: add -n,--normalize option&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 This function loads and parses the topology file and&lt;br /&gt;
 saves back the structured output in the alsa-lib's format&lt;br /&gt;
 without comments.&amp;lt;/code&amp;gt;&lt;br /&gt;
===alsaucm===&lt;br /&gt;
- alsaucm: add usecase.h to noinst_HEADERS for packaging&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsaucm: dump - fix the prefixed &amp;quot;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsaucm: add json dump command&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsaucm: add text dump command&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- alsaucm: use the first sound card (use case name 'hw:CARDNO') as default&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
===amixer===&lt;br /&gt;
- Use %lli for long long in printf&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The `L` length modifier only applies to floating-point conversion&lt;br /&gt;
 specifiers, and `ll` is used for `long long` integers.&lt;br /&gt;
 &lt;br /&gt;
 Although glibc accepts %Li, musl does not and returns EINVAL.&amp;lt;/code&amp;gt;&lt;br /&gt;
- treewide: Fix printf formats&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Found with cppcheck&amp;lt;/code&amp;gt;&lt;br /&gt;
- treewide: sys/poll to poll&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Fixes warning on musl:&lt;br /&gt;
 &lt;br /&gt;
 warning redirecting incorrect #include &amp;amp;lt;sys/poll.h&amp;amp;gt; to &amp;amp;lt;poll.h&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
===aplay/arecord===&lt;br /&gt;
- Avoid pointer arithmetic on `void *`&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The pointer operand to the binary `+` operator must be to a complete&lt;br /&gt;
 object type.&amp;lt;/code&amp;gt;&lt;br /&gt;
- Use __func__ instead of __FUNCTION__&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 They are equivalent, but __func__ is in C99. __FUNCTION__ exists only&lt;br /&gt;
 for backwards compatibility with old gcc versions.&lt;br /&gt;
 &lt;br /&gt;
 Reviewd-by: Takashi Sakamoto &amp;amp;lt;o-takashi@sakamocchi.jp&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
- aplay: Limit VUMeter progress bar to 100 for negative as well&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 While the progress bar cannot be negative, GCC concludes that it can be&lt;br /&gt;
 and assumes tmp can be written past the end. Fixes this GCC warning:&lt;br /&gt;
 &lt;br /&gt;
 aplay.c:1747:18: warning: '%02d' directive writing between 2 and 11 bytes&lt;br /&gt;
  into a region of size 4 [-Wformat-overflow=]&lt;br /&gt;
  1747 |    sprintf(tmp, &amp;quot;%02d%%&amp;quot;, maxperc[c]);&amp;lt;/code&amp;gt;&lt;br /&gt;
- aplay: Adjust buffer sizes to fix snprintf warnings&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 It also reduces compiled size slightly.&lt;br /&gt;
 &lt;br /&gt;
 aplay.c: In function 'capture':&lt;br /&gt;
 aplay.c:3055:34: error: '-01' directive output may be truncated writing 3&lt;br /&gt;
 bytes into a region of size between 1 and 4097 [-Werror=format-truncation=&lt;br /&gt;
 ]&lt;br /&gt;
  3055 |    snprintf(namebuf, namelen, &amp;quot;%s-01&amp;quot;, buf);&lt;br /&gt;
       |                                  ^~~&lt;br /&gt;
 aplay.c:3055:4: note: 'snprintf' output between 4 and 4100 bytes into a&lt;br /&gt;
 destination of size 4097&lt;br /&gt;
  3055 |    snprintf(namebuf, namelen, &amp;quot;%s-01&amp;quot;, buf);&lt;br /&gt;
       |    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;
 aplay.c:3053:34: error: '-01.' directive output may be truncated writing 4&lt;br /&gt;
 bytes into a region of size between 1 and 4097 [-Werror=format-truncation=&lt;br /&gt;
 ]&lt;br /&gt;
  3053 |    snprintf(namebuf, namelen, &amp;quot;%s-01.%s&amp;quot;, buf, s);&lt;br /&gt;
       |                                  ^~~~&lt;br /&gt;
 aplay.c:3053:4: note: 'snprintf' output 5 or more bytes (assuming 4101)&lt;br /&gt;
 into a destination of size 4097&lt;br /&gt;
  3053 |    snprintf(namebuf, namelen, &amp;quot;%s-01.%s&amp;quot;, buf, s);&lt;br /&gt;
       |    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;
 aplay.c:3065:34: error: '%02i' directive output may be truncated writing&lt;br /&gt;
 between 2 and 10 bytes into a region of size between 0 and 4096 [-Werror=&lt;br /&gt;
 format-truncation=]&lt;br /&gt;
  3065 |   snprintf(namebuf, namelen, &amp;quot;%s-%02i&amp;quot;, buf, filecount);&lt;br /&gt;
       |                                  ^~~~&lt;br /&gt;
 aplay.c:3065:30: note: directive argument in the range [1, 2147483647]&lt;br /&gt;
  3065 |   snprintf(namebuf, namelen, &amp;quot;%s-%02i&amp;quot;, buf, filecount);&lt;br /&gt;
       |                              ^~~~~~~~~&lt;br /&gt;
 aplay.c:3065:3: note: 'snprintf' output between 4 and 4108 bytes into a&lt;br /&gt;
 destination of size 4097&lt;br /&gt;
  3065 |   snprintf(namebuf, namelen, &amp;quot;%s-%02i&amp;quot;, buf, filecount);&lt;br /&gt;
       |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&lt;br /&gt;
 aplay.c:3063:34: error: '%02i' directive output may be truncated writing&lt;br /&gt;
 between 2 and 10 bytes into a region of size between 0 and 4096 [-Werror=&lt;br /&gt;
 format-truncation=]&lt;br /&gt;
  3063 |   snprintf(namebuf, namelen, &amp;quot;%s-%02i.%s&amp;quot;, buf, filecount, s);&lt;br /&gt;
       |                                  ^~~~&lt;br /&gt;
 aplay.c:3063:30: note: directive argument in the range [1, 2147483647]&lt;br /&gt;
  3063 |   snprintf(namebuf, namelen, &amp;quot;%s-%02i.%s&amp;quot;, buf, filecount, s);&lt;br /&gt;
       |                              ^~~~~~~~~~~~&lt;br /&gt;
 aplay.c:3063:3: note: 'snprintf' output 5 or more bytes (assuming 4109)&lt;br /&gt;
 into a destination of size 4097&lt;br /&gt;
  3063 |   snprintf(namebuf, namelen, &amp;quot;%s-%02i.%s&amp;quot;, buf, filecount, s);&amp;lt;/code&amp;gt;&lt;br /&gt;
- treewide: Fix printf formats&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Found with cppcheck&amp;lt;/code&amp;gt;&lt;br /&gt;
- treewide: sys/poll to poll&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Fixes warning on musl:&lt;br /&gt;
 &lt;br /&gt;
 warning redirecting incorrect #include &amp;amp;lt;sys/poll.h&amp;amp;gt; to &amp;amp;lt;poll.h&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
===aplaymidi/arecordmidi===&lt;br /&gt;
- Avoid empty initializer list&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 To zero-initialize an object, use `{0}` instead.&amp;lt;/code&amp;gt;&lt;br /&gt;
- treewide: sys/poll to poll&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Fixes warning on musl:&lt;br /&gt;
 &lt;br /&gt;
 warning redirecting incorrect #include &amp;amp;lt;sys/poll.h&amp;amp;gt; to &amp;amp;lt;poll.h&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
===aseqdump===&lt;br /&gt;
- Avoid empty initializer list&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 To zero-initialize an object, use `{0}` instead.&amp;lt;/code&amp;gt;&lt;br /&gt;
===bat (basic audio tester)===&lt;br /&gt;
- Avoid pointer arithmetic on `void *`&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The pointer operand to the binary `+` operator must be to a complete&lt;br /&gt;
 object type.&amp;lt;/code&amp;gt;&lt;br /&gt;
==alsa-plugins==&lt;br /&gt;
===Core===&lt;br /&gt;
- Release v1.2.2&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
- Update the attributes.m4 macro file from xine&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 This file was imported from the xine project. Update it to the current&lt;br /&gt;
 revision, which resolves the &amp;quot;no AC_LANG_SOURCE call detected in body&amp;quot;&lt;br /&gt;
 warnings with Autoconf 2.68 or later.&amp;lt;/code&amp;gt;&lt;br /&gt;
===Automatic upmix / downmix plugins===&lt;br /&gt;
- upmix: generalize format, code cleanup&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 The main purpose of this change is to be able to change the format to&lt;br /&gt;
 e.g. S32 instead of S16 by changing only two lines on the top of the source.&lt;br /&gt;
 So a new symbol UPMIX_PCM_FORMAT is added to hide the actual format,&lt;br /&gt;
 and a special type upmix_sample_t marks the sample type, instead of&lt;br /&gt;
 fixed short.&lt;br /&gt;
 &lt;br /&gt;
 The average_copy function was expecting the nchns parameter to be 2,&lt;br /&gt;
 this parameter is now a local constant.&lt;br /&gt;
 &lt;br /&gt;
 The variable i is renamed to channel as it denotes the channel index&lt;br /&gt;
 in every case.&lt;br /&gt;
 &lt;br /&gt;
 The behavior of the plugin remains identical.&amp;lt;/code&amp;gt;&lt;br /&gt;
=Detailed changelog between 1.1.7 and 1.2.2 releases=&lt;br /&gt;
=Changelog between 1.1.7 and 1.2.2 releases=&lt;br /&gt;
==alsa-tools==&lt;br /&gt;
===Core===&lt;br /&gt;
- Release v1.2.2&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
===hdspmixer===&lt;br /&gt;
- hdspmixer: Use __u32 and __u64 for RMS array types&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Some variable types are referring to the field in ioctl struct, which&lt;br /&gt;
 are actually __u32 or __u64 instead of uint32_t or uint64_t.&lt;br /&gt;
 This inconsistency may result in the compile error.&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Perex</name></author>
	</entry>
</feed>