Mark,
I got it. Once we set those volume update bits in wm8990_init(), those bits in the wm8985 register cache array, wm8985_reg[], will then be set too. So, whenever we write a new value to a volume register, wm8985_write() will then write the new value to the volume register and update the corresponding volume update bit also. This is the trick.
A Great Idea!
Thank you so much!
Chitat
On Mon, May 25, 2009 at 08:47:31PM +0800, Leung Chi Tat wrote:
I'm right now studying the driver code for wm8980 codec (from the main trunk of linux-2.6-asoc) as it seems to be more close to wm8985. I can't find any code for triggering those volume update bits after modified those volume registers. But, the wm8980 datasheet states that we have to do so to make those volume updates properly. Is there some black magic in the code?
The normal approach for volume update bits is to set them when initialising the CODEC at startup - this is what the wm8990 driver is doing when it writes to the volume registers in wm8990_init(). This means that any further register writes which only change the volume field in the registers will also have the volume update bit set.