mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 21:21:41 +00:00
ALSA: compress_core: Add support for capture streams
Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> Signed-off-by: Richard Fitzgerald <rf@opensource.wolfsonmicro.com> Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
4daf891cde
commit
49bb6402f1
@ -296,7 +296,41 @@ static ssize_t snd_compr_write(struct file *f, const char __user *buf,
|
|||||||
static ssize_t snd_compr_read(struct file *f, char __user *buf,
|
static ssize_t snd_compr_read(struct file *f, char __user *buf,
|
||||||
size_t count, loff_t *offset)
|
size_t count, loff_t *offset)
|
||||||
{
|
{
|
||||||
return -ENXIO;
|
struct snd_compr_file *data = f->private_data;
|
||||||
|
struct snd_compr_stream *stream;
|
||||||
|
size_t avail;
|
||||||
|
int retval;
|
||||||
|
|
||||||
|
if (snd_BUG_ON(!data))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
stream = &data->stream;
|
||||||
|
mutex_lock(&stream->device->lock);
|
||||||
|
|
||||||
|
/* read is allowed when stream is running */
|
||||||
|
if (stream->runtime->state != SNDRV_PCM_STATE_RUNNING) {
|
||||||
|
retval = -EBADFD;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
avail = snd_compr_get_avail(stream);
|
||||||
|
pr_debug("avail returned %ld\n", (unsigned long)avail);
|
||||||
|
/* calculate how much we can read from buffer */
|
||||||
|
if (avail > count)
|
||||||
|
avail = count;
|
||||||
|
|
||||||
|
if (stream->ops->copy) {
|
||||||
|
retval = stream->ops->copy(stream, buf, avail);
|
||||||
|
} else {
|
||||||
|
retval = -ENXIO;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
if (retval > 0)
|
||||||
|
stream->runtime->total_bytes_transferred += retval;
|
||||||
|
|
||||||
|
out:
|
||||||
|
mutex_unlock(&stream->device->lock);
|
||||||
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_compr_mmap(struct file *f, struct vm_area_struct *vma)
|
static int snd_compr_mmap(struct file *f, struct vm_area_struct *vma)
|
||||||
@ -481,9 +515,14 @@ snd_compr_set_params(struct snd_compr_stream *stream, unsigned long arg)
|
|||||||
retval = stream->ops->set_params(stream, params);
|
retval = stream->ops->set_params(stream, params);
|
||||||
if (retval)
|
if (retval)
|
||||||
goto out;
|
goto out;
|
||||||
stream->runtime->state = SNDRV_PCM_STATE_SETUP;
|
|
||||||
stream->metadata_set = false;
|
stream->metadata_set = false;
|
||||||
stream->next_track = false;
|
stream->next_track = false;
|
||||||
|
|
||||||
|
if (stream->direction == SND_COMPRESS_PLAYBACK)
|
||||||
|
stream->runtime->state = SNDRV_PCM_STATE_SETUP;
|
||||||
|
else
|
||||||
|
stream->runtime->state = SNDRV_PCM_STATE_PREPARED;
|
||||||
} else {
|
} else {
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user