コード例 #1
0
void s5p_i2s_do_resume(struct snd_soc_dai *dai)
{
	struct s3c_i2sv2_info *i2s = to_info(dai);

	if (!audio_pwr_stat) {
		s5p_i2s_set_pwr_enabled(dai, 1);
		s5p_i2s_set_clk_enabled(dai, 1);
	} else {
		s5p_i2s_set_clk_enabled(dai, 1);
	}

	if (audio_pwr_stat && audio_clk_stat) {
		if (audio_reg_saved) {
			writel(i2s->suspend_iismod, i2s->regs + S3C2412_IISMOD);
			writel(i2s->suspend_iiscon, i2s->regs + S3C2412_IISCON);
			writel(i2s->suspend_iispsr, i2s->regs + S3C2412_IISPSR);
#ifdef CONFIG_SND_S5P_RP                        
			if (s5p_rp_is_running) {
				if (!(i2s->suspend_iisahb & (S5P_IISAHB_DMARLD | S5P_IISAHB_DMAEN))) {
					pr_debug("iis: Warning!! Keep auto-reload & DMA En 0x%x\n", i2s->suspend_iisahb);
					i2s->suspend_iisahb |= S5P_IISAHB_DMARLD | S5P_IISAHB_DMAEN;
				}
			} else {
				if ((i2s->suspend_iisahb & S5P_IISAHB_DMARLD)) {
					i2s->suspend_iisahb &= ~S5P_IISAHB_DMARLD;
					pr_debug("iis: Warning!! Disable auto-reload 0x%x\n", i2s->suspend_iisahb);
				}
			}
#else
			if ((i2s->suspend_iisahb & S5P_IISAHB_DMARLD)) {
				i2s->suspend_iisahb &= ~S5P_IISAHB_DMARLD;
				pr_debug("iis: Warning!! Disable auto-reload 0x%x\n", i2s->suspend_iisahb);
			}
#endif
                        
			writel(i2s->suspend_iisahb, i2s->regs + S5P_IISAHB);

			/* Is this dai for I2Sv5? (I2S0) */
			if (dai->id == 0) {
				writel(i2s->suspend_audss_clksrc,
					S5P_CLKSRC_AUDSS);
				writel(i2s->suspend_audss_clkdiv,
					S5P_CLKDIV_AUDSS);
				writel(i2s->suspend_audss_clkgate,
					S5P_CLKGATE_AUDSS);
			}
			pr_debug("iis: Resume and registers restored.\n");
			audio_reg_saved = false;
		}
	}
}
コード例 #2
0
void s5p_i2s_do_suspend(struct snd_soc_dai *dai)
{
	struct s3c_i2sv2_info *i2s = to_info(dai);

#ifdef CONFIG_SND_S5P_RP
	if (s5p_rp_is_running) 
		return;
#endif

	if ((!audio_pwr_stat) && (!audio_clk_stat))
		return;
	
	if (!audio_reg_saved) {
		i2s->suspend_iismod = readl(i2s->regs + S3C2412_IISMOD);
		i2s->suspend_iiscon = readl(i2s->regs + S3C2412_IISCON);
		i2s->suspend_iispsr = readl(i2s->regs + S3C2412_IISPSR);
		i2s->suspend_iisahb = readl(i2s->regs + S5P_IISAHB);
		/* Is this dai for I2Sv5? (I2S0) */
		if (dai->id == 0) {
			i2s->suspend_audss_clksrc =
				readl(S5P_CLKSRC_AUDSS);
			i2s->suspend_audss_clkdiv =
				readl(S5P_CLKDIV_AUDSS);
			i2s->suspend_audss_clkgate =
				readl(S5P_CLKGATE_AUDSS);
		}
		audio_reg_saved = true;
		pr_debug("iis: Registers stored and suspend.\n");
	}
#ifdef CONFIG_SND_S5P_RP
	if (!s5p_rp_is_running)
#endif
		s5p_i2s_set_clk_enabled(dai, 0);

#ifdef CONFIG_SND_S5P_RP
	if (!s5p_rp_is_opened)
#endif
		s5p_i2s_set_pwr_enabled(dai, 0);
}