From 237f9d1a51eaed260119346dfddc044395267154 Mon Sep 17 00:00:00 2001 From: Cyril Bur Date: Thu, 19 Mar 2015 18:18:20 +1100 Subject: libflash: don't use the low level interface if it doesn't exist During init libflash calls low level functions without checking. libflash states to backends that if they implement all the higher level functions the lower level functions are optional (from libflash-priv.h): If all functions of the high level interface are implemented then the low level one is optional. A controller can implement some of the high level one in which case the missing ones will be handled by libflash using the low level interface. Signed-off-by: Cyril Bur Signed-off-by: Stewart Smith --- libflash/libflash.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'libflash') diff --git a/libflash/libflash.c b/libflash/libflash.c index 5b8a0ac..b5eaff5 100644 --- a/libflash/libflash.c +++ b/libflash/libflash.c @@ -92,6 +92,10 @@ int fl_wren(struct spi_flash_ctrl *ct) int i, rc; uint8_t stat; + /* If lower level interface not implmented, just return */ + if (!ct->cmd_wr) + return 0; + /* Some flashes need it to be hammered */ for (i = 0; i < 1000; i++) { rc = ct->cmd_wr(ct, CMD_WREN, false, 0, NULL, 0); @@ -675,6 +679,11 @@ static int flash_set_4b(struct flash_chip *c, bool enable) /* Ignore the error & move on (could be wrprotect chip) */ } + /* Don't have low level interface, assume all is well */ + if (!ct->cmd_wr) + return 0; + + /* Ignore error in case chip is write protected */ return ct->cmd_wr(ct, enable ? CMD_EN4B : CMD_EX4B, false, 0, NULL, 0); @@ -758,7 +767,6 @@ static int flash_configure(struct flash_chip *c) return rc; } } - /* Set controller to 3b mode if mode switch is supported */ if (ct->set_4b) { FL_DBG("LIBFLASH: Disabling controller 4B mode...\n"); -- cgit v1.1