diff options
| author | Satish Kodishala <skodisha@codeaurora.org> | 2017-05-18 20:11:20 +0530 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-05-21 20:25:22 -0700 |
| commit | e725fa7716e1d2bf266c29bffad0ef0ba45fec28 (patch) | |
| tree | 25cb56cddd8cdb65b5043d9c41964751ca580942 /drivers/bluetooth | |
| parent | 60be71604a84d2e047215cb702d6324379a353bb (diff) | |
btfm: Don't program multi channel registers in wcn3990 for SCO
For SCO use cases, we should not program multi chanel
registers. Programming this leading to silence randomly
in SCO Rx/Tx.
CRs-Fixed: 2048423
Change-Id: I5e41591fb81b5bd3cf9358819c0a62a5cfe60e13
Signed-off-by: Satish Kodishala <skodisha@codeaurora.org>
Diffstat (limited to 'drivers/bluetooth')
| -rw-r--r-- | drivers/bluetooth/btfm_slim.h | 1 | ||||
| -rw-r--r-- | drivers/bluetooth/btfm_slim_codec.c | 3 | ||||
| -rw-r--r-- | drivers/bluetooth/btfm_slim_wcn3990.c | 18 |
3 files changed, 7 insertions, 15 deletions
diff --git a/drivers/bluetooth/btfm_slim.h b/drivers/bluetooth/btfm_slim.h index e67c6964ee65..c7b2b45eb19d 100644 --- a/drivers/bluetooth/btfm_slim.h +++ b/drivers/bluetooth/btfm_slim.h @@ -68,6 +68,7 @@ struct btfmslim { uint32_t num_rx_port; uint32_t num_tx_port; + uint32_t sample_rate; struct btfmslim_ch *rx_chs; struct btfmslim_ch *tx_chs; diff --git a/drivers/bluetooth/btfm_slim_codec.c b/drivers/bluetooth/btfm_slim_codec.c index 4dd8e6833ccf..05da1fb1f975 100644 --- a/drivers/bluetooth/btfm_slim_codec.c +++ b/drivers/bluetooth/btfm_slim_codec.c @@ -134,6 +134,9 @@ int btfm_slim_dai_prepare(struct snd_pcm_substream *substream, BTFMSLIM_DBG("dai->name: %s, dai->id: %d, dai->rate: %d", dai->name, dai->id, dai->rate); + /* save sample rate */ + btfmslim->sample_rate = dai->rate; + switch (dai->id) { case BTFM_FM_SLIM_TX: grp = true; nchan = 2; diff --git a/drivers/bluetooth/btfm_slim_wcn3990.c b/drivers/bluetooth/btfm_slim_wcn3990.c index a451ff33103c..77e2973e023c 100644 --- a/drivers/bluetooth/btfm_slim_wcn3990.c +++ b/drivers/bluetooth/btfm_slim_wcn3990.c @@ -88,12 +88,12 @@ int btfm_slim_chrk_enable_port(struct btfmslim *btfmslim, uint8_t port_num, BTFMSLIM_DBG("port(%d) enable(%d)", port_num, enable); if (rxport) { - if (enable) { - /* For SCO Rx, A2DP Rx */ + if (enable && btfmslim->sample_rate == 48000) { + /* For A2DP Rx */ reg_val = 0x1; port_bit = port_num - 0x10; reg = CHRK_SB_PGD_RX_PORTn_MULTI_CHNL_0(port_bit); - BTFMSLIM_DBG("writing reg_val (%d) to reg(%x)", + BTFMSLIM_DBG("writing reg_val (%d) to reg(%x) for A2DP", reg_val, reg); ret = btfm_slim_write(btfmslim, reg, 1, ®_val, IFD); if (ret) { @@ -120,18 +120,6 @@ int btfm_slim_chrk_enable_port(struct btfmslim *btfmslim, uint8_t port_num, BTFMSLIM_ERR("failed to write (%d) reg 0x%x", ret, reg); goto error; } - } else if (port_num == CHRK_SB_PGD_PORT_TX_SCO) { - /* SCO Tx */ - reg_val = 0x1 << CHRK_SB_PGD_PORT_TX_SCO; - reg = CHRK_SB_PGD_TX_PORTn_MULTI_CHNL_0(port_num); - BTFMSLIM_DBG("writing reg_val (%d) to reg(%x)", - reg_val, reg); - ret = btfm_slim_write(btfmslim, reg, 1, ®_val, IFD); - if (ret) { - BTFMSLIM_ERR("failed to write (%d) reg 0x%x", - ret, reg); - goto error; - } } /* Enable Tx port hw auto recovery for underrun or overrun error */ |
