• Home
  • Raw
  • Download

Lines Matching full:at25

2  * at25.c -- support most SPI EEPROMs, such as Atmel AT25 models
26 * mean that some AT25 products are EEPROMs, and others are FLASH.
69 struct at25_data *at25 = priv; in at25_ee_read() local
78 if (unlikely(offset >= at25->chip.byte_len)) in at25_ee_read()
80 if ((offset + count) > at25->chip.byte_len) in at25_ee_read()
81 count = at25->chip.byte_len - offset; in at25_ee_read()
88 if (at25->chip.flags & EE_INSTR_BIT3_IS_ADDR) in at25_ee_read()
89 if (offset >= (1U << (at25->addrlen * 8))) in at25_ee_read()
94 switch (at25->addrlen) { in at25_ee_read()
110 t[0].len = at25->addrlen + 1; in at25_ee_read()
117 mutex_lock(&at25->lock); in at25_ee_read()
125 status = spi_sync(at25->spi, &m); in at25_ee_read()
126 dev_dbg(&at25->spi->dev, "read %zu bytes at %d --> %zd\n", in at25_ee_read()
129 mutex_unlock(&at25->lock); in at25_ee_read()
135 struct at25_data *at25 = priv; in at25_ee_write() local
141 if (unlikely(off >= at25->chip.byte_len)) in at25_ee_write()
143 if ((off + count) > at25->chip.byte_len) in at25_ee_write()
144 count = at25->chip.byte_len - off; in at25_ee_write()
149 buf_size = at25->chip.page_size; in at25_ee_write()
152 bounce = kmalloc(buf_size + at25->addrlen + 1, GFP_KERNEL); in at25_ee_write()
159 mutex_lock(&at25->lock); in at25_ee_write()
169 status = spi_write(at25->spi, cp, 1); in at25_ee_write()
171 dev_dbg(&at25->spi->dev, "WREN --> %d\n", status); in at25_ee_write()
176 if (at25->chip.flags & EE_INSTR_BIT3_IS_ADDR) in at25_ee_write()
177 if (offset >= (1U << (at25->addrlen * 8))) in at25_ee_write()
182 switch (at25->addrlen) { in at25_ee_write()
199 status = spi_write(at25->spi, bounce, in at25_ee_write()
200 segment + at25->addrlen + 1); in at25_ee_write()
201 dev_dbg(&at25->spi->dev, "write %u bytes at %u --> %d\n", in at25_ee_write()
215 sr = spi_w8r8(at25->spi, AT25_RDSR); in at25_ee_write()
217 dev_dbg(&at25->spi->dev, in at25_ee_write()
228 dev_err(&at25->spi->dev, in at25_ee_write()
243 mutex_unlock(&at25->lock); in at25_ee_write()
256 strncpy(chip->name, "at25", sizeof(chip->name)); in at25_fw_to_chip()
259 device_property_read_u32(dev, "at25,byte-len", &val) == 0) { in at25_fw_to_chip()
267 device_property_read_u32(dev, "at25,page-size", &val) == 0) { in at25_fw_to_chip()
274 if (device_property_read_u32(dev, "at25,addr-mode", &val) == 0) { in at25_fw_to_chip()
309 struct at25_data *at25 = NULL; in at25_probe() local
345 at25 = devm_kzalloc(&spi->dev, sizeof(struct at25_data), GFP_KERNEL); in at25_probe()
346 if (!at25) in at25_probe()
349 mutex_init(&at25->lock); in at25_probe()
350 at25->chip = chip; in at25_probe()
351 at25->spi = spi; in at25_probe()
352 spi_set_drvdata(spi, at25); in at25_probe()
353 at25->addrlen = addrlen; in at25_probe()
355 at25->nvmem_config.name = dev_name(&spi->dev); in at25_probe()
356 at25->nvmem_config.dev = &spi->dev; in at25_probe()
357 at25->nvmem_config.read_only = chip.flags & EE_READONLY; in at25_probe()
358 at25->nvmem_config.root_only = true; in at25_probe()
359 at25->nvmem_config.owner = THIS_MODULE; in at25_probe()
360 at25->nvmem_config.compat = true; in at25_probe()
361 at25->nvmem_config.base_dev = &spi->dev; in at25_probe()
362 at25->nvmem_config.reg_read = at25_ee_read; in at25_probe()
363 at25->nvmem_config.reg_write = at25_ee_write; in at25_probe()
364 at25->nvmem_config.priv = at25; in at25_probe()
365 at25->nvmem_config.stride = 1; in at25_probe()
366 at25->nvmem_config.word_size = 1; in at25_probe()
367 at25->nvmem_config.size = chip.byte_len; in at25_probe()
369 at25->nvmem = nvmem_register(&at25->nvmem_config); in at25_probe()
370 if (IS_ERR(at25->nvmem)) in at25_probe()
371 return PTR_ERR(at25->nvmem); in at25_probe()
376 at25->chip.name, in at25_probe()
378 at25->chip.page_size); in at25_probe()
384 struct at25_data *at25; in at25_remove() local
386 at25 = spi_get_drvdata(spi); in at25_remove()
387 nvmem_unregister(at25->nvmem); in at25_remove()
395 { .compatible = "atmel,at25", },
402 .name = "at25",
414 MODULE_ALIAS("spi:at25");