diff options
| -rw-r--r-- | sound/soc/tegra-alt/include/tegra_asoc_utils_alt.h | 1 | ||||
| -rw-r--r-- | sound/soc/tegra-alt/machine_drivers/tegra_machine_driver_mobile.c | 5 | ||||
| -rw-r--r-- | sound/soc/tegra-alt/utils/tegra_asoc_utils_alt.c | 10 |
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 | ||
| 174 | update_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) { |
