Lines Matching refs:at24

284 static struct regmap *at24_translate_offset(struct at24_data *at24,  in at24_translate_offset()  argument
289 if (at24->flags & AT24_FLAG_ADDR16) { in at24_translate_offset()
297 return at24->client_regmaps[i]; in at24_translate_offset()
300 static struct device *at24_base_client_dev(struct at24_data *at24) in at24_base_client_dev() argument
302 return regmap_get_device(at24->client_regmaps[0]); in at24_base_client_dev()
305 static size_t at24_adjust_read_count(struct at24_data *at24, in at24_adjust_read_count() argument
316 if (at24->flags & AT24_FLAG_NO_RDROL) { in at24_adjust_read_count()
317 bits = (at24->flags & AT24_FLAG_ADDR16) ? 16 : 8; in at24_adjust_read_count()
329 static ssize_t at24_regmap_read(struct at24_data *at24, char *buf, in at24_regmap_read() argument
336 regmap = at24_translate_offset(at24, &offset); in at24_regmap_read()
337 count = at24_adjust_read_count(at24, offset, count); in at24_regmap_read()
340 offset += at24->offset_adj; in at24_regmap_read()
371 static size_t at24_adjust_write_count(struct at24_data *at24, in at24_adjust_write_count() argument
377 if (count > at24->write_max) in at24_adjust_write_count()
378 count = at24->write_max; in at24_adjust_write_count()
381 next_page = roundup(offset + 1, at24->page_size); in at24_adjust_write_count()
388 static ssize_t at24_regmap_write(struct at24_data *at24, const char *buf, in at24_regmap_write() argument
395 regmap = at24_translate_offset(at24, &offset); in at24_regmap_write()
396 count = at24_adjust_write_count(at24, offset, count); in at24_regmap_write()
420 struct at24_data *at24; in at24_read() local
425 at24 = priv; in at24_read()
426 dev = at24_base_client_dev(at24); in at24_read()
431 if (off + count > at24->byte_len) in at24_read()
444 mutex_lock(&at24->lock); in at24_read()
447 ret = at24_regmap_read(at24, buf + i, off + i, count); in at24_read()
449 mutex_unlock(&at24->lock); in at24_read()
455 mutex_unlock(&at24->lock); in at24_read()
459 if (unlikely(at24->read_post)) in at24_read()
460 at24->read_post(off, buf, i); in at24_read()
467 struct at24_data *at24; in at24_write() local
472 at24 = priv; in at24_write()
473 dev = at24_base_client_dev(at24); in at24_write()
478 if (off + count > at24->byte_len) in at24_write()
491 mutex_lock(&at24->lock); in at24_write()
494 ret = at24_regmap_write(at24, buf, off, count); in at24_write()
496 mutex_unlock(&at24->lock); in at24_write()
505 mutex_unlock(&at24->lock); in at24_write()
538 static int at24_make_dummy_client(struct at24_data *at24, unsigned int index, in at24_make_dummy_client() argument
548 (index << at24->bank_addr_shift)); in at24_make_dummy_client()
556 at24->client_regmaps[index] = regmap; in at24_make_dummy_client()
593 struct at24_data *at24; in at24_probe() local
679 at24 = devm_kzalloc(dev, struct_size(at24, client_regmaps, num_addresses), in at24_probe()
681 if (!at24) in at24_probe()
684 mutex_init(&at24->lock); in at24_probe()
685 at24->byte_len = byte_len; in at24_probe()
686 at24->page_size = page_size; in at24_probe()
687 at24->flags = flags; in at24_probe()
688 at24->read_post = cdata->read_post; in at24_probe()
689 at24->bank_addr_shift = cdata->bank_addr_shift; in at24_probe()
690 at24->num_addresses = num_addresses; in at24_probe()
691 at24->offset_adj = at24_get_offset_adj(flags, byte_len); in at24_probe()
692 at24->client_regmaps[0] = regmap; in at24_probe()
694 at24->vcc_reg = devm_regulator_get(dev, "vcc"); in at24_probe()
695 if (IS_ERR(at24->vcc_reg)) in at24_probe()
696 return PTR_ERR(at24->vcc_reg); in at24_probe()
700 at24->write_max = min_t(unsigned int, in at24_probe()
702 if (!i2c_fn_i2c && at24->write_max > I2C_SMBUS_BLOCK_MAX) in at24_probe()
703 at24->write_max = I2C_SMBUS_BLOCK_MAX; in at24_probe()
708 err = at24_make_dummy_client(at24, i, client, &regmap_config); in at24_probe()
740 nvmem_config.priv = at24; in at24_probe()
745 i2c_set_clientdata(client, at24); in at24_probe()
749 err = regulator_enable(at24->vcc_reg); in at24_probe()
759 at24->nvmem = devm_nvmem_register(dev, &nvmem_config); in at24_probe()
760 if (IS_ERR(at24->nvmem)) { in at24_probe()
763 regulator_disable(at24->vcc_reg); in at24_probe()
764 return PTR_ERR(at24->nvmem); in at24_probe()
773 err = at24_read(at24, 0, &test_byte, 1); in at24_probe()
777 regulator_disable(at24->vcc_reg); in at24_probe()
786 byte_len, client->name, at24->write_max); in at24_probe()
796 struct at24_data *at24 = i2c_get_clientdata(client); in at24_remove() local
801 regulator_disable(at24->vcc_reg); in at24_remove()
809 struct at24_data *at24 = i2c_get_clientdata(client); in at24_suspend() local
811 return regulator_disable(at24->vcc_reg); in at24_suspend()
817 struct at24_data *at24 = i2c_get_clientdata(client); in at24_resume() local
819 return regulator_enable(at24->vcc_reg); in at24_resume()