[alsa-devel] [PATCH 1/9] ALSA: hdspm - Allow DDS/Varispeed to be set from userspace

Adrian Knoth adi at drcomp.erfurt.thur.de
Sat Oct 20 10:35:36 CEST 2012


On Fri, Oct 19, 2012 at 10:48:55PM +0200, Takashi Iwai wrote:

> > The DDS value is the actual physical sample rate. We set it indirectly
> > when selecting 44100, 48000 and so on via snd_hdspm_hw_params or
> > hdspm_set_clock_source.
> > 
> > This commit now allows the DDS value to be altered at runtime, thus
> > speeding up or slowing down the physical sample rate. This is required
> > for MADI's varispeed that allows for ±12.5% speed adjustment from the
> > "selected" rate (32kHz, 44100kHz, 48kHz and so on).
> > 
> > Signed-off-by: Adrian Knoth <adi at drcomp.erfurt.thur.de>
> > 
> > diff --git a/sound/pci/rme9652/hdspm.c b/sound/pci/rme9652/hdspm.c
> > index b12308b..742bd5e 100644
> > --- a/sound/pci/rme9652/hdspm.c
> > +++ b/sound/pci/rme9652/hdspm.c
> > @@ -2003,8 +2003,10 @@ static int hdspm_get_system_sample_rate(struct hdspm *hdspm)
> >  { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
> >    .name = xname, \
> >    .index = xindex, \
> > -  .access = SNDRV_CTL_ELEM_ACCESS_READ, \
> > +  .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |\
> > +	SNDRV_CTL_ELEM_ACCESS_VOLATILE, \
> 
> What's the reason to add VOLATILE flag?
> Does the hardware itself change the value without the driver
> involvement?

Yes, when in slave mode. Then, this value reflects the detected external
sample rate that may change at any time.

The following example shows that this just happened in my test setup:

adi at foh:/opt/adi-src/sound-2.6$ amixer -c 0 cset numid=5 48000
numid=5,iface=MIXER,name='System Sample Rate'
  ; type=INTEGER,access=rw------,values=1,min=27000,max=207000,step=1
  : values=44104

Though I was asking for 48000Hz, the card runs at 44104Hz, because it's
syncing to S/PDIF-In at the moment.


Cheers

-- 
mail: adi at thur.de  	http://adi.thur.de	PGP/GPG: key via keyserver



More information about the Alsa-devel mailing list