/*
 * 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;
}