dmic 323 drivers/pinctrl/nomadik/pinctrl-ab8500.c AB8500_FUNC_GROUPS(dmic, "dmic12_d_1", "dmic34_d_1", "dmic56_d_1"); dmic 345 drivers/pinctrl/nomadik/pinctrl-ab8500.c FUNCTION(dmic), dmic 73 include/sound/sof/dai.h struct sof_ipc_dai_dmic_params dmic; dmic 37 sound/soc/codecs/dmic.c struct dmic *dmic = snd_soc_component_get_drvdata(component); dmic 41 sound/soc/codecs/dmic.c if (dmic->modeswitch_delay) dmic 42 sound/soc/codecs/dmic.c mdelay(dmic->modeswitch_delay); dmic 57 sound/soc/codecs/dmic.c struct dmic *dmic = snd_soc_component_get_drvdata(component); dmic 61 sound/soc/codecs/dmic.c if (dmic->gpio_en) dmic 62 sound/soc/codecs/dmic.c gpiod_set_value(dmic->gpio_en, 1); dmic 64 sound/soc/codecs/dmic.c if (dmic->wakeup_delay) dmic 65 sound/soc/codecs/dmic.c msleep(dmic->wakeup_delay); dmic 68 sound/soc/codecs/dmic.c if (dmic->gpio_en) dmic 69 sound/soc/codecs/dmic.c gpiod_set_value(dmic->gpio_en, 0); dmic 92 sound/soc/codecs/dmic.c struct dmic *dmic; dmic 94 sound/soc/codecs/dmic.c dmic = devm_kzalloc(component->dev, sizeof(*dmic), GFP_KERNEL); dmic 95 sound/soc/codecs/dmic.c if (!dmic) dmic 98 sound/soc/codecs/dmic.c dmic->gpio_en = devm_gpiod_get_optional(component->dev, dmic 100 sound/soc/codecs/dmic.c if (IS_ERR(dmic->gpio_en)) dmic 101 sound/soc/codecs/dmic.c return PTR_ERR(dmic->gpio_en); dmic 104 sound/soc/codecs/dmic.c &dmic->wakeup_delay); dmic 106 sound/soc/codecs/dmic.c &dmic->modeswitch_delay); dmic 108 sound/soc/codecs/dmic.c dmic->wakeup_delay = wakeup_delay; dmic 110 sound/soc/codecs/dmic.c dmic->modeswitch_delay = modeswitch_delay; dmic 112 sound/soc/codecs/dmic.c if (dmic->modeswitch_delay > MAX_MODESWITCH_DELAY) dmic 113 sound/soc/codecs/dmic.c dmic->modeswitch_delay = MAX_MODESWITCH_DELAY; dmic 115 sound/soc/codecs/dmic.c snd_soc_component_set_drvdata(component, dmic); dmic 667 sound/soc/codecs/msm8916-wcd-digital.c unsigned int dmic; dmic 676 sound/soc/codecs/msm8916-wcd-digital.c ret = kstrtouint(dmic_num, 10, &dmic); dmic 677 sound/soc/codecs/msm8916-wcd-digital.c if (ret < 0 || dmic > 2) { dmic 687 sound/soc/codecs/msm8916-wcd-digital.c switch (dmic) { dmic 2918 sound/soc/codecs/wcd9335.c unsigned int dmic; dmic 2928 sound/soc/codecs/wcd9335.c ret = kstrtouint(wname, 10, &dmic); dmic 2935 sound/soc/codecs/wcd9335.c switch (dmic) { dmic 387 sound/soc/intel/boards/bxt_da7219_max98357a.c SND_SOC_DAILINK_DEF(dmic, dmic 499 sound/soc/intel/boards/bxt_da7219_max98357a.c SND_SOC_DAILINK_REG(dmic, dummy, platform), dmic 335 sound/soc/intel/boards/bxt_rt298.c SND_SOC_DAILINK_DEF(dmic, dmic 429 sound/soc/intel/boards/bxt_rt298.c SND_SOC_DAILINK_REG(dmic, dummy, platform), dmic 335 sound/soc/intel/boards/glk_rt5682_max98357a.c SND_SOC_DAILINK_DEF(dmic, dmic 440 sound/soc/intel/boards/glk_rt5682_max98357a.c SND_SOC_DAILINK_REG(dmic, dummy, platform), dmic 358 sound/soc/intel/boards/kbl_da7219_max98357a.c SND_SOC_DAILINK_DEF(dmic, dmic 440 sound/soc/intel/boards/kbl_da7219_max98357a.c SND_SOC_DAILINK_REG(dmic, dummy, platform), dmic 622 sound/soc/intel/boards/kbl_da7219_max98927.c SND_SOC_DAILINK_DEF(dmic, dmic 714 sound/soc/intel/boards/kbl_da7219_max98927.c SND_SOC_DAILINK_REG(dmic, dummy, platform), dmic 880 sound/soc/intel/boards/kbl_da7219_max98927.c SND_SOC_DAILINK_REG(dmic, dummy, platform), dmic 589 sound/soc/intel/boards/kbl_rt5663_max98927.c SND_SOC_DAILINK_DEF(dmic, dmic 697 sound/soc/intel/boards/kbl_rt5663_max98927.c SND_SOC_DAILINK_REG(dmic, dummy, platform), dmic 431 sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c SND_SOC_DAILINK_DEF(dmic, dmic 521 sound/soc/intel/boards/kbl_rt5663_rt5514_max98927.c SND_SOC_DAILINK_REG(dmic, dummy, platform), dmic 408 sound/soc/intel/boards/skl_nau88l25_max98357a.c SND_SOC_DAILINK_DEF(dmic, dmic 498 sound/soc/intel/boards/skl_nau88l25_max98357a.c SND_SOC_DAILINK_REG(dmic, dummy, platform), dmic 446 sound/soc/intel/boards/skl_nau88l25_ssm4567.c SND_SOC_DAILINK_DEF(dmic, dmic 537 sound/soc/intel/boards/skl_nau88l25_ssm4567.c SND_SOC_DAILINK_REG(dmic, dummy, platform), dmic 298 sound/soc/intel/boards/skl_rt286.c SND_SOC_DAILINK_DEF(dmic, dmic 398 sound/soc/intel/boards/skl_rt286.c SND_SOC_DAILINK_REG(dmic, dummy, platform), dmic 266 sound/soc/rockchip/rk3399_gru_sound.c SND_SOC_DAILINK_DEFS(dmic, dmic 310 sound/soc/rockchip/rk3399_gru_sound.c SND_SOC_DAILINK_REG(dmic), dmic 2563 sound/soc/sof/topology.c memset(&config->dmic, 0, sizeof(struct sof_ipc_dai_dmic_params)); dmic 2566 sound/soc/sof/topology.c ret = sof_parse_tokens(scomp, &config->dmic, dmic_tokens, dmic 2581 sound/soc/sof/topology.c config->dmic.num_pdm_active; dmic 2601 sound/soc/sof/topology.c ret = sof_parse_tokens(scomp, &ipc_config->dmic.pdm[0], dmic_pdm_tokens, dmic 2615 sound/soc/sof/topology.c ipc_config->dai_index, ipc_config->dmic.driver_ipc_version); dmic 2617 sound/soc/sof/topology.c ipc_config->dmic.pdmclk_min, ipc_config->dmic.pdmclk_max, dmic 2618 sound/soc/sof/topology.c ipc_config->dmic.duty_min); dmic 2620 sound/soc/sof/topology.c ipc_config->dmic.duty_max, ipc_config->dmic.fifo_fs, dmic 2621 sound/soc/sof/topology.c ipc_config->dmic.num_pdm_active); dmic 2623 sound/soc/sof/topology.c ipc_config->dmic.fifo_bits); dmic 2625 sound/soc/sof/topology.c for (j = 0; j < ipc_config->dmic.num_pdm_active; j++) { dmic 2627 sound/soc/sof/topology.c ipc_config->dmic.pdm[j].id, dmic 2628 sound/soc/sof/topology.c ipc_config->dmic.pdm[j].enable_mic_a, dmic 2629 sound/soc/sof/topology.c ipc_config->dmic.pdm[j].enable_mic_b); dmic 2631 sound/soc/sof/topology.c ipc_config->dmic.pdm[j].id, dmic 2632 sound/soc/sof/topology.c ipc_config->dmic.pdm[j].polarity_mic_a, dmic 2633 sound/soc/sof/topology.c ipc_config->dmic.pdm[j].polarity_mic_b); dmic 2635 sound/soc/sof/topology.c ipc_config->dmic.pdm[j].id, dmic 2636 sound/soc/sof/topology.c ipc_config->dmic.pdm[j].clk_edge, dmic 2637 sound/soc/sof/topology.c ipc_config->dmic.pdm[j].skew); dmic 2642 sound/soc/sof/topology.c ipc_config->dmic.reserved_2 = ipc_config->dmic.fifo_bits; dmic 51 sound/soc/ti/omap-dmic.c static inline void omap_dmic_write(struct omap_dmic *dmic, u16 reg, u32 val) dmic 53 sound/soc/ti/omap-dmic.c writel_relaxed(val, dmic->io_base + reg); dmic 56 sound/soc/ti/omap-dmic.c static inline int omap_dmic_read(struct omap_dmic *dmic, u16 reg) dmic 58 sound/soc/ti/omap-dmic.c return readl_relaxed(dmic->io_base + reg); dmic 61 sound/soc/ti/omap-dmic.c static inline void omap_dmic_start(struct omap_dmic *dmic) dmic 63 sound/soc/ti/omap-dmic.c u32 ctrl = omap_dmic_read(dmic, OMAP_DMIC_CTRL_REG); dmic 66 sound/soc/ti/omap-dmic.c omap_dmic_write(dmic, OMAP_DMIC_DMAENABLE_SET_REG, dmic 69 sound/soc/ti/omap-dmic.c omap_dmic_write(dmic, OMAP_DMIC_CTRL_REG, ctrl | dmic->ch_enabled); dmic 72 sound/soc/ti/omap-dmic.c static inline void omap_dmic_stop(struct omap_dmic *dmic) dmic 74 sound/soc/ti/omap-dmic.c u32 ctrl = omap_dmic_read(dmic, OMAP_DMIC_CTRL_REG); dmic 75 sound/soc/ti/omap-dmic.c omap_dmic_write(dmic, OMAP_DMIC_CTRL_REG, dmic 79 sound/soc/ti/omap-dmic.c omap_dmic_write(dmic, OMAP_DMIC_DMAENABLE_CLR_REG, dmic 84 sound/soc/ti/omap-dmic.c static inline int dmic_is_enabled(struct omap_dmic *dmic) dmic 86 sound/soc/ti/omap-dmic.c return omap_dmic_read(dmic, OMAP_DMIC_CTRL_REG) & dmic 93 sound/soc/ti/omap-dmic.c struct omap_dmic *dmic = snd_soc_dai_get_drvdata(dai); dmic 96 sound/soc/ti/omap-dmic.c mutex_lock(&dmic->mutex); dmic 99 sound/soc/ti/omap-dmic.c dmic->active = 1; dmic 103 sound/soc/ti/omap-dmic.c mutex_unlock(&dmic->mutex); dmic 111 sound/soc/ti/omap-dmic.c struct omap_dmic *dmic = snd_soc_dai_get_drvdata(dai); dmic 113 sound/soc/ti/omap-dmic.c mutex_lock(&dmic->mutex); dmic 115 sound/soc/ti/omap-dmic.c pm_qos_remove_request(&dmic->pm_qos_req); dmic 118 sound/soc/ti/omap-dmic.c dmic->active = 0; dmic 120 sound/soc/ti/omap-dmic.c mutex_unlock(&dmic->mutex); dmic 123 sound/soc/ti/omap-dmic.c static int omap_dmic_select_divider(struct omap_dmic *dmic, int sample_rate) dmic 132 sound/soc/ti/omap-dmic.c if (dmic->fclk_freq == 19200000 && dmic->out_freq == 3840000) dmic 135 sound/soc/ti/omap-dmic.c dev_err(dmic->dev, dmic 141 sound/soc/ti/omap-dmic.c switch (dmic->out_freq) { dmic 143 sound/soc/ti/omap-dmic.c if (dmic->fclk_freq != 24576000) dmic 148 sound/soc/ti/omap-dmic.c switch (dmic->fclk_freq) { dmic 163 sound/soc/ti/omap-dmic.c if (dmic->fclk_freq != 24576000) dmic 168 sound/soc/ti/omap-dmic.c if (dmic->fclk_freq != 19200000) dmic 173 sound/soc/ti/omap-dmic.c dev_err(dmic->dev, "invalid out frequency: %dHz\n", dmic 174 sound/soc/ti/omap-dmic.c dmic->out_freq); dmic 181 sound/soc/ti/omap-dmic.c dev_err(dmic->dev, "invalid out frequency %dHz for %dHz input\n", dmic 182 sound/soc/ti/omap-dmic.c dmic->out_freq, dmic->fclk_freq); dmic 190 sound/soc/ti/omap-dmic.c struct omap_dmic *dmic = snd_soc_dai_get_drvdata(dai); dmic 194 sound/soc/ti/omap-dmic.c dmic->clk_div = omap_dmic_select_divider(dmic, params_rate(params)); dmic 195 sound/soc/ti/omap-dmic.c if (dmic->clk_div < 0) { dmic 196 sound/soc/ti/omap-dmic.c dev_err(dmic->dev, "no valid divider for %dHz from %dHz\n", dmic 197 sound/soc/ti/omap-dmic.c dmic->out_freq, dmic->fclk_freq); dmic 201 sound/soc/ti/omap-dmic.c dmic->ch_enabled = 0; dmic 205 sound/soc/ti/omap-dmic.c dmic->ch_enabled |= OMAP_DMIC_UP3_ENABLE; dmic 208 sound/soc/ti/omap-dmic.c dmic->ch_enabled |= OMAP_DMIC_UP2_ENABLE; dmic 211 sound/soc/ti/omap-dmic.c dmic->ch_enabled |= OMAP_DMIC_UP1_ENABLE; dmic 214 sound/soc/ti/omap-dmic.c dev_err(dmic->dev, "invalid number of legacy channels\n"); dmic 220 sound/soc/ti/omap-dmic.c dma_data->maxburst = dmic->threshold * channels; dmic 221 sound/soc/ti/omap-dmic.c dmic->latency = (OMAP_DMIC_THRES_MAX - dmic->threshold) * USEC_PER_SEC / dmic 230 sound/soc/ti/omap-dmic.c struct omap_dmic *dmic = snd_soc_dai_get_drvdata(dai); dmic 233 sound/soc/ti/omap-dmic.c if (pm_qos_request_active(&dmic->pm_qos_req)) dmic 234 sound/soc/ti/omap-dmic.c pm_qos_update_request(&dmic->pm_qos_req, dmic->latency); dmic 237 sound/soc/ti/omap-dmic.c omap_dmic_write(dmic, OMAP_DMIC_FIFO_CTRL_REG, dmic->threshold); dmic 239 sound/soc/ti/omap-dmic.c ctrl = omap_dmic_read(dmic, OMAP_DMIC_CTRL_REG); dmic 248 sound/soc/ti/omap-dmic.c ctrl |= OMAP_DMIC_CLK_DIV(dmic->clk_div); dmic 250 sound/soc/ti/omap-dmic.c omap_dmic_write(dmic, OMAP_DMIC_CTRL_REG, ctrl); dmic 252 sound/soc/ti/omap-dmic.c omap_dmic_write(dmic, OMAP_DMIC_CTRL_REG, dmic 262 sound/soc/ti/omap-dmic.c struct omap_dmic *dmic = snd_soc_dai_get_drvdata(dai); dmic 266 sound/soc/ti/omap-dmic.c omap_dmic_start(dmic); dmic 269 sound/soc/ti/omap-dmic.c omap_dmic_stop(dmic); dmic 278 sound/soc/ti/omap-dmic.c static int omap_dmic_select_fclk(struct omap_dmic *dmic, int clk_id, dmic 292 sound/soc/ti/omap-dmic.c dev_err(dmic->dev, "invalid input frequency: %dHz\n", freq); dmic 293 sound/soc/ti/omap-dmic.c dmic->fclk_freq = 0; dmic 297 sound/soc/ti/omap-dmic.c if (dmic->sysclk == clk_id) { dmic 298 sound/soc/ti/omap-dmic.c dmic->fclk_freq = freq; dmic 303 sound/soc/ti/omap-dmic.c if (dmic->active && dmic_is_enabled(dmic)) { dmic 304 sound/soc/ti/omap-dmic.c dev_err(dmic->dev, "can't re-parent when DMIC active\n"); dmic 319 sound/soc/ti/omap-dmic.c dev_err(dmic->dev, "fclk clk_id (%d) not supported\n", clk_id); dmic 323 sound/soc/ti/omap-dmic.c parent_clk = clk_get(dmic->dev, parent_clk_name); dmic 325 sound/soc/ti/omap-dmic.c dev_err(dmic->dev, "can't get %s\n", parent_clk_name); dmic 329 sound/soc/ti/omap-dmic.c mux = clk_get_parent(dmic->fclk); dmic 331 sound/soc/ti/omap-dmic.c dev_err(dmic->dev, "can't get fck mux parent\n"); dmic 336 sound/soc/ti/omap-dmic.c mutex_lock(&dmic->mutex); dmic 337 sound/soc/ti/omap-dmic.c if (dmic->active) { dmic 339 sound/soc/ti/omap-dmic.c pm_runtime_put_sync(dmic->dev); dmic 341 sound/soc/ti/omap-dmic.c pm_runtime_get_sync(dmic->dev); dmic 345 sound/soc/ti/omap-dmic.c mutex_unlock(&dmic->mutex); dmic 348 sound/soc/ti/omap-dmic.c dev_err(dmic->dev, "re-parent failed\n"); dmic 352 sound/soc/ti/omap-dmic.c dmic->sysclk = clk_id; dmic 353 sound/soc/ti/omap-dmic.c dmic->fclk_freq = freq; dmic 362 sound/soc/ti/omap-dmic.c static int omap_dmic_select_outclk(struct omap_dmic *dmic, int clk_id, dmic 368 sound/soc/ti/omap-dmic.c dev_err(dmic->dev, "output clk_id (%d) not supported\n", dmic 378 sound/soc/ti/omap-dmic.c dmic->out_freq = freq; dmic 381 sound/soc/ti/omap-dmic.c dev_err(dmic->dev, "invalid out frequency: %dHz\n", freq); dmic 382 sound/soc/ti/omap-dmic.c dmic->out_freq = 0; dmic 392 sound/soc/ti/omap-dmic.c struct omap_dmic *dmic = snd_soc_dai_get_drvdata(dai); dmic 395 sound/soc/ti/omap-dmic.c return omap_dmic_select_fclk(dmic, clk_id, freq); dmic 397 sound/soc/ti/omap-dmic.c return omap_dmic_select_outclk(dmic, clk_id, freq); dmic 399 sound/soc/ti/omap-dmic.c dev_err(dmic->dev, "invalid clock direction (%d)\n", dir); dmic 414 sound/soc/ti/omap-dmic.c struct omap_dmic *dmic = snd_soc_dai_get_drvdata(dai); dmic 416 sound/soc/ti/omap-dmic.c pm_runtime_enable(dmic->dev); dmic 419 sound/soc/ti/omap-dmic.c pm_runtime_get_sync(dmic->dev); dmic 420 sound/soc/ti/omap-dmic.c omap_dmic_write(dmic, OMAP_DMIC_CTRL_REG, 0x00); dmic 421 sound/soc/ti/omap-dmic.c pm_runtime_put_sync(dmic->dev); dmic 424 sound/soc/ti/omap-dmic.c dmic->threshold = OMAP_DMIC_THRES_MAX - 3; dmic 426 sound/soc/ti/omap-dmic.c snd_soc_dai_init_dma_data(dai, NULL, &dmic->dma_data); dmic 433 sound/soc/ti/omap-dmic.c struct omap_dmic *dmic = snd_soc_dai_get_drvdata(dai); dmic 435 sound/soc/ti/omap-dmic.c pm_runtime_disable(dmic->dev); dmic 460 sound/soc/ti/omap-dmic.c struct omap_dmic *dmic; dmic 464 sound/soc/ti/omap-dmic.c dmic = devm_kzalloc(&pdev->dev, sizeof(struct omap_dmic), GFP_KERNEL); dmic 465 sound/soc/ti/omap-dmic.c if (!dmic) dmic 468 sound/soc/ti/omap-dmic.c platform_set_drvdata(pdev, dmic); dmic 469 sound/soc/ti/omap-dmic.c dmic->dev = &pdev->dev; dmic 470 sound/soc/ti/omap-dmic.c dmic->sysclk = OMAP_DMIC_SYSCLK_SYNC_MUX_CLKS; dmic 472 sound/soc/ti/omap-dmic.c mutex_init(&dmic->mutex); dmic 474 sound/soc/ti/omap-dmic.c dmic->fclk = devm_clk_get(dmic->dev, "fck"); dmic 475 sound/soc/ti/omap-dmic.c if (IS_ERR(dmic->fclk)) { dmic 476 sound/soc/ti/omap-dmic.c dev_err(dmic->dev, "cant get fck\n"); dmic 482 sound/soc/ti/omap-dmic.c dev_err(dmic->dev, "invalid dma memory resource\n"); dmic 485 sound/soc/ti/omap-dmic.c dmic->dma_data.addr = res->start + OMAP_DMIC_DATA_REG; dmic 487 sound/soc/ti/omap-dmic.c dmic->dma_data.filter_data = "up_link"; dmic 490 sound/soc/ti/omap-dmic.c dmic->io_base = devm_ioremap_resource(&pdev->dev, res); dmic 491 sound/soc/ti/omap-dmic.c if (IS_ERR(dmic->io_base)) dmic 492 sound/soc/ti/omap-dmic.c return PTR_ERR(dmic->io_base);