Lines Matching refs:ssi

77 		((pos) = ((struct rsnd_ssi *)(priv)->ssi + i));		\
82 #define rsnd_ssi_pio_available(ssi) ((ssi)->info->irq > 0) argument
83 #define rsnd_ssi_parent(ssi) ((ssi)->parent) argument
85 #define rsnd_ssi_dai_id(ssi) ((ssi)->info->dai_id) argument
92 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_use_busif() local
98 if (!(rsnd_ssi_mode_flags(ssi) & RSND_SSI_NO_BUSIF)) in rsnd_ssi_use_busif()
125 static int rsnd_ssi_master_clk_start(struct rsnd_ssi *ssi, in rsnd_ssi_master_clk_start() argument
131 struct rsnd_mod *mod = rsnd_mod_get(ssi); in rsnd_ssi_master_clk_start()
153 ssi->cr_clk = FORCE | SWL_32 | in rsnd_ssi_master_clk_start()
168 static void rsnd_ssi_master_clk_stop(struct rsnd_ssi *ssi) in rsnd_ssi_master_clk_stop() argument
170 struct rsnd_mod *mod = rsnd_mod_get(ssi); in rsnd_ssi_master_clk_stop()
172 ssi->cr_clk = 0; in rsnd_ssi_master_clk_stop()
176 static void rsnd_ssi_hw_start(struct rsnd_ssi *ssi, in rsnd_ssi_hw_start() argument
182 struct rsnd_mod *mod = rsnd_mod_get(ssi); in rsnd_ssi_hw_start()
186 if (0 == ssi->usrcnt) { in rsnd_ssi_hw_start()
190 struct rsnd_ssi *ssi_parent = rsnd_ssi_parent(ssi); in rsnd_ssi_hw_start()
195 rsnd_ssi_master_clk_start(ssi, io); in rsnd_ssi_hw_start()
206 cr = ssi->cr_own | in rsnd_ssi_hw_start()
207 ssi->cr_clk | in rsnd_ssi_hw_start()
220 ssi->usrcnt++; in rsnd_ssi_hw_start()
226 static void rsnd_ssi_hw_stop(struct rsnd_dai_stream *io, struct rsnd_ssi *ssi) in rsnd_ssi_hw_stop() argument
228 struct rsnd_mod *mod = rsnd_mod_get(ssi); in rsnd_ssi_hw_stop()
234 if (0 == ssi->usrcnt) { in rsnd_ssi_hw_stop()
239 ssi->usrcnt--; in rsnd_ssi_hw_stop()
241 if (0 == ssi->usrcnt) { in rsnd_ssi_hw_stop()
246 cr = ssi->cr_own | in rsnd_ssi_hw_stop()
247 ssi->cr_clk; in rsnd_ssi_hw_stop()
260 struct rsnd_ssi *ssi_parent = rsnd_ssi_parent(ssi); in rsnd_ssi_hw_stop()
265 rsnd_ssi_master_clk_stop(ssi); in rsnd_ssi_hw_stop()
270 ssi->chan = 0; in rsnd_ssi_hw_stop()
284 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_init() local
325 ssi->cr_own = cr; in rsnd_ssi_init()
326 ssi->err = -1; /* ignore 1st error */ in rsnd_ssi_init()
335 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_quit() local
338 if (ssi->err > 0) in rsnd_ssi_quit()
340 rsnd_mod_name(mod), rsnd_mod_id(mod), ssi->err); in rsnd_ssi_quit()
342 ssi->cr_own = 0; in rsnd_ssi_quit()
343 ssi->err = 0; in rsnd_ssi_quit()
353 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_hw_params() local
354 struct rsnd_ssi *ssi_parent = rsnd_ssi_parent(ssi); in rsnd_ssi_hw_params()
361 if (ssi->usrcnt) { in rsnd_ssi_hw_params()
366 if (ssi->chan != chan) in rsnd_ssi_hw_params()
371 ssi->chan = chan; in rsnd_ssi_hw_params()
379 static void rsnd_ssi_record_error(struct rsnd_ssi *ssi, u32 status) in rsnd_ssi_record_error() argument
381 struct rsnd_mod *mod = rsnd_mod_get(ssi); in rsnd_ssi_record_error()
385 ssi->err++; in rsnd_ssi_record_error()
396 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_start() local
400 rsnd_ssi_hw_start(ssi, io); in rsnd_ssi_start()
411 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_stop() local
415 rsnd_ssi_record_error(ssi, rsnd_mod_read(mod, SSISR)); in rsnd_ssi_stop()
417 rsnd_ssi_hw_stop(io, ssi); in rsnd_ssi_stop()
427 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in __rsnd_ssi_interrupt() local
471 if (ssi->err < 1024) in __rsnd_ssi_interrupt()
477 rsnd_ssi_record_error(ssi, status); in __rsnd_ssi_interrupt()
503 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_pio_probe() local
506 ret = devm_request_irq(dev, ssi->info->irq, in rsnd_ssi_pio_probe()
528 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_dma_probe() local
530 int dma_id = ssi->info->dma_id; in rsnd_ssi_dma_probe()
533 ret = devm_request_irq(dev, ssi->info->irq, in rsnd_ssi_dma_probe()
551 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in rsnd_ssi_dma_remove() local
553 int irq = ssi->info->irq; in rsnd_ssi_dma_remove()
660 return rsnd_mod_get((struct rsnd_ssi *)(priv->ssi) + id); in rsnd_ssi_mod_get()
665 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); in __rsnd_ssi_is_pin_sharing() local
667 return !!(rsnd_ssi_mode_flags(ssi) & RSND_SSI_CLK_PIN_SHARE); in __rsnd_ssi_is_pin_sharing()
670 static void rsnd_ssi_parent_setup(struct rsnd_priv *priv, struct rsnd_ssi *ssi) in rsnd_ssi_parent_setup() argument
672 struct rsnd_mod *mod = rsnd_mod_get(ssi); in rsnd_ssi_parent_setup()
680 ssi->parent = rsnd_mod_to_ssi(rsnd_ssi_mod_get(priv, 0)); in rsnd_ssi_parent_setup()
683 ssi->parent = rsnd_mod_to_ssi(rsnd_ssi_mod_get(priv, 3)); in rsnd_ssi_parent_setup()
686 ssi->parent = rsnd_mod_to_ssi(rsnd_ssi_mod_get(priv, 7)); in rsnd_ssi_parent_setup()
762 struct rsnd_ssi *ssi; in rsnd_ssi_probe() local
772 ssi = devm_kzalloc(dev, sizeof(*ssi) * nr, GFP_KERNEL); in rsnd_ssi_probe()
773 if (!ssi) in rsnd_ssi_probe()
776 priv->ssi = ssi; in rsnd_ssi_probe()
779 for_each_rsnd_ssi(ssi, priv, i) { in rsnd_ssi_probe()
789 ssi->info = pinfo; in rsnd_ssi_probe()
794 else if (rsnd_ssi_pio_available(ssi)) in rsnd_ssi_probe()
797 ret = rsnd_mod_init(priv, rsnd_mod_get(ssi), ops, clk, in rsnd_ssi_probe()
802 rsnd_ssi_parent_setup(priv, ssi); in rsnd_ssi_probe()
811 struct rsnd_ssi *ssi; in rsnd_ssi_remove() local
814 for_each_rsnd_ssi(ssi, priv, i) { in rsnd_ssi_remove()
815 rsnd_mod_quit(rsnd_mod_get(ssi)); in rsnd_ssi_remove()