Message ID | 1416978538-3318-1-git-send-email-21cnbao@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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().
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 --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);