On 2020-07-22 8:24 PM, Pierre-Louis Bossart wrote:
On 7/22/20 12:35 PM, Mateusz Gorski wrote:
Different modules for HDMI codec are used depending on the
"hda_codec_use_common_hdmi" option being enabled or not. Driver private
context for both of them is different.
This leads to null-pointer dereference error when driver tries to set
autosuspend delay for HDMI codec while the option is off (hdac_hdmi
module is used for HDMI).
Change the string in conditional statement to "ehdaudio0D0" to ensure
that only the HDAudio codec is handled by this function.
I am not sure this is correct.
I may be wrong, but my understanding is the following:
Before 5bf73b1b1dec, the driver would use the first dailink of the card,
and in the case of devices without an HDaudio codec (e.g. Up2 board) it
would set the auto suspend delay using that first dailink. See the code
in skl_hda_fill_card_info(), it reorders the dailinks when HDaudio
codecs are not present so if you test for 'edhaudio00' you no longer
allow for this HDMI-only case to be handled with autosuspend.
Kai would need to review this, so this will have to wait I am afraid.
So, for_each_card_rtds needs to be context aware (hdmi type). Right now,
introduced _autosuspend_delay is causing kernel panics.