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 18 static const struct snd_soc_dapm_widget bt_sco_widgets[] = { 19 SND_SOC_DAPM_INPUT("RX"), 20 SND_SOC_DAPM_OUTPUT("TX"), 21 }; 22 23 static const struct snd_soc_dapm_route bt_sco_routes[] = { 24 { "Capture", NULL, "RX" }, 25 { "TX", NULL, "Playback" }, 26 }; 27 28 static struct snd_soc_dai_driver bt_sco_dai = { 29 .name = "bt-sco-pcm", 30 .playback = { 31 .stream_name = "Playback", 32 .channels_min = 1, 33 .channels_max = 1, 34 .rates = SNDRV_PCM_RATE_8000, 35 .formats = SNDRV_PCM_FMTBIT_S16_LE, 36 }, 37 .capture = { 38 .stream_name = "Capture", 39 .channels_min = 1, 40 .channels_max = 1, 41 .rates = SNDRV_PCM_RATE_8000, 42 .formats = SNDRV_PCM_FMTBIT_S16_LE, 43 }, 44 }; 45 46 static struct snd_soc_codec_driver soc_codec_dev_bt_sco = { 47 .dapm_widgets = bt_sco_widgets, 48 .num_dapm_widgets = ARRAY_SIZE(bt_sco_widgets), 49 .dapm_routes = bt_sco_routes, 50 .num_dapm_routes = ARRAY_SIZE(bt_sco_routes), 51 }; 52 53 static int bt_sco_probe(struct platform_device *pdev) 54 { 55 return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_bt_sco, 56 &bt_sco_dai, 1); 57 } 58 59 static int bt_sco_remove(struct platform_device *pdev) 60 { 61 snd_soc_unregister_codec(&pdev->dev); 62 63 return 0; 64 } 65 66 static const struct platform_device_id bt_sco_driver_ids[] = { 67 { 68 .name = "dfbmcs320", 69 }, 70 { 71 .name = "bt-sco", 72 }, 73 {}, 74 }; 75 MODULE_DEVICE_TABLE(platform, bt_sco_driver_ids); 76 77 #if defined(CONFIG_OF) 78 static const struct of_device_id bt_sco_codec_of_match[] = { 79 { .compatible = "delta,dfbmcs320", }, 80 {}, 81 }; 82 MODULE_DEVICE_TABLE(of, bt_sco_codec_of_match); 83 #endif 84 85 static struct platform_driver bt_sco_driver = { 86 .driver = { 87 .name = "bt-sco", 88 .of_match_table = of_match_ptr(bt_sco_codec_of_match), 89 }, 90 .probe = bt_sco_probe, 91 .remove = bt_sco_remove, 92 .id_table = bt_sco_driver_ids, 93 }; 94 95 module_platform_driver(bt_sco_driver); 96 97 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>"); 98 MODULE_DESCRIPTION("ASoC generic bluetooth sco link driver"); 99 MODULE_LICENSE("GPL"); 100