Until now, I knew very little about ALSA.
I see that you used the _hw_ functions, which are more fussy about what they support. Are they lower CPU overhead than the "non _hw_" functions (which convert formats if needed)?
The pcm_min.c demo uses the "non _hw_" functions, and a modified version is working for me (for now). I may have to switch if it gets swamped by the K3 eink calls.
I still do not understand buffer sizes -- just growing them until stuff works...
I will have to RTFM at some point, I am sure...
Your condensed code may work for me if I had a "proper" wave file...