linux/sound/soc/sirf/sirf-audio-port.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * SiRF Audio port driver
   4 *
   5 * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company.
   6 */
   7#include <linux/module.h>
   8#include <sound/soc.h>
   9#include <sound/dmaengine_pcm.h>
  10
  11struct 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;
  15};
  16
  17
  18static int sirf_audio_port_dai_probe(struct snd_soc_dai *dai)
  19{
  20        struct sirf_audio_port *port = snd_soc_dai_get_drvdata(dai);
  21
  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