Module Name:    src
Committed By:   macallan
Date:           Fri Dec 14 22:05:36 UTC 2018

Modified Files:
        src/sys/dev/i2c: ds1307.c files.i2c

Log Message:
add options DSRTC_YEAR_START_2K for machines which use 2000 and not 1970
as base to count years from, like Iyonix.
While there apply the offset when writing to the clock as well.


To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 src/sys/dev/i2c/ds1307.c
cvs rdiff -u -r1.96 -r1.97 src/sys/dev/i2c/files.i2c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/i2c/ds1307.c
diff -u src/sys/dev/i2c/ds1307.c:1.29 src/sys/dev/i2c/ds1307.c:1.30
--- src/sys/dev/i2c/ds1307.c:1.29	Tue Jun 26 06:03:57 2018
+++ src/sys/dev/i2c/ds1307.c	Fri Dec 14 22:05:36 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: ds1307.c,v 1.29 2018/06/26 06:03:57 thorpej Exp $	*/
+/*	$NetBSD: ds1307.c,v 1.30 2018/12/14 22:05:36 macallan Exp $	*/
 
 /*
  * Copyright (c) 2003 Wasabi Systems, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ds1307.c,v 1.29 2018/06/26 06:03:57 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ds1307.c,v 1.30 2018/12/14 22:05:36 macallan Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -54,6 +54,7 @@ __KERNEL_RCSID(0, "$NetBSD: ds1307.c,v 1
 #include <dev/sysmon/sysmonvar.h>
 
 #include "ioconf.h"
+#include "opt_dsrtc.h"
 
 struct dsrtc_model {
 	const i2c_addr_t *dm_valid_addrs;
@@ -316,6 +317,7 @@ dsrtc_attach(device_t parent, device_t s
 	sc->sc_dev = self;
 	sc->sc_open = 0;
 	sc->sc_todr.cookie = sc;
+	
 	if (dm->dm_flags & DSRTC_FLAG_BCD) {
 		sc->sc_todr.todr_gettime_ymdhms = dsrtc_gettime_ymdhms;
 		sc->sc_todr.todr_settime_ymdhms = dsrtc_settime_ymdhms;
@@ -325,6 +327,10 @@ dsrtc_attach(device_t parent, device_t s
 	}
 	sc->sc_todr.todr_setwen = NULL;
 
+#ifdef DSRTC_YEAR_START_2K
+	sc->sc_model.dm_flags |= DSRTC_FLAG_YEAR_START_2K;
+#endif
+
 	todr_attach(&sc->sc_todr);
 	if ((sc->sc_model.dm_flags & DSRTC_FLAG_TEMP) != 0) {
 		int error;
@@ -571,7 +577,7 @@ dsrtc_clock_write_ymdhms(struct dsrtc_so
 {
 	struct dsrtc_model * const dm = &sc->sc_model;
 	uint8_t bcd[DSXXXX_RTC_SIZE], cmdbuf[2];
-	int error;
+	int error, offset;
 
 	KASSERT(DSXXXX_RTC_SIZE >= dm->dm_rtc_size);
 
@@ -585,8 +591,15 @@ dsrtc_clock_write_ymdhms(struct dsrtc_so
 	bcd[DSXXXX_DATE] = bintobcd(dt->dt_day);
 	bcd[DSXXXX_DAY] = bintobcd(dt->dt_wday);
 	bcd[DSXXXX_MONTH] = bintobcd(dt->dt_mon);
-	bcd[DSXXXX_YEAR] = bintobcd((dt->dt_year - POSIX_BASE_YEAR) % 100);
-	if (dt->dt_year - POSIX_BASE_YEAR >= 100)
+	
+	if (sc->sc_model.dm_flags & DSRTC_FLAG_YEAR_START_2K) {
+		offset = 2000;
+	} else {
+		offset = POSIX_BASE_YEAR;
+	}
+
+	bcd[DSXXXX_YEAR] = bintobcd((dt->dt_year - offset) % 100);
+	if (dt->dt_year - offset >= 100)
 		bcd[DSXXXX_MONTH] |= DSXXXX_MONTH_CENTURY;
 
 	if ((error = iic_acquire_bus(sc->sc_tag, I2C_F_POLL)) != 0) {

Index: src/sys/dev/i2c/files.i2c
diff -u src/sys/dev/i2c/files.i2c:1.96 src/sys/dev/i2c/files.i2c:1.97
--- src/sys/dev/i2c/files.i2c:1.96	Sun Sep  2 01:16:58 2018
+++ src/sys/dev/i2c/files.i2c	Fri Dec 14 22:05:36 2018
@@ -1,4 +1,4 @@
-#	$NetBSD: files.i2c,v 1.96 2018/09/02 01:16:58 jmcneill Exp $
+#	$NetBSD: files.i2c,v 1.97 2018/12/14 22:05:36 macallan Exp $
 
 obsolete defflag	opt_i2cbus.h		I2C_SCAN
 define	i2cbus { }
@@ -123,6 +123,7 @@ file	dev/i2c/lm87.c				lmenv
 device	dsrtc: sysmon_envsys
 attach	dsrtc at iic
 file	dev/i2c/ds1307.c			dsrtc
+defflag opt_dsrtc.h				DSRTC_YEAR_START_2K
 
 # Xicor X1226 Real Time Clock
 device	xrtc

Reply via email to