ASoC: SOF: Intel: move all RIRB/CMD_IO helpers to hda-codec.c
We need to split basic stream functionality from RIRB/CORB, which are completely codec-related. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Rander Wang <rander.wang@intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Link: https://lore.kernel.org/r/20221027193540.259520-8-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
1a7d06ae5d
commit
ad09e44658
|
@ -24,6 +24,10 @@
|
|||
|
||||
#define IDISP_VID_INTEL 0x80860000
|
||||
|
||||
static int hda_codec_mask = -1;
|
||||
module_param_named(codec_mask, hda_codec_mask, int, 0444);
|
||||
MODULE_PARM_DESC(codec_mask, "SOF HDA codec mask for probing");
|
||||
|
||||
/* load the legacy HDA codec driver */
|
||||
static int request_codec_module(struct hda_codec *codec)
|
||||
{
|
||||
|
@ -235,6 +239,45 @@ void hda_codec_check_for_state_change(struct snd_sof_dev *sdev)
|
|||
}
|
||||
EXPORT_SYMBOL_NS(hda_codec_check_for_state_change, SND_SOC_SOF_HDA_AUDIO_CODEC);
|
||||
|
||||
void hda_codec_detect_mask(struct snd_sof_dev *sdev)
|
||||
{
|
||||
struct hdac_bus *bus = sof_to_bus(sdev);
|
||||
|
||||
/* Accept unsolicited responses */
|
||||
snd_hdac_chip_updatel(bus, GCTL, AZX_GCTL_UNSOL, AZX_GCTL_UNSOL);
|
||||
|
||||
/* detect codecs */
|
||||
if (!bus->codec_mask) {
|
||||
bus->codec_mask = snd_hdac_chip_readw(bus, STATESTS);
|
||||
dev_dbg(bus->dev, "codec_mask = 0x%lx\n", bus->codec_mask);
|
||||
}
|
||||
|
||||
if (hda_codec_mask != -1) {
|
||||
bus->codec_mask &= hda_codec_mask;
|
||||
dev_dbg(bus->dev, "filtered codec_mask = 0x%lx\n",
|
||||
bus->codec_mask);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_NS_GPL(hda_codec_detect_mask, SND_SOC_SOF_HDA_AUDIO_CODEC);
|
||||
|
||||
void hda_codec_init_cmd_io(struct snd_sof_dev *sdev)
|
||||
{
|
||||
struct hdac_bus *bus = sof_to_bus(sdev);
|
||||
|
||||
/* initialize the codec command I/O */
|
||||
snd_hdac_bus_init_cmd_io(bus);
|
||||
}
|
||||
EXPORT_SYMBOL_NS_GPL(hda_codec_init_cmd_io, SND_SOC_SOF_HDA_AUDIO_CODEC);
|
||||
|
||||
void hda_codec_rirb_status_clear(struct snd_sof_dev *sdev)
|
||||
{
|
||||
struct hdac_bus *bus = sof_to_bus(sdev);
|
||||
|
||||
/* clear rirb status */
|
||||
snd_hdac_chip_writeb(bus, RIRBSTS, RIRB_INT_MASK);
|
||||
}
|
||||
EXPORT_SYMBOL_NS_GPL(hda_codec_rirb_status_clear, SND_SOC_SOF_HDA_AUDIO_CODEC);
|
||||
|
||||
#endif /* CONFIG_SND_SOC_SOF_HDA_AUDIO_CODEC */
|
||||
|
||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA_AUDIO_CODEC) && IS_ENABLED(CONFIG_SND_HDA_CODEC_HDMI)
|
||||
|
|
|
@ -22,12 +22,6 @@
|
|||
#include "../ops.h"
|
||||
#include "hda.h"
|
||||
|
||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
|
||||
static int hda_codec_mask = -1;
|
||||
module_param_named(codec_mask, hda_codec_mask, int, 0444);
|
||||
MODULE_PARM_DESC(codec_mask, "SOF HDA codec mask for probing");
|
||||
#endif
|
||||
|
||||
/*
|
||||
* HDA Operations.
|
||||
*/
|
||||
|
@ -210,22 +204,7 @@ int hda_dsp_ctrl_init_chip(struct snd_sof_dev *sdev)
|
|||
goto err;
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
|
||||
/* Accept unsolicited responses */
|
||||
snd_hdac_chip_updatel(bus, GCTL, AZX_GCTL_UNSOL, AZX_GCTL_UNSOL);
|
||||
|
||||
/* detect codecs */
|
||||
if (!bus->codec_mask) {
|
||||
bus->codec_mask = snd_hdac_chip_readw(bus, STATESTS);
|
||||
dev_dbg(bus->dev, "codec_mask = 0x%lx\n", bus->codec_mask);
|
||||
}
|
||||
|
||||
if (hda_codec_mask != -1) {
|
||||
bus->codec_mask &= hda_codec_mask;
|
||||
dev_dbg(bus->dev, "filtered codec_mask = 0x%lx\n",
|
||||
bus->codec_mask);
|
||||
}
|
||||
#endif
|
||||
hda_codec_detect_mask(sdev);
|
||||
|
||||
/* clear stream status */
|
||||
list_for_each_entry(stream, &bus->stream_list, list) {
|
||||
|
@ -239,19 +218,13 @@ int hda_dsp_ctrl_init_chip(struct snd_sof_dev *sdev)
|
|||
snd_sof_dsp_write(sdev, HDA_DSP_HDA_BAR, SOF_HDA_WAKESTS,
|
||||
SOF_HDA_WAKESTS_INT_MASK);
|
||||
|
||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
|
||||
/* clear rirb status */
|
||||
snd_hdac_chip_writeb(bus, RIRBSTS, RIRB_INT_MASK);
|
||||
#endif
|
||||
hda_codec_rirb_status_clear(sdev);
|
||||
|
||||
/* clear interrupt status register */
|
||||
snd_sof_dsp_write(sdev, HDA_DSP_HDA_BAR, SOF_HDA_INTSTS,
|
||||
SOF_HDA_INT_CTRL_EN | SOF_HDA_INT_ALL_STREAM);
|
||||
|
||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
|
||||
/* initialize the codec command I/O */
|
||||
snd_hdac_bus_init_cmd_io(bus);
|
||||
#endif
|
||||
hda_codec_init_cmd_io(sdev);
|
||||
|
||||
/* enable CIE and GIE interrupts */
|
||||
snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR, SOF_HDA_INTCTL,
|
||||
|
|
|
@ -718,6 +718,9 @@ void hda_codec_probe_bus(struct snd_sof_dev *sdev);
|
|||
void hda_codec_jack_wake_enable(struct snd_sof_dev *sdev, bool enable);
|
||||
void hda_codec_jack_check(struct snd_sof_dev *sdev);
|
||||
void hda_codec_check_for_state_change(struct snd_sof_dev *sdev);
|
||||
void hda_codec_init_cmd_io(struct snd_sof_dev *sdev);
|
||||
void hda_codec_detect_mask(struct snd_sof_dev *sdev);
|
||||
void hda_codec_rirb_status_clear(struct snd_sof_dev *sdev);
|
||||
|
||||
#else
|
||||
|
||||
|
@ -725,6 +728,9 @@ static inline void hda_codec_probe_bus(struct snd_sof_dev *sdev) { }
|
|||
static inline void hda_codec_jack_wake_enable(struct snd_sof_dev *sdev, bool enable) { }
|
||||
static inline void hda_codec_jack_check(struct snd_sof_dev *sdev) { }
|
||||
static inline void hda_codec_check_for_state_change(struct snd_sof_dev *sdev) { }
|
||||
static inline void hda_codec_init_cmd_io(struct snd_sof_dev *sdev) { }
|
||||
static inline void hda_codec_detect_mask(struct snd_sof_dev *sdev) { }
|
||||
static inline void hda_codec_rirb_status_clear(struct snd_sof_dev *sdev) { }
|
||||
|
||||
#endif /* CONFIG_SND_SOC_SOF_HDA_AUDIO_CODEC */
|
||||
|
||||
|
|
Loading…
Reference in New Issue