diff options
author | Mark Farrugia <mark.farrugia@fiberdyne.com.au> | 2018-09-03 15:53:54 +1000 |
---|---|---|
committer | Mark Farrugia <mark.farrugia@fiberdyne.com.au> | 2018-10-26 17:27:30 +1100 |
commit | a0213245df08e8eb2f3316e924539af216a95599 (patch) | |
tree | 92ca41ef849b702c73b29f0cacfc2a57f1ce58cc | |
parent | f7f995a28c82c126619858ed40b92b5f33ddf2fe (diff) |
Remove the unnecessary allocation of substreams in avirt_alsa_dev_group
Substreams are actually allocated by the PCM middle layer, so we do not need to do this here
Signed-off-by: Mark Farrugia <mark.farrugia@fiberdyne.com.au>
-rw-r--r-- | alsa-pcm.c | 9 | ||||
-rwxr-xr-x | alsa.c | 52 | ||||
-rwxr-xr-x | alsa.h | 10 |
3 files changed, 2 insertions, 69 deletions
@@ -230,18 +230,9 @@ static int pcm_prepare(struct snd_pcm_substream *substream) */ static int pcm_trigger(struct snd_pcm_substream *substream, int cmd) { - struct avirt_alsa_dev_group *group; - - DINFO(AP_LOGNAME, ""); - - group = avirt_alsa_get_dev_group(substream->stream); - CHK_NULL(group); - switch (cmd) { case SNDRV_PCM_TRIGGER_START: case SNDRV_PCM_TRIGGER_RESUME: - group->streams[substream->pcm->device].substream = substream; - break; case SNDRV_PCM_TRIGGER_STOP: case SNDRV_PCM_TRIGGER_SUSPEND: break; @@ -79,31 +79,6 @@ static int alloc_dev_config(struct avirt_alsa_dev_config **devconfig, return 0; } -/** - * alloc_dev_streams - Initializes ALSA device substream buffers - * @return: 0 on success or error code otherwise - */ -static int alloc_dev_streams(struct avirt_alsa_dev_config *config, - struct avirt_alsa_stream **streams, - unsigned numdevices) -{ - unsigned i; - - if (numdevices == 0) - return 0; - - *streams = kzalloc(sizeof(struct avirt_alsa_stream) * numdevices, - GFP_KERNEL); - - if (!(*streams)) - return -EFAULT; - - for (i = 0; i < numdevices; i++) - (*streams)[i].hw_frame_idx = 0; - - return 0; -} - struct avirt_alsa_dev_group *avirt_alsa_get_dev_group(int direction) { if (!_driver) { @@ -155,8 +130,6 @@ int avirt_alsa_configure_pcm(struct avirt_alsa_dev_config *config, group->devices = numdevices; - CHK_ERR(alloc_dev_streams(group->config, &group->streams, - group->devices)); return 0; } @@ -207,12 +180,8 @@ int avirt_alsa_deregister(void) snd_card_free(_driver->card); CHK_NULL(_driver->playback.config); kfree(_driver->playback.config); - CHK_NULL(_driver->playback.streams); - kfree(_driver->playback.streams); CHK_NULL(_driver->capture.config); kfree(_driver->capture.config); - CHK_NULL(_driver->capture.streams); - kfree(_driver->capture.streams); CHK_NULL(_driver); kfree(_driver); @@ -229,27 +198,8 @@ int avirt_alsa_deregister(void) */ int pcm_buff_complete_cb(struct snd_pcm_substream *substream) { - int maxframe, deviceid; - struct avirt_audiopath *audiopath; - struct avirt_alsa_dev_group *group; - - deviceid = substream->pcm->device; - - group = avirt_alsa_get_dev_group(substream->stream); - CHK_NULL(group); - - audiopath = avirt_get_current_audiopath(); - CHK_NULL_V(audiopath, "Cannot find Audio Path!"); - - group->streams[deviceid].hw_frame_idx += audiopath->blocksize; - maxframe = audiopath->blocksize * audiopath->hw->periods_max; - - // Once the index reaches the DMA buffer boundary, reset it to 0 - if (group->streams[deviceid].hw_frame_idx >= maxframe) - group->streams[deviceid].hw_frame_idx = 0; - // Notify ALSA middle layer of the elapsed period boundary - snd_pcm_period_elapsed(group->streams[deviceid].substream); + snd_pcm_period_elapsed(substream); return 0; } @@ -11,6 +11,7 @@ #define __AVIRT_ALSA_H__ #include <linux/platform_device.h> +#include <sound/pcm.h> #define MAX_NAME_LEN 32 @@ -54,19 +55,10 @@ struct avirt_alsa_dev_config { }; /** - * Stream maintainance - */ -struct avirt_alsa_stream { - int hw_frame_idx; - struct snd_pcm_substream *substream; -}; - -/** * Collection of devices */ struct avirt_alsa_dev_group { struct avirt_alsa_dev_config *config; - struct avirt_alsa_stream *streams; int devices; int buffersize; }; |