At Wed, 26 May 2010 18:11:36 +0200, Daniel Mack wrote:
Signed-off-by: Daniel Mack daniel@caiaq.de
Applied all patches now. Thanks.
Takashi
sound/usb/endpoint.c | 11 +++++++---- sound/usb/format.c | 20 ++++++++++---------- sound/usb/format.h | 7 ++++--- 3 files changed, 21 insertions(+), 17 deletions(-)
diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c index ef07a6d..4887342 100644 --- a/sound/usb/endpoint.c +++ b/sound/usb/endpoint.c @@ -158,8 +158,9 @@ int snd_usb_parse_audio_endpoints(struct snd_usb_audio *chip, int iface_no) int i, altno, err, stream; int format = 0, num_channels = 0; struct audioformat *fp = NULL;
- unsigned char *fmt, *csep;
unsigned char *csep; int num, protocol;
struct uac_format_type_i_continuous_descriptor *fmt;
dev = chip->dev;
@@ -256,8 +257,8 @@ int snd_usb_parse_audio_endpoints(struct snd_usb_audio *chip, int iface_no) dev->devnum, iface_no, altno); continue; }
if (((protocol == UAC_VERSION_1) && (fmt[0] < 8)) ||
((protocol == UAC_VERSION_2) && (fmt[0] != 6))) {
if (((protocol == UAC_VERSION_1) && (fmt->bLength < 8)) ||
((protocol == UAC_VERSION_2) && (fmt->bLength != 6))) { snd_printk(KERN_ERR "%d:%u:%d : invalid UAC_FORMAT_TYPE desc\n", dev->devnum, iface_no, altno); continue;
@@ -268,7 +269,9 @@ int snd_usb_parse_audio_endpoints(struct snd_usb_audio *chip, int iface_no) * with the previous one, except for a larger packet size, but * is actually a mislabeled two-channel setting; ignore it. */
if (fmt[4] == 1 && fmt[5] == 2 && altno == 2 && num == 3 &&
if (fmt->bNrChannels == 1 &&
fmt->bSubframeSize == 2 &&
fp && fp->altsetting == 1 && fp->channels == 1 && fp->formats == SNDRV_PCM_FMTBIT_S16_LE && protocol == UAC_VERSION_1 &&altno == 2 && num == 3 &&
diff --git a/sound/usb/format.c b/sound/usb/format.c index b87cf87..caaa3ef 100644 --- a/sound/usb/format.c +++ b/sound/usb/format.c @@ -278,12 +278,11 @@ err:
- parse the format type I and III descriptors
*/ static int parse_audio_format_i(struct snd_usb_audio *chip,
struct audioformat *fp,
int format, void *_fmt,
struct audioformat *fp, int format,
struct uac_format_type_i_continuous_descriptor *fmt, struct usb_host_interface *iface)
{ struct usb_interface_descriptor *altsd = get_iface_desc(iface);
- struct uac_format_type_i_discrete_descriptor *fmt = _fmt; int protocol = altsd->bInterfaceProtocol; int pcm_format, ret;
@@ -320,7 +319,7 @@ static int parse_audio_format_i(struct snd_usb_audio *chip, switch (protocol) { case UAC_VERSION_1: fp->channels = fmt->bNrChannels;
ret = parse_audio_format_rates_v1(chip, fp, _fmt, 7);
break; case UAC_VERSION_2: /* fp->channels is already set in this case */ret = parse_audio_format_rates_v1(chip, fp, (unsigned char *) fmt, 7);
@@ -392,12 +391,12 @@ static int parse_audio_format_ii(struct snd_usb_audio *chip, }
int snd_usb_parse_audio_format(struct snd_usb_audio *chip, struct audioformat *fp,
int format, unsigned char *fmt, int stream,
struct usb_host_interface *iface)
int format, struct uac_format_type_i_continuous_descriptor *fmt,
int stream, struct usb_host_interface *iface)
{ int err;
- switch (fmt[3]) {
- switch (fmt->bFormatType) { case UAC_FORMAT_TYPE_I: case UAC_FORMAT_TYPE_III: err = parse_audio_format_i(chip, fp, format, fmt, iface);
@@ -407,10 +406,11 @@ int snd_usb_parse_audio_format(struct snd_usb_audio *chip, struct audioformat *f break; default: snd_printd(KERN_INFO "%d:%u:%d : format type %d is not supported yet\n",
chip->dev->devnum, fp->iface, fp->altsetting, fmt[3]);
chip->dev->devnum, fp->iface, fp->altsetting,
return -1; }fmt->bFormatType);
- fp->fmt_type = fmt[3];
- fp->fmt_type = fmt->bFormatType; if (err < 0) return err;
#if 1 @@ -421,7 +421,7 @@ int snd_usb_parse_audio_format(struct snd_usb_audio *chip, struct audioformat *f if (chip->usb_id == USB_ID(0x041e, 0x3000) || chip->usb_id == USB_ID(0x041e, 0x3020) || chip->usb_id == USB_ID(0x041e, 0x3061)) {
if (fmt[3] == UAC_FORMAT_TYPE_I &&
fp->rates != SNDRV_PCM_RATE_48000 && fp->rates != SNDRV_PCM_RATE_96000) return -1;if (fmt->bFormatType == UAC_FORMAT_TYPE_I &&
diff --git a/sound/usb/format.h b/sound/usb/format.h index 8298c4e..387924f 100644 --- a/sound/usb/format.h +++ b/sound/usb/format.h @@ -1,8 +1,9 @@ #ifndef __USBAUDIO_FORMAT_H #define __USBAUDIO_FORMAT_H
-int snd_usb_parse_audio_format(struct snd_usb_audio *chip, struct audioformat *fp,
int format, unsigned char *fmt, int stream,
struct usb_host_interface *iface);
+int snd_usb_parse_audio_format(struct snd_usb_audio *chip,
struct audioformat *fp, int format,
struct uac_format_type_i_continuous_descriptor *fmt,
int stream, struct usb_host_interface *iface);
#endif /* __USBAUDIO_FORMAT_H */
1.7.1