[alsa-devel] [PATCH 0/3] ASoC: Enable a new IC master mode: bcm2835<=>IC<=>cs42xx8

Matt Flax flatmax at flatmax.org
Thu Mar 16 13:51:49 PDT 2017

On 16/03/17 06:01, Mark Brown wrote:
> On Tue, Feb 28, 2017 at 09:59:29AM +0000, Charles Keepax wrote:
>> On Mon, Feb 27, 2017 at 12:51:08PM +0100, Matthias Reichl wrote:
>>>> I have a bcm2835 (Pi 2 and 3) SoC here. It is producing multichannel (8 out,
>>>> 6 in) audio. In ALSA we call that DSP mode - right ?!
>>> No. DSP modes are protocol/timing specifications as I2S, PDP, S/PDIF, ...
>>> You can look these up in datasheets and if a chip implements such a
>>> protocol you can be sure that it adheres to that standard - i.e. it
>>> will sync the frames to the pulses on LRclk.
>> I agree with the thoughts in this thread really if the AP doesn't
>> actually support DSP A mode we shouldn't add DSP A mode.
> The trouble here is that this isn't 100% clear, the specifications of
> the DSP modes are such that only one edge in the LRCLK matters and so
> providing you're doing mono or have exact clocking they interoperate
> perfectly well.  We already frequently do similar things the other way,
> most of the programmable serial ports can't actually do I2S modes
> properly and rely on exact clocking to get things right when operating
> as I2S since they only sync on one edge (though they can generally
> generate the clocks correctly when operating as master, they just don't
> pay attention to the left/right switch edge).
> That said unless we're doing something with the data layout or similar
> configuration there's a fairly strong case for putting the mangling for
> this in the core, something like just falling back to I2S mode if we set
> DSP A and so on.  Which would be a lot nicer if we actually got round to
> putting mode capability information in the drivers.

I agree, the data layout is already configurable in the bcm2835_i2s.c 
platform driver. We can already use the "snd_soc_dai_set_bclk_ratio" 
function to manage word offsets in our machine drivers.

There is nothing which says that the bcm2835 SoC is I2S restricted in 
any way. In fact, the reference document says quite the opposite.

In the reference "BCM2835 ARM Peripherals" pdf, they call the audio 
system an "APB peripheral". They are saying that it is reconfigurable 
and part of the AMBA family of interconnect schemes.

As far as the bcm2835_i2s platform driver goes, it has implemented an 
AMBA protocol, where audio words are counted from the LR clock onset - 
for some reason people are insisting this is an I2S bus. Really our 
implementation is not I2S at all, because word onsets are programmable 
and flexible in the bcm2835_i2s.c driver.

What I have been trying to make happen over the past few months is to 
enable a different capability of the AMBA audio core on the bcm2835. Can 
you suggest a realistic approach to realising this which is acceptable 
to the ALSA code base ?

Do you suggest I go back to the approach of implementing the DSP mode 
for this platform driver ?


More information about the linux-rpi-kernel mailing list