From: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Date: Mon, 22 Feb 2016 11:57:26 +0000 (+0530)
Subject: greybus: arche-apb-ctrl: Return immediately if in same state from state change fns
X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=c5e7cbaf3ab8842278a9162dfaf04464ce21f0e4;p=linux.git

greybus: arche-apb-ctrl: Return immediately if in same state from state change fns

Have a check inside all individual operational state change functions
to check whether device is in same state, and if yes, then return
immediately.

Testing Done: Tested on DB3.5 platform.

Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
---

diff --git a/drivers/staging/greybus/arche-apb-ctrl.c b/drivers/staging/greybus/arche-apb-ctrl.c
index 3086306f04fb3..c2f0776f04f4f 100644
--- a/drivers/staging/greybus/arche-apb-ctrl.c
+++ b/drivers/staging/greybus/arche-apb-ctrl.c
@@ -67,7 +67,8 @@ static int coldboot_seq(struct platform_device *pdev)
 	struct arche_apb_ctrl_drvdata *apb = platform_get_drvdata(pdev);
 	int ret;
 
-	if (apb->init_disabled)
+	if (apb->init_disabled ||
+			apb->state == ARCHE_PLATFORM_STATE_ACTIVE)
 		return 0;
 
 	/* Hold APB in reset state */
@@ -112,7 +113,8 @@ static int fw_flashing_seq(struct platform_device *pdev)
 	struct arche_apb_ctrl_drvdata *apb = platform_get_drvdata(pdev);
 	int ret;
 
-	if (apb->init_disabled)
+	if (apb->init_disabled ||
+			apb->state == ARCHE_PLATFORM_STATE_FW_FLASHING)
 		return 0;
 
 	ret = regulator_enable(apb->vcore);
@@ -141,8 +143,9 @@ static int standby_boot_seq(struct platform_device *pdev)
 	if (apb->init_disabled)
 		return 0;
 
-	/* If it is in OFF state, then we do not want to change the state */
-	if (apb->state == ARCHE_PLATFORM_STATE_OFF)
+	/* Even if it is in OFF state, then we do not want to change the state */
+	if (apb->state == ARCHE_PLATFORM_STATE_STANDBY ||
+			apb->state == ARCHE_PLATFORM_STATE_OFF)
 		return 0;
 
 	/*
@@ -162,7 +165,7 @@ static void poweroff_seq(struct platform_device *pdev)
 {
 	struct arche_apb_ctrl_drvdata *apb = platform_get_drvdata(pdev);
 
-	if (apb->init_disabled)
+	if (apb->init_disabled || apb->state == ARCHE_PLATFORM_STATE_OFF)
 		return;
 
 	/* disable the clock */