diff mbox

[v2] ASoC: bt-sco: support wide band speech

Message ID 1416978538-3318-1-git-send-email-21cnbao@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Barry Song Nov. 26, 2014, 5:08 a.m. UTC
From: Yibo Cai <Yibo.Cai@csr.com>

HFP1.6 requires support for wide band speech(16KHz) over Bluetooth.

Signed-off-by: Yibo Cai <Yibo.Cai@csr.com>
Signed-off-by: Barry Song <Baohua.Song@csr.com>
---
 sound/soc/codecs/bt-sco.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

Comments

Lars-Peter Clausen Nov. 26, 2014, 11:30 a.m. UTC | #1
On 11/26/2014 06:08 AM, Barry Song wrote:
> From: Yibo Cai <Yibo.Cai@csr.com>
>
> HFP1.6 requires support for wide band speech(16KHz) over Bluetooth.
>
> Signed-off-by: Yibo Cai <Yibo.Cai@csr.com>
> Signed-off-by: Barry Song <Baohua.Song@csr.com>
> ---
>   sound/soc/codecs/bt-sco.c | 11 +++++++++++
>   1 file changed, 11 insertions(+)
>
> diff --git a/sound/soc/codecs/bt-sco.c b/sound/soc/codecs/bt-sco.c
> index c4cf069..3878491 100644
> --- a/sound/soc/codecs/bt-sco.c
> +++ b/sound/soc/codecs/bt-sco.c
> @@ -52,6 +52,14 @@ static struct snd_soc_codec_driver soc_codec_dev_bt_sco = {
>
>   static int bt_sco_probe(struct platform_device *pdev)
>   {
> +	const struct platform_device_id *id = platform_get_device_id(pdev);
> +
> +	/* Check wide band SCO(16KHz) support */
> +	if (id && (strcmp(id->name, "bt-sco-wb") == 0)) {

Use id->driver_data instead of strcmp.

> +		bt_sco_dai.playback.rates |= SNDRV_PCM_RATE_16000;
> +		bt_sco_dai.capture.rates |= SNDRV_PCM_RATE_16000;

This is modifying a driver global struct with device local data. This is a 
no-go. Either add second snd_soc_dai_driver with the new rates or add a 
startup callback and add the constraints using snd_pcm_hw_constraint_list().
Mark Brown Nov. 26, 2014, 4:38 p.m. UTC | #2
On Wed, Nov 26, 2014 at 12:30:45PM +0100, Lars-Peter Clausen wrote:

> This is modifying a driver global struct with device local data. This is a
> no-go. Either add second snd_soc_dai_driver with the new rates or add a
> startup callback and add the constraints using snd_pcm_hw_constraint_list().

Or copy into per-device data before modifying and registering.  Probably
the second snd_soc_dai_driver is the best option though.
diff mbox

Patch

diff --git a/sound/soc/codecs/bt-sco.c b/sound/soc/codecs/bt-sco.c
index c4cf069..3878491 100644
--- a/sound/soc/codecs/bt-sco.c
+++ b/sound/soc/codecs/bt-sco.c
@@ -52,6 +52,14 @@  static struct snd_soc_codec_driver soc_codec_dev_bt_sco = {
 
 static int bt_sco_probe(struct platform_device *pdev)
 {
+	const struct platform_device_id *id = platform_get_device_id(pdev);
+
+	/* Check wide band SCO(16KHz) support */
+	if (id && (strcmp(id->name, "bt-sco-wb") == 0)) {
+		bt_sco_dai.playback.rates |= SNDRV_PCM_RATE_16000;
+		bt_sco_dai.capture.rates |= SNDRV_PCM_RATE_16000;
+	}
+
 	return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_bt_sco,
 			&bt_sco_dai, 1);
 }
@@ -70,6 +78,9 @@  static struct platform_device_id bt_sco_driver_ids[] = {
 	{
 		.name		= "bt-sco",
 	},
+	{
+		.name		= "bt-sco-wb",
+	},
 	{},
 };
 MODULE_DEVICE_TABLE(platform, bt_sco_driver_ids);