Philippe Mathieu-Daudé <phi...@redhat.com> 于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é <phi...@redhat.com>
>

Reviewed-by: Li Qiang <liq...@gmail.com>


> ---
>  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
>
>
>

Reply via email to