提交 bd70f6eb 编写于 作者: P Paul Walmsley

ARM: OMAP2+: powerdomain: avoid testing whether an unsigned char is less than 0

_pwrdm_save_clkdm_state_and_activate() tried to test one of its
unsigned arguments to determine whether it was less than zero.  Fix by
moving the error test to the caller.
Reported-by: NChen Gang <gang.chen@asianux.com>
Signed-off-by: NPaul Walmsley <paul@pwsan.com>
上级 4280943b
...@@ -52,7 +52,6 @@ enum { ...@@ -52,7 +52,6 @@ enum {
#define ALREADYACTIVE_SWITCH 0 #define ALREADYACTIVE_SWITCH 0
#define FORCEWAKEUP_SWITCH 1 #define FORCEWAKEUP_SWITCH 1
#define LOWPOWERSTATE_SWITCH 2 #define LOWPOWERSTATE_SWITCH 2
#define ERROR_SWITCH 3
/* pwrdm_list contains all registered struct powerdomains */ /* pwrdm_list contains all registered struct powerdomains */
static LIST_HEAD(pwrdm_list); static LIST_HEAD(pwrdm_list);
...@@ -233,10 +232,7 @@ static u8 _pwrdm_save_clkdm_state_and_activate(struct powerdomain *pwrdm, ...@@ -233,10 +232,7 @@ static u8 _pwrdm_save_clkdm_state_and_activate(struct powerdomain *pwrdm,
{ {
u8 sleep_switch; u8 sleep_switch;
if (curr_pwrst < 0) { if (curr_pwrst < PWRDM_POWER_ON) {
WARN_ON(1);
sleep_switch = ERROR_SWITCH;
} else if (curr_pwrst < PWRDM_POWER_ON) {
if (curr_pwrst > pwrst && if (curr_pwrst > pwrst &&
pwrdm->flags & PWRDM_HAS_LOWPOWERSTATECHANGE && pwrdm->flags & PWRDM_HAS_LOWPOWERSTATECHANGE &&
arch_pwrdm->pwrdm_set_lowpwrstchange) { arch_pwrdm->pwrdm_set_lowpwrstchange) {
...@@ -1091,7 +1087,8 @@ int pwrdm_post_transition(struct powerdomain *pwrdm) ...@@ -1091,7 +1087,8 @@ int pwrdm_post_transition(struct powerdomain *pwrdm)
*/ */
int omap_set_pwrdm_state(struct powerdomain *pwrdm, u8 pwrst) int omap_set_pwrdm_state(struct powerdomain *pwrdm, u8 pwrst)
{ {
u8 curr_pwrst, next_pwrst, sleep_switch; u8 next_pwrst, sleep_switch;
int curr_pwrst;
int ret = 0; int ret = 0;
bool hwsup = false; bool hwsup = false;
...@@ -1107,16 +1104,17 @@ int omap_set_pwrdm_state(struct powerdomain *pwrdm, u8 pwrst) ...@@ -1107,16 +1104,17 @@ int omap_set_pwrdm_state(struct powerdomain *pwrdm, u8 pwrst)
pwrdm_lock(pwrdm); pwrdm_lock(pwrdm);
curr_pwrst = pwrdm_read_pwrst(pwrdm); curr_pwrst = pwrdm_read_pwrst(pwrdm);
if (curr_pwrst < 0) {
ret = -EINVAL;
goto osps_out;
}
next_pwrst = pwrdm_read_next_pwrst(pwrdm); next_pwrst = pwrdm_read_next_pwrst(pwrdm);
if (curr_pwrst == pwrst && next_pwrst == pwrst) if (curr_pwrst == pwrst && next_pwrst == pwrst)
goto osps_out; goto osps_out;
sleep_switch = _pwrdm_save_clkdm_state_and_activate(pwrdm, curr_pwrst, sleep_switch = _pwrdm_save_clkdm_state_and_activate(pwrdm, curr_pwrst,
pwrst, &hwsup); pwrst, &hwsup);
if (sleep_switch == ERROR_SWITCH) {
ret = -EINVAL;
goto osps_out;
}
ret = pwrdm_set_next_pwrst(pwrdm, pwrst); ret = pwrdm_set_next_pwrst(pwrdm, pwrst);
if (ret) if (ret)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册