Commit graph

3685 commits

Author SHA1 Message Date
Jaroslav Kysela
5905af1996 ucm: another coverity fix in uc_mgr_config_load() 2019-05-27 20:10:52 +02:00
Jaroslav Kysela
ac6df1106c pcm_file: another locking fix (coverity)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-05-27 20:10:32 +02:00
Jaroslav Kysela
c6e7fd8b1e topology: next round of coverity fixes
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-05-27 14:05:12 +02:00
Jaroslav Kysela
022c790aab pcm_file: coverity fixes (including double locking)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-05-27 14:04:52 +02:00
Jaroslav Kysela
ed156a2186 ucm: coverity fixes
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-05-24 21:25:50 +02:00
Jaroslav Kysela
0d97f53c25 topology: various coverity fixes
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-05-24 21:25:50 +02:00
Jaroslav Kysela
6efa23f283 rawmidi_hw: add sanity check for the invalid stream arguments (coverity)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-05-24 21:25:50 +02:00
Jaroslav Kysela
8ab0393b42 rawmidi: use snd_dlobj_cache_get2() in rawmidi open (coverity)
Use proper reference counting for the dynamic symbol.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-05-24 21:25:50 +02:00
Jaroslav Kysela
3ae743efea pcm_hw: close file descriptor in the error path in snd_pcm_hw_open() (coverity)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-05-24 21:25:50 +02:00
Jaroslav Kysela
22ade9b8c1 pcm_file: call pclose() correctly for popen() (coverity)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-05-24 21:25:50 +02:00
Jaroslav Kysela
d5a1cf35b7 pcm: fix memory leak in _snd_pcm_parse_config_chmaps() (coverity)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-05-24 21:25:50 +02:00
Jaroslav Kysela
d6ba264038 control_shm: add missing socket close to the error path (coverity)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-05-24 21:25:50 +02:00
Jaroslav Kysela
51881cacc0 control_shm: remove duplicate code (coverity)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-05-24 21:25:50 +02:00
Jaroslav Kysela
990b1a53ed config: parse_string() fix the dynamic buffer allocation failure code (coverity)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-05-24 21:25:50 +02:00
Jaroslav Kysela
4aa960c48b src/conf.c: add missing va_end() call (coverity)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-05-24 21:25:50 +02:00
Jaroslav Kysela
47bc6d5341 aserver: fix resource leak coverity
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-05-24 21:25:50 +02:00
Adam Miartus
fe7ff721a9 pcm: file: add infile read support for mmap mode
mmap_begin callback is used to copy data from input file to mmaped
buffer

guard for corner use of api (multiple mmap_begin calls by user) is
introduced to check if next continuous buffer was already overwritten

buffer is overwritten with input file data only in case of stream capture

Signed-off-by: Adam Miartus <amiartus@de.adit-jv.com>
Reviewed-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2019-05-24 11:16:05 +02:00
Adam Miartus
e520f45480 pcm: add mmap_begin callback to snd_pcm_fast_ops_t api
main motivation for adding the callback is to use it to enable operation
on mmaped buffer before user access for pcm_file plugin

support for MMAP read access with masking by data from input file is not
implemented for pcm_file plugin, by adding this callback implementing
such feature can be done by rewriting next continuous portion of buffer
on each mmap_begin call

plugins like softvol use pcm_plugin interface and overwrite the buffer by
looping around it in avail_update callback, this patch hopes to simplify
the task by adding new api callback, removing the need for rewriting
pcm_file (to use pcm_plugin callbacks) and careful checking when looping
around whole mmaped buffer

Signed-off-by: Adam Miartus <amiartus@de.adit-jv.com>
Reviewed-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2019-05-24 11:06:44 +02:00
Takashi Iwai
108a2f4379 ucm: Add UCM profile for CX2072X codec on Baytrail/Cherrytrail profiles
Adding a new Conexant CX2072X codec profile and reusing the existing
BYT/CHT platform snippets.

Currently tested only on ASUS E200HA laptop.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2019-05-23 17:42:42 +02:00
Adam Miartus
33c7ea0865 pcm: file: add missing unlock on early return
Signed-off-by: Adam Miartus <amiartus@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2019-05-23 11:55:47 +02:00
Adam Miartus
349b42f547 pcm: file: use snd_pcm_file_areas_read_infile for readi
use previously introduced helper function, this commit unifies behavior
of readi and readn

corner case behavior of readi is changed by this commit, previously,
in case 0 bytes were red from file (EOF), frames = 0 was returned,
signaling api user as if no data was red from slave, after the patch,
amount of frames red from slave with data red from slave stored in buffer
is returned when EOF is reached

Signed-off-by: Adam Miartus <amiartus@de.adit-jv.com>
Reviewed-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2019-05-22 16:20:26 +02:00
Adam Miartus
5f2e5af61b pcm: file: add support for infile reading in non interleaved mode
add helper function to copy input file data to buffer mapped by areas,
in case of an error, do not fill the areas, allowing device read buffer
to be provided to api caller

previously unused rbuf variable is reused for this purpose

Signed-off-by: Adam Miartus <amiartus@de.adit-jv.com>
Reviewed-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2019-05-22 16:19:31 +02:00
Vanitha Channaiah
3ab7980047 pcm: dsnoop: Added "hw_ptr_alignment" option in configuration for slave pointer alignment
This change adapt the fix commit 6b058fda9d
("pcm: dmix: Add option to allow alignment of slave pointers")
for dsnoop plugin

Issue is that snd_pcm_wait() goes back to waiting because the hw_ptr
is not period aligned. Therefore snd_pcm_wait() will block for a longer
time as required.

With these rcar driver changes the exact position of the dma is returned.
During snd_pcm_start they read hw_ptr as reference, and this hw_ptr
is now not period aligned, and is a little ahead over the period while it
is read. Therefore when the avail is calculated during snd_pcm_wait(),
it is missing the avail_min by a few frames.

An additional option hw_ptr_alignment is provided to dsnoop configuration,
to allow the user to configure the slave application and hw pointer
alignment at startup

Signed-off-by: Vanitha Channaiah <vanitha.channaiah@in.bosch.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2019-05-15 10:33:02 +02:00
Vanitha Channaiah
7265e603bf pcm: dshare: Added "hw_ptr_alignment" option in configuration for alignment of slave pointers
This change adapt the fix commit 6b058fda9d
("pcm: dmix: Add option to allow alignment of slave pointers")
for dshare plugin

Issue is that snd_pcm_wait() goes back to waiting because the hw_ptr
is not period aligned. Therefore snd_pcm_wait() will block for a longer
time as required.

With these rcar driver changes the exact position of the dma is returned.
During snd_pcm_start they read hw_ptr as reference, and this hw_ptr
is now not period aligned, and is a little ahead over the period while it
is read. Therefore when the avail is calculated during snd_pcm_wait(),
it is missing the avail_min by a few frames.

An additional option hw_ptr_alignment is provided to dshare configuration,
to allow the user to configure the slave application and hw pointer
alignment at startup

Signed-off-by: Vanitha Channaiah <vanitha.channaiah@in.bosch.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2019-05-15 10:32:32 +02:00
Vanitha Channaiah
63ba5243ab pcm: direct: Add generic hw_ptr_alignment function for dmix, dshare and dsnoop
Move the code snd_pcm_direct_reset_slave_ptr() from pcm_dmix.c
to pcm_direct.c and its header so that the helper function can be
re-used by other direct-pcm plugins.
There is no change in the behavior or the functionality.

Signed-off-by: Vanitha Channaiah <vanitha.channaiah@in.bosch.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2019-05-15 10:31:20 +02:00
Jaroslav Kysela
9122992a91 Release v1.1.9
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-05-10 08:57:21 +02:00
Jaroslav Kysela
5366bdb4fb add support for GCC's LTO 2019-04-09 12:44:14 +02:00
Jaroslav Kysela
0bfad420ef pcm: multi plugin: reset hw/appl pointers in prepare/reset functions
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-04-09 10:34:42 +02:00
Quipyowert2
8f2a029925 Printf unsigned longs with %lu instead of %ld (playmidi1.c)
Signed-off-by: Nathan Mills <the.true.nathan.mills@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-04-09 10:27:36 +02:00
Quipyowert2
09abb79c5a Printf unsigned ints with %u instead of %i (pcm.c)
Signed-off-by: Nathan Mills <the.true.nathan.mills@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-04-09 10:27:36 +02:00
Quipyowert2
ac83808882 Printf unsigned long longs with %llu (mixtest.c)
Signed-off-by: Nathan Mills <the.true.nathan.mills@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-04-09 10:27:36 +02:00
Quipyowert2
a2ebf5b60d Printf unsigned longs with %lu instead of %li (midifile.c)
Signed-off-by: Nathan Mills <the.true.nathan.mills@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-04-09 10:27:36 +02:00
Quipyowert2
a894128edd Printf unsigned long with %lu instead of %li (latency.c)
Signed-off-by: Nathan Mills <the.true.nathan.mills@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-04-09 10:27:36 +02:00
Quipyowert2
d95062c481 Print unsigned ints with %u instead of %i. (snd_ctl_ascii_elem_id_get)
Signed-off-by: Nathan Mills <the.true.nathan.mills@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-04-09 10:27:36 +02:00
Quipyowert2
1181bfc458 Close topology config file after parsing it.
Signed-off-by: Nathan Mills <the.true.nathan.mills@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-04-09 10:27:36 +02:00
Jaroslav Kysela
369df32257 pcm: multi plugin: detach the hw_ptr and appl_ptr from master_slave
Unfortunately, the master_slave buffer pointers are not always in sync with
the presented avail value and the higher layers (like write_areas) got
confused. Create own hw_ptr and appl_ptr.

This commit also tries to fix the hwsync and delay implementation (iterate
through all slaves).

The multi plugin was designed only for hardware which runs really in sync.
Anyway, users are trying to use this plugin for other purposes.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-04-09 10:27:36 +02:00
Jaroslav Kysela
c7fc3fdbe2 pcm: fix wait condition in snd_pcm_write_areas() to avoid return zero
The hw_ptr might be updated during the snd_pcm_may_wait_for_avail_min() call,
so even if it returns zero (OK), the avail must be updated again.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-04-09 10:27:36 +02:00
Jaroslav Kysela
4694a6643d pcm: multi plugin - fix wait_for_avail_min
All slaves should be asked to wait otherwise the write loop might
be interrupted and zero frames might be returned.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-04-09 10:27:36 +02:00
Timo Wischer
0d92f2d39a pcm: null: Do not allow a period size of 0
Some applications do not expect that get_period_size_min() could
return 0. Therefore these applications cannot use the null plugin without
this patch.
Due to there is no use case for having a period size of 0 this patch
disallows a period size of 0 when using the null plugin.

Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2019-04-08 14:27:29 +02:00
Takashi Iwai
fc0e54c3cc Drop -I$includedir/alsa from alsa.pc
We used to put the additional include path $includedir/alsa in
pkgconfig just because some applications have included asoundlib.h
like
  #include <asoundlib.h>
although the canonical form should be
  #include <alsa/asoundlib.h>

However, adding this include path is significantly dangerous due to
possible conflicts of file names like version.h.  It's already the
reason to discourage people using alsa.pc for the packages.

In this patch, the additional include path from alsa.pc is dropped
finally.  At the same time, as a rescue plan for the programs
including via <asoundlib.h>, a stub header file is provided in
include/sound/asoundlib.h.  It just includes alsa/asoundlib.h with a
warning to suggest for replacing with alsa/asoundlib.h.
Actually this is the same file as we install into sys/asoundlib.h, so
the whole changes are very minimal here.

Acked-by: Jaroslav Kysela <perex@perex.cz>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2019-03-28 08:01:34 +01:00
Jaroslav Kysela
f9056d013c pcm: rate plugin - fix signess in snd_pcm_rate_avail_update() comparison
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-03-25 16:56:34 +01:00
Jaroslav Kysela
1755df1d9e add snd_strlcpy() and use it everywhere
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-03-25 16:46:05 +01:00
Chih-Wei Huang
639d404df6 alisp: add the missing include
Commit d4e08c5e86 changed to use internal versioned functions.
However, the header is not included. It generates the errors:

 In file included from external/alsa-lib/src/alisp/alisp.c:3038:
 external/alsa-lib/src/alisp/alisp_snd.c:583:64: error: implicit declaration of function '__snd_ctl_elem_info_get_dimension' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
                         p2 = add_cons2(instance, p2, idx > 0, new_integer(instance, INTERNAL(snd_ctl_elem_info_get_dimension)(&info, idx)));
                                                                                    ^
 external/alsa-lib/include/alsa-symbols.h:30:24: note: expanded from macro 'INTERNAL'
 #define INTERNAL(Name) INTERNAL_CONCAT2_2(__, Name)
                        ^
 external/alsa-lib/include/alsa-symbols.h:29:39: note: expanded from macro 'INTERNAL_CONCAT2_2'
 #define INTERNAL_CONCAT2_2(Pre, Post) Pre##Post
                                      ^
 <scratch space>:396:1: note: expanded from here
 __snd_ctl_elem_info_get_dimension
 ^
 external/alsa-lib/src/alisp/alisp_snd.c:583:64: note: did you mean '__snd_ctl_elem_info_get_dimensions'?
 external/alsa-lib/include/alsa-symbols.h:30:24: note: expanded from macro 'INTERNAL'
 #define INTERNAL(Name) INTERNAL_CONCAT2_2(__, Name)
                       ^
 external/alsa-lib/include/alsa-symbols.h:29:39: note: expanded from macro 'INTERNAL_CONCAT2_2'
 #define INTERNAL_CONCAT2_2(Pre, Post) Pre##Post
                                      ^
 <scratch space>:396:1: note: expanded from here
 __snd_ctl_elem_info_get_dimension
 ^
 external/alsa-lib/src/alisp/alisp_snd.c:578:8: note: '__snd_ctl_elem_info_get_dimensions' declared here
         err = INTERNAL(snd_ctl_elem_info_get_dimensions)(&info);
               ^
 external/alsa-lib/include/alsa-symbols.h:30:24: note: expanded from macro 'INTERNAL'
 #define INTERNAL(Name) INTERNAL_CONCAT2_2(__, Name)
                        ^
 external/alsa-lib/include/alsa-symbols.h:29:39: note: expanded from macro 'INTERNAL_CONCAT2_2'
 #define INTERNAL_CONCAT2_2(Pre, Post) Pre##Post
                                       ^
 <scratch space>:395:1: note: expanded from here
 __snd_ctl_elem_info_get_dimensions
 ^
 2 errors generated.

Fixes: d4e08c5e86 ("control: Proper reference of internal versioned functions")
Signed-off-by: Chih-Wei Huang <cwhuang@linux.org.tw>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-03-15 13:16:20 +01:00
Chih-Wei Huang
e6f8998258 pcm: add the missing <strings.h> include
To define the prototype of ffs. See 'man ffs'.

Signed-off-by: Chih-Wei Huang <cwhuang@linux.org.tw>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-03-15 13:16:15 +01:00
Chih-Wei Huang
59715fb078 Android: avoid using versionsort
Android doesn't have versionsort yet.

Signed-off-by: Chih-Wei Huang <cwhuang@linux.org.tw>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-03-15 13:15:47 +01:00
Jaroslav Kysela
3c199a0d19 conf: pcm dmix - add CHANNELS argument
It seems that some audio devices do use only mono audio for some
applications (RPi).

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-03-13 10:47:37 +01:00
Jaroslav Kysela
deb07a0b20 test/latency: use frame bytes correctly in writebuf()
Reported-by: Alessandro Lapini <alessandro.lapini@gmail.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2019-03-01 12:44:44 +01:00
Brendan Shanks
7cea8c1562 pcm: dshare: Fix overflow when slave_hw_ptr rolls over boundary
In snd_pcm_dshare_sync_area() when 'slave_hw_ptr' rolls over
'slave_boundary', the wrong variable is checked ('dshare->slave_hw_ptr' vs
the local 'slave_hw_ptr'). In some cases, this results in 'slave_hw_ptr'
not rolling over correctly. 'slave_size' and 'size' are then much too
large, and the for loop blocks for several minutes copying samples.

This was likely only triggered on 32-bit systems, since the PCM boundary
is computed based on LONG_MAX and is much larger on 64-bit systems.

This same change was made to pcm_dmix in commit
6c7f60f7a9 ("Fix boundary overlap”) from
June 2005.

Signed-off-by: Brendan Shanks <brendan.shanks@teradek.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2019-02-12 14:37:44 +01:00
Hans de Goede
4d9374e61d ucm: bytcr/PlatformEnableSeq.conf update some comments
Commit f91cc3c7d6 ("Update chtrt5645 ucm variants to use
bytcr/PlatformEnableSeq.conf component") updated the
following 2 comments:

 # codec0_out settings (used if SSP2 is connected to aif1)
 # modem_out settings (used if SSP0 is connected to aif2)

Specifically it added the " to aif1" resp. " to aif2" part of the comments.

This is not correct, AIF1 / AIF2 are something which is present on
Realtek codecs only, and either one can be used indepedent of
SSP0 or SSP2 being used (the comments in the chtrt5645 UCM profile
before this change were wrong / outdated).

Besides there not being any relationship between SSP0 or SSP2 being
used, bytcr/PlatformEnableSeq.conf is also used with other codecs,
e.g. the ESS8316 codec where this is not applicable at all.

Therefor this commit removes the " to aif?" part of the comments again
to avoid confusing people reading this in the future.

Cc: Russell Parker <russell.parker7@gmail.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2019-02-07 08:22:08 +01:00
Srinivas Kandagatla
7442c8b9be ucm: Add ucm files for DB820c board
DB820c board is based of MSM8996 Qualcomm SoC, which has support for both
Digital and Analog audio. Digital audio is over HDMI and analog is over
WCD9335 codec via SLIMbus.

Board itself has HDMI port, a 3.5mm audio Jack and an Audio expansion
connector.
This patch adds support for HDMI port and 3.5mm jack.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2019-01-29 14:33:17 +01:00