Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions include/sound/hda-mlink.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ struct hdac_ext_link *hdac_bus_eml_sdw_get_hlink(struct hdac_bus *bus);

struct mutex *hdac_bus_eml_get_mutex(struct hdac_bus *bus, bool alt, int elid);

int hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable);
void hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable);

/* microphone privacy specific function supported by ACE3+ architecture */
void hdac_bus_eml_set_mic_privacy_mask(struct hdac_bus *bus, bool alt, int elid,
Expand Down Expand Up @@ -186,10 +186,9 @@ hdac_bus_eml_sdw_get_hlink(struct hdac_bus *bus) { return NULL; }
static inline struct mutex *
hdac_bus_eml_get_mutex(struct hdac_bus *bus, bool alt, int elid) { return NULL; }

static inline int
static inline void
hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable)
{
return 0;
}

static inline void
Expand Down
11 changes: 3 additions & 8 deletions sound/soc/sof/intel/hda-mlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -988,24 +988,19 @@ struct hdac_ext_link *hdac_bus_eml_sdw_get_hlink(struct hdac_bus *bus)
}
EXPORT_SYMBOL_NS(hdac_bus_eml_sdw_get_hlink, "SND_SOC_SOF_HDA_MLINK");

int hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable)
void hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable)
{
struct hdac_ext2_link *h2link;
struct hdac_ext_link *hlink;

h2link = find_ext2_link(bus, alt, elid);
if (!h2link)
return -ENODEV;

if (!h2link->ofls)
return 0;
if (!h2link || !h2link->ofls)
return;

hlink = &h2link->hext_link;

scoped_guard(mutex, &h2link->eml_lock)
hdaml_lctl_offload_enable(hlink->ml_addr + AZX_REG_ML_LCTL, enable);

return 0;
}
EXPORT_SYMBOL_NS(hdac_bus_eml_enable_offload, "SND_SOC_SOF_HDA_MLINK");

Expand Down
40 changes: 15 additions & 25 deletions sound/soc/sof/intel/lnl.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,12 @@
#include "lnl.h"
#include <sound/hda-mlink.h>

/* this helps allows the DSP to setup DMIC/SSP */
static int hdac_bus_offload_dmic_ssp(struct hdac_bus *bus, bool enable)
/* Configure DSP offload for DMIC/SSP/UAOL */
static void hdac_bus_set_dsp_offload(struct hdac_bus *bus, bool enable)
{
int ret;

ret = hdac_bus_eml_enable_offload(bus, true,
AZX_REG_ML_LEPTR_ID_INTEL_SSP, enable);
if (ret < 0)
return ret;

ret = hdac_bus_eml_enable_offload(bus, true,
AZX_REG_ML_LEPTR_ID_INTEL_DMIC, enable);
if (ret < 0)
return ret;

return 0;
hdac_bus_eml_enable_offload(bus, true, AZX_REG_ML_LEPTR_ID_INTEL_SSP, enable);
hdac_bus_eml_enable_offload(bus, true, AZX_REG_ML_LEPTR_ID_INTEL_DMIC, enable);
hdac_bus_eml_enable_offload(bus, true, AZX_REG_ML_LEPTR_ID_INTEL_UAOL, enable);
}

static int lnl_hda_dsp_probe(struct snd_sof_dev *sdev)
Expand All @@ -46,18 +36,14 @@ static int lnl_hda_dsp_probe(struct snd_sof_dev *sdev)
if (ret < 0)
return ret;

return hdac_bus_offload_dmic_ssp(sof_to_bus(sdev), true);
hdac_bus_set_dsp_offload(sof_to_bus(sdev), true);

return 0;
}

static void lnl_hda_dsp_remove(struct snd_sof_dev *sdev)
{
int ret;

ret = hdac_bus_offload_dmic_ssp(sof_to_bus(sdev), false);
if (ret < 0)
dev_warn(sdev->dev,
"Failed to disable offload for DMIC/SSP: %d\n", ret);

hdac_bus_set_dsp_offload(sof_to_bus(sdev), false);
hda_dsp_remove(sdev);
}

Expand All @@ -69,7 +55,9 @@ static int lnl_hda_dsp_resume(struct snd_sof_dev *sdev)
if (ret < 0)
return ret;

return hdac_bus_offload_dmic_ssp(sof_to_bus(sdev), true);
hdac_bus_set_dsp_offload(sof_to_bus(sdev), true);

return 0;
}

static int lnl_hda_dsp_runtime_resume(struct snd_sof_dev *sdev)
Expand All @@ -80,7 +68,9 @@ static int lnl_hda_dsp_runtime_resume(struct snd_sof_dev *sdev)
if (ret < 0)
return ret;

return hdac_bus_offload_dmic_ssp(sof_to_bus(sdev), true);
hdac_bus_set_dsp_offload(sof_to_bus(sdev), true);

return 0;
}

static int lnl_dsp_post_fw_run(struct snd_sof_dev *sdev)
Expand Down
Loading