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

Takashi Iwai tiwai at suse.de
Fri Oct 19 22:48:55 CEST 2012


At Fri, 19 Oct 2012 17:42:22 +0200,
Adrian Knoth 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?


thanks,

Takashi

>    .info = snd_hdspm_info_system_sample_rate, \
> +  .put = snd_hdspm_put_system_sample_rate, \
>    .get = snd_hdspm_get_system_sample_rate \
>  }
>  
> @@ -2030,6 +2032,16 @@ static int snd_hdspm_get_system_sample_rate(struct snd_kcontrol *kcontrol,
>  	return 0;
>  }
>  
> +static int snd_hdspm_put_system_sample_rate(struct snd_kcontrol *kcontrol,
> +					    struct snd_ctl_elem_value *
> +					    ucontrol)
> +{
> +	struct hdspm *hdspm = snd_kcontrol_chip(kcontrol);
> +
> +	hdspm_set_dds_value(hdspm, ucontrol->value.enumerated.item[0]);
> +	return 0;
> +}
> +
>  
>  /**
>   * Returns the WordClock sample rate class for the given card.
> -- 
> 1.7.10.4
> 


More information about the Alsa-devel mailing list