Lines Matching +full:i2c +full:- +full:transfer +full:- +full:timeout +full:- +full:us
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
52 static int pcf_noack(struct pcf_softc *pcf, int timeout);
62 int counter = TIMEOUT; in pcf_wait_byte()
65 while (counter--) { in pcf_wait_byte()
71 printf("pcf: timeout!\n"); in pcf_wait_byte()
91 if (sc->pcf_started) { in pcf_stop_locked()
95 sc->pcf_started = 0; in pcf_stop_locked()
100 pcf_noack(struct pcf_softc *sc, int timeout) in pcf_noack() argument
103 int k = timeout/10; in pcf_noack()
110 DELAY(10); /* XXX wait 10 us */ in pcf_noack()
111 } while (k--); in pcf_noack()
117 pcf_repeated_start(device_t dev, u_char slave, int timeout) in pcf_repeated_start() argument
131 * according to transfer direction */ in pcf_repeated_start()
139 if (pcf_noack(sc, timeout)) { in pcf_repeated_start()
157 pcf_start(device_t dev, u_char slave, int timeout) in pcf_start() argument
175 * according to transfer direction */ in pcf_start()
181 sc->pcf_started = 1; in pcf_start()
188 if (pcf_noack(sc, timeout)) { in pcf_start()
242 iicbus_intr(sc->iicbus, INTR_ERROR, &error); in pcf_intr()
250 switch(sc->pcf_slave_mode) { in pcf_intr()
257 sc->pcf_slave_mode = SLAVE_RECEIVER; in pcf_intr()
259 iicbus_intr(sc->iicbus, INTR_NOACK, NULL); in pcf_intr()
264 iicbus_intr(sc->iicbus, INTR_TRANSMIT, &data); in pcf_intr()
274 iicbus_intr(sc->iicbus, INTR_GENERAL, &addr); in pcf_intr()
276 iicbus_intr(sc->iicbus, INTR_START, &addr); in pcf_intr()
279 sc->pcf_slave_mode = SLAVE_TRANSMITTER; in pcf_intr()
282 iicbus_intr(sc->iicbus, INTR_TRANSMIT, &data); in pcf_intr()
297 iicbus_intr(sc->iicbus, INTR_STOP, NULL); in pcf_intr()
304 iicbus_intr(sc->iicbus, INTR_RECEIVE, &data); in pcf_intr()
310 sc->pcf_slave_mode); in pcf_intr()
322 sc->pcf_slave_mode = SLAVE_RECEIVER; in pcf_intr()
335 *oldaddr = sc->pcf_addr; in pcf_rst_card()
339 sc->pcf_addr = PCF_DEFAULT_ADDR; in pcf_rst_card()
341 sc->pcf_addr = addr; in pcf_rst_card()
346 pcf_set_S0(sc, sc->pcf_addr >> 1); in pcf_rst_card()
371 sc->pcf_slave_mode = SLAVE_RECEIVER; in pcf_rst_card()
378 pcf_write(device_t dev, const char *buf, int len, int *sent, int timeout /* us */) in pcf_write() argument
398 if (pcf_noack(sc, timeout)) { in pcf_write()
403 len --; in pcf_write()
420 int delay /* us */) in pcf_read()
451 /* ok, last data byte already in S0, no I2C activity in pcf_read()
462 len --; in pcf_read()