Lines Matching refs:at24
148 static struct i2c_client *at24_translate_offset(struct at24_data *at24, in at24_translate_offset() argument
153 if (at24->chip.flags & AT24_FLAG_ADDR16) { in at24_translate_offset()
161 return at24->client[i]; in at24_translate_offset()
164 static ssize_t at24_eeprom_read(struct at24_data *at24, char *buf, in at24_eeprom_read() argument
191 client = at24_translate_offset(at24, &offset); in at24_eeprom_read()
196 if (at24->use_smbus) { in at24_eeprom_read()
209 if (at24->chip.flags & AT24_FLAG_ADDR16) in at24_eeprom_read()
231 if (at24->use_smbus) { in at24_eeprom_read()
252 static ssize_t at24_read(struct at24_data *at24, in at24_read() argument
264 mutex_lock(&at24->lock); in at24_read()
269 status = at24_eeprom_read(at24, buf, off, count); in at24_read()
281 mutex_unlock(&at24->lock); in at24_read()
290 struct at24_data *at24; in at24_bin_read() local
292 at24 = dev_get_drvdata(container_of(kobj, struct device, kobj)); in at24_bin_read()
293 return at24_read(at24, buf, off, count); in at24_bin_read()
305 static ssize_t at24_eeprom_write(struct at24_data *at24, const char *buf, in at24_eeprom_write() argument
315 client = at24_translate_offset(at24, &offset); in at24_eeprom_write()
318 if (count > at24->write_max) in at24_eeprom_write()
319 count = at24->write_max; in at24_eeprom_write()
322 next_page = roundup(offset + 1, at24->chip.page_size); in at24_eeprom_write()
327 if (!at24->use_smbus) { in at24_eeprom_write()
334 msg.buf = at24->writebuf; in at24_eeprom_write()
335 if (at24->chip.flags & AT24_FLAG_ADDR16) in at24_eeprom_write()
351 if (at24->use_smbus_write) { in at24_eeprom_write()
352 switch (at24->use_smbus_write) { in at24_eeprom_write()
383 static ssize_t at24_write(struct at24_data *at24, const char *buf, loff_t off, in at24_write() argument
395 mutex_lock(&at24->lock); in at24_write()
400 status = at24_eeprom_write(at24, buf, off, count); in at24_write()
412 mutex_unlock(&at24->lock); in at24_write()
421 struct at24_data *at24; in at24_bin_write() local
423 at24 = dev_get_drvdata(container_of(kobj, struct device, kobj)); in at24_bin_write()
424 return at24_write(at24, buf, off, count); in at24_bin_write()
438 struct at24_data *at24 = container_of(macc, struct at24_data, macc); in at24_macc_read() local
440 return at24_read(at24, buf, offset, count); in at24_macc_read()
446 struct at24_data *at24 = container_of(macc, struct at24_data, macc); in at24_macc_write() local
448 return at24_write(at24, buf, offset, count); in at24_macc_write()
481 struct at24_data *at24; in at24_probe() local
565 at24 = devm_kzalloc(&client->dev, sizeof(struct at24_data) + in at24_probe()
567 if (!at24) in at24_probe()
570 mutex_init(&at24->lock); in at24_probe()
571 at24->use_smbus = use_smbus; in at24_probe()
572 at24->use_smbus_write = use_smbus_write; in at24_probe()
573 at24->chip = chip; in at24_probe()
574 at24->num_addresses = num_addresses; in at24_probe()
580 sysfs_bin_attr_init(&at24->bin); in at24_probe()
581 at24->bin.attr.name = "eeprom"; in at24_probe()
582 at24->bin.attr.mode = chip.flags & AT24_FLAG_IRUGO ? S_IRUGO : S_IRUSR; in at24_probe()
583 at24->bin.read = at24_bin_read; in at24_probe()
584 at24->bin.size = chip.byte_len; in at24_probe()
586 at24->macc.read = at24_macc_read; in at24_probe()
594 at24->macc.write = at24_macc_write; in at24_probe()
596 at24->bin.write = at24_bin_write; in at24_probe()
597 at24->bin.attr.mode |= S_IWUSR; in at24_probe()
603 at24->write_max = write_max; in at24_probe()
606 at24->writebuf = devm_kzalloc(&client->dev, in at24_probe()
608 if (!at24->writebuf) in at24_probe()
616 at24->client[0] = client; in at24_probe()
620 at24->client[i] = i2c_new_dummy(client->adapter, in at24_probe()
622 if (!at24->client[i]) { in at24_probe()
630 err = sysfs_create_bin_file(&client->dev.kobj, &at24->bin); in at24_probe()
634 i2c_set_clientdata(client, at24); in at24_probe()
637 at24->bin.size, client->name, in at24_probe()
638 writable ? "writable" : "read-only", at24->write_max); in at24_probe()
648 chip.setup(&at24->macc, chip.context); in at24_probe()
654 if (at24->client[i]) in at24_probe()
655 i2c_unregister_device(at24->client[i]); in at24_probe()
662 struct at24_data *at24; in at24_remove() local
665 at24 = i2c_get_clientdata(client); in at24_remove()
666 sysfs_remove_bin_file(&client->dev.kobj, &at24->bin); in at24_remove()
668 for (i = 1; i < at24->num_addresses; i++) in at24_remove()
669 i2c_unregister_device(at24->client[i]); in at24_remove()