diff options
Diffstat (limited to 'drivers/nfc')
-rw-r--r-- | drivers/nfc/pn533.c | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/drivers/nfc/pn533.c b/drivers/nfc/pn533.c index ef8e44785b5e..72860569fb1a 100644 --- a/drivers/nfc/pn533.c +++ b/drivers/nfc/pn533.c | |||
@@ -330,8 +330,6 @@ struct pn533 { | |||
330 | int wq_in_error; | 330 | int wq_in_error; |
331 | int cancel_listen; | 331 | int cancel_listen; |
332 | 332 | ||
333 | pn533_cmd_complete_t cmd_complete; | ||
334 | void *cmd_complete_arg; | ||
335 | void *cmd_complete_mi_arg; | 333 | void *cmd_complete_mi_arg; |
336 | struct mutex cmd_lock; | 334 | struct mutex cmd_lock; |
337 | struct pn533_cmd *cmd; | 335 | struct pn533_cmd *cmd; |
@@ -506,13 +504,14 @@ static bool pn533_rx_frame_is_cmd_response(struct pn533 *dev, void *frame) | |||
506 | PN533_CMD_RESPONSE(dev->cmd->code)); | 504 | PN533_CMD_RESPONSE(dev->cmd->code)); |
507 | } | 505 | } |
508 | 506 | ||
507 | static int pn533_send_async_complete(struct pn533 *dev); | ||
509 | 508 | ||
510 | static void pn533_wq_cmd_complete(struct work_struct *work) | 509 | static void pn533_wq_cmd_complete(struct work_struct *work) |
511 | { | 510 | { |
512 | struct pn533 *dev = container_of(work, struct pn533, cmd_complete_work); | 511 | struct pn533 *dev = container_of(work, struct pn533, cmd_complete_work); |
513 | int rc; | 512 | int rc; |
514 | 513 | ||
515 | rc = dev->cmd_complete(dev, dev->cmd_complete_arg, dev->wq_in_error); | 514 | rc = pn533_send_async_complete(dev); |
516 | if (rc != -EINPROGRESS) | 515 | if (rc != -EINPROGRESS) |
517 | queue_work(dev->wq, &dev->cmd_work); | 516 | queue_work(dev->wq, &dev->cmd_work); |
518 | } | 517 | } |
@@ -643,15 +642,10 @@ static int pn533_send_ack(struct pn533 *dev, gfp_t flags) | |||
643 | static int __pn533_send_frame_async(struct pn533 *dev, | 642 | static int __pn533_send_frame_async(struct pn533 *dev, |
644 | struct sk_buff *out, | 643 | struct sk_buff *out, |
645 | struct sk_buff *in, | 644 | struct sk_buff *in, |
646 | int in_len, | 645 | int in_len) |
647 | pn533_cmd_complete_t cmd_complete, | ||
648 | void *arg) | ||
649 | { | 646 | { |
650 | int rc; | 647 | int rc; |
651 | 648 | ||
652 | dev->cmd_complete = cmd_complete; | ||
653 | dev->cmd_complete_arg = arg; | ||
654 | |||
655 | dev->out_urb->transfer_buffer = out->data; | 649 | dev->out_urb->transfer_buffer = out->data; |
656 | dev->out_urb->transfer_buffer_length = out->len; | 650 | dev->out_urb->transfer_buffer_length = out->len; |
657 | 651 | ||
@@ -692,9 +686,10 @@ static void pn533_build_cmd_frame(struct pn533 *dev, u8 cmd_code, | |||
692 | ops->tx_frame_finish(skb->data); | 686 | ops->tx_frame_finish(skb->data); |
693 | } | 687 | } |
694 | 688 | ||
695 | static int pn533_send_async_complete(struct pn533 *dev, void *arg, int status) | 689 | static int pn533_send_async_complete(struct pn533 *dev) |
696 | { | 690 | { |
697 | struct pn533_cmd *cmd = arg; | 691 | struct pn533_cmd *cmd = dev->cmd; |
692 | int status = dev->wq_in_error; | ||
698 | 693 | ||
699 | struct sk_buff *req = cmd->req; | 694 | struct sk_buff *req = cmd->req; |
700 | struct sk_buff *resp = cmd->resp; | 695 | struct sk_buff *resp = cmd->resp; |
@@ -749,8 +744,7 @@ static int __pn533_send_async(struct pn533 *dev, u8 cmd_code, | |||
749 | mutex_lock(&dev->cmd_lock); | 744 | mutex_lock(&dev->cmd_lock); |
750 | 745 | ||
751 | if (!dev->cmd_pending) { | 746 | if (!dev->cmd_pending) { |
752 | rc = __pn533_send_frame_async(dev, req, resp, resp_len, | 747 | rc = __pn533_send_frame_async(dev, req, resp, resp_len); |
753 | pn533_send_async_complete, cmd); | ||
754 | if (rc) | 748 | if (rc) |
755 | goto error; | 749 | goto error; |
756 | 750 | ||
@@ -859,8 +853,7 @@ static int pn533_send_cmd_direct_async(struct pn533 *dev, u8 cmd_code, | |||
859 | 853 | ||
860 | pn533_build_cmd_frame(dev, cmd_code, req); | 854 | pn533_build_cmd_frame(dev, cmd_code, req); |
861 | 855 | ||
862 | rc = __pn533_send_frame_async(dev, req, resp, resp_len, | 856 | rc = __pn533_send_frame_async(dev, req, resp, resp_len); |
863 | pn533_send_async_complete, cmd); | ||
864 | if (rc < 0) { | 857 | if (rc < 0) { |
865 | dev_kfree_skb(resp); | 858 | dev_kfree_skb(resp); |
866 | kfree(cmd); | 859 | kfree(cmd); |
@@ -891,8 +884,7 @@ static void pn533_wq_cmd(struct work_struct *work) | |||
891 | 884 | ||
892 | mutex_unlock(&dev->cmd_lock); | 885 | mutex_unlock(&dev->cmd_lock); |
893 | 886 | ||
894 | rc = __pn533_send_frame_async(dev, cmd->req, cmd->resp, cmd->resp_len, | 887 | rc = __pn533_send_frame_async(dev, cmd->req, cmd->resp, cmd->resp_len); |
895 | pn533_send_async_complete, cmd); | ||
896 | if (rc < 0) { | 888 | if (rc < 0) { |
897 | dev_kfree_skb(cmd->req); | 889 | dev_kfree_skb(cmd->req); |
898 | dev_kfree_skb(cmd->resp); | 890 | dev_kfree_skb(cmd->resp); |