Lines Matching refs:at24

301 static struct regmap *at24_translate_offset(struct at24_data *at24,  in at24_translate_offset()  argument
306 if (at24->flags & AT24_FLAG_ADDR16) { in at24_translate_offset()
314 return at24->client_regmaps[i]; in at24_translate_offset()
317 static struct device *at24_base_client_dev(struct at24_data *at24) in at24_base_client_dev() argument
319 return regmap_get_device(at24->client_regmaps[0]); in at24_base_client_dev()
322 static size_t at24_adjust_read_count(struct at24_data *at24, in at24_adjust_read_count() argument
333 if (at24->flags & AT24_FLAG_NO_RDROL) { in at24_adjust_read_count()
334 bits = (at24->flags & AT24_FLAG_ADDR16) ? 16 : 8; in at24_adjust_read_count()
346 static ssize_t at24_regmap_read(struct at24_data *at24, char *buf, in at24_regmap_read() argument
353 regmap = at24_translate_offset(at24, &offset); in at24_regmap_read()
354 count = at24_adjust_read_count(at24, offset, count); in at24_regmap_read()
357 offset += at24->offset_adj; in at24_regmap_read()
388 static size_t at24_adjust_write_count(struct at24_data *at24, in at24_adjust_write_count() argument
394 if (count > at24->write_max) in at24_adjust_write_count()
395 count = at24->write_max; in at24_adjust_write_count()
398 next_page = roundup(offset + 1, at24->page_size); in at24_adjust_write_count()
405 static ssize_t at24_regmap_write(struct at24_data *at24, const char *buf, in at24_regmap_write() argument
412 regmap = at24_translate_offset(at24, &offset); in at24_regmap_write()
413 count = at24_adjust_write_count(at24, offset, count); in at24_regmap_write()
437 struct at24_data *at24; in at24_read() local
442 at24 = priv; in at24_read()
443 dev = at24_base_client_dev(at24); in at24_read()
448 if (off + count > at24->byte_len) in at24_read()
458 mutex_lock(&at24->lock); in at24_read()
461 ret = at24_regmap_read(at24, buf + i, off + i, count); in at24_read()
463 mutex_unlock(&at24->lock); in at24_read()
469 mutex_unlock(&at24->lock); in at24_read()
473 if (unlikely(at24->read_post)) in at24_read()
474 at24->read_post(off, buf, i); in at24_read()
481 struct at24_data *at24; in at24_write() local
486 at24 = priv; in at24_write()
487 dev = at24_base_client_dev(at24); in at24_write()
492 if (off + count > at24->byte_len) in at24_write()
502 mutex_lock(&at24->lock); in at24_write()
505 ret = at24_regmap_write(at24, buf, off, count); in at24_write()
507 mutex_unlock(&at24->lock); in at24_write()
516 mutex_unlock(&at24->lock); in at24_write()
523 static int at24_make_dummy_client(struct at24_data *at24, unsigned int index, in at24_make_dummy_client() argument
533 (index << at24->bank_addr_shift)); in at24_make_dummy_client()
541 at24->client_regmaps[index] = regmap; in at24_make_dummy_client()
571 struct at24_data *at24 = i2c_get_clientdata(client); in at24_probe_temp_sensor() local
580 ret = at24_read(at24, 2, &val, 1); in at24_probe_temp_sensor()
585 ret = at24_read(at24, 32, &val, 1); in at24_probe_temp_sensor()
603 struct at24_data *at24; in at24_probe() local
689 at24 = devm_kzalloc(dev, struct_size(at24, client_regmaps, num_addresses), in at24_probe()
691 if (!at24) in at24_probe()
694 mutex_init(&at24->lock); in at24_probe()
695 at24->byte_len = byte_len; in at24_probe()
696 at24->page_size = page_size; in at24_probe()
697 at24->flags = flags; in at24_probe()
698 at24->read_post = cdata->read_post; in at24_probe()
699 at24->bank_addr_shift = cdata->bank_addr_shift; in at24_probe()
700 at24->num_addresses = num_addresses; in at24_probe()
701 at24->offset_adj = at24_get_offset_adj(flags, byte_len); in at24_probe()
702 at24->client_regmaps[0] = regmap; in at24_probe()
704 at24->vcc_reg = devm_regulator_get(dev, "vcc"); in at24_probe()
705 if (IS_ERR(at24->vcc_reg)) in at24_probe()
706 return PTR_ERR(at24->vcc_reg); in at24_probe()
710 at24->write_max = min_t(unsigned int, in at24_probe()
712 if (!i2c_fn_i2c && at24->write_max > I2C_SMBUS_BLOCK_MAX) in at24_probe()
713 at24->write_max = I2C_SMBUS_BLOCK_MAX; in at24_probe()
718 err = at24_make_dummy_client(at24, i, client, &regmap_config); in at24_probe()
750 nvmem_config.priv = at24; in at24_probe()
755 i2c_set_clientdata(client, at24); in at24_probe()
759 err = regulator_enable(at24->vcc_reg); in at24_probe()
775 err = at24_read(at24, 0, &test_byte, 1); in at24_probe()
779 regulator_disable(at24->vcc_reg); in at24_probe()
784 at24->nvmem = devm_nvmem_register(dev, &nvmem_config); in at24_probe()
785 if (IS_ERR(at24->nvmem)) { in at24_probe()
788 regulator_disable(at24->vcc_reg); in at24_probe()
789 return dev_err_probe(dev, PTR_ERR(at24->nvmem), in at24_probe()
801 byte_len, client->name, at24->write_max); in at24_probe()
811 struct at24_data *at24 = i2c_get_clientdata(client); in at24_remove() local
816 regulator_disable(at24->vcc_reg); in at24_remove()
824 struct at24_data *at24 = i2c_get_clientdata(client); in at24_suspend() local
826 return regulator_disable(at24->vcc_reg); in at24_suspend()
832 struct at24_data *at24 = i2c_get_clientdata(client); in at24_resume() local
834 return regulator_enable(at24->vcc_reg); in at24_resume()