diff --git a/drivers/include/mtd_spi_nor.h b/drivers/include/mtd_spi_nor.h index ad9103610e..ad61670255 100644 --- a/drivers/include/mtd_spi_nor.h +++ b/drivers/include/mtd_spi_nor.h @@ -111,6 +111,8 @@ typedef struct { spi_t spi; /**< SPI bus the device is connected to */ spi_mode_t mode; /**< SPI mode */ gpio_t cs; /**< CS pin GPIO handle */ + gpio_t wp; /**< Write Protect pin GPIO handle */ + gpio_t hold; /**< HOLD pin GPIO handle */ uint8_t addr_width; /**< Number of bytes in addresses, usually 3 for small devices */ } mtd_spi_nor_params_t; diff --git a/drivers/mtd_spi_nor/mtd_spi_nor.c b/drivers/mtd_spi_nor/mtd_spi_nor.c index 2a9433299d..d29bb5d20a 100644 --- a/drivers/mtd_spi_nor/mtd_spi_nor.c +++ b/drivers/mtd_spi_nor/mtd_spi_nor.c @@ -359,6 +359,26 @@ static inline void wait_for_write_complete(const mtd_spi_nor_t *dev, uint32_t us DEBUG("\n"); } +static void _init_pins(mtd_spi_nor_t *dev) +{ + DEBUG("mtd_spi_nor_init: init pins\n"); + + /* CS */ + spi_init_cs(_get_spi(dev), dev->params->cs); + + /* Write Protect - not used by the driver */ + if (gpio_is_valid(dev->params->wp)) { + gpio_init(dev->params->wp, GPIO_OUT); + gpio_set(dev->params->wp); + } + + /* Hold - not used by the driver */ + if (gpio_is_valid(dev->params->hold)) { + gpio_init(dev->params->hold, GPIO_OUT); + gpio_set(dev->params->hold); + } +} + static int mtd_spi_nor_power(mtd_dev_t *mtd, enum mtd_power_state power) { mtd_spi_nor_t *dev = (mtd_spi_nor_t *)mtd; @@ -408,9 +428,8 @@ static int mtd_spi_nor_init(mtd_dev_t *mtd) return -EINVAL; } - /* CS */ - DEBUG("mtd_spi_nor_init: CS init\n"); - spi_init_cs(_get_spi(dev), dev->params->cs); + /* CS, WP, Hold */ + _init_pins(dev); /* power up the MTD device*/ DEBUG("mtd_spi_nor_init: power up MTD device");