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; } } }
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); }