From 640f7ad7567f8422216a77e0453366aea3b82ace Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 18 Mar 2004 13:18:25 +0100 Subject: [PATCH] ALSA CVS update - Clemens Ladisch USB generic driver replace usage of interface index with calls to usb_ifnum_to_if --- sound/usb/usbaudio.c | 23 ++++++++++++----------- sound/usb/usbaudio.h | 1 - sound/usb/usbmixer.c | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c index 4a582b885097..6b33beedf355 100644 --- a/sound/usb/usbaudio.c +++ b/sound/usb/usbaudio.c @@ -1082,7 +1082,8 @@ static int set_format(snd_usb_substream_t *subs, struct audioformat *fmt) int is_playback = subs->direction == SNDRV_PCM_STREAM_PLAYBACK; int err; - iface = get_iface(config, fmt->iface); + iface = usb_ifnum_to_if(dev, fmt->iface); + snd_assert(iface, return -EINVAL); alts = &iface->altsetting[fmt->altset_idx]; altsd = get_iface_desc(alts); snd_assert(altsd->bAlternateSetting == fmt->altsetting, return -EINVAL); @@ -1213,10 +1214,9 @@ static int snd_usb_hw_params(snd_pcm_substream_t *substream, return ret; if (subs->cur_rate != rate) { - struct usb_host_config *config = subs->dev->actconfig; struct usb_host_interface *alts; struct usb_interface *iface; - iface = get_iface(config, fmt->iface); + iface = usb_ifnum_to_if(subs->dev, fmt->iface); alts = &iface->altsetting[fmt->altset_idx]; ret = init_usb_sample_rate(subs->dev, subs->interface, alts, fmt, rate); if (ret < 0) @@ -2269,7 +2269,6 @@ static int parse_audio_format(struct usb_device *dev, struct audioformat *fp, static int parse_audio_endpoints(snd_usb_audio_t *chip, int iface_no) { struct usb_device *dev; - struct usb_host_config *config; struct usb_interface *iface; struct usb_host_interface *alts; struct usb_interface_descriptor *altsd; @@ -2279,10 +2278,9 @@ static int parse_audio_endpoints(snd_usb_audio_t *chip, int iface_no) unsigned char *fmt, *csep; dev = chip->dev; - config = dev->actconfig; /* parse the interface's altsettings */ - iface = get_iface(config, iface_no); + iface = usb_ifnum_to_if(dev, iface_no); for (i = 0; i < iface->num_altsetting; i++) { alts = &iface->altsetting[i]; altsd = get_iface_desc(alts); @@ -2448,15 +2446,13 @@ static void snd_usb_stream_disconnect(struct list_head *head, struct usb_driver static int snd_usb_create_streams(snd_usb_audio_t *chip, int ctrlif) { struct usb_device *dev = chip->dev; - struct usb_host_config *config; struct usb_host_interface *host_iface; struct usb_interface *iface; unsigned char *p1; int i, j; /* find audiocontrol interface */ - config = dev->actconfig; - host_iface = &get_iface(config, ctrlif)->altsetting[0]; + host_iface = &usb_ifnum_to_if(dev, ctrlif)->altsetting[0]; if (!(p1 = snd_usb_find_csint_desc(host_iface->extra, host_iface->extralen, NULL, HEADER))) { snd_printk(KERN_ERR "cannot find HEADER\n"); return -EINVAL; @@ -2473,12 +2469,12 @@ static int snd_usb_create_streams(snd_usb_audio_t *chip, int ctrlif) struct usb_host_interface *alts; struct usb_interface_descriptor *altsd; j = p1[8 + i]; - if (j >= get_cfg_desc(config)->bNumInterfaces) { + iface = usb_ifnum_to_if(dev, j); + if (!iface) { snd_printk(KERN_ERR "%d:%u:%d : does not exist\n", dev->devnum, ctrlif, j); continue; } - iface = get_iface(config, j); if (usb_interface_claimed(iface)) { snd_printdd(KERN_INFO "%d:%d:%d: skipping, already claimed\n", dev->devnum, ctrlif, j); continue; @@ -2535,6 +2531,11 @@ static int create_fixed_stream_quirk(snd_usb_audio_t *chip, kfree(fp); return err; } + if (fp->iface != get_iface_desc(&iface->altsetting[0])->bInterfaceNumber || + fp->altset_idx >= iface->num_altsetting) { + kfree(fp); + return -EINVAL; + } alts = &iface->altsetting[fp->altset_idx]; usb_set_interface(chip->dev, fp->iface, 0); init_usb_pitch(chip->dev, fp->iface, alts, fp); diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h index d26075663cc4..96e404811555 100644 --- a/sound/usb/usbaudio.h +++ b/sound/usb/usbaudio.h @@ -207,7 +207,6 @@ void snd_usbmidi_disconnect(struct list_head *p, struct usb_driver *driver); * (conditional for compatibility with the older API) */ #ifndef get_iface_desc -#define get_iface(cfg, num) ((cfg)->interface[(num)]) #define get_iface_desc(iface) (&(iface)->desc) #define get_endpoint(alt,ep) (&(alt)->endpoint[ep].desc) #define get_ep_desc(ep) (&(ep)->desc) diff --git a/sound/usb/usbmixer.c b/sound/usb/usbmixer.c index ee30c9f4bb6a..afbf51f9f7c4 100644 --- a/sound/usb/usbmixer.c +++ b/sound/usb/usbmixer.c @@ -1481,7 +1481,7 @@ int snd_usb_create_mixer(snd_usb_audio_t *chip, int ctrlif) int err; const struct usbmix_ctl_map *map; struct usb_device_descriptor *dev = &chip->dev->descriptor; - struct usb_host_interface *hostif = &get_iface(chip->dev->actconfig, ctrlif)->altsetting[0]; + struct usb_host_interface *hostif = &usb_ifnum_to_if(chip->dev, ctrlif)->altsetting[0]; strcpy(chip->card->mixername, "USB Mixer"); -- 2.39.5