[alsa-devel] ASoC updates for 2.6.37
Takashi Iwai
tiwai at suse.de
Wed Oct 6 16:24:18 CEST 2010
At Wed, 06 Oct 2010 15:13:42 +0100,
Dimitris Papastamos wrote:
>
> On Wed, 2010-10-06 at 15:46 +0200, Takashi Iwai wrote:
> > At Wed, 06 Oct 2010 14:40:04 +0100,
> > Dimitris Papastamos wrote:
> > >
> > > On Wed, 2010-10-06 at 15:30 +0200, Takashi Iwai wrote:
> > > > At Wed, 06 Oct 2010 10:25:40 +0100,
> > > > Dimitris Papastamos wrote:
> > > > >
> > > > > On Wed, 2010-10-06 at 08:31 +0100, Mark Brown wrote:
> > > > > On Wed, Oct 06, 2010 at 09:10:23AM +0200, Takashi Iwai wrote:
> > > > > >
> > > > > > > If the above difference is intentional, it should be commented
> > > > > > > somewhere.
> > > > > >
> > > > > > Meh, yes. Dimitris, please fix or add a comment as appropriate.
> > > > > >
> > > > >
> > > > > In snd_soc_7_9_spi_write we prepare the tx buffer to be register
> > > > > followed by data packed into 16 bits. In snd_soc_4_12_spi_write the tx
> > > > > buffer is swapped. I'd expect this to be consistent between the two
> > > > > transfers.
> > > >
> > > > Sorry, I don't understand your statement clearly.
> > > > So, the byte-swap behavior in snd_soc_4_12_spi_write() is designed?
> > >
> > > I meant to say that snd_soc_4_12_spi_write looks suspicious and that I'd
> > > expect it to behave similarly to snd_soc_7_9_spi_write. I don't see why
> > > the byte swapping is needed.
> >
> > OK, thanks for clarifying :)
> >
> > Looking through git commits, this was introduced by a patch from Barry
> > Song. Barry, could you check whether the current code is correct?
> >
> > I guess this is because the original code accessed unsigned short
> > while the new code is converted to a byte array. Maybe due to the
> > endianess, but it looks wrong.
>
> Looking at the commit now, I think his changes are consistent. Consider
> an example with reg = 0xf and value = 0xa, then his original unsigned
> short buf is equal to 0xf00a. If you follow the logic in
> snd_soc_4_12_write you will find that data[0] and data[1] are 0xf0 and
> 0x0a respectively. However on a say LE machine, his original buf is
> laid out in mem as 0af0 whereas the data buffer is laid out as f00a so
> he has to reverse that by swapping it in snd_soc_4_12_spi_write.
Yeah, I don't say it's buggy. But it's wrong from a programming POV.
The proper endianess handling seems missing in the current code...
Takashi
More information about the Alsa-devel
mailing list