Lines Matching refs:mod

80 	struct rsnd_mod mod;
112 #define rsnd_mod_to_ssi(_mod) container_of((_mod), struct rsnd_ssi, mod)
114 #define rsnd_ssi_is_multi_secondary(mod, io) \
115 (rsnd_ssi_multi_secondaries(io) & (1 << rsnd_mod_id(mod)))
116 #define rsnd_ssi_is_run_mods(mod, io) \
117 (rsnd_ssi_run_mods(io) & (1 << rsnd_mod_id(mod)))
118 #define rsnd_ssi_can_output_clk(mod) (!__rsnd_ssi_is_pin_sharing(mod))
122 struct rsnd_mod *mod = rsnd_io_to_mod_ssi(io);
123 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
126 if (!rsnd_ssi_is_dma_mode(mod))
137 static void rsnd_ssi_status_clear(struct rsnd_mod *mod)
139 rsnd_mod_write(mod, SSISR, 0);
142 static u32 rsnd_ssi_status_get(struct rsnd_mod *mod)
144 return rsnd_mod_read(mod, SSISR);
147 static void rsnd_ssi_status_check(struct rsnd_mod *mod,
150 struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
156 status = rsnd_ssi_status_get(mod);
163 dev_warn(dev, "%s status check failed\n", rsnd_mod_name(mod));
177 struct rsnd_mod *mod = rsnd_io_to_mod(io, types[i]);
179 if (!mod)
182 mask |= 1 << rsnd_mod_id(mod);
264 static int rsnd_ssi_master_clk_start(struct rsnd_mod *mod,
270 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
281 if (!rsnd_ssi_can_output_clk(mod))
284 if (rsnd_ssi_is_multi_secondary(mod, io))
311 ret = rsnd_adg_ssi_clk_try_start(mod, main_rate);
332 rsnd_mod_name(mod), chan, rate);
341 static void rsnd_ssi_master_clk_stop(struct rsnd_mod *mod,
345 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
350 if (!rsnd_ssi_can_output_clk(mod))
360 rsnd_adg_ssi_clk_stop(mod);
363 static void rsnd_ssi_config_init(struct rsnd_mod *mod,
370 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
410 if (rsnd_ssi_is_parent(mod, io))
443 if (rsnd_ssi_is_dma_mode(mod)) {
456 static void rsnd_ssi_register_setup(struct rsnd_mod *mod)
458 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
460 rsnd_mod_write(mod, SSIWSR, ssi->wsr);
461 rsnd_mod_write(mod, SSICR, ssi->cr_own |
468 * SSI mod common functions
470 static int rsnd_ssi_init(struct rsnd_mod *mod,
474 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
477 if (!rsnd_ssi_is_run_mods(mod, io))
480 ret = rsnd_ssi_master_clk_start(mod, io);
486 ret = rsnd_mod_power_on(mod);
490 rsnd_ssi_config_init(mod, io);
492 rsnd_ssi_register_setup(mod);
495 rsnd_ssi_status_clear(mod);
500 static int rsnd_ssi_quit(struct rsnd_mod *mod,
504 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
507 if (!rsnd_ssi_is_run_mods(mod, io))
511 dev_err(dev, "%s usrcnt error\n", rsnd_mod_name(mod));
515 rsnd_ssi_master_clk_stop(mod, io);
517 rsnd_mod_power_off(mod);
530 static int rsnd_ssi_hw_params(struct rsnd_mod *mod,
549 static int rsnd_ssi_start(struct rsnd_mod *mod,
553 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
555 if (!rsnd_ssi_is_run_mods(mod, io))
569 if (rsnd_ssi_is_parent(mod, io))
574 rsnd_mod_write(mod, SSICR, ssi->cr_own |
582 static int rsnd_ssi_stop(struct rsnd_mod *mod,
586 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
589 if (!rsnd_ssi_is_run_mods(mod, io))
592 if (rsnd_ssi_is_parent(mod, io))
604 rsnd_mod_write(mod, SSICR, cr | ssi->cr_en);
605 rsnd_ssi_status_check(mod, DIRQ);
618 rsnd_mod_write(mod, SSICR, cr); /* disabled all */
619 rsnd_ssi_status_check(mod, IIRQ);
626 static int rsnd_ssi_irq(struct rsnd_mod *mod,
633 int id = rsnd_mod_id(mod);
641 if (rsnd_ssi_is_parent(mod, io))
644 if (!rsnd_ssi_is_run_mods(mod, io))
648 val = rsnd_ssi_is_dma_mode(mod) ? 0x0e000000 : 0x0f000000;
663 rsnd_mod_write(mod, SSI_INT_ENABLE, val);
668 static bool rsnd_ssi_pio_interrupt(struct rsnd_mod *mod,
670 static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
673 struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
675 int is_dma = rsnd_ssi_is_dma_mode(mod);
686 status = rsnd_ssi_status_get(mod);
690 elapsed = rsnd_ssi_pio_interrupt(mod, io);
695 rsnd_mod_name(mod), status);
700 stop |= rsnd_ssiu_busif_err_status_clear(mod);
702 rsnd_ssi_status_clear(mod);
716 struct rsnd_mod *mod = data;
718 rsnd_mod_interrupt(mod, __rsnd_ssi_interrupt);
723 static u32 *rsnd_ssi_get_status(struct rsnd_mod *mod,
741 * OTOH, using each mod's status is good for MUX case.
755 return rsnd_mod_get_status(mod, io, type);
761 static void rsnd_ssi_parent_attach(struct rsnd_mod *mod,
765 struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
767 if (!__rsnd_ssi_is_pin_sharing(mod))
773 if (rsnd_ssi_is_multi_secondary(mod, io))
776 switch (rsnd_mod_id(mod)) {
791 static int rsnd_ssi_pcm_new(struct rsnd_mod *mod,
800 rsnd_ssi_parent_attach(mod, io);
805 static int rsnd_ssi_common_probe(struct rsnd_mod *mod,
810 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
817 if (rsnd_ssi_is_multi_secondary(mod, io))
832 * mod->status.
840 dev_name(dev), mod);
848 static int rsnd_ssi_common_remove(struct rsnd_mod *mod,
852 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
855 /* Do nothing if non SSI (= SSI parent, multi SSI) mod */
856 if (pure_ssi_mod != mod)
861 free_irq(ssi->irq, mod);
872 static bool rsnd_ssi_pio_interrupt(struct rsnd_mod *mod,
876 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
891 rsnd_mod_write(mod, SSITDR, (*buf) << shift);
893 *buf = (rsnd_mod_read(mod, SSIRDR) >> shift);
915 static int rsnd_ssi_pio_init(struct rsnd_mod *mod,
920 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
922 if (!rsnd_ssi_is_parent(mod, io)) {
930 return rsnd_ssi_init(mod, io, priv);
933 static int rsnd_ssi_pio_pointer(struct rsnd_mod *mod,
937 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
960 static int rsnd_ssi_dma_probe(struct rsnd_mod *mod,
970 if (rsnd_ssi_is_multi_secondary(mod, io))
973 ret = rsnd_ssi_common_probe(mod, io, priv);
978 ret = rsnd_dma_attach(io, mod, &io->dma);
983 static int rsnd_ssi_fallback(struct rsnd_mod *mod,
996 mod->ops = &rsnd_ssi_pio_ops;
998 dev_info(dev, "%s fallback to PIO mode\n", rsnd_mod_name(mod));
1004 struct rsnd_mod *mod)
1006 struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
1027 SSI_NAME, mod, name);
1033 struct rsnd_mod *mod)
1036 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
1042 seq_printf(m, "pin share: %d\n", __rsnd_ssi_is_pin_sharing(mod));
1043 seq_printf(m, "can out clk: %d\n", rsnd_ssi_can_output_clk(mod));
1044 seq_printf(m, "multi secondary: %d\n", rsnd_ssi_is_multi_secondary(mod, io));
1050 rsnd_debugfs_mod_reg_show(m, mod, RSND_GEN2_SSI,
1051 rsnd_mod_id(mod) * 0x40, 0x40);
1075 int rsnd_ssi_is_dma_mode(struct rsnd_mod *mod)
1077 return mod->ops == &rsnd_ssi_dma_ops;
1081 * ssi mod function
1083 static void rsnd_ssi_connect(struct rsnd_mod *mod,
1100 rsnd_dai_connect(mod, io, type);
1124 struct rsnd_mod *mod;
1132 mod = rsnd_ssi_mod_get(priv, i);
1135 rsnd_ssi_connect(mod, &rdai->playback);
1137 rsnd_ssi_connect(mod, &rdai->capture);
1152 int __rsnd_ssi_is_pin_sharing(struct rsnd_mod *mod)
1154 if (!mod)
1157 return !!(rsnd_flags_has(rsnd_mod_to_ssi(mod), RSND_SSI_CLK_PIN_SHARE));