--- R29/drivers/usb/usb.c 2004-07-07 08:31:44.000000000 +0100 +++ R63/drivers/usb/usb.c 2005-06-29 06:26:23.000000000 +0100 @@ -30,6 +30,7 @@ #include #include #include +#include #include #ifdef CONFIG_USB_DEBUG @@ -1014,12 +1015,11 @@ if (atomic_dec_and_test(&dev->refcnt)) { dev->bus->op->deallocate(dev); usb_destroy_configuration(dev); - usb_bus_put(dev->bus); - - + if(dev) kfree(dev); + dev = NULL; } } @@ -1749,6 +1749,7 @@ /* * Something got disconnected. Get rid of it, and all of its children. */ +static int dev_num=0; void usb_disconnect(struct usb_device **pdev) { struct usb_device * dev = *pdev; @@ -1758,35 +1759,9 @@ return; *pdev = NULL; - + info("USB disconnect on device %s-%s address %d", dev->bus->bus_name, dev->devpath, dev->devnum); -#if 0 - // add by super - switch(dev->devpath[0]){ - case 0x31: - *IXP425_GPIO_GPOUTR |= 0x8; - remove_proc_entry("hd_conn",NULL); - break; - case 0x32: - *IXP425_GPIO_GPOUTR |= 0x4; - remove_proc_entry("usb_conn",NULL); - remove_proc_entry("hd2_conn",NULL); - break; - default: - break; - } - if (*dev->devpath==0x31){ - *IXP425_GPIO_GPOUTR |= 0x8; - remove_proc_entry("hd_conn",NULL); - }else{ - *IXP425_GPIO_GPOUTR |= 0x4; - remove_proc_entry("usb_conn",NULL); - } -#endif - if (*dev->devpath==0x31) - remove_proc_entry("usb_err",NULL); - //end if (dev->actconfig) { for (i = 0; i < dev->actconfig->bNumInterfaces; i++) { struct usb_interface *interface = &dev->actconfig->interface[i]; @@ -1808,7 +1783,7 @@ if (*child) usb_disconnect(child); } - + /* Let policy agent unload modules etc */ call_policy ("remove", dev); @@ -1817,7 +1792,7 @@ clear_bit(dev->devnum, &dev->bus->devmap.devicemap); usbdevfs_remove_device(dev); } - + /* Free up the device itself */ usb_free_dev(dev); } @@ -2292,7 +2267,7 @@ wait_ms(10); /* Let the SET_ADDRESS settle */ -//super modify + //Pete err = usb_get_descriptor(dev, USB_DT_DEVICE, 0, &dev->descriptor, 8); if (err < 8) { if (err < 0) @@ -2303,10 +2278,13 @@ dev->devnum = -1; return 1; } -// + + //pete, reserve this printk here! + printk("Device descriptor:%d bytes received.\n",err); + dev->epmaxpacketin [0] = dev->descriptor.bMaxPacketSize0; dev->epmaxpacketout[0] = dev->descriptor.bMaxPacketSize0; - + err = usb_get_device_descriptor(dev); if (err < (signed)sizeof(dev->descriptor)) { if (err < 0) @@ -2314,12 +2292,14 @@ else err("USB device descriptor short read (expected %Zi, got %i)", sizeof(dev->descriptor), err); - clear_bit(dev->devnum, &dev->bus->devmap.devicemap); dev->devnum = -1; return 1; } + //pete, reserve this printk here! + printk("Device descriptor:%d bytes received.\n",err); + err = usb_get_configuration(dev); if (err < 0) { err("unable to get device %d configuration (error=%d)",