Commit graph

1732 commits

Author SHA1 Message Date
Takashi Sakamoto
e57a0a0809 alsactl: handle detection of new sound card
At present, plug-and-play is not supported in a mode of 'monitor',
thus new sound card is not handled during runtime. This is not happy.

This commit uses Linux-specific inotify(7) to monitor '/dev/snd'
directory. When some files are newly added to the directory,
event dispatcher is suspended. Event sources are scanned again and the
dispatcher continue to run.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2018-10-14 16:57:15 +02:00
Takashi Sakamoto
440ea7d38d alsactl: handle disconnection of sound card
Once sound card becomes disconnection state, corresponding control node
becomes to emit error event for listeners. When catching this type of
event, event dispatcher should stop observation of the node. However,
at present, a mode of monitor can't handle this correctly. As a result,
poll(2) is executed quite frequently in loop with no wait. This results
100% consumption of CPU time.

This commit takes the dispatcher to remove the node from observation
list when detecting the disconnection state.

Reported-by: Thomas Gläßle <thomas@coldfix.de>
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2018-10-14 16:57:15 +02:00
Takashi Sakamoto
af14a2fab0 alsactl: obsolete array for maintenance of handlers
In former commits, handlers of control node are maintained by link list,
instead of one-dimensional array.

This commit obsoletes the array and split source preparation to a
function.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2018-10-14 16:57:15 +02:00
Takashi Sakamoto
89ab7146ba alsactl: use a list of source for event dispatcher instead of an array of source
In a previous commit, handlers of control nodes are maintained by link
list.

This commit uses the list to register/unregister event sources to
dispatcher.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2018-10-14 16:57:15 +02:00
Takashi Sakamoto
5e010366d3 alsactl: use link list to maintain source of events
At present, handlers for control nodes are maintained by one-dimensional
array. This is not necessarily useful to maintain handlers with
associated information.

This commit adds link-list for the maintenance.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2018-10-14 16:57:15 +02:00
Takashi Sakamoto
5c859fa649 alsactl: use epoll(7) instead of poll(2)
Linux kernel supports unique system call; epoll(7). This allows
applications to make associations for descriptor-unique data in a
easy way.

This commit uses epoll(7) instead of poll(2) for this point.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2018-10-14 16:57:15 +02:00
Takashi Sakamoto
fbc31a7593 alsactl: add an iterator of registered instances of sound card
In a mode of 'monitor', when given no argument, all of available control
node is observed for their events. At present, discovering the nodes is
done according to sound card number, instead of listing nodes in
configuration space of alsa-lib.

This commit adds a structure to discover sound cards with a simple
interface.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2018-10-14 16:57:15 +02:00
Takashi Sakamoto
0ef92b4ee7 alsactl: split event loop code to a function
In a mode of 'monitor', an event loop runs.

This commit applies a small refactoring to splits the loop into a
function for readability.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2018-10-14 16:57:15 +02:00
Jaroslav Kysela
71558a41b0 alsatplg: add man file
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2018-10-09 10:53:32 +02:00
Jaroslav Kysela
25bea6baf7 alsaucm: add alsa-ucm udev rules for PAZ00 (Toshiba AC100/Dynabook AZ).
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2018-09-07 10:54:07 +02:00
Jonathan Liu
f6b59282f7 alsabat: Allow custom sample format for round trip latency test
Setting the format to BAT_PCM_FORMAT_S16_LE in the round trip latency
test initialization is redundant as it is already set by default to
BAT_PCM_FORMAT_S16_LE unless a sample format is specified on the command
line.

Signed-off-by: Jonathan Liu <net147@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2018-08-05 18:45:28 +02:00
Julian Scheel
a3d81b6bea speaker-test: Allow sampling rates up to 768000
There are audio devices around that support up to 768kHz playback, allow
testing them by increasing the maximum supported sampling rate.

Signed-off-by: Julian Scheel <julian@jusst.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2018-06-07 12:15:46 +02:00
Julian Scheel
98ff617431 speaker-test: Remove unused variable
Signed-off-by: Julian Scheel <julian@jusst.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2018-05-23 16:06:07 +02:00
Julian Scheel
0e2703cef9 speaker-test: Support S24_3LE sample format
Implement support signed 24 bit samples, packed in 3 bytes.

Signed-off-by: Julian Scheel <julian@jusst.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2018-05-23 16:05:49 +02:00
Takashi Iwai
da4d5bd53a aplay: Fix invalid file size check for non-regular files
aplay tries to check the file size via fstat() at parsing the format
headers and avoids parsing when the size is shorter than the given
size.  This works fine for regular files, but when a special file like
pipe is passed, it fails, eventually leading to the fallback mode
wrongly.

A proper fix is to do this sanity check only for a regular file.

Reported-by: Jay Foster <jay@systech.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2018-05-15 22:17:01 +02:00
Jaroslav Kysela
9a6ab34203 Release v1.1.6
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2018-04-03 10:58:10 +02:00
Jaroslav Kysela
b9b40a2a9f bat: alsa.c - move the thread cleanup pop before goto exit3
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2018-04-03 10:54:38 +02:00
erwin
588b3aa0ef aplay: Fix wav file not being split on 32 bit platforms
On my 32 bit armhf board arecord exits because of write() returning EFBIG
when the output file size reaches 2147483647 bytes.

To fix this, include generated header file before system header files
so that _FILE_OFFSET_BITS=64 is used properly, as required in documentation
"man feature_test_macros".

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2018-03-13 22:07:08 +01:00
Takashi Iwai
9bc4964572 speaker-test: Refactor the tone-generator codes
There are many redundant open codes in speaker-test for performing the
similar things, and especially the tone generator codes are ugly.
Let's clean up a bit.  This patch combines all open-codes into a
single common helper with the callback for generating the tone.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2018-03-05 16:13:41 +01:00
Kirill Marinushkin
66b31f2451 alsaloop: fix a typo in the comparison
Hello maintainers,

I would like to suggest you a patch which fixes a typo in the alsa-utils
alsaloop.

Best Regards,
Kirill Marinushkin

Signed-off-by: Kirill Marinushkin <k.marinushkin@gmail.com>
Cc: patch@alsa-project.org
Cc: alsa-devel@alsa-project.org
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2018-02-05 09:40:41 +01:00
Ikey Doherty
f1eba0b5de alsactl: Only start restore service when asoundrc file exists
This solves the chicken and egg problem on fresh installations whereby
the alsa state file does not yet exist, and alsa-restore unit attempted
to launch without first having a state file.

Signed-off-by: Ikey Doherty <ikey@solus-project.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2017-12-14 11:24:40 +01:00
Jussi Laako
d0802f32ca aplay: Adjust sample rate limits to support newer hardware
There are number of devices that support up to 384 kHz sampling rate and
some devices up to 768 kHz sampling rate. This patch increases sanity
check limit to 768k in order to support testing of such hardware.

Signed-off-by: Jussi Laako <jussi@sonarnerd.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2017-12-07 13:44:20 +01:00
Jaroslav Kysela
b1e3d945b7 Change FSF address (Franklin Street)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2017-11-14 14:28:53 +01:00
Jaroslav Kysela
ca5dc52e87 Release v1.1.5
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2017-11-14 08:52:09 +01:00
Chris Mayo
f72a296d23 alsactl: Move systemd unit start-up from basic.target to sound.target
Ensures soundcard is ready before restoring state.

sound.target added to systemd in v18:
https://cgit.freedesktop.org/systemd/systemd/commit/?id=88dfa2938af

Simplify dependencies:
 - After=alsa-state.service is not needed because both units test for
   @daemonswitch@ with opposite outcomes.

 - After=sysinit.target is automatically added by systemd.

First proposed by Tom Yan.

Signed-off-by: Chris Mayo <aklhfex@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2017-10-06 14:32:16 +02:00
Zhang Keqiao
dbd4fc84f8 alsabat: fix one uninitialized warning issue
Fix a variable uninitialized issue, adding the initialized assignment to fix it.

Signed-off-by: Zhang Keqiao <keqiaox.k.zhang@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2017-08-30 10:19:08 +02:00
Daniel Baluta
1c9adf46b8 aplay: Fix playback for small raw files
This fixes a bug when trying to play files with size
smaller than maximum supported header size.

Lets have a look at the following example:

$ aplay -s 2 sample.raw

-> playback_go(fd = 10, loaded = 26, count = 2, name="sample.raw")
--> l = loaded = 26
--> c = count - written = 2
--> c -= l = 2 - 26 = -24
---> r = safe_read(fd, audiobuf + 26, -24)
---> r = -1, EXIT_FAILURE

In this case we have already 'loaded' from the input file more
bytes that we need to send to pcm device. So, we need to adjust
the number of bytes loaded and avoid reading a negative number
of bytes.

Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2017-08-09 10:39:36 +02:00
Daniel Baluta
dba6db9228 aplay: Refactor playback code
This introduces read_header function which tries
to read the header of an audio file in order to determine
its type.

This has the following effects:
	(1) makes code easier to read
	(2) don't abort if file size is less than expected header

(2), allows us to play small files with size smaller than any
supported audio file headers.

Suggested-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2017-08-09 10:38:41 +02:00
Ion-Horia Petrisor
3d44e2bc15 aplay: Add samples argument for playing/recording a given number of samples
-s --samples allows aplay to be used for playback/capture a given
number of samples per channel

Signed-off-by: Ion-Horia Petrisor <ion-horia.petrisor@nxp.com>
Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2017-08-09 10:38:19 +02:00
Srikanth Krishnakar
16557c2c7f aplay: interrupt streaming via signal in voc_pcm_write
aplay/arecord (alsa-utils v1.1.2) cannot interrupt streaming
via CTRL-C. Fixed the issue by properly handling 'in_aborting'
flag in appropriate functions.

Signed-off-by: Anant Agrawal <Anant_Agrawal@mentor.com>
Signed-off-by: Mikhail Durnev <mikhail_durnev@mentor.com>
Signed-off-by: Srikanth Krishnakar <Srikanth_Krishnakar@mentor.com>
Signed-off-by: Timo Wischer <twischer@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2017-07-10 15:27:22 +02:00
Scott Gilliland
a28ff22df8 aplay: Fix --max-file-time option 32 bits overflow
Fix bug in arecord --max-file-time where the file size could overflow
32 bits.

Signed-off-by: Scott Gilliland <scott.gilliland@gatech.edu>
Acked-by: John Sauter <John_Sauter@systemeyescomputerstore.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2017-06-26 17:05:38 +02:00
Liam Girdwood
1e96c5f50e alsatplg: fix topology compiler long option parsing
verbose, compile and output options all have a parameter.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2017-06-14 13:57:21 +02:00
Liam Girdwood
1a0571bd78 topology: delete output file if parsing fails.
Currently the binary output file is left when parsing fails. This confuses
GNU Make if the parsing fails and causes the compilation to partially
complete.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2017-06-10 11:34:53 +02:00
Jaroslav Kysela
7b1c23848d Release v1.1.4
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2017-05-12 10:01:46 +02:00
Daniel Baluta
1d34e6addc aplay: Introduce and use xwrite helper
Write can return less then requested bytes, but we treat this as
an error thus ending up with confusing error messages.

Fix this by introducing xwrite helper, which makes sure all bytes
are written or an error is returned.

With this patch an usecase where disk is filled by recording will
print:
$ /mnt/msc/audio.wav: No space left on device

instead of random messages like:

$/mnt/msc/audio.wav: No such file or directory

Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2017-04-10 09:11:28 +02:00
Jaroslav Kysela
1314abd2d6 amidi: optarg might be NULL, fix 't' argument parsing 2017-02-27 09:04:08 +01:00
Pierre-Louis Bossart
1fefc14402 alsa-info: add ACPI device status
BIOS vendors typically reuse the same definitions between different
platforms and expose the relevant hardware by changing the value of
the _STA method.

For example on the Asus T100HA, there are 3 HID values for audio
codecs in the DSDT table but two have a zero status and will be
ignored by the ACPI subsystem.

$ more /sys/bus/acpi/devices/10EC*/status
::::::::::::::
/sys/bus/acpi/devices/10EC3270:00/status
::::::::::::::
15
::::::::::::::
/sys/bus/acpi/devices/10EC5640:00/status
::::::::::::::
0
::::::::::::::
/sys/bus/acpi/devices/10EC5648:00/status
::::::::::::::
0

This information is very useful to figure out which HIDs/quirks need
to be supported. Add log to alsa-info.sh to only expose non-zero
results of the ACPI _STA method, e.g.

!!ACPI Device Status Information
!!---------------

/sys/bus/acpi/devices/10EC3270:00/status 	 15

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2017-01-10 09:09:57 +01:00
Pierre-Louis Bossart
541c7a6460 alsa-info: provide more DMI information
Some manufacturers don't provide useful information for Manufacturer
and Product Name but instead use Board Vendor and Board Name fields,
add them to alsa-info log

Example on Intel NUC:

!!DMI Information
!!---------------

Manufacturer:
Product Name:
Product Version:
Firmware Version:  KYSKLi70.86A.0042.2016.0929.1933
Board Vendor:      Intel Corporation
Board Name:        NUC6i7KYB

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2017-01-10 09:09:43 +01:00
Paul Menzel
e9a6d425b5 alsactl: Remove standard output definition in systemd unit
`/lib/systemd/system/alsa-restore.service` specifies
`StandardOutput=syslog`. This overrides the `DefaultStandardOutput`
setting from `/etc/systemd/system.conf`, which the system administrator
can use to specify how output gets logged. In particular, the sysadmin
may want output to go to the journal, or to syslog, or nowhere at all [1].

This patch removes the definition entirely, so the units can use the
system default.

Upstream the patch from the Debian package [2].

[1] https://bugs.debian.org/741123
    "systemd services should not use StandardOutput=syslog; should rely
     on DefaultStandardOutput"
[2] https://sources.debian.net/src/alsa-utils/1.1.2-1/debian/patches/systemd_standardoutput.patch/

Signed-off-by: Paul Menzel <paulepanter@users.sourceforge.net>
CC: Jordi Mallach <jordi@debian.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-12-28 17:08:52 +01:00
Takashi Iwai
c6bdde171e alsaucm: Add alsaucm.rst to EXTRA_DIST
Otherwise it's missing in the tarball.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-12-28 15:58:51 +01:00
Jaroslav Kysela
84591f0de0 Release v1.1.3
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2016-12-20 10:12:29 +01:00
Takashi Iwai
9839813e7c alsactl: Fix potential NULL dereferences in daemon mode
The code releasing the each card object may access to NULL when a
bogus count is given.  Add a NULL check just to make sure.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-12-09 17:28:47 +01:00
Antonio Ospite
9ea2a1d067 INSTALL: document how to configure a build for installation in a local dir
Signed-off-by: Antonio Ospite <ao2@ao2.it>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-12-09 17:28:15 +01:00
Takashi Iwai
9f7a0895d3 Add alsaucm.1 to .gitignore
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-12-09 17:24:14 +01:00
Antonio Ospite
20d3d03b7a alsaucm: add a man page, generated from reStructuredText
Signed-off-by: Antonio Ospite <ao2@ao2.it>
Acked-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-12-09 17:23:33 +01:00
Antonio Ospite
59e32319df configure.ac: add a check for rst2man, a reStructuredText man page generator
Define a USE_RST2MAN conditional so that, when available, rst2man can be
used to generate man pages from reStructuredText source files.

The code follows what is done to check for xmlto.

On Debian system, the rst2man executable is provided by python-docutils
or python3-docutils.

Signed-off-by: Antonio Ospite <ao2@ao2.it>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-12-09 17:22:11 +01:00
Antonio Ospite
b235b50129 configure.ac: fix the check for xmlto availability
The same $xmlto variable is used both in AC_ARG_ENABLE and
AC_CHECK_PROG, but the latter is not setting a value to it when the
program is not found.

These two facts result in the "yes" value from the AC_ARG_ENABLE macro
to be still kept in the variable when the program is not found by
AC_CHECK_PROG, causing USE_XMLTO to be always set, finally resulting in
a build failure in case the xmlto program is not actually in the PATH.

As possible fix could have been to set "no" as a value in AC_CHECK_PROG
when program is not found.

However using two separate variables is more explicit, so fix the issue
this way.

Signed-off-by: Antonio Ospite <ao2@ao2.it>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-12-09 17:21:57 +01:00
Antonio Ospite
c21b3a4b62 alsaucm: mention the "list1" command in the usage output
Signed-off-by: Antonio Ospite <ao2@ao2.it>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-12-09 17:21:47 +01:00
Arnaud Pouliquen
55421afe9c speaker-test: Fix chmap wav file selection.
The channel selection currently does not work properly when a channel
map control is provided but no manual channel map was explicitly
requested with "-m".

For example, the CEA/HDMI 6ch (surround 5.1) map is:
 FL, FR, LFE, FC, RL, RR.

Tested command: speaker-test -D hdmi -c 6 -t wav

Speaker-test tries to play channels in this following order:
 0 - Front Left
 3 - Front Center
 1 - Front Right
 5 - Rear Right
 4 - Rear Left
 2 - LFE

But wav file played on associated speakers are not aligned. Here are
the real files played:
 0- /usr/share/sounds/alsa/Front_Left.wav => OK
 3- /usr/share/sounds/alsa/Rear_Right.wav  => OK
 1- /usr/share/sounds/alsa/Front_Right.wav  => OK
 5- /usr/share/sounds/alsa/Rear_Center.wav => KO
 4- found file /usr/share/sounds/alsa/Front_Center.wav => KO
 2- /usr/share/sounds/alsa/Rear_Left.wav  => KO

Issue is that associated wav files ordering is reworked only if
channel_map_set variable is set.

Fix consists in allowing wavs re-ordering if a channel mapping as been
get or set, i.e. channel_map is not null.

Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen@st.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-12-07 18:17:05 +01:00
Jeeja KP
d24a60b781 aplay: Fix to handle pause when system is suspended/Resumed
If PCM is paused and then we do system supend-resume, the stream throws
error(EBADF) when stream is paused released.

Check the pcm state before pause/release and if stream is suspended,
call snd_pcm_resume to resume the stream.

Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Jeeja KP <jeeja.kp@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2016-11-28 20:19:21 +01:00