/* * TODO: rx/tx_hw_param_status should be a counter in the below code * when driver starts supporting mutisession else setting it to 0 * will stop audio in all sessions. */ static void msm8660_shutdown(struct snd_pcm_substream *substream) { if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { rx_hw_param_status = 0; timpani_poweramp_off(); msleep(30); if (rx_bit_clk) { clk_disable_unprepare(rx_bit_clk); clk_put(rx_bit_clk); rx_bit_clk = NULL; } if (rx_osr_clk) { clk_disable_unprepare(rx_osr_clk); clk_put(rx_osr_clk); rx_osr_clk = NULL; } } else if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) { tx_hw_param_status = 0; msm_snddev_disable_dmic_power(); msleep(30); if (tx_bit_clk) { clk_disable_unprepare(tx_bit_clk); clk_put(tx_bit_clk); tx_bit_clk = NULL; } if (tx_osr_clk) { clk_disable_unprepare(tx_osr_clk); clk_put(tx_osr_clk); tx_osr_clk = NULL; } } }
static void msm_snddev_dmic_power(int en) { pr_aud_err("%s", __func__); if (en) msm_snddev_enable_dmic_power(); else msm_snddev_disable_dmic_power(); }
static void msm_snddev_disable_dmic_sec_power(void) { pr_aud_err("%s", __func__); msm_snddev_disable_dmic_power(); #ifdef CONFIG_PMIC8058_OTHC pm8058_micbias_enable(OTHC_MICBIAS_2, OTHC_SIGNAL_OFF); #endif }
static int msm_snddev_enable_dmic_sec_power(void) { int ret; pr_aud_err("%s", __func__); ret = msm_snddev_enable_dmic_power(); if (ret) { pr_err("%s: Error: Enabling dmic power failed\n", __func__); return ret; } #ifdef CONFIG_PMIC8058_OTHC ret = pm8058_micbias_enable(OTHC_MICBIAS_2, OTHC_SIGNAL_ALWAYS_ON); if (ret) { pr_err("%s: Error: Enabling micbias failed\n", __func__); msm_snddev_disable_dmic_power(); return ret; } #endif return 0; }