rtc: fix CMOS time error after writing /proc/acpi/alarm
When writing /proc/acpi/alarm in adjust mode, e.g. echo "+0000-00-00 00:00:15" >/proc/acpi/alarm The "century" field should be read and added to "year" field before writing, otherwise the CMOS time will go back to 2000 years ago, e.g. # cat /proc/acpi/alarm 0008-06-21 11:38:46 Then the system time may be reset to the date of manufacture after rebooting. This patch fixed this issue. Signed-off-by: Huacai Chen <huacai.chen@intel.com> Acked-by: Pavel Machek <pavel@suse.cz> Acked-by: Zhao Yakui <yakui.zhao@intel.com> Acked-by: Alessandro Zummo <a.zummo@towertech.it> Acked-by: Len Brown <lenb@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
471d47e322
commit
cce3ce89c1
@ -315,8 +315,11 @@ acpi_system_write_alarm(struct file *file,
|
|||||||
cmos_bcd_write(day, acpi_gbl_FADT.day_alarm, rtc_control);
|
cmos_bcd_write(day, acpi_gbl_FADT.day_alarm, rtc_control);
|
||||||
if (acpi_gbl_FADT.month_alarm)
|
if (acpi_gbl_FADT.month_alarm)
|
||||||
cmos_bcd_write(mo, acpi_gbl_FADT.month_alarm, rtc_control);
|
cmos_bcd_write(mo, acpi_gbl_FADT.month_alarm, rtc_control);
|
||||||
if (acpi_gbl_FADT.century)
|
if (acpi_gbl_FADT.century) {
|
||||||
|
if (adjust)
|
||||||
|
yr += cmos_bcd_read(acpi_gbl_FADT.century, rtc_control) * 100;
|
||||||
cmos_bcd_write(yr / 100, acpi_gbl_FADT.century, rtc_control);
|
cmos_bcd_write(yr / 100, acpi_gbl_FADT.century, rtc_control);
|
||||||
|
}
|
||||||
/* enable the rtc alarm interrupt */
|
/* enable the rtc alarm interrupt */
|
||||||
rtc_control |= RTC_AIE;
|
rtc_control |= RTC_AIE;
|
||||||
CMOS_WRITE(rtc_control, RTC_CONTROL);
|
CMOS_WRITE(rtc_control, RTC_CONTROL);
|
||||||
|
Loading…
Reference in New Issue
Block a user