#include <linux/init.h>
#include <linux/io.h>
#include <linux/device.h>
#include <linux/module.h>
#include <linux/export.h>
#include <sound/hdaudio.h>
#include "local.h"
#include "trace.h"
static void snd_hdac_bus_process_unsol_events(struct work_struct *work);
static const struct hdac_bus_ops default_ops = …;
int snd_hdac_bus_init(struct hdac_bus *bus, struct device *dev,
const struct hdac_bus_ops *ops)
{ … }
EXPORT_SYMBOL_GPL(…);
void snd_hdac_bus_exit(struct hdac_bus *bus)
{ … }
EXPORT_SYMBOL_GPL(…);
int snd_hdac_bus_exec_verb(struct hdac_bus *bus, unsigned int addr,
unsigned int cmd, unsigned int *res)
{ … }
int snd_hdac_bus_exec_verb_unlocked(struct hdac_bus *bus, unsigned int addr,
unsigned int cmd, unsigned int *res)
{ … }
EXPORT_SYMBOL_GPL(…);
void snd_hdac_bus_queue_event(struct hdac_bus *bus, u32 res, u32 res_ex)
{ … }
static void snd_hdac_bus_process_unsol_events(struct work_struct *work)
{ … }
int snd_hdac_bus_add_device(struct hdac_bus *bus, struct hdac_device *codec)
{ … }
void snd_hdac_bus_remove_device(struct hdac_bus *bus,
struct hdac_device *codec)
{ … }
#ifdef CONFIG_SND_HDA_ALIGNED_MMIO
unsigned int snd_hdac_aligned_read(void __iomem *addr, unsigned int mask)
{
void __iomem *aligned_addr =
(void __iomem *)((unsigned long)(addr) & ~0x3);
unsigned int shift = ((unsigned long)(addr) & 0x3) << 3;
unsigned int v;
v = readl(aligned_addr);
return (v >> shift) & mask;
}
EXPORT_SYMBOL_GPL(snd_hdac_aligned_read);
void snd_hdac_aligned_write(unsigned int val, void __iomem *addr,
unsigned int mask)
{
void __iomem *aligned_addr =
(void __iomem *)((unsigned long)(addr) & ~0x3);
unsigned int shift = ((unsigned long)(addr) & 0x3) << 3;
unsigned int v;
v = readl(aligned_addr);
v &= ~(mask << shift);
v |= val << shift;
writel(v, aligned_addr);
}
EXPORT_SYMBOL_GPL(snd_hdac_aligned_write);
#endif
void snd_hdac_codec_link_up(struct hdac_device *codec)
{ … }
EXPORT_SYMBOL_GPL(…);
void snd_hdac_codec_link_down(struct hdac_device *codec)
{ … }
EXPORT_SYMBOL_GPL(…);