mirror of https://gitee.com/openkylin/linux.git
ASoC: SOF: Intel: hda: Initialize HDA controller after i915 init
On some platforms, sound card registration fails when a HDMI
monitor is not connected. This is caused by a recent commit
that switched the order in which the HDA controller and the
i915 are initialized. Initializing the i915 before initializing
the HDA controller fixes the problem.
Fixes: be1b577d01
("ASoC: SOF: Intel: hda: fix the hda init chip"
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Takashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/20190806221958.19180-1-ranjani.sridharan@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
06e8f5c842
commit
cc352735d4
|
@ -321,10 +321,23 @@ static int hda_init_caps(struct snd_sof_dev *sdev)
|
||||||
if (bus->ppcap)
|
if (bus->ppcap)
|
||||||
dev_dbg(sdev->dev, "PP capability, will probe DSP later.\n");
|
dev_dbg(sdev->dev, "PP capability, will probe DSP later.\n");
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
|
||||||
|
/* init i915 and HDMI codecs */
|
||||||
|
ret = hda_codec_i915_init(sdev);
|
||||||
|
if (ret < 0) {
|
||||||
|
dev_err(sdev->dev, "error: init i915 and HDMI codec failed\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Init HDA controller after i915 init */
|
||||||
ret = hda_dsp_ctrl_init_chip(sdev, true);
|
ret = hda_dsp_ctrl_init_chip(sdev, true);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(bus->dev, "error: init chip failed with ret: %d\n",
|
dev_err(bus->dev, "error: init chip failed with ret: %d\n",
|
||||||
ret);
|
ret);
|
||||||
|
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
|
||||||
|
hda_codec_i915_exit(sdev);
|
||||||
|
#endif
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -332,13 +345,6 @@ static int hda_init_caps(struct snd_sof_dev *sdev)
|
||||||
if (bus->mlcap)
|
if (bus->mlcap)
|
||||||
snd_hdac_ext_bus_get_ml_capabilities(bus);
|
snd_hdac_ext_bus_get_ml_capabilities(bus);
|
||||||
|
|
||||||
/* init i915 and HDMI codecs */
|
|
||||||
ret = hda_codec_i915_init(sdev);
|
|
||||||
if (ret < 0) {
|
|
||||||
dev_err(sdev->dev, "error: no HDMI audio devices found\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* codec detection */
|
/* codec detection */
|
||||||
if (!bus->codec_mask) {
|
if (!bus->codec_mask) {
|
||||||
dev_info(bus->dev, "no hda codecs found!\n");
|
dev_info(bus->dev, "no hda codecs found!\n");
|
||||||
|
|
Loading…
Reference in New Issue