summaryrefslogtreecommitdiff
path: root/sound/usb
diff options
context:
space:
mode:
authorRahul Mittal <rmittal@nvidia.com>2013-06-03 20:59:03 +0530
committerHarshada Kale <hkale@nvidia.com>2013-06-06 07:09:30 -0700
commit3ee6a261731ca9d07e54c47923d338ca193dfed4 (patch)
tree9520983246712066282330c90ca0b71661881939 /sound/usb
parent90aa63b2f08ae84870970c2aaeed8fb0f71efb62 (diff)
ALSA: usbaudio: Expose usb device supported sample rates
Add alsa control for exposing sample rate range supported by the usb audio device Bug 1274264 Bug 1240790 Change-Id: I6b0c43416ad61009cd287f948210aca29b62c3fc Signed-off-by: Rahul Mittal <rmittal@nvidia.com> Reviewed-on: http://git-master/r/235030 Reviewed-by: Scott Peterson <speterson@nvidia.com> Reviewed-by: Ravindra Lokhande <rlokhande@nvidia.com> Reviewed-by: Sumit Bhattacharya <sumitb@nvidia.com>
Diffstat (limited to 'sound/usb')
-rw-r--r--sound/usb/stream.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/sound/usb/stream.c b/sound/usb/stream.c
index 5ff8010b2d6f..d044d518b5c1 100644
--- a/sound/usb/stream.c
+++ b/sound/usb/stream.c
@@ -23,6 +23,7 @@
#include <sound/core.h>
#include <sound/pcm.h>
+#include <sound/control.h>
#include "usbaudio.h"
#include "card.h"
@@ -225,6 +226,35 @@ static struct uac2_output_terminal_descriptor *
return NULL;
}
+static int usb_device_sample_rate_info(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_info *uinfo)
+{
+ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+ uinfo->count = 2;
+ uinfo->value.integer.min = 0;
+ uinfo->value.integer.max = 192000;
+ return 0;
+}
+
+static int usb_device_sample_rate_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct audioformat *fp = snd_kcontrol_chip(kcontrol);
+
+ ucontrol->value.integer.value[0] = fp->rate_min;
+ ucontrol->value.integer.value[1] = fp->rate_max;
+
+ return 0;
+}
+
+struct snd_kcontrol_new usb_device_sample_rate_control = {
+ .access = SNDRV_CTL_ELEM_ACCESS_READ,
+ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+ .name = "USB Device Sample Rate",
+ .info = usb_device_sample_rate_info,
+ .get = usb_device_sample_rate_get,
+};
+
int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
{
struct usb_device *dev;
@@ -447,6 +477,11 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
snd_usb_init_pitch(chip, iface_no, alts, fp);
snd_usb_init_sample_rate(chip, iface_no, alts, fp, fp->rate_max);
}
+
+ /* Add usb device sample rate control */
+ snd_ctl_add(chip->card,
+ snd_ctl_new1(&usb_device_sample_rate_control, fp));
+
return 0;
}