34#include <sys/kernel.h>
35#include <sys/module.h>
39#include <sys/resource.h>
49#define DS1672_ADDR 0xd0
51#define DS1672_COUNTER 0
53#define DS1672_TRICKLE 5
55#define DS1672_CTRL_EOSC (1 << 7)
57#define MAX_IIC_DATA_SIZE 4
67 device_set_desc(
dev,
"Dallas Semiconductor DS1672 RTC");
68 return (BUS_PROBE_NOWILDCARD);
94 memcpy(buffer + 1,
data, size);
112 device_printf(
dev,
"RTC oscillator was stopped. Check system"
113 " time and RTC battery.\n");
114 ctrl &= ~DS1672_CTRL_EOSC;
124 clock_unregister(
dev);
138 clock_register(
dev, 1000);
151 ts->tv_sec = (secs[3] << 24) | (secs[2] << 16)
152 | (secs[1] << 8) | (secs[0] << 0);
155 clock_dbgprint_ts(
dev, CLOCK_DBG_READ, ts);
164 data[0] = (ts->tv_sec >> 0) & 0xff;
165 data[1] = (ts->tv_sec >> 8) & 0xff;
166 data[2] = (ts->tv_sec >> 16) & 0xff;
167 data[3] = (ts->tv_sec >> 24) & 0xff;
170 clock_dbgprint_ts(
dev, CLOCK_DBG_WRITE, ts);
static device_method_t ds1672_methods[]
static int ds1672_init(device_t dev)
static int ds1672_probe(device_t dev)
static int ds1672_settime(device_t dev, struct timespec *ts)
static int ds1672_attach(device_t dev)
DRIVER_MODULE(ds1672, iicbus, ds1672_driver, ds1672_devclass, 0, 0)
static devclass_t ds1672_devclass
static int ds1672_write(device_t dev, uint8_t addr, uint8_t *data, uint8_t size)
static driver_t ds1672_driver
#define MAX_IIC_DATA_SIZE
static int ds1672_gettime(device_t dev, struct timespec *ts)
static int ds1672_read(device_t dev, uint8_t addr, uint8_t *data, uint8_t size)
MODULE_DEPEND(ds1672, iicbus, 1, 1, 1)
MODULE_VERSION(ds1672, 1)
static int ds1672_detach(device_t dev)
int iicbus_transfer(device_t bus, struct iic_msg *msgs, uint32_t nmsgs)