diff options
author | Rahul Mittal <rmittal@nvidia.com> | 2013-06-03 20:59:03 +0530 |
---|---|---|
committer | Mandar Padmawar <mpadmawar@nvidia.com> | 2013-11-14 23:45:26 -0800 |
commit | 0e7e1f85eb146ed2edad2a480e52bcf67fc6d7b5 (patch) | |
tree | 961713dc952f057a9e990deb0c78c06e3c679e7c | |
parent | 700ef796d86dd97b1162351b86d7e74db0467433 (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.c | 34 |
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; } |