\fI\-c, \-\-sched-idle\fP
Set the process scheduling policy to idle (SCHED_IDLE).
+.TP
+\fI\-D, \-\-ucm-defaults\fP
+Execute also the 'defaults' section from the UCM configuration. The standard
+behaviour is to execute only 'once' section.
+
.SH FILES
\fI/var/lib/alsa/asound.state\fP (or whatever file you specify with the
\fB\-f\fP flag) is used to store current settings for your
{ 's', "syslog", "use syslog for messages" },
{ INTARG | 'n', "nice", "set the process priority (see 'man nice')" },
{ 'c', "sched-idle", "set the process scheduling policy to idle (SCHED_IDLE)" },
+{ 'D', "ucm-defaults", "execute also the UCM 'defaults' section" },
{ HEADER, NULL, "Available commands:" },
{ CARDCMD, "store", "save current driver setup for one or each soundcards" },
{ EMPCMD, NULL, " to configuration file" },
int daemoncmd = 0;
int use_nice = NO_NICE;
int sched_idle = 0;
+ int initflags = 0;
struct arg *a;
struct option *o;
int i, j, k, res;
case 'I':
init_fallback = 0;
break;
+ case 'D':
+ initflags |= FLAG_UCM_DEFAULTS;
+ break;
case 'r':
statefile = optarg;
break;
snd_lib_error_set_handler(error_handler);
if (!strcmp(cmd, "init")) {
- res = init(initfile, cardname);
+ res = init(initfile, initflags, cardname);
snd_config_update_free_global();
} else if (!strcmp(cmd, "store")) {
res = save_state(cfgfile, cardname);
!strcmp(cmd, "nrestore")) {
if (removestate)
remove(statefile);
- res = load_state(cfgfile, initfile, cardname, init_fallback);
+ res = load_state(cfgfile, initfile, initflags, cardname, init_fallback);
if (!strcmp(cmd, "rdaemon")) {
do_nice(use_nice, sched_idle);
res = state_daemon(cfgfile, cardname, period, pidfile);
#define dbg(args...) do { dbg_(__func__, __LINE__, ##args); } while (0)
#endif
-int init(const char *file, const char *cardname);
-int init_ucm(int cardno);
+#define FLAG_UCM_DEFAULTS (1<<0)
+
+int init(const char *file, int flags, const char *cardname);
+int init_ucm(int flags, int cardno);
int state_lock(const char *file, int timeout);
int state_unlock(int fd, const char *file);
int save_state(const char *file, const char *cardname);
-int load_state(const char *file, const char *initfile, const char *cardname,
- int do_init);
+int load_state(const char *file, const char *initfile, int initflags,
+ const char *cardname, int do_init);
int power(const char *argv[], int argc);
int monitor(const char *name);
int state_daemon(const char *file, const char *cardname, int period,
return err ? err : -abs(space->exit_code);
}
-int init(const char *filename, const char *cardname)
+int init(const char *filename, int flags, const char *cardname)
{
struct space *space;
int err = 0, lasterr = 0, card, first;
break;
}
first = 0;
- err = init_ucm(card);
+ err = init_ucm(flags, card);
if (err == 0)
continue;
err = init_space(&space, card);
error("Cannot find soundcard '%s'...", cardname);
goto error;
}
- err = init_ucm(card);
+ err = init_ucm(flags, card);
if (err == 0)
return 0;
memset(&space, 0, sizeof(space));
*
*/
+#include <stddef.h>
+#include "alsactl.h"
#include <alsa/use-case.h>
/*
* Keep it as simple as possible. Execute commands from the SectionOnce only.
*/
-int init_ucm(int cardno)
+int init_ucm(int flags, int cardno)
{
snd_use_case_mgr_t *uc_mgr;
char id[32];
if (err < 0)
return err;
err = snd_use_case_set(uc_mgr, "_once", NULL);
+ if (err < 0)
+ goto _error;
+ if ((flags & FLAG_UCM_DEFAULTS) != 0) {
+ err = snd_use_case_set(uc_mgr, "_defaults", NULL);
+ if (err < 0)
+ goto _error;
+ }
+_error:
snd_use_case_mgr_close(uc_mgr);
return err;
}
return err;
}
-int load_state(const char *file, const char *initfile, const char *cardname,
- int do_init)
+int load_state(const char *file, const char *initfile, int initflags,
+ const char *cardname, int do_init)
{
int err, finalerr = 0;
snd_config_t *config;
if (!do_init)
break;
sprintf(cardname1, "%i", card);
- err = init(initfile, cardname1);
+ err = init(initfile, initflags, cardname1);
if (err < 0) {
finalerr = err;
initfailed(card, "init", err);
/* do a check if controls matches state file */
if (do_init && set_controls(card, config, 0)) {
sprintf(cardname1, "%i", card);
- err = init(initfile, cardname1);
+ err = init(initfile, initflags, cardname1);
if (err < 0) {
initfailed(card, "init", err);
finalerr = err;
}
/* do a check if controls matches state file */
if (do_init && set_controls(cardno, config, 0)) {
- err = init(initfile, cardname);
+ err = init(initfile, initflags, cardname);
if (err < 0) {
initfailed(cardno, "init", err);
finalerr = err;