msm: smd_pkt: close the smd channel if open process times out

If the smd_pkt open process times out after smd_open returned success,
call smd_close so that the end client can successfully attempt to open
the smd_pkt device at a later time.  If this is not done, smd_open will
return an error code when the end client attempts a retry, causing smd
and smd_pkt to get out of sync with regards to the state of the smd
channel.

Change-Id: I7169fb787f91a4ea7870872f9b1f1faeee2a1336
Signed-off-by: Jeffrey Hugo <jhugo@codeaurora.org>
diff --git a/arch/arm/mach-msm/smd_pkt.c b/arch/arm/mach-msm/smd_pkt.c
index 446a69f..abcd336 100644
--- a/arch/arm/mach-msm/smd_pkt.c
+++ b/arch/arm/mach-msm/smd_pkt.c
@@ -833,8 +833,12 @@
 		r = wait_event_interruptible_timeout(
 				smd_pkt_devp->ch_opened_wait_queue,
 				smd_pkt_devp->is_open, (2 * HZ));
-		if (r == 0)
+		if (r == 0) {
 			r = -ETIMEDOUT;
+			/* close the ch to sync smd's state with smd_pkt */
+			smd_close(smd_pkt_devp->ch);
+			smd_pkt_devp->ch = NULL;
+		}
 
 		if (r < 0) {
 			pr_err("%s: wait on smd_pkt_dev id:%d OPEN event failed"