Revision bc24a225 hw/twl92230.c
b/hw/twl92230.c | ||
---|---|---|
28 | 28 |
|
29 | 29 |
#define VERBOSE 1 |
30 | 30 |
|
31 |
struct menelaus_s {
|
|
31 |
typedef struct {
|
|
32 | 32 |
i2c_slave i2c; |
33 | 33 |
qemu_irq irq; |
34 | 34 |
|
... | ... | |
66 | 66 |
qemu_irq *in; |
67 | 67 |
int pwrbtn_state; |
68 | 68 |
qemu_irq pwrbtn; |
69 |
}; |
|
69 |
} MenelausState;
|
|
70 | 70 |
|
71 |
static inline void menelaus_update(struct menelaus_s *s)
|
|
71 |
static inline void menelaus_update(MenelausState *s)
|
|
72 | 72 |
{ |
73 | 73 |
qemu_set_irq(s->irq, s->status & ~s->mask); |
74 | 74 |
} |
75 | 75 |
|
76 |
static inline void menelaus_rtc_start(struct menelaus_s *s)
|
|
76 |
static inline void menelaus_rtc_start(MenelausState *s)
|
|
77 | 77 |
{ |
78 | 78 |
s->rtc.next =+ qemu_get_clock(rt_clock); |
79 | 79 |
qemu_mod_timer(s->rtc.hz_tm, s->rtc.next); |
80 | 80 |
} |
81 | 81 |
|
82 |
static inline void menelaus_rtc_stop(struct menelaus_s *s)
|
|
82 |
static inline void menelaus_rtc_stop(MenelausState *s)
|
|
83 | 83 |
{ |
84 | 84 |
qemu_del_timer(s->rtc.hz_tm); |
85 | 85 |
s->rtc.next =- qemu_get_clock(rt_clock); |
... | ... | |
87 | 87 |
s->rtc.next = 1; |
88 | 88 |
} |
89 | 89 |
|
90 |
static void menelaus_rtc_update(struct menelaus_s *s)
|
|
90 |
static void menelaus_rtc_update(MenelausState *s)
|
|
91 | 91 |
{ |
92 | 92 |
qemu_get_timedate(&s->rtc.tm, s->rtc.sec_offset); |
93 | 93 |
} |
94 | 94 |
|
95 |
static void menelaus_alm_update(struct menelaus_s *s)
|
|
95 |
static void menelaus_alm_update(MenelausState *s)
|
|
96 | 96 |
{ |
97 | 97 |
if ((s->rtc.ctrl & 3) == 3) |
98 | 98 |
s->rtc.alm_sec = qemu_timedate_diff(&s->rtc.alm) - s->rtc.sec_offset; |
... | ... | |
100 | 100 |
|
101 | 101 |
static void menelaus_rtc_hz(void *opaque) |
102 | 102 |
{ |
103 |
struct menelaus_s *s = (struct menelaus_s *) opaque;
|
|
103 |
MenelausState *s = (MenelausState *) opaque;
|
|
104 | 104 |
|
105 | 105 |
s->rtc.next_comp --; |
106 | 106 |
s->rtc.alm_sec --; |
... | ... | |
130 | 130 |
|
131 | 131 |
static void menelaus_reset(i2c_slave *i2c) |
132 | 132 |
{ |
133 |
struct menelaus_s *s = (struct menelaus_s *) i2c;
|
|
133 |
MenelausState *s = (MenelausState *) i2c;
|
|
134 | 134 |
s->reg = 0x00; |
135 | 135 |
|
136 | 136 |
s->vcore[0] = 0x0c; /* XXX: X-loader needs 0x8c? check! */ |
... | ... | |
196 | 196 |
|
197 | 197 |
static void menelaus_gpio_set(void *opaque, int line, int level) |
198 | 198 |
{ |
199 |
struct menelaus_s *s = (struct menelaus_s *) opaque;
|
|
199 |
MenelausState *s = (MenelausState *) opaque;
|
|
200 | 200 |
|
201 | 201 |
/* No interrupt generated */ |
202 | 202 |
s->inputs &= ~(1 << line); |
... | ... | |
205 | 205 |
|
206 | 206 |
static void menelaus_pwrbtn_set(void *opaque, int line, int level) |
207 | 207 |
{ |
208 |
struct menelaus_s *s = (struct menelaus_s *) opaque;
|
|
208 |
MenelausState *s = (MenelausState *) opaque;
|
|
209 | 209 |
|
210 | 210 |
if (!s->pwrbtn_state && level) { |
211 | 211 |
s->status |= 1 << 11; /* PSHBTN */ |
... | ... | |
275 | 275 |
|
276 | 276 |
static uint8_t menelaus_read(void *opaque, uint8_t addr) |
277 | 277 |
{ |
278 |
struct menelaus_s *s = (struct menelaus_s *) opaque;
|
|
278 |
MenelausState *s = (MenelausState *) opaque;
|
|
279 | 279 |
int reg = 0; |
280 | 280 |
|
281 | 281 |
switch (addr) { |
... | ... | |
421 | 421 |
|
422 | 422 |
static void menelaus_write(void *opaque, uint8_t addr, uint8_t value) |
423 | 423 |
{ |
424 |
struct menelaus_s *s = (struct menelaus_s *) opaque;
|
|
424 |
MenelausState *s = (MenelausState *) opaque;
|
|
425 | 425 |
int line; |
426 | 426 |
int reg = 0; |
427 | 427 |
struct tm tm; |
... | ... | |
721 | 721 |
|
722 | 722 |
static void menelaus_event(i2c_slave *i2c, enum i2c_event event) |
723 | 723 |
{ |
724 |
struct menelaus_s *s = (struct menelaus_s *) i2c;
|
|
724 |
MenelausState *s = (MenelausState *) i2c;
|
|
725 | 725 |
|
726 | 726 |
if (event == I2C_START_SEND) |
727 | 727 |
s->firstbyte = 1; |
... | ... | |
729 | 729 |
|
730 | 730 |
static int menelaus_tx(i2c_slave *i2c, uint8_t data) |
731 | 731 |
{ |
732 |
struct menelaus_s *s = (struct menelaus_s *) i2c;
|
|
732 |
MenelausState *s = (MenelausState *) i2c;
|
|
733 | 733 |
/* Interpret register address byte */ |
734 | 734 |
if (s->firstbyte) { |
735 | 735 |
s->reg = data; |
... | ... | |
742 | 742 |
|
743 | 743 |
static int menelaus_rx(i2c_slave *i2c) |
744 | 744 |
{ |
745 |
struct menelaus_s *s = (struct menelaus_s *) i2c;
|
|
745 |
MenelausState *s = (MenelausState *) i2c;
|
|
746 | 746 |
|
747 | 747 |
return menelaus_read(s, s->reg ++); |
748 | 748 |
} |
... | ... | |
767 | 767 |
|
768 | 768 |
static void menelaus_save(QEMUFile *f, void *opaque) |
769 | 769 |
{ |
770 |
struct menelaus_s *s = (struct menelaus_s *) opaque;
|
|
770 |
MenelausState *s = (MenelausState *) opaque;
|
|
771 | 771 |
|
772 | 772 |
qemu_put_be32(f, s->firstbyte); |
773 | 773 |
qemu_put_8s(f, &s->reg); |
... | ... | |
819 | 819 |
|
820 | 820 |
static int menelaus_load(QEMUFile *f, void *opaque, int version_id) |
821 | 821 |
{ |
822 |
struct menelaus_s *s = (struct menelaus_s *) opaque;
|
|
822 |
MenelausState *s = (MenelausState *) opaque;
|
|
823 | 823 |
|
824 | 824 |
s->firstbyte = qemu_get_be32(f); |
825 | 825 |
qemu_get_8s(f, &s->reg); |
... | ... | |
877 | 877 |
|
878 | 878 |
i2c_slave *twl92230_init(i2c_bus *bus, qemu_irq irq) |
879 | 879 |
{ |
880 |
struct menelaus_s *s = (struct menelaus_s *)
|
|
881 |
i2c_slave_init(bus, 0, sizeof(struct menelaus_s));
|
|
880 |
MenelausState *s = (MenelausState *)
|
|
881 |
i2c_slave_init(bus, 0, sizeof(MenelausState));
|
|
882 | 882 |
|
883 | 883 |
s->i2c.event = menelaus_event; |
884 | 884 |
s->i2c.recv = menelaus_rx; |
... | ... | |
898 | 898 |
|
899 | 899 |
qemu_irq *twl92230_gpio_in_get(i2c_slave *i2c) |
900 | 900 |
{ |
901 |
struct menelaus_s *s = (struct menelaus_s *) i2c;
|
|
901 |
MenelausState *s = (MenelausState *) i2c;
|
|
902 | 902 |
|
903 | 903 |
return s->in; |
904 | 904 |
} |
905 | 905 |
|
906 | 906 |
void twl92230_gpio_out_set(i2c_slave *i2c, int line, qemu_irq handler) |
907 | 907 |
{ |
908 |
struct menelaus_s *s = (struct menelaus_s *) i2c;
|
|
908 |
MenelausState *s = (MenelausState *) i2c;
|
|
909 | 909 |
|
910 | 910 |
if (line >= 3 || line < 0) { |
911 | 911 |
fprintf(stderr, "%s: No GPO line %i\n", __FUNCTION__, line); |
Also available in: Unified diff