Lines Matching refs:at25

3  * at25.c -- support most SPI EEPROMs, such as Atmel AT25 models
65 struct at25_data *at25 = priv;
74 if (unlikely(offset >= at25->chip.byte_len))
76 if ((offset + count) > at25->chip.byte_len)
77 count = at25->chip.byte_len - offset;
84 if (at25->chip.flags & EE_INSTR_BIT3_IS_ADDR)
85 if (offset >= (1U << (at25->addrlen * 8)))
90 switch (at25->addrlen) {
106 t[0].len = at25->addrlen + 1;
113 mutex_lock(&at25->lock);
121 status = spi_sync(at25->spi, &m);
122 dev_dbg(&at25->spi->dev, "read %zu bytes at %d --> %zd\n",
125 mutex_unlock(&at25->lock);
131 struct at25_data *at25 = priv;
137 if (unlikely(off >= at25->chip.byte_len))
139 if ((off + count) > at25->chip.byte_len)
140 count = at25->chip.byte_len - off;
145 buf_size = at25->chip.page_size;
148 bounce = kmalloc(buf_size + at25->addrlen + 1, GFP_KERNEL);
155 mutex_lock(&at25->lock);
165 status = spi_write(at25->spi, cp, 1);
167 dev_dbg(&at25->spi->dev, "WREN --> %d\n", status);
172 if (at25->chip.flags & EE_INSTR_BIT3_IS_ADDR)
173 if (offset >= (1U << (at25->addrlen * 8)))
178 switch (at25->addrlen) {
195 status = spi_write(at25->spi, bounce,
196 segment + at25->addrlen + 1);
197 dev_dbg(&at25->spi->dev, "write %u bytes at %u --> %d\n",
211 sr = spi_w8r8(at25->spi, AT25_RDSR);
213 dev_dbg(&at25->spi->dev,
224 dev_err(&at25->spi->dev,
239 mutex_unlock(&at25->lock);
252 strncpy(chip->name, "at25", sizeof(chip->name));
255 device_property_read_u32(dev, "at25,byte-len", &val) == 0) {
263 device_property_read_u32(dev, "at25,page-size", &val) == 0) {
270 if (device_property_read_u32(dev, "at25,addr-mode", &val) == 0) {
305 struct at25_data *at25 = NULL;
341 at25 = devm_kzalloc(&spi->dev, sizeof(struct at25_data), GFP_KERNEL);
342 if (!at25)
345 mutex_init(&at25->lock);
346 at25->chip = chip;
347 at25->spi = spi;
348 spi_set_drvdata(spi, at25);
349 at25->addrlen = addrlen;
351 at25->nvmem_config.type = NVMEM_TYPE_EEPROM;
352 at25->nvmem_config.name = dev_name(&spi->dev);
353 at25->nvmem_config.dev = &spi->dev;
354 at25->nvmem_config.read_only = chip.flags & EE_READONLY;
355 at25->nvmem_config.root_only = true;
356 at25->nvmem_config.owner = THIS_MODULE;
357 at25->nvmem_config.compat = true;
358 at25->nvmem_config.base_dev = &spi->dev;
359 at25->nvmem_config.reg_read = at25_ee_read;
360 at25->nvmem_config.reg_write = at25_ee_write;
361 at25->nvmem_config.priv = at25;
362 at25->nvmem_config.stride = 1;
363 at25->nvmem_config.word_size = 1;
364 at25->nvmem_config.size = chip.byte_len;
366 at25->nvmem = devm_nvmem_register(&spi->dev, &at25->nvmem_config);
367 if (IS_ERR(at25->nvmem))
368 return PTR_ERR(at25->nvmem);
373 at25->chip.name,
375 at25->chip.page_size);
382 { .compatible = "atmel,at25", },
389 .name = "at25",
400 MODULE_ALIAS("spi:at25");