You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.0 KiB
63 lines
2.0 KiB
From 35ac836d7cbe42c15b8823b38abff66efc88806c Mon Sep 17 00:00:00 2001
|
|
From: Matthias Reichl <hias@horus.com>
|
|
Date: Sun, 11 Oct 2015 15:35:20 +0200
|
|
Subject: [PATCH] bcm2835-i2s: Register PCM device
|
|
|
|
Code ported from bcm2708-i2s driver in Raspberry Pi tree.
|
|
|
|
RPi commit ba46b4935a23aa2caac1855ead52a035d4776680 ("ASoC: Add
|
|
support for BCM2708")
|
|
|
|
This driver adds support for digital audio (I2S)
|
|
for the BCM2708 SoC that is used by the
|
|
Raspberry Pi. External audio codecs can be
|
|
connected to the Raspberry Pi via P5 header.
|
|
|
|
It relies on cyclic DMA engine support for BCM2708.
|
|
|
|
Signed-off-by: Florian Meier <florian.meier@koalo.de>
|
|
|
|
Signed-off-by: Matthias Reichl <hias@horus.com>
|
|
---
|
|
sound/soc/bcm/bcm2835-i2s.c | 23 ++++++++++++++++++++++-
|
|
1 file changed, 22 insertions(+), 1 deletion(-)
|
|
|
|
--- a/sound/soc/bcm/bcm2835-i2s.c
|
|
+++ b/sound/soc/bcm/bcm2835-i2s.c
|
|
@@ -799,6 +799,25 @@ static const struct snd_soc_component_dr
|
|
.name = "bcm2835-i2s-comp",
|
|
};
|
|
|
|
+static const struct snd_pcm_hardware bcm2835_pcm_hardware = {
|
|
+ .info = SNDRV_PCM_INFO_INTERLEAVED |
|
|
+ SNDRV_PCM_INFO_JOINT_DUPLEX,
|
|
+ .formats = SNDRV_PCM_FMTBIT_S16_LE |
|
|
+ SNDRV_PCM_FMTBIT_S24_LE |
|
|
+ SNDRV_PCM_FMTBIT_S32_LE,
|
|
+ .period_bytes_min = 32,
|
|
+ .period_bytes_max = 64 * PAGE_SIZE,
|
|
+ .periods_min = 2,
|
|
+ .periods_max = 255,
|
|
+ .buffer_bytes_max = 128 * PAGE_SIZE,
|
|
+};
|
|
+
|
|
+static const struct snd_dmaengine_pcm_config bcm2835_dmaengine_pcm_config = {
|
|
+ .prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
|
|
+ .pcm_hardware = &bcm2835_pcm_hardware,
|
|
+ .prealloc_buffer_size = 256 * PAGE_SIZE,
|
|
+};
|
|
+
|
|
static int bcm2835_i2s_probe(struct platform_device *pdev)
|
|
{
|
|
struct bcm2835_i2s_dev *dev;
|
|
@@ -870,7 +889,9 @@ static int bcm2835_i2s_probe(struct plat
|
|
return ret;
|
|
}
|
|
|
|
- ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
|
|
+ ret = devm_snd_dmaengine_pcm_register(&pdev->dev,
|
|
+ &bcm2835_dmaengine_pcm_config,
|
|
+ SND_DMAENGINE_PCM_FLAG_COMPAT);
|
|
if (ret) {
|
|
dev_err(&pdev->dev, "Could not register PCM: %d\n", ret);
|
|
return ret;
|
|
|