summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Jander <david@protonic.nl>2024-12-03 11:38:35 +0100
committerMiquel Raynal <miquel.raynal@bootlin.com>2024-12-05 11:28:29 +0100
commit5dbc889d41b175aa7b9c7c49a48c11a047f6074d (patch)
tree954e6a8c097aa492170f3bcae727ba21ffab56f3
parentb3c782868ecebd0c1661a6aa2bdc84cd3cbb1ef3 (diff)
mtd: mchp48l640: make WEL behaviour configurable
The 48L640 resets the WEL bit (the Write Enable Latch bit in the status register) to zero on the completion of write operations. In preparation to support chips behaving differently, introduce .auto_disable_wel capability, and, if it's missing, explicitly reset the WEL bit after writes. Signed-off-by: David Jander <david@protonic.nl> Reviewed-by: Heiko Schocher <hs@denx.de> Signed-off-by: Jonas Rebmann <jre@pengutronix.de> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
-rw-r--r--drivers/mtd/devices/mchp48l640.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/mtd/devices/mchp48l640.c b/drivers/mtd/devices/mchp48l640.c
index f576e6a890e8..4cdd24aaed41 100644
--- a/drivers/mtd/devices/mchp48l640.c
+++ b/drivers/mtd/devices/mchp48l640.c
@@ -27,6 +27,7 @@
struct mchp48_caps {
unsigned int size;
unsigned int page_size;
+ bool auto_disable_wel;
};
struct mchp48l640_flash {
@@ -194,9 +195,15 @@ static int mchp48l640_write_page(struct mtd_info *mtd, loff_t to, size_t len,
else
goto fail;
- ret = mchp48l640_waitforbit(flash, MCHP48L640_STATUS_WEL, false);
- if (ret)
- goto fail;
+ if (flash->caps->auto_disable_wel) {
+ ret = mchp48l640_waitforbit(flash, MCHP48L640_STATUS_WEL, false);
+ if (ret)
+ goto fail;
+ } else {
+ ret = mchp48l640_write_prepare(flash, false);
+ if (ret)
+ goto fail;
+ }
kfree(cmd);
return 0;
@@ -293,6 +300,7 @@ static int mchp48l640_read(struct mtd_info *mtd, loff_t from, size_t len,
static const struct mchp48_caps mchp48l640_caps = {
.size = SZ_8K,
.page_size = 32,
+ .auto_disable_wel = true,
};
static int mchp48l640_probe(struct spi_device *spi)