Esempio n. 1
0
void rtc_settimereg(unsigned char r, unsigned char v)
{
	unsigned char ctlb = rtc_readreg(DS_REG_CTLB);
	rtc_writereg(DS_REG_CTLB, ctlb | DS_CTLB_SET);
	rtc_writereg(r, byte_to_bcd(v));
	rtc_writereg(DS_REG_CTLB, ctlb & ~DS_CTLB_SET);
}
Esempio n. 2
0
void rtc_init(void)
{
	/*
	 * Set DV0 to enable access to century register, no interrupt,
	 * and enable oscillator.
	 */
	rtc_writereg(DS_REG_CTLA, DS_CTLA_DV0 | DS_CTLA_DV1);
	/* 24hr mode */
	rtc_writereg(DS_REG_CTLB, DS_CTLB_24);
}
Esempio n. 3
0
static int
rtc_settime_ymdhms(todr_chip_handle_t handle, struct clock_ymdhms *dt)
{
	struct rtc_softc *sc;
	int i, year;
	uint8_t rtc_registers[NUM_RTC_REGS];

	sc = handle->cookie;
	year = dt->dt_year - RTC_BASE_YEAR;
	if (year > 99)
		year -= 100;

#define	decimal_to_rtc(a,b,n)		\
	rtc_registers[a] = (n) % 10;	\
	rtc_registers[b] = (n) / 10;

	decimal_to_rtc(0, 1, dt->dt_sec);
	decimal_to_rtc(2, 3, dt->dt_min);
	decimal_to_rtc(7, 8, dt->dt_day);
	decimal_to_rtc(9, 10, dt->dt_mon);
	decimal_to_rtc(11, 12, year);

	rtc_registers[4] = dt->dt_hour % 10;
	rtc_registers[5] = ((dt->dt_hour / 10) & RTC_REG5_HOUR) | RTC_REG5_24HR;

	rtc_registers[6] = 0;

#undef	decimal_to_rtc

	/* write rtc registers */
	rtc_writereg(sc, 15, 13);	/* reset prescalar */
	for (i = 0; i < NUM_RTC_REGS; i++)
		if (rtc_registers[i] !=
		    rtc_writereg(sc, i, rtc_registers[i]))
			return 1;
	return 0;
}