From a52bd7d2753b0567c71d604c640e9c4a86221756 Mon Sep 17 00:00:00 2001 From: Thierry Escande Date: Thu, 16 Jun 2016 20:25:22 +0200 Subject: NFC: port100: Make port100_abort_cmd() synchronous This patch makes the abort_cmd function synchronous. This allows the caller to immediately send a new command after abort_cmd() returns. Signed-off-by: Thierry Escande Signed-off-by: Samuel Ortiz diff --git a/drivers/nfc/port100.c b/drivers/nfc/port100.c index 909e3df..481cb43 100644 --- a/drivers/nfc/port100.c +++ b/drivers/nfc/port100.c @@ -472,6 +472,7 @@ struct port100 { struct port100_cmd *cmd; bool cmd_cancel; + struct completion cmd_cancel_done; }; struct port100_cmd { @@ -728,6 +729,8 @@ static int port100_send_ack(struct port100 *dev) mutex_lock(&dev->out_urb_lock); + init_completion(&dev->cmd_cancel_done); + usb_kill_urb(dev->out_urb); dev->out_urb->transfer_buffer = ack_frame; @@ -742,6 +745,9 @@ static int port100_send_ack(struct port100 *dev) mutex_unlock(&dev->out_urb_lock); + if (!rc) + wait_for_completion(&dev->cmd_cancel_done); + return rc; } @@ -921,7 +927,10 @@ static void port100_send_complete(struct urb *urb) { struct port100 *dev = urb->context; - dev->cmd_cancel = false; + if (dev->cmd_cancel) { + dev->cmd_cancel = false; + complete(&dev->cmd_cancel_done); + } switch (urb->status) { case 0: -- cgit v0.10.2