I have been porting linux to the iPAQ 214 which uses a wm9713 codec on
the ac97 of a pxa310. It uses it for audio and touchscreen.
I'm working from the git tree of arm.linux.org.uk pxa branch and have
merged in the asoc-v2-dev of wolfson-asoc (all last thursday).
I have the audio and touchscreen working via a platform driver I've put
together (sound/soc/pxa/hpipaq214-audio.c) from copying
sound/soc/pxa/zylonite.c etc a few months ago.
I'm now trying to get the audio working through suspend/resume.
To save as much power as possible in D3 suspend the wm9713 power is
completely turned off in hpipaq214-audio.c via a gpio. This is in
suspend_late() and resume_early() to make sure the power is back before
the AC97/WM9713 drivers try to wake stuff up.
To make the touchscreen work after suspend I had to add a cold reset to
sound/soc/wm9713.c : wm9713_resume().
Also I have to remove the calls to snd_soc_card_suspend_pcms() and
snd_soc_card_resume_pcms() from my hpipaq214-audio.c's normal
suspend/resume functions. These calls were originally in
sound/soc/pxa/zylonite.c but I notice there is now no suspend/resume
functions in there. Some of the other platform audio drivers call
snd_soc_suspend_pcms() some call snd_soc_suspend() and some
snd_soc_card_suspend_pcms().
Only snd_soc_suspend_pcms() seems to actually exists. If I do actually
call snd_soc_card_suspend/resume_pcms() then any use of the audio or
touchscreen later on freezes the process doing it.
Which am I actually supposed to do, and is there a more 'proper' way way
of bringing the wm9713 back up from complete power down on resume?
Oliver Ford