1
0
Fork 0
Commit graph

64 commits

Author SHA1 Message Date
Jaroslav Kysela
254528c427 alsactl: fix sequence to clean card specific config files for UCM
For UCM, card-specific config files should be removed only when the fixed
boot flag is set or if the card is not the primary card in a given card
group.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2026-01-01 18:41:22 +01:00
Jaroslav Kysela
120568fbb5 alsactl: add missing call to clean card specific config files
The card specific configuration files created at runtime must
be removed before UCM fixed boot sequence in the standard
restore operation.

Fixes: https://github.com/alsa-project/alsa-lib/issues/492
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2026-01-01 17:53:55 +01:00
Jaroslav Kysela
1ad1825076 alsactl: ucm: restore controls for other cards in group
When the primary card restores controls, all other cards
in the card group should do this operation, too.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2025-12-04 15:08:14 +01:00
Jaroslav Kysela
bd1643809e alsactl: update state file correctly when initialization failed
There was missing continue statement to save the correct state reporting.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2025-12-04 15:08:14 +01:00
Jaroslav Kysela
3f66770aa9 alsactl: fix state restore to handle dynamic user control elements
Track user control elements separately and adjust control
count difference checking to account for dynamic user elements.
Prevents false positives in re-init detection when only user
controls have changed.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2025-12-04 15:08:14 +01:00
Jaroslav Kysela
8d46253ac3 alsactl: ucm: add wrestore command and wait_for_card() for boot synchronization
Implement wait.c with wait_for_card() function to monitor Boot control
element and wait for card readiness using event-based polling.

Add "wrestore" command to wait for card ready state before restore.
Add FLAG_UCM_WAIT flag and move DEFAULT_SYNC_TIME to alsactl.h.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2025-12-04 15:08:14 +01:00
Jaroslav Kysela
82caf6e7f3 alsactl: add -Y option to export card states as key=value pairs
Add export.c with support for exporting card states as key=value pairs.
Exports ALSA_CARD_NUMBER/ALSA_CARD_STATE for single cards, or
ALSA_CARD#_STATE for multiple cards. States: active, skip, waiting.

Add -Y (--export) option to restore command for state export.

This feature is designed for udev IMPORT{program} use.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2025-12-04 15:08:14 +01:00
Jaroslav Kysela
bdf5c13778 alsactl: ucm: implement boot parameters and card group sync infrastructure
Implement boot parameter management for multi-card synchronization.

Add boot_params.c with read/write functions for Boot control element,
card group configuration file support, and validity checking.
Extend init_ucm.c with boot/restore logic and card state handling.

Add -G (group-file) and -m (force-ucm-restore) command line options.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2025-12-04 15:08:14 +01:00
Jaroslav Kysela
966c559f04 alsactl: state: verify only control count not numids
The numids may change. Verify if a control is added or removed.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2024-10-15 17:24:31 +02:00
Jaroslav Kysela
e2fec28b65 alsactl: state: recode set_control() to use newer functions
The goal is to make the code more clean and separate elem id parsing.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2024-10-15 16:50:54 +02:00
Jaroslav Kysela
60bf4bb2af alsactl: fix the verbose compilation warnings for latest gcc
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2023-08-30 12:35:23 +02:00
Jaroslav Kysela
8403967669 alsactl: add locking for per-card initialization
Introduce the -K,--lock-dir parameter to specify the locking
directory. If the locking is active, files card<NUM>.lock
are used to serialize the multiple initialization requests
(udev, service).

Allow the relative -O,--lock-file argument (it's default now).

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-02-02 15:34:40 +01:00
Jaroslav Kysela
fca9d89bbc alsactl: fix the error path in set_controls()
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2022-01-03 16:14:31 +01:00
Jaroslav Kysela
257f3063fa alsactl: fix the check for additional elements
The driver may export only write-only elements. The previous
heuristics code do not handle this use case correctly.
Iterate through all elements and skip the write-only ones.

Fixes: https://github.com/alsa-project/alsa-utils/issues/122
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-12-03 11:09:57 +01:00
Sören Tempel
6018c2014a alsactl: load_state: Only delete config if one was loaded
If load_configuration fails with open_failed == true, load_state will
jump to the out label without config being initialized and pass this
uninitialized config value to snd_config_delete. This commit fixes this
issue by initializing config with NULL and checking if it is non-null
before invoking snd_config_delete.

Fixes: https://github.com/alsa-project/alsa-utils/pull/94
Fixes: f138117 ("alsactl: load_state() - initialize config variable for the open_failed case")
BugLink: https://github.com/alsa-project/alsa-utils/issues/93
Signed-off-by: Sören Tempel <soeren+git@soeren-tempel.net>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-06-07 19:06:19 +02:00
Jaroslav Kysela
f138117a45 alsactl: load_state() - initialize config variable for the open_failed case
Fixes: https://github.com/alsa-project/alsa-utils/issues/93
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-06-07 17:21:58 +02:00
Jaroslav Kysela
646d6ff094 alsactl: state - fix ‘item’ may be used uninitialized gcc warning
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-06-04 10:04:50 +02:00
Jaroslav Kysela
2bc595e7bd alsactl: check for error values from snd_config_get...()
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-06-04 10:04:00 +02:00
Jaroslav Kysela
a589d88862 alsactl: clean the boot / hotplug card specific configuration directory
The /var/lib/alsa/card<NUMBER>.conf.d directories should be emptied
when the card is initialized. Implement this functionality directly
to alsactl.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-04-13 11:16:09 +02:00
Jaroslav Kysela
eefc2c61cf alsactl: use card iterator functions for all card loops
Take the card iterator idea from the monitor code and
use it for all card loops. It reduces the code duplications
and makes things easy to review.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-03-11 09:23:33 +01:00
Jaroslav Kysela
9a2115b5cc alsactl: Add ucm support for the FixedBootSequence
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-03-11 09:23:31 +01:00
Jaroslav Kysela
c1474594dc alsactl: add dump-cfg and dump-state commands
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2021-03-07 19:58:33 +01:00
Jaroslav Kysela
b68e854d28 alsactl: add -D argument to execute also the UCM defaults section
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2020-05-14 19:34:18 +02:00
Michael Forney
646b3b1c0b Use %lli for long long in printf
The `L` length modifier only applies to floating-point conversion
specifiers, and `ll` is used for `long long` integers.

Although glibc accepts %Li, musl does not and returns EINVAL.

Signed-off-by: Michael Forney <mforney@mforney.org>
Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2020-02-10 12:39:17 +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
55d41b7fe3 alsactl: add missing state_unlock() call 2014-12-24 20:15:26 +01:00
Jaroslav Kysela
1363f852e9 alsactl: Fix the file locking routines (for the state management) 2014-09-24 10:35:53 +02:00
Jaroslav Kysela
03a652e18d alsactl: save state - do not call rename for stdio
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2014-06-25 10:54:26 +02:00
Jaroslav Kysela
067f4f3256 alsactl: Improved command line argument handling...
Improve command line argument handling for future extensions.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2013-04-05 13:47:21 +02:00
Jaroslav Kysela
cc5c3357cf alsactl: add the daemon mode
For the plug-and-play hardware, like USB devices, it may be helpful
to manage the sound state periodically, before the devices are removed.

This change implements new commands 'daemon' and 'rdaemon' to save
the sound state in defined intervals when the sound controls are changed.

The udev rules can notify the daemon using the 'kill' or 'nrestore'
commands to rescan available cards in the system.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2013-04-05 13:47:18 +02:00
Jaroslav Kysela
b95dd7ef46 alsactl: small code reorder to avoid memory leaks
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2013-04-03 11:57:52 +02:00
Jaroslav Kysela
e3e85a851c alsactl: safe state store and memory allocation cleanups
- store new configuration to file + ".new" extension, rename later
- free the configuration tree on exit from load_state()/save_state()
- call snd_config_update_free_global() at the end of command blocks

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2013-04-03 11:16:46 +02:00
Jaroslav Kysela
f7eb87ddc7 alsactl: Do not access other cards than specified for init
When the global state does not exist, alsactl tries to
initialize all soundcards. It is not good when alsactl
is called multiple times from udev. Also, selinux can deny
access to non-existent devices.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2012-05-09 08:45:47 +02:00
Clemens Ladisch
5a6ca47cb9 alsactl: add support for recreating enumerated user controls
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2011-10-07 23:40:08 +02:00
Jaroslav Kysela
0fea2452cb alsactl: Change handling of inactive controls
The inactive controls are stored, but they are not restored
when they are marked inactive in the state file or in the
driver.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-09-02 15:48:43 +02:00
Clemens Ladisch
b4ff58b685 Revert wrong parts of "alsactl: use snd_config_imake* functions"
This reverts the parts of commit e509df69a5
that accidentally reverted a bunch of earlier commits.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2010-05-26 10:37:58 +02:00
Clemens Ladisch
bd15b1e5ea alsactl: change format of comment node in state file
Make the comment node a separate node in the state file (join=0), and
move it after the other fields of the respective control.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2010-05-26 10:28:11 +02:00
Clemens Ladisch
4f29877d54 alsactl: correctly restore dB values of controls with changed range
When the range of a control has changed between driver versions, it is a
good idea to restore the same dB value of the control.  However,
computing the dB value by interpolating betweem the min/max dB values
duplicates alsa-lib's TLV functions and does not even work for controls
with a linear dB range.

A simple conversion to dB and back can be done if we add the dB value(s)
to the saved state.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2010-05-26 10:27:25 +02:00
Clemens Ladisch
224c12238e alsactl: remove open-coded search
Remove search_comment_item since it does the same as snd_config_search.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2010-05-26 10:19:17 +02:00
Clemens Ladisch
ad47784b01 alsactl: move alloca out of loop
Reserving new space from the stack in every loop iteration is not
necessary, so move the call to snd_ctl_elem_id_alloca outside where it
is executed only once.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2010-05-26 10:18:43 +02:00
Clemens Ladisch
e509df69a5 alsactl: use snd_config_imake* functions
To save a call to snd_config_set_xxx, replace the calls to
snd_config_make_xxx with snd_config_imake_xxx.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
2010-05-26 10:07:47 +02:00
Jaroslav Kysela
f0658f37dc alsactl: update debug prints in state.c
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-02-25 16:45:13 +01:00
Jaroslav Kysela
412cb29b58 alsactl: add more debug prints to state.c
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-02-25 15:02:09 +01:00
Jaroslav Kysela
5c35aa8b69 alsactl: improve -d to get warnings and store exitcode to runstate file
Also, make the initialization & restore logic for one card similar to
multiple card initialization & restore.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2010-02-25 09:22:26 +01:00
Jaroslav Kysela
05f78cc681 alsactl: Fix restore / init call behaviour when driver contains more controls
Fix check when driver contains more controls than state file. In this case,
initialization procedure should be run, too.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-11-21 14:44:31 +01:00
Diego E. 'Flameeyes' Pettenò
ca1ea1e904 Mark static the functions not used outside their unit.
This way the compiler can assume more information about their
interface for optimisation.

Signed-off-by: Diego E. 'Flameeyes' Pettenò <flameeyes@gmail.com>
2008-11-21 13:09:56 +01:00
Diego E. 'Flameeyes' Pettenò
50f01e48af Remove some dead code (comparisons between 0 and unsigned integers).
Signed-off-by: Diego E. 'Flameeyes' Pettenò <flameeyes@gmail.com>
2008-11-21 13:09:45 +01:00
Takashi Iwai
1797b2c290 Add -I option to alsactl
Add -I option to alsactl to take back the old restore behavior without
initialization.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-11-13 09:28:43 +01:00
Jaroslav Kysela
f63ff476f3 alsactl: Add -g,--ignore option to ignore 'No soundcards found' error
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-09-18 09:40:02 +02:00
Jaroslav Kysela
b8560a6bbb alsactl init - restore calls also init on failure
The initialization procedure consist from default initialization and
state restoration. When restore fails for a reason or the config file
contains inaccurate information, then init is called.

Also, if something fails (init or restore), a file specified using -r
option can be created with description what failed. It can be useful
when user space decides to notify user to set the sound driver properly.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2008-08-14 16:46:27 +02:00