Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes...
[safe/jmp/linux-2.6] / drivers / bluetooth / bfusb.c
index efcc28e..005919a 100644 (file)
@@ -27,7 +27,6 @@
 #include <linux/init.h>
 #include <linux/slab.h>
 #include <linux/types.h>
-#include <linux/sched.h>
 #include <linux/errno.h>
 #include <linux/skbuff.h>
 
 #include <net/bluetooth/bluetooth.h>
 #include <net/bluetooth/hci_core.h>
 
-#ifndef CONFIG_BT_HCIBFUSB_DEBUG
-#undef  BT_DBG
-#define BT_DBG(D...)
-#endif
-
-#define VERSION "1.1"
-
-static int ignore = 0;
+#define VERSION "1.2"
 
 static struct usb_driver bfusb_driver;
 
@@ -95,8 +87,8 @@ struct bfusb_data_scb {
        struct urb *urb;
 };
 
-static void bfusb_tx_complete(struct urb *urb, struct pt_regs *regs);
-static void bfusb_rx_complete(struct urb *urb, struct pt_regs *regs);
+static void bfusb_tx_complete(struct urb *urb);
+static void bfusb_rx_complete(struct urb *urb);
 
 static struct urb *bfusb_get_completed(struct bfusb_data *data)
 {
@@ -190,7 +182,7 @@ static void bfusb_tx_wakeup(struct bfusb_data *data)
        clear_bit(BFUSB_TX_PROCESS, &data->state);
 }
 
-static void bfusb_tx_complete(struct urb *urb, struct pt_regs *regs)
+static void bfusb_tx_complete(struct urb *urb)
 {
        struct sk_buff *skb = (struct sk_buff *) urb->context;
        struct bfusb_data *data = (struct bfusb_data *) skb->dev;
@@ -224,7 +216,7 @@ static int bfusb_rx_submit(struct bfusb_data *data, struct urb *urb)
        struct sk_buff *skb;
        int err, pipe, size = HCI_MAX_FRAME_SIZE + 32;
 
-       BT_DBG("bfusb %p urb %p", bfusb, urb);
+       BT_DBG("bfusb %p urb %p", data, urb);
 
        if (!urb && !(urb = usb_alloc_urb(0, GFP_ATOMIC)))
                return -ENOMEM;
@@ -265,8 +257,7 @@ static inline int bfusb_recv_block(struct bfusb_data *data, int hdr, unsigned ch
 
        if (hdr & 0x10) {
                BT_ERR("%s error in block", data->hdev->name);
-               if (data->reassembly)
-                       kfree_skb(data->reassembly);
+               kfree_skb(data->reassembly);
                data->reassembly = NULL;
                return -EIO;
        }
@@ -349,7 +340,7 @@ static inline int bfusb_recv_block(struct bfusb_data *data, int hdr, unsigned ch
        return 0;
 }
 
-static void bfusb_rx_complete(struct urb *urb, struct pt_regs *regs)
+static void bfusb_rx_complete(struct urb *urb)
 {
        struct sk_buff *skb = (struct sk_buff *) urb->context;
        struct bfusb_data *data = (struct bfusb_data *) skb->dev;
@@ -357,7 +348,7 @@ static void bfusb_rx_complete(struct urb *urb, struct pt_regs *regs)
        int count = urb->actual_length;
        int err, hdr, len;
 
-       BT_DBG("bfusb %p urb %p skb %p len %d", bfusb, urb, skb, skb->len);
+       BT_DBG("bfusb %p urb %p skb %p len %d", data, urb, skb, skb->len);
 
        read_lock(&data->lock);
 
@@ -528,7 +519,7 @@ static int bfusb_send_frame(struct sk_buff *skb)
                buf[2] = (size == BFUSB_MAX_BLOCK_SIZE) ? 0 : size;
 
                memcpy(skb_put(nskb, 3), buf, 3);
-               memcpy(skb_put(nskb, size), skb->data + sent, size);
+               skb_copy_from_linear_data_offset(skb, sent, skb_put(nskb, size), size);
 
                sent  += size;
                count -= size;
@@ -567,7 +558,8 @@ static int bfusb_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg
        return -ENOIOCTLCMD;
 }
 
-static int bfusb_load_firmware(struct bfusb_data *data, unsigned char *firmware, int count)
+static int bfusb_load_firmware(struct bfusb_data *data,
+                              const unsigned char *firmware, int count)
 {
        unsigned char *buf;
        int err, pipe, len, size, sent = 0;
@@ -656,9 +648,6 @@ static int bfusb_probe(struct usb_interface *intf, const struct usb_device_id *i
 
        BT_DBG("intf %p id %p", intf, id);
 
-       if (ignore)
-               return -ENODEV;
-
        /* Check number of endpoints */
        if (intf->cur_altsetting->desc.bNumEndpoints < 2)
                return -EIO;
@@ -696,7 +685,7 @@ static int bfusb_probe(struct usb_interface *intf, const struct usb_device_id *i
                goto error;
        }
 
-       BT_DBG("firmware data %p size %d", firmware->data, firmware->size);
+       BT_DBG("firmware data %p size %zu", firmware->data, firmware->size);
 
        if (bfusb_load_firmware(data, firmware->data, firmware->size) < 0) {
                BT_ERR("Firmware loading failed");
@@ -714,7 +703,7 @@ static int bfusb_probe(struct usb_interface *intf, const struct usb_device_id *i
 
        data->hdev = hdev;
 
-       hdev->type = HCI_USB;
+       hdev->bus = HCI_USB;
        hdev->driver_data = data;
        SET_HCIDEV_DEV(hdev, &intf->dev);
 
@@ -795,10 +784,8 @@ static void __exit bfusb_exit(void)
 module_init(bfusb_init);
 module_exit(bfusb_exit);
 
-module_param(ignore, bool, 0644);
-MODULE_PARM_DESC(ignore, "Ignore devices from the matching table");
-
 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
 MODULE_DESCRIPTION("BlueFRITZ! USB driver ver " VERSION);
 MODULE_VERSION(VERSION);
 MODULE_LICENSE("GPL");
+MODULE_FIRMWARE("bfubase.frm");