Lines Matching defs:flash
23 #include <linux/spi/flash.h>
60 static int mchp48l640_mkcmd(struct mchp48l640_flash *flash, u8 cmd, loff_t addr, char *buf)
69 static int mchp48l640_read_status(struct mchp48l640_flash *flash, int *status)
76 mutex_lock(&flash->lock);
77 ret = spi_write_then_read(flash->spi, &cmd[0], 1, &cmd[1], 1);
78 mutex_unlock(&flash->lock);
81 dev_dbg(&flash->spi->dev, "read status ret: %d status: %x", ret, *status);
86 static int mchp48l640_waitforbit(struct mchp48l640_flash *flash, int bit, bool set)
93 ret = mchp48l640_read_status(flash, &status);
94 dev_dbg(&flash->spi->dev, "read status ret: %d bit: %x %sset status: %x",
110 dev_err(&flash->spi->dev, "Timeout waiting for bit %x %s set in status register.",
115 static int mchp48l640_write_prepare(struct mchp48l640_flash *flash, bool enable)
125 mutex_lock(&flash->lock);
126 ret = spi_write(flash->spi, cmd, 1);
127 mutex_unlock(&flash->lock);
130 dev_err(&flash->spi->dev, "write %sable failed ret: %d",
133 dev_dbg(&flash->spi->dev, "write %sable success ret: %d",
136 return mchp48l640_waitforbit(flash, MCHP48L640_STATUS_WEL, true);
141 static int mchp48l640_set_mode(struct mchp48l640_flash *flash)
146 ret = mchp48l640_write_prepare(flash, true);
153 mutex_lock(&flash->lock);
154 ret = spi_write(flash->spi, cmd, 2);
155 mutex_unlock(&flash->lock);
157 dev_err(&flash->spi->dev, "Could not set continuous mode ret: %d", ret);
159 return mchp48l640_waitforbit(flash, MCHP48L640_STATUS_PRO, true);
162 static int mchp48l640_wait_rdy(struct mchp48l640_flash *flash)
164 return mchp48l640_waitforbit(flash, MCHP48L640_STATUS_RDY, false);
170 struct mchp48l640_flash *flash = to_mchp48l640_flash(mtd);
179 ret = mchp48l640_wait_rdy(flash);
183 ret = mchp48l640_write_prepare(flash, true);
187 mutex_lock(&flash->lock);
188 cmdlen = mchp48l640_mkcmd(flash, MCHP48L640_CMD_WRITE, to, cmd);
190 ret = spi_write(flash->spi, cmd, cmdlen + len);
191 mutex_unlock(&flash->lock);
197 ret = mchp48l640_waitforbit(flash, MCHP48L640_STATUS_WEL, false);
205 dev_err(&flash->spi->dev, "write fail with: %d", ret);
212 struct mchp48l640_flash *flash = to_mchp48l640_flash(mtd);
217 size_t page_sz = flash->caps->page_size;
238 struct mchp48l640_flash *flash = to_mchp48l640_flash(mtd);
247 ret = mchp48l640_wait_rdy(flash);
251 mutex_lock(&flash->lock);
252 cmdlen = mchp48l640_mkcmd(flash, MCHP48L640_CMD_READ, from, cmd);
253 ret = spi_write_then_read(flash->spi, cmd, cmdlen, buf, len);
254 mutex_unlock(&flash->lock);
263 dev_err(&flash->spi->dev, "read fail with: %d", ret);
270 struct mchp48l640_flash *flash = to_mchp48l640_flash(mtd);
275 size_t page_sz = flash->caps->page_size;
300 struct mchp48l640_flash *flash;
305 flash = devm_kzalloc(&spi->dev, sizeof(*flash), GFP_KERNEL);
306 if (!flash)
309 flash->spi = spi;
310 mutex_init(&flash->lock);
311 spi_set_drvdata(spi, flash);
313 err = mchp48l640_read_status(flash, &status);
317 err = mchp48l640_set_mode(flash);
323 flash->caps = of_device_get_match_data(&spi->dev);
324 if (!flash->caps)
325 flash->caps = &mchp48l640_caps;
327 mtd_set_of_node(&flash->mtd, spi->dev.of_node);
328 flash->mtd.dev.parent = &spi->dev;
329 flash->mtd.type = MTD_RAM;
330 flash->mtd.flags = MTD_CAP_RAM;
331 flash->mtd.writesize = flash->caps->page_size;
332 flash->mtd.size = flash->caps->size;
333 flash->mtd._read = mchp48l640_read;
334 flash->mtd._write = mchp48l640_write;
336 err = mtd_device_register(&flash->mtd, data ? data->parts : NULL,
346 struct mchp48l640_flash *flash = spi_get_drvdata(spi);
348 WARN_ON(mtd_device_unregister(&flash->mtd));