From b9a4e9b3b795027476b4f41d6affc36adc2c6286 Mon Sep 17 00:00:00 2001 From: Erwan Gouriou Date: Thu, 22 Oct 2020 17:47:56 +0200 Subject: [PATCH] subsys/disk: stm32 sdmmc: Add support for device tree pinctrl Add required code to support pinctrl setup base don device tree. Signed-off-by: Erwan Gouriou --- subsys/disk/disk_access_stm32_sdmmc.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/subsys/disk/disk_access_stm32_sdmmc.c b/subsys/disk/disk_access_stm32_sdmmc.c index 70085d56079..ceb385992b1 100644 --- a/subsys/disk/disk_access_stm32_sdmmc.c +++ b/subsys/disk/disk_access_stm32_sdmmc.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -34,6 +35,10 @@ struct stm32_sdmmc_priv { int flags; } pe; struct stm32_pclken pclken; + struct { + const struct soc_gpio_pinctrl *list; + size_t len; + } pinctrl; }; static int stm32_sdmmc_clock_enable(struct stm32_sdmmc_priv *priv) @@ -357,6 +362,14 @@ static int disk_stm32_sdmmc_init(const struct device *dev) k_work_init(&priv->work, stm32_sdmmc_cd_handler); + /* Configure dt provided device signals when available */ + err = stm32_dt_pinctrl_configure(priv->pinctrl.list, + priv->pinctrl.len, + (uint32_t)priv->hsd.Instance); + if (err < 0) { + return err; + } + err = stm32_sdmmc_card_detect_init(priv); if (err) { return err; @@ -388,6 +401,10 @@ err_card_detect: } #if DT_NODE_HAS_STATUS(DT_DRV_INST(0), okay) + +static const struct soc_gpio_pinctrl sdmmc_pins_1[] = + ST_STM32_DT_INST_PINCTRL(0, 0); + static struct stm32_sdmmc_priv stm32_sdmmc_priv_1 = { .hsd = { .Instance = (SDMMC_TypeDef *)DT_INST_REG_ADDR(0), @@ -410,6 +427,10 @@ static struct stm32_sdmmc_priv stm32_sdmmc_priv_1 = { .bus = DT_INST_CLOCKS_CELL(0, bus), .enr = DT_INST_CLOCKS_CELL(0, bits), }, + .pinctrl = { + .list = sdmmc_pins_1, + .len = ARRAY_SIZE(sdmmc_pins_1) + } }; DEVICE_AND_API_INIT(stm32_sdmmc_dev1,