Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bd70f6eb authored by Paul Walmsley's avatar Paul Walmsley
Browse files

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: default avatarChen Gang <gang.chen@asianux.com>
Signed-off-by: default avatarPaul Walmsley <paul@pwsan.com>
parent 4280943b
Loading
Loading
Loading
Loading
+8 −10
Original line number Original line Diff line number Diff line
@@ -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,
{
{
	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)
 */
 */
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)
	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)