Lines Matching refs:bus

31 	I2c timings, rounded up (Philips 1995 i2c bus specification, p20)
94 wait_for_clk(const i2c_bus *bus, bigtime_t timeout)
99 spin(bus->timing.r);
106 bus->get_signals(bus->cookie, &clk, &data);
115 spin(bus->timing.r);
122 send_start_condition(const i2c_bus *bus)
126 bus->set_signals(bus->cookie, 1, 1);
128 status = wait_for_clk(bus, bus->timing.start_timeout);
134 spin(bus->timing.su_sta);
135 bus->set_signals(bus->cookie, 1, 0);
136 spin(bus->timing.hd_sta);
137 bus->set_signals(bus->cookie, 0, 0);
138 spin(bus->timing.f);
146 send_stop_condition(const i2c_bus *bus)
150 bus->set_signals(bus->cookie, 0, 0);
151 spin(bus->timing.r);
152 bus->set_signals(bus->cookie, 1, 0);
155 // to make the slave release bus control
156 status = wait_for_clk(bus, bus->timing.ack_timeout);
162 spin(bus->timing.su_sto);
163 bus->set_signals(bus->cookie, 1, 1);
164 spin(bus->timing.buf);
172 send_bit(const i2c_bus *bus, uint8 bit, int timeout)
178 bus->set_signals(bus->cookie, 0, bit & 1);
179 spin(bus->timing.su_dat);
180 bus->set_signals(bus->cookie, 1, bit & 1);
182 status = wait_for_clk(bus, timeout);
188 spin(bus->timing.high);
189 bus->set_signals(bus->cookie, 0, bit & 1);
190 spin(bus->timing.f + bus->timing.low);
198 send_acknowledge(const i2c_bus *bus)
204 bus->set_signals(bus->cookie, 0, 1);
205 spin(bus->timing.su_dat);
206 bus->set_signals(bus->cookie, 1, 1);
208 status = wait_for_clk(bus, bus->timing.ack_start_timeout);
221 bus->get_signals(bus->cookie, &clk, &data);
226 if (system_time() - startTime > bus->timing.ack_timeout) {
228 __func__, bus->timing.ack_timeout);
232 spin(bus->timing.r);
238 spin(bus->timing.high);
240 bus->set_signals(bus->cookie, 0, 1);
241 spin(bus->timing.f + bus->timing.low);
249 send_byte(const i2c_bus *bus, uint8 byte, bool acknowledge)
256 status_t status = send_bit(bus, byte >> i,
257 i == 7 ? bus->timing.byte_timeout : bus->timing.bit_timeout);
263 return send_acknowledge(bus);
271 send_slave_address(const i2c_bus *bus, uint8 slaveAddress, bool isWrite)
276 status = send_byte(bus, (slaveAddress & 0xfe) | (isWrite ? 0 : 1), true);
284 // - 0000 010x - address reserved for different bus format
294 return send_byte(bus, slaveAddress >> 8, true);
301 receive_bit(const i2c_bus *bus, bool *bit, int timeout)
306 bus->set_signals(bus->cookie, 1, 1);
310 status = wait_for_clk(bus, timeout);
316 bus->get_signals(bus->cookie, &clk, &data);
319 spin(bus->timing.high);
322 bus->set_signals(bus->cookie, 0, 1);
325 spin(bus->timing.f + bus->timing.low);
339 receive_byte(const i2c_bus *bus, uint8 *resultByte, bool acknowledge)
345 bus->set_signals(bus->cookie, 0, 1);
350 status_t status = receive_bit(bus, &bit,
351 i == 7 ? bus->timing.byte_timeout : bus->timing.bit_timeout);
362 return send_bit(bus, acknowledge ? 0 : 1, bus->timing.bit_timeout);
368 send_bytes(const i2c_bus *bus, const uint8 *writeBuffer, ssize_t writeLength)
373 status_t status = send_byte(bus, *writeBuffer, true);
384 receive_bytes(const i2c_bus *bus, uint8 *readBuffer, ssize_t readLength)
389 status_t status = receive_byte(bus, readBuffer, readLength > 1);
403 i2c_send_receive_callback(const i2c_bus *bus, uint32 slaveAddress, const uint8 *writeBuffer,
413 status = send_start_condition(bus);
417 status = send_slave_address(bus, slaveAddress, true);
421 status = send_bytes(bus, writeBuffer, writeLength);
425 status = send_start_condition(bus);
429 status = send_slave_address(bus, slaveAddress, false);
433 status = receive_bytes(bus, readBuffer, readLength);
437 return send_stop_condition(bus);
441 send_stop_condition(bus);