Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 07541396 authored by Stephen Warren's avatar Stephen Warren Committed by Mark Brown
Browse files

ASoC: Tegra: Don't return mclk_changed from utils_set_rate



Only the clock programming code needs to know whether the clocks changed,
and that is encapsulated within tegra_asoc_utils_set_rate(). The machine
driver's call to snd_soc_dai_set_sysclk(codec_dai, ...) is safe
irrespective of whether the clocks changed.

(Applying Mark's TrimSlice review comments to the existing driver)

Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
Acked-by: default avatarLiam Girdwood <lrg@ti.com>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent acb8303f
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -28,9 +28,10 @@
#include "tegra_asoc_utils.h"

int tegra_asoc_utils_set_rate(struct tegra_asoc_utils_data *data, int srate,
			      int mclk, int *mclk_change)
			      int mclk)
{
	int new_baseclock;
	bool clk_change;
	int err;

	switch (srate) {
@@ -52,9 +53,9 @@ int tegra_asoc_utils_set_rate(struct tegra_asoc_utils_data *data, int srate,
		return -EINVAL;
	}

	*mclk_change = ((new_baseclock != data->set_baseclock) ||
	clk_change = ((new_baseclock != data->set_baseclock) ||
			(mclk != data->set_mclk));
	if (!*mclk_change)
	if (!clk_change)
		return 0;

	data->set_baseclock = 0;
+1 −1
Original line number Diff line number Diff line
@@ -36,7 +36,7 @@ struct tegra_asoc_utils_data {
};

int tegra_asoc_utils_set_rate(struct tegra_asoc_utils_data *data, int srate,
			      int mclk, int *mclk_change);
			      int mclk);
int tegra_asoc_utils_init(struct tegra_asoc_utils_data *data,
			  struct device *dev);
void tegra_asoc_utils_fini(struct tegra_asoc_utils_data *data);
+7 −10
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ static int tegra_wm8903_hw_params(struct snd_pcm_substream *substream,
	struct snd_soc_codec *codec = rtd->codec;
	struct snd_soc_card *card = codec->card;
	struct tegra_wm8903 *machine = snd_soc_card_get_drvdata(card);
	int srate, mclk, mclk_change;
	int srate, mclk;
	int err;

	srate = params_rate(params);
@@ -90,8 +90,7 @@ static int tegra_wm8903_hw_params(struct snd_pcm_substream *substream,
	while (mclk < 6000000)
		mclk *= 2;

	err = tegra_asoc_utils_set_rate(&machine->util_data, srate, mclk,
					&mclk_change);
	err = tegra_asoc_utils_set_rate(&machine->util_data, srate, mclk);
	if (err < 0) {
		dev_err(card->dev, "Can't configure clocks\n");
		return err;
@@ -115,14 +114,12 @@ static int tegra_wm8903_hw_params(struct snd_pcm_substream *substream,
		return err;
	}

	if (mclk_change) {
	err = snd_soc_dai_set_sysclk(codec_dai, 0, mclk,
					SND_SOC_CLOCK_IN);
	if (err < 0) {
		dev_err(card->dev, "codec_dai clock not set\n");
		return err;
	}
	}

	return 0;
}