msm: xo: Add NULL pointer and error pointer check

Add NULL pointer check since msm_get_xo() might return NULL due to
RPM is not available. Also add error pointer check to make msm_xo_*
APIs more defensive.

Change-Id: Ie20ae974215e05430a3d5d8cc826774cbe243f51
Signed-off-by: Tianyi Gou <tgou@codeaurora.org>
diff --git a/arch/arm/mach-msm/msm_xo.c b/arch/arm/mach-msm/msm_xo.c
index a82d4d5..1e9c05f 100644
--- a/arch/arm/mach-msm/msm_xo.c
+++ b/arch/arm/mach-msm/msm_xo.c
@@ -190,11 +190,11 @@
 {
 	int ret;
 	unsigned long flags;
-	/* TODO: Remove or fix this function for 8064 once xo is in */
-	if (cpu_is_apq8064())
+
+	if (!xo_voter)
 		return 0;
 
-	if (mode >= NUM_MSM_XO_MODES)
+	if (mode >= NUM_MSM_XO_MODES || IS_ERR(xo_voter))
 		return -EINVAL;
 
 	spin_lock_irqsave(&msm_xo_lock, flags);
@@ -221,7 +221,10 @@
 	unsigned long flags;
 	struct msm_xo_voter *xo_voter;
 
-	/* TODO: Remove or fix this function for 8064 once xo is in */
+	/*
+	 * TODO: Remove early return for 8064 once RPM XO voting support
+	 * is available.
+	 */
 	if (cpu_is_apq8064())
 		return NULL;
 
@@ -271,6 +274,9 @@
 {
 	unsigned long flags;
 
+	if (!xo_voter || IS_ERR(xo_voter))
+		return;
+
 	spin_lock_irqsave(&msm_xo_lock, flags);
 	__msm_xo_mode_vote(xo_voter, MSM_XO_MODE_OFF);
 	xo_voter->xo->votes[MSM_XO_MODE_OFF]--;