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 :
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