Lines Matching defs: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);
342 static void rsnd_ssi_master_clk_stop(struct rsnd_mod *mod,
346 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
351 if (!rsnd_ssi_can_output_clk(mod))
361 rsnd_adg_ssi_clk_stop(mod);
364 static void rsnd_ssi_config_init(struct rsnd_mod *mod,
371 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
411 if (rsnd_ssi_is_parent(mod, io))
444 if (rsnd_ssi_is_dma_mode(mod)) {
457 static void rsnd_ssi_register_setup(struct rsnd_mod *mod)
459 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
461 rsnd_mod_write(mod, SSIWSR, ssi->wsr);
462 rsnd_mod_write(mod, SSICR, ssi->cr_own |
469 * SSI mod common functions
471 static int rsnd_ssi_init(struct rsnd_mod *mod,
475 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
478 if (!rsnd_ssi_is_run_mods(mod, io))
481 ret = rsnd_ssi_master_clk_start(mod, io);
487 ret = rsnd_mod_power_on(mod);
491 rsnd_ssi_config_init(mod, io);
493 rsnd_ssi_register_setup(mod);
496 rsnd_ssi_status_clear(mod);
501 static int rsnd_ssi_quit(struct rsnd_mod *mod,
505 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
508 if (!rsnd_ssi_is_run_mods(mod, io))
512 dev_err(dev, "%s usrcnt error\n", rsnd_mod_name(mod));
516 rsnd_ssi_master_clk_stop(mod, io);
518 rsnd_mod_power_off(mod);
531 static int rsnd_ssi_hw_params(struct rsnd_mod *mod,
550 static int rsnd_ssi_start(struct rsnd_mod *mod,
554 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
556 if (!rsnd_ssi_is_run_mods(mod, io))
570 if (rsnd_ssi_is_parent(mod, io))
575 rsnd_mod_write(mod, SSICR, ssi->cr_own |
583 static int rsnd_ssi_stop(struct rsnd_mod *mod,
587 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
590 if (!rsnd_ssi_is_run_mods(mod, io))
593 if (rsnd_ssi_is_parent(mod, io))
605 rsnd_mod_write(mod, SSICR, cr | ssi->cr_en);
606 rsnd_ssi_status_check(mod, DIRQ);
619 rsnd_mod_write(mod, SSICR, cr); /* disabled all */
620 rsnd_ssi_status_check(mod, IIRQ);
627 static int rsnd_ssi_irq(struct rsnd_mod *mod,
634 int id = rsnd_mod_id(mod);
642 if (rsnd_ssi_is_parent(mod, io))
645 if (!rsnd_ssi_is_run_mods(mod, io))
649 val = rsnd_ssi_is_dma_mode(mod) ? 0x0e000000 : 0x0f000000;
664 rsnd_mod_write(mod, SSI_INT_ENABLE, val);
669 static bool rsnd_ssi_pio_interrupt(struct rsnd_mod *mod,
671 static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
674 struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
676 int is_dma = rsnd_ssi_is_dma_mode(mod);
687 status = rsnd_ssi_status_get(mod);
691 elapsed = rsnd_ssi_pio_interrupt(mod, io);
696 rsnd_mod_name(mod), status);
701 stop |= rsnd_ssiu_busif_err_status_clear(mod);
703 rsnd_ssi_status_clear(mod);
717 struct rsnd_mod *mod = data;
719 rsnd_mod_interrupt(mod, __rsnd_ssi_interrupt);
724 static u32 *rsnd_ssi_get_status(struct rsnd_mod *mod,
742 * OTOH, using each mod's status is good for MUX case.
756 return rsnd_mod_get_status(mod, io, type);
762 static void rsnd_ssi_parent_attach(struct rsnd_mod *mod,
766 struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
768 if (!__rsnd_ssi_is_pin_sharing(mod))
774 if (rsnd_ssi_is_multi_secondary(mod, io))
777 switch (rsnd_mod_id(mod)) {
792 static int rsnd_ssi_pcm_new(struct rsnd_mod *mod,
801 rsnd_ssi_parent_attach(mod, io);
806 static int rsnd_ssi_common_probe(struct rsnd_mod *mod,
811 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
818 if (rsnd_ssi_is_multi_secondary(mod, io))
833 * mod->status.
841 dev_name(dev), mod);
849 static int rsnd_ssi_common_remove(struct rsnd_mod *mod,
853 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
856 /* Do nothing if non SSI (= SSI parent, multi SSI) mod */
857 if (pure_ssi_mod != mod)
862 free_irq(ssi->irq, mod);
873 static bool rsnd_ssi_pio_interrupt(struct rsnd_mod *mod,
877 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
892 rsnd_mod_write(mod, SSITDR, (*buf) << shift);
894 *buf = (rsnd_mod_read(mod, SSIRDR) >> shift);
916 static int rsnd_ssi_pio_init(struct rsnd_mod *mod,
921 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
923 if (!rsnd_ssi_is_parent(mod, io)) {
931 return rsnd_ssi_init(mod, io, priv);
934 static int rsnd_ssi_pio_pointer(struct rsnd_mod *mod,
938 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
961 static int rsnd_ssi_dma_probe(struct rsnd_mod *mod,
971 if (rsnd_ssi_is_multi_secondary(mod, io))
974 ret = rsnd_ssi_common_probe(mod, io, priv);
979 ret = rsnd_dma_attach(io, mod, &io->dma);
984 static int rsnd_ssi_fallback(struct rsnd_mod *mod,
997 mod->ops = &rsnd_ssi_pio_ops;
999 dev_info(dev, "%s fallback to PIO mode\n", rsnd_mod_name(mod));
1005 struct rsnd_mod *mod)
1007 struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
1028 SSI_NAME, mod, name);
1034 struct rsnd_mod *mod)
1037 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
1043 seq_printf(m, "pin share: %d\n", __rsnd_ssi_is_pin_sharing(mod));
1044 seq_printf(m, "can out clk: %d\n", rsnd_ssi_can_output_clk(mod));
1045 seq_printf(m, "multi secondary: %d\n", rsnd_ssi_is_multi_secondary(mod, io));
1051 rsnd_debugfs_mod_reg_show(m, mod, RSND_GEN2_SSI,
1052 rsnd_mod_id(mod) * 0x40, 0x40);
1076 int rsnd_ssi_is_dma_mode(struct rsnd_mod *mod)
1078 return mod->ops == &rsnd_ssi_dma_ops;
1082 * ssi mod function
1084 static void rsnd_ssi_connect(struct rsnd_mod *mod,
1101 rsnd_dai_connect(mod, io, type);
1125 struct rsnd_mod *mod;
1133 mod = rsnd_ssi_mod_get(priv, i);
1136 rsnd_ssi_connect(mod, &rdai->playback);
1138 rsnd_ssi_connect(mod, &rdai->capture);
1153 int __rsnd_ssi_is_pin_sharing(struct rsnd_mod *mod)
1155 if (!mod)
1158 return !!(rsnd_flags_has(rsnd_mod_to_ssi(mod), RSND_SSI_CLK_PIN_SHARE));