mirror of
https://github.com/alsa-project/alsa-utils
synced 2024-11-09 17:35:42 +01:00
alsactl: Add ucm support for the FixedBootSequence
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
7f5622c106
commit
9a2115b5cc
5 changed files with 32 additions and 22 deletions
|
@ -420,7 +420,7 @@ int main(int argc, char *argv[])
|
||||||
snd_lib_error_set_handler(error_handler);
|
snd_lib_error_set_handler(error_handler);
|
||||||
|
|
||||||
if (!strcmp(cmd, "init")) {
|
if (!strcmp(cmd, "init")) {
|
||||||
res = init(initfile, initflags, cardname);
|
res = init(initfile, initflags | FLAG_UCM_FBOOT | FLAG_UCM_BOOT, cardname);
|
||||||
snd_config_update_free_global();
|
snd_config_update_free_global();
|
||||||
} else if (!strcmp(cmd, "store")) {
|
} else if (!strcmp(cmd, "store")) {
|
||||||
res = save_state(cfgfile, cardname);
|
res = save_state(cfgfile, cardname);
|
||||||
|
|
|
@ -28,7 +28,9 @@ void error_handler(const char *file, int line, const char *function, int err, co
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define FLAG_UCM_DISABLED (1<<0)
|
#define FLAG_UCM_DISABLED (1<<0)
|
||||||
#define FLAG_UCM_DEFAULTS (1<<1)
|
#define FLAG_UCM_FBOOT (1<<1)
|
||||||
|
#define FLAG_UCM_BOOT (1<<2)
|
||||||
|
#define FLAG_UCM_DEFAULTS (1<<3)
|
||||||
|
|
||||||
int load_configuration(const char *file, snd_config_t **top, int *open_failed);
|
int load_configuration(const char *file, snd_config_t **top, int *open_failed);
|
||||||
int init(const char *file, int flags, const char *cardname);
|
int init(const char *file, int flags, const char *cardname);
|
||||||
|
|
|
@ -1765,11 +1765,9 @@ int init(const char *filename, int flags, const char *cardname)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
first = 0;
|
first = 0;
|
||||||
if (!(flags & FLAG_UCM_DISABLED)) {
|
err = init_ucm(flags, card);
|
||||||
err = init_ucm(flags, card);
|
if (err == 0)
|
||||||
if (err == 0)
|
continue;
|
||||||
continue;
|
|
||||||
}
|
|
||||||
err = init_space(&space, card);
|
err = init_space(&space, card);
|
||||||
if (err == 0) {
|
if (err == 0) {
|
||||||
space->rootdir = new_root_dir(filename);
|
space->rootdir = new_root_dir(filename);
|
||||||
|
@ -1792,11 +1790,9 @@ int init(const char *filename, int flags, const char *cardname)
|
||||||
error("Cannot find soundcard '%s'...", cardname);
|
error("Cannot find soundcard '%s'...", cardname);
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
if (!(flags & FLAG_UCM_DISABLED)) {
|
err = init_ucm(flags, card);
|
||||||
err = init_ucm(flags, card);
|
if (err == 0)
|
||||||
if (err == 0)
|
return 0;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
memset(&space, 0, sizeof(space));
|
memset(&space, 0, sizeof(space));
|
||||||
err = init_space(&space, card);
|
err = init_space(&space, card);
|
||||||
if (err == 0) {
|
if (err == 0) {
|
||||||
|
|
|
@ -28,7 +28,8 @@
|
||||||
#include <alsa/use-case.h>
|
#include <alsa/use-case.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Keep it as simple as possible. Execute commands from the SectionOnce only.
|
* Keep it as simple as possible. Execute commands from the
|
||||||
|
* FixedBootSequence and BootSequence only.
|
||||||
*/
|
*/
|
||||||
int init_ucm(int flags, int cardno)
|
int init_ucm(int flags, int cardno)
|
||||||
{
|
{
|
||||||
|
@ -36,18 +37,25 @@ int init_ucm(int flags, int cardno)
|
||||||
char id[32];
|
char id[32];
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
if (flags & FLAG_UCM_DISABLED)
|
||||||
|
return -ENXIO;
|
||||||
|
|
||||||
snprintf(id, sizeof(id), "hw:%d", cardno);
|
snprintf(id, sizeof(id), "hw:%d", cardno);
|
||||||
err = snd_use_case_mgr_open(&uc_mgr, id);
|
err = snd_use_case_mgr_open(&uc_mgr, id);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
err = snd_use_case_set(uc_mgr, "_boot", NULL);
|
if (flags & FLAG_UCM_FBOOT) {
|
||||||
if (err < 0)
|
err = snd_use_case_set(uc_mgr, "_fboot", NULL);
|
||||||
goto _error;
|
|
||||||
if ((flags & FLAG_UCM_DEFAULTS) != 0) {
|
|
||||||
err = snd_use_case_set(uc_mgr, "_defaults", NULL);
|
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto _error;
|
goto _error;
|
||||||
}
|
}
|
||||||
|
if (flags & FLAG_UCM_BOOT) {
|
||||||
|
err = snd_use_case_set(uc_mgr, "_boot", NULL);
|
||||||
|
if (err < 0)
|
||||||
|
goto _error;
|
||||||
|
if ((flags & FLAG_UCM_DEFAULTS) != 0)
|
||||||
|
err = snd_use_case_set(uc_mgr, "_defaults", NULL);
|
||||||
|
}
|
||||||
_error:
|
_error:
|
||||||
snd_use_case_mgr_close(uc_mgr);
|
snd_use_case_mgr_close(uc_mgr);
|
||||||
return err;
|
return err;
|
||||||
|
@ -57,7 +65,7 @@ _error:
|
||||||
|
|
||||||
int init_ucm(int flags, int cardno)
|
int init_ucm(int flags, int cardno)
|
||||||
{
|
{
|
||||||
return 0;
|
return -ENXIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1682,7 +1682,7 @@ single:
|
||||||
if (!do_init)
|
if (!do_init)
|
||||||
break;
|
break;
|
||||||
sprintf(cardname1, "%i", card);
|
sprintf(cardname1, "%i", card);
|
||||||
err = init(initfile, initflags, cardname1);
|
err = init(initfile, initflags | FLAG_UCM_FBOOT | FLAG_UCM_BOOT, cardname1);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
finalerr = err;
|
finalerr = err;
|
||||||
initfailed(card, "init", err);
|
initfailed(card, "init", err);
|
||||||
|
@ -1718,10 +1718,12 @@ single:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
first = 0;
|
first = 0;
|
||||||
|
/* error is ignored */
|
||||||
|
init_ucm(initflags | FLAG_UCM_FBOOT, card);
|
||||||
/* do a check if controls matches state file */
|
/* do a check if controls matches state file */
|
||||||
if (do_init && set_controls(card, config, 0)) {
|
if (do_init && set_controls(card, config, 0)) {
|
||||||
sprintf(cardname1, "%i", card);
|
sprintf(cardname1, "%i", card);
|
||||||
err = init(initfile, initflags, cardname1);
|
err = init(initfile, initflags | FLAG_UCM_BOOT, cardname1);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
initfailed(card, "init", err);
|
initfailed(card, "init", err);
|
||||||
finalerr = err;
|
finalerr = err;
|
||||||
|
@ -1742,9 +1744,11 @@ single:
|
||||||
err = -ENODEV;
|
err = -ENODEV;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
/* error is ignored */
|
||||||
|
init_ucm(initflags | FLAG_UCM_FBOOT, cardno);
|
||||||
/* do a check if controls matches state file */
|
/* do a check if controls matches state file */
|
||||||
if (do_init && set_controls(cardno, config, 0)) {
|
if (do_init && set_controls(cardno, config, 0)) {
|
||||||
err = init(initfile, initflags, cardname);
|
err = init(initfile, initflags | FLAG_UCM_BOOT, cardname);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
initfailed(cardno, "init", err);
|
initfailed(cardno, "init", err);
|
||||||
finalerr = err;
|
finalerr = err;
|
||||||
|
|
Loading…
Reference in a new issue