mirror of
https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux
synced 2025-10-24 22:35:08 +10:00
ASoC: SOF: hda/shim: Add callbacks to handle mic privacy change for sdw
Add generic callback definitions for checking the mic privacy interrupt and status. Implement wrappers for mic privacy reported via the Soundwire interrupt and its vendor specific SHIM registers. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com> Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Link: https://patch.msgid.link/20250307112816.1495-8-peter.ujfalusi@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
0978e8207b
commit
a0db661e7d
@ -352,6 +352,27 @@ void hda_sdw_process_wakeen_common(struct snd_sof_dev *sdev)
|
||||
}
|
||||
EXPORT_SYMBOL_NS(hda_sdw_process_wakeen_common, "SND_SOC_SOF_INTEL_HDA_GENERIC");
|
||||
|
||||
static bool hda_dsp_sdw_check_mic_privacy_irq(struct snd_sof_dev *sdev)
|
||||
{
|
||||
const struct sof_intel_dsp_desc *chip;
|
||||
|
||||
chip = get_chip_info(sdev->pdata);
|
||||
if (chip && chip->check_mic_privacy_irq)
|
||||
return chip->check_mic_privacy_irq(sdev, true,
|
||||
AZX_REG_ML_LEPTR_ID_SDW);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static void hda_dsp_sdw_process_mic_privacy(struct snd_sof_dev *sdev)
|
||||
{
|
||||
const struct sof_intel_dsp_desc *chip;
|
||||
|
||||
chip = get_chip_info(sdev->pdata);
|
||||
if (chip && chip->process_mic_privacy)
|
||||
chip->process_mic_privacy(sdev, true, AZX_REG_ML_LEPTR_ID_SDW);
|
||||
}
|
||||
|
||||
#else /* IS_ENABLED(CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE) */
|
||||
static inline int hda_sdw_acpi_scan(struct snd_sof_dev *sdev)
|
||||
{
|
||||
@ -383,6 +404,13 @@ static inline bool hda_sdw_check_wakeen_irq(struct snd_sof_dev *sdev)
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline bool hda_dsp_sdw_check_mic_privacy_irq(struct snd_sof_dev *sdev)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline void hda_dsp_sdw_process_mic_privacy(struct snd_sof_dev *sdev) { }
|
||||
|
||||
#endif /* IS_ENABLED(CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE) */
|
||||
|
||||
/* pre fw run operations */
|
||||
@ -678,7 +706,13 @@ static irqreturn_t hda_dsp_interrupt_thread(int irq, void *context)
|
||||
|
||||
if (hda_dsp_check_sdw_irq(sdev)) {
|
||||
trace_sof_intel_hda_irq(sdev, "sdw");
|
||||
|
||||
hda_dsp_sdw_thread(irq, hdev->sdw);
|
||||
|
||||
if (hda_dsp_sdw_check_mic_privacy_irq(sdev)) {
|
||||
trace_sof_intel_hda_irq(sdev, "mic privacy");
|
||||
hda_dsp_sdw_process_mic_privacy(sdev);
|
||||
}
|
||||
}
|
||||
|
||||
if (hda_sdw_check_wakeen_irq(sdev)) {
|
||||
|
||||
@ -193,6 +193,8 @@ struct sof_intel_dsp_desc {
|
||||
bool (*check_sdw_wakeen_irq)(struct snd_sof_dev *sdev);
|
||||
void (*sdw_process_wakeen)(struct snd_sof_dev *sdev);
|
||||
bool (*check_ipc_irq)(struct snd_sof_dev *sdev);
|
||||
bool (*check_mic_privacy_irq)(struct snd_sof_dev *sdev, bool alt, int elid);
|
||||
void (*process_mic_privacy)(struct snd_sof_dev *sdev, bool alt, int elid);
|
||||
int (*power_down_dsp)(struct snd_sof_dev *sdev);
|
||||
int (*disable_interrupts)(struct snd_sof_dev *sdev);
|
||||
int (*cl_init)(struct snd_sof_dev *sdev, int stream_tag, bool imr_boot);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user