Release 4.11 sound/arm/pxa2xx-pcm.c
/*
* linux/sound/arm/pxa2xx-pcm.c -- ALSA PCM interface for the Intel PXA2xx chip
*
* Author: Nicolas Pitre
* Created: Nov 30, 2004
* Copyright: (C) 2004 MontaVista Software, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <linux/module.h>
#include <linux/dma-mapping.h>
#include <linux/dmaengine.h>
#include <mach/dma.h>
#include <sound/core.h>
#include <sound/pxa2xx-lib.h>
#include <sound/dmaengine_pcm.h>
#include "pxa2xx-pcm.h"
static int pxa2xx_pcm_prepare(struct snd_pcm_substream *substream)
{
struct pxa2xx_pcm_client *client = substream->private_data;
__pxa2xx_pcm_prepare(substream);
return client->prepare(substream);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Takashi Iwai | 27 | 81.82% | 2 | 66.67% |
Dmitry Baryshkov | 6 | 18.18% | 1 | 33.33% |
Total | 33 | 100.00% | 3 | 100.00% |
static int pxa2xx_pcm_open(struct snd_pcm_substream *substream)
{
struct pxa2xx_pcm_client *client = substream->private_data;
struct snd_pcm_runtime *runtime = substream->runtime;
struct pxa2xx_runtime_data *rtd;
int ret;
ret = __pxa2xx_pcm_open(substream);
if (ret)
goto out;
rtd = runtime->private_data;
rtd->params = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) ?
client->playback_params : client->capture_params;
ret = client->startup(substream);
if (!ret)
goto err2;
return 0;
err2:
__pxa2xx_pcm_close(substream);
out:
return ret;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Takashi Iwai | 91 | 83.49% | 2 | 50.00% |
Dmitry Baryshkov | 14 | 12.84% | 1 | 25.00% |
Daniel Mack | 4 | 3.67% | 1 | 25.00% |
Total | 109 | 100.00% | 4 | 100.00% |
static int pxa2xx_pcm_close(struct snd_pcm_substream *substream)
{
struct pxa2xx_pcm_client *client = substream->private_data;
client->shutdown(substream);
return __pxa2xx_pcm_close(substream);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Takashi Iwai | 32 | 96.97% | 2 | 66.67% |
Dmitry Baryshkov | 1 | 3.03% | 1 | 33.33% |
Total | 33 | 100.00% | 3 | 100.00% |
static struct snd_pcm_ops pxa2xx_pcm_ops = {
.open = pxa2xx_pcm_open,
.close = pxa2xx_pcm_close,
.ioctl = snd_pcm_lib_ioctl,
.hw_params = __pxa2xx_pcm_hw_params,
.hw_free = __pxa2xx_pcm_hw_free,
.prepare = pxa2xx_pcm_prepare,
.trigger = pxa2xx_pcm_trigger,
.pointer = pxa2xx_pcm_pointer,
.mmap = pxa2xx_pcm_mmap,
};
int pxa2xx_pcm_new(struct snd_card *card, struct pxa2xx_pcm_client *client,
struct snd_pcm **rpcm)
{
struct snd_pcm *pcm;
int play = client->playback_params ? 1 : 0;
int capt = client->capture_params ? 1 : 0;
int ret;
ret = snd_pcm_new(card, "PXA2xx-PCM", 0, play, capt, &pcm);
if (ret)
goto out;
pcm->private_data = client;
pcm->private_free = pxa2xx_pcm_free_dma_buffers;
ret = dma_coerce_mask_and_coherent(card->dev, DMA_BIT_MASK(32));
if (ret)
goto out;
if (play) {
int stream = SNDRV_PCM_STREAM_PLAYBACK;
snd_pcm_set_ops(pcm, stream, &pxa2xx_pcm_ops);
ret = pxa2xx_pcm_preallocate_dma_buffer(pcm, stream);
if (ret)
goto out;
}
if (capt) {
int stream = SNDRV_PCM_STREAM_CAPTURE;
snd_pcm_set_ops(pcm, stream, &pxa2xx_pcm_ops);
ret = pxa2xx_pcm_preallocate_dma_buffer(pcm, stream);
if (ret)
goto out;
}
if (rpcm)
*rpcm = pcm;
ret = 0;
out:
return ret;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Takashi Iwai | 187 | 93.03% | 2 | 66.67% |
Russell King | 14 | 6.97% | 1 | 33.33% |
Total | 201 | 100.00% | 3 | 100.00% |
EXPORT_SYMBOL(pxa2xx_pcm_new);
MODULE_AUTHOR("Nicolas Pitre");
MODULE_DESCRIPTION("Intel PXA2xx PCM DMA module");
MODULE_LICENSE("GPL");
Overall Contributors
Person | Tokens | Prop | Commits | CommitProp |
Takashi Iwai | 416 | 87.95% | 2 | 25.00% |
Dmitry Baryshkov | 24 | 5.07% | 1 | 12.50% |
Russell King | 17 | 3.59% | 1 | 12.50% |
Daniel Mack | 10 | 2.11% | 2 | 25.00% |
Paul Gortmaker | 3 | 0.63% | 1 | 12.50% |
Arnd Bergmann | 3 | 0.63% | 1 | 12.50% |
Total | 473 | 100.00% | 8 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.