Lines Matching refs:s

88 static void lm_kbd_irq_update(LM823KbdState *s)  in lm_kbd_irq_update()  argument
90 qemu_set_irq(s->nirq, !s->status); in lm_kbd_irq_update()
93 static void lm_kbd_gpio_update(LM823KbdState *s) in lm_kbd_gpio_update() argument
99 LM823KbdState *s = LM8323(dev); in lm_kbd_reset() local
101 s->config = 0x80; in lm_kbd_reset()
102 s->status = INT_NOINIT; in lm_kbd_reset()
103 s->acttime = 125; in lm_kbd_reset()
104 s->kbd.dbnctime = 3; in lm_kbd_reset()
105 s->kbd.size = 0x33; in lm_kbd_reset()
106 s->clock = 0x08; in lm_kbd_reset()
108 lm_kbd_irq_update(s); in lm_kbd_reset()
109 lm_kbd_gpio_update(s); in lm_kbd_reset()
112 static void lm_kbd_error(LM823KbdState *s, int err) in lm_kbd_error() argument
114 s->error |= err; in lm_kbd_error()
115 s->status |= INT_ERROR; in lm_kbd_error()
116 lm_kbd_irq_update(s); in lm_kbd_error()
119 static void lm_kbd_pwm_tick(LM823KbdState *s, int line) in lm_kbd_pwm_tick() argument
123 static void lm_kbd_pwm_start(LM823KbdState *s, int line) in lm_kbd_pwm_start() argument
125 lm_kbd_pwm_tick(s, line); in lm_kbd_pwm_start()
173 static uint8_t lm_kbd_read(LM823KbdState *s, int reg, int byte) in lm_kbd_read() argument
183 ret = s->status; in lm_kbd_read()
184 if (!(s->status & INT_NOINIT)) { in lm_kbd_read()
185 s->status = 0; in lm_kbd_read()
186 lm_kbd_irq_update(s); in lm_kbd_read()
191 ret = s->gpio.dir; in lm_kbd_read()
194 ret = s->gpio.mask; in lm_kbd_read()
198 if (s->kbd.len <= 1) in lm_kbd_read()
219 s->kbd.start ++; in lm_kbd_read()
220 s->kbd.start &= sizeof(s->kbd.fifo) - 1; in lm_kbd_read()
221 s->kbd.len --; in lm_kbd_read()
223 return s->kbd.fifo[s->kbd.start]; in lm_kbd_read()
225 if (byte >= s->kbd.len) in lm_kbd_read()
228 return s->kbd.fifo[(s->kbd.start + byte) & (sizeof(s->kbd.fifo) - 1)]; in lm_kbd_read()
231 return s->error; in lm_kbd_read()
237 return s->kbd.size; in lm_kbd_read()
240 return s->config & 0xf; in lm_kbd_read()
243 return (s->clock & 0xfc) | 2; in lm_kbd_read()
246 lm_kbd_error(s, ERR_CMDUNK); in lm_kbd_read()
254 static void lm_kbd_write(LM823KbdState *s, int reg, int byte, uint8_t value) in lm_kbd_write() argument
258 s->config = value; in lm_kbd_write()
260 if ((s->config >> 1) & 1) /* MUX1EN */ in lm_kbd_write()
261 qemu_set_irq(s->mux.out[0], s->mux.in[0][(s->config >> 0) & 1]); in lm_kbd_write()
262 if ((s->config >> 3) & 1) /* MUX2EN */ in lm_kbd_write()
263 qemu_set_irq(s->mux.out[0], s->mux.in[0][(s->config >> 2) & 1]); in lm_kbd_write()
269 s->status = 0; in lm_kbd_write()
270 lm_kbd_irq_update(s); in lm_kbd_write()
271 s->kbd.len = 0; in lm_kbd_write()
272 s->kbd.start = 0; in lm_kbd_write()
273 s->reg = LM832x_GENERAL_ERROR; in lm_kbd_write()
278 lm_kbd_reset(DEVICE(s)); in lm_kbd_write()
280 lm_kbd_error(s, ERR_BADPAR); in lm_kbd_write()
281 s->reg = LM832x_GENERAL_ERROR; in lm_kbd_write()
286 s->gpio.pull = value; in lm_kbd_write()
288 s->gpio.pull |= value << 8; in lm_kbd_write()
289 lm_kbd_gpio_update(s); in lm_kbd_write()
290 s->reg = LM832x_GENERAL_ERROR; in lm_kbd_write()
295 s->gpio.dir = value; in lm_kbd_write()
297 s->gpio.dir |= value << 8; in lm_kbd_write()
298 lm_kbd_gpio_update(s); in lm_kbd_write()
299 s->reg = LM832x_GENERAL_ERROR; in lm_kbd_write()
304 s->gpio.mask = value; in lm_kbd_write()
306 s->gpio.mask |= value << 8; in lm_kbd_write()
307 lm_kbd_gpio_update(s); in lm_kbd_write()
308 s->reg = LM832x_GENERAL_ERROR; in lm_kbd_write()
313 s->acttime = value; in lm_kbd_write()
314 s->reg = LM832x_GENERAL_ERROR; in lm_kbd_write()
318 s->kbd.dbnctime = value; in lm_kbd_write()
319 s->reg = LM832x_GENERAL_ERROR; in lm_kbd_write()
321 lm_kbd_error(s, ERR_BADPAR); in lm_kbd_write()
325 s->kbd.size = value; in lm_kbd_write()
326 s->reg = LM832x_GENERAL_ERROR; in lm_kbd_write()
330 lm_kbd_error(s, ERR_BADPAR); in lm_kbd_write()
334 s->clock = value; in lm_kbd_write()
335 s->reg = LM832x_GENERAL_ERROR; in lm_kbd_write()
337 lm_kbd_error(s, ERR_BADPAR); in lm_kbd_write()
347 lm_kbd_error(s, ERR_BADPAR); in lm_kbd_write()
348 s->reg = LM832x_GENERAL_ERROR; in lm_kbd_write()
352 s->pwm.faddr = value; in lm_kbd_write()
353 s->pwm.file[s->pwm.faddr] = 0; in lm_kbd_write()
355 s->pwm.file[s->pwm.faddr] |= value << 8; in lm_kbd_write()
357 s->pwm.file[s->pwm.faddr] |= value << 0; in lm_kbd_write()
358 s->reg = LM832x_GENERAL_ERROR; in lm_kbd_write()
362 s->reg = LM832x_GENERAL_ERROR; in lm_kbd_write()
364 lm_kbd_error(s, ERR_BADPAR); in lm_kbd_write()
368 s->pwm.addr[(value & 3) - 1] = value >> 2; in lm_kbd_write()
369 lm_kbd_pwm_start(s, (value & 3) - 1); in lm_kbd_write()
372 s->reg = LM832x_GENERAL_ERROR; in lm_kbd_write()
374 lm_kbd_error(s, ERR_BADPAR); in lm_kbd_write()
378 timer_del(s->pwm.tm[(value & 3) - 1]); in lm_kbd_write()
382 lm_kbd_error(s, ERR_BADPAR); in lm_kbd_write()
385 lm_kbd_error(s, ERR_CMDUNK); in lm_kbd_write()
393 LM823KbdState *s = LM8323(i2c); in lm_i2c_event() local
398 s->i2c_cycle = 0; in lm_i2c_event()
399 s->i2c_dir = (event == I2C_START_SEND); in lm_i2c_event()
411 LM823KbdState *s = LM8323(i2c); in lm_i2c_rx() local
413 return lm_kbd_read(s, s->reg, s->i2c_cycle ++); in lm_i2c_rx()
418 LM823KbdState *s = LM8323(i2c); in lm_i2c_tx() local
420 if (!s->i2c_cycle) in lm_i2c_tx()
421 s->reg = data; in lm_i2c_tx()
423 lm_kbd_write(s, s->reg, s->i2c_cycle - 1, data); in lm_i2c_tx()
424 s->i2c_cycle ++; in lm_i2c_tx()
431 LM823KbdState *s = opaque; in lm_kbd_post_load() local
433 lm_kbd_irq_update(s); in lm_kbd_post_load()
434 lm_kbd_gpio_update(s); in lm_kbd_post_load()
474 LM823KbdState *s = LM8323(dev); in lm8323_realize() local
476 s->model = 0x8323; in lm8323_realize()
477 s->pwm.tm[0] = timer_new_ns(QEMU_CLOCK_VIRTUAL, lm_kbd_pwm0_tick, s); in lm8323_realize()
478 s->pwm.tm[1] = timer_new_ns(QEMU_CLOCK_VIRTUAL, lm_kbd_pwm1_tick, s); in lm8323_realize()
479 s->pwm.tm[2] = timer_new_ns(QEMU_CLOCK_VIRTUAL, lm_kbd_pwm2_tick, s); in lm8323_realize()
480 qdev_init_gpio_out(dev, &s->nirq, 1); in lm8323_realize()
485 LM823KbdState *s = LM8323(dev); in lm832x_key_event() local
487 if ((s->status & INT_ERROR) && (s->error & ERR_FIFOOVR)) in lm832x_key_event()
490 if (s->kbd.len >= sizeof(s->kbd.fifo)) { in lm832x_key_event()
491 lm_kbd_error(s, ERR_FIFOOVR); in lm832x_key_event()
495 s->kbd.fifo[(s->kbd.start + s->kbd.len ++) & (sizeof(s->kbd.fifo) - 1)] = in lm832x_key_event()
499 s->status |= INT_KEYPAD; in lm832x_key_event()
500 lm_kbd_irq_update(s); in lm832x_key_event()