Lines Matching defs:at24
3 * at24.c - handle most I2C EEPROMs
229 { "at24", 0 },
278 static struct at24_client *at24_translate_offset(struct at24_data *at24,
283 if (at24->flags & AT24_FLAG_ADDR16) {
291 return &at24->client[i];
294 static struct device *at24_base_client_dev(struct at24_data *at24)
296 return &at24->client[0].client->dev;
299 static size_t at24_adjust_read_count(struct at24_data *at24,
310 if (at24->flags & AT24_FLAG_NO_RDROL) {
311 bits = (at24->flags & AT24_FLAG_ADDR16) ? 16 : 8;
323 static ssize_t at24_regmap_read(struct at24_data *at24, char *buf,
332 at24_client = at24_translate_offset(at24, &offset);
335 count = at24_adjust_read_count(at24, offset, count);
338 offset += at24->offset_adj;
369 static size_t at24_adjust_write_count(struct at24_data *at24,
375 if (count > at24->write_max)
376 count = at24->write_max;
379 next_page = roundup(offset + 1, at24->page_size);
386 static ssize_t at24_regmap_write(struct at24_data *at24, const char *buf,
395 at24_client = at24_translate_offset(at24, &offset);
398 count = at24_adjust_write_count(at24, offset, count);
422 struct at24_data *at24;
427 at24 = priv;
428 dev = at24_base_client_dev(at24);
433 if (off + count > at24->byte_len)
446 mutex_lock(&at24->lock);
449 ret = at24_regmap_read(at24, buf + i, off + i, count);
451 mutex_unlock(&at24->lock);
457 mutex_unlock(&at24->lock);
461 if (unlikely(at24->read_post))
462 at24->read_post(off, buf, i);
469 struct at24_data *at24;
474 at24 = priv;
475 dev = at24_base_client_dev(at24);
480 if (off + count > at24->byte_len)
493 mutex_lock(&at24->lock);
496 ret = at24_regmap_write(at24, buf, off, count);
498 mutex_unlock(&at24->lock);
507 mutex_unlock(&at24->lock);
540 static int at24_make_dummy_client(struct at24_data *at24, unsigned int index,
547 base_client = at24->client[0].client;
559 at24->client[index].client = dummy_client;
560 at24->client[index].regmap = regmap;
597 struct at24_data *at24;
682 at24 = devm_kzalloc(dev, struct_size(at24, client, num_addresses),
684 if (!at24)
687 mutex_init(&at24->lock);
688 at24->byte_len = byte_len;
689 at24->page_size = page_size;
690 at24->flags = flags;
691 at24->read_post = cdata->read_post;
692 at24->num_addresses = num_addresses;
693 at24->offset_adj = at24_get_offset_adj(flags, byte_len);
694 at24->client[0].client = client;
695 at24->client[0].regmap = regmap;
697 at24->vcc_reg = devm_regulator_get(dev, "vcc");
698 if (IS_ERR(at24->vcc_reg))
699 return PTR_ERR(at24->vcc_reg);
703 at24->write_max = min_t(unsigned int,
705 if (!i2c_fn_i2c && at24->write_max > I2C_SMBUS_BLOCK_MAX)
706 at24->write_max = I2C_SMBUS_BLOCK_MAX;
711 err = at24_make_dummy_client(at24, i, ®map_config);
743 nvmem_config.priv = at24;
748 i2c_set_clientdata(client, at24);
750 err = regulator_enable(at24->vcc_reg);
760 at24->nvmem = devm_nvmem_register(dev, &nvmem_config);
761 if (IS_ERR(at24->nvmem)) {
764 regulator_disable(at24->vcc_reg);
765 return PTR_ERR(at24->nvmem);
772 err = at24_read(at24, 0, &test_byte, 1);
776 regulator_disable(at24->vcc_reg);
784 byte_len, client->name, at24->write_max);
794 struct at24_data *at24 = i2c_get_clientdata(client);
798 regulator_disable(at24->vcc_reg);
807 struct at24_data *at24 = i2c_get_clientdata(client);
809 return regulator_disable(at24->vcc_reg);
815 struct at24_data *at24 = i2c_get_clientdata(client);
817 return regulator_enable(at24->vcc_reg);
828 .name = "at24",
841 pr_err("at24: at24_io_limit must not be 0!\n");