diff --git a/include/flash.h b/include/flash.h index 0294f51..9759ae4 100644 --- a/include/flash.h +++ b/include/flash.h @@ -6,6 +6,7 @@ struct flash_dev; struct flash_ops { + void (* release)(struct flash_dev *dev); size_t (* get_size)(struct flash_dev *dev); size_t (* get_capacity)(struct flash_dev *dev); int (* read)(struct flash_dev *dev, uint32_t addr, void *data, size_t len); diff --git a/source/core/flash.c b/source/core/flash.c index beb7fb4..4ae38a2 100644 --- a/source/core/flash.c +++ b/source/core/flash.c @@ -19,6 +19,14 @@ int default_flash_is_erased(struct flash_dev *dev, uint32_t addr) return 1; } +void flash_release(struct flash_dev *dev) +{ + if (!dev) + return; + + dev->ops->release(dev); +} + size_t flash_get_size(struct flash_dev *dev) { if (!dev) diff --git a/source/drivers/sandbox_flash.c b/source/drivers/sandbox_flash.c index edacdc4..523d24f 100644 --- a/source/drivers/sandbox_flash.c +++ b/source/drivers/sandbox_flash.c @@ -26,8 +26,10 @@ static int stdio_flash_write(struct flash_dev *dev, uint32_t addr, static int stdio_flash_copy(struct flash_dev *dev, uint32_t dst, uint32_t src, size_t len); static int stdio_flash_erase(struct flash_dev *dev, uint32_t addr); +static void stdio_flash_release(struct flash_dev *dev); static struct flash_ops stdio_flash_ops = { + .release = stdio_flash_release, .get_size = stdio_flash_get_size, .read = stdio_flash_read, .write = stdio_flash_write, @@ -150,7 +152,7 @@ err_free_dev: return NULL; } -void flash_release(struct flash_dev *dev) +static void stdio_flash_release(struct flash_dev *dev) { struct stdio_flash_priv *priv;