AnsweredAssumed Answered

Linux drivers

Question asked by pjxan Employee on Mar 5, 2014
Latest reply on Mar 7, 2014 by larsc

I've a customer evaluating some of our codec and they have been using/re-programming our Linux drivers (ADAU1361/1761

and SSM2518). Basically they are happy with the SSM2518 but they have some “comments/questions on the drivers for ADAU1361 and ADAU1761 :



If the DSP in the ADAU1762 is disabled then you cannot program the gain for Capture as you are dependent of some clock that are

set to the wrong value in 0x40F9 and 0x40FA. For example ACL (0x40F9 bit 5) is disabled as standard which means that the user or ALC cannot control the gain in the PGA blocks on the inputs. The user can set the gain in the driver but the change is not implemented.


There is no way to turn on the Mic bias from the driver. You can program it but you can’t turn it on.


There should be a ”PLL-event” when you  run adau17x1_set_dai_pll(). This event should trigger a write in the PLL-registers in another function adau17x1_pll_event(). This event it never trigged so the last function is never run which means that the PLL-register is never set and instead the default values are used independent from the sampling frequency  used.  Of course is will be pitched up/down depending on the source material. This should be the same for the BF –drivers as well.

I need to work around it and program the PLL directly without creating an event (which is how most other codecs handles this)


The name of the drivers are confusing. ADAU1761.c seems to contain parts to ADAU1361, 1461, 1761 and 1961. On the other hand adau17x1 seems to contain things for ADAU1361, 1761, 1381 and 17x1. It would be more naturally if the adau1761.c be named adau1x61.c and adau17x1.c should be named adau1xx1.c or if you solve this in some other way.


Many constants in adau17x1.h is named something like ADUA_SERIAL_PORT1 but some is named ADAU176X1_SERIAL_PORT. I assume that this is a mistake and it should have some other name(s).


Row 509-513 in adau1761.c is a bug (?) it will run the same part of the switch-function below (try yourselves) :


if (pdata)

                mode = pdata->digmic_jackdetect_pin_mode;


                mode = ADAU1761_DIGMIC_JACKDET_PIN_MODE_NONE;