# This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet 1.596 -> 1.597 # drivers/usb/stv680.c 1.6 -> 1.7 # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 02/08/20 greg@kroah.com 1.597 # stv680 driver update to latest version. # -------------------------------------------- # diff -Nru a/drivers/usb/stv680.c b/drivers/usb/stv680.c --- a/drivers/usb/stv680.c Wed Aug 21 11:47:15 2002 +++ b/drivers/usb/stv680.c Wed Aug 21 11:47:15 2002 @@ -1072,6 +1072,9 @@ errors++; } wait_event_interruptible (stv680->wq, (stv680->scratch[stv680->scratch_use].state == BUFFER_READY)); + + if (stv680->removed) + return -ENODEV; if (stv680->nullpackets > STV680_MAX_NULLPACKETS) { stv680->nullpackets = 0; @@ -1140,10 +1143,10 @@ for (i = 0; i < STV680_NUMFRAMES; i++) stv680->frame[i].grabstate = FRAME_UNUSED; - if (stv680->streaming) + if (stv680->streaming && !stv680->removed) stv680_stop_stream (stv680); - if ((i = stv_stop_video (stv680)) < 0) + if ((!stv680->removed) && (i = stv_stop_video (stv680)) < 0) PDEBUG (1, "STV(e): stop_video failed in stv_close"); rvfree (stv680->fbuf, stv680->maxframesize * STV680_NUMFRAMES); @@ -1169,6 +1172,9 @@ if (!stv680->udev) return -EIO; + + if (stv680->removed) + return -ENODEV; switch (cmd) { case VIDIOCGCAP:{ @@ -1494,7 +1500,7 @@ initialize: stv_init_done, }; -static void *__devinit stv680_probe (struct usb_device *dev, unsigned int ifnum, const struct usb_device_id *id) +static void *stv680_probe (struct usb_device *dev, unsigned int ifnum, const struct usb_device_id *id) { struct usb_interface_descriptor *interface; struct usb_stv *stv680; @@ -1578,6 +1584,7 @@ static void stv680_disconnect (struct usb_device *dev, void *ptr) { struct usb_stv *stv680 = (struct usb_stv *) ptr; + int i; lock_kernel (); /* We don't want people trying to open up the device */ @@ -1586,6 +1593,9 @@ usb_stv680_remove_disconnected (stv680); } else { stv680->removed = 1; + for( i = 0; i < STV680_NUMSBUF; i++) + usb_unlink_urb(stv680->urb[i]); + wake_up_interruptible (&stv680->wq); } unlock_kernel (); }