aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/rme9652/hdspm.c
diff options
context:
space:
mode:
authorAdrian Knoth <adi@drcomp.erfurt.thur.de>2012-10-19 11:42:22 -0400
committerTakashi Iwai <tiwai@suse.de>2012-10-20 04:39:45 -0400
commit41285a98f8f052b59f01bbbcb0064e5e41b0ca2d (patch)
tree11fbf5848c0b9de60e0b79b29d4fe089e5c5043c /sound/pci/rme9652/hdspm.c
parent84f98fdf7865fbd35b312eb39ea91e5618c514c7 (diff)
ALSA: hdspm - Allow DDS/Varispeed to be set from userspace
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@drcomp.erfurt.thur.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/rme9652/hdspm.c')
-rw-r--r--sound/pci/rme9652/hdspm.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/sound/pci/rme9652/hdspm.c b/sound/pci/rme9652/hdspm.c
index b12308b5ba2a..742bd5e430ab 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)
2003{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \ 2003{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
2004 .name = xname, \ 2004 .name = xname, \
2005 .index = xindex, \ 2005 .index = xindex, \
2006 .access = SNDRV_CTL_ELEM_ACCESS_READ, \ 2006 .access = SNDRV_CTL_ELEM_ACCESS_READWRITE |\
2007 SNDRV_CTL_ELEM_ACCESS_VOLATILE, \
2007 .info = snd_hdspm_info_system_sample_rate, \ 2008 .info = snd_hdspm_info_system_sample_rate, \
2009 .put = snd_hdspm_put_system_sample_rate, \
2008 .get = snd_hdspm_get_system_sample_rate \ 2010 .get = snd_hdspm_get_system_sample_rate \
2009} 2011}
2010 2012
@@ -2030,6 +2032,16 @@ static int snd_hdspm_get_system_sample_rate(struct snd_kcontrol *kcontrol,
2030 return 0; 2032 return 0;
2031} 2033}
2032 2034
2035static int snd_hdspm_put_system_sample_rate(struct snd_kcontrol *kcontrol,
2036 struct snd_ctl_elem_value *
2037 ucontrol)
2038{
2039 struct hdspm *hdspm = snd_kcontrol_chip(kcontrol);
2040
2041 hdspm_set_dds_value(hdspm, ucontrol->value.enumerated.item[0]);
2042 return 0;
2043}
2044
2033 2045
2034/** 2046/**
2035 * Returns the WordClock sample rate class for the given card. 2047 * Returns the WordClock sample rate class for the given card.