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

6  * SPDX-License-Identifier: GPL-2.0-or-later
13 #include "hw/qdev-properties.h"
41 uint8_t config = s->regs[PCA9554_CONFIG]; in pca9554_update_pin_input()
42 uint8_t output = s->regs[PCA9554_OUTPUT]; in pca9554_update_pin_input()
48 uint8_t old_value = s->regs[PCA9554_INPUT] & bit_mask; in pca9554_update_pin_input()
53 s->regs[PCA9554_INPUT] &= ~bit_mask; in pca9554_update_pin_input()
60 if (s->ext_state[i] == PCA9554_PIN_LOW) { in pca9554_update_pin_input()
61 s->regs[PCA9554_INPUT] &= ~bit_mask; in pca9554_update_pin_input()
63 s->regs[PCA9554_INPUT] |= bit_mask; in pca9554_update_pin_input()
66 default: in pca9554_update_pin_input()
70 /* update irq state only if pin state changed */ in pca9554_update_pin_input()
71 new_value = s->regs[PCA9554_INPUT] & bit_mask; in pca9554_update_pin_input()
75 qemu_set_irq(s->gpio_out[i], 1); in pca9554_update_pin_input()
78 qemu_set_irq(s->gpio_out[i], 0); in pca9554_update_pin_input()
88 return s->regs[PCA9554_INPUT] ^ s->regs[PCA9554_POLARITY]; in pca9554_read()
92 return s->regs[reg]; in pca9554_read()
93 default: in pca9554_read()
105 s->regs[reg] = data; in pca9554_write()
109 s->regs[reg] = data; in pca9554_write()
112 default: in pca9554_write()
122 return pca9554_read(s, s->pointer & 0x3); in pca9554_recv()
130 if (s->len == 0) { in pca9554_send()
131 s->pointer = data; in pca9554_send()
132 s->len++; in pca9554_send()
134 pca9554_write(s, s->pointer & 0x3, data); in pca9554_send()
144 s->len = 0; in pca9554_event()
153 uint8_t state; in pca9554_get_pin() local
165 state = pca9554_read(s, PCA9554_CONFIG); in pca9554_get_pin()
166 state |= pca9554_read(s, PCA9554_OUTPUT); in pca9554_get_pin()
167 state = (state >> pin) & 0x1; in pca9554_get_pin()
168 visit_type_str(v, name, (char **)&pin_state[state], errp); in pca9554_get_pin()
176 uint8_t state, mask; in pca9554_set_pin() local
192 for (state = 0; state < ARRAY_SIZE(pin_state); state++) { in pca9554_set_pin()
193 if (!strcmp(state_str, pin_state[state])) { in pca9554_set_pin()
197 if (state >= ARRAY_SIZE(pin_state)) { in pca9554_set_pin()
198 error_setg(errp, "%s invalid pin state %s", __func__, state_str); in pca9554_set_pin()
205 if (state == PCA9554_PIN_LOW) { in pca9554_set_pin()
236 s->regs[PCA9554_INPUT] = 0xFF; in pca9554_reset()
237 s->regs[PCA9554_OUTPUT] = 0xFF; in pca9554_reset()
238 s->regs[PCA9554_POLARITY] = 0x0; /* No pins are inverted */ in pca9554_reset()
239 s->regs[PCA9554_CONFIG] = 0xFF; /* All pins are inputs */ in pca9554_reset()
241 memset(s->ext_state, PCA9554_PIN_HIZ, PCA9554_PIN_COUNT); in pca9554_reset()
244 s->pointer = 0x0; in pca9554_reset()
245 s->len = 0; in pca9554_reset()
264 if (s->ext_state[pin] != level) { in pca9554_set_ext_state()
265 s->ext_state[pin] = level; in pca9554_set_ext_state()
283 if (!s->description) { in pca9554_realize()
284 s->description = g_strdup("pca9554"); in pca9554_realize()
287 qdev_init_gpio_out(dev, s->gpio_out, PCA9554_PIN_COUNT); in pca9554_realize()
300 k->event = pca9554_event; in pca9554_class_init()
301 k->recv = pca9554_recv; in pca9554_class_init()
302 k->send = pca9554_send; in pca9554_class_init()
303 dc->realize = pca9554_realize; in pca9554_class_init()
305 dc->vmsd = &pca9554_vmstate; in pca9554_class_init()