/* * This gates iso_en by writing a special sequence of bytes to iso_ctrl * and ensuring that it has been correctly applied by reading iso_ctrl_ack
*/ for (i = 0; i < ARRAY_SIZE(sequence); i++) {
writeb(sequence[i] & ISO_CTRL_MASK, priv->base + REG_ISO_CTRL);
ret = read_poll_timeout(read_iso_ctrl_ack, val, val == (i % 2), 100,
20 * 100, true, priv->base); if (ret) {
dev_dbg(dev, "Timeout waiting for ack byte %i (%x) of sequence\n", i,
sequence[i]); return ret;
}
}
/* * At this point iso_en should be raised for 1ms
*/
ret = read_poll_timeout(read_iso_en, val, val, 100, 22 * 100, true, priv->base); if (ret)
dev_dbg(dev, "Timeout waiting for iso_en\n");
mdelay(2); return 0;
}
/* Ask for the content of an RTC value into RDDATA by gating iso_en, * then iso_en is gated and the content of RDDATA can be read
*/
val = readw(priv->base + reg);
writew(val | field, priv->base + reg);
ssd202d_rtc_isoctrl(priv);
writew(val & ~field, priv->base + reg);
l = readw(priv->base + REG_RDDATA_L);
h = readw(priv->base + REG_RDDATA_H);
/* Check that RTC is enabled by SW */
ssd202d_rtc_read_reg(priv, REG_CTRL, SW0_RD_BIT, &sw0); if (sw0 != 1) return -EINVAL;
/* Get RTC base value from RDDATA */
ssd202d_rtc_read_reg(priv, REG_CTRL, BASE_RD_BIT, &base); /* Get RTC counter value from RDDATA */
ret = ssd202d_rtc_read_counter(priv, &counter); if (ret) return ret;
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.