* Can't use adau1361 as i2s master due to bad write ordering
@ 2016-02-03 16:04 Andreas Irestål
2016-02-03 16:25 ` Lars-Peter Clausen
0 siblings, 1 reply; 2+ messages in thread
From: Andreas Irestål @ 2016-02-03 16:04 UTC (permalink / raw)
To: alsa-devel; +Cc: lars
I've run into problems using the adau1361 codec (adau1761) as i2s master.
I'm using i2c to set up the codec, and according to the datasheet there
is an enable bit, which must be set in order to be able to access any
other register than the first two registers.
This enable bit is set when the codec enters bias level standby,
however, before entering this bias level, some other registers are
written which will have no effect due to the inner workings of this
codec. Oddly enough, it does ack all writes when measuring the i2c bus.
One of these registers is the serial port 0 register, which
configures the i2s bus. This results in the situation that the CODEC dai
thinks it is running as i2s slave and the CPU dai thinks too as well,
and the bus is dead. Since the other register fields does not change
with our dai configuration, the register never gets physically updated
by an i2c write.
If I reset/reboot the system, which in our case does not power cycle the
codec, the i2s bus is correctly set up and everything works as one would
expect.
So, either the driver behaves incorrectly relying on bias level being
set before any other registers are written, or the underlying subsystem
are behaving incorrectly. We're using the simple-card board driver as it
is sufficient for our needs.
/Andreas
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: Can't use adau1361 as i2s master due to bad write ordering
2016-02-03 16:04 Can't use adau1361 as i2s master due to bad write ordering Andreas Irestål
@ 2016-02-03 16:25 ` Lars-Peter Clausen
0 siblings, 0 replies; 2+ messages in thread
From: Lars-Peter Clausen @ 2016-02-03 16:25 UTC (permalink / raw)
To: Andreas Irestål, alsa-devel
On 02/03/2016 05:04 PM, Andreas Irestål wrote:
> I've run into problems using the adau1361 codec (adau1761) as i2s master.
>
> I'm using i2c to set up the codec, and according to the datasheet there
> is an enable bit, which must be set in order to be able to access any
> other register than the first two registers.
>
> This enable bit is set when the codec enters bias level standby,
> however, before entering this bias level, some other registers are
> written which will have no effect due to the inner workings of this
> codec. Oddly enough, it does ack all writes when measuring the i2c bus.
>
> One of these registers is the serial port 0 register, which
> configures the i2s bus. This results in the situation that the CODEC dai
> thinks it is running as i2s slave and the CPU dai thinks too as well,
> and the bus is dead. Since the other register fields does not change
> with our dai configuration, the register never gets physically updated
> by an i2c write.
>
> If I reset/reboot the system, which in our case does not power cycle the
> codec, the i2s bus is correctly set up and everything works as one would
> expect.
>
> So, either the driver behaves incorrectly relying on bias level being
> set before any other registers are written, or the underlying subsystem
> are behaving incorrectly. We're using the simple-card board driver as it
> is sufficient for our needs.
Hi,
Yes, that sounds like a bug in the driver. We probably need to enable the
clock in the probe() function before we do any other register writes.
- Lars
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-02-03 16:30 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-02-03 16:04 Can't use adau1361 as i2s master due to bad write ordering Andreas Irestål
2016-02-03 16:25 ` Lars-Peter Clausen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).