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