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.
This commit is contained in:
Mark Brown 2023-10-24 17:38:40 +01:00
commit 8c2d2383d2
No known key found for this signature in database
GPG key ID: 24D68B725D5487D0
2 changed files with 31 additions and 35 deletions

View file

@ -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);
mtk_dai_etdm_config(afe, params, dai, SNDRV_PCM_STREAM_PLAYBACK);
mtk_dai_etdm_config(afe, params, dai, SNDRV_PCM_STREAM_CAPTURE);
return 0;
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,

View file

@ -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);