1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * SiRF Audio port driver
5 * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company.
7 #include <linux/module.h>
9 #include <sound/dmaengine_pcm.h>
11 struct sirf_audio_port
{
12 struct regmap
*regmap
;
13 struct snd_dmaengine_dai_dma_data playback_dma_data
;
14 struct snd_dmaengine_dai_dma_data capture_dma_data
;
18 static int sirf_audio_port_dai_probe(struct snd_soc_dai
*dai
)
20 struct sirf_audio_port
*port
= snd_soc_dai_get_drvdata(dai
);
22 snd_soc_dai_init_dma_data(dai
, &port
->playback_dma_data
,
23 &port
->capture_dma_data
);
27 static struct snd_soc_dai_driver sirf_audio_port_dai
= {
28 .probe
= sirf_audio_port_dai_probe
,
29 .name
= "sirf-audio-port",
34 .rates
= SNDRV_PCM_RATE_48000
,
35 .formats
= SNDRV_PCM_FMTBIT_S16_LE
,
40 .rates
= SNDRV_PCM_RATE_48000
,
41 .formats
= SNDRV_PCM_FMTBIT_S16_LE
,
45 static const struct snd_soc_component_driver sirf_audio_port_component
= {
46 .name
= "sirf-audio-port",
49 static int sirf_audio_port_probe(struct platform_device
*pdev
)
52 struct sirf_audio_port
*port
;
54 port
= devm_kzalloc(&pdev
->dev
,
55 sizeof(struct sirf_audio_port
), GFP_KERNEL
);
59 ret
= devm_snd_soc_register_component(&pdev
->dev
,
60 &sirf_audio_port_component
, &sirf_audio_port_dai
, 1);
64 platform_set_drvdata(pdev
, port
);
65 return devm_snd_dmaengine_pcm_register(&pdev
->dev
, NULL
, 0);
68 static const struct of_device_id sirf_audio_port_of_match
[] = {
69 { .compatible
= "sirf,audio-port", },
72 MODULE_DEVICE_TABLE(of
, sirf_audio_port_of_match
);
74 static struct platform_driver sirf_audio_port_driver
= {
76 .name
= "sirf-audio-port",
77 .of_match_table
= sirf_audio_port_of_match
,
79 .probe
= sirf_audio_port_probe
,
82 module_platform_driver(sirf_audio_port_driver
);
84 MODULE_DESCRIPTION("SiRF Audio Port driver");
85 MODULE_AUTHOR("RongJun Ying <Rongjun.Ying@csr.com>");
86 MODULE_LICENSE("GPL v2");