Staging: beceem: Move ZTE TU25's USB id to the beceem module
[pandora-kernel.git] / drivers / staging / bcm / InterfaceInit.c
index 824f9a4..869ebab 100644 (file)
@@ -2,14 +2,27 @@
 
 static struct usb_device_id InterfaceUsbtable[] = {
     { USB_DEVICE(BCM_USB_VENDOR_ID_T3, BCM_USB_PRODUCT_ID_T3) },
-       { USB_DEVICE(BCM_USB_VENDOR_ID_T3, BCM_USB_PRODUCT_ID_T3B) },
-       { USB_DEVICE(BCM_USB_VENDOR_ID_T3, BCM_USB_PRODUCT_ID_T3L) },
-       { USB_DEVICE(BCM_USB_VENDOR_ID_ZTE, BCM_USB_PRODUCT_ID_226) },
-       { USB_DEVICE(BCM_USB_VENDOR_ID_FOXCONN, BCM_USB_PRODUCT_ID_1901) },
-    {}
+    { USB_DEVICE(BCM_USB_VENDOR_ID_T3, BCM_USB_PRODUCT_ID_T3B) },
+    { USB_DEVICE(BCM_USB_VENDOR_ID_T3, BCM_USB_PRODUCT_ID_T3L) },
+    { USB_DEVICE(BCM_USB_VENDOR_ID_ZTE, BCM_USB_PRODUCT_ID_226) },
+    { USB_DEVICE(BCM_USB_VENDOR_ID_FOXCONN, BCM_USB_PRODUCT_ID_1901) },
+    { USB_DEVICE(BCM_USB_VENDOR_ID_ZTE, BCM_USB_PRODUCT_ID_ZTE_TU25) },
+    { }
 };
+MODULE_DEVICE_TABLE(usb, InterfaceUsbtable);
 
-VOID InterfaceAdapterFree(PS_INTERFACE_ADAPTER psIntfAdapter)
+static int debug = -1;
+module_param(debug, uint, 0600);
+MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
+
+static const u32 default_msg =
+    NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK
+    | NETIF_MSG_TIMER | NETIF_MSG_TX_ERR | NETIF_MSG_RX_ERR
+    | NETIF_MSG_IFUP | NETIF_MSG_IFDOWN;
+
+static INT InterfaceAdapterInit(PS_INTERFACE_ADAPTER Adapter);
+
+static VOID InterfaceAdapterFree(PS_INTERFACE_ADAPTER psIntfAdapter)
 {
        INT i = 0;
        // Wake up the wait_queue...
@@ -48,7 +61,7 @@ VOID InterfaceAdapterFree(PS_INTERFACE_ADAPTER psIntfAdapter)
        {
                if (psIntfAdapter->asUsbRcb[i].urb != NULL)
                {
-                       bcm_kfree(psIntfAdapter->asUsbRcb[i].urb->transfer_buffer);
+                       kfree(psIntfAdapter->asUsbRcb[i].urb->transfer_buffer);
                        usb_free_urb(psIntfAdapter->asUsbRcb[i].urb);
                        psIntfAdapter->asUsbRcb[i].urb = NULL;
                }
@@ -56,30 +69,7 @@ VOID InterfaceAdapterFree(PS_INTERFACE_ADAPTER psIntfAdapter)
        AdapterFree(psIntfAdapter->psAdapter);
 }
 
-
-
-static int usbbcm_open(struct inode *inode, struct file *file)
-{
-       return 0;
-}
-
-static int usbbcm_release(struct inode *inode, struct file *file)
-{
-       return 0;
-}
-
-static ssize_t usbbcm_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos)
-{
-       return 0;
-}
-
-static ssize_t usbbcm_write(struct file *file, const char __user *user_buffer, size_t count, loff_t *ppos)
-{
-       return 0;
-}
-
-
-VOID ConfigureEndPointTypesThroughEEPROM(PMINI_ADAPTER Adapter)
+static VOID ConfigureEndPointTypesThroughEEPROM(PMINI_ADAPTER Adapter)
 {
        ULONG ulReg = 0;
 
@@ -157,48 +147,32 @@ VOID ConfigureEndPointTypesThroughEEPROM(PMINI_ADAPTER Adapter)
 
 }
 
-static struct file_operations usbbcm_fops = {
-    .open    =  usbbcm_open,
-    .release =  usbbcm_release,
-    .read    =  usbbcm_read,
-    .write   =  usbbcm_write,
-    .owner   =  THIS_MODULE,
-       .llseek = no_llseek,
-};
-
-static struct usb_class_driver usbbcm_class = {
-    .name =            "usbbcm",
-    .fops =            &usbbcm_fops,
-    .minor_base =   BCM_USB_MINOR_BASE,
-};
-
 static int
 usbbcm_device_probe(struct usb_interface *intf, const struct usb_device_id *id)
 {
-       int retval =0 ;
-       PMINI_ADAPTER psAdapter = NULL;
-       PS_INTERFACE_ADAPTER psIntfAdapter = NULL;
-       struct usb_device      *udev = NULL;
-
-//     BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Usbbcm probe!!");
-       if((intf == NULL) || (id == NULL))
-       {
-       //      BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "intf or id is NULL");
-               return -EINVAL;
-       }
+       struct usb_device *udev = interface_to_usbdev (intf);
+       int retval;
+       PMINI_ADAPTER psAdapter;
+       PS_INTERFACE_ADAPTER psIntfAdapter;
+       struct net_device *ndev;
 
-       /* Allocate Adapter structure */
-       if((psAdapter = kzalloc(sizeof(MINI_ADAPTER), GFP_KERNEL)) == NULL)
-       {
-               BCM_DEBUG_PRINT(psAdapter,DBG_TYPE_PRINTK, 0, 0, "Out of memory");
+       /* Reserve one extra queue for the bit-bucket */
+       ndev = alloc_etherdev_mq(sizeof(MINI_ADAPTER), NO_OF_QUEUES+1);
+       if(ndev == NULL) {
+               dev_err(&udev->dev, DRV_NAME ": no memory for device\n");
                return -ENOMEM;
        }
 
+       SET_NETDEV_DEV(ndev, &intf->dev);
+
+       psAdapter = netdev_priv(ndev);
+       psAdapter->dev = ndev;
+       psAdapter->msg_enable = netif_msg_init(debug, default_msg);
+
     /* Init default driver debug state */
 
-    psAdapter->stDebugState.debug_level = DBG_LVL_CURR;
+       psAdapter->stDebugState.debug_level = DBG_LVL_CURR;
        psAdapter->stDebugState.type = DBG_TYPE_INITEXIT;
-       memset (psAdapter->stDebugState.subtype, 0, sizeof (psAdapter->stDebugState.subtype));
 
     /* Technically, one can start using BCM_DEBUG_PRINT after this point.
         * However, realize that by default the Type/Subtype bitmaps are all zero now;
@@ -217,22 +191,21 @@ usbbcm_device_probe(struct usb_interface *intf, const struct usb_device_id *id)
        retval = InitAdapter(psAdapter);
        if(retval)
        {
-               BCM_DEBUG_PRINT (psAdapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "InitAdapter Failed\n");
+               dev_err(&udev->dev, DRV_NAME ": InitAdapter Failed\n");
                AdapterFree(psAdapter);
                return retval;
        }
 
        /* Allocate interface adapter structure */
-       if((psAdapter->pvInterfaceAdapter =
-               kmalloc(sizeof(S_INTERFACE_ADAPTER), GFP_KERNEL)) == NULL)
+       psIntfAdapter = kzalloc(sizeof(S_INTERFACE_ADAPTER), GFP_KERNEL);
+       if (psIntfAdapter == NULL)
        {
-               BCM_DEBUG_PRINT(psAdapter,DBG_TYPE_PRINTK, 0, 0, "Out of memory");
+               dev_err(&udev->dev, DRV_NAME ": no memory for Interface adapter\n");
                AdapterFree (psAdapter);
                return -ENOMEM;
        }
-       memset(psAdapter->pvInterfaceAdapter, 0, sizeof(S_INTERFACE_ADAPTER));
 
-       psIntfAdapter = InterfaceAdapterGet(psAdapter);
+       psAdapter->pvInterfaceAdapter = psIntfAdapter;
        psIntfAdapter->psAdapter = psAdapter;
 
        /* Store usb interface in Interface Adapter */
@@ -255,8 +228,6 @@ usbbcm_device_probe(struct usb_interface *intf, const struct usb_device_id *id)
                usb_set_intfdata(intf, NULL);
                udev = interface_to_usbdev (intf);
                usb_put_dev(udev);
-               if(psAdapter->bUsbClassDriverRegistered == TRUE)
-                               usb_deregister_dev (intf, &usbbcm_class);
                InterfaceAdapterFree(psIntfAdapter);
                return retval ;
        }
@@ -269,7 +240,6 @@ usbbcm_device_probe(struct usb_interface *intf, const struct usb_device_id *id)
                }
        }
 
-       udev = interface_to_usbdev (intf);
        /* Check whether the USB-Device Supports remote Wake-Up */
        if(USB_CONFIG_ATT_WAKEUP & udev->actconfig->desc.bmAttributes)
        {
@@ -309,38 +279,26 @@ usbbcm_device_probe(struct usb_interface *intf, const struct usb_device_id *id)
 
 static void usbbcm_disconnect (struct usb_interface *intf)
 {
-       PS_INTERFACE_ADAPTER psIntfAdapter = NULL;
-       PMINI_ADAPTER psAdapter = NULL;
-       struct usb_device       *udev = NULL;
-    PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(gblpnetdev);
+       PS_INTERFACE_ADAPTER psIntfAdapter = usb_get_intfdata(intf);
+       PMINI_ADAPTER psAdapter;
+       struct usb_device  *udev = interface_to_usbdev (intf);
 
-       BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Usb disconnected");
-       if(intf == NULL)
-       {
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "intf pointer is NULL");
-               return;
-       }
-       psIntfAdapter = usb_get_intfdata(intf);
-       BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "psIntfAdapter 0x%p",psIntfAdapter);
        if(psIntfAdapter == NULL)
-       {
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "InterfaceAdapter pointer is NULL");
                return;
-       }
+
        psAdapter = psIntfAdapter->psAdapter;
+       netif_device_detach(psAdapter->dev);
+
        if(psAdapter->bDoSuspend)
                intf->needs_remote_wakeup = 0;
 
        psAdapter->device_removed = TRUE ;
        usb_set_intfdata(intf, NULL);
        InterfaceAdapterFree(psIntfAdapter);
-       udev = interface_to_usbdev (intf);
        usb_put_dev(udev);
-       usb_deregister_dev (intf, &usbbcm_class);
 }
 
-
-static __inline int AllocUsbCb(PS_INTERFACE_ADAPTER psIntfAdapter)
+static int AllocUsbCb(PS_INTERFACE_ADAPTER psIntfAdapter)
 {
        int i = 0;
        for(i = 0; i < MAXIMUM_USB_TCB; i++)
@@ -382,13 +340,11 @@ static int device_run(PS_INTERFACE_ADAPTER psIntfAdapter)
        status = InitCardAndDownloadFirmware(psIntfAdapter->psAdapter);
        if(status != STATUS_SUCCESS)
        {
-               BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_PRINTK, 0, 0, "InitCardAndDownloadFirmware failed.\n");
+               pr_err(DRV_NAME "InitCardAndDownloadFirmware failed.\n");
                return status;
        }
        if(TRUE == psIntfAdapter->psAdapter->fw_download_done)
        {
-
-               BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Sending first interrupt URB down......");
                if(StartInterruptUrb(psIntfAdapter))
                {
                        BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Cannot send interrupt in URB");
@@ -401,48 +357,17 @@ static int device_run(PS_INTERFACE_ADAPTER psIntfAdapter)
                                        psIntfAdapter->psAdapter->waiting_to_fw_download_done, 5*HZ);
 
                if(value == 0)
-               {
-                       BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL,"Mailbox Interrupt has not reached to Driver..");
-               }
-               else
-               {
-                       BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL,"Got the mailbox interrupt ...Registering control interface...\n ");
-               }
+                       pr_err(DRV_NAME ": Mailbox Interrupt has not reached to Driver..\n");
+
                if(register_control_device_interface(psIntfAdapter->psAdapter) < 0)
                {
-                       BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_PRINTK, 0, 0, "Register Control Device failed...");
+                       pr_err(DRV_NAME ": Register Control Device failed...\n");
                        return -EIO;
                }
        }
        return 0;
 }
 
-#if 0
-static void    print_usb_interface_desc(struct usb_interface_descriptor *usb_intf_desc)
-{
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "**************** INTERFACE DESCRIPTOR *********************");
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "bLength: %x", usb_intf_desc->bLength);
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "bDescriptorType: %x", usb_intf_desc->bDescriptorType);
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "bInterfaceNumber: %x", usb_intf_desc->bInterfaceNumber);
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "bAlternateSetting: %x", usb_intf_desc->bAlternateSetting);
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "bNumEndpoints: %x", usb_intf_desc->bNumEndpoints);
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "bInterfaceClass: %x", usb_intf_desc->bInterfaceClass);
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "bInterfaceSubClass: %x", usb_intf_desc->bInterfaceSubClass);
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "bInterfaceProtocol: %x", usb_intf_desc->bInterfaceProtocol);
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "iInterface :%x\n",usb_intf_desc->iInterface);
-}
-static void    print_usb_endpoint_descriptor(struct usb_endpoint_descriptor *usb_ep_desc)
-{
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "**************** ENDPOINT DESCRIPTOR *********************");
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "bLength  :%x ", usb_ep_desc->bLength);
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "bDescriptorType  :%x ", usb_ep_desc->bDescriptorType);
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "bEndpointAddress  :%x ", usb_ep_desc->bEndpointAddress);
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "bmAttributes  :%x ", usb_ep_desc->bmAttributes);
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "wMaxPacketSize  :%x ",usb_ep_desc->wMaxPacketSize);
-               BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "bInterval  :%x ",usb_ep_desc->bInterval);
-}
-
-#endif
 
 static inline int bcm_usb_endpoint_num(const struct usb_endpoint_descriptor *epd)
 {
@@ -518,7 +443,7 @@ static inline int bcm_usb_endpoint_is_isoc_out(const struct usb_endpoint_descrip
        return (bcm_usb_endpoint_xfer_isoc(epd) && bcm_usb_endpoint_dir_out(epd));
 }
 
-INT InterfaceAdapterInit(PS_INTERFACE_ADAPTER psIntfAdapter)
+static INT InterfaceAdapterInit(PS_INTERFACE_ADAPTER psIntfAdapter)
 {
        struct usb_host_interface *iface_desc;
        struct usb_endpoint_descriptor *endpoint;
@@ -530,20 +455,9 @@ INT InterfaceAdapterInit(PS_INTERFACE_ADAPTER psIntfAdapter)
        UINT uiData = 0;
 
        /* Store the usb dev into interface adapter */
-       psIntfAdapter->udev = usb_get_dev(interface_to_usbdev(
-                                                               psIntfAdapter->interface));
-
-       if((psIntfAdapter->udev->speed == USB_SPEED_HIGH))
-       {
-               psIntfAdapter->bHighSpeedDevice = TRUE ;
-               BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "MODEM IS CONFIGURED TO HIGH_SPEED ");
-       }
-       else
-       {
-               psIntfAdapter->bHighSpeedDevice = FALSE ;
-               BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "MODEM IS CONFIGURED TO FULL_SPEED ");
-       }
+       psIntfAdapter->udev = usb_get_dev(interface_to_usbdev(psIntfAdapter->interface));
 
+       psIntfAdapter->bHighSpeedDevice = (psIntfAdapter->udev->speed == USB_SPEED_HIGH);
        psIntfAdapter->psAdapter->interface_rdm = BcmRDM;
        psIntfAdapter->psAdapter->interface_wrm = BcmWRM;
 
@@ -552,28 +466,27 @@ INT InterfaceAdapterInit(PS_INTERFACE_ADAPTER psIntfAdapter)
                BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_PRINTK, 0, 0, "CHIP ID Read Failed\n");
                return STATUS_FAILURE;
        }
-    if(0xbece3200==(psIntfAdapter->psAdapter->chip_id&~(0xF0)))
-       {
-               psIntfAdapter->psAdapter->chip_id=(psIntfAdapter->psAdapter->chip_id&~(0xF0));
-       }
 
-       BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "First RDM Chip ID 0x%lx\n", psIntfAdapter->psAdapter->chip_id);
+       if(0xbece3200==(psIntfAdapter->psAdapter->chip_id&~(0xF0)))
+               psIntfAdapter->psAdapter->chip_id &= ~0xF0;
+
+       dev_info(&psIntfAdapter->udev->dev, "RDM Chip ID 0x%lx\n",
+                psIntfAdapter->psAdapter->chip_id);
 
-    iface_desc = psIntfAdapter->interface->cur_altsetting;
-       //print_usb_interface_desc(&(iface_desc->desc));
+       iface_desc = psIntfAdapter->interface->cur_altsetting;
 
        if(psIntfAdapter->psAdapter->chip_id == T3B)
        {
-
                //
                //T3B device will have EEPROM,check if EEPROM is proper and BCM16 can be done or not.
                //
                BeceemEEPROMBulkRead(psIntfAdapter->psAdapter,&uiData,0x0,4);
                if(uiData == BECM)
-               {
                        bBcm16 = TRUE;
-               }
-               BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Number of Altsetting aviailable for This Modem 0x%x\n", psIntfAdapter->interface->num_altsetting);
+
+               dev_info(&psIntfAdapter->udev->dev, "number of alternate setting %d\n",
+                        psIntfAdapter->interface->num_altsetting);
+
                if(bBcm16 == TRUE)
                {
                        //selecting alternate setting one as a default setting for High Speed  modem.
@@ -644,12 +557,10 @@ INT InterfaceAdapterInit(PS_INTERFACE_ADAPTER psIntfAdapter)
        }
 
        iface_desc = psIntfAdapter->interface->cur_altsetting;
-       //print_usb_interface_desc(&(iface_desc->desc));
-       BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_PRINTK, 0, 0, "Current number of endpoints :%x \n", iface_desc->desc.bNumEndpoints);
-    for (value = 0; value < iface_desc->desc.bNumEndpoints; ++value)
+
+       for (value = 0; value < iface_desc->desc.bNumEndpoints; ++value)
        {
-        endpoint = &iface_desc->endpoint[value].desc;
-               //print_usb_endpoint_descriptor(endpoint);
+               endpoint = &iface_desc->endpoint[value].desc;
 
         if (!psIntfAdapter->sBulkIn.bulk_in_endpointAddr && bcm_usb_endpoint_is_bulk_in(endpoint))
         {
@@ -682,10 +593,10 @@ INT InterfaceAdapterInit(PS_INTERFACE_ADAPTER psIntfAdapter)
             psIntfAdapter->sIntrIn.int_in_buffer =
                                                kmalloc(buffer_size, GFP_KERNEL);
             if (!psIntfAdapter->sIntrIn.int_in_buffer) {
-                BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Could not allocate interrupt_in_buffer");
+                   dev_err(&psIntfAdapter->udev->dev,
+                           "could not allocate interrupt_in_buffer\n");
                 return -EINVAL;
             }
-                       //psIntfAdapter->sIntrIn.int_in_pipe =
         }
 
         if (!psIntfAdapter->sIntrOut.int_out_endpointAddr && bcm_usb_endpoint_is_int_out(endpoint))
@@ -716,26 +627,15 @@ INT InterfaceAdapterInit(PS_INTERFACE_ADAPTER psIntfAdapter)
                    psIntfAdapter->sIntrOut.int_out_buffer= kmalloc(buffer_size,
                                                                                                                GFP_KERNEL);
                        if (!psIntfAdapter->sIntrOut.int_out_buffer)
-                                       {
-                       BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Could not allocate interrupt_out_buffer");
-                       return -EINVAL;
-            }
+                       {
+                               dev_err(&psIntfAdapter->udev->dev,
+                                       "could not allocate interrupt_out_buffer\n");
+                                       return -EINVAL;
+                       }
         }
     }
        }
     usb_set_intfdata(psIntfAdapter->interface, psIntfAdapter);
-    retval = usb_register_dev(psIntfAdapter->interface, &usbbcm_class);
-       if(retval)
-       {
-               BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_PRINTK, 0, 0, "usb register dev failed = %d", retval);
-               psIntfAdapter->psAdapter->bUsbClassDriverRegistered = FALSE;
-               return retval;
-       }
-       else
-       {
-               psIntfAdapter->psAdapter->bUsbClassDriverRegistered = TRUE;
-               BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_PRINTK, 0, 0, "usb dev registered");
-       }
 
        psIntfAdapter->psAdapter->bcm_file_download = InterfaceFileDownload;
        psIntfAdapter->psAdapter->bcm_file_readback_from_chip =
@@ -757,21 +657,13 @@ INT InterfaceAdapterInit(PS_INTERFACE_ADAPTER psIntfAdapter)
        }
 
 
-       retval = device_run(psIntfAdapter);
-       if(retval)
-       {
-               return retval;
-       }
-
-
-       return 0;
+       return device_run(psIntfAdapter);
 }
 
 static int InterfaceSuspend (struct usb_interface *intf, pm_message_t message)
 {
        PS_INTERFACE_ADAPTER  psIntfAdapter = usb_get_intfdata(intf);
-       BCM_DEBUG_PRINT(psIntfAdapter->psAdapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "=================================\n");
-       //Bcm_kill_all_URBs(psIntfAdapter);
+
        psIntfAdapter->bSuspended = TRUE;
 
        if(TRUE == psIntfAdapter->bPreparingForBusSuspend)
@@ -812,57 +704,43 @@ static int InterfaceResume (struct usb_interface *intf)
        return 0;
 }
 
-static int InterfacePreReset(struct usb_interface *intf)
-{
-    printk("====================>");
-       return STATUS_SUCCESS;
-}
-
-static int InterfacePostReset(struct usb_interface *intf)
-{
-    printk("Do Post chip reset setting here if it is required");
-       return STATUS_SUCCESS;
-}
 static struct usb_driver usbbcm_driver = {
     .name = "usbbcm",
     .probe = usbbcm_device_probe,
     .disconnect = usbbcm_disconnect,
     .suspend = InterfaceSuspend,
     .resume = InterfaceResume,
-       .pre_reset=InterfacePreReset,
-       .post_reset=InterfacePostReset,
     .id_table = InterfaceUsbtable,
     .supports_autosuspend = 1,
 };
 
+struct class *bcm_class;
 
-/*
-Function:                              InterfaceInitialize
 
-Description:                   This is the hardware specific initialization Function.
-                                               Registering the driver with NDIS , other device specific NDIS
-                                               and hardware initializations are done here.
-
-Input parameters:              IN PMINI_ADAPTER Adapter   - Miniport Adapter Context
+static __init int bcm_init(void)
+{
+       printk(KERN_INFO "%s: %s, %s\n", DRV_NAME, DRV_DESCRIPTION, DRV_VERSION);
+       printk(KERN_INFO "%s\n", DRV_COPYRIGHT);
 
+       bcm_class = class_create(THIS_MODULE, DRV_NAME);
+       if (IS_ERR(bcm_class)) {
+               printk(KERN_ERR DRV_NAME ": could not create class\n");
+               return PTR_ERR(bcm_class);
+       }
 
-Return:                                        BCM_STATUS_SUCCESS - If Initialization of the
-                                               HW Interface was successful.
-                                               Other           - If an error occured.
-*/
-INT InterfaceInitialize(void)
-{
-//     BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Registering Usb driver!!");
        return usb_register(&usbbcm_driver);
 }
 
-INT InterfaceExit(void)
+static __exit void bcm_exit(void)
 {
-       //PMINI_ADAPTER psAdapter = NULL;
-       int status = 0;
+        class_destroy (bcm_class);
 
-       //BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Deregistering Usb driver!!");
        usb_deregister(&usbbcm_driver);
-       return status;
 }
+
+module_init(bcm_init);
+module_exit(bcm_exit);
+
+MODULE_DESCRIPTION(DRV_DESCRIPTION);
+MODULE_VERSION(DRV_VERSION);
 MODULE_LICENSE ("GPL");