@@ -652,7 +652,7 @@ static struct usb_host_endpoint *get_ep(struct gspca_dev *gspca_dev)
: USB_ENDPOINT_XFER_ISOC;
i = gspca_dev->alt; /* previous alt setting */
if (gspca_dev->cam.reverse_alts) {
- if (gspca_dev->audio && i < gspca_dev->nbalt - 2)
+ if (!gspca_dev->no_audio_hack && gspca_dev->audio && i < gspca_dev->nbalt - 2)
i++;
while (++i < gspca_dev->nbalt) {
ep = alt_xfer(&intf->altsetting[i], xfer);
@@ -660,7 +660,7 @@ static struct usb_host_endpoint *get_ep(struct gspca_dev *gspca_dev)
break;
}
} else {
- if (gspca_dev->audio && i > 1)
+ if (!gspca_dev->no_audio_hack && gspca_dev->audio && i > 1)
i--;
while (--i >= 0) {
ep = alt_xfer(&intf->altsetting[i], xfer);
@@ -220,6 +220,7 @@ struct gspca_dev {
__u8 alt; /* USB alternate setting */
__u8 nbalt; /* number of USB alternate settings */
u8 audio; /* presence of audio device */
+ u8 no_audio_hack; /* Disable audio alternate hack */
};
int gspca_dev_probe(struct usb_interface *intf,
@@ -2031,6 +2031,7 @@ static int sd_init(struct gspca_dev *gspca_dev)
u8 i2c_init[9] =
{0x80, sd->i2c_addr, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03};
+ gspca_dev->no_audio_hack = 1;
for (i = 0; i < ARRAY_SIZE(bridge_init); i++) {
value = bridge_init[i][1];
if (reg_w(gspca_dev, bridge_init[i][0], &value, 1) < 0) {