[alsa-devel] [RFC 09/11] ALSA: hda - moved interrupt handler to controller library

Subhransu S. Prusty subhransu.s.prusty at intel.com
Sun Apr 12 14:36:16 CEST 2015


From: Jeeja KP <jeeja.kp at intel.com>

This will be used by controller legacy and SKL driver

Signed-off-by: Jeeja KP <jeeja.kp at intel.com>
Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty at intel.com>
Signed-off-by: Vinod Koul <vinod.koul at intel.com>
---
 include/sound/hdaudio.h     |  1 +
 sound/hda/hdac_controller.c | 24 ++++++++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/include/sound/hdaudio.h b/include/sound/hdaudio.h
index 1f9f4ec..2d62410 100644
--- a/include/sound/hdaudio.h
+++ b/include/sound/hdaudio.h
@@ -293,6 +293,7 @@ void snd_hdac_bus_update_rirb(struct hdac_bus *bus);
 void snd_hdac_bus_handle_stream_irq(struct hdac_bus *bus, unsigned int status,
 				    void (*ack)(struct hdac_bus *,
 						struct hdac_stream *));
+irqreturn_t snd_hdac_bus_interrupt(int irq, void *dev_id);
 
 int snd_hdac_bus_alloc_stream_pages(struct hdac_bus *bus);
 void snd_hdac_bus_free_stream_pages(struct hdac_bus *bus);
diff --git a/sound/hda/hdac_controller.c b/sound/hda/hdac_controller.c
index 4d4e0d6..831cc0d 100644
--- a/sound/hda/hdac_controller.c
+++ b/sound/hda/hdac_controller.c
@@ -5,6 +5,7 @@
 #include <linux/kernel.h>
 #include <linux/delay.h>
 #include <linux/export.h>
+#include <linux/pm_runtime.h>
 #include <sound/core.h>
 #include <sound/hdaudio.h>
 #include <sound/hda_registers.h>
@@ -381,6 +382,29 @@ EXPORT_SYMBOL_GPL(snd_hdac_bus_stop_chip);
 /*
  * interrupt handler
  */
+irqreturn_t snd_hdac_bus_interrupt(int irq, void *dev_id)
+{
+	struct hdac_bus *chip = dev_id;
+	u32 status;
+
+#ifdef CONFIG_PM
+	if (!pm_runtime_active(chip->dev))
+		return IRQ_NONE;
+#endif
+
+	spin_lock(&chip->reg_lock);
+
+	status = azx_readl(chip, INTSTS);
+	if (status == 0 || status == 0xffffffff) {
+		spin_unlock(&chip->reg_lock);
+		return IRQ_NONE;
+	}
+	spin_unlock(&chip->reg_lock);
+
+	return IRQ_WAKE_THREAD;
+}
+EXPORT_SYMBOL_GPL(snd_hdac_bus_interrupt);
+
 void snd_hdac_bus_handle_stream_irq(struct hdac_bus *bus, unsigned int status,
 				    void (*ack)(struct hdac_bus *,
 						struct hdac_stream *))
-- 
1.9.0



More information about the Alsa-devel mailing list