diff options
Diffstat (limited to 'drivers/nfc')
-rw-r--r-- | drivers/nfc/pn533.c | 75 |
1 files changed, 7 insertions, 68 deletions
diff --git a/drivers/nfc/pn533.c b/drivers/nfc/pn533.c index 2cb8ceb9be8d..d17ec6a664a0 100644 --- a/drivers/nfc/pn533.c +++ b/drivers/nfc/pn533.c @@ -329,7 +329,6 @@ struct pn533 { struct pn533_frame *out_frame; struct urb *in_urb; - struct pn533_frame *in_frame; struct sk_buff_head resp_q; @@ -371,13 +370,9 @@ struct pn533 { struct pn533_cmd { struct list_head queue; - struct pn533_frame *out_frame; - struct pn533_frame *in_frame; - int in_frame_len; u8 cmd_code; struct sk_buff *req; struct sk_buff *resp; - pn533_cmd_complete_t cmd_complete; void *arg; }; @@ -911,69 +906,16 @@ static void pn533_wq_cmd(struct work_struct *work) mutex_unlock(&dev->cmd_lock); - if (cmd->cmd_code != PN533_CMD_UNDEF) - __pn533_send_cmd_frame_async(dev, - (struct pn533_frame *)cmd->req->data, - (struct pn533_frame *)cmd->resp->data, - PN533_NORMAL_FRAME_MAX_LEN, - pn533_send_async_complete, - cmd->arg); - else - __pn533_send_cmd_frame_async(dev, cmd->out_frame, cmd->in_frame, - cmd->in_frame_len, - cmd->cmd_complete, cmd->arg); + __pn533_send_cmd_frame_async(dev, + (struct pn533_frame *)cmd->req->data, + (struct pn533_frame *)cmd->resp->data, + PN533_NORMAL_FRAME_MAX_LEN, + pn533_send_async_complete, + cmd->arg); kfree(cmd); } -static int pn533_send_cmd_frame_async(struct pn533 *dev, - struct pn533_frame *out_frame, - struct pn533_frame *in_frame, - int in_frame_len, - pn533_cmd_complete_t cmd_complete, - void *arg) -{ - struct pn533_cmd *cmd; - int rc = 0; - - nfc_dev_dbg(&dev->interface->dev, "%s", __func__); - - mutex_lock(&dev->cmd_lock); - - if (!dev->cmd_pending) { - rc = __pn533_send_cmd_frame_async(dev, out_frame, in_frame, - in_frame_len, cmd_complete, - arg); - if (!rc) - dev->cmd_pending = 1; - - goto unlock; - } - - nfc_dev_dbg(&dev->interface->dev, "%s Queueing command", __func__); - - cmd = kzalloc(sizeof(struct pn533_cmd), GFP_KERNEL); - if (!cmd) { - rc = -ENOMEM; - goto unlock; - } - - INIT_LIST_HEAD(&cmd->queue); - cmd->out_frame = out_frame; - cmd->in_frame = in_frame; - cmd->in_frame_len = in_frame_len; - cmd->cmd_code = PN533_CMD_UNDEF; - cmd->cmd_complete = cmd_complete; - cmd->arg = arg; - - list_add_tail(&cmd->queue, &dev->cmd_queue); - -unlock: - mutex_unlock(&dev->cmd_lock); - - return rc; -} - struct pn533_sync_cmd_response { struct sk_buff *resp; struct completion done; @@ -2527,12 +2469,11 @@ static int pn533_probe(struct usb_interface *interface, goto error; } - dev->in_frame = kmalloc(PN533_NORMAL_FRAME_MAX_LEN, GFP_KERNEL); dev->in_urb = usb_alloc_urb(0, GFP_KERNEL); dev->out_frame = kmalloc(PN533_NORMAL_FRAME_MAX_LEN, GFP_KERNEL); dev->out_urb = usb_alloc_urb(0, GFP_KERNEL); - if (!dev->in_frame || !dev->out_frame || !dev->in_urb || !dev->out_urb) + if (!dev->out_frame || !dev->in_urb || !dev->out_urb) goto error; usb_fill_bulk_urb(dev->in_urb, dev->udev, @@ -2616,7 +2557,6 @@ free_nfc_dev: destroy_wq: destroy_workqueue(dev->wq); error: - kfree(dev->in_frame); usb_free_urb(dev->in_urb); kfree(dev->out_frame); usb_free_urb(dev->out_urb); @@ -2649,7 +2589,6 @@ static void pn533_disconnect(struct usb_interface *interface) kfree(cmd); } - kfree(dev->in_frame); usb_free_urb(dev->in_urb); kfree(dev->out_frame); usb_free_urb(dev->out_urb); |