Unverified Commit 8c2d2383 authored by Mark Brown's avatar Mark Brown
Browse files

ASoC: mediatek: Remove redundant code and add

Merge series from Maso Huang <maso.huang@mediatek.com>:

Add support for sample rate checking on the MT7986.
parents 91e174fc 0e209294
Loading
Loading
Loading
Loading
+19 −4
Original line number Diff line number Diff line
@@ -237,12 +237,27 @@ static int mtk_dai_etdm_hw_params(struct snd_pcm_substream *substream,
				  struct snd_pcm_hw_params *params,
				  struct snd_soc_dai *dai)
{
	unsigned int rate = params_rate(params);
	struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);

	switch (rate) {
	case 8000:
	case 12000:
	case 16000:
	case 24000:
	case 32000:
	case 48000:
	case 96000:
	case 192000:
		mtk_dai_etdm_config(afe, params, dai, SNDRV_PCM_STREAM_PLAYBACK);
		mtk_dai_etdm_config(afe, params, dai, SNDRV_PCM_STREAM_CAPTURE);

		return 0;
	default:
		dev_err(afe->dev,
			"Sample rate %d invalid. Supported rates: 8/12/16/24/32/48/96/192 kHz\n",
			rate);
		return -EINVAL;
	}
}

static int mtk_dai_etdm_trigger(struct snd_pcm_substream *substream, int cmd,
+12 −31
Original line number Diff line number Diff line
@@ -12,11 +12,6 @@

#include "mt7986-afe-common.h"

struct mt7986_wm8960_priv {
	struct device_node *platform_node;
	struct device_node *codec_node;
};

static const struct snd_soc_dapm_widget mt7986_wm8960_widgets[] = {
	SND_SOC_DAPM_HP("Headphone", NULL),
	SND_SOC_DAPM_MIC("AMIC", NULL),
@@ -92,20 +87,18 @@ static int mt7986_wm8960_machine_probe(struct platform_device *pdev)
	struct snd_soc_card *card = &mt7986_wm8960_card;
	struct snd_soc_dai_link *dai_link;
	struct device_node *platform, *codec;
	struct mt7986_wm8960_priv *priv;
	struct device_node *platform_dai_node, *codec_dai_node;
	int ret, i;

	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
	if (!priv)
		return -ENOMEM;
	card->dev = &pdev->dev;

	platform = of_get_child_by_name(pdev->dev.of_node, "platform");

	if (platform) {
		priv->platform_node = of_parse_phandle(platform, "sound-dai", 0);
		platform_dai_node = of_parse_phandle(platform, "sound-dai", 0);
		of_node_put(platform);

		if (!priv->platform_node) {
		if (!platform_dai_node) {
			dev_err(&pdev->dev, "Failed to parse platform/sound-dai property\n");
			return -EINVAL;
		}
@@ -117,24 +110,22 @@ static int mt7986_wm8960_machine_probe(struct platform_device *pdev)
	for_each_card_prelinks(card, i, dai_link) {
		if (dai_link->platforms->name)
			continue;
		dai_link->platforms->of_node = priv->platform_node;
		dai_link->platforms->of_node = platform_dai_node;
	}

	card->dev = &pdev->dev;

	codec = of_get_child_by_name(pdev->dev.of_node, "codec");

	if (codec) {
		priv->codec_node = of_parse_phandle(codec, "sound-dai", 0);
		codec_dai_node = of_parse_phandle(codec, "sound-dai", 0);
		of_node_put(codec);

		if (!priv->codec_node) {
			of_node_put(priv->platform_node);
		if (!codec_dai_node) {
			of_node_put(platform_dai_node);
			dev_err(&pdev->dev, "Failed to parse codec/sound-dai property\n");
			return -EINVAL;
		}
	} else {
		of_node_put(priv->platform_node);
		of_node_put(platform_dai_node);
		dev_err(&pdev->dev, "Property 'codec' missing or invalid\n");
		return -EINVAL;
	}
@@ -142,7 +133,7 @@ static int mt7986_wm8960_machine_probe(struct platform_device *pdev)
	for_each_card_prelinks(card, i, dai_link) {
		if (dai_link->codecs->name)
			continue;
		dai_link->codecs->of_node = priv->codec_node;
		dai_link->codecs->of_node = codec_dai_node;
	}

	ret = snd_soc_of_parse_audio_routing(card, "audio-routing");
@@ -158,20 +149,11 @@ static int mt7986_wm8960_machine_probe(struct platform_device *pdev)
	}

err_of_node_put:
	of_node_put(priv->codec_node);
	of_node_put(priv->platform_node);
	of_node_put(platform_dai_node);
	of_node_put(codec_dai_node);
	return ret;
}

static void mt7986_wm8960_machine_remove(struct platform_device *pdev)
{
	struct snd_soc_card *card = platform_get_drvdata(pdev);
	struct mt7986_wm8960_priv *priv = snd_soc_card_get_drvdata(card);

	of_node_put(priv->codec_node);
	of_node_put(priv->platform_node);
}

static const struct of_device_id mt7986_wm8960_machine_dt_match[] = {
	{.compatible = "mediatek,mt7986-wm8960-sound"},
	{ /* sentinel */ }
@@ -184,7 +166,6 @@ static struct platform_driver mt7986_wm8960_machine = {
		.of_match_table = mt7986_wm8960_machine_dt_match,
	},
	.probe = mt7986_wm8960_machine_probe,
	.remove_new = mt7986_wm8960_machine_remove,
};

module_platform_driver(mt7986_wm8960_machine);