Lines Matching refs:s

33 static void bcm2835_i2c_update_interrupt(BCM2835I2CState *s)  in bcm2835_i2c_update_interrupt()  argument
37 if (s->c & BCM2835_I2C_C_INTR && s->s & BCM2835_I2C_S_RXR) { in bcm2835_i2c_update_interrupt()
42 if (s->c & BCM2835_I2C_C_INTT && s->s & BCM2835_I2C_S_TXW) { in bcm2835_i2c_update_interrupt()
47 if (s->c & BCM2835_I2C_C_INTD && s->s & BCM2835_I2C_S_DONE) { in bcm2835_i2c_update_interrupt()
50 qemu_set_irq(s->irq, do_interrupt); in bcm2835_i2c_update_interrupt()
53 static void bcm2835_i2c_begin_transfer(BCM2835I2CState *s) in bcm2835_i2c_begin_transfer() argument
55 int direction = s->c & BCM2835_I2C_C_READ; in bcm2835_i2c_begin_transfer()
56 if (i2c_start_transfer(s->bus, s->a, direction)) { in bcm2835_i2c_begin_transfer()
57 s->s |= BCM2835_I2C_S_ERR; in bcm2835_i2c_begin_transfer()
59 s->s |= BCM2835_I2C_S_TA; in bcm2835_i2c_begin_transfer()
62 s->s |= BCM2835_I2C_S_RXR | BCM2835_I2C_S_RXD; in bcm2835_i2c_begin_transfer()
64 s->s |= BCM2835_I2C_S_TXW; in bcm2835_i2c_begin_transfer()
68 static void bcm2835_i2c_finish_transfer(BCM2835I2CState *s) in bcm2835_i2c_finish_transfer() argument
80 i2c_end_transfer(s->bus); in bcm2835_i2c_finish_transfer()
81 s->s |= BCM2835_I2C_S_DONE; in bcm2835_i2c_finish_transfer()
84 s->s &= ~(BCM2835_I2C_S_TA | BCM2835_I2C_S_RXR | in bcm2835_i2c_finish_transfer()
90 BCM2835I2CState *s = opaque; in bcm2835_i2c_read() local
95 readval = s->c; in bcm2835_i2c_read()
98 readval = s->s; in bcm2835_i2c_read()
101 readval = s->dlen; in bcm2835_i2c_read()
104 readval = s->a; in bcm2835_i2c_read()
108 if (s->s & BCM2835_I2C_S_TA) { in bcm2835_i2c_read()
109 readval = i2c_recv(s->bus); in bcm2835_i2c_read()
110 s->dlen -= 1; in bcm2835_i2c_read()
112 if (s->dlen == 0) { in bcm2835_i2c_read()
113 bcm2835_i2c_finish_transfer(s); in bcm2835_i2c_read()
116 bcm2835_i2c_update_interrupt(s); in bcm2835_i2c_read()
119 readval = s->div; in bcm2835_i2c_read()
122 readval = s->del; in bcm2835_i2c_read()
125 readval = s->clkt; in bcm2835_i2c_read()
138 BCM2835I2CState *s = opaque; in bcm2835_i2c_write() local
144 s->c = writeval & ~BCM2835_I2C_C_ST; in bcm2835_i2c_write()
148 bcm2835_i2c_begin_transfer(s); in bcm2835_i2c_write()
153 if (s->dlen == 0) { in bcm2835_i2c_write()
154 bcm2835_i2c_finish_transfer(s); in bcm2835_i2c_write()
158 bcm2835_i2c_update_interrupt(s); in bcm2835_i2c_write()
161 if (writeval & BCM2835_I2C_S_DONE && s->s & BCM2835_I2C_S_DONE) { in bcm2835_i2c_write()
163 s->dlen = s->last_dlen; in bcm2835_i2c_write()
167 s->s &= ~(writeval & (BCM2835_I2C_S_DONE | in bcm2835_i2c_write()
171 s->dlen = writeval; in bcm2835_i2c_write()
172 s->last_dlen = writeval; in bcm2835_i2c_write()
175 s->a = writeval; in bcm2835_i2c_write()
179 if (s->s & BCM2835_I2C_S_TA) { in bcm2835_i2c_write()
180 if (s->s & BCM2835_I2C_S_TXD) { in bcm2835_i2c_write()
181 if (!i2c_send(s->bus, writeval & 0xff)) { in bcm2835_i2c_write()
182 s->dlen -= 1; in bcm2835_i2c_write()
184 s->s |= BCM2835_I2C_S_ERR; in bcm2835_i2c_write()
188 if (s->dlen == 0) { in bcm2835_i2c_write()
189 bcm2835_i2c_finish_transfer(s); in bcm2835_i2c_write()
192 bcm2835_i2c_update_interrupt(s); in bcm2835_i2c_write()
195 s->div = writeval; in bcm2835_i2c_write()
198 s->del = writeval; in bcm2835_i2c_write()
201 s->clkt = writeval; in bcm2835_i2c_write()
221 BCM2835I2CState *s = BCM2835_I2C(dev); in bcm2835_i2c_realize() local
222 s->bus = i2c_init_bus(dev, NULL); in bcm2835_i2c_realize()
224 memory_region_init_io(&s->iomem, OBJECT(dev), &bcm2835_i2c_ops, s, in bcm2835_i2c_realize()
226 sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->iomem); in bcm2835_i2c_realize()
227 sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq); in bcm2835_i2c_realize()
232 BCM2835I2CState *s = BCM2835_I2C(dev); in bcm2835_i2c_reset() local
235 s->c = 0x0; in bcm2835_i2c_reset()
236 s->s = BCM2835_I2C_S_TXD | BCM2835_I2C_S_TXE; in bcm2835_i2c_reset()
237 s->dlen = 0x0; in bcm2835_i2c_reset()
238 s->a = 0x0; in bcm2835_i2c_reset()
239 s->div = 0x5dc; in bcm2835_i2c_reset()
240 s->del = 0x00300030; in bcm2835_i2c_reset()
241 s->clkt = 0x40; in bcm2835_i2c_reset()
250 VMSTATE_UINT32(s, BCM2835I2CState),