From 1de10bdb9b693a83b06d9ecf56ddd70962351c78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20J=C3=A4ger?= Date: Thu, 8 Oct 2020 08:37:53 +0200 Subject: [PATCH] drivers: dac: stm32: add support for pinmux MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add support for DT based pinmux configurations. Signed-off-by: Martin Jäger --- drivers/dac/dac_stm32.c | 20 +++++++++++++++++++- dts/bindings/dac/st,stm32-dac.yaml | 9 +++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/drivers/dac/dac_stm32.c b/drivers/dac/dac_stm32.c index fb128191e85..d1d3122ae19 100644 --- a/drivers/dac/dac_stm32.c +++ b/drivers/dac/dac_stm32.c @@ -19,6 +19,7 @@ LOG_MODULE_REGISTER(dac_stm32); #include +#include /* some low-end MCUs have DAC with only one channel */ #ifdef LL_DAC_CHANNEL_2 @@ -40,8 +41,14 @@ static const uint32_t table_channels[] = { /* Read-only driver configuration */ struct dac_stm32_cfg { + /* DAC instance. */ DAC_TypeDef *base; + /* Clock configuration. */ struct stm32_pclken pclken; + /* pinctrl configurations. */ + const struct soc_gpio_pinctrl *pinctrl; + /* Number of pinctrl configurations. */ + size_t pinctrl_len; }; /* Runtime driver data */ @@ -120,6 +127,11 @@ static int dac_stm32_init(const struct device *dev) return -EIO; } + /* configure pinmux */ + if (cfg->pinctrl_len != 0U) { + stm32_dt_pinctrl_configure(cfg->pinctrl, cfg->pinctrl_len); + } + return 0; } @@ -131,13 +143,19 @@ static const struct dac_driver_api api_stm32_driver_api = { #define STM32_DAC_INIT(index) \ \ +static const struct soc_gpio_pinctrl dac_pins_##index[] = \ + ST_STM32_DT_INST_PINCTRL(index, 0); \ + \ static const struct dac_stm32_cfg dac_stm32_cfg_##index = { \ - .base = (DAC_TypeDef *)DT_INST_REG_ADDR(index), \ + .base = (DAC_TypeDef *)DT_INST_REG_ADDR(index), \ .pclken = { \ .enr = DT_INST_CLOCKS_CELL(index, bits), \ .bus = DT_INST_CLOCKS_CELL(index, bus), \ }, \ + .pinctrl = dac_pins_##index, \ + .pinctrl_len = ARRAY_SIZE(dac_pins_##index), \ }; \ + \ static struct dac_stm32_data dac_stm32_data_##index = { \ .channel_count = STM32_CHANNEL_COUNT \ }; \ diff --git a/dts/bindings/dac/st,stm32-dac.yaml b/dts/bindings/dac/st,stm32-dac.yaml index 050b0f0428c..3b79fdada15 100644 --- a/dts/bindings/dac/st,stm32-dac.yaml +++ b/dts/bindings/dac/st,stm32-dac.yaml @@ -14,6 +14,15 @@ properties: clocks: required: true + pinctrl-0: + type: phandles + required: false + description: | + GPIO pin configuration for DAC output. The phandles are + expected to reference pinctrl nodes, e.g. + + pinctrl-0 = <&dac_out1_pa4 &dac_out2_pa5>; + "#io-channel-cells": const: 1