Revision 2d9401aa
b/hw/i2c.h | ||
---|---|---|
101 | 101 |
void tmp105_set(i2c_slave *i2c, int temp); |
102 | 102 |
|
103 | 103 |
/* lm832x.c */ |
104 |
struct i2c_slave *lm8323_init(i2c_bus *bus, qemu_irq nirq); |
|
105 |
void lm832x_key_event(struct i2c_slave *i2c, int key, int state); |
|
104 |
void lm832x_key_event(i2c_slave *i2c, int key, int state); |
|
106 | 105 |
|
107 | 106 |
#endif |
b/hw/lm832x.c | ||
---|---|---|
378 | 378 |
|
379 | 379 |
static void lm_i2c_event(i2c_slave *i2c, enum i2c_event event) |
380 | 380 |
{ |
381 |
LM823KbdState *s = (LM823KbdState *) i2c;
|
|
381 |
LM823KbdState *s = FROM_I2C_SLAVE(LM823KbdState, i2c);
|
|
382 | 382 |
|
383 | 383 |
switch (event) { |
384 | 384 |
case I2C_START_RECV: |
... | ... | |
394 | 394 |
|
395 | 395 |
static int lm_i2c_rx(i2c_slave *i2c) |
396 | 396 |
{ |
397 |
LM823KbdState *s = (LM823KbdState *) i2c;
|
|
397 |
LM823KbdState *s = FROM_I2C_SLAVE(LM823KbdState, i2c);
|
|
398 | 398 |
|
399 | 399 |
return lm_kbd_read(s, s->reg, s->i2c_cycle ++); |
400 | 400 |
} |
... | ... | |
489 | 489 |
return 0; |
490 | 490 |
} |
491 | 491 |
|
492 |
i2c_slave *lm8323_init(i2c_bus *bus, qemu_irq nirq)
|
|
492 |
static void lm8323_init(i2c_slave *i2c)
|
|
493 | 493 |
{ |
494 |
LM823KbdState *s; |
|
494 |
LM823KbdState *s = FROM_I2C_SLAVE(LM823KbdState, i2c);
|
|
495 | 495 |
|
496 |
s = (LM823KbdState *) i2c_slave_init(bus, 0, sizeof(LM823KbdState)); |
|
497 | 496 |
s->model = 0x8323; |
498 | 497 |
s->pwm.tm[0] = qemu_new_timer(vm_clock, lm_kbd_pwm0_tick, s); |
499 | 498 |
s->pwm.tm[1] = qemu_new_timer(vm_clock, lm_kbd_pwm1_tick, s); |
500 | 499 |
s->pwm.tm[2] = qemu_new_timer(vm_clock, lm_kbd_pwm2_tick, s); |
501 |
s->nirq = nirq; |
|
502 |
|
|
503 |
s->i2c.event = lm_i2c_event; |
|
504 |
s->i2c.recv = lm_i2c_rx; |
|
505 |
s->i2c.send = lm_i2c_tx; |
|
500 |
qdev_init_gpio_out(&i2c->qdev, &s->nirq, 1); |
|
506 | 501 |
|
507 | 502 |
lm_kbd_reset(s); |
508 | 503 |
|
509 | 504 |
qemu_register_reset((void *) lm_kbd_reset, s); |
510 | 505 |
register_savevm("LM8323", -1, 0, lm_kbd_save, lm_kbd_load, s); |
511 |
|
|
512 |
return &s->i2c; |
|
513 | 506 |
} |
514 | 507 |
|
515 | 508 |
void lm832x_key_event(struct i2c_slave *i2c, int key, int state) |
... | ... | |
531 | 524 |
s->status |= INT_KEYPAD; |
532 | 525 |
lm_kbd_irq_update(s); |
533 | 526 |
} |
527 |
|
|
528 |
static I2CSlaveInfo lm8323_info = { |
|
529 |
.init = lm8323_init, |
|
530 |
.event = lm_i2c_event, |
|
531 |
.recv = lm_i2c_rx, |
|
532 |
.send = lm_i2c_tx |
|
533 |
}; |
|
534 |
|
|
535 |
static void lm832x_register_devices(void) |
|
536 |
{ |
|
537 |
i2c_register_slave("lm8323", sizeof(LM823KbdState), &lm8323_info); |
|
538 |
} |
|
539 |
|
|
540 |
device_init(lm832x_register_devices) |
b/hw/nseries.c | ||
---|---|---|
362 | 362 |
static void n810_kbd_setup(struct n800_s *s) |
363 | 363 |
{ |
364 | 364 |
qemu_irq kbd_irq = omap2_gpio_in_get(s->cpu->gpif, N810_KEYBOARD_GPIO)[0]; |
365 |
DeviceState *dev; |
|
365 | 366 |
int i; |
366 | 367 |
|
367 | 368 |
for (i = 0; i < 0x80; i ++) |
... | ... | |
374 | 375 |
|
375 | 376 |
/* Attach the LM8322 keyboard to the I2C bus, |
376 | 377 |
* should happen in n8x0_i2c_setup and s->kbd be initialised here. */ |
377 |
s->kbd = lm8323_init(s->i2c, kbd_irq);
|
|
378 |
i2c_set_slave_address(s->kbd, N810_LM8323_ADDR);
|
|
378 |
dev = i2c_create_slave(s->i2c, "lm8323", N810_LM8323_ADDR);
|
|
379 |
qdev_connect_gpio_out(dev, 0, kbd_irq);
|
|
379 | 380 |
} |
380 | 381 |
|
381 | 382 |
/* LCD MIPI DBI-C controller (URAL) */ |
Also available in: Unified diff