This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TPS65950, OMAP3530, Bluetooth PCM routing issue

Other Parts Discussed in Thread: TPS65950

Hello,

we're are trying to route PCM samples between Bluetooth PCM Pins and Headset audio output on Overo Fire (Gumstix).

We have checked the following elements and everything is OK :

 -  HFP connection is established (Gumstix is Headset)
 -  sco connection is established and sco data are transmitted from BT remote device to the Gumstix Overo Fire (seen thanks to Air traces)
 -  hciconfig hci0 revision indicates "SCO Routing: PCM"

Right now, we are able to set all the TPS65950 registers from user space thanks to a new kernel module without using alsa (amixer command). We have tested a lot of routes and everything is OK (analog loopback, loopback through analog and digital, DTMF to headset going through MUXs, ...). So we are convinced that we are able to correctly configure all the TPS registers to route sound inside the TPS65950.

Unfortunately, when configuring route to BT PCM, we have no sound coming from BT Chipset.

 

The script we use to configure is as follow:

#!/bin/bash

mknod /dev/ctrlTPS c 252 0
gpio output 186 0
gpio output 185 1

# Start TPS
ctrlTPS -c
ctrlTPS -l

# TPS65950 Registers setting
# Usage:
# ctrlTPS -w <Value> -d <Register address>

# Reg 0x00000002 = 0xC3(cache) 0xC3(real)
ctrlTPS -w 0xFF -d 0x02 #REG_OPTION
ctrlTPS -w 0x00 -d 0x04 #REG_MICBIAS_CTL
# Reg 0x00000005 = 0x34(cache) 0x34(real)
ctrlTPS -o 0x37 -d 0x05 #REG_ANAMICL
# Reg 0x00000006 = 0x14(cache) 0x14(real)
ctrlTPS -w 0x14 -d 0x06 #REG_ANAMICR
# Reg 0x00000007 = 0x0A(cache) 0x0A(real)
ctrlTPS -w 0x08 -d 0x07 #REG_AVADC_CTL
ctrlTPS -w 0x00 -d 0x08 #REG_ADCMICSEL
#ctrlTPS -w 0x0C -d 0x09 #REG_DIGMIXING
ctrlTPS -w 0x00 -d 0x09 #REG_DIGMIXING
# Reg 0x0000000A = 0x0C(cache) 0x0C(real)
ctrlTPS -w 0x0C -d 0x0A #REG_ATXL1PGA
# Reg 0x0000000B = 0x0C(cache) 0x0C(real)
ctrlTPS -w 0x0C -d 0x0B #REG_ATXR1PGA
#ctrlTPS -w 0x1E -d 0x0C #REG_AVTXL2PGA
ctrlTPS -w 0x00 -d 0x0C #REG_AVTXL2PGA
ctrlTPS -w 0x00 -d 0x0D #REG_AVTXR2PGA
# Reg 0x0000000E = 0x01(cache) 0x01(real)
#ctrlTPS -w 0x03 -d 0x0E #REG_AUDIO_IF
ctrlTPS -w 0x03 -d 0x0E #REG_AUDIO_IF
ctrlTPS -w 0x03 -d 0x0F #REG_VOICE_IF
ctrlTPS -w 0x00 -d 0x10 #REG_ARXR1PGA
ctrlTPS -w 0x00 -d 0x11 #REG_ARXL1PGA
# Reg 0x00000012 = 0x6C(cache) 0x6C(real)
ctrlTPS -w 0x6C -d 0x12 #REG_ARXR2PGA
# Reg 0x00000013 = 0x6C(cache) 0x6C(real)
ctrlTPS -w 0x6C -d 0x13 #REG_ARXL2PGA
ctrlTPS -w 0x31 -d 0x14 #REG_VRXPGA
ctrlTPS -w 0x29 -d 0x15 #REG_VSTPGA
ctrlTPS -w 0x00 -d 0x16 #REG_VRX2ARXPGA
#ctrlTPS -w 0x10 -d 0x17 #REG_AVDAC_CTL
ctrlTPS -w 0x1F -d 0x17 #REG_AVDAC_CTL
ctrlTPS -w 0x00 -d 0x18 #REG_ARX2VTXPGA
#ctrlTPS -w 0x03 -d 0x19 #REG_ARXL1_APGA_CTL
ctrlTPS -w 0x00 -d 0x19 #REG_ARXL1_APGA_CTL
#ctrlTPS -w 0x03 -d 0x1A #REG_ARXR1_APGA_CTL
ctrlTPS -w 0x00 -d 0x1A #REG_ARXR1_APGA_CTL
# Reg 0x0000001B = 0x4A(cache) 0x4A(real)
ctrlTPS -w 0x4A -d 0x1B #REG_ARXL2_APGA_CTL
# Reg 0x0000001C = 0x4A(cache) 0x4A(real)
ctrlTPS -w 0x4A -d 0x1C #REG_ARXR2_APGA_CTL
ctrlTPS -w 0x00 -d 0x1D #REG_ATX2ARXPGA	
ctrlTPS -w 0x61 -d 0x1E #REG_BT_IF
ctrlTPS -w 0xFF -d 0x1F #REG_BTPGA
ctrlTPS -w 0x00 -d 0x20 #REG_BTSTPGA

# Reg 0x00000022 = 0x0D(cache) 0x0D(real)
ctrlTPS -w 0x3F -d 0x22 #REG_HS_SEL
ctrlTPS -w 0x0F -d 0x23 #REG_HS_GAIN_SET
ctrlTPS -w 0x00 -d 0x24 #REG_HS_POPN_SET

ctrlTPS -w 0x00 -d 0x2B #REG_ALC_CTL
ctrlTPS -w 0x00 -d 0x2C #REG_ALC_SET1
ctrlTPS -w 0x00 -d 0x2D #REG_ALC_SET2
ctrlTPS -w 0x01 -d 0x2E #REG_BOOST_CTL
ctrlTPS -w 0x01 -d 0x2F #REG_SOFTVOL_CTL

ctrlTPS -w 0x13 -d 0x30 #REG_DTMF_FREQSEL
ctrlTPS -w 0x79 -d 0x35 #REG_DTMF_TONOFF
ctrlTPS -w 0x11 -d 0x36 #REG_DTMF_WANONOFF

ctrlTPS -w 0x06 -d 0x3A #REG_APLL_CTL
ctrlTPS -w 0x04 -d 0x3B #REG_DTMF_CTL
ctrlTPS -w 0x77 -d 0x3C #REG_DTMF_PGA_CTL2
ctrlTPS -w 0xFF -d 0x3D #REG_DTMF_PGA_CTL1
# Reg 0x0000003E = 0x02(cache) 0x02(real)
ctrlTPS -w 0x02 -d 0x3E #REG_MISC_SET_1
ctrlTPS -w 0x4F -d 0x3F #REG_PCMBTMUX

ctrlTPS -w 0x00 -d 0x43 #REG_RX_PATH_SEL
ctrlTPS -w 0x03 -d 0x44 #REG_VDL_APGA_CTL

# Reg 0x00000048 = 0x2D(cache) 0x2D(real)
ctrlTPS -w 0x2D -d 0x48 #REG_ANAMIC_GAIN
#ctrlTPS -w 0x06 -d 0x49 #REG_MISC_SET_2
ctrlTPS -w 0x00 -d 0x49 #REG_MISC_SET_2

ctrlTPS -L #PLLs restart
ctrlTPS -C #Codec restart

The kernel log is as follow :

1586.kern.log.tar.gz

 

We don't understand what it is wrong with our implementation.

Any idea (clock issue, Gumstix pinout between Bluetooth Chipset and TPS65950, ...)?

 

Many thanks for your help,

Olivier

 

 

  • Hi,

    Is it possible to provide a block diagram of your system that will show how BT device, TPS and processor are connected. That will help understand where you see data and where the problem occurs.

    The test you explained doesnt help me in understanding th epath and where you have problems. Sorry, it may be just me.

     

    Regards,

    Gandhar.

     

  • Hi Gandhar,

     

    I guess your understanding is right and sorry for having disturbing you.

    Indeed, another thread (http://old.nabble.com/Bluetooth-PCM-on-overo-fire-td30236435.html) let me know that Bluetooth PCM pins are not connected to TPS65950 on Gumstix Overo Fire. So no chance to route Bluetooth PCM samples through TPS65950.

     

    Regards,

    Olivier