[alsa-devel] [PATCH v5 4/4] ASoC: SAMSUNG: Add I2S0 internal dma driver
Jassi Brar
jassisinghbrar at gmail.com
Wed Jul 13 07:41:44 CEST 2011
On Wed, Jul 13, 2011 at 8:38 AM, Seungwhan Youn <claude.youn at gmail.com> wrote:
> Hi,
>
> On Wed, Jul 13, 2011 at 10:25 AM, Sangbeom Kim <sbkim73 at samsung.com> wrote:
>> I2S in Exynos4 and S5PC110(S5PV210) has a internal dma.
>> It can be used low power audio mode and 2nd channel transfer.
>> This patch can support idma.
>>
>> Signed-off-by: Sangbeom Kim <sbkim73 at samsung.com>
>> ---
>> V2: change idma_new by new pcm_new api
>> add handling different idma address
>> as jassi comments, Modify the idma driver
>>
>> V3: merge idma_reg_int and idma_addr_init
>>
>> V4: move idma setting in i2s.c to idma_hw_params in idma.c
>> move idma_reg_addr_init calling
>> modify idma address handling error
>> modify module information
>> delete useless dev_dbg
>>
>> V5: delete redundant error print and check routine
>> modify irq handler as jassi comment
>> fix the indent error
>>
>> sound/soc/samsung/Makefile | 2 +
>> sound/soc/samsung/idma.c | 453 ++++++++++++++++++++++++++++++++++++++++++++
>> sound/soc/samsung/idma.h | 26 +++
>> 3 files changed, 481 insertions(+), 0 deletions(-)
>> create mode 100644 sound/soc/samsung/idma.c
>> create mode 100644 sound/soc/samsung/idma.h
>>
>> diff --git a/sound/soc/samsung/Makefile b/sound/soc/samsung/Makefile
>> index 00ba557..41becdd 100644
>> --- a/sound/soc/samsung/Makefile
>> +++ b/sound/soc/samsung/Makefile
>> @@ -1,5 +1,6 @@
>> # S3c24XX Platform Support
>> snd-soc-s3c24xx-objs := dma.o
>> +snd-soc-idma-objs := idma.o
>> snd-soc-s3c24xx-i2s-objs := s3c24xx-i2s.o
>> snd-soc-s3c2412-i2s-objs := s3c2412-i2s.o
>> snd-soc-ac97-objs := ac97.o
>> @@ -16,6 +17,7 @@ obj-$(CONFIG_SND_S3C_I2SV2_SOC) += snd-soc-s3c-i2s-v2.o
>> obj-$(CONFIG_SND_SAMSUNG_SPDIF) += snd-soc-samsung-spdif.o
>> obj-$(CONFIG_SND_SAMSUNG_PCM) += snd-soc-pcm.o
>> obj-$(CONFIG_SND_SAMSUNG_I2S) += snd-soc-i2s.o
>> +obj-$(CONFIG_SND_SAMSUNG_I2S) += snd-soc-idma.o
>>
>> # S3C24XX Machine Support
>> snd-soc-jive-wm8750-objs := jive_wm8750.o
>> diff --git a/sound/soc/samsung/idma.c b/sound/soc/samsung/idma.c
>> new file mode 100644
>> index 0000000..ebde074
>> --- /dev/null
>> +++ b/sound/soc/samsung/idma.c
>> @@ -0,0 +1,453 @@
>> +/*
>> + * sound/soc/samsung/idma.c
>> + *
>> + * Copyright (c) 2011 Samsung Electronics Co., Ltd.
>> + * http://www.samsung.com
>> + *
>> + * I2S0's Internal DMA driver
>> + *
>> + * This program is free software; you can redistribute it and/or modify it
>> + * under the terms of the GNU General Public License as published by the
>> + * Free Software Foundation; either version 2 of the License, or (at your
>> + * option) any later version.
>> + */
>> +#include <linux/interrupt.h>
>> +#include <linux/platform_device.h>
>> +#include <linux/dma-mapping.h>
>> +#include <linux/slab.h>
>> +#include <sound/pcm.h>
>> +#include <sound/pcm_params.h>
>> +#include <sound/soc.h>
>> +
>> +#include "i2s.h"
>> +#include "idma.h"
>> +#include "dma.h"
>> +#include "i2s-regs.h"
>> +
>> +#define ST_RUNNING (1<<0)
>> +#define ST_OPENED (1<<1)
>> +
>> +static const struct snd_pcm_hardware idma_hardware = {
>> + .info = SNDRV_PCM_INFO_INTERLEAVED |
>> + SNDRV_PCM_INFO_BLOCK_TRANSFER |
>> + SNDRV_PCM_INFO_MMAP |
>> + SNDRV_PCM_INFO_MMAP_VALID |
>> + SNDRV_PCM_INFO_PAUSE |
>> + SNDRV_PCM_INFO_RESUME,
>> + .formats = SNDRV_PCM_FMTBIT_S16_LE |
>> + SNDRV_PCM_FMTBIT_U16_LE |
>> + SNDRV_PCM_FMTBIT_S24_LE |
>> + SNDRV_PCM_FMTBIT_U24_LE |
>> + SNDRV_PCM_FMTBIT_U8 |
>> + SNDRV_PCM_FMTBIT_S8,
>> + .channels_min = 2,
>> + .channels_max = 2,
>> + .buffer_bytes_max = MAX_IDMA_BUFFER,
>> + .period_bytes_min = 128,
>> + .period_bytes_max = MAX_IDMA_PERIOD,
>
> In this case, MAX_IDMA_BUFFER is 160k and MAX_IDMA_PERIOD is 128k,
> buffer is not twice of period. If you set like this, many of general
> ALSA applications return error on initial buffers.
I don't think so. Did you see any such problem ?
In my opnion, ALSA will always use 2 periods of approx. MAX_IDMA_BUFFER/2 bytes
More information about the Alsa-devel
mailing list