Module Name: src Committed By: jakllsch Date: Tue Nov 4 18:15:11 UTC 2014
Modified Files: src/sys/arch/arm/allwinner: awin_rtc.c Log Message: Rebase awinrtc(4) year from 1970 to 1900. Fixes +70 year RTC offset when dual booting with Android on Cubietruck. Also a trailing whitespace fix. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/allwinner/awin_rtc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/allwinner/awin_rtc.c diff -u src/sys/arch/arm/allwinner/awin_rtc.c:1.4 src/sys/arch/arm/allwinner/awin_rtc.c:1.5 --- src/sys/arch/arm/allwinner/awin_rtc.c:1.4 Mon Oct 27 10:50:38 2014 +++ src/sys/arch/arm/allwinner/awin_rtc.c Tue Nov 4 18:15:11 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: awin_rtc.c,v 1.4 2014/10/27 10:50:38 jmcneill Exp $ */ +/* $NetBSD: awin_rtc.c,v 1.5 2014/11/04 18:15:11 jakllsch Exp $ */ /*- * Copyright (c) 2014 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: awin_rtc.c,v 1.4 2014/10/27 10:50:38 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: awin_rtc.c,v 1.5 2014/11/04 18:15:11 jakllsch Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -41,6 +41,8 @@ __KERNEL_RCSID(0, "$NetBSD: awin_rtc.c,v #include <dev/clock_subr.h> +#define AWIN_RTC_BASE_YEAR 1900 + struct awin_rtc_softc { device_t sc_dev; bus_space_tag_t sc_bst; @@ -120,7 +122,7 @@ awin_rtc_gettime(todr_chip_handle_t tch, dt->dt_year = __SHIFTOUT(yymmdd, awin_chip_id() == AWIN_CHIP_ID_A31 ? AWIN_A31_RTC_YY_MM_DD_YEAR : AWIN_RTC_YY_MM_DD_YEAR) + - POSIX_BASE_YEAR; + AWIN_RTC_BASE_YEAR; dt->dt_mon = __SHIFTOUT(yymmdd, AWIN_RTC_YY_MM_DD_MONTH); dt->dt_day = __SHIFTOUT(yymmdd, AWIN_RTC_YY_MM_DD_DAY); dt->dt_wday = __SHIFTOUT(hhmmss, AWIN_RTC_HH_MM_SS_WK_NO); @@ -144,29 +146,29 @@ awin_rtc_settime(todr_chip_handle_t tch, /* * Sanity check the date before writing it back */ - if (dt->dt_year < POSIX_BASE_YEAR) { + if (dt->dt_year < AWIN_RTC_BASE_YEAR) { aprint_normal_dev(sc->sc_dev, "year pre the epoch: %llu, " "not writing back time\n", dt->dt_year); return EIO; } - maxyear = __SHIFTOUT(0xffffffff, + maxyear = __SHIFTOUT(0xffffffff, awin_chip_id() == AWIN_CHIP_ID_A31 ? AWIN_A31_RTC_YY_MM_DD_YEAR : AWIN_RTC_YY_MM_DD_YEAR) - + POSIX_BASE_YEAR; + + AWIN_RTC_BASE_YEAR; if (dt->dt_year > maxyear) { aprint_normal_dev(sc->sc_dev, "year exceeds available field:" " %llu, not writing back time\n", dt->dt_year); return EIO; } - yymmdd = __SHIFTIN(dt->dt_year - POSIX_BASE_YEAR, + yymmdd = __SHIFTIN(dt->dt_year - AWIN_RTC_BASE_YEAR, awin_chip_id() == AWIN_CHIP_ID_A31 ? AWIN_A31_RTC_YY_MM_DD_YEAR : AWIN_RTC_YY_MM_DD_YEAR); KASSERT(__SHIFTOUT(yymmdd, awin_chip_id() == AWIN_CHIP_ID_A31 ? AWIN_A31_RTC_YY_MM_DD_YEAR : AWIN_RTC_YY_MM_DD_YEAR) + - POSIX_BASE_YEAR == dt->dt_year); + AWIN_RTC_BASE_YEAR == dt->dt_year); yymmdd |= __SHIFTIN(dt->dt_mon, AWIN_RTC_YY_MM_DD_MONTH); yymmdd |= __SHIFTIN(dt->dt_day, AWIN_RTC_YY_MM_DD_DAY);