Lines Matching refs:mod
65 struct rsnd_mod mod; member
80 #define rsnd_mod_to_ssi(_mod) container_of((_mod), struct rsnd_ssi, mod)
89 int rsnd_ssi_use_busif(struct rsnd_mod *mod) in rsnd_ssi_use_busif() argument
91 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_use_busif()
92 struct rsnd_dai_stream *io = rsnd_mod_to_io(mod); in rsnd_ssi_use_busif()
95 if (!rsnd_ssi_is_dma_mode(mod)) in rsnd_ssi_use_busif()
106 static void rsnd_ssi_status_check(struct rsnd_mod *mod, in rsnd_ssi_status_check() argument
109 struct rsnd_priv *priv = rsnd_mod_to_priv(mod); in rsnd_ssi_status_check()
115 status = rsnd_mod_read(mod, SSISR); in rsnd_ssi_status_check()
155 ret = rsnd_adg_ssi_clk_try_start(&ssi->mod, main_rate); in rsnd_ssi_master_clk_start()
161 rsnd_mod_name(&ssi->mod), in rsnd_ssi_master_clk_start()
162 rsnd_mod_id(&ssi->mod), rate); in rsnd_ssi_master_clk_start()
176 rsnd_adg_ssi_clk_stop(&ssi->mod); in rsnd_ssi_master_clk_stop()
189 rsnd_mod_hw_start(&ssi->mod); in rsnd_ssi_hw_start()
199 cr_mode = rsnd_ssi_is_dma_mode(&ssi->mod) ? in rsnd_ssi_hw_start()
209 rsnd_mod_write(&ssi->mod, SSICR, cr); in rsnd_ssi_hw_start()
213 rsnd_mod_write(&ssi->mod, SSIWSR, CONT); in rsnd_ssi_hw_start()
216 rsnd_mod_write(&ssi->mod, SSISR, 0); in rsnd_ssi_hw_start()
221 rsnd_mod_name(&ssi->mod), rsnd_mod_id(&ssi->mod)); in rsnd_ssi_hw_start()
226 struct rsnd_priv *priv = rsnd_mod_to_priv(&ssi->mod); in rsnd_ssi_hw_stop()
227 struct rsnd_dai_stream *io = rsnd_mod_to_io(&ssi->mod); in rsnd_ssi_hw_stop()
245 rsnd_mod_write(&ssi->mod, SSICR, cr | EN); in rsnd_ssi_hw_stop()
246 rsnd_ssi_status_check(&ssi->mod, DIRQ); in rsnd_ssi_hw_stop()
252 rsnd_mod_write(&ssi->mod, SSICR, cr); /* disabled all */ in rsnd_ssi_hw_stop()
253 rsnd_ssi_status_check(&ssi->mod, IIRQ); in rsnd_ssi_hw_stop()
262 rsnd_mod_hw_stop(&ssi->mod); in rsnd_ssi_hw_stop()
266 rsnd_mod_name(&ssi->mod), rsnd_mod_id(&ssi->mod)); in rsnd_ssi_hw_stop()
272 static int rsnd_ssi_init(struct rsnd_mod *mod, in rsnd_ssi_init() argument
275 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_init()
276 struct rsnd_dai_stream *io = rsnd_mod_to_io(mod); in rsnd_ssi_init()
323 static int rsnd_ssi_quit(struct rsnd_mod *mod, in rsnd_ssi_quit() argument
326 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_quit()
331 rsnd_mod_name(mod), rsnd_mod_id(mod), ssi->err); in rsnd_ssi_quit()
346 rsnd_mod_write(&ssi->mod, SSISR, 0); in rsnd_ssi_record_error()
350 static int rsnd_ssi_start(struct rsnd_mod *mod, in rsnd_ssi_start() argument
353 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_start()
354 struct rsnd_dai_stream *io = rsnd_mod_to_io(mod); in rsnd_ssi_start()
356 rsnd_src_ssiu_start(mod, rsnd_ssi_use_busif(mod)); in rsnd_ssi_start()
360 rsnd_src_ssi_irq_enable(mod); in rsnd_ssi_start()
365 static int rsnd_ssi_stop(struct rsnd_mod *mod, in rsnd_ssi_stop() argument
368 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_stop()
370 rsnd_src_ssi_irq_disable(mod); in rsnd_ssi_stop()
372 rsnd_ssi_record_error(ssi, rsnd_mod_read(mod, SSISR)); in rsnd_ssi_stop()
376 rsnd_src_ssiu_stop(mod); in rsnd_ssi_stop()
384 struct rsnd_mod *mod = &ssi->mod; in rsnd_ssi_interrupt() local
385 struct rsnd_priv *priv = rsnd_mod_to_priv(mod); in rsnd_ssi_interrupt()
386 struct rsnd_dai_stream *io = rsnd_mod_to_io(mod); in rsnd_ssi_interrupt()
387 int is_dma = rsnd_ssi_is_dma_mode(mod); in rsnd_ssi_interrupt()
388 u32 status = rsnd_mod_read(mod, SSISR); in rsnd_ssi_interrupt()
405 rsnd_mod_write(mod, SSITDR, *buf); in rsnd_ssi_interrupt()
407 *buf = rsnd_mod_read(mod, SSIRDR); in rsnd_ssi_interrupt()
420 rsnd_mod_name(mod), rsnd_mod_id(mod)); in rsnd_ssi_interrupt()
422 rsnd_ssi_stop(mod, priv); in rsnd_ssi_interrupt()
424 rsnd_ssi_start(mod, priv); in rsnd_ssi_interrupt()
437 static int rsnd_ssi_pio_probe(struct rsnd_mod *mod, in rsnd_ssi_pio_probe() argument
441 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_pio_probe()
461 static int rsnd_ssi_dma_probe(struct rsnd_mod *mod, in rsnd_ssi_dma_probe() argument
464 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_dma_probe()
477 priv, rsnd_mod_to_dma(mod), in rsnd_ssi_dma_probe()
483 static int rsnd_ssi_dma_remove(struct rsnd_mod *mod, in rsnd_ssi_dma_remove() argument
486 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_dma_remove()
490 rsnd_dma_quit(rsnd_mod_to_dma(mod)); in rsnd_ssi_dma_remove()
498 static int rsnd_ssi_fallback(struct rsnd_mod *mod, in rsnd_ssi_fallback() argument
510 mod->ops = &rsnd_ssi_pio_ops; in rsnd_ssi_fallback()
513 rsnd_mod_name(mod), rsnd_mod_id(mod)); in rsnd_ssi_fallback()
518 static int rsnd_ssi_dma_start(struct rsnd_mod *mod, in rsnd_ssi_dma_start() argument
521 struct rsnd_dma *dma = rsnd_mod_to_dma(mod); in rsnd_ssi_dma_start()
525 rsnd_ssi_start(mod, priv); in rsnd_ssi_dma_start()
530 static int rsnd_ssi_dma_stop(struct rsnd_mod *mod, in rsnd_ssi_dma_stop() argument
533 struct rsnd_dma *dma = rsnd_mod_to_dma(mod); in rsnd_ssi_dma_stop()
535 rsnd_ssi_stop(mod, priv); in rsnd_ssi_dma_stop()
542 static struct dma_chan *rsnd_ssi_dma_req(struct rsnd_mod *mod) in rsnd_ssi_dma_req() argument
544 struct rsnd_priv *priv = rsnd_mod_to_priv(mod); in rsnd_ssi_dma_req()
545 struct rsnd_dai_stream *io = rsnd_mod_to_io(mod); in rsnd_ssi_dma_req()
549 if (rsnd_ssi_use_busif(mod)) in rsnd_ssi_dma_req()
555 mod, name); in rsnd_ssi_dma_req()
570 int rsnd_ssi_is_dma_mode(struct rsnd_mod *mod) in rsnd_ssi_is_dma_mode() argument
572 return mod->ops == &rsnd_ssi_dma_ops; in rsnd_ssi_is_dma_mode()
591 return &((struct rsnd_ssi *)(priv->ssi) + id)->mod; in rsnd_ssi_mod_get()
594 int rsnd_ssi_is_pin_sharing(struct rsnd_mod *mod) in rsnd_ssi_is_pin_sharing() argument
596 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_is_pin_sharing()
603 if (!rsnd_ssi_is_pin_sharing(&ssi->mod)) in rsnd_ssi_parent_clk_setup()
606 switch (rsnd_mod_id(&ssi->mod)) { in rsnd_ssi_parent_clk_setup()
731 ret = rsnd_mod_init(&ssi->mod, ops, clk, RSND_MOD_SSI, i); in rsnd_ssi_probe()
748 rsnd_mod_quit(&ssi->mod); in rsnd_ssi_remove()