#include <sound/hdaudio_ext.h>
#include <sound/hda_register.h>
#include <sound/hda-mlink.h>
#include <linux/bitfield.h>
#include <linux/module.h>
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA_MLINK)
#define HDAML_MAX_SUBLINKS …
struct hdac_ext2_link { … };
#define hdac_ext_link_to_ext2(h) …
#define AZX_REG_SDW_INSTANCE_OFFSET …
#define AZX_REG_SDW_SHIM_OFFSET …
#define AZX_REG_SDW_IP_OFFSET …
#define AZX_REG_SDW_VS_SHIM_OFFSET …
#define AZX_REG_SDW_SHIM_PCMSyCM(y) …
#define AZX_REG_INTEL_DMIC_SHIM_OFFSET …
#define AZX_REG_INTEL_DMIC_IP_OFFSET …
#define AZX_REG_INTEL_DMIC_VS_SHIM_OFFSET …
#define AZX_REG_INTEL_SSP_INSTANCE_OFFSET …
#define AZX_REG_INTEL_SSP_SHIM_OFFSET …
#define AZX_REG_INTEL_SSP_IP_OFFSET …
#define AZX_REG_INTEL_SSP_VS_SHIM_OFFSET …
#define AZX_REG_INTEL_UAOL_SHIM_OFFSET …
#define AZX_REG_INTEL_UAOL_IP_OFFSET …
#define AZX_REG_INTEL_UAOL_VS_SHIM_OFFSET …
static int hdaml_lnk_enum(struct device *dev, struct hdac_ext2_link *h2link,
void __iomem *remap_addr, void __iomem *ml_addr, int link_idx)
{ … }
#define HDAML_POLL_DELAY_MIN_US …
#define HDAML_POLL_DELAY_SLACK_US …
#define HDAML_POLL_DELAY_RETRY …
static int check_sublink_power(u32 __iomem *lctl, int sublink, bool enabled)
{ … }
static int hdaml_link_init(u32 __iomem *lctl, int sublink)
{ … }
static int hdaml_link_shutdown(u32 __iomem *lctl, int sublink)
{ … }
static void hdaml_link_enable_interrupt(u32 __iomem *lctl, bool enable)
{ … }
static bool hdaml_link_check_interrupt(u32 __iomem *lctl)
{ … }
static int hdaml_wait_bit(void __iomem *base, int offset, u32 mask, u32 target)
{ … }
static void hdaml_link_set_syncprd(u32 __iomem *lsync, u32 syncprd)
{ … }
static int hdaml_link_wait_syncpu(u32 __iomem *lsync)
{ … }
static void hdaml_link_sync_arm(u32 __iomem *lsync, int sublink)
{ … }
static void hdaml_link_sync_go(u32 __iomem *lsync)
{ … }
static bool hdaml_link_check_cmdsync(u32 __iomem *lsync, u32 cmdsync_mask)
{ … }
static u16 hdaml_link_get_lsdiid(u16 __iomem *lsdiid)
{ … }
static void hdaml_link_set_lsdiid(u16 __iomem *lsdiid, int dev_num)
{ … }
static void hdaml_shim_map_stream_ch(u16 __iomem *pcmsycm, int lchan, int hchan,
int stream_id, int dir)
{ … }
static void hdaml_lctl_offload_enable(u32 __iomem *lctl, bool enable)
{ … }
static int hda_ml_alloc_h2link(struct hdac_bus *bus, int index)
{ … }
int hda_bus_ml_init(struct hdac_bus *bus)
{ … }
EXPORT_SYMBOL_NS(…);
void hda_bus_ml_free(struct hdac_bus *bus)
{ … }
EXPORT_SYMBOL_NS(…);
static struct hdac_ext2_link *
find_ext2_link(struct hdac_bus *bus, bool alt, int elid)
{ … }
int hdac_bus_eml_get_count(struct hdac_bus *bus, bool alt, int elid)
{ … }
EXPORT_SYMBOL_NS(…);
void hdac_bus_eml_enable_interrupt(struct hdac_bus *bus, bool alt, int elid, bool enable)
{ … }
EXPORT_SYMBOL_NS(…);
bool hdac_bus_eml_check_interrupt(struct hdac_bus *bus, bool alt, int elid)
{ … }
EXPORT_SYMBOL_NS(…);
int hdac_bus_eml_set_syncprd_unlocked(struct hdac_bus *bus, bool alt, int elid, u32 syncprd)
{ … }
EXPORT_SYMBOL_NS(…);
int hdac_bus_eml_sdw_set_syncprd_unlocked(struct hdac_bus *bus, u32 syncprd)
{ … }
EXPORT_SYMBOL_NS(…);
int hdac_bus_eml_wait_syncpu_unlocked(struct hdac_bus *bus, bool alt, int elid)
{ … }
EXPORT_SYMBOL_NS(…);
int hdac_bus_eml_sdw_wait_syncpu_unlocked(struct hdac_bus *bus)
{ … }
EXPORT_SYMBOL_NS(…);
void hdac_bus_eml_sync_arm_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink)
{ … }
EXPORT_SYMBOL_NS(…);
void hdac_bus_eml_sdw_sync_arm_unlocked(struct hdac_bus *bus, int sublink)
{ … }
EXPORT_SYMBOL_NS(…);
int hdac_bus_eml_sync_go_unlocked(struct hdac_bus *bus, bool alt, int elid)
{ … }
EXPORT_SYMBOL_NS(…);
int hdac_bus_eml_sdw_sync_go_unlocked(struct hdac_bus *bus)
{ … }
EXPORT_SYMBOL_NS(…);
bool hdac_bus_eml_check_cmdsync_unlocked(struct hdac_bus *bus, bool alt, int elid)
{ … }
EXPORT_SYMBOL_NS(…);
bool hdac_bus_eml_sdw_check_cmdsync_unlocked(struct hdac_bus *bus)
{ … }
EXPORT_SYMBOL_NS(…);
static int hdac_bus_eml_power_up_base(struct hdac_bus *bus, bool alt, int elid, int sublink,
bool eml_lock)
{ … }
int hdac_bus_eml_power_up(struct hdac_bus *bus, bool alt, int elid, int sublink)
{ … }
EXPORT_SYMBOL_NS(…);
int hdac_bus_eml_power_up_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink)
{ … }
EXPORT_SYMBOL_NS(…);
static int hdac_bus_eml_power_down_base(struct hdac_bus *bus, bool alt, int elid, int sublink,
bool eml_lock)
{ … }
int hdac_bus_eml_power_down(struct hdac_bus *bus, bool alt, int elid, int sublink)
{ … }
EXPORT_SYMBOL_NS(…);
int hdac_bus_eml_power_down_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink)
{ … }
EXPORT_SYMBOL_NS(…);
int hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink)
{ … }
EXPORT_SYMBOL_NS(…);
int hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink)
{ … }
EXPORT_SYMBOL_NS(…);
int hdac_bus_eml_sdw_get_lsdiid_unlocked(struct hdac_bus *bus, int sublink, u16 *lsdiid)
{ … } EXPORT_SYMBOL_NS(…);
int hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num)
{ … } EXPORT_SYMBOL_NS(…);
int hdac_bus_eml_sdw_map_stream_ch(struct hdac_bus *bus, int sublink, int y,
int channel_mask, int stream_id, int dir)
{ … } EXPORT_SYMBOL_NS(…);
void hda_bus_ml_put_all(struct hdac_bus *bus)
{ … }
EXPORT_SYMBOL_NS(…);
void hda_bus_ml_reset_losidv(struct hdac_bus *bus)
{ … }
EXPORT_SYMBOL_NS(…);
int hda_bus_ml_resume(struct hdac_bus *bus)
{ … }
EXPORT_SYMBOL_NS(…);
int hda_bus_ml_suspend(struct hdac_bus *bus)
{ … }
EXPORT_SYMBOL_NS(…);
struct mutex *hdac_bus_eml_get_mutex(struct hdac_bus *bus, bool alt, int elid)
{ … }
EXPORT_SYMBOL_NS(…);
struct hdac_ext_link *hdac_bus_eml_ssp_get_hlink(struct hdac_bus *bus)
{ … }
EXPORT_SYMBOL_NS(…);
struct hdac_ext_link *hdac_bus_eml_dmic_get_hlink(struct hdac_bus *bus)
{ … }
EXPORT_SYMBOL_NS(…);
struct hdac_ext_link *hdac_bus_eml_sdw_get_hlink(struct hdac_bus *bus)
{ … }
EXPORT_SYMBOL_NS(…);
int hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable)
{ … }
EXPORT_SYMBOL_NS(…);
#endif
MODULE_LICENSE(…) …;
MODULE_DESCRIPTION(…) …;