static int sdp4430_modem_hw_free(struct snd_pcm_substream *substream) { int ret; ret = sdp4430_modem_mcbsp_configure(substream, NULL, 0); if (ret) printk(KERN_ERR "can't clear modem cpu DAI configuration\n"); return ret; }
static int sdp4430_modem_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { int ret; ret = sdp4430_modem_mcbsp_configure(substream, params, 1); if (ret) printk(KERN_ERR "can't set modem cpu DAI configuration\n"); return ret; }
static int sdp4430_dmic_hw_free(struct snd_pcm_substream *substream) { int ret = 0; struct snd_soc_pcm_runtime *rtd = substream->private_data; if (rtd->current_fe == ABE_FRONTEND_DAI_MODEM) { /* freed Modem McBSP configuration */ ret = sdp4430_modem_mcbsp_configure(substream, NULL, 0); } return ret; }
static int sdp4430_mcpdm_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_dai *codec_dai = rtd->codec_dai; int clk_id, freq; int ret = 0; if (twl6040_power_mode) { clk_id = TWL6040_SYSCLK_SEL_HPPLL; freq = 38400000; /* * TWL6040 requires MCLK to be active as long as * high-performance mode is in use. Glitch-free mux * cannot tolerate MCLK gating */ ret = cdc_tcxo_set_req_int(CDC_TCXO_CLK2, 1); if (ret) { printk(KERN_ERR "failed to enable twl6040 MCLK\n"); return ret; } } else { clk_id = TWL6040_SYSCLK_SEL_LPPLL; freq = 32768; } /* set the codec mclk */ ret = snd_soc_dai_set_sysclk(codec_dai, clk_id, freq, SND_SOC_CLOCK_IN); if (ret) { printk(KERN_ERR "can't set codec system clock\n"); return ret; } /* low-power mode uses 32k clock, MCLK is not required */ if (!twl6040_power_mode) { ret = cdc_tcxo_set_req_int(CDC_TCXO_CLK2, 0); if (ret) { printk(KERN_ERR "failed to disable twl6040 MCLK\n"); return ret; } } if (rtd->current_fe == ABE_FRONTEND_DAI_MODEM) { /* set Modem McBSP configuration */ ret = sdp4430_modem_mcbsp_configure(substream, params, 1); } return ret; }