linux/sound/soc/codecs/bt-sco.c
<<
>>
Prefs
   1/*
   2 * Driver for generic Bluetooth SCO link
   3 * Copyright 2011 Lars-Peter Clausen <lars@metafoo.de>
   4 *
   5 *  This program is free software; you can redistribute  it and/or modify it
   6 *  under  the terms of  the GNU General  Public License as published by the
   7 *  Free Software Foundation;  either version 2 of the  License, or (at your
   8 *  option) any later version.
   9 *
  10 */
  11
  12#include <linux/init.h>
  13#include <linux/module.h>
  14#include <linux/platform_device.h>
  15
  16#include <sound/soc.h>
  17
  18static const struct snd_soc_dapm_widget bt_sco_widgets[] = {
  19        SND_SOC_DAPM_INPUT("RX"),
  20        SND_SOC_DAPM_OUTPUT("TX"),
  21};
  22
  23static const struct snd_soc_dapm_route bt_sco_routes[] = {
  24        { "Capture", NULL, "RX" },
  25        { "TX", NULL, "Playback" },
  26};
  27
  28static struct snd_soc_dai_driver bt_sco_dai[] = {
  29        {
  30                .name = "bt-sco-pcm",
  31                .playback = {
  32                        .stream_name = "Playback",
  33                        .channels_min = 1,
  34                        .channels_max = 1,
  35                        .rates = SNDRV_PCM_RATE_8000,
  36                        .formats = SNDRV_PCM_FMTBIT_S16_LE,
  37                },
  38                .capture = {
  39                         .stream_name = "Capture",
  40                        .channels_min = 1,
  41                        .channels_max = 1,
  42                        .rates = SNDRV_PCM_RATE_8000,
  43                        .formats = SNDRV_PCM_FMTBIT_S16_LE,
  44                },
  45        },
  46        {
  47                .name = "bt-sco-pcm-wb",
  48                .playback = {
  49                        .stream_name = "Playback",
  50                        .channels_min = 1,
  51                        .channels_max = 1,
  52                        .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000,
  53                        .formats = SNDRV_PCM_FMTBIT_S16_LE,
  54                },
  55                .capture = {
  56                         .stream_name = "Capture",
  57                        .channels_min = 1,
  58                        .channels_max = 1,
  59                        .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000,
  60                        .formats = SNDRV_PCM_FMTBIT_S16_LE,
  61                },
  62        }
  63};
  64
  65static const struct snd_soc_codec_driver soc_codec_dev_bt_sco = {
  66        .component_driver = {
  67                .dapm_widgets           = bt_sco_widgets,
  68                .num_dapm_widgets       = ARRAY_SIZE(bt_sco_widgets),
  69                .dapm_routes            = bt_sco_routes,
  70                .num_dapm_routes        = ARRAY_SIZE(bt_sco_routes),
  71        },
  72};
  73
  74static int bt_sco_probe(struct platform_device *pdev)
  75{
  76        return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_bt_sco,
  77                                      bt_sco_dai, ARRAY_SIZE(bt_sco_dai));
  78}
  79
  80static int bt_sco_remove(struct platform_device *pdev)
  81{
  82        snd_soc_unregister_codec(&pdev->dev);
  83
  84        return 0;
  85}
  86
  87static const struct platform_device_id bt_sco_driver_ids[] = {
  88        {
  89                .name           = "dfbmcs320",
  90        },
  91        {
  92                .name           = "bt-sco",
  93        },
  94        {},
  95};
  96MODULE_DEVICE_TABLE(platform, bt_sco_driver_ids);
  97
  98#if defined(CONFIG_OF)
  99static const struct of_device_id bt_sco_codec_of_match[] = {
 100        { .compatible = "delta,dfbmcs320", },
 101        { .compatible = "linux,bt-sco", },
 102        {},
 103};
 104MODULE_DEVICE_TABLE(of, bt_sco_codec_of_match);
 105#endif
 106
 107static struct platform_driver bt_sco_driver = {
 108        .driver = {
 109                .name = "bt-sco",
 110                .of_match_table = of_match_ptr(bt_sco_codec_of_match),
 111        },
 112        .probe = bt_sco_probe,
 113        .remove = bt_sco_remove,
 114        .id_table = bt_sco_driver_ids,
 115};
 116
 117module_platform_driver(bt_sco_driver);
 118
 119MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
 120MODULE_DESCRIPTION("ASoC generic bluetooth sco link driver");
 121MODULE_LICENSE("GPL");
 122