[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