ASoC: SOF: Intel: add abstraction for SoundWire wake-ups
The existing code cannot work for LunarLake, let's add a layer of abstraction. No functional change in this patch. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Rander Wang <rander.wang@intel.com> Link: https://lore.kernel.org/r/20230807210959.506849-17-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
186ca4b522
commit
9362ab78f1
@ -466,6 +466,7 @@ const struct sof_intel_dsp_desc cnl_chip_info = {
|
||||
.read_sdw_lcount = hda_sdw_check_lcount_common,
|
||||
.enable_sdw_irq = hda_common_enable_sdw_irq,
|
||||
.check_sdw_irq = hda_common_check_sdw_irq,
|
||||
.check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
|
||||
.check_ipc_irq = hda_dsp_check_ipc_irq,
|
||||
.cl_init = cl_dsp_init,
|
||||
.power_down_dsp = hda_power_down_dsp,
|
||||
@ -501,6 +502,7 @@ const struct sof_intel_dsp_desc jsl_chip_info = {
|
||||
.read_sdw_lcount = hda_sdw_check_lcount_common,
|
||||
.enable_sdw_irq = hda_common_enable_sdw_irq,
|
||||
.check_sdw_irq = hda_common_check_sdw_irq,
|
||||
.check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
|
||||
.check_ipc_irq = hda_dsp_check_ipc_irq,
|
||||
.cl_init = cl_dsp_init,
|
||||
.power_down_dsp = hda_power_down_dsp,
|
||||
|
@ -399,14 +399,10 @@ static irqreturn_t hda_dsp_sdw_thread(int irq, void *context)
|
||||
return sdw_intel_thread(irq, context);
|
||||
}
|
||||
|
||||
static bool hda_sdw_check_wakeen_irq(struct snd_sof_dev *sdev)
|
||||
bool hda_sdw_check_wakeen_irq_common(struct snd_sof_dev *sdev)
|
||||
{
|
||||
u32 interface_mask = hda_get_interface_mask(sdev);
|
||||
struct sof_intel_hda_dev *hdev;
|
||||
|
||||
if (!(interface_mask & BIT(SOF_DAI_INTEL_ALH)))
|
||||
return false;
|
||||
|
||||
hdev = sdev->pdata->hw_pdata;
|
||||
if (hdev->sdw &&
|
||||
snd_sof_dsp_read(sdev, HDA_DSP_BAR,
|
||||
@ -416,6 +412,20 @@ static bool hda_sdw_check_wakeen_irq(struct snd_sof_dev *sdev)
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool hda_sdw_check_wakeen_irq(struct snd_sof_dev *sdev)
|
||||
{
|
||||
u32 interface_mask = hda_get_interface_mask(sdev);
|
||||
const struct sof_intel_dsp_desc *chip;
|
||||
|
||||
if (!(interface_mask & BIT(SOF_DAI_INTEL_ALH)))
|
||||
return false;
|
||||
|
||||
if (chip && chip->check_sdw_wakeen_irq)
|
||||
return chip->check_sdw_wakeen_irq(sdev);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void hda_sdw_process_wakeen(struct snd_sof_dev *sdev)
|
||||
{
|
||||
u32 interface_mask = hda_get_interface_mask(sdev);
|
||||
|
@ -785,6 +785,7 @@ int hda_sdw_check_lcount_ext(struct snd_sof_dev *sdev);
|
||||
int hda_sdw_startup(struct snd_sof_dev *sdev);
|
||||
void hda_common_enable_sdw_irq(struct snd_sof_dev *sdev, bool enable);
|
||||
void hda_sdw_int_enable(struct snd_sof_dev *sdev, bool enable);
|
||||
bool hda_sdw_check_wakeen_irq_common(struct snd_sof_dev *sdev);
|
||||
void hda_sdw_process_wakeen(struct snd_sof_dev *sdev);
|
||||
bool hda_common_check_sdw_irq(struct snd_sof_dev *sdev);
|
||||
|
||||
@ -813,6 +814,11 @@ static inline void hda_sdw_int_enable(struct snd_sof_dev *sdev, bool enable)
|
||||
{
|
||||
}
|
||||
|
||||
static inline bool hda_sdw_check_wakeen_irq_common(struct snd_sof_dev *sdev)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline void hda_sdw_process_wakeen(struct snd_sof_dev *sdev)
|
||||
{
|
||||
}
|
||||
|
@ -188,6 +188,7 @@ const struct sof_intel_dsp_desc icl_chip_info = {
|
||||
.read_sdw_lcount = hda_sdw_check_lcount_common,
|
||||
.enable_sdw_irq = hda_common_enable_sdw_irq,
|
||||
.check_sdw_irq = hda_common_check_sdw_irq,
|
||||
.check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
|
||||
.check_ipc_irq = hda_dsp_check_ipc_irq,
|
||||
.cl_init = cl_dsp_init,
|
||||
.power_down_dsp = hda_power_down_dsp,
|
||||
|
@ -735,6 +735,7 @@ const struct sof_intel_dsp_desc mtl_chip_info = {
|
||||
.read_sdw_lcount = hda_sdw_check_lcount_common,
|
||||
.enable_sdw_irq = mtl_enable_sdw_irq,
|
||||
.check_sdw_irq = mtl_dsp_check_sdw_irq,
|
||||
.check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
|
||||
.check_ipc_irq = mtl_dsp_check_ipc_irq,
|
||||
.cl_init = mtl_dsp_cl_init,
|
||||
.power_down_dsp = mtl_power_down_dsp,
|
||||
|
@ -189,6 +189,7 @@ struct sof_intel_dsp_desc {
|
||||
int (*read_sdw_lcount)(struct snd_sof_dev *sdev);
|
||||
void (*enable_sdw_irq)(struct snd_sof_dev *sdev, bool enable);
|
||||
bool (*check_sdw_irq)(struct snd_sof_dev *sdev);
|
||||
bool (*check_sdw_wakeen_irq)(struct snd_sof_dev *sdev);
|
||||
bool (*check_ipc_irq)(struct snd_sof_dev *sdev);
|
||||
int (*power_down_dsp)(struct snd_sof_dev *sdev);
|
||||
int (*disable_interrupts)(struct snd_sof_dev *sdev);
|
||||
|
@ -147,6 +147,7 @@ const struct sof_intel_dsp_desc tgl_chip_info = {
|
||||
.read_sdw_lcount = hda_sdw_check_lcount_common,
|
||||
.enable_sdw_irq = hda_common_enable_sdw_irq,
|
||||
.check_sdw_irq = hda_common_check_sdw_irq,
|
||||
.check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
|
||||
.check_ipc_irq = hda_dsp_check_ipc_irq,
|
||||
.cl_init = cl_dsp_init,
|
||||
.power_down_dsp = hda_power_down_dsp,
|
||||
@ -175,6 +176,7 @@ const struct sof_intel_dsp_desc tglh_chip_info = {
|
||||
.read_sdw_lcount = hda_sdw_check_lcount_common,
|
||||
.enable_sdw_irq = hda_common_enable_sdw_irq,
|
||||
.check_sdw_irq = hda_common_check_sdw_irq,
|
||||
.check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
|
||||
.check_ipc_irq = hda_dsp_check_ipc_irq,
|
||||
.cl_init = cl_dsp_init,
|
||||
.power_down_dsp = hda_power_down_dsp,
|
||||
@ -203,6 +205,7 @@ const struct sof_intel_dsp_desc ehl_chip_info = {
|
||||
.read_sdw_lcount = hda_sdw_check_lcount_common,
|
||||
.enable_sdw_irq = hda_common_enable_sdw_irq,
|
||||
.check_sdw_irq = hda_common_check_sdw_irq,
|
||||
.check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
|
||||
.check_ipc_irq = hda_dsp_check_ipc_irq,
|
||||
.cl_init = cl_dsp_init,
|
||||
.power_down_dsp = hda_power_down_dsp,
|
||||
@ -231,6 +234,7 @@ const struct sof_intel_dsp_desc adls_chip_info = {
|
||||
.read_sdw_lcount = hda_sdw_check_lcount_common,
|
||||
.enable_sdw_irq = hda_common_enable_sdw_irq,
|
||||
.check_sdw_irq = hda_common_check_sdw_irq,
|
||||
.check_sdw_wakeen_irq = hda_sdw_check_wakeen_irq_common,
|
||||
.check_ipc_irq = hda_dsp_check_ipc_irq,
|
||||
.cl_init = cl_dsp_init,
|
||||
.power_down_dsp = hda_power_down_dsp,
|
||||
|
Loading…
x
Reference in New Issue
Block a user