Revision bc24a225 hw/tmp105.c
b/hw/tmp105.c | ||
---|---|---|
22 | 22 |
#include "hw.h" |
23 | 23 |
#include "i2c.h" |
24 | 24 |
|
25 |
struct tmp105_s {
|
|
25 |
typedef struct {
|
|
26 | 26 |
i2c_slave i2c; |
27 | 27 |
int len; |
28 | 28 |
uint8_t buf[2]; |
... | ... | |
34 | 34 |
int16_t limit[2]; |
35 | 35 |
int faults; |
36 | 36 |
int alarm; |
37 |
}; |
|
37 |
} TMP105State;
|
|
38 | 38 |
|
39 |
static void tmp105_interrupt_update(struct tmp105_s *s)
|
|
39 |
static void tmp105_interrupt_update(TMP105State *s)
|
|
40 | 40 |
{ |
41 | 41 |
qemu_set_irq(s->pin, s->alarm ^ ((~s->config >> 2) & 1)); /* POL */ |
42 | 42 |
} |
43 | 43 |
|
44 |
static void tmp105_alarm_update(struct tmp105_s *s)
|
|
44 |
static void tmp105_alarm_update(TMP105State *s)
|
|
45 | 45 |
{ |
46 | 46 |
if ((s->config >> 0) & 1) { /* SD */ |
47 | 47 |
if ((s->config >> 7) & 1) /* OS */ |
... | ... | |
68 | 68 |
/* Units are 0.001 centigrades relative to 0 C. */ |
69 | 69 |
void tmp105_set(i2c_slave *i2c, int temp) |
70 | 70 |
{ |
71 |
struct tmp105_s *s = (struct tmp105_s *) i2c;
|
|
71 |
TMP105State *s = (TMP105State *) i2c;
|
|
72 | 72 |
|
73 | 73 |
if (temp >= 128000 || temp < -128000) { |
74 | 74 |
fprintf(stderr, "%s: values is out of range (%i.%03i C)\n", |
... | ... | |
83 | 83 |
|
84 | 84 |
static const int tmp105_faultq[4] = { 1, 2, 4, 6 }; |
85 | 85 |
|
86 |
static void tmp105_read(struct tmp105_s *s)
|
|
86 |
static void tmp105_read(TMP105State *s)
|
|
87 | 87 |
{ |
88 | 88 |
s->len = 0; |
89 | 89 |
|
... | ... | |
115 | 115 |
} |
116 | 116 |
} |
117 | 117 |
|
118 |
static void tmp105_write(struct tmp105_s *s)
|
|
118 |
static void tmp105_write(TMP105State *s)
|
|
119 | 119 |
{ |
120 | 120 |
switch (s->pointer & 3) { |
121 | 121 |
case 0: /* Temperature */ |
... | ... | |
141 | 141 |
|
142 | 142 |
static int tmp105_rx(i2c_slave *i2c) |
143 | 143 |
{ |
144 |
struct tmp105_s *s = (struct tmp105_s *) i2c;
|
|
144 |
TMP105State *s = (TMP105State *) i2c;
|
|
145 | 145 |
|
146 | 146 |
if (s->len < 2) |
147 | 147 |
return s->buf[s->len ++]; |
... | ... | |
151 | 151 |
|
152 | 152 |
static int tmp105_tx(i2c_slave *i2c, uint8_t data) |
153 | 153 |
{ |
154 |
struct tmp105_s *s = (struct tmp105_s *) i2c;
|
|
154 |
TMP105State *s = (TMP105State *) i2c;
|
|
155 | 155 |
|
156 | 156 |
if (!s->len ++) |
157 | 157 |
s->pointer = data; |
... | ... | |
166 | 166 |
|
167 | 167 |
static void tmp105_event(i2c_slave *i2c, enum i2c_event event) |
168 | 168 |
{ |
169 |
struct tmp105_s *s = (struct tmp105_s *) i2c;
|
|
169 |
TMP105State *s = (TMP105State *) i2c;
|
|
170 | 170 |
|
171 | 171 |
if (event == I2C_START_RECV) |
172 | 172 |
tmp105_read(s); |
... | ... | |
176 | 176 |
|
177 | 177 |
static void tmp105_save(QEMUFile *f, void *opaque) |
178 | 178 |
{ |
179 |
struct tmp105_s *s = (struct tmp105_s *) opaque;
|
|
179 |
TMP105State *s = (TMP105State *) opaque;
|
|
180 | 180 |
|
181 | 181 |
qemu_put_byte(f, s->len); |
182 | 182 |
qemu_put_8s(f, &s->buf[0]); |
... | ... | |
195 | 195 |
|
196 | 196 |
static int tmp105_load(QEMUFile *f, void *opaque, int version_id) |
197 | 197 |
{ |
198 |
struct tmp105_s *s = (struct tmp105_s *) opaque;
|
|
198 |
TMP105State *s = (TMP105State *) opaque;
|
|
199 | 199 |
|
200 | 200 |
s->len = qemu_get_byte(f); |
201 | 201 |
qemu_get_8s(f, &s->buf[0]); |
... | ... | |
216 | 216 |
|
217 | 217 |
void tmp105_reset(i2c_slave *i2c) |
218 | 218 |
{ |
219 |
struct tmp105_s *s = (struct tmp105_s *) i2c;
|
|
219 |
TMP105State *s = (TMP105State *) i2c;
|
|
220 | 220 |
|
221 | 221 |
s->temperature = 0; |
222 | 222 |
s->pointer = 0; |
... | ... | |
229 | 229 |
|
230 | 230 |
struct i2c_slave *tmp105_init(i2c_bus *bus, qemu_irq alarm) |
231 | 231 |
{ |
232 |
struct tmp105_s *s = (struct tmp105_s *)
|
|
233 |
i2c_slave_init(bus, 0, sizeof(struct tmp105_s));
|
|
232 |
TMP105State *s = (TMP105State *)
|
|
233 |
i2c_slave_init(bus, 0, sizeof(TMP105State));
|
|
234 | 234 |
|
235 | 235 |
s->i2c.event = tmp105_event; |
236 | 236 |
s->i2c.recv = tmp105_rx; |
Also available in: Unified diff