Blame iecset/iecset.c

Packit Service a9274b
/*
Packit Service a9274b
   iecset - change IEC958 status bits on ALSA
Packit Service a9274b
   Copyright (C) 2003 by Takashi Iwai <tiwai@suse.de>
Packit Service a9274b
Packit Service a9274b
   This program is free software; you can redistribute it and/or
Packit Service a9274b
   modify it under the terms of the GNU General Public License
Packit Service a9274b
   as published by the Free Software Foundation; either version 2
Packit Service a9274b
   of the License, or (at your option) any later version.
Packit Service a9274b
   
Packit Service a9274b
   This program is distributed in the hope that it will be useful,
Packit Service a9274b
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service a9274b
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service a9274b
   GNU General Public License for more details.
Packit Service a9274b
   
Packit Service a9274b
   You should have received a copy of the GNU General Public License
Packit Service a9274b
   along with this program; if not, write to the Free Software
Packit Service a9274b
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Packit Service a9274b
 */
Packit Service a9274b
Packit Service a9274b
#include <stdio.h>
Packit Service a9274b
#include <ctype.h>
Packit Service a9274b
#include <alsa/asoundlib.h>
Packit Service a9274b
Packit Service a9274b
void dump_iec958(snd_aes_iec958_t *iec);
Packit Service a9274b
Packit Service a9274b
static int get_bool(const char *str)
Packit Service a9274b
{
Packit Service a9274b
	if (strncmp(str, "yes", 3) == 0 ||
Packit Service a9274b
	    strncmp(str, "YES", 3) == 0 ||
Packit Service a9274b
	    strncmp(str, "on", 2) == 0 ||
Packit Service a9274b
	    strncmp(str, "ON", 2) == 0 ||
Packit Service a9274b
	    strncmp(str, "true", 4) == 0 ||
Packit Service a9274b
	    strncmp(str, "TRUE", 4) == 0 ||
Packit Service a9274b
	    *str == '1')
Packit Service a9274b
		return 1;
Packit Service a9274b
	return 0;
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
enum {
Packit Service a9274b
	CMD_BOOL, CMD_BOOL_INV, CMD_INT
Packit Service a9274b
};
Packit Service a9274b
Packit Service a9274b
enum {
Packit Service a9274b
	IDX_PRO, IDX_NOAUDIO, IDX_RATE, IDX_UNLOCK, IDX_SBITS, IDX_WORD, IDX_EMP, IDX_CAT, IDX_NOCOPY, IDX_ORIG,
Packit Service a9274b
	IDX_LAST
Packit Service a9274b
};
Packit Service a9274b
Packit Service a9274b
struct cmdtbl {
Packit Service a9274b
	const char *name;
Packit Service a9274b
	int idx;
Packit Service a9274b
	int type;
Packit Service a9274b
	const char *desc;
Packit Service a9274b
};
Packit Service a9274b
Packit Service a9274b
static const struct cmdtbl cmds[] = {
Packit Service a9274b
	{ "pro", IDX_PRO, CMD_BOOL,
Packit Service a9274b
	  "professional (common)\n\toff = consumer mode, on = professional mode" },
Packit Service a9274b
	{ "aud", IDX_NOAUDIO, CMD_BOOL_INV,
Packit Service a9274b
	  "audio (common)\n\ton = audio mode, off = non-audio mode" },
Packit Service a9274b
	{ "rat", IDX_RATE, CMD_INT,
Packit Service a9274b
	  "rate (common)\n\tsample rate in Hz (0 = not indicated)" },
Packit Service a9274b
	{ "emp", IDX_EMP, CMD_INT,
Packit Service a9274b
	  "emphasis (common)\n\t0 = none, 1 = 50/15us, 2 = CCITT" },
Packit Service a9274b
	{ "loc", IDX_UNLOCK, CMD_BOOL_INV,
Packit Service a9274b
	  "lock (prof.)\n\toff = rate unlocked, on = rate locked" },
Packit Service a9274b
	{ "sbi", IDX_SBITS, CMD_INT,
Packit Service a9274b
	  "sbits (prof.)\n\tsample bits 2 = 20bit, 4 = 24bit, 6 = undef" },
Packit Service a9274b
	{ "wor", IDX_WORD, CMD_INT,
Packit Service a9274b
	  "wordlength (prof.)\n\t0=no, 2=22-18bit, 4=23-19bit, 5=24-20bit, 6=20-16bit" },
Packit Service a9274b
	{ "cat", IDX_CAT, CMD_INT,
Packit Service a9274b
	  "category (consumer)\n\t0-0x7f" },
Packit Service a9274b
	{ "cop", IDX_NOCOPY, CMD_BOOL_INV,
Packit Service a9274b
	  "copyright (consumer)\n\toff = non-copyright, on = copyright" },
Packit Service a9274b
	{ "ori", IDX_ORIG, CMD_BOOL,
Packit Service a9274b
	  "original (consumer)\n\toff = 1st-gen, on = original" },
Packit Service a9274b
};
Packit Service a9274b
Packit Service a9274b
Packit Service a9274b
static void error(const char *s, int err)
Packit Service a9274b
{
Packit Service a9274b
	fprintf(stderr, "%s: %s\n", s, snd_strerror(err));
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
Packit Service a9274b
static void usage(void)
Packit Service a9274b
{
Packit Service a9274b
	int i;
Packit Service a9274b
Packit Service a9274b
	printf("Usage: iecset [options] [cmd arg...]\n");
Packit Service a9274b
	printf("Options:\n");
Packit Service a9274b
	printf("    -D device   specifies the control device to use\n");
Packit Service a9274b
	printf("    -c card     specifies the card number to use (equiv. with -Dhw:#)\n");
Packit Service a9274b
	printf("    -n number   specifies the control index number (default = 0)\n");
Packit Service a9274b
	printf("    -x          dump the dump the AESx hex code for IEC958 PCM parameters\n");
Packit Service a9274b
	printf("    -i          read commands from stdin\n");
Packit Service a9274b
	printf("Commands:\n");
Packit Service a9274b
	for (i = 0; i < (int)(sizeof(cmds)/sizeof(cmds[0])); i++) {
Packit Service a9274b
		printf("    %s\n", cmds[i].desc);
Packit Service a9274b
	}
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
Packit Service a9274b
/*
Packit Service a9274b
 * parse iecset commands
Packit Service a9274b
 */
Packit Service a9274b
static void parse_command(int *parms, const char *c, const char *arg)
Packit Service a9274b
{
Packit Service a9274b
	int i;
Packit Service a9274b
Packit Service a9274b
	for (i = 0; i < (int)(sizeof(cmds)/sizeof(cmds[0])); i++) {
Packit Service a9274b
		if (strncmp(c, cmds[i].name, strlen(cmds[i].name)) == 0) {
Packit Service a9274b
			int val;
Packit Service a9274b
			switch (cmds[i].type) {
Packit Service a9274b
			case CMD_BOOL:
Packit Service a9274b
				val = get_bool(arg);
Packit Service a9274b
				break;
Packit Service a9274b
			case CMD_BOOL_INV:
Packit Service a9274b
				val = !get_bool(arg);
Packit Service a9274b
				break;
Packit Service a9274b
			case CMD_INT:
Packit Service a9274b
			default:
Packit Service a9274b
				val = (int)strtol(arg, NULL, 0);
Packit Service a9274b
				break;
Packit Service a9274b
			}
Packit Service a9274b
			parms[cmds[i].idx] = val;
Packit Service a9274b
			return;
Packit Service a9274b
		}
Packit Service a9274b
	}
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
static char *skipspace(char *line)
Packit Service a9274b
{
Packit Service a9274b
	char *p;
Packit Service a9274b
	for (p = line; *p && isspace(*p); p++)
Packit Service a9274b
		;
Packit Service a9274b
	return p;
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
/*
Packit Service a9274b
 * parse iecset commands from the file
Packit Service a9274b
 */
Packit Service a9274b
static void parse_file(int *parms, FILE *fp)
Packit Service a9274b
{
Packit Service a9274b
	char line[1024], *cmd, *arg;
Packit Service a9274b
	while (fgets(line, sizeof(line), fp) != NULL) {
Packit Service a9274b
		cmd = skipspace(line);
Packit Service a9274b
		if (*cmd == '#' || ! *cmd)
Packit Service a9274b
			continue;
Packit Service a9274b
		for (arg = cmd; *arg && !isspace(*arg); arg++)
Packit Service a9274b
			;
Packit Service a9274b
		if (! *arg)
Packit Service a9274b
			continue;
Packit Service a9274b
		*arg++ = 0;
Packit Service a9274b
		arg = skipspace(arg);
Packit Service a9274b
		if (! *arg)
Packit Service a9274b
			continue;
Packit Service a9274b
		parse_command(parms, cmd, arg);
Packit Service a9274b
	}
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
/* update iec958 status values
Packit Service a9274b
 * return non-zero if the values are modified
Packit Service a9274b
 */
Packit Service a9274b
static int update_iec958_status(snd_aes_iec958_t *iec958, int *parms)
Packit Service a9274b
{
Packit Service a9274b
	int changed = 0;
Packit Service a9274b
	if (parms[IDX_PRO] >= 0) {
Packit Service a9274b
		if (parms[IDX_PRO])
Packit Service a9274b
			iec958->status[0] |= IEC958_AES0_PROFESSIONAL;
Packit Service a9274b
		else
Packit Service a9274b
			iec958->status[0] &= ~IEC958_AES0_PROFESSIONAL;
Packit Service a9274b
		changed = 1;
Packit Service a9274b
	}
Packit Service a9274b
	if (parms[IDX_NOAUDIO] >= 0) {
Packit Service a9274b
		if (parms[IDX_NOAUDIO])
Packit Service a9274b
			iec958->status[0] |= IEC958_AES0_NONAUDIO;
Packit Service a9274b
		else
Packit Service a9274b
			iec958->status[0] &= ~IEC958_AES0_NONAUDIO;
Packit Service a9274b
		changed = 1;
Packit Service a9274b
	}
Packit Service a9274b
	if (parms[IDX_RATE] >= 0) {
Packit Service a9274b
		if (iec958->status[0] & IEC958_AES0_PROFESSIONAL) {
Packit Service a9274b
			iec958->status[0] &= ~IEC958_AES0_PRO_FS;
Packit Service a9274b
			switch (parms[IDX_RATE]) {
Packit Service a9274b
			case 44100:
Packit Service a9274b
				iec958->status[0] |= IEC958_AES0_PRO_FS_44100;
Packit Service a9274b
				break;
Packit Service a9274b
			case 48000:
Packit Service a9274b
				iec958->status[0] |= IEC958_AES0_PRO_FS_48000;
Packit Service a9274b
				break;
Packit Service a9274b
			case 32000:
Packit Service a9274b
				iec958->status[0] |= IEC958_AES0_PRO_FS_32000;
Packit Service a9274b
				break;
Packit Service a9274b
			}
Packit Service a9274b
		} else {
Packit Service a9274b
			iec958->status[3] &= ~IEC958_AES3_CON_FS;
Packit Service a9274b
			switch (parms[IDX_RATE]) {
Packit Service a9274b
			case 22050:
Packit Service a9274b
				iec958->status[3] |= IEC958_AES3_CON_FS_22050;
Packit Service a9274b
				break;
Packit Service a9274b
			case 24000:
Packit Service a9274b
				iec958->status[3] |= IEC958_AES3_CON_FS_24000;
Packit Service a9274b
				break;
Packit Service a9274b
			case 32000:
Packit Service a9274b
				iec958->status[3] |= IEC958_AES3_CON_FS_32000;
Packit Service a9274b
				break;
Packit Service a9274b
			case 44100:
Packit Service a9274b
				iec958->status[3] |= IEC958_AES3_CON_FS_44100;
Packit Service a9274b
				break;
Packit Service a9274b
			case 48000:
Packit Service a9274b
				iec958->status[3] |= IEC958_AES3_CON_FS_48000;
Packit Service a9274b
				break;
Packit Service a9274b
			case 88200:
Packit Service a9274b
				iec958->status[3] |= IEC958_AES3_CON_FS_88200;;
Packit Service a9274b
				break;
Packit Service a9274b
			case 96000:
Packit Service a9274b
				iec958->status[3] |= IEC958_AES3_CON_FS_96000;
Packit Service a9274b
				break;
Packit Service a9274b
			case 176400:
Packit Service a9274b
				iec958->status[3] |= IEC958_AES3_CON_FS_176400;
Packit Service a9274b
				break;
Packit Service a9274b
			case 192000:
Packit Service a9274b
				iec958->status[3] |= IEC958_AES3_CON_FS_192000;
Packit Service a9274b
				break;
Packit Service a9274b
			case 768000:
Packit Service a9274b
				iec958->status[3] |= IEC958_AES3_CON_FS_768000;
Packit Service a9274b
				break;
Packit Service a9274b
			default:
Packit Service a9274b
				iec958->status[3] |= IEC958_AES3_CON_FS_NOTID;
Packit Service a9274b
				break;
Packit Service a9274b
			}
Packit Service a9274b
		}
Packit Service a9274b
		changed = 1;
Packit Service a9274b
	}
Packit Service a9274b
	if (parms[IDX_NOCOPY] >= 0) {
Packit Service a9274b
		if (! (iec958->status[0] & IEC958_AES0_PROFESSIONAL)) {
Packit Service a9274b
			if (parms[IDX_NOCOPY])
Packit Service a9274b
				iec958->status[0] |= IEC958_AES0_CON_NOT_COPYRIGHT;
Packit Service a9274b
			else
Packit Service a9274b
				iec958->status[0] &= ~IEC958_AES0_CON_NOT_COPYRIGHT;
Packit Service a9274b
		}
Packit Service a9274b
		changed = 1;
Packit Service a9274b
	}
Packit Service a9274b
	if (parms[IDX_ORIG] >= 0) {
Packit Service a9274b
		if (! (iec958->status[0] & IEC958_AES0_PROFESSIONAL)) {
Packit Service a9274b
			if (parms[IDX_ORIG])
Packit Service a9274b
				iec958->status[1] |= IEC958_AES1_CON_ORIGINAL;
Packit Service a9274b
			else
Packit Service a9274b
				iec958->status[1] &= ~IEC958_AES1_CON_ORIGINAL;
Packit Service a9274b
		}
Packit Service a9274b
		changed = 1;
Packit Service a9274b
	}
Packit Service a9274b
	if (parms[IDX_EMP] >= 0) {
Packit Service a9274b
		if (iec958->status[0] & IEC958_AES0_PROFESSIONAL) {
Packit Service a9274b
			iec958->status[0] &= ~IEC958_AES0_PRO_EMPHASIS;
Packit Service a9274b
			switch (parms[IDX_EMP]) {
Packit Service a9274b
			case 0:
Packit Service a9274b
				iec958->status[0] |= IEC958_AES0_PRO_EMPHASIS_NONE;
Packit Service a9274b
				break;
Packit Service a9274b
			case 1:
Packit Service a9274b
				iec958->status[0] |= IEC958_AES0_PRO_EMPHASIS_5015;
Packit Service a9274b
				break;
Packit Service a9274b
			case 2:
Packit Service a9274b
				iec958->status[0] |= IEC958_AES0_PRO_EMPHASIS_CCITT;
Packit Service a9274b
				break;
Packit Service a9274b
			}
Packit Service a9274b
		} else {
Packit Service a9274b
			if (parms[IDX_EMP])
Packit Service a9274b
				iec958->status[0] |= IEC958_AES0_CON_EMPHASIS_5015;
Packit Service a9274b
			else
Packit Service a9274b
				iec958->status[0] &= ~IEC958_AES0_CON_EMPHASIS_5015;
Packit Service a9274b
		}
Packit Service a9274b
		changed = 1;
Packit Service a9274b
	}
Packit Service a9274b
	if (parms[IDX_UNLOCK] >= 0) {
Packit Service a9274b
		if (iec958->status[0] & IEC958_AES0_PROFESSIONAL) {
Packit Service a9274b
			if (parms[IDX_UNLOCK])
Packit Service a9274b
				iec958->status[0] |= IEC958_AES0_PRO_FREQ_UNLOCKED;
Packit Service a9274b
			else
Packit Service a9274b
				iec958->status[0] &= ~IEC958_AES0_PRO_FREQ_UNLOCKED;
Packit Service a9274b
		}
Packit Service a9274b
		changed = 1;
Packit Service a9274b
	}
Packit Service a9274b
	if (parms[IDX_SBITS] >= 0) {
Packit Service a9274b
		if (iec958->status[0] & IEC958_AES0_PROFESSIONAL) {
Packit Service a9274b
			iec958->status[2] &= ~IEC958_AES2_PRO_SBITS;
Packit Service a9274b
			iec958->status[2] |= parms[IDX_SBITS] & 7;
Packit Service a9274b
		}
Packit Service a9274b
		changed = 1;
Packit Service a9274b
	}
Packit Service a9274b
	if (parms[IDX_WORD] >= 0) {
Packit Service a9274b
		if (iec958->status[0] & IEC958_AES0_PROFESSIONAL) {
Packit Service a9274b
			iec958->status[2] &= ~IEC958_AES2_PRO_WORDLEN;
Packit Service a9274b
			iec958->status[2] |= (parms[IDX_WORD] & 7) << 3;
Packit Service a9274b
		}
Packit Service a9274b
		changed = 1;
Packit Service a9274b
	}
Packit Service a9274b
	if (parms[IDX_CAT] >= 0) {
Packit Service a9274b
		if (! (iec958->status[0] & IEC958_AES0_PROFESSIONAL)) {
Packit Service a9274b
			iec958->status[1] &= ~IEC958_AES1_CON_CATEGORY;
Packit Service a9274b
			iec958->status[1] |= parms[IDX_CAT] & 0x7f;
Packit Service a9274b
		}
Packit Service a9274b
		changed = 1;
Packit Service a9274b
	}
Packit Service a9274b
Packit Service a9274b
	return changed;
Packit Service a9274b
}
Packit Service a9274b
		
Packit Service a9274b
Packit Service a9274b
int main(int argc, char **argv)
Packit Service a9274b
{
Packit Service a9274b
	const char *dev = "default";
Packit Service a9274b
	const char *spdif_str = SND_CTL_NAME_IEC958("", PLAYBACK, DEFAULT);
Packit Service a9274b
	int spdif_index = -1;
Packit Service a9274b
	snd_ctl_t *ctl;
Packit Service a9274b
	snd_ctl_elem_list_t *clist;
Packit Service a9274b
	snd_ctl_elem_id_t *cid;
Packit Service a9274b
	snd_ctl_elem_value_t *cval;
Packit Service a9274b
	snd_aes_iec958_t iec958;
Packit Service a9274b
	int from_stdin = 0;
Packit Service a9274b
	int dumphex = 0;
Packit Service a9274b
	int i, c, err;
Packit Service a9274b
	unsigned int controls, cidx;
Packit Service a9274b
	char tmpname[32];
Packit Service a9274b
	int parms[IDX_LAST];
Packit Service a9274b
Packit Service a9274b
	for (i = 0; i < IDX_LAST; i++)
Packit Service a9274b
		parms[i] = -1; /* not set */
Packit Service a9274b
Packit Service a9274b
	while ((c = getopt(argc, argv, "D:c:n:xhi")) != -1) {
Packit Service a9274b
		switch (c) {
Packit Service a9274b
		case 'D':
Packit Service a9274b
			dev = optarg;
Packit Service a9274b
			break;
Packit Service a9274b
		case 'c':
Packit Service a9274b
			i = atoi(optarg);
Packit Service a9274b
			if (i < 0 || i >= 32) {
Packit Service a9274b
				fprintf(stderr, "invalid card index %d\n", i);
Packit Service a9274b
				return 1;
Packit Service a9274b
			}
Packit Service a9274b
			sprintf(tmpname, "hw:%d", i);
Packit Service a9274b
			dev = tmpname;
Packit Service a9274b
			break;
Packit Service a9274b
		case 'n':
Packit Service a9274b
			spdif_index = atoi(optarg);
Packit Service a9274b
			break;
Packit Service a9274b
		case 'x':
Packit Service a9274b
			dumphex = 1;
Packit Service a9274b
			break;
Packit Service a9274b
		case 'i':
Packit Service a9274b
			from_stdin = 1;
Packit Service a9274b
			break;
Packit Service a9274b
		default:
Packit Service a9274b
			usage();
Packit Service a9274b
			return 1;
Packit Service a9274b
		}
Packit Service a9274b
	}
Packit Service a9274b
Packit Service a9274b
	if ((err = snd_ctl_open(&ctl, dev, 0)) < 0) {
Packit Service a9274b
		error("snd_ctl_open", err);
Packit Service a9274b
		return 1;
Packit Service a9274b
	}
Packit Service a9274b
Packit Service a9274b
	snd_ctl_elem_list_alloca(&clist);
Packit Service a9274b
	if ((err = snd_ctl_elem_list(ctl, clist)) < 0) {
Packit Service a9274b
		error("snd_ctl_elem_list", err);
Packit Service a9274b
		return 1;
Packit Service a9274b
	}
Packit Service a9274b
	if ((err = snd_ctl_elem_list_alloc_space(clist, snd_ctl_elem_list_get_count(clist))) < 0) {
Packit Service a9274b
		error("snd_ctl_elem_list_alloc_space", err);
Packit Service a9274b
		return 1;
Packit Service a9274b
	}
Packit Service a9274b
	if ((err = snd_ctl_elem_list(ctl, clist)) < 0) {
Packit Service a9274b
		error("snd_ctl_elem_list", err);
Packit Service a9274b
		return 1;
Packit Service a9274b
	}
Packit Service a9274b
Packit Service a9274b
	controls = snd_ctl_elem_list_get_used(clist);
Packit Service a9274b
	for (cidx = 0; cidx < controls; cidx++) {
Packit Service a9274b
		if (!strcmp(snd_ctl_elem_list_get_name(clist, cidx), spdif_str))
Packit Service a9274b
			if (spdif_index < 0 ||
Packit Service a9274b
			    snd_ctl_elem_list_get_index(clist, cidx) == spdif_index)
Packit Service a9274b
				break;
Packit Service a9274b
	}
Packit Service a9274b
	if (cidx >= controls) {
Packit Service a9274b
		fprintf(stderr, "control \"%s\" (index %d) not found\n",
Packit Service a9274b
			spdif_str, spdif_index);
Packit Service a9274b
		return 1;
Packit Service a9274b
	}
Packit Service a9274b
Packit Service a9274b
	snd_ctl_elem_id_alloca(&cid;;
Packit Service a9274b
	snd_ctl_elem_list_get_id(clist, cidx, cid);
Packit Service a9274b
	snd_ctl_elem_value_alloca(&cval);
Packit Service a9274b
	snd_ctl_elem_value_set_id(cval, cid);
Packit Service a9274b
	if ((err = snd_ctl_elem_read(ctl, cval)) < 0) {
Packit Service a9274b
		error("snd_ctl_elem_read", err);
Packit Service a9274b
		return 1;
Packit Service a9274b
	}
Packit Service a9274b
Packit Service a9274b
	snd_ctl_elem_value_get_iec958(cval, &iec958);
Packit Service a9274b
Packit Service a9274b
	/* parse from stdin */
Packit Service a9274b
	if (from_stdin)
Packit Service a9274b
		parse_file(parms, stdin);
Packit Service a9274b
Packit Service a9274b
	/* parse commands */
Packit Service a9274b
	for (c = optind; c < argc - 1; c += 2)
Packit Service a9274b
		parse_command(parms, argv[c], argv[c + 1]);
Packit Service a9274b
Packit Service a9274b
	if (update_iec958_status(&iec958, parms)) {
Packit Service a9274b
		/* store the values */
Packit Service a9274b
		snd_ctl_elem_value_set_iec958(cval, &iec958);
Packit Service a9274b
		if ((err = snd_ctl_elem_write(ctl, cval)) < 0) {
Packit Service a9274b
			error("snd_ctl_elem_write", err);
Packit Service a9274b
			return 1;
Packit Service a9274b
		}
Packit Service a9274b
		if ((err = snd_ctl_elem_read(ctl, cval)) < 0) {
Packit Service a9274b
			error("snd_ctl_elem_write", err);
Packit Service a9274b
			return 1;
Packit Service a9274b
		}
Packit Service a9274b
		snd_ctl_elem_value_get_iec958(cval, &iec958);
Packit Service a9274b
	}
Packit Service a9274b
Packit Service a9274b
	if (dumphex)
Packit Service a9274b
		printf("AES0=0x%02x,AES1=0x%02x,AES2=0x%02x,AES3=0x%02x\n",
Packit Service a9274b
		       iec958.status[0], iec958.status[1], iec958.status[2], iec958.status[3]);
Packit Service a9274b
	else
Packit Service a9274b
		dump_iec958(&iec958);
Packit Service a9274b
Packit Service a9274b
	snd_ctl_close(ctl);
Packit Service a9274b
	return 0;
Packit Service a9274b
}