Commit a16e8393 authored by Lars-Peter Clausen's avatar Lars-Peter Clausen Committed by Linus Torvalds

drivers/rtc/rtc-spear.c: fix several error checks

There are several comparisons of a unsigned int to less than zero int
spear RTC driver.  Such a check will always be true.  In all these cases a
signed int is assigned to the unsigned variable, which is checked, before.
 So the right fix is to make the checked variable signed as well.  In one
case the check can be dropped completely, because all it does it returns
'err' if 'err' is less than zero, otherwise it returns 0.  Since in this
particular case 'err' is always either 0 or less this is the same as just
returning 'err'.

The issue has been found using the following coccinelle semantic patch:

//<smpl>
@@
type T;
unsigned T i;
@@
(
*i < 0
|
*i >= 0
)
//</smpl>
Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
Cc: Viresh Kumar <viresh.kumar@st.com>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 7c6a52a0
...@@ -235,7 +235,7 @@ static int spear_rtc_read_time(struct device *dev, struct rtc_time *tm) ...@@ -235,7 +235,7 @@ static int spear_rtc_read_time(struct device *dev, struct rtc_time *tm)
static int spear_rtc_set_time(struct device *dev, struct rtc_time *tm) static int spear_rtc_set_time(struct device *dev, struct rtc_time *tm)
{ {
struct spear_rtc_config *config = dev_get_drvdata(dev); struct spear_rtc_config *config = dev_get_drvdata(dev);
unsigned int time, date, err = 0; unsigned int time, date;
if (tm2bcd(tm) < 0) if (tm2bcd(tm) < 0)
return -EINVAL; return -EINVAL;
...@@ -247,11 +247,8 @@ static int spear_rtc_set_time(struct device *dev, struct rtc_time *tm) ...@@ -247,11 +247,8 @@ static int spear_rtc_set_time(struct device *dev, struct rtc_time *tm)
(tm->tm_year << YEAR_SHIFT); (tm->tm_year << YEAR_SHIFT);
writel(time, config->ioaddr + TIME_REG); writel(time, config->ioaddr + TIME_REG);
writel(date, config->ioaddr + DATE_REG); writel(date, config->ioaddr + DATE_REG);
err = is_write_complete(config);
if (err < 0)
return err;
return 0; return is_write_complete(config);
} }
/* /*
...@@ -295,7 +292,8 @@ static int spear_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alm) ...@@ -295,7 +292,8 @@ static int spear_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alm)
static int spear_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm) static int spear_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm)
{ {
struct spear_rtc_config *config = dev_get_drvdata(dev); struct spear_rtc_config *config = dev_get_drvdata(dev);
unsigned int time, date, err = 0; unsigned int time, date;
int err;
if (tm2bcd(&alm->time) < 0) if (tm2bcd(&alm->time) < 0)
return -EINVAL; return -EINVAL;
...@@ -357,7 +355,7 @@ static int __devinit spear_rtc_probe(struct platform_device *pdev) ...@@ -357,7 +355,7 @@ static int __devinit spear_rtc_probe(struct platform_device *pdev)
{ {
struct resource *res; struct resource *res;
struct spear_rtc_config *config; struct spear_rtc_config *config;
unsigned int status = 0; int status = 0;
int irq; int irq;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment