Переглянути джерело

[CHAR] ds1286: Fix handling of seconds in RTC_ALM_SET ioctl.

 o Fix use of uninitialized variable sec.
 o Make the RTC_ALM_SET ioctl return -EINVAL for non-zero seconds - the
   DS1286 has no second field for the alarm time.
 o Replace the obscure BIN_TO_BCD macro with BIN2BCD.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Ralf Baechle 18 роки тому
батько
коміт
b35692ebde
1 змінених файлів з 6 додано та 3 видалено
  1. 6 3
      drivers/char/ds1286.c

+ 6 - 3
drivers/char/ds1286.c

@@ -197,6 +197,7 @@ static int ds1286_ioctl(struct inode *inode, struct file *file,
 
 
 		hrs = alm_tm.tm_hour;
 		hrs = alm_tm.tm_hour;
 		min = alm_tm.tm_min;
 		min = alm_tm.tm_min;
+		sec = alm_tm.tm_sec;
 
 
 		if (hrs >= 24)
 		if (hrs >= 24)
 			hrs = 0xff;
 			hrs = 0xff;
@@ -204,9 +205,11 @@ static int ds1286_ioctl(struct inode *inode, struct file *file,
 		if (min >= 60)
 		if (min >= 60)
 			min = 0xff;
 			min = 0xff;
 
 
-		BIN_TO_BCD(sec);
-		BIN_TO_BCD(min);
-		BIN_TO_BCD(hrs);
+		if (sec != 0)
+			return -EINVAL;
+
+		min = BIN2BCD(min);
+		min = BIN2BCD(hrs);
 
 
 		spin_lock(&ds1286_lock);
 		spin_lock(&ds1286_lock);
 		rtc_write(hrs, RTC_HOURS_ALARM);
 		rtc_write(hrs, RTC_HOURS_ALARM);