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