asoc: tegra: utils: fix for multiple instances of extern1 clock.
Ankit Gupta [Wed, 23 May 2012 06:25:13 +0000 (11:25 +0530)]
The extern1 codec clock was not getting switched off whenever
codec goes below BIAS_OFF level. Moreover, there were two
instances of extern1 clock whenever codec was on. Reason behind
this was that, those codecs for which probe function was called
and were not present on board, turned on their extern1 clock, but
clean up routine (for switch device register failure) was not able
to turn off the clock. With this change, a conditional check is
put to turn off the clock.

(Bug 984678)
Signed-off-by: Ankit Gupta <ankitgupta@nvidia.com>

Change-Id: I585ecf73c0cabca856592dcd84e67588dfe13beb
Reviewed-on: http://git-master/r/104073
Reviewed-by: Automatic_Commit_Validation_User
Tested-by: Ankit Gupta (Engrg-SW) <ankitgupta@nvidia.com>
Reviewed-by: Prashant Gaikwad <pgaikwad@nvidia.com>
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>

sound/soc/tegra/tegra_asoc_utils.c

index b134f08..dfbafa0 100644 (file)
@@ -276,6 +276,10 @@ void tegra_asoc_utils_fini(struct tegra_asoc_utils_data *data)
                clk_put(data->clk_out1);
 
        clk_put(data->clk_cdev1);
+       /* Just to make sure that clk_cdev1 should turn off in case if it is
+        * switched on by some codec whose hw switch is not registered.*/
+       if (tegra_is_clk_enabled(data->clk_cdev1))
+               clk_disable(data->clk_cdev1);
 
        if (!IS_ERR(data->clk_pll_a_out0))
                clk_put(data->clk_pll_a_out0);