aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc
diff options
context:
space:
mode:
authorPavan Savoy <pavan_savoy@ti.com>2011-08-10 11:18:34 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2011-08-22 17:13:33 -0400
commit2f81a02ce0693863019dc3fcc532533af6dc0dcd (patch)
tree4a54dd12adf21d355511e056fd92bcbd82c76b4d /drivers/misc
parent78bb9697e2c4b62c426f1a2571c293a2e4463adf (diff)
drivers:misc: ti-st: reinit completion before send
download firmware behaves differently at different times, when logs are enabled and the system is loaded, the wait_for_completion is able to wait for every send, However during other times the wait does not happen. So, for reliability reinitializing the completion before every send, makes sure the wait happens for every send. Signed-off-by: Pavan Savoy <pavan_savoy@ti.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/misc')
-rw-r--r--drivers/misc/ti-st/st_kim.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/misc/ti-st/st_kim.c b/drivers/misc/ti-st/st_kim.c
index e5639ca97dce..1748a9351de0 100644
--- a/drivers/misc/ti-st/st_kim.c
+++ b/drivers/misc/ti-st/st_kim.c
@@ -299,6 +299,7 @@ static long download_firmware(struct kim_data_s *kim_gdata)
299 299
300 switch (((struct bts_action *)ptr)->type) { 300 switch (((struct bts_action *)ptr)->type) {
301 case ACTION_SEND_COMMAND: /* action send */ 301 case ACTION_SEND_COMMAND: /* action send */
302 pr_debug("S");
302 action_ptr = &(((struct bts_action *)ptr)->data[0]); 303 action_ptr = &(((struct bts_action *)ptr)->data[0]);
303 if (unlikely 304 if (unlikely
304 (((struct hci_command *)action_ptr)->opcode == 305 (((struct hci_command *)action_ptr)->opcode ==
@@ -336,6 +337,10 @@ static long download_firmware(struct kim_data_s *kim_gdata)
336 release_firmware(kim_gdata->fw_entry); 337 release_firmware(kim_gdata->fw_entry);
337 return -ETIMEDOUT; 338 return -ETIMEDOUT;
338 } 339 }
340 /* reinit completion before sending for the
341 * relevant wait
342 */
343 INIT_COMPLETION(kim_gdata->kim_rcvd);
339 344
340 /* 345 /*
341 * Free space found in uart buffer, call st_int_write 346 * Free space found in uart buffer, call st_int_write
@@ -362,6 +367,7 @@ static long download_firmware(struct kim_data_s *kim_gdata)
362 } 367 }
363 break; 368 break;
364 case ACTION_WAIT_EVENT: /* wait */ 369 case ACTION_WAIT_EVENT: /* wait */
370 pr_debug("W");
365 if (!wait_for_completion_timeout 371 if (!wait_for_completion_timeout
366 (&kim_gdata->kim_rcvd, 372 (&kim_gdata->kim_rcvd,
367 msecs_to_jiffies(CMD_RESP_TIME))) { 373 msecs_to_jiffies(CMD_RESP_TIME))) {