xref: /openbmc/qemu/include/hw/i2c/bitbang_i2c.h (revision 41742927ee37527462a13160380860653d4f1c84)
1d718b747SBALATON Zoltan #ifndef BITBANG_I2C_H
2d718b747SBALATON Zoltan #define BITBANG_I2C_H
3d718b747SBALATON Zoltan 
4d718b747SBALATON Zoltan #include "hw/i2c/i2c.h"
5d718b747SBALATON Zoltan 
6d718b747SBALATON Zoltan typedef struct bitbang_i2c_interface bitbang_i2c_interface;
7d718b747SBALATON Zoltan 
8d718b747SBALATON Zoltan #define BITBANG_I2C_SDA 0
9d718b747SBALATON Zoltan #define BITBANG_I2C_SCL 1
10d718b747SBALATON Zoltan 
11*41742927SPeter Maydell typedef enum bitbang_i2c_state {
12*41742927SPeter Maydell     STOPPED = 0,
13*41742927SPeter Maydell     SENDING_BIT7,
14*41742927SPeter Maydell     SENDING_BIT6,
15*41742927SPeter Maydell     SENDING_BIT5,
16*41742927SPeter Maydell     SENDING_BIT4,
17*41742927SPeter Maydell     SENDING_BIT3,
18*41742927SPeter Maydell     SENDING_BIT2,
19*41742927SPeter Maydell     SENDING_BIT1,
20*41742927SPeter Maydell     SENDING_BIT0,
21*41742927SPeter Maydell     WAITING_FOR_ACK,
22*41742927SPeter Maydell     RECEIVING_BIT7,
23*41742927SPeter Maydell     RECEIVING_BIT6,
24*41742927SPeter Maydell     RECEIVING_BIT5,
25*41742927SPeter Maydell     RECEIVING_BIT4,
26*41742927SPeter Maydell     RECEIVING_BIT3,
27*41742927SPeter Maydell     RECEIVING_BIT2,
28*41742927SPeter Maydell     RECEIVING_BIT1,
29*41742927SPeter Maydell     RECEIVING_BIT0,
30*41742927SPeter Maydell     SENDING_ACK,
31*41742927SPeter Maydell     SENT_NACK
32*41742927SPeter Maydell } bitbang_i2c_state;
33*41742927SPeter Maydell 
34*41742927SPeter Maydell struct bitbang_i2c_interface {
35*41742927SPeter Maydell     I2CBus *bus;
36*41742927SPeter Maydell     bitbang_i2c_state state;
37*41742927SPeter Maydell     int last_data;
38*41742927SPeter Maydell     int last_clock;
39*41742927SPeter Maydell     int device_out;
40*41742927SPeter Maydell     uint8_t buffer;
41*41742927SPeter Maydell     int current_addr;
42*41742927SPeter Maydell };
43*41742927SPeter Maydell 
44*41742927SPeter Maydell /**
45*41742927SPeter Maydell  * bitbang_i2c_init: in-place initialize the bitbang_i2c_interface struct
46*41742927SPeter Maydell  */
47*41742927SPeter Maydell void bitbang_i2c_init(bitbang_i2c_interface *s, I2CBus *bus);
48d718b747SBALATON Zoltan int bitbang_i2c_set(bitbang_i2c_interface *i2c, int line, int level);
49d718b747SBALATON Zoltan 
50d718b747SBALATON Zoltan #endif
51