summaryrefslogtreecommitdiff
path: root/sound/hda/hdac_bus.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2015-04-27 12:25:42 +0200
committerTakashi Iwai <tiwai@suse.de>2015-04-27 12:25:42 +0200
commit8ab418d3651b14d38498d868617a7280ccc6de08 (patch)
treef416b17d14ef9a7bd1bfdacea2f1b56ab948b14f /sound/hda/hdac_bus.c
parent782e50e0b38ff284dead13265f1c3e04004e507d (diff)
parent0dd76f36efa43fa75a568b0d24736a9e51d51170 (diff)
Merge branch 'topic/hda' into for-4.2
Diffstat (limited to 'sound/hda/hdac_bus.c')
-rw-r--r--sound/hda/hdac_bus.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/sound/hda/hdac_bus.c b/sound/hda/hdac_bus.c
index 8e262da74f6a..27c447e4fe5c 100644
--- a/sound/hda/hdac_bus.c
+++ b/sound/hda/hdac_bus.c
@@ -11,21 +11,36 @@
static void process_unsol_events(struct work_struct *work);
+static const struct hdac_bus_ops default_ops = {
+ .command = snd_hdac_bus_send_cmd,
+ .get_response = snd_hdac_bus_get_response,
+};
+
/**
* snd_hdac_bus_init - initialize a HD-audio bas bus
* @bus: the pointer to bus object
+ * @ops: bus verb operators
+ * @io_ops: lowlevel I/O operators
*
* Returns 0 if successful, or a negative error code.
*/
int snd_hdac_bus_init(struct hdac_bus *bus, struct device *dev,
- const struct hdac_bus_ops *ops)
+ const struct hdac_bus_ops *ops,
+ const struct hdac_io_ops *io_ops)
{
memset(bus, 0, sizeof(*bus));
bus->dev = dev;
- bus->ops = ops;
+ if (ops)
+ bus->ops = ops;
+ else
+ bus->ops = &default_ops;
+ bus->io_ops = io_ops;
+ INIT_LIST_HEAD(&bus->stream_list);
INIT_LIST_HEAD(&bus->codec_list);
INIT_WORK(&bus->unsol_work, process_unsol_events);
+ spin_lock_init(&bus->reg_lock);
mutex_init(&bus->cmd_mutex);
+ bus->irq = -1;
return 0;
}
EXPORT_SYMBOL_GPL(snd_hdac_bus_init);
@@ -36,6 +51,7 @@ EXPORT_SYMBOL_GPL(snd_hdac_bus_init);
*/
void snd_hdac_bus_exit(struct hdac_bus *bus)
{
+ WARN_ON(!list_empty(&bus->stream_list));
WARN_ON(!list_empty(&bus->codec_list));
cancel_work_sync(&bus->unsol_work);
}