No Audio on Acer Chromebook 14 under Ubuntu 17.10

This is a question about running Ubuntu on a Chromebook. I've taken this question to /r/chrubuntu and /r/galliumos, and I haven't gotten any help so far. Someone recommended I ask this question at AskUbuntu, so here goes:

I've installed Ubuntu 17.10 under chrx (dual-booting with Chrome OS). Everything seems to be working fine on my system except audio. The system doesn't appear to see my sound card. The only interface I have is Dummy Audio. arecord -l gives the following:

**** List of CAPTURE Hardware Devices ****
card 1: chtrt5650 [chtrt5650], device 0: Audio (*) []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

So, at most it seems my system is only finding the capture card, not the playback device. When logging in from a tty, I get tons of Audio Port: ASoC: No backend DAIs enabled for Audio Port messages. I've read about some braswell audio issues, and I found reynhout's fixes in Gallium, but from his documentation, they should have been implemented in kernel 4.11 or 4.12. uname -r is 4.13.0-16-generic, so I'm assuming they should already be there. If not, could someone give me some insight as to how to best implement those fixes under Ubuntu 17.10?

The machine is an Acer Chromebook 14 (CB3-431 / EDGAR). I know the sound card isn't dead because it works in Chrome OS.

Thank you in advance for any help you can provide. Cheers!


Solution 1:

This is only a partial answer as I have not be able to get audio over hdmi to work, or test this except in a liveusb environment.

In a ubuntu 17.10 liveusb environment run pgrep alsa to verify alsa is not running. Copy the asound.state file from a galliumos braswell install to /var/lib/alsa/asound.state. Then force reload alsa.

pgrep alsa
sudo cp /media/ubuntu/UUID/var/lib/alsa/asound.state /var/lib/alsa/asound.state
sudo alsa force-reload

Once completed the speakers can be tested from the sound mixer. I have included here a copy of the asound.state as found on my instance of galliumos for reference. Alternatively you may be able to use a copy of the asound.state file from chromeos.

Once you have sound somewhat working running the following commands will instruct alsactl to attempt to initialize all devices to a default state. Then store the state and reload from that state.

alsactl init
sudo alsactl store --file /var/lib/alsa/asound.state
sudo alsa force-reload

Solution 2:

Unfortunately my reputation is too low to upvote J. Starnes answer just yet. But I performed his steps on an Acer Chromebook 14 (CB3-431 / EDGAR) running Kubuntu 17.10. Worked perfectly. Thank you J. Starnes!

A side note that took a little bit of digging after I got the internal speakers working was when plugging in 3.5mm headphones into the jack, the sound card would switch to "Headphones" as expected however no sound would be produced. I found this thread https://ubuntuforums.org/showthread.php?t=1774627. I opened up the alsamixer in the terminal, hit F6 (Brightness Decrease button), selected the right card (chtrt5650 in my case), moved to "Headphone Channel" and hit the "M" key to unmute the channel. I'm sure there is another way to do this with the standard mixer but I was unable to find it.

alsamixer
F6
->
M
ESC