staticint m41t93_get_time(struct device *dev, struct rtc_time *tm)
{ struct spi_device *spi = to_spi_device(dev); const u8 start_addr = 0;
u8 buf[8]; int century_after_1900; int tmp; int ret = 0;
/* Check status of clock. Two states must be considered: 1.haltbit(HT)isset:theclockisrunningbutupdateofreadout registershasbeendisabledduetopowerfailure.Thisisnormal caseafterpoweron.TimeisvalidafterresettingHTbit. 2.oscillatorfailbit(OF)isset:timeisinvalid.
*/
tmp = spi_w8r8(spi, M41T93_REG_ALM_HOUR_HT); if (tmp < 0) return tmp;
if (tmp & M41T93_FLAG_HT) {
dev_dbg(&spi->dev, "HT bit is set, reenable clock update.\n");
m41t93_set_reg(spi, M41T93_REG_ALM_HOUR_HT,
tmp & ~M41T93_FLAG_HT);
}
tmp = spi_w8r8(spi, M41T93_REG_FLAGS); if (tmp < 0) return tmp;
if (tmp & M41T93_FLAG_OF) {
ret = -EINVAL;
dev_warn(&spi->dev, "OF bit is set, write time to restart.\n");
}
if (tmp & M41T93_FLAG_BL)
dev_warn(&spi->dev, "BL bit is set, replace battery.\n");
/* read actual time/date */
tmp = spi_write_then_read(spi, &start_addr, 1, buf, sizeof(buf)); if (tmp < 0) return tmp;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.