[alsa-devel] omap4-droid4: voice call support was Re: [PATCHv5, 5/5] ARM: dts: omap4-droid4: add soundcard

Tony Lindgren tony at atomide.com
Thu Mar 29 15:59:04 CEST 2018


* Sebastian Reichel <sebastian.reichel at collabora.co.uk> [180329 13:37]:
> Hi,
> 
> On Wed, Mar 28, 2018 at 06:45:07PM -0700, Tony Lindgren wrote:
> > Hi,
> > 
> > * Sebastian Reichel <sebastian.reichel at collabora.co.uk> [180328 14:03]:
> > > Hi,
> > > 
> > > On Wed, Mar 28, 2018 at 10:29:10AM +0800, Mark Brown wrote:
> > > > On Wed, Mar 28, 2018 at 12:22:37AM +0200, Sebastian Reichel wrote:
> > > > > On Tue, Mar 27, 2018 at 08:14:41PM +0800, Mark Brown wrote:
> > > > 
> > > > > > No, this is exactly the sort of use case with multiple DAIs that the
> > > > > > graph card is intended to enable over the old simple-card.
> > > > 
> > > > > +----------+         +-------------+
> > > > > | OMAP4    |         | CPCAP       |
> > > > > |          |         |             |
> > > > > | [McBSP2] | <-----> | [HiFi DAI]  |
> > > > > |          |         |             |
> > > > > | [McBSP3] | <--+--> | [Voice DAI] |
> > > > > |          |    |    |             |
> > > > > +----------+    |    +-------------+
> > > > >                 |
> > > > > +----------+    |    +-------------+
> > > > > | MDM6600  |    |    | WL1285      |
> > > > > |          |    |    |             |
> > > > > |    [DAI] | <--+--> | [DAI]       |
> > > > > |          |         |             |
> > > > > +----------+         +-------------+
> > > > 
> > > > > Legend:
> > > > >     OMAP4   = SoC running Linux
> > > > >     CPCAP   = Audio codec
> > > > >     MDM6600 = Baseband
> > > > >     WL1285  = Bluetooth
> > > > 
> > > > > Re-reading the audio-graph-card binding document I still don't see
> > > > > how the network (OMAP.McBSP3, CPCAP.Voice, MDM6600, WL1285) is
> > > > > supposed to look like. It seems to expect point-to-point DAI
> > > > > connections.
> > > > 
> > > > Ugh, a TDM mux?
> > > 
> > > Yes, at least that's how I understood Motorola's code.
> > 
> > Hmm is there some active component doing the muxing then?
> > Maybe the "AT+CMUT=0" part below?
> 
> I don't think, that there is a special hardware mux. I think each
> device is configured to use a proper timeslot and/or is being used
> exclusively.

OK. I wonder what "AT+CMUT=0" on mdm6600 then does? If a voice
call is requested and mdm6600 only has one i2s output it seems
kind of unnecesary :)

> > > > That's really unusual and not particularly supported yet, you'd
> > > > need to extend the graph card to do it.  It's where things should
> > > > end up for a generic card though.
> > > 
> > > Motorola's driver provided the following modes:
> > > 
> > > OMAP4 <-> CPCAP      (voice recording)
> > > MDM6600 <-> CPCAP    (voice call, CPU not involved)
> > > OMAP4 <-> WL1285     (bluetooth HFP/HSP)
> > > MDM6600 <-> WL1285   (bluetooth voice call)
> > > 
> > > In case of the last two variants, the bus clock is provided by
> > > CPCAP, so it needs to be enabled for any audio stream. I suppose
> > > the codec <-> codec as part of TDM is out of scope for the graph
> > > card and we need a Droid 4 specific card driver?
> > 
> > Hmm well I got audio call hacked to work as a proof of concept hack,
> > see below. Maybe it can be used to verify some of the assumptions
> > above.
> 
> Your proof of concept verifies the assumption, that the modem is
> connected to the CPCAP voice DAI. This patchset is a proof, that the
> voice DAI is connected to OMAP. So we can tell for sure, that this
> is not a common direct DAI-to-DAI connection.

OK

> > @@ -510,17 +510,17 @@
> >  07f4: 0000
> >  07f8: 0000
> >  07fc: 0000
> > -0800: 0065
> > -0804: 0000
> > -0808: 0040
> > +0800: 0025     # CPCAP_REG_VAUDIOC     VAUDIO Control
> 
> enable vaudio (obviously required :))
> 
> > +0804: 60cf     # CPCAP_REG_CC          Codec Control, moto cpcap.c:1337 sets 0x0093?
> 
> 0x6000 => clkfreq=19200000
> 
> The following bits are automatically set via DAPM by cpcap codec,
> once it is used:
> 
> 0x00c0 => "ADC Left" + "DAC Voice"
> 0x000f => "Highpass Filter TX" + "Highpass Filter RX"
> 
> > +0808: ae0a     # CPCAP_REG_CDI         Codec Digital Interface
> 
> 0xa000 => enable PLL & use clock 1
> 
> This should be used by default for VOICE DAI.
> 
> 0x0e00 => "Voice DAI Clock"=1 (handled by DAPM) , mode=I2S
> 0x000a => CPCAP_BIT_CLK_INV | CPCAP_BIT_MIC1_RX_TIMESLOT0
> 
> >  080c: 0000
> >  0810: 0004
> > -0814: 0804
> > -0818: 079c
> > -081c: 0000
> > -0820: 0924
> > -0824: 0000
> > -0828: 0000
> > +0814: 0cc0     # CPCAP_REG_TXI         TX Inputs, moto cpcap.c:1340 sets 0x0CC6?
> > +0818: 0610     # CPCAP_REG_TXMP        TX MIC PGA's, moto cpcap.c:1343 sets 0x0273?
> > +081c: 0006     # CPCAP_REG_RXOA        RX Output Amplifiers
> > +0820: 0b2c     # CPCAP_REG_RXVC        RX Volume Control
> > +0824: 0606     # CPCAP_REG_RXCOA       RX Codec to Output Amps
> > +0828: 0600     # CPCAP_REG_RXSDOA      RX Stereo DAC to Output Amps
> 
> This configures the loudspeaker, mics and volume and enables the
> required clocks/DACs/... This is already covered by the cpcap codec
> driver. You just need to configure everything correctly in
> alsamixer.
> 
> >  082c: 0400
> >  0830: 0000
> >  0834: 0030
> > 
> > I wonder if mdm6600 is the i2s master during the voice call?
> 
> I think cpcap is always the clock and frame master, but I think
> mdm6600 is the remote side and OMAP is not involved at all.

OK. So could it be just an alsamixer on/off toggle then for
"Modem" or something similar?

> > Then using the n_gsm ts 27.010 uart mux, I dial:
> > 
> > ./ngsm-rw 1 "AT+CFUN=1"		# connect to network
> > U0001+CFUN:OK
> > ./ngsm-rw 2 "AT+CMUT=0"		# unmute speaker over ch2, do this over qmi?
> > U0001+CMUT:OK
> > ./ngsm-rw 1 "ATD#123"		# dial number
> > U0001D:OK

There's a typo above, it should be just ATD123 where 123 is the
number.

I was just doing few test calls to robots. Payback time for all
the robocalls, you know! :)

> > And I do hear a voice talking over the speakerphone :) Sorry have not tested the
> > mic yet..

And calling a person I can hear the other end but the mic is
not working. So maybe I need to tweak the alsamixer settings
too for mic?

Regards,

Tony


More information about the Alsa-devel mailing list