Am Freitag, 9. Oktober 2009 01:16:45 schrieb Alexey Klimov: > Sorry for very long delay. Finally we patched radio-mr800 driver. > Well, lock/unlock_kernel() was removed and open/close/suspend/resume > functions were changed. But last patchset was not pulled in upstrem > kernel yet. So, latest driver is available in mercurial hg v4l-dvb > repository > http://linuxtv.org/hg/v4l-dvb/file/17ce959c2b91/linux/drivers/media/radio/r >adio-mr800.c and link to raw file > http://linuxtv.org/hg/v4l-dvb/raw-file/17ce959c2b91/linux/drivers/media/rad >io/radio-mr800.c If you want to redesign your patch feel free to send new > version to me. I can test any patch. > Also, if you want i can look into your patch and redesign it. Hi, I made a patch for this version. Please test. Regards Oliver -- --- a/drivers/media/radio/radio-mr800.c +++ b/drivers/media/radio/radio-mr800.c @@ -133,6 +133,7 @@ static int usb_amradio_resume(struct usb_interface *intf); struct amradio_device { /* reference to USB and video device */ struct usb_device *usbdev; + struct usb_interface *intf; struct video_device videodev; struct v4l2_device v4l2_dev; @@ -166,7 +167,7 @@ static struct usb_driver usb_amradio_driver = { .reset_resume = usb_amradio_resume, #endif .id_table = usb_amradio_device_table, - .supports_autosuspend = 0, + .supports_autosuspend = 1, }; /* switch on/off the radio. Send 8 bytes to device */ @@ -509,9 +510,15 @@ static int usb_amradio_open(struct file *file) } file->private_data = radio; + retval = usb_autopm_get_interface(radio->intf); + if (retval) + goto unlock; - if (unlikely(!radio->initialized)) + if (unlikely(!radio->initialized)) { retval = usb_amradio_init(radio); + if (retval) + usb_autopm_put_interface(radio->intf); + } unlock: mutex_unlock(&radio->lock); @@ -528,6 +535,8 @@ static int usb_amradio_close(struct file *file) if (!radio->usbdev) retval = -EIO; + else + usb_autopm_put_interface(radio->intf); mutex_unlock(&radio->lock); return retval; @@ -669,6 +678,7 @@ static int usb_amradio_probe(struct usb_interface *intf, radio->videodev.release = usb_amradio_video_device_release; radio->usbdev = interface_to_usbdev(intf); + radio->intf = intf; radio->curfreq = 95.16 * FREQ_MUL; mutex_init(&radio->lock); -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html