Lines Matching defs:dfsdm

23 #include "stm32-dfsdm.h"
94 struct stm32_dfsdm dfsdm; /* common data exported for all instances */
103 static inline struct dfsdm_priv *to_stm32_dfsdm_priv(struct stm32_dfsdm *dfsdm)
105 return container_of(dfsdm, struct dfsdm_priv, dfsdm);
108 static int stm32_dfsdm_clk_prepare_enable(struct stm32_dfsdm *dfsdm)
110 struct dfsdm_priv *priv = to_stm32_dfsdm_priv(dfsdm);
124 static void stm32_dfsdm_clk_disable_unprepare(struct stm32_dfsdm *dfsdm)
126 struct dfsdm_priv *priv = to_stm32_dfsdm_priv(dfsdm);
133 * stm32_dfsdm_start_dfsdm - start global dfsdm interface.
136 * @dfsdm: Handle used to retrieve dfsdm context.
138 int stm32_dfsdm_start_dfsdm(struct stm32_dfsdm *dfsdm)
140 struct dfsdm_priv *priv = to_stm32_dfsdm_priv(dfsdm);
150 /* select clock source, e.g. 0 for "dfsdm" or 1 for "audio" */
152 ret = regmap_update_bits(dfsdm->regmap, DFSDM_CHCFGR1(0),
159 ret = regmap_update_bits(dfsdm->regmap, DFSDM_CHCFGR1(0),
166 ret = regmap_update_bits(dfsdm->regmap, DFSDM_CHCFGR1(0),
191 * @dfsdm: Handle used to retrieve dfsdm context.
193 int stm32_dfsdm_stop_dfsdm(struct stm32_dfsdm *dfsdm)
195 struct dfsdm_priv *priv = to_stm32_dfsdm_priv(dfsdm);
200 ret = regmap_update_bits(dfsdm->regmap, DFSDM_CHCFGR1(0),
207 ret = regmap_update_bits(dfsdm->regmap, DFSDM_CHCFGR1(0),
234 priv->dfsdm.base = devm_platform_get_and_ioremap_resource(pdev, 0,
236 if (IS_ERR(priv->dfsdm.base))
237 return PTR_ERR(priv->dfsdm.base);
239 priv->dfsdm.phys_base = res->start;
242 * "dfsdm" clock is mandatory for DFSDM peripheral clocking.
243 * "dfsdm" or "audio" clocks can be used as source clock for
247 priv->clk = devm_clk_get(&pdev->dev, "dfsdm");
282 priv->dfsdm.spi_master_freq = clk_freq / (priv->spi_clk_out_div + 1);
295 .compatible = "st,stm32h7-dfsdm",
299 .compatible = "st,stm32mp1-dfsdm",
312 struct stm32_dfsdm *dfsdm = &priv->dfsdm;
318 dfsdm->num_fls = dev_data->num_filters;
319 dfsdm->num_chs = dev_data->num_channels;
323 ret = regmap_read(dfsdm->regmap, DFSDM_IPIDR, &id);
336 /* Count only child nodes with dfsdm compatible */
337 if (strstr(compat, "dfsdm"))
341 ret = regmap_read(dfsdm->regmap, DFSDM_HWCFGR, &val);
345 dfsdm->num_fls = FIELD_GET(DFSDM_HWCFGR_NBF_MASK, val);
346 dfsdm->num_chs = FIELD_GET(DFSDM_HWCFGR_NBT_MASK, val);
348 if (count > dfsdm->num_fls) {
353 ret = regmap_read(dfsdm->regmap, DFSDM_VERR, &val);
360 dfsdm->num_chs, dfsdm->num_fls);
369 struct stm32_dfsdm *dfsdm;
380 dfsdm = &priv->dfsdm;
386 dfsdm->regmap = devm_regmap_init_mmio_clk(&pdev->dev, "dfsdm",
387 dfsdm->base,
389 if (IS_ERR(dfsdm->regmap)) {
390 ret = PTR_ERR(dfsdm->regmap);
400 dfsdm->fl_list = devm_kcalloc(&pdev->dev, dfsdm->num_fls,
401 sizeof(*dfsdm->fl_list), GFP_KERNEL);
402 if (!dfsdm->fl_list)
405 dfsdm->ch_list = devm_kcalloc(&pdev->dev, dfsdm->num_chs,
406 sizeof(*dfsdm->ch_list), GFP_KERNEL);
407 if (!dfsdm->ch_list)
410 platform_set_drvdata(pdev, dfsdm);
412 ret = stm32_dfsdm_clk_prepare_enable(dfsdm);
434 stm32_dfsdm_clk_disable_unprepare(dfsdm);
441 struct stm32_dfsdm *dfsdm = platform_get_drvdata(pdev);
448 stm32_dfsdm_clk_disable_unprepare(dfsdm);
453 struct stm32_dfsdm *dfsdm = dev_get_drvdata(dev);
454 struct dfsdm_priv *priv = to_stm32_dfsdm_priv(dfsdm);
469 struct stm32_dfsdm *dfsdm = dev_get_drvdata(dev);
470 struct dfsdm_priv *priv = to_stm32_dfsdm_priv(dfsdm);
486 struct stm32_dfsdm *dfsdm = dev_get_drvdata(dev);
488 stm32_dfsdm_clk_disable_unprepare(dfsdm);
495 struct stm32_dfsdm *dfsdm = dev_get_drvdata(dev);
497 return stm32_dfsdm_clk_prepare_enable(dfsdm);
511 .name = "stm32-dfsdm",
520 MODULE_DESCRIPTION("STMicroelectronics STM32 dfsdm driver");