Convert to MI clock_ymdhms versions of todr calls.

This commit is contained in:
gdamore 2006-09-09 21:10:01 +00:00
parent 79d97d7582
commit 7020797810
1 changed files with 14 additions and 18 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: ds1307.c,v 1.6 2006/09/04 23:45:30 gdamore Exp $ */
/* $NetBSD: ds1307.c,v 1.7 2006/09/09 21:10:01 gdamore Exp $ */
/*
* Copyright (c) 2003 Wasabi Systems, Inc.
@ -76,8 +76,8 @@ const struct cdevsw dsrtc_cdevsw = {
static int dsrtc_clock_read(struct dsrtc_softc *, struct clock_ymdhms *);
static int dsrtc_clock_write(struct dsrtc_softc *, struct clock_ymdhms *);
static int dsrtc_gettime(struct todr_chip_handle *, volatile struct timeval *);
static int dsrtc_settime(struct todr_chip_handle *, volatile struct timeval *);
static int dsrtc_gettime(struct todr_chip_handle *, struct clock_ymdhms *);
static int dsrtc_settime(struct todr_chip_handle *, struct clock_ymdhms *);
static int
dsrtc_match(struct device *parent, struct cfdata *cf, void *arg)
@ -103,8 +103,10 @@ dsrtc_attach(struct device *parent, struct device *self, void *arg)
sc->sc_address = ia->ia_addr;
sc->sc_open = 0;
sc->sc_todr.cookie = sc;
sc->sc_todr.todr_gettime = dsrtc_gettime;
sc->sc_todr.todr_settime = dsrtc_settime;
sc->sc_todr.todr_gettime = NULL;
sc->sc_todr.todr_settime = NULL;
sc->sc_todr.todr_gettime_ymdhms = dsrtc_gettime;
sc->sc_todr.todr_settime_ymdhms = dsrtc_settime;
sc->sc_todr.todr_setwen = NULL;
todr_attach(&sc->sc_todr);
@ -218,13 +220,13 @@ dsrtc_write(dev_t dev, struct uio *uio, int flags)
}
static int
dsrtc_gettime(struct todr_chip_handle *ch, volatile struct timeval *tv)
dsrtc_gettime(struct todr_chip_handle *ch, struct clock_ymdhms *dt)
{
struct dsrtc_softc *sc = ch->cookie;
struct clock_ymdhms dt, check;
struct clock_ymdhms check;
int retries;
memset(&dt, 0, sizeof(dt));
memset(dt, 0, sizeof(*dt));
memset(&check, 0, sizeof(check));
/*
@ -233,25 +235,19 @@ dsrtc_gettime(struct todr_chip_handle *ch, volatile struct timeval *tv)
*/
retries = 5;
do {
dsrtc_clock_read(sc, &dt);
dsrtc_clock_read(sc, dt);
dsrtc_clock_read(sc, &check);
} while (memcmp(&dt, &check, sizeof(check)) != 0 && --retries);
tv->tv_sec = clock_ymdhms_to_secs(&dt);
tv->tv_usec = 0;
} while (memcmp(dt, &check, sizeof(check)) != 0 && --retries);
return (0);
}
static int
dsrtc_settime(struct todr_chip_handle *ch, volatile struct timeval *tv)
dsrtc_settime(struct todr_chip_handle *ch, struct clock_ymdhms *dt)
{
struct dsrtc_softc *sc = ch->cookie;
struct clock_ymdhms dt;
clock_secs_to_ymdhms(tv->tv_sec, &dt);
if (dsrtc_clock_write(sc, &dt) == 0)
if (dsrtc_clock_write(sc, dt) == 0)
return (-1);
return (0);