Lines Matching refs:at25

80 	struct at25_data *at25 = priv;  in at25_ee_read()  local
82 size_t max_chunk = spi_max_transfer_size(at25->spi); in at25_ee_read()
92 if (unlikely(offset >= at25->chip.byte_len)) in at25_ee_read()
94 if ((offset + count) > at25->chip.byte_len) in at25_ee_read()
95 count = at25->chip.byte_len - offset; in at25_ee_read()
101 cp = at25->command; in at25_ee_read()
104 if (at25->chip.flags & EE_INSTR_BIT3_IS_ADDR) in at25_ee_read()
105 if (msg_offset >= BIT(at25->addrlen * 8)) in at25_ee_read()
108 mutex_lock(&at25->lock); in at25_ee_read()
113 switch (at25->addrlen) { in at25_ee_read()
128 t[0].tx_buf = at25->command; in at25_ee_read()
129 t[0].len = at25->addrlen + 1; in at25_ee_read()
136 status = spi_sync(at25->spi, &m); in at25_ee_read()
138 mutex_unlock(&at25->lock); in at25_ee_read()
148 dev_dbg(&at25->spi->dev, "read %zu bytes at %d\n", in at25_ee_read()
154 static int fm25_aux_read(struct at25_data *at25, u8 *buf, uint8_t command, in fm25_aux_read() argument
164 t[0].tx_buf = at25->command; in fm25_aux_read()
172 mutex_lock(&at25->lock); in fm25_aux_read()
174 at25->command[0] = command; in fm25_aux_read()
176 status = spi_sync(at25->spi, &m); in fm25_aux_read()
177 dev_dbg(&at25->spi->dev, "read %d aux bytes --> %d\n", len, status); in fm25_aux_read()
179 mutex_unlock(&at25->lock); in fm25_aux_read()
185 struct at25_data *at25; in sernum_show() local
187 at25 = dev_get_drvdata(dev); in sernum_show()
188 return sysfs_emit(buf, "%*ph\n", (int)sizeof(at25->sernum), at25->sernum); in sernum_show()
200 struct at25_data *at25 = priv; in at25_ee_write() local
201 size_t maxsz = spi_max_transfer_size(at25->spi); in at25_ee_write()
207 if (unlikely(off >= at25->chip.byte_len)) in at25_ee_write()
209 if ((off + count) > at25->chip.byte_len) in at25_ee_write()
210 count = at25->chip.byte_len - off; in at25_ee_write()
215 buf_size = at25->chip.page_size; in at25_ee_write()
218 bounce = kmalloc(buf_size + at25->addrlen + 1, GFP_KERNEL); in at25_ee_write()
226 mutex_lock(&at25->lock); in at25_ee_write()
236 status = spi_write(at25->spi, cp, 1); in at25_ee_write()
238 dev_dbg(&at25->spi->dev, "WREN --> %d\n", status); in at25_ee_write()
243 if (at25->chip.flags & EE_INSTR_BIT3_IS_ADDR) in at25_ee_write()
244 if (offset >= BIT(at25->addrlen * 8)) in at25_ee_write()
249 switch (at25->addrlen) { in at25_ee_write()
268 status = spi_write(at25->spi, bounce, in at25_ee_write()
269 segment + at25->addrlen + 1); in at25_ee_write()
270 dev_dbg(&at25->spi->dev, "write %u bytes at %u --> %d\n", in at25_ee_write()
285 sr = spi_w8r8(at25->spi, AT25_RDSR); in at25_ee_write()
287 dev_dbg(&at25->spi->dev, in at25_ee_write()
298 dev_err(&at25->spi->dev, in at25_ee_write()
313 mutex_unlock(&at25->lock); in at25_ee_write()
382 struct at25_data *at25 = container_of(chip, struct at25_data, chip); in at25_fram_to_chip() local
390 fm25_aux_read(at25, id, FM25_RDID, FM25_ID_LEN); in at25_fram_to_chip()
408 fm25_aux_read(at25, sernum, FM25_RDSN, FM25_SN_LEN); in at25_fram_to_chip()
411 at25->sernum[i] = sernum[FM25_SN_LEN - 1 - i]; in at25_fram_to_chip()
434 struct at25_data *at25 = NULL; in at25_probe() local
451 at25 = devm_kzalloc(&spi->dev, sizeof(*at25), GFP_KERNEL); in at25_probe()
452 if (!at25) in at25_probe()
455 mutex_init(&at25->lock); in at25_probe()
456 at25->spi = spi; in at25_probe()
457 spi_set_drvdata(spi, at25); in at25_probe()
464 at25->chip = *pdata; in at25_probe()
467 err = at25_fram_to_chip(&spi->dev, &at25->chip); in at25_probe()
469 err = at25_fw_to_chip(&spi->dev, &at25->chip); in at25_probe()
475 if (at25->chip.flags & EE_ADDR1) in at25_probe()
476 at25->addrlen = 1; in at25_probe()
477 else if (at25->chip.flags & EE_ADDR2) in at25_probe()
478 at25->addrlen = 2; in at25_probe()
479 else if (at25->chip.flags & EE_ADDR3) in at25_probe()
480 at25->addrlen = 3; in at25_probe()
486 at25->nvmem_config.type = is_fram ? NVMEM_TYPE_FRAM : NVMEM_TYPE_EEPROM; in at25_probe()
487 at25->nvmem_config.name = dev_name(&spi->dev); in at25_probe()
488 at25->nvmem_config.dev = &spi->dev; in at25_probe()
489 at25->nvmem_config.read_only = at25->chip.flags & EE_READONLY; in at25_probe()
490 at25->nvmem_config.root_only = true; in at25_probe()
491 at25->nvmem_config.owner = THIS_MODULE; in at25_probe()
492 at25->nvmem_config.compat = true; in at25_probe()
493 at25->nvmem_config.base_dev = &spi->dev; in at25_probe()
494 at25->nvmem_config.reg_read = at25_ee_read; in at25_probe()
495 at25->nvmem_config.reg_write = at25_ee_write; in at25_probe()
496 at25->nvmem_config.priv = at25; in at25_probe()
497 at25->nvmem_config.stride = 1; in at25_probe()
498 at25->nvmem_config.word_size = 1; in at25_probe()
499 at25->nvmem_config.size = at25->chip.byte_len; in at25_probe()
501 at25->nvmem = devm_nvmem_register(&spi->dev, &at25->nvmem_config); in at25_probe()
502 if (IS_ERR(at25->nvmem)) in at25_probe()
503 return PTR_ERR(at25->nvmem); in at25_probe()
506 (at25->chip.byte_len < 1024) ? in at25_probe()
507 at25->chip.byte_len : (at25->chip.byte_len / 1024), in at25_probe()
508 (at25->chip.byte_len < 1024) ? "Byte" : "KByte", in at25_probe()
509 at25->chip.name, is_fram ? "fram" : "eeprom", in at25_probe()
510 (at25->chip.flags & EE_READONLY) ? " (readonly)" : "", in at25_probe()
511 at25->chip.page_size); in at25_probe()