diff --git a/drivers/tty/serial/msm_serial_hs.c b/drivers/tty/serial/msm_serial_hs.c
index 6d205f397dfdbad5ee46f9fbcfcb8c684170f46d..eedd1288c262dd5cd1833f76c5016004219713ef 100644
--- a/drivers/tty/serial/msm_serial_hs.c
+++ b/drivers/tty/serial/msm_serial_hs.c
@@ -2336,7 +2336,8 @@ void msm_hs_request_clock_on(struct uart_port *uport)
 		ret = msm_hs_clock_vote(msm_uport);
 		if (ret) {
 			dev_err(uport->dev, "Clock ON Failure"
-			"For UART CLK Stalling HSUART\n");
+				" For UART CLK Stalling HSUART\n");
+			spin_lock_irqsave(&uport->lock, flags);
 			break;
 		}
 
@@ -2660,7 +2661,7 @@ static int msm_hs_startup(struct uart_port *uport)
 			  "msm_hs_uart", msm_uport);
 	if (unlikely(ret)) {
 		MSM_HS_ERR("%s():Error getting uart irq\n", __func__);
-		goto free_wake_irq;
+		goto clear_wake_irq;
 	}
 	if (use_low_power_wakeup(msm_uport)) {
 
@@ -2681,7 +2682,7 @@ static int msm_hs_startup(struct uart_port *uport)
 	if (ret) {
 		MSM_HS_ERR("%s(): Error could not turn on UART clk\n",
 				__func__);
-		goto free_uart_irq;
+		goto free_wake_irq;
 	}
 
 	spin_lock_irqsave(&uport->lock, flags);
@@ -2696,9 +2697,12 @@ static int msm_hs_startup(struct uart_port *uport)
 
 	return 0;
 
+free_wake_irq:
+	if (use_low_power_wakeup(msm_uport))
+		free_irq(msm_uport->wakeup.irq, msm_uport);
 free_uart_irq:
 	free_irq(uport->irq, msm_uport);
-free_wake_irq:
+clear_wake_irq:
 	if (use_low_power_wakeup(msm_uport))
 		irq_set_irq_wake(msm_uport->wakeup.irq, 0);
 sps_disconnect_rx: