Unverified Commit ab89aa0d authored by Lucas Tanure's avatar Lucas Tanure Committed by Mark Brown
Browse files

ASoC: amd: vangogh: Move nau8821 and CPU side code up for future platform



Move nau8821 and CPU side code up in the source so future platforms can
be added.

Signed-off-by: default avatarLucas Tanure <lucas.tanure@collabora.com>
Link: https://lore.kernel.org/r/20230217110850.1045250-8-lucas.tanure@collabora.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 9490fbb8
Loading
Loading
Loading
Loading
+50 −47
Original line number Diff line number Diff line
@@ -30,6 +30,11 @@
static unsigned long acp5x_machine_id;
static struct snd_soc_jack vg_headset;

SND_SOC_DAILINK_DEF(platform,  DAILINK_COMP_ARRAY(COMP_PLATFORM("acp5x_i2s_dma.0")));
SND_SOC_DAILINK_DEF(acp5x_i2s, DAILINK_COMP_ARRAY(COMP_CPU("acp5x_i2s_playcap.0")));
SND_SOC_DAILINK_DEF(acp5x_bt,  DAILINK_COMP_ARRAY(COMP_CPU("acp5x_i2s_playcap.1")));
SND_SOC_DAILINK_DEF(nau8821,   DAILINK_COMP_ARRAY(COMP_CODEC("i2c-NVTN2020:00", "nau8821-hifi")));

static struct snd_soc_jack_pin acp5x_nau8821_jack_pins[] = {
	{
		.pin	= "Headphone",
@@ -41,6 +46,44 @@ static struct snd_soc_jack_pin acp5x_nau8821_jack_pins[] = {
	},
};

static const struct snd_kcontrol_new acp5x_8821_controls[] = {
	SOC_DAPM_PIN_SWITCH("Headphone"),
	SOC_DAPM_PIN_SWITCH("Headset Mic"),
	SOC_DAPM_PIN_SWITCH("Int Mic"),
};

static int platform_clock_control(struct snd_soc_dapm_widget *w,
				  struct snd_kcontrol *k, int event)
{
	struct snd_soc_dapm_context *dapm = w->dapm;
	struct snd_soc_card *card = dapm->card;
	struct snd_soc_dai *dai;
	int ret = 0;

	dai = snd_soc_card_get_codec_dai(card, ACP5X_NUVOTON_CODEC_DAI);
	if (!dai) {
		dev_err(card->dev, "Codec dai not found\n");
		return -EIO;
	}

	if (SND_SOC_DAPM_EVENT_OFF(event)) {
		ret = snd_soc_dai_set_sysclk(dai, NAU8821_CLK_INTERNAL, 0, SND_SOC_CLOCK_IN);
		if (ret < 0) {
			dev_err(card->dev, "set sysclk err = %d\n", ret);
			return -EIO;
		}
	} else {
		ret = snd_soc_dai_set_sysclk(dai, NAU8821_CLK_FLL_BLK, 0, SND_SOC_CLOCK_IN);
		if (ret < 0)
			dev_err(dai->dev, "can't set BLK clock %d\n", ret);
		ret = snd_soc_dai_set_pll(dai, 0, 0, ACP5X_NUVOTON_BCLK, ACP5X_NAU8821_FREQ_OUT);
		if (ret < 0)
			dev_err(dai->dev, "can't set FLL: %d\n", ret);
	}

	return ret;
}

static int acp5x_8821_init(struct snd_soc_pcm_runtime *rtd)
{
	struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component;
@@ -138,6 +181,11 @@ static int acp5x_nau8821_hw_params(struct snd_pcm_substream *substream,
	return ret;
}

static const struct snd_soc_ops acp5x_8821_ops = {
	.startup = acp5x_8821_startup,
	.hw_params = acp5x_nau8821_hw_params,
};

static int acp5x_cs35l41_startup(struct snd_pcm_substream *substream)
{
	struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
@@ -192,11 +240,6 @@ static int acp5x_cs35l41_hw_params(struct snd_pcm_substream *substream,

}

static const struct snd_soc_ops acp5x_8821_ops = {
	.startup = acp5x_8821_startup,
	.hw_params = acp5x_nau8821_hw_params,
};

static const struct snd_soc_ops acp5x_cs35l41_play_ops = {
	.startup = acp5x_cs35l41_startup,
	.hw_params = acp5x_cs35l41_hw_params,
@@ -213,10 +256,6 @@ static struct snd_soc_codec_conf cs35l41_conf[] = {
	},
};

SND_SOC_DAILINK_DEF(platform,  DAILINK_COMP_ARRAY(COMP_PLATFORM("acp5x_i2s_dma.0")));
SND_SOC_DAILINK_DEF(acp5x_i2s, DAILINK_COMP_ARRAY(COMP_CPU("acp5x_i2s_playcap.0")));
SND_SOC_DAILINK_DEF(acp5x_bt,  DAILINK_COMP_ARRAY(COMP_CPU("acp5x_i2s_playcap.1")));
SND_SOC_DAILINK_DEF(nau8821,   DAILINK_COMP_ARRAY(COMP_CODEC("i2c-NVTN2020:00", "nau8821-hifi")));
SND_SOC_DAILINK_DEF(cs35l41, DAILINK_COMP_ARRAY(COMP_CODEC("spi-VLV1776:00", "cs35l41-pcm"),
						COMP_CODEC("spi-VLV1776:01", "cs35l41-pcm")));

@@ -246,43 +285,7 @@ static struct snd_soc_dai_link acp5x_dai[] = {
	},
};

static int platform_clock_control(struct snd_soc_dapm_widget *w,
				  struct snd_kcontrol *k, int event)
{
	struct snd_soc_dapm_context *dapm = w->dapm;
	struct snd_soc_card *card = dapm->card;
	struct snd_soc_dai *dai;
	int ret = 0;

	dai = snd_soc_card_get_codec_dai(card, ACP5X_NUVOTON_CODEC_DAI);
	if (!dai) {
		dev_err(card->dev, "Codec dai not found\n");
		return -EIO;
	}

	if (SND_SOC_DAPM_EVENT_OFF(event)) {
		ret = snd_soc_dai_set_sysclk(dai, NAU8821_CLK_INTERNAL, 0, SND_SOC_CLOCK_IN);
		if (ret < 0) {
			dev_err(card->dev, "set sysclk err = %d\n", ret);
			return -EIO;
		}
	} else {
		ret = snd_soc_dai_set_sysclk(dai, NAU8821_CLK_FLL_BLK, 0, SND_SOC_CLOCK_IN);
		if (ret < 0)
			dev_err(dai->dev, "can't set BLK clock %d\n", ret);
		ret = snd_soc_dai_set_pll(dai, 0, 0, ACP5X_NUVOTON_BCLK, ACP5X_NAU8821_FREQ_OUT);
		if (ret < 0)
			dev_err(dai->dev, "can't set FLL: %d\n", ret);
	}

	return ret;
}

static const struct snd_kcontrol_new acp5x_8821_controls[] = {
	SOC_DAPM_PIN_SWITCH("Headphone"),
	SOC_DAPM_PIN_SWITCH("Headset Mic"),
	SOC_DAPM_PIN_SWITCH("Int Mic"),
};

static const struct snd_soc_dapm_widget acp5x_8821_widgets[] = {
	SND_SOC_DAPM_HP("Headphone", NULL),