Lines Matching refs:at25

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