summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRahul Mittal <rmittal@nvidia.com>2013-06-03 20:59:03 +0530
committerMandar Padmawar <mpadmawar@nvidia.com>2013-11-14 23:45:26 -0800
commit0e7e1f85eb146ed2edad2a480e52bcf67fc6d7b5 (patch)
tree961713dc952f057a9e990deb0c78c06e3c679e7c
parent700ef796d86dd97b1162351b86d7e74db0467433 (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 (cherry picked from commit 3ee6a261731ca9d07e54c47923d338ca193dfed4) Reviewed-on: http://git-master/r/236563 (cherry picked from commit 5870ae5a1b25ce0e73164a762d27caaa46e92cbe) Reviewed-on: http://git-master/r/330695 Tested-by: Scott Peterson <speterson@nvidia.com> Reviewed-by: Scott Peterson <speterson@nvidia.com>
-rw-r--r--sound/usb/stream.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/sound/usb/stream.c b/sound/usb/stream.c
index 5ff8010b2d6f..8b4bb0ecf1b8 100644
--- a/sound/usb/stream.c
+++ b/sound/usb/stream.c
@@ -225,6 +225,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 +476,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;
}