CRAS: alsa_io - Implement output_underrun for alsa_io

Add output_underrun ops to cras_iodev to handle output underrun.
The default behavior is to fill one block of zeros.

Implement output_underrun ops for alsa_io.
It first cleans up whole buffer with zeros.
Then, it moves appl_ptr to min_cb_level + min_buffer_level ahead of hw_ptr.
This is better than filling one block of zeros in a waking up cycle.

BUG=chrome-os-partner:60497
TEST=cras_test_client --playback_f
/usr/local/autotest/cros/audio/fix_440_16.raw Then press p and enter.
There will be no noise.
Change-Id: I8945d65088600be9d1479127a50a59057a5d6c62
Reviewed-on: https://chromium-review.googlesource.com/418607
Commit-Ready: Cheng-Yi Chiang <cychiang@chromium.org>
Tested-by: Cheng-Yi Chiang <cychiang@chromium.org>
Reviewed-by: Hsinyu Chao <hychao@chromium.org>
Reviewed-by: Dylan Reid <dgreid@chromium.org>
7 files changed