[alsa-devel] [RFC 10/11] ASoC: hda - add Skylake HD audio driver

Vinod Koul vinod.koul at intel.com
Tue Apr 14 06:44:58 CEST 2015


On Mon, Apr 13, 2015 at 02:00:07PM +0200, Takashi Iwai wrote:
> At Sun, 12 Apr 2015 18:06:17 +0530,
> Subhransu S. Prusty wrote:
> > 
> > From: Jeeja KP <jeeja.kp at intel.com>
> > 
> > Add ASoC Skylake HD audio controller 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 |  11 +
> >  sound/soc/hda/hda_skl.c | 829 ++++++++++++++++++++++++++++++++++++++++++++++++
> >  sound/soc/hda/hda_skl.h |  49 +++
> >  3 files changed, 889 insertions(+)
> >  create mode 100644 sound/soc/hda/hda_skl.c
> >  create mode 100644 sound/soc/hda/hda_skl.h
> > 
> > diff --git a/include/sound/hdaudio.h b/include/sound/hdaudio.h
> > index 2d62410..1ef0b79 100644
> > --- a/include/sound/hdaudio.h
> > +++ b/include/sound/hdaudio.h
> > @@ -197,6 +197,11 @@ struct hda_rb {
> >  	u32 res[HDA_MAX_CODECS];	/* last read value */
> >  };
> >  
> > +typedef unsigned int (*hdac_stream_get_pos_callback_t)(struct hdac_bus *,
> > +			struct hdac_stream *);
> > +typedef int (*hdac_stream_get_delay_callback_t)(struct hdac_bus *,
> > +		struct hdac_stream *, unsigned int pos);
> > +
> >  struct hdac_bus {
> >  	struct device *dev;
> >  	const struct hdac_bus_ops *ops;
> > @@ -233,6 +238,10 @@ struct hdac_bus {
> >  	struct snd_dma_buffer rb;
> >  	struct snd_dma_buffer posbuf;
> >  
> > +	/* position adjustment callbacks */
> > +	hdac_stream_get_pos_callback_t get_position[2];
> > +	hdac_stream_get_delay_callback_t get_delay[2];
> 
> So, do you still need the dynamic switch of get_position and get_delay
> functions on SKL?  These are basically for old platforms that have no
> position buffer support or unstable reads.
> 
> Otherwise you can use always LPIB and position buffers for position
> and delay calculations.  That's why I didn't put them at the first
> place.
Jeeja tested this last evening so we dont need this on SKL and will remove,
and you were right :)

> 
> > +
> >  	/* hdac_stream linked list */
> >  	struct list_head stream_list;
> >  
> > @@ -330,6 +339,8 @@ struct hdac_stream {
> >  
> >  	unsigned int opened:1;
> >  	unsigned int running:1;
> > +	unsigned int prepared:1;
> > +	unsigned int irq_pending:1;
> 
> The irq_pending is also another question.  This was a workaround, and
> whether it's still needed for the modern chips is not sure.
nope, will drop this patch

-- 
~Vinod



More information about the Alsa-devel mailing list