Lines Matching refs:ssc_p
157 struct atmel_ssc_info *ssc_p = dev_id; in atmel_ssc_interrupt() local
163 ssc_sr = (unsigned long)ssc_readl(ssc_p->ssc->regs, SR) in atmel_ssc_interrupt()
164 & (unsigned long)ssc_readl(ssc_p->ssc->regs, IMR); in atmel_ssc_interrupt()
172 for (i = 0; i < ARRAY_SIZE(ssc_p->dma_params); i++) { in atmel_ssc_interrupt()
173 dma_params = ssc_p->dma_params[i]; in atmel_ssc_interrupt()
210 struct atmel_ssc_info *ssc_p = rule->private; in atmel_ssc_hw_rule_rate() local
211 struct ssc_device *ssc = ssc_p->ssc; in atmel_ssc_hw_rule_rate()
228 switch (ssc_p->daifmt & SND_SOC_DAIFMT_MASTER_MASK) { in atmel_ssc_hw_rule_rate()
230 if ((ssc_p->dir_mask & SSC_DIR_MASK_CAPTURE) in atmel_ssc_hw_rule_rate()
240 if ((ssc_p->dir_mask & SSC_DIR_MASK_PLAYBACK) in atmel_ssc_hw_rule_rate()
251 switch (ssc_p->daifmt & SND_SOC_DAIFMT_MASTER_MASK) { in atmel_ssc_hw_rule_rate()
253 r.num = ssc_p->mck_rate / mck_div / frame_size; in atmel_ssc_hw_rule_rate()
265 t.max = ssc_p->mck_rate / mck_div / frame_size; in atmel_ssc_hw_rule_rate()
288 struct atmel_ssc_info *ssc_p = &ssc_info[dai->id]; in atmel_ssc_startup() local
294 ssc_readl(ssc_p->ssc->regs, SR)); in atmel_ssc_startup()
298 clk_enable(ssc_p->ssc->clk); in atmel_ssc_startup()
299 ssc_p->mck_rate = clk_get_rate(ssc_p->ssc->clk); in atmel_ssc_startup()
302 ssc_writel(ssc_p->ssc->regs, CR, SSC_BIT(CR_SWRST)); in atmel_ssc_startup()
315 ssc_p, in atmel_ssc_startup()
324 dma_params->ssc = ssc_p->ssc; in atmel_ssc_startup()
327 ssc_p->dma_params[dir] = dma_params; in atmel_ssc_startup()
331 spin_lock_irq(&ssc_p->lock); in atmel_ssc_startup()
332 if (ssc_p->dir_mask & dir_mask) { in atmel_ssc_startup()
333 spin_unlock_irq(&ssc_p->lock); in atmel_ssc_startup()
336 ssc_p->dir_mask |= dir_mask; in atmel_ssc_startup()
337 spin_unlock_irq(&ssc_p->lock); in atmel_ssc_startup()
349 struct atmel_ssc_info *ssc_p = &ssc_info[dai->id]; in atmel_ssc_shutdown() local
358 dma_params = ssc_p->dma_params[dir]; in atmel_ssc_shutdown()
363 ssc_p->dma_params[dir] = NULL; in atmel_ssc_shutdown()
368 spin_lock_irq(&ssc_p->lock); in atmel_ssc_shutdown()
369 ssc_p->dir_mask &= ~dir_mask; in atmel_ssc_shutdown()
370 if (!ssc_p->dir_mask) { in atmel_ssc_shutdown()
371 if (ssc_p->initialized) { in atmel_ssc_shutdown()
372 free_irq(ssc_p->ssc->irq, ssc_p); in atmel_ssc_shutdown()
373 ssc_p->initialized = 0; in atmel_ssc_shutdown()
377 ssc_writel(ssc_p->ssc->regs, CR, SSC_BIT(CR_SWRST)); in atmel_ssc_shutdown()
379 ssc_p->cmr_div = ssc_p->tcmr_period = ssc_p->rcmr_period = 0; in atmel_ssc_shutdown()
381 spin_unlock_irq(&ssc_p->lock); in atmel_ssc_shutdown()
385 clk_disable(ssc_p->ssc->clk); in atmel_ssc_shutdown()
395 struct atmel_ssc_info *ssc_p = &ssc_info[cpu_dai->id]; in atmel_ssc_set_dai_fmt() local
397 ssc_p->daifmt = fmt; in atmel_ssc_set_dai_fmt()
407 struct atmel_ssc_info *ssc_p = &ssc_info[cpu_dai->id]; in atmel_ssc_set_dai_clkdiv() local
416 if (ssc_p->dir_mask != in atmel_ssc_set_dai_clkdiv()
418 ssc_p->cmr_div = div; in atmel_ssc_set_dai_clkdiv()
419 else if (ssc_p->cmr_div == 0) in atmel_ssc_set_dai_clkdiv()
420 ssc_p->cmr_div = div; in atmel_ssc_set_dai_clkdiv()
422 if (div != ssc_p->cmr_div) in atmel_ssc_set_dai_clkdiv()
427 ssc_p->tcmr_period = div; in atmel_ssc_set_dai_clkdiv()
431 ssc_p->rcmr_period = div; in atmel_ssc_set_dai_clkdiv()
449 struct atmel_ssc_info *ssc_p = &ssc_info[id]; in atmel_ssc_hw_params() local
450 struct ssc_device *ssc = ssc_p->ssc; in atmel_ssc_hw_params()
467 dma_params = ssc_p->dma_params[dir]; in atmel_ssc_hw_params()
499 switch (ssc_p->daifmt in atmel_ssc_hw_params()
521 rcmr = SSC_BF(RCMR_PERIOD, ssc_p->rcmr_period) in atmel_ssc_hw_params()
537 tcmr = SSC_BF(TCMR_PERIOD, ssc_p->tcmr_period) in atmel_ssc_hw_params()
603 rcmr = SSC_BF(RCMR_PERIOD, ssc_p->rcmr_period) in atmel_ssc_hw_params()
620 tcmr = SSC_BF(TCMR_PERIOD, ssc_p->tcmr_period) in atmel_ssc_hw_params()
647 rcmr = SSC_BF(RCMR_PERIOD, ssc_p->rcmr_period) in atmel_ssc_hw_params()
662 tcmr = SSC_BF(TCMR_PERIOD, ssc_p->tcmr_period) in atmel_ssc_hw_params()
723 ssc_p->daifmt); in atmel_ssc_hw_params()
730 if (!ssc_p->initialized) { in atmel_ssc_hw_params()
731 if (!ssc_p->ssc->pdata->use_dma) { in atmel_ssc_hw_params()
732 ssc_writel(ssc_p->ssc->regs, PDC_RPR, 0); in atmel_ssc_hw_params()
733 ssc_writel(ssc_p->ssc->regs, PDC_RCR, 0); in atmel_ssc_hw_params()
734 ssc_writel(ssc_p->ssc->regs, PDC_RNPR, 0); in atmel_ssc_hw_params()
735 ssc_writel(ssc_p->ssc->regs, PDC_RNCR, 0); in atmel_ssc_hw_params()
737 ssc_writel(ssc_p->ssc->regs, PDC_TPR, 0); in atmel_ssc_hw_params()
738 ssc_writel(ssc_p->ssc->regs, PDC_TCR, 0); in atmel_ssc_hw_params()
739 ssc_writel(ssc_p->ssc->regs, PDC_TNPR, 0); in atmel_ssc_hw_params()
740 ssc_writel(ssc_p->ssc->regs, PDC_TNCR, 0); in atmel_ssc_hw_params()
743 ret = request_irq(ssc_p->ssc->irq, atmel_ssc_interrupt, 0, in atmel_ssc_hw_params()
744 ssc_p->name, ssc_p); in atmel_ssc_hw_params()
749 clk_disable(ssc_p->ssc->clk); in atmel_ssc_hw_params()
753 ssc_p->initialized = 1; in atmel_ssc_hw_params()
757 ssc_writel(ssc_p->ssc->regs, CMR, ssc_p->cmr_div); in atmel_ssc_hw_params()
760 ssc_writel(ssc_p->ssc->regs, RCMR, rcmr); in atmel_ssc_hw_params()
761 ssc_writel(ssc_p->ssc->regs, RFMR, rfmr); in atmel_ssc_hw_params()
764 ssc_writel(ssc_p->ssc->regs, TCMR, tcmr); in atmel_ssc_hw_params()
765 ssc_writel(ssc_p->ssc->regs, TFMR, tfmr); in atmel_ssc_hw_params()
775 struct atmel_ssc_info *ssc_p = &ssc_info[dai->id]; in atmel_ssc_prepare() local
784 dma_params = ssc_p->dma_params[dir]; in atmel_ssc_prepare()
786 ssc_writel(ssc_p->ssc->regs, CR, dma_params->mask->ssc_disable); in atmel_ssc_prepare()
787 ssc_writel(ssc_p->ssc->regs, IDR, dma_params->mask->ssc_error); in atmel_ssc_prepare()
791 ssc_readl(ssc_p->ssc->regs, SR)); in atmel_ssc_prepare()
798 struct atmel_ssc_info *ssc_p = &ssc_info[dai->id]; in atmel_ssc_trigger() local
807 dma_params = ssc_p->dma_params[dir]; in atmel_ssc_trigger()
813 ssc_writel(ssc_p->ssc->regs, CR, dma_params->mask->ssc_enable); in atmel_ssc_trigger()
816 ssc_writel(ssc_p->ssc->regs, CR, dma_params->mask->ssc_disable); in atmel_ssc_trigger()
826 struct atmel_ssc_info *ssc_p; in atmel_ssc_suspend() local
831 ssc_p = &ssc_info[cpu_dai->id]; in atmel_ssc_suspend()
834 ssc_p->ssc_state.ssc_sr = ssc_readl(ssc_p->ssc->regs, SR); in atmel_ssc_suspend()
835 ssc_writel(ssc_p->ssc->regs, CR, SSC_BIT(CR_TXDIS) | SSC_BIT(CR_RXDIS)); in atmel_ssc_suspend()
838 ssc_p->ssc_state.ssc_imr = ssc_readl(ssc_p->ssc->regs, IMR); in atmel_ssc_suspend()
839 ssc_writel(ssc_p->ssc->regs, IDR, ssc_p->ssc_state.ssc_imr); in atmel_ssc_suspend()
841 ssc_p->ssc_state.ssc_cmr = ssc_readl(ssc_p->ssc->regs, CMR); in atmel_ssc_suspend()
842 ssc_p->ssc_state.ssc_rcmr = ssc_readl(ssc_p->ssc->regs, RCMR); in atmel_ssc_suspend()
843 ssc_p->ssc_state.ssc_rfmr = ssc_readl(ssc_p->ssc->regs, RFMR); in atmel_ssc_suspend()
844 ssc_p->ssc_state.ssc_tcmr = ssc_readl(ssc_p->ssc->regs, TCMR); in atmel_ssc_suspend()
845 ssc_p->ssc_state.ssc_tfmr = ssc_readl(ssc_p->ssc->regs, TFMR); in atmel_ssc_suspend()
854 struct atmel_ssc_info *ssc_p; in atmel_ssc_resume() local
860 ssc_p = &ssc_info[cpu_dai->id]; in atmel_ssc_resume()
863 ssc_writel(ssc_p->ssc->regs, TFMR, ssc_p->ssc_state.ssc_tfmr); in atmel_ssc_resume()
864 ssc_writel(ssc_p->ssc->regs, TCMR, ssc_p->ssc_state.ssc_tcmr); in atmel_ssc_resume()
865 ssc_writel(ssc_p->ssc->regs, RFMR, ssc_p->ssc_state.ssc_rfmr); in atmel_ssc_resume()
866 ssc_writel(ssc_p->ssc->regs, RCMR, ssc_p->ssc_state.ssc_rcmr); in atmel_ssc_resume()
867 ssc_writel(ssc_p->ssc->regs, CMR, ssc_p->ssc_state.ssc_cmr); in atmel_ssc_resume()
870 ssc_writel(ssc_p->ssc->regs, IER, ssc_p->ssc_state.ssc_imr); in atmel_ssc_resume()
875 (ssc_p->ssc_state.ssc_sr & SSC_BIT(SR_RXEN)) ? SSC_BIT(CR_RXEN) : 0; in atmel_ssc_resume()
877 (ssc_p->ssc_state.ssc_sr & SSC_BIT(SR_TXEN)) ? SSC_BIT(CR_TXEN) : 0; in atmel_ssc_resume()
878 ssc_writel(ssc_p->ssc->regs, CR, cr); in atmel_ssc_resume()