Lines Matching refs:data
258 { .compatible = "maxim,max7356", .data = &chips[max_7356] },
259 { .compatible = "maxim,max7357", .data = &chips[max_7357] },
260 { .compatible = "maxim,max7358", .data = &chips[max_7358] },
261 { .compatible = "maxim,max7367", .data = &chips[max_7367] },
262 { .compatible = "maxim,max7368", .data = &chips[max_7368] },
263 { .compatible = "maxim,max7369", .data = &chips[max_7369] },
264 { .compatible = "nxp,pca9540", .data = &chips[pca_9540] },
265 { .compatible = "nxp,pca9542", .data = &chips[pca_9542] },
266 { .compatible = "nxp,pca9543", .data = &chips[pca_9543] },
267 { .compatible = "nxp,pca9544", .data = &chips[pca_9544] },
268 { .compatible = "nxp,pca9545", .data = &chips[pca_9545] },
269 { .compatible = "nxp,pca9546", .data = &chips[pca_9546] },
270 { .compatible = "nxp,pca9547", .data = &chips[pca_9547] },
271 { .compatible = "nxp,pca9548", .data = &chips[pca_9548] },
272 { .compatible = "nxp,pca9846", .data = &chips[pca_9846] },
273 { .compatible = "nxp,pca9847", .data = &chips[pca_9847] },
274 { .compatible = "nxp,pca9848", .data = &chips[pca_9848] },
275 { .compatible = "nxp,pca9849", .data = &chips[pca_9849] },
292 static u8 pca954x_regval(struct pca954x *data, u8 chan)
295 if (data->chip->muxtype == pca954x_ismux)
296 return chan | data->chip->enable;
303 struct pca954x *data = i2c_mux_priv(muxc);
304 struct i2c_client *client = data->client;
308 regval = pca954x_regval(data, chan);
310 if (data->last_chan != regval) {
312 data->last_chan = ret < 0 ? 0 : regval;
320 struct pca954x *data = i2c_mux_priv(muxc);
321 struct i2c_client *client = data->client;
324 idle_state = READ_ONCE(data->idle_state);
331 data->last_chan = 0;
333 data->last_chan);
347 struct pca954x *data = i2c_mux_priv(muxc);
349 return sprintf(buf, "%d\n", READ_ONCE(data->idle_state));
358 struct pca954x *data = i2c_mux_priv(muxc);
367 (val < 0 || val >= data->chip->nchans))
372 WRITE_ONCE(data->idle_state, val);
377 if (data->last_chan || val != MUX_IDLE_DISCONNECT)
389 struct pca954x *data = dev_id;
393 ret = i2c_smbus_read_byte(data->client);
397 pending = (ret >> PCA954X_IRQ_OFFSET) & (BIT(data->chip->nchans) - 1);
398 for_each_set_bit(i, &pending, data->chip->nchans)
399 handle_nested_irq(irq_linear_revmap(data->irq, i));
418 struct pca954x *data = i2c_mux_priv(muxc);
419 struct i2c_client *client = data->client;
422 if (!data->chip->has_irq || client->irq <= 0)
425 raw_spin_lock_init(&data->lock);
427 data->irq = irq_domain_add_linear(client->dev.of_node,
428 data->chip->nchans,
429 &irq_domain_simple_ops, data);
430 if (!data->irq)
433 for (c = 0; c < data->chip->nchans; c++) {
434 irq = irq_create_mapping(data->irq, c);
439 irq_set_chip_data(irq, data);
449 struct pca954x *data = i2c_mux_priv(muxc);
452 regulator_disable(data->supply);
454 if (data->irq) {
455 for (c = 0; c < data->chip->nchans; c++) {
456 irq = irq_find_mapping(data->irq, c);
459 irq_domain_remove(data->irq);
464 static int pca954x_init(struct i2c_client *client, struct pca954x *data)
468 if (data->idle_state >= 0)
469 data->last_chan = pca954x_regval(data, data->idle_state);
471 data->last_chan = 0; /* Disconnect multiplexer */
473 ret = i2c_smbus_write_byte(client, data->last_chan);
475 data->last_chan = 0;
490 struct pca954x *data;
497 muxc = i2c_mux_alloc(adap, dev, PCA954X_MAX_NCHANS, sizeof(*data), 0,
501 data = i2c_mux_priv(muxc);
504 data->client = client;
506 data->supply = devm_regulator_get(dev, "vdd");
507 if (IS_ERR(data->supply))
508 return dev_err_probe(dev, PTR_ERR(data->supply),
511 ret = regulator_enable(data->supply);
529 data->chip = device_get_match_data(dev);
530 if (!data->chip)
531 data->chip = &chips[id->driver_data];
533 if (data->chip->id.manufacturer_id != I2C_DEVICE_ID_NONE) {
541 (id.manufacturer_id != data->chip->id.manufacturer_id ||
542 id.part_id != data->chip->id.part_id)) {
551 data->idle_state = MUX_IDLE_AS_IS;
552 if (device_property_read_u32(dev, "idle-state", &data->idle_state)) {
554 data->idle_state = MUX_IDLE_DISCONNECT;
563 ret = pca954x_init(client, data);
575 for (num = 0; num < data->chip->nchans; num++) {
581 if (data->irq) {
582 ret = devm_request_threaded_irq(dev, data->client->irq,
585 "pca954x", data);
597 num, data->chip->muxtype == pca954x_ismux
620 struct pca954x *data = i2c_mux_priv(muxc);
623 ret = pca954x_init(client, data);