diff options
author | Mark Farrugia <mark.farrugia@fiberdyne.com.au> | 2019-02-01 12:16:41 +1100 |
---|---|---|
committer | Mark Farrugia <mark.farrugia@fiberdyne.com.au> | 2019-02-01 12:17:54 +1100 |
commit | 04f715a78dbd11d81f3055c19f53f0af3794b72f (patch) | |
tree | 324447cf933d40df17e6dcdafbe6f29d63c57493 | |
parent | e3d18ca279933147d0f2336fd3356958e18d133b (diff) |
Update card_seal()
- No need to sleep to wait for card register, this now occurs at
kernel module load time.
- Can use snd_avirt_card_index_get to retrieve the card index,
if not already retrieved.
Signed-off-by: Mark Farrugia <mark.farrugia@fiberdyne.com.au>
-rw-r--r-- | src/avirt-config.c | 34 |
1 files changed, 7 insertions, 27 deletions
diff --git a/src/avirt-config.c b/src/avirt-config.c index 491249e..7a993ad 100644 --- a/src/avirt-config.c +++ b/src/avirt-config.c @@ -1,6 +1,6 @@ /* * Application interface library for the AVIRT driver - * + * * avirt-config.c - Main AVIRT configuration via configfs * * Copyright (C) 2018 Fiberdyne Systems Pty Ltd @@ -128,7 +128,7 @@ static int mount_configfs() // Check whether /config dir exists, if not, create it if (stat("/config", &st) == -1) mkdir("/config", S_IRWXU | S_IRWXG | S_IRWXO); - + err = mount("none", "/config", "configfs", 0, NULL); if (!err) { @@ -369,8 +369,6 @@ int snd_avirt_stream_new(const char *name, unsigned int channels, int direction, int snd_avirt_card_seal() { - int open_dev, err = 0; - snd_ctl_card_info_t *card_info; char path_sealed[AVIRT_CONFIGFS_PATH_MAXLEN]; // Check if card is already sealed @@ -389,31 +387,13 @@ int snd_avirt_card_seal() AVIRT_DEBUG("Card sealed!"); card_sealed = true; - usleep(20000); // Need to wait for the snd card to be registered - - // Get card index for AVIRT, now that it is registered - open_dev = open(AVIRT_DEVICE_PATH, O_RDONLY); - if (open_dev < 0) - { - AVIRT_ERROR_V("Could not open device with path: %s", AVIRT_DEVICE_PATH); - err = -ENODEV; - goto exit_dev; - } + if (card_index < 0) + card_index = snd_avirt_card_index_get(0); + if (card_index < 0) + return card_index; - snd_ctl_card_info_alloca(&card_info); - err = ioctl(open_dev, - SNDRV_CTL_IOCTL_CARD_INFO(snd_ctl_card_info_sizeof()), - card_info); - if (err < 0) - { - AVIRT_ERROR("Could not ioctl card info for AVIRT"); - goto exit_dev; - } - card_index = snd_ctl_card_info_get_card(card_info); -exit_dev: - close(open_dev); - return err; + return 0; } |