Lines Matching +full:s +full:- +full:mode
26 do { printf("smbus(%02x): " fmt , dev->i2c.address, ## __VA_ARGS__); } while (0)
29 fprintf(stderr, "%s: smbus: error: " fmt , qom_path, ## __VA_ARGS__); \
35 fprintf(stderr, "%s: smbus: error: " fmt , qom_path, ## __VA_ARGS__); \
44 SMBUS_CONFUSED = -1
52 if (sc->quick_cmd) { in smbus_do_quick_cmd()
53 sc->quick_cmd(dev, recv); in smbus_do_quick_cmd()
61 DPRINTF("Command %d len %d\n", dev->data_buf[0], dev->data_len); in smbus_do_write()
62 if (sc->write_data) { in smbus_do_write()
63 sc->write_data(dev, dev->data_buf, dev->data_len); in smbus_do_write()
67 static int smbus_i2c_event(I2CSlave *s, enum i2c_event event) in smbus_i2c_event() argument
69 SMBusDevice *dev = SMBUS_DEVICE(s); in smbus_i2c_event()
73 switch (dev->mode) { in smbus_i2c_event()
76 dev->mode = SMBUS_WRITE_DATA; in smbus_i2c_event()
80 BADF("Unexpected send start condition in state %d\n", dev->mode); in smbus_i2c_event()
81 dev->mode = SMBUS_CONFUSED; in smbus_i2c_event()
87 switch (dev->mode) { in smbus_i2c_event()
89 DPRINTF("Read mode\n"); in smbus_i2c_event()
90 dev->mode = SMBUS_READ_DATA; in smbus_i2c_event()
94 if (dev->data_len == 0) { in smbus_i2c_event()
96 dev->mode = SMBUS_CONFUSED; in smbus_i2c_event()
99 DPRINTF("Read mode\n"); in smbus_i2c_event()
100 dev->mode = SMBUS_READ_DATA; in smbus_i2c_event()
105 BADF("Unexpected recv start condition in state %d\n", dev->mode); in smbus_i2c_event()
106 dev->mode = SMBUS_CONFUSED; in smbus_i2c_event()
112 if (dev->data_len == 0) { in smbus_i2c_event()
113 if (dev->mode == SMBUS_WRITE_DATA || dev->mode == SMBUS_READ_DATA) { in smbus_i2c_event()
114 smbus_do_quick_cmd(dev, dev->mode == SMBUS_READ_DATA); in smbus_i2c_event()
117 switch (dev->mode) { in smbus_i2c_event()
131 dev->mode = SMBUS_IDLE; in smbus_i2c_event()
132 dev->data_len = 0; in smbus_i2c_event()
136 switch (dev->mode) { in smbus_i2c_event()
142 dev->mode = SMBUS_DONE; in smbus_i2c_event()
146 BADF("Unexpected NACK in state %d\n", dev->mode); in smbus_i2c_event()
147 dev->mode = SMBUS_CONFUSED; in smbus_i2c_event()
153 return -1; in smbus_i2c_event()
159 static uint8_t smbus_i2c_recv(I2CSlave *s) in smbus_i2c_recv() argument
161 SMBusDevice *dev = SMBUS_DEVICE(s); in smbus_i2c_recv()
165 switch (dev->mode) { in smbus_i2c_recv()
167 if (sc->receive_byte) { in smbus_i2c_recv()
168 ret = sc->receive_byte(dev); in smbus_i2c_recv()
174 BADF("Unexpected read in state %d\n", dev->mode); in smbus_i2c_recv()
175 dev->mode = SMBUS_CONFUSED; in smbus_i2c_recv()
182 static int smbus_i2c_send(I2CSlave *s, uint8_t data) in smbus_i2c_send() argument
184 SMBusDevice *dev = SMBUS_DEVICE(s); in smbus_i2c_send()
186 switch (dev->mode) { in smbus_i2c_send()
189 if (dev->data_len >= sizeof(dev->data_buf)) { in smbus_i2c_send()
192 dev->data_buf[dev->data_len++] = data; in smbus_i2c_send()
197 BADF("Unexpected write in state %d\n", dev->mode); in smbus_i2c_send()
208 sc->event = smbus_i2c_event; in smbus_device_class_init()
209 sc->recv = smbus_i2c_recv; in smbus_device_class_init()
210 sc->send = smbus_i2c_send; in smbus_device_class_init()
215 return dev->mode != SMBUS_IDLE; in smbus_vmstate_needed()
224 VMSTATE_INT32(mode, SMBusDevice),