Philippe Mathieu-Daudé 于2019年10月8日周二 下午10:38写道: > The LM8323 key-scan controller is a I2C device, it will be reset > when the I2C bus it stands on is reset. > > Convert its reset handler into a proper Device reset method. > > Signed-off-by: Philippe Mathieu-Daudé > Reviewed-by: Li Qiang > --- > hw/input/lm832x.c | 12 +++++------- > 1 file changed, 5 insertions(+), 7 deletions(-) > > diff --git a/hw/input/lm832x.c b/hw/input/lm832x.c > index a37eb854b9..aa629ddbf1 100644 > --- a/hw/input/lm832x.c > +++ b/hw/input/lm832x.c > @@ -24,7 +24,6 @@ > #include "migration/vmstate.h" > #include "qemu/module.h" > #include "qemu/timer.h" > -#include "sysemu/reset.h" > #include "ui/console.h" > > #define TYPE_LM8323 "lm8323" > @@ -94,8 +93,10 @@ static void lm_kbd_gpio_update(LM823KbdState *s) > { > } > > -static void lm_kbd_reset(LM823KbdState *s) > +static void lm_kbd_reset(DeviceState *dev) > { > + LM823KbdState *s = LM8323(dev); > + > s->config = 0x80; > s->status = INT_NOINIT; > s->acttime = 125; > @@ -273,7 +274,7 @@ static void lm_kbd_write(LM823KbdState *s, int reg, > int byte, uint8_t value) > > case LM832x_CMD_RESET: > if (value == 0xaa) > - lm_kbd_reset(s); > + lm_kbd_reset(DEVICE(s)); > else > lm_kbd_error(s, ERR_BADPAR); > s->reg = LM832x_GENERAL_ERROR; > @@ -476,10 +477,6 @@ static void lm8323_realize(DeviceState *dev, Error > **errp) > s->pwm.tm[1] = timer_new_ns(QEMU_CLOCK_VIRTUAL, lm_kbd_pwm1_tick, s); > s->pwm.tm[2] = timer_new_ns(QEMU_CLOCK_VIRTUAL, lm_kbd_pwm2_tick, s); > qdev_init_gpio_out(dev, &s->nirq, 1); > - > - lm_kbd_reset(s); > - > - qemu_register_reset((void *) lm_kbd_reset, s); > } > > void lm832x_key_event(DeviceState *dev, int key, int state) > @@ -507,6 +504,7 @@ static void lm8323_class_init(ObjectClass *klass, void > *data) > DeviceClass *dc = DEVICE_CLASS(klass); > I2CSlaveClass *k = I2C_SLAVE_CLASS(klass); > > + dc->reset = lm_kbd_reset; > dc->realize = lm8323_realize; > k->event = lm_i2c_event; > k->recv = lm_i2c_rx; > -- > 2.21.0 > > >