# 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.586 -> 1.587 # drivers/media/video/cpia_usb.c 1.8 -> 1.9 # drivers/input/joystick/iforce/iforce-usb.c 1.3 -> 1.4 # drivers/bluetooth/hci_usb.c 1.8 -> 1.9 # drivers/isdn/hisax/st5481_init.c 1.4 -> 1.5 # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 02/09/16 greg@kroah.com 1.587 # USB: convert the USB drivers that live outside of drivers/usb to the new USB driver model. # -------------------------------------------- # diff -Nru a/drivers/bluetooth/hci_usb.c b/drivers/bluetooth/hci_usb.c --- a/drivers/bluetooth/hci_usb.c Mon Sep 16 15:00:14 2002 +++ b/drivers/bluetooth/hci_usb.c Mon Sep 16 15:00:14 2002 @@ -656,8 +656,9 @@ #endif /* CONFIG_BLUEZ_USB_FW_LOAD */ -static void * hci_usb_probe(struct usb_device *udev, unsigned int ifnum, const struct usb_device_id *id) +static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) { + struct usb_device *udev = interface_to_usbdev(intf); struct usb_endpoint_descriptor *bulk_out_ep[HCI_MAX_IFACE_NUM]; struct usb_endpoint_descriptor *isoc_out_ep[HCI_MAX_IFACE_NUM]; struct usb_endpoint_descriptor *bulk_in_ep[HCI_MAX_IFACE_NUM]; @@ -670,11 +671,11 @@ struct hci_dev *hdev; int i, a, e, size, ifn, isoc_ifnum, isoc_alts; - BT_DBG("udev %p ifnum %d", udev, ifnum); + BT_DBG("intf %p", intf); /* Check number of endpoints */ - if (udev->actconfig->interface[ifnum].altsetting[0].bNumEndpoints < 3) - return NULL; + if (intf->altsetting[0].bNumEndpoints < 3) + return -ENODEV; MOD_INC_USE_COUNT; @@ -794,24 +795,27 @@ goto probe_error; } - return husb; + dev_set_drvdata(&intf->dev, husb); + return 0; probe_error: kfree(husb); done: MOD_DEC_USE_COUNT; - return NULL; + return -EIO; } -static void hci_usb_disconnect(struct usb_device *udev, void *ptr) +static void hci_usb_disconnect(struct usb_interface *intf) { - struct hci_usb *husb = (struct hci_usb *) ptr; - struct hci_dev *hdev = &husb->hdev; + struct hci_usb *husb = dev_get_drvdata(&intf->dev); + struct hci_dev *hdev; + dev_set_drvdata(&intf->dev, NULL); if (!husb) return; + hdev = &husb->hdev; BT_DBG("%s", hdev->name); hci_usb_close(hdev); diff -Nru a/drivers/input/joystick/iforce/iforce-usb.c b/drivers/input/joystick/iforce/iforce-usb.c --- a/drivers/input/joystick/iforce/iforce-usb.c Mon Sep 16 15:00:14 2002 +++ b/drivers/input/joystick/iforce/iforce-usb.c Mon Sep 16 15:00:14 2002 @@ -106,14 +106,15 @@ wake_up(&iforce->wait); } -static void *iforce_usb_probe(struct usb_device *dev, unsigned int ifnum, +static int iforce_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) { + struct usb_device *dev = interface_to_usbdev(intf); struct usb_endpoint_descriptor *epirq, *epout; struct iforce *iforce; - epirq = dev->config[0].interface[ifnum].altsetting[0].endpoint + 0; - epout = dev->config[0].interface[ifnum].altsetting[0].endpoint + 1; + epirq = intf->altsetting[0].endpoint + 0; + epout = intf->altsetting[0].endpoint + 1; if (!(iforce = kmalloc(sizeof(struct iforce) + 32, GFP_KERNEL))) goto fail; @@ -150,7 +151,8 @@ if (iforce_init_device(iforce)) goto fail; - return iforce; + dev_set_drvdata (&intf->dev, iforce); + return 0; fail: if (iforce) { @@ -160,7 +162,7 @@ kfree(iforce); } - return NULL; + return -ENODEV; } /* Called by iforce_delete() */ @@ -176,17 +178,20 @@ usb_free_urb(iforce->ctrl); } -static void iforce_usb_disconnect(struct usb_device *dev, void *ptr) +static void iforce_usb_disconnect(struct usb_interface *intf) { - struct iforce *iforce = ptr; + struct iforce *iforce = dev_get_drvdata (&intf->dev); int open = 0; /* FIXME! iforce->dev.handle->open; */ - iforce->usbdev = NULL; - input_unregister_device(&iforce->dev); + dev_set_drvdata (&intf->dev, NULL); + if (iforce) { + iforce->usbdev = NULL; + input_unregister_device(&iforce->dev); - if (!open) { - iforce_delete_device(iforce); - kfree(iforce); + if (!open) { + iforce_delete_device(iforce); + kfree(iforce); + } } } diff -Nru a/drivers/isdn/hisax/st5481_init.c b/drivers/isdn/hisax/st5481_init.c --- a/drivers/isdn/hisax/st5481_init.c Mon Sep 16 15:00:14 2002 +++ b/drivers/isdn/hisax/st5481_init.c Mon Sep 16 15:00:14 2002 @@ -59,10 +59,10 @@ * This function will be called when the adapter is plugged * into the USB bus. */ -static void * __devinit probe_st5481(struct usb_device *dev, - unsigned int ifnum, - const struct usb_device_id *id) +static int probe_st5481(struct usb_interface *intf + const struct usb_device_id *id) { + struct usb_device *dev = interface_to_usbdev(intf); struct st5481_adapter *adapter; struct hisax_b_if *b_if[2]; int retval, i; @@ -73,7 +73,7 @@ adapter = kmalloc(sizeof(struct st5481_adapter), GFP_KERNEL); if (!adapter) - return NULL; + return -ENOMEM; memset(adapter, 0, sizeof(struct st5481_adapter)); @@ -114,6 +114,7 @@ hisax_register(&adapter->hisax_d_if, b_if, "st5481_usb", protocol); st5481_start(adapter); + dev_set_drvdata(&intf->dev, adapter); return adapter; err_b: @@ -123,19 +124,23 @@ err_usb: st5481_release_usb(adapter); err: - return NULL; + return -EIO; } /* * This function will be called when the adapter is removed * from the USB bus. */ -static void __devexit disconnect_st5481(struct usb_device *dev, void *arg) +static void disconnect_st5481(struct usb_interface *intf) { - struct st5481_adapter *adapter = arg; + struct st5481_adapter *adapter = dev_get_drvdata(&intf->dev); DBG(1,""); + dev_set_drvdata(&intf->dev, NULL); + if (!adapter) + return; + list_del(&adapter->list); st5481_stop(adapter); @@ -176,10 +181,10 @@ MODULE_DEVICE_TABLE (usb, st5481_ids); static struct usb_driver st5481_usb_driver = { - .name = "st5481_usb", - .probe = probe_st5481, - .disconnect = __devexit_p(disconnect_st5481), - .id_table = st5481_ids, + .name = "st5481_usb", + .probe = probe_st5481, + .disconnect = disconnect_st5481, + .id_table = st5481_ids, }; static int __init st5481_usb_init(void) diff -Nru a/drivers/media/video/cpia_usb.c b/drivers/media/video/cpia_usb.c --- a/drivers/media/video/cpia_usb.c Mon Sep 16 15:00:14 2002 +++ b/drivers/media/video/cpia_usb.c Mon Sep 16 15:00:14 2002 @@ -479,9 +479,10 @@ /* Probing and initializing */ -static void *cpia_probe(struct usb_device *udev, unsigned int ifnum, - const struct usb_device_id *id) +static int cpia_probe(struct usb_interface *intf, + const struct usb_device_id *id) { + struct usb_device *udev = interface_to_usbdev(intf); struct usb_interface_descriptor *interface; struct usb_cpia *ucpia; struct cam_data *cam; @@ -489,16 +490,16 @@ /* A multi-config CPiA camera? */ if (udev->descriptor.bNumConfigurations != 1) - return NULL; + return -ENODEV; - interface = &udev->actconfig->interface[ifnum].altsetting[0]; + interface = &intf->altsetting[0]; printk(KERN_INFO "USB CPiA camera found\n"); ucpia = kmalloc(sizeof(*ucpia), GFP_KERNEL); if (!ucpia) { printk(KERN_ERR "couldn't kmalloc cpia struct\n"); - return NULL; + return -ENOMEM; } memset(ucpia, 0, sizeof(*ucpia)); @@ -548,7 +549,8 @@ cpia_add_to_list(cam_list, cam); spin_unlock( &cam_list_lock_usb ); - return cam; + dev_set_drvdata(&intf->dev, cam); + return 0; fail_all: vfree(ucpia->buffers[2]); @@ -561,10 +563,10 @@ ucpia->buffers[0] = NULL; fail_alloc_0: - return NULL; + return -EIO; } -static void cpia_disconnect(struct usb_device *dev, void *ptr); +static void cpia_disconnect(struct usb_interface *intf); static struct usb_device_id cpia_id_table [] = { { USB_DEVICE(0x0553, 0x0002) }, @@ -586,11 +588,17 @@ /* don't use dev, it may be NULL! (see usb_cpia_cleanup) */ /* _disconnect from usb_cpia_cleanup is not necessary since usb_deregister */ /* will do it for us as well as passing a udev structure - jerdfelt */ -static void cpia_disconnect(struct usb_device *udev, void *ptr) +static void cpia_disconnect(struct usb_interface *intf) { - struct cam_data *cam = (struct cam_data *) ptr; - struct usb_cpia *ucpia = (struct usb_cpia *) cam->lowlevel_data; + struct cam_data *cam = dev_get_drvdata(&intf->dev); + struct usb_cpia *ucpia; + struct usb_device *udev; + dev_set_drvdata(&intf->dev, NULL); + if (!cam) + return; + + ucpia = (struct usb_cpia *) cam->lowlevel_data; spin_lock( &cam_list_lock_usb ); cpia_remove_from_list(cam); spin_unlock( &cam_list_lock_usb ); @@ -607,6 +615,7 @@ if (waitqueue_active(&ucpia->wq_stream)) wake_up_interruptible(&ucpia->wq_stream); + udev = interface_to_usbdev(intf); usb_driver_release_interface(&cpia_driver, &udev->actconfig->interface[0]);