summaryrefslogtreecommitdiff
path: root/sys/arch
diff options
context:
space:
mode:
authorJoel Sing <jsing@cvs.openbsd.org>2008-03-27 14:36:12 +0000
committerJoel Sing <jsing@cvs.openbsd.org>2008-03-27 14:36:12 +0000
commita6cd2e431462eef8f28d7d33fd708c001272a3d4 (patch)
tree02b1b3e7dc323fc36a31144cf5683ee0db99758c /sys/arch
parentd90634f0d4f05fd259cae2194a91ae28e95102b0 (diff)
Data mode can only be changed when updating the clock, so don't bother
trying to change to BCD mode before reading. Also, don't assume that the clock is in 24 hour mode when updating. tested jasper@, ok miod@
Diffstat (limited to 'sys/arch')
-rw-r--r--sys/arch/sgi/sgi/clock_md.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/sys/arch/sgi/sgi/clock_md.c b/sys/arch/sgi/sgi/clock_md.c
index 33908b98c61..95b6626f4e9 100644
--- a/sys/arch/sgi/sgi/clock_md.c
+++ b/sys/arch/sgi/sgi/clock_md.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: clock_md.c,v 1.11 2008/02/20 18:46:20 miod Exp $ */
+/* $OpenBSD: clock_md.c,v 1.12 2008/03/27 14:36:11 jsing Exp $ */
/*
* Copyright (c) 2001-2004 Opsycon AB (www.opsycon.se / www.opsycon.com)
@@ -102,7 +102,6 @@ md_clk_attach(struct device *parent, struct device *self, void *aux)
}
}
-
/*
* Dallas clock driver.
*/
@@ -117,10 +116,6 @@ ds1687_get(struct clock_softc *sc, time_t base, struct tod_time *ct)
ctrl = bus_space_read_1(clk_t, clk_h, DS1687_CTRL_A);
bus_space_write_1(clk_t, clk_h, DS1687_CTRL_A, ctrl | DS1687_BANK_1);
- /* Select data mode 0 (BCD). */
- ctrl = bus_space_read_1(clk_t, clk_h, DS1687_CTRL_B);
- bus_space_write_1(clk_t, clk_h, DS1687_CTRL_B, ctrl & ~DS1687_DM_1);
-
/* Wait for no update in progress. */
while (bus_space_read_1(clk_t, clk_h, DS1687_CTRL_A) & DS1687_UIP)
/* Do nothing. */;
@@ -151,9 +146,10 @@ ds1687_set(struct clock_softc *sc, struct tod_time *ct)
ctrl = bus_space_read_1(clk_t, clk_h, DS1687_CTRL_A);
bus_space_write_1(clk_t, clk_h, DS1687_CTRL_A, ctrl | DS1687_BANK_1);
- /* Select data mode 0 (BCD). */
+ /* Select data mode 0 (BCD) and 24 hour time. */
ctrl = bus_space_read_1(clk_t, clk_h, DS1687_CTRL_B);
- bus_space_write_1(clk_t, clk_h, DS1687_CTRL_B, ctrl & ~DS1687_DM_1);
+ bus_space_write_1(clk_t, clk_h, DS1687_CTRL_B,
+ (ctrl & ~DS1687_DM_1) | DS1687_24_HR);
/* Prevent updates. */
ctrl = bus_space_read_1(clk_t, clk_h, DS1687_CTRL_B);