1/* 2 * SiRF Audio port driver 3 * 4 * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company. 5 * 6 * Licensed under GPLv2 or later. 7 */ 8#include <linux/module.h> 9#include <sound/soc.h> 10#include <sound/dmaengine_pcm.h> 11 12struct sirf_audio_port { 13 struct regmap *regmap; 14 struct snd_dmaengine_dai_dma_data playback_dma_data; 15 struct snd_dmaengine_dai_dma_data capture_dma_data; 16}; 17 18 19static int sirf_audio_port_dai_probe(struct snd_soc_dai *dai) 20{ 21 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); 24 return 0; 25} 26 27static struct snd_soc_dai_driver sirf_audio_port_dai = { 28 .probe = sirf_audio_port_dai_probe, 29 .name = "sirf-audio-port", 30 .id = 0, 31 .playback = { 32 .channels_min = 2, 33 .channels_max = 2, 34 .rates = SNDRV_PCM_RATE_48000, 35 .formats = SNDRV_PCM_FMTBIT_S16_LE, 36 }, 37 .capture = { 38 .channels_min = 1, 39 .channels_max = 2, 40 .rates = SNDRV_PCM_RATE_48000, 41 .formats = SNDRV_PCM_FMTBIT_S16_LE, 42 }, 43}; 44 45static const struct snd_soc_component_driver sirf_audio_port_component = { 46 .name = "sirf-audio-port", 47}; 48 49static int sirf_audio_port_probe(struct platform_device *pdev) 50{ 51 int ret; 52 struct sirf_audio_port *port; 53 54 port = devm_kzalloc(&pdev->dev, 55 sizeof(struct sirf_audio_port), GFP_KERNEL); 56 if (!port) 57 return -ENOMEM; 58 59 ret = devm_snd_soc_register_component(&pdev->dev, 60 &sirf_audio_port_component, &sirf_audio_port_dai, 1); 61 if (ret) 62 return ret; 63 64 platform_set_drvdata(pdev, port); 65 return devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0); 66} 67 68static const struct of_device_id sirf_audio_port_of_match[] = { 69 { .compatible = "sirf,audio-port", }, 70 {} 71}; 72MODULE_DEVICE_TABLE(of, sirf_audio_port_of_match); 73 74static struct platform_driver sirf_audio_port_driver = { 75 .driver = { 76 .name = "sirf-audio-port", 77 .of_match_table = sirf_audio_port_of_match, 78 }, 79 .probe = sirf_audio_port_probe, 80}; 81 82module_platform_driver(sirf_audio_port_driver); 83 84MODULE_DESCRIPTION("SiRF Audio Port driver"); 85MODULE_AUTHOR("RongJun Ying <Rongjun.Ying@csr.com>"); 86MODULE_LICENSE("GPL v2"); 87