Lines Matching defs:at24

3  * at24.c - handle most I2C EEPROMs
234 { "at24", 0 },
284 static struct regmap *at24_translate_offset(struct at24_data *at24,
289 if (at24->flags & AT24_FLAG_ADDR16) {
297 return at24->client_regmaps[i];
300 static struct device *at24_base_client_dev(struct at24_data *at24)
302 return regmap_get_device(at24->client_regmaps[0]);
305 static size_t at24_adjust_read_count(struct at24_data *at24,
316 if (at24->flags & AT24_FLAG_NO_RDROL) {
317 bits = (at24->flags & AT24_FLAG_ADDR16) ? 16 : 8;
329 static ssize_t at24_regmap_read(struct at24_data *at24, char *buf,
336 regmap = at24_translate_offset(at24, &offset);
337 count = at24_adjust_read_count(at24, offset, count);
340 offset += at24->offset_adj;
371 static size_t at24_adjust_write_count(struct at24_data *at24,
377 if (count > at24->write_max)
378 count = at24->write_max;
381 next_page = roundup(offset + 1, at24->page_size);
388 static ssize_t at24_regmap_write(struct at24_data *at24, const char *buf,
395 regmap = at24_translate_offset(at24, &offset);
396 count = at24_adjust_write_count(at24, offset, count);
420 struct at24_data *at24;
425 at24 = priv;
426 dev = at24_base_client_dev(at24);
431 if (off + count > at24->byte_len)
444 mutex_lock(&at24->lock);
447 ret = at24_regmap_read(at24, buf + i, off + i, count);
449 mutex_unlock(&at24->lock);
455 mutex_unlock(&at24->lock);
459 if (unlikely(at24->read_post))
460 at24->read_post(off, buf, i);
467 struct at24_data *at24;
472 at24 = priv;
473 dev = at24_base_client_dev(at24);
478 if (off + count > at24->byte_len)
491 mutex_lock(&at24->lock);
494 ret = at24_regmap_write(at24, buf, off, count);
496 mutex_unlock(&at24->lock);
505 mutex_unlock(&at24->lock);
538 static int at24_make_dummy_client(struct at24_data *at24, unsigned int index,
548 (index << at24->bank_addr_shift));
556 at24->client_regmaps[index] = regmap;
593 struct at24_data *at24;
679 at24 = devm_kzalloc(dev, struct_size(at24, client_regmaps, num_addresses),
681 if (!at24)
684 mutex_init(&at24->lock);
685 at24->byte_len = byte_len;
686 at24->page_size = page_size;
687 at24->flags = flags;
688 at24->read_post = cdata->read_post;
689 at24->bank_addr_shift = cdata->bank_addr_shift;
690 at24->num_addresses = num_addresses;
691 at24->offset_adj = at24_get_offset_adj(flags, byte_len);
692 at24->client_regmaps[0] = regmap;
694 at24->vcc_reg = devm_regulator_get(dev, "vcc");
695 if (IS_ERR(at24->vcc_reg))
696 return PTR_ERR(at24->vcc_reg);
700 at24->write_max = min_t(unsigned int,
702 if (!i2c_fn_i2c && at24->write_max > I2C_SMBUS_BLOCK_MAX)
703 at24->write_max = I2C_SMBUS_BLOCK_MAX;
708 err = at24_make_dummy_client(at24, i, client, &regmap_config);
740 nvmem_config.priv = at24;
745 i2c_set_clientdata(client, at24);
749 err = regulator_enable(at24->vcc_reg);
759 at24->nvmem = devm_nvmem_register(dev, &nvmem_config);
760 if (IS_ERR(at24->nvmem)) {
763 regulator_disable(at24->vcc_reg);
764 return dev_err_probe(dev, PTR_ERR(at24->nvmem),
774 err = at24_read(at24, 0, &test_byte, 1);
778 regulator_disable(at24->vcc_reg);
787 byte_len, client->name, at24->write_max);
797 struct at24_data *at24 = i2c_get_clientdata(client);
802 regulator_disable(at24->vcc_reg);
810 struct at24_data *at24 = i2c_get_clientdata(client);
812 return regulator_disable(at24->vcc_reg);
818 struct at24_data *at24 = i2c_get_clientdata(client);
820 return regulator_enable(at24->vcc_reg);
831 .name = "at24",
845 pr_err("at24: at24_io_limit must not be 0!\n");