--- zzzz-none-000/linux-2.6.19.2/drivers/usb/class/usblp.c 2007-01-10 19:10:37.000000000 +0000 +++ davinci-8020-5505/linux-2.6.19.2/drivers/usb/class/usblp.c 2008-04-10 12:21:44.000000000 +0000 @@ -217,7 +217,7 @@ { 0x0409, 0xbef4, USBLP_QUIRK_BIDIR }, /* NEC Picty760 (HP OEM) */ { 0x0409, 0xf0be, USBLP_QUIRK_BIDIR }, /* NEC Picty920 (HP OEM) */ { 0x0409, 0xf1be, USBLP_QUIRK_BIDIR }, /* NEC Picty800 (HP OEM) */ - { 0, 0 } + { 0, 0, 0 } }; static int usblp_select_alts(struct usblp *usblp); @@ -722,7 +722,6 @@ usblp->wcomplete = 0; err = usb_submit_urb(usblp->writeurb, GFP_KERNEL); if (err) { - usblp->wcomplete = 1; if (err != -ENOMEM) count = -EIO; else @@ -1203,6 +1202,8 @@ down (&usblp->sem); /* we take no more IO */ usblp->sleeping = 1; + /* we wait for anything printing */ + wait_event (usblp->wait, usblp->wcomplete || !usblp->present); usblp_unlink_urbs(usblp); up (&usblp->sem); mutex_unlock (&usblp_mutex); @@ -1234,7 +1235,7 @@ { USB_INTERFACE_INFO(7, 1, 1) }, { USB_INTERFACE_INFO(7, 1, 2) }, { USB_INTERFACE_INFO(7, 1, 3) }, - { } /* Terminating entry */ + { .match_flags = 0 } /* Terminating entry */ }; MODULE_DEVICE_TABLE (usb, usblp_ids);