123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- 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;
|