[Letux-kernel] ***UNCHECKED*** Re: Fixing Audio driver

H. Nikolaus Schaller hns at goldelico.com
Fri May 24 09:49:31 CEST 2019

> Am 23.05.2019 um 22:28 schrieb Michael Mrozek <EvilDragon at openpandora.org>:
> On Do, 2019-05-23 at 19:26 +0200, H. Nikolaus Schaller wrote:
> Hi,
>>> aTc made a quick test yesterday playing audio with software mixing
>>> through the headset - and it took 1,5% CPU power.
>> That is not really much and shows how powerful the OMAP5 is.
> Yes, and that AESS is at least not that important in regards of power
> saving (at least for the moment)
>>> So software mixing is not as bad as I feared and it would be good
>>> enough for the beginning.
>> I know, because that was working for quite some time. I just can't
>> tell you why it is currently broken for you. Or with 5.1/5.2 kernels.
> Software mixing is not broken.
> When we access the specific device using ALSA,

Ah, that is the missing bit of information!

I thought that it is completely broken and wondered because it works
for me with ALSA.

> it works - but our
> installation uses PulseAudio, and that probably checks all existing
> ALSA devices and then causes the kernel lock.
> Well, that, and that weird mapping. But the headset works fine (with
> ALSA).
>>> We don't need any advanced Bluetooth, LTE-Modem or other features
>>> at the beginning, those can always be delivered later.
>> They do not harm if we find out why handsfree audio is broken for
>> you.
> No, they don't cause any harm for fixing the audio issue, but for the
> normal release OS, I don't want to have any not-working devices around.
> That OS is meant for normal users, so Bluetooth controls should only
> appear when a bluetooth headset is paired - the way it works on every
> normal system, be it Linux, Windows, MacOS or Android :)

I am not sure if it can be implemented that way at all. Here, the system
architecture of OMAP + AESS + TWL + how the bluetooth chip is connected

We have the same architecture in the GTA04 and so far nobody came up
with a solution like you expect.

> So for the moment, they can stay, but for the release we should either
> disable or fix them :)

I have no idea if and how that can be done.

>> Because they are independent drivers sitting inactively around.
> Then blacklisting them should be easy.

If ALSA supports blacklisting of sound cards?

>>>> As far as I understand you need AESS to make it different. So we
>>>> either have the channel 3+4 thing or have to fix AESS. No way
>>>> through the middle...
>>> That wouldn't make any sense in my opinion.
>>> According to the TWL6040 feature list, the chip has multiple stereo
>>> outputs - not one output with four channels.
>> That may be a matter of wording and perspective. 2 stereo channels
>> may be seen as four outputs with 1 channel. Or one output with 4
>> channels. It is always 4 wires to 4 speakers.
> I am well aware that on a hardware level, everything can be seen as
> single output.
> That's the same for every audio card out there, Stereo, Multichannel or
> whatever.
> And then you've got a driver - and one of the tasks of a driver is to
> map these channels properly to their respective devices.
> Here's an excerpt from TIs official feature list:
> * Four Audio Digital-to-Analog Converter (DAC) Channels
> * Stereo Capless Headphone Drivers
> * Stereo 8 Ω, 1.5 W per Channel Speaker Drivers
> * Differential Earpiece Driver
> * Stereo Line-Out
> Yes, it has four DACs - but the feature clearly says "Stereo Speaker",
> "Stereo Line Out" and "Stereo Headphone Drivers"-
> It does not say "Four channel analog output", even though it would be
> correct for the hardware level, but the typical use case is Stereo out.
> And even in the block diagram of the TWL6040, the output lines are
> marked with L and R (HSL and HSR as well as HFL and HFR).
> So it's pretty clear that the chip has been designed to provide Strero
> Output and not 4-Channel output.

Still, what is the difference? IMHO just wording.

> The job of the driver should be to take care of the proper routing and
> provide proper output devices for ALSA.
> Well, and that would be stereo channel devices, not one device with
> four channels.
> If the driver does that, it's either incomplete or has a bug, but it's
> not following the meant usecase or feature list of the chip.

Yes, I agree with you. It should be done differently.

But it does not seem that anyone has written such a different driver.

>>> So why should the speakers be channel 3 and 4? 
>> Because data is sent from the OMAP5 to the twl6040 in PCM packets
>> over a single PCM interface.
>> And as far as I know the PCM is hard formatted with 4 channels. The
>> twl6040 takes this PCM stream, splits it up and sends it to the 2
>> audio DACs for Headset and 2 for Handsfree speakers. This mapping
>> can not be modified.
> That would be very weird in my opinion.

The original author probably did not know your opinion when he wrote it
more than 5 years ago...

> The communication stream
> between the OMAP5 and TWL shouldn't affect that, as the driver is for
> the TWL, and the TWL splits the stream up to single DACs.
> It's no different when using a USB soundcard: The PC provides all
> channels in one stream, but there are USB soundcards with multiple
> output devices, and the driver manages this as well.
>> And the twl4030 drivers simply maps that to Linux user space as a
>> single sound card with 4 channels. No other magic behind.
> Then the TWL drivers wouldn't be doing their job and they wouldn't
> follow the use case of the chip.

Yes, you are right in your analysis: They follow the interface of the chip and not the use case.

But that is the current state.

>> The tables you find in the code define the amixer controls and
>> handsfree is for gain/loudness control. But there is none to change
>> the channel mapping because the twl6040 driver can't do that (without
>> ABE extensions and AESS).
> Well, I know from my own experiments with ALSA that you can even
> reroute streams directly in ALSA.
> You can, for example, use two stereo outputs and create one
> multichannel device. You can then play 4-channel audio files and they
> will be properly mapped to the two stereo outputs.
> You can also completely rewire multichannel outputs, double channels or
> remap them and create virtual output devices - all without changing the
> driver, just with soft remapping.
> So why shouldn't it be possible to remap them here and create proper
> devices in ALSA?

That is something I do not know an answer since I have no experience
with ALSA rewiring, channel doubling etc.

> I don't care whether this is being done within the driver or by using a
> specific ALSA setup, but the user should simply have working audio
> output :)

The question is how you deine "working audio output". It is working,
but not to your mental model of how it should be solved.

>> I just took some minutes (well more) and installed letux-4.19.44 on
>> the 2GB Pyra.
>> And for me, sound works!
>> Well, not optimal , but it works. When playing an MP3 I get noise
>> after ca. 10 seconds. But before that, music is crisp and loud and
>> volumed damon works as expected. This was better with some older
>> kernel, so it is a pure software issue.
> So.. sound is mapped to a proper device or channel 1 and 2?

Channel 1 2 3 4. That is all what you can get from any existing twl6040
driver. If you want something different, a new driver has to be written
from scratch.

If you look into the /root/twl script (it appears that you have not
done) it does:

AUDIODEV="hw:$NUM,0" play ${FORMAT:+-t} ${FORMAT:+$FORMAT} -v 0.98 $FILE $REMIX

with REMIX set to either

REMIX_MONO="remix 1 1 1 1"
REMIX_STEREO="remix 1 2 1 2"

Which means stereo is going to 1+3 and 2+4 and mono is going to 1+2+3+4.

>> So it is "just" the idle/clock bug to be fixed. And not a fundamental
>> issue like you seem to believe. Of course such a simple idle/clock
>> bug may need a lot of time to identify and fix. 
>> Or there is something in PyraOS which interfere
>> with this basic setup and makes it non-operating.
> Well, yes. PulseAudio locks up because of the broken devices :D
> -- 
> Mit freundlichen Grüßen,
> Michael Mrozek
> -----------------------
> OpenPandora GmbH
> Geschäftsführer: Michael Mrozek
> Schäffbräustr. 11
> 85049 Ingolstadt
> Deutschland
> Tel.: 0841 / 990 5548
> http://www.openpandora.de/
> HRB 4879, Amtsgericht Ingolstadt
> -----------------------
> eMail: mrozek at openpandora.org

More information about the Letux-kernel mailing list