/* * $Id: tartc.c,v 1.3 2007/10/29 21:10:03 init Exp $ */ #include #include #include #include #include #include /* * testarm Real Time Clock driver. */ int tartc_attach(struct device *, uint32_t loc, uint8_t flags); void tartc_interrupt(struct device *); struct driver tartc_dr = { sizeof(struct tartc_dd), tartc_attach, NULL, tartc_interrupt }; int tartc_attach(struct device *self, uint32_t loc, uint8_t flags) { struct tartc_dd *ddp = self->dv_devdata; uint32_t seconds; /* acquire bus_handle from parent */ ddp->td_bushandlep = self->dv_parent->dv_aux; /* save our location on parent (or use default if loc == 0) */ ddp->td_ioaddr = (loc != 0) ? loc : TARTC_REG_BASE; /* * Read seconds past Epoch. */ /* trigger clock update on host */ bus_write_1(ddp->td_bushandlep, ddp->td_ioaddr + TARTC_OFF_CLOCKUPDATE, 1); /* get seconds past Epoch */ seconds = bus_read_4(ddp->td_bushandlep, ddp->td_ioaddr + TARTC_OFF_READSECONDS); printf("testarm Real Time Clock (%d seconds past Epoch)\n", seconds); return(0); } void tartc_interrupt(struct device *self) { /* TODO */ }