Lines Matching +full:default +full:- +full:state

4  *     https://www.nxp.com/docs/en/application-note/AN264.pdf
6 * Copyright (c) 2017-2018, IBM Corporation.
7 * Copyright (c) 2020 Philippe Mathieu-Daudé
10 * later. See the COPYING file in the top-level directory.
17 #include "hw/qdev-properties.h"
57 return extract32(s->regs[reg], shift, 2); in pca955x_pin_get_config()
63 return (s->regs[PCA9552_INPUT1] << 8) | s->regs[PCA9552_INPUT0]; in pca955x_pins_get_status()
81 for (i = 0; i < k->pin_count; i++) { in pca955x_display_pins_status()
89 trace_pca955x_gpio_status(s->description, buf); in pca955x_display_pins_status()
92 for (i = 0; i < k->pin_count; i++) { in pca955x_display_pins_status()
97 * We display the state using the PCA logic ("active-high"). in pca955x_display_pins_status()
98 * This is not the state of the LED, which signal might be in pca955x_display_pins_status()
99 * wired "active-low" on the board. in pca955x_display_pins_status()
101 trace_pca955x_gpio_change(s->description, i, in pca955x_display_pins_status()
113 for (i = 0; i < k->pin_count; i++) { in pca955x_update_pin_input()
117 uint8_t old_value = s->regs[input_reg] & bit_mask; in pca955x_update_pin_input()
123 s->regs[input_reg] &= ~bit_mask; in pca955x_update_pin_input()
127 * Pin is set to Hi-Z to turn off LED and in pca955x_update_pin_input()
131 if (s->ext_state[i] == PCA9552_PIN_LOW) { in pca955x_update_pin_input()
132 s->regs[input_reg] &= ~bit_mask; in pca955x_update_pin_input()
134 s->regs[input_reg] |= bit_mask; in pca955x_update_pin_input()
140 default: in pca955x_update_pin_input()
144 /* update irq state only if pin state changed */ in pca955x_update_pin_input()
145 new_value = s->regs[input_reg] & bit_mask; in pca955x_update_pin_input()
147 qemu_set_irq(s->gpio_out[i], !!new_value); in pca955x_update_pin_input()
165 return s->regs[reg]; in pca955x_read()
166 default: in pca955x_read()
182 s->regs[reg] = data; in pca955x_write()
190 s->regs[reg] = data; in pca955x_write()
197 default: in pca955x_write()
204 * When Auto-Increment is on, the register address is incremented
212 if (s->pointer != 0xFF && s->pointer & PCA9552_AUTOINC) { in pca955x_autoinc()
213 uint8_t reg = s->pointer & 0xf; in pca955x_autoinc()
215 reg = (reg + 1) % (k->max_reg + 1); in pca955x_autoinc()
216 s->pointer = reg | PCA9552_AUTOINC; in pca955x_autoinc()
225 ret = pca955x_read(s, s->pointer & 0xf); in pca955x_recv()
237 if (s->pointer == PCA9552_AUTOINC) { in pca955x_recv()
253 if (s->len == 0) { in pca955x_send()
254 s->pointer = data; in pca955x_send()
255 s->len++; in pca955x_send()
257 pca955x_write(s, s->pointer & 0xf, data); in pca955x_send()
269 s->len = 0; in pca955x_event()
279 uint8_t state; in pca955x_get_led() local
286 if (led < 0 || led > k->pin_count) { in pca955x_get_led()
292 * state, not the modeled 'input line' behaviour which would come from in pca955x_get_led()
296 state = (pca955x_read(s, reg) >> ((led % 4) * 2)) & 0x3; in pca955x_get_led()
297 visit_type_str(v, name, (char **)&led_state[state], errp); in pca955x_get_led()
302 * the appropriate 2-bit state value set for the given LED number (0-3).
304 static inline uint8_t pca955x_ledsel(uint8_t oldval, int led_num, int state) in pca955x_ledsel() argument
307 ((state & 0x3) << (led_num << 1)); in pca955x_ledsel()
316 uint8_t state; in pca955x_set_led() local
327 if (led < 0 || led > k->pin_count) { in pca955x_set_led()
332 for (state = 0; state < ARRAY_SIZE(led_state); state++) { in pca955x_set_led()
333 if (!strcmp(state_str, led_state[state])) { in pca955x_set_led()
337 if (state >= ARRAY_SIZE(led_state)) { in pca955x_set_led()
338 error_setg(errp, "%s invalid led state %s", __func__, state_str); in pca955x_set_led()
344 val = pca955x_ledsel(val, led % 4, state); in pca955x_set_led()
366 s->regs[PCA9552_PSC0] = 0xFF; in pca9552_reset()
367 s->regs[PCA9552_PWM0] = 0x80; in pca9552_reset()
368 s->regs[PCA9552_PSC1] = 0xFF; in pca9552_reset()
369 s->regs[PCA9552_PWM1] = 0x80; in pca9552_reset()
370 s->regs[PCA9552_LS0] = 0x55; /* all OFF */ in pca9552_reset()
371 s->regs[PCA9552_LS1] = 0x55; in pca9552_reset()
372 s->regs[PCA9552_LS2] = 0x55; in pca9552_reset()
373 s->regs[PCA9552_LS3] = 0x55; in pca9552_reset()
375 memset(s->ext_state, PCA9552_PIN_HIZ, PCA955X_PIN_COUNT_MAX); in pca9552_reset()
378 s->pointer = 0xFF; in pca9552_reset()
379 s->len = 0; in pca9552_reset()
387 assert(k->pin_count <= PCA955X_PIN_COUNT_MAX); in pca955x_initfn()
388 for (led = 0; led < k->pin_count; led++) { in pca955x_initfn()
400 if (s->ext_state[pin] != level) { in pca955x_set_ext_state()
402 s->ext_state[pin] = level; in pca955x_set_ext_state()
414 assert((pin >= 0) && (pin < k->pin_count)); in pca955x_gpio_in_handler()
423 if (!s->description) { in pca955x_realize()
424 s->description = g_strdup("pca-unspecified"); in pca955x_realize()
427 qdev_init_gpio_out(dev, s->gpio_out, k->pin_count); in pca955x_realize()
428 qdev_init_gpio_in(dev, pca955x_gpio_in_handler, k->pin_count); in pca955x_realize()
440 k->event = pca955x_event; in pca955x_class_init()
441 k->recv = pca955x_recv; in pca955x_class_init()
442 k->send = pca955x_send; in pca955x_class_init()
443 dc->realize = pca955x_realize; in pca955x_class_init()
463 dc->vmsd = &pca9552_vmstate; in pca9552_class_init()
464 pc->max_reg = PCA9552_LS3; in pca9552_class_init()
465 pc->pin_count = 16; in pca9552_class_init()