Lines Matching +full:data +full:- +full:channel
22 #include "hw/qdev-core.h"
23 #include "hw/qdev-properties.h"
35 * struct Pca954xState - The pca954x state object.
37 * @channel: The set of i2c channel buses that act as channels which own the
52 * struct Pca954xClass - The pca954x class object.
65 * For each channel, if it's enabled, recursively call match on those children. in OBJECT_DECLARE_TYPE()
76 if ((candidate->address == address) || broadcast) { in OBJECT_DECLARE_TYPE()
78 node->elt = candidate; in OBJECT_DECLARE_TYPE()
85 for (i = 0; i < mc->nchans; i++) { in OBJECT_DECLARE_TYPE()
86 if (!mux->enabled[i]) { in OBJECT_DECLARE_TYPE()
90 if (i2c_scan_bus(mux->bus[i], address, broadcast, in OBJECT_DECLARE_TYPE()
108 * For each channel, check if their bit is set in enable_mask and if yes, in pca954x_enable_channel()
111 for (i = 0; i < mc->nchans; i++) { in pca954x_enable_channel()
113 s->enabled[i] = true; in pca954x_enable_channel()
115 s->enabled[i] = false; in pca954x_enable_channel()
120 static void pca954x_write(Pca954xState *s, uint8_t data) in pca954x_write() argument
122 s->control = data; in pca954x_write()
123 pca954x_enable_channel(s, data); in pca954x_write()
125 trace_pca954x_write_bytes(data); in pca954x_write()
133 qemu_log_mask(LOG_GUEST_ERROR, "%s: writing empty data\n", __func__); in pca954x_write_data()
134 return -1; in pca954x_write_data()
142 "%s: extra data after channel selection mask\n", in pca954x_write_data()
144 return -1; in pca954x_write_data()
154 uint8_t data = s->control; in pca954x_read_byte() local
155 trace_pca954x_read_data(data); in pca954x_read_byte()
156 return data; in pca954x_read_byte()
166 I2CBus *pca954x_i2c_get_bus(I2CSlave *mux, uint8_t channel) in pca954x_i2c_get_bus() argument
171 g_assert(channel < pc->nchans); in pca954x_i2c_get_bus()
172 return pca954x->bus[channel]; in pca954x_i2c_get_bus()
175 static void pca9546_class_init(ObjectClass *klass, const void *data) in pca9546_class_init() argument
178 s->nchans = PCA9546_CHANNEL_COUNT; in pca9546_class_init()
181 static void pca9548_class_init(ObjectClass *klass, const void *data) in pca9548_class_init() argument
184 s->nchans = PCA9548_CHANNEL_COUNT; in pca9548_class_init()
191 if (s->name) { in pca954x_realize()
192 d->id = g_strdup(s->name); in pca954x_realize()
194 d->id = g_strdup_printf("pca954x[%x]", s->parent.i2c.address); in pca954x_realize()
205 for (i = 0; i < c->nchans; i++) { in pca954x_init()
209 s->enabled[i] = false; in pca954x_init()
210 s->bus[i] = i2c_init_bus(DEVICE(s), bus_name); in pca954x_init()
218 static void pca954x_class_init(ObjectClass *klass, const void *data) in pca954x_class_init() argument
225 sc->match_and_add = pca954x_match; in pca954x_class_init()
227 rc->phases.enter = pca954x_enter_reset; in pca954x_class_init()
229 dc->desc = "Pca954x i2c-mux"; in pca954x_class_init()
230 dc->realize = pca954x_realize; in pca954x_class_init()
232 k->write_data = pca954x_write_data; in pca954x_class_init()
233 k->receive_byte = pca954x_read_byte; in pca954x_class_init()