summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/soc/tegra-alt/include/tegra_asoc_utils_alt.h1
-rw-r--r--sound/soc/tegra-alt/machine_drivers/tegra_machine_driver_mobile.c5
-rw-r--r--sound/soc/tegra-alt/utils/tegra_asoc_utils_alt.c10
3 files changed, 13 insertions, 3 deletions
diff --git a/sound/soc/tegra-alt/include/tegra_asoc_utils_alt.h b/sound/soc/tegra-alt/include/tegra_asoc_utils_alt.h
index 03eaff99f..8140880a1 100644
--- a/sound/soc/tegra-alt/include/tegra_asoc_utils_alt.h
+++ b/sound/soc/tegra-alt/include/tegra_asoc_utils_alt.h
@@ -62,6 +62,7 @@ struct tegra_asoc_audio_clock_info {
62 u32 set_pll_out_rate; 62 u32 set_pll_out_rate;
63 u32 set_aud_mclk_rate; 63 u32 set_aud_mclk_rate;
64 u32 mclk_scale; 64 u32 mclk_scale;
65 bool fixed_pll;
65 66
66 /* FIXME: below would be removed going ahead */ 67 /* FIXME: below would be removed going ahead */
67 u32 clk_rates[MAX_NUM_RATES]; 68 u32 clk_rates[MAX_NUM_RATES];
diff --git a/sound/soc/tegra-alt/machine_drivers/tegra_machine_driver_mobile.c b/sound/soc/tegra-alt/machine_drivers/tegra_machine_driver_mobile.c
index 053fe320b..b2e8fa27c 100644
--- a/sound/soc/tegra-alt/machine_drivers/tegra_machine_driver_mobile.c
+++ b/sound/soc/tegra-alt/machine_drivers/tegra_machine_driver_mobile.c
@@ -765,6 +765,11 @@ static int tegra_machine_driver_probe(struct platform_device *pdev)
765 &machine->audio_clock.mclk_scale) < 0) 765 &machine->audio_clock.mclk_scale) < 0)
766 dev_dbg(&pdev->dev, "Missing property mclk-fs\n"); 766 dev_dbg(&pdev->dev, "Missing property mclk-fs\n");
767 767
768 if (of_property_read_bool(np, "fixed-pll")) {
769 machine->audio_clock.fixed_pll = true;
770 dev_info(&pdev->dev, "PLL configuration is fixed from DT\n");
771 }
772
768 tegra_machine_dma_set_mask(pdev); 773 tegra_machine_dma_set_mask(pdev);
769 774
770 ret = add_dai_links(pdev); 775 ret = add_dai_links(pdev);
diff --git a/sound/soc/tegra-alt/utils/tegra_asoc_utils_alt.c b/sound/soc/tegra-alt/utils/tegra_asoc_utils_alt.c
index 4dd0bcfda..38927c0a1 100644
--- a/sound/soc/tegra-alt/utils/tegra_asoc_utils_alt.c
+++ b/sound/soc/tegra-alt/utils/tegra_asoc_utils_alt.c
@@ -114,6 +114,9 @@ int tegra_alt_asoc_utils_set_rate(struct tegra_asoc_audio_clock_info *data,
114 unsigned int new_pll_base, req_bclk; 114 unsigned int new_pll_base, req_bclk;
115 int err; 115 int err;
116 116
117 if (data->fixed_pll)
118 goto update_mclk_rate;
119
117 switch (srate) { 120 switch (srate) {
118 case 11025: 121 case 11025:
119 case 22050: 122 case 22050:
@@ -147,9 +150,6 @@ int tegra_alt_asoc_utils_set_rate(struct tegra_asoc_audio_clock_info *data,
147 return err; 150 return err;
148 } 151 }
149 152
150 if (data->mclk_scale)
151 aud_mclk = srate * data->mclk_scale;
152
153 if (data->set_pll_base_rate != new_pll_base) { 153 if (data->set_pll_base_rate != new_pll_base) {
154 err = clk_set_rate(data->clk_pll_base, new_pll_base); 154 err = clk_set_rate(data->clk_pll_base, new_pll_base);
155 if (err) { 155 if (err) {
@@ -171,6 +171,10 @@ int tegra_alt_asoc_utils_set_rate(struct tegra_asoc_audio_clock_info *data,
171 data->set_pll_out_rate = pll_out; 171 data->set_pll_out_rate = pll_out;
172 } 172 }
173 173
174update_mclk_rate:
175 if (data->mclk_scale)
176 aud_mclk = srate * data->mclk_scale;
177
174 if (data->set_aud_mclk_rate != aud_mclk) { 178 if (data->set_aud_mclk_rate != aud_mclk) {
175 err = clk_set_rate(data->clk_aud_mclk, aud_mclk); 179 err = clk_set_rate(data->clk_aud_mclk, aud_mclk);
176 if (err) { 180 if (err) {