ASoC: rsnd: rsnd_ssi_can_output_clk() macro
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tue, 8 Aug 2017 01:32:42 +0000 (01:32 +0000)
committerMark Brown <broonie@kernel.org>
Tue, 8 Aug 2017 11:03:50 +0000 (12:03 +0100)
For example SSI0/SSI1 case, SSI1 can share pin with SSI0.
And then, SSI1 needs SSI0's clock.
This clock controlling is very picky and difficult to understand
in current code.

This patch adds new rsnd_ssi_can_output_clk() macro,
the code will be more understandable.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sh/rcar/ssi.c

index 3ee7b2de7dea96154ef438e721e37880d17843cc..434996d4054a5b4521f870ce80abe25f5fc80ed3 100644 (file)
@@ -106,6 +106,7 @@ struct rsnd_ssi {
        (rsnd_ssi_multi_slaves(io) & (1 << rsnd_mod_id(mod)))
 #define rsnd_ssi_is_run_mods(mod, io) \
        (rsnd_ssi_run_mods(io) & (1 << rsnd_mod_id(mod)))
+#define rsnd_ssi_can_output_clk(mod) (!__rsnd_ssi_is_pin_sharing(mod))
 
 int rsnd_ssi_hdmi_port(struct rsnd_dai_stream *io)
 {
@@ -255,7 +256,6 @@ static int rsnd_ssi_master_clk_start(struct rsnd_mod *mod,
        struct device *dev = rsnd_priv_to_dev(priv);
        struct rsnd_dai *rdai = rsnd_io_to_rdai(io);
        struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
-       struct rsnd_mod *ssi_parent_mod = rsnd_io_to_mod_ssip(io);
        int chan = rsnd_runtime_channel_for_ssi(io);
        int idx, ret;
        unsigned int main_rate;
@@ -266,7 +266,7 @@ static int rsnd_ssi_master_clk_start(struct rsnd_mod *mod,
        if (!rsnd_rdai_is_clk_master(rdai))
                return 0;
 
-       if (ssi_parent_mod && !rsnd_ssi_is_parent(mod, io))
+       if (!rsnd_ssi_can_output_clk(mod))
                return 0;
 
        if (rsnd_ssi_is_multi_slave(mod, io))
@@ -307,12 +307,11 @@ static void rsnd_ssi_master_clk_stop(struct rsnd_mod *mod,
 {
        struct rsnd_dai *rdai = rsnd_io_to_rdai(io);
        struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
-       struct rsnd_mod *ssi_parent_mod = rsnd_io_to_mod_ssip(io);
 
        if (!rsnd_rdai_is_clk_master(rdai))
                return;
 
-       if (ssi_parent_mod && !rsnd_ssi_is_parent(mod, io))
+       if (!rsnd_ssi_can_output_clk(mod))
                return;
 
        if (ssi->usrcnt > 1)