提交 8159c184 编写于 作者: S Stefan Ringel 提交者: Mauro Carvalho Chehab

[media] tm6000: bugfix at interrupt reset

Signed-off-by: NStefan Ringel <linuxtv@stefanringel.de>
Signed-off-by: NMauro Carvalho Chehab <mchehab@redhat.com>
上级 c00ecc97
......@@ -599,55 +599,6 @@ int tm6000_init(struct tm6000_core *dev)
return rc;
}
int tm6000_reset(struct tm6000_core *dev)
{
int pipe;
int err;
msleep(500);
err = usb_set_interface(dev->udev, dev->isoc_in.bInterfaceNumber, 0);
if (err < 0) {
tm6000_err("failed to select interface %d, alt. setting 0\n",
dev->isoc_in.bInterfaceNumber);
return err;
}
err = usb_reset_configuration(dev->udev);
if (err < 0) {
tm6000_err("failed to reset configuration\n");
return err;
}
if ((dev->quirks & TM6000_QUIRK_NO_USB_DELAY) == 0)
msleep(5);
/*
* Not all devices have int_in defined
*/
if (!dev->int_in.endp)
return 0;
err = usb_set_interface(dev->udev, dev->isoc_in.bInterfaceNumber, 2);
if (err < 0) {
tm6000_err("failed to select interface %d, alt. setting 2\n",
dev->isoc_in.bInterfaceNumber);
return err;
}
msleep(5);
pipe = usb_rcvintpipe(dev->udev,
dev->int_in.endp->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
err = usb_clear_halt(dev->udev, pipe);
if (err < 0) {
tm6000_err("usb_clear_halt failed: %d\n", err);
return err;
}
return 0;
}
int tm6000_set_audio_bitrate(struct tm6000_core *dev, int bitrate)
{
......
......@@ -1609,12 +1609,25 @@ static int tm6000_release(struct file *file)
tm6000_uninit_isoc(dev);
/* Stop interrupt USB pipe */
tm6000_ir_int_stop(dev);
usb_reset_configuration(dev->udev);
if (&dev->int_in)
usb_set_interface(dev->udev,
dev->isoc_in.bInterfaceNumber,
2);
else
usb_set_interface(dev->udev,
dev->isoc_in.bInterfaceNumber,
0);
/* Start interrupt USB pipe */
tm6000_ir_int_start(dev);
if (!fh->radio)
videobuf_mmap_free(&fh->vb_vidq);
err = tm6000_reset(dev);
if (err < 0)
dev_err(&vdev->dev, "reset failed: %d\n", err);
}
kfree(fh);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册