Lines Matching refs:mod

82 	struct rsnd_mod mod;
114 #define rsnd_mod_to_ssi(_mod) container_of((_mod), struct rsnd_ssi, mod)
116 #define rsnd_ssi_is_multi_secondary(mod, io) \
117 (rsnd_ssi_multi_secondaries(io) & (1 << rsnd_mod_id(mod)))
118 #define rsnd_ssi_is_run_mods(mod, io) \
119 (rsnd_ssi_run_mods(io) & (1 << rsnd_mod_id(mod)))
120 #define rsnd_ssi_can_output_clk(mod) (!__rsnd_ssi_is_pin_sharing(mod))
124 struct rsnd_mod *mod = rsnd_io_to_mod_ssi(io);
125 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
128 if (!rsnd_ssi_is_dma_mode(mod))
139 static void rsnd_ssi_status_clear(struct rsnd_mod *mod)
141 rsnd_mod_write(mod, SSISR, 0);
144 static u32 rsnd_ssi_status_get(struct rsnd_mod *mod)
146 return rsnd_mod_read(mod, SSISR);
149 static void rsnd_ssi_status_check(struct rsnd_mod *mod,
152 struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
158 status = rsnd_ssi_status_get(mod);
165 dev_warn(dev, "%s status check failed\n", rsnd_mod_name(mod));
179 struct rsnd_mod *mod = rsnd_io_to_mod(io, types[i]);
181 if (!mod)
184 mask |= 1 << rsnd_mod_id(mod);
266 static int rsnd_ssi_master_clk_start(struct rsnd_mod *mod,
272 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
283 if (!rsnd_ssi_can_output_clk(mod))
286 if (rsnd_ssi_is_multi_secondary(mod, io))
313 ret = rsnd_adg_ssi_clk_try_start(mod, main_rate);
334 rsnd_mod_name(mod), chan, rate);
343 static void rsnd_ssi_master_clk_stop(struct rsnd_mod *mod,
347 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
352 if (!rsnd_ssi_can_output_clk(mod))
362 rsnd_adg_ssi_clk_stop(mod);
365 static void rsnd_ssi_config_init(struct rsnd_mod *mod,
372 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
412 if (rsnd_ssi_is_parent(mod, io))
445 if (rsnd_ssi_is_dma_mode(mod)) {
458 static void rsnd_ssi_register_setup(struct rsnd_mod *mod)
460 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
462 rsnd_mod_write(mod, SSIWSR, ssi->wsr);
463 rsnd_mod_write(mod, SSICR, ssi->cr_own |
470 * SSI mod common functions
472 static int rsnd_ssi_init(struct rsnd_mod *mod,
476 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
479 if (!rsnd_ssi_is_run_mods(mod, io))
482 ret = rsnd_ssi_master_clk_start(mod, io);
488 ret = rsnd_mod_power_on(mod);
492 rsnd_ssi_config_init(mod, io);
494 rsnd_ssi_register_setup(mod);
497 rsnd_ssi_status_clear(mod);
502 static int rsnd_ssi_quit(struct rsnd_mod *mod,
506 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
509 if (!rsnd_ssi_is_run_mods(mod, io))
513 dev_err(dev, "%s usrcnt error\n", rsnd_mod_name(mod));
517 rsnd_ssi_master_clk_stop(mod, io);
519 rsnd_mod_power_off(mod);
532 static int rsnd_ssi_hw_params(struct rsnd_mod *mod,
551 static int rsnd_ssi_start(struct rsnd_mod *mod,
555 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
557 if (!rsnd_ssi_is_run_mods(mod, io))
571 if (rsnd_ssi_is_parent(mod, io))
576 rsnd_mod_write(mod, SSICR, ssi->cr_own |
584 static int rsnd_ssi_stop(struct rsnd_mod *mod,
588 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
591 if (!rsnd_ssi_is_run_mods(mod, io))
594 if (rsnd_ssi_is_parent(mod, io))
606 rsnd_mod_write(mod, SSICR, cr | ssi->cr_en);
607 rsnd_ssi_status_check(mod, DIRQ);
620 rsnd_mod_write(mod, SSICR, cr); /* disabled all */
621 rsnd_ssi_status_check(mod, IIRQ);
628 static int rsnd_ssi_irq(struct rsnd_mod *mod,
635 int id = rsnd_mod_id(mod);
643 if (rsnd_ssi_is_parent(mod, io))
646 if (!rsnd_ssi_is_run_mods(mod, io))
650 val = rsnd_ssi_is_dma_mode(mod) ? 0x0e000000 : 0x0f000000;
665 rsnd_mod_write(mod, SSI_INT_ENABLE, val);
670 static bool rsnd_ssi_pio_interrupt(struct rsnd_mod *mod,
672 static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
675 struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
677 int is_dma = rsnd_ssi_is_dma_mode(mod);
688 status = rsnd_ssi_status_get(mod);
692 elapsed = rsnd_ssi_pio_interrupt(mod, io);
697 rsnd_mod_name(mod), status);
702 stop |= rsnd_ssiu_busif_err_status_clear(mod);
704 rsnd_ssi_status_clear(mod);
718 struct rsnd_mod *mod = data;
720 rsnd_mod_interrupt(mod, __rsnd_ssi_interrupt);
725 static u32 *rsnd_ssi_get_status(struct rsnd_mod *mod,
743 * OTOH, using each mod's status is good for MUX case.
757 return rsnd_mod_get_status(mod, io, type);
763 static void rsnd_ssi_parent_attach(struct rsnd_mod *mod,
767 struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
769 if (!__rsnd_ssi_is_pin_sharing(mod))
775 if (rsnd_ssi_is_multi_secondary(mod, io))
778 switch (rsnd_mod_id(mod)) {
793 static int rsnd_ssi_pcm_new(struct rsnd_mod *mod,
802 rsnd_ssi_parent_attach(mod, io);
807 static int rsnd_ssi_common_probe(struct rsnd_mod *mod,
812 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
819 if (rsnd_ssi_is_multi_secondary(mod, io))
834 * mod->status.
842 dev_name(dev), mod);
850 static int rsnd_ssi_common_remove(struct rsnd_mod *mod,
854 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
857 /* Do nothing if non SSI (= SSI parent, multi SSI) mod */
858 if (pure_ssi_mod != mod)
863 free_irq(ssi->irq, mod);
874 static bool rsnd_ssi_pio_interrupt(struct rsnd_mod *mod,
878 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
893 rsnd_mod_write(mod, SSITDR, (*buf) << shift);
895 *buf = (rsnd_mod_read(mod, SSIRDR) >> shift);
917 static int rsnd_ssi_pio_init(struct rsnd_mod *mod,
922 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
924 if (!rsnd_ssi_is_parent(mod, io)) {
932 return rsnd_ssi_init(mod, io, priv);
935 static int rsnd_ssi_pio_pointer(struct rsnd_mod *mod,
939 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
962 static int rsnd_ssi_dma_probe(struct rsnd_mod *mod,
972 if (rsnd_ssi_is_multi_secondary(mod, io))
975 ret = rsnd_ssi_common_probe(mod, io, priv);
980 ret = rsnd_dma_attach(io, mod, &io->dma);
985 static int rsnd_ssi_fallback(struct rsnd_mod *mod,
998 mod->ops = &rsnd_ssi_pio_ops;
1000 dev_info(dev, "%s fallback to PIO mode\n", rsnd_mod_name(mod));
1006 struct rsnd_mod *mod)
1008 struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
1029 SSI_NAME, mod, name);
1035 struct rsnd_mod *mod)
1038 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
1044 seq_printf(m, "pin share: %d\n", __rsnd_ssi_is_pin_sharing(mod));
1045 seq_printf(m, "can out clk: %d\n", rsnd_ssi_can_output_clk(mod));
1046 seq_printf(m, "multi secondary: %d\n", rsnd_ssi_is_multi_secondary(mod, io));
1052 rsnd_debugfs_mod_reg_show(m, mod, RSND_GEN2_SSI,
1053 rsnd_mod_id(mod) * 0x40, 0x40);
1077 int rsnd_ssi_is_dma_mode(struct rsnd_mod *mod)
1079 return mod->ops == &rsnd_ssi_dma_ops;
1083 * ssi mod function
1085 static void rsnd_ssi_connect(struct rsnd_mod *mod,
1102 rsnd_dai_connect(mod, io, type);
1126 struct rsnd_mod *mod;
1134 mod = rsnd_ssi_mod_get(priv, i);
1137 rsnd_ssi_connect(mod, &rdai->playback);
1139 rsnd_ssi_connect(mod, &rdai->capture);
1154 int __rsnd_ssi_is_pin_sharing(struct rsnd_mod *mod)
1156 if (!mod)
1159 return !!(rsnd_flags_has(rsnd_mod_to_ssi(mod), RSND_SSI_CLK_PIN_SHARE));