diff options
Diffstat (limited to 'drivers/isdn/hisax/st5481_init.c')
| -rw-r--r-- | drivers/isdn/hisax/st5481_init.c | 79 |
1 files changed, 38 insertions, 41 deletions
diff --git a/drivers/isdn/hisax/st5481_init.c b/drivers/isdn/hisax/st5481_init.c index 2cf5d1a6df6..54ef9e4f8cb 100644 --- a/drivers/isdn/hisax/st5481_init.c +++ b/drivers/isdn/hisax/st5481_init.c @@ -4,13 +4,13 @@ * Author Frode Isaksen * Copyright 2001 by Frode Isaksen <fisaksen@bewan.com> * 2001 by Kai Germaschewski <kai.germaschewski@gmx.de> - * + * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. * */ -/* +/* * TODO: * * b layer1 delay? @@ -24,8 +24,6 @@ * clean up debug */ -#include <linux/config.h> -#include <linux/version.h> #include <linux/module.h> #include <linux/init.h> #include <linux/usb.h> @@ -48,8 +46,6 @@ module_param(debug, int, 0); #endif int st5481_debug; -static LIST_HEAD(adapter_list); - /* ====================================================================== * registration/deregistration with the USB layer */ @@ -67,16 +63,14 @@ static int probe_st5481(struct usb_interface *intf, int retval, i; printk(KERN_INFO "st541: found adapter VendorId %04x, ProductId %04x, LEDs %d\n", - le16_to_cpu(dev->descriptor.idVendor), - le16_to_cpu(dev->descriptor.idProduct), - number_of_leds); + le16_to_cpu(dev->descriptor.idVendor), + le16_to_cpu(dev->descriptor.idProduct), + number_of_leds); - adapter = kmalloc(sizeof(struct st5481_adapter), GFP_KERNEL); + adapter = kzalloc(sizeof(struct st5481_adapter), GFP_KERNEL); if (!adapter) return -ENOMEM; - memset(adapter, 0, sizeof(struct st5481_adapter)); - adapter->number_of_leds = number_of_leds; adapter->usb_dev = dev; @@ -90,7 +84,6 @@ static int probe_st5481(struct usb_interface *intf, adapter->bcs[i].b_if.ifc.priv = &adapter->bcs[i]; adapter->bcs[i].b_if.ifc.l2l1 = st5481_b_l2l1; } - list_add(&adapter->list, &adapter_list); retval = st5481_setup_usb(adapter); if (retval < 0) @@ -111,19 +104,25 @@ static int probe_st5481(struct usb_interface *intf, for (i = 0; i < 2; i++) b_if[i] = &adapter->bcs[i].b_if; - hisax_register(&adapter->hisax_d_if, b_if, "st5481_usb", protocol); + if (hisax_register(&adapter->hisax_d_if, b_if, "st5481_usb", + protocol) != 0) + goto err_b1; + st5481_start(adapter); usb_set_intfdata(intf, adapter); return 0; - err_b: +err_b1: + st5481_release_b(&adapter->bcs[1]); +err_b: st5481_release_b(&adapter->bcs[0]); - err_d: +err_d: st5481_release_d(adapter); - err_usb: +err_usb: st5481_release_usb(adapter); - err: +err: + kfree(adapter); return -EIO; } @@ -135,13 +134,11 @@ static void disconnect_st5481(struct usb_interface *intf) { struct st5481_adapter *adapter = usb_get_intfdata(intf); - DBG(1,""); + DBG(1, ""); usb_set_intfdata(intf, NULL); if (!adapter) return; - - list_del(&adapter->list); st5481_stop(adapter); st5481_release_b(&adapter->bcs[1]); @@ -160,32 +157,32 @@ static void disconnect_st5481(struct usb_interface *intf) * The last 4 bits in the Product Id is set with 4 pins on the chip. */ static struct usb_device_id st5481_ids[] = { - { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID+0x0) }, - { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID+0x1) }, - { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID+0x2) }, - { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID+0x3) }, - { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID+0x4) }, - { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID+0x5) }, - { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID+0x6) }, - { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID+0x7) }, - { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID+0x8) }, - { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID+0x9) }, - { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID+0xA) }, - { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID+0xB) }, - { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID+0xC) }, - { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID+0xD) }, - { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID+0xE) }, - { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID+0xF) }, + { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID + 0x0) }, + { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID + 0x1) }, + { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID + 0x2) }, + { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID + 0x3) }, + { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID + 0x4) }, + { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID + 0x5) }, + { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID + 0x6) }, + { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID + 0x7) }, + { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID + 0x8) }, + { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID + 0x9) }, + { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID + 0xA) }, + { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID + 0xB) }, + { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID + 0xC) }, + { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID + 0xD) }, + { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID + 0xE) }, + { USB_DEVICE(ST_VENDOR_ID, ST5481_PRODUCT_ID + 0xF) }, { } }; -MODULE_DEVICE_TABLE (usb, st5481_ids); +MODULE_DEVICE_TABLE(usb, st5481_ids); static struct usb_driver st5481_usb_driver = { - .owner = THIS_MODULE, .name = "st5481_usb", .probe = probe_st5481, .disconnect = disconnect_st5481, .id_table = st5481_ids, + .disable_hub_initiated_lpm = 1, }; static int __init st5481_usb_init(void) @@ -208,9 +205,9 @@ static int __init st5481_usb_init(void) return 0; - out_d_exit: +out_d_exit: st5481_d_exit(); - out: +out: return retval; } |
