On 2/25/19 1:48 AM, Rander Wang wrote:
The current implementation of the hdac_hda codec results in zero-valued samples on capture and noise with headset playback when SOF is used on platforms with an on-board HDaudio codec. This is root-caused to SOF using be_hw_params_fixup, and the prepare() call using invalid runtime fields to determine the format.
This patch moves the format handling to the hw_params() callback, as done already for hdac_hdmi, to make sure the fixed-up information is taken into account but keeps the codec initialization in prepare() as the stream_tag is only available at that time. Moving everything in the prepare() callback is possible but the code is less elegant so this two-step solution was chosen.
The solution was tested with the SST driver with no regressions, and all the issues with SOF playback and capture are solved.
Signed-off-by: Rander Wang rander.wang@linux.intel.com
I suggested to Rander to send this patch upstream last week, but since there are two additional fixes suggested over the week-end on the SOF github we probably want to discard this patch.
We will resubmit a series once all the current ASoC+HDaudio issues are sorted out (both with the Skylake and SOF drivers). It's easier for reviewers and people backporting stuff.