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

Vinod Koul vinod.koul at intel.com
Tue Apr 14 06:43:56 CEST 2015


On Mon, Apr 13, 2015 at 02:01:48PM +0200, Takashi Iwai wrote:
> At Sun, 12 Apr 2015 18:06:16 +0530,
> Subhransu S. Prusty wrote:
> > 
> > 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);
> 
> Again, this is specific to ASoC driver, so let's keep it local.
Hmmm, but most of this is based on HDA spec and not doing much wrt driver.
Moving to ASoC is fine too... WIll move

-- 
~Vinod



More information about the Alsa-devel mailing list