Hi!
My understanding is, that we only need to replace the audio-graph-card driver to something more complex. The VOICE DAI needs to be configured differently based on the use case:
call:
- mode=i2s
- freq=26000000
- samprate=16000 or samprate=8000
Ok, lets ignore bluetooth for now. There is "normal" mode, and then there's "call" mode, right? Where's "normal" mode configured?
mcbsp3_port: port { cpu_dai3: endpoint { dai-format = "dsp_a"; frame-master = <&cpcap_audio_codec1>; bitclock-master = <&cpcap_audio_codec1>; remote-endpoint = <&cpcap_audio_codec1>; }; };
Hmm. Can't tell mode and freq here easily. Does it default to i2s / 26000000?
Could we simply always configure the VOICE DAI in the call mode? Yes, it would limit samplerates to 8 or 16k, but .. that's not too important limitation for voice codec...?
I think we could configure "normal" mode to use the same settings as call mode. But ASoC will disable CPCAP, since there will be no active user without ASoC knowing about the modem.
Ok, but then we can just start playback/recording with the call, and everything should work, no?
But Motorola code seems to do different magic according to modem type, so things may not be as easy.
if (pdata->voice_type == VOICE_TYPE_STE) { /* STE_M570 */ ret = cpcap_audio_reg_write(codec, 2, 0xAE06); if (rate == 16000) ret |= cpcap_audio_reg_write(codec, 1, 0x8720); else ret |= cpcap_audio_reg_write(codec, 1, 0x8120); } else if (pdata->voice_type == VOICE_TYPE_QC) { /* MDM6600 */ ret = cpcap_audio_reg_write(codec, 2, 0xAE02); if (rate == 16000) { ret |= cpcap_audio_reg_write(codec, 1, 0x6720); } else { ret |= cpcap_audio_reg_write(codec, 1, 0x6120); }
"audio-graph-card" is not capable of doing this. I was planning to try "audio-graph-scu-card" in combination with adding codecs for the modem and BT to DT. If that does not work we need a Droid 4 specific soundcard driver.
Either way "audio-graph-card" is not the correct driver for D4. I added it nevertheless, since it gets audio working for now and there is no risk of DT breakage. Old *.dtb will continue to work with the "audio-graph-card" even after we switch to something else.
Well, you'll still cause regressions when you change the dts, as people will have wrong .config for new dts.
That's correct, the .config needs to change. I think that's ok, because the only alternative is having no audio support at all until the soundcard driver is ready. This means, that you also need to change .config once its ready (in case you want to use it).
Ok, another problem seems to be that spaces in audio device name seem to confuse the userland.
Aha, here:
user@devuan:~$ cat /proc/asound/cards 0 [H58006000encode]: HDMI_58006000_e - HDMI 58006000.encoder HDMI 58006000.encoder 1 [Audio ]: Droid_4_Audio - Droid 4 Audio Droid 4 Audio See how the card is refered simply as "Audio"? Same thing then happens in alsa "state" file:
state.Audio { control.1 {
.
Best regards,
Pavel