162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci// 362306a36Sopenharmony_ci// mt8186-mt6366-rt1019-rt5682s.c 462306a36Sopenharmony_ci// -- MT8186-MT6366-RT1019-RT5682S ALSA SoC machine driver 562306a36Sopenharmony_ci// 662306a36Sopenharmony_ci// Copyright (c) 2022 MediaTek Inc. 762306a36Sopenharmony_ci// Author: Jiaxin Yu <jiaxin.yu@mediatek.com> 862306a36Sopenharmony_ci// 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include <linux/gpio.h> 1162306a36Sopenharmony_ci#include <linux/gpio/consumer.h> 1262306a36Sopenharmony_ci#include <linux/input.h> 1362306a36Sopenharmony_ci#include <linux/module.h> 1462306a36Sopenharmony_ci#include <linux/of_device.h> 1562306a36Sopenharmony_ci#include <sound/jack.h> 1662306a36Sopenharmony_ci#include <sound/pcm_params.h> 1762306a36Sopenharmony_ci#include <sound/rt5682.h> 1862306a36Sopenharmony_ci#include <sound/soc.h> 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#include "../../codecs/mt6358.h" 2162306a36Sopenharmony_ci#include "../../codecs/rt5682.h" 2262306a36Sopenharmony_ci#include "../common/mtk-afe-platform-driver.h" 2362306a36Sopenharmony_ci#include "../common/mtk-dsp-sof-common.h" 2462306a36Sopenharmony_ci#include "../common/mtk-soc-card.h" 2562306a36Sopenharmony_ci#include "mt8186-afe-common.h" 2662306a36Sopenharmony_ci#include "mt8186-afe-clk.h" 2762306a36Sopenharmony_ci#include "mt8186-afe-gpio.h" 2862306a36Sopenharmony_ci#include "mt8186-mt6366-common.h" 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci#define RT1019_CODEC_DAI "HiFi" 3162306a36Sopenharmony_ci#define RT1019_DEV0_NAME "rt1019p" 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci#define RT5682S_CODEC_DAI "rt5682s-aif1" 3462306a36Sopenharmony_ci#define RT5682S_DEV0_NAME "rt5682s.5-001a" 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci#define SOF_DMA_DL1 "SOF_DMA_DL1" 3762306a36Sopenharmony_ci#define SOF_DMA_DL2 "SOF_DMA_DL2" 3862306a36Sopenharmony_ci#define SOF_DMA_UL1 "SOF_DMA_UL1" 3962306a36Sopenharmony_ci#define SOF_DMA_UL2 "SOF_DMA_UL2" 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_cistruct mt8186_mt6366_rt1019_rt5682s_priv { 4262306a36Sopenharmony_ci struct snd_soc_jack headset_jack, hdmi_jack; 4362306a36Sopenharmony_ci struct gpio_desc *dmic_sel; 4462306a36Sopenharmony_ci int dmic_switch; 4562306a36Sopenharmony_ci}; 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci/* Headset jack detection DAPM pins */ 4862306a36Sopenharmony_cistatic struct snd_soc_jack_pin mt8186_jack_pins[] = { 4962306a36Sopenharmony_ci { 5062306a36Sopenharmony_ci .pin = "Headphone", 5162306a36Sopenharmony_ci .mask = SND_JACK_HEADPHONE, 5262306a36Sopenharmony_ci }, 5362306a36Sopenharmony_ci { 5462306a36Sopenharmony_ci .pin = "Headset Mic", 5562306a36Sopenharmony_ci .mask = SND_JACK_MICROPHONE, 5662306a36Sopenharmony_ci }, 5762306a36Sopenharmony_ci}; 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_cistatic struct snd_soc_codec_conf mt8186_mt6366_rt1019_rt5682s_codec_conf[] = { 6062306a36Sopenharmony_ci { 6162306a36Sopenharmony_ci .dlc = COMP_CODEC_CONF("mt6358-sound"), 6262306a36Sopenharmony_ci .name_prefix = "Mt6366", 6362306a36Sopenharmony_ci }, 6462306a36Sopenharmony_ci { 6562306a36Sopenharmony_ci .dlc = COMP_CODEC_CONF("bt-sco"), 6662306a36Sopenharmony_ci .name_prefix = "Mt8186 bt", 6762306a36Sopenharmony_ci }, 6862306a36Sopenharmony_ci { 6962306a36Sopenharmony_ci .dlc = COMP_CODEC_CONF("hdmi-audio-codec"), 7062306a36Sopenharmony_ci .name_prefix = "Mt8186 hdmi", 7162306a36Sopenharmony_ci }, 7262306a36Sopenharmony_ci}; 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_cistatic int dmic_get(struct snd_kcontrol *kcontrol, 7562306a36Sopenharmony_ci struct snd_ctl_elem_value *ucontrol) 7662306a36Sopenharmony_ci{ 7762306a36Sopenharmony_ci struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_dapm(kcontrol); 7862306a36Sopenharmony_ci struct mtk_soc_card_data *soc_card_data = 7962306a36Sopenharmony_ci snd_soc_card_get_drvdata(dapm->card); 8062306a36Sopenharmony_ci struct mt8186_mt6366_rt1019_rt5682s_priv *priv = soc_card_data->mach_priv; 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci ucontrol->value.integer.value[0] = priv->dmic_switch; 8362306a36Sopenharmony_ci return 0; 8462306a36Sopenharmony_ci} 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_cistatic int dmic_set(struct snd_kcontrol *kcontrol, 8762306a36Sopenharmony_ci struct snd_ctl_elem_value *ucontrol) 8862306a36Sopenharmony_ci{ 8962306a36Sopenharmony_ci struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_dapm(kcontrol); 9062306a36Sopenharmony_ci struct mtk_soc_card_data *soc_card_data = 9162306a36Sopenharmony_ci snd_soc_card_get_drvdata(dapm->card); 9262306a36Sopenharmony_ci struct mt8186_mt6366_rt1019_rt5682s_priv *priv = soc_card_data->mach_priv; 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci priv->dmic_switch = ucontrol->value.integer.value[0]; 9562306a36Sopenharmony_ci if (priv->dmic_sel) { 9662306a36Sopenharmony_ci gpiod_set_value(priv->dmic_sel, priv->dmic_switch); 9762306a36Sopenharmony_ci dev_dbg(dapm->card->dev, "dmic_set_value %d\n", 9862306a36Sopenharmony_ci priv->dmic_switch); 9962306a36Sopenharmony_ci } 10062306a36Sopenharmony_ci return 0; 10162306a36Sopenharmony_ci} 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_cistatic const char * const dmic_mux_text[] = { 10462306a36Sopenharmony_ci "Front Mic", 10562306a36Sopenharmony_ci "Rear Mic", 10662306a36Sopenharmony_ci}; 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_cistatic SOC_ENUM_SINGLE_DECL(mt8186_dmic_enum, 10962306a36Sopenharmony_ci SND_SOC_NOPM, 0, dmic_mux_text); 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_cistatic const struct snd_kcontrol_new mt8186_dmic_mux_control = 11262306a36Sopenharmony_ci SOC_DAPM_ENUM_EXT("DMIC Select Mux", mt8186_dmic_enum, 11362306a36Sopenharmony_ci dmic_get, dmic_set); 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_cistatic const struct snd_soc_dapm_widget dmic_widgets[] = { 11662306a36Sopenharmony_ci SND_SOC_DAPM_MIC("DMIC", NULL), 11762306a36Sopenharmony_ci SND_SOC_DAPM_MUX("Dmic Mux", SND_SOC_NOPM, 0, 0, &mt8186_dmic_mux_control), 11862306a36Sopenharmony_ci}; 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_cistatic const struct snd_soc_dapm_route dmic_map[] = { 12162306a36Sopenharmony_ci /* digital mics */ 12262306a36Sopenharmony_ci {"Dmic Mux", "Front Mic", "DMIC"}, 12362306a36Sopenharmony_ci {"Dmic Mux", "Rear Mic", "DMIC"}, 12462306a36Sopenharmony_ci}; 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_cistatic int primary_codec_init(struct snd_soc_pcm_runtime *rtd) 12762306a36Sopenharmony_ci{ 12862306a36Sopenharmony_ci struct snd_soc_card *card = rtd->card; 12962306a36Sopenharmony_ci struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(card); 13062306a36Sopenharmony_ci struct mt8186_mt6366_rt1019_rt5682s_priv *priv = soc_card_data->mach_priv; 13162306a36Sopenharmony_ci int ret; 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ci ret = mt8186_mt6366_init(rtd); 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci if (ret) { 13662306a36Sopenharmony_ci dev_err(card->dev, "mt8186_mt6366_init failed: %d\n", ret); 13762306a36Sopenharmony_ci return ret; 13862306a36Sopenharmony_ci } 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci if (!priv->dmic_sel) { 14162306a36Sopenharmony_ci dev_dbg(card->dev, "dmic_sel is null\n"); 14262306a36Sopenharmony_ci return 0; 14362306a36Sopenharmony_ci } 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ci ret = snd_soc_dapm_new_controls(&card->dapm, dmic_widgets, 14662306a36Sopenharmony_ci ARRAY_SIZE(dmic_widgets)); 14762306a36Sopenharmony_ci if (ret) { 14862306a36Sopenharmony_ci dev_err(card->dev, "DMic widget addition failed: %d\n", ret); 14962306a36Sopenharmony_ci /* Don't need to add routes if widget addition failed */ 15062306a36Sopenharmony_ci return ret; 15162306a36Sopenharmony_ci } 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci ret = snd_soc_dapm_add_routes(&card->dapm, dmic_map, 15462306a36Sopenharmony_ci ARRAY_SIZE(dmic_map)); 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_ci if (ret) 15762306a36Sopenharmony_ci dev_err(card->dev, "DMic map addition failed: %d\n", ret); 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ci return ret; 16062306a36Sopenharmony_ci} 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_cistatic int mt8186_rt5682s_init(struct snd_soc_pcm_runtime *rtd) 16362306a36Sopenharmony_ci{ 16462306a36Sopenharmony_ci struct snd_soc_component *cmpnt_afe = 16562306a36Sopenharmony_ci snd_soc_rtdcom_lookup(rtd, AFE_PCM_NAME); 16662306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt_afe); 16762306a36Sopenharmony_ci struct mtk_soc_card_data *soc_card_data = 16862306a36Sopenharmony_ci snd_soc_card_get_drvdata(rtd->card); 16962306a36Sopenharmony_ci struct mt8186_mt6366_rt1019_rt5682s_priv *priv = soc_card_data->mach_priv; 17062306a36Sopenharmony_ci struct snd_soc_jack *jack = &priv->headset_jack; 17162306a36Sopenharmony_ci struct snd_soc_component *cmpnt_codec = 17262306a36Sopenharmony_ci asoc_rtd_to_codec(rtd, 0)->component; 17362306a36Sopenharmony_ci int ret; 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ci ret = mt8186_dai_i2s_set_share(afe, "I2S1", "I2S0"); 17662306a36Sopenharmony_ci if (ret) { 17762306a36Sopenharmony_ci dev_err(rtd->dev, "Failed to set up shared clocks\n"); 17862306a36Sopenharmony_ci return ret; 17962306a36Sopenharmony_ci } 18062306a36Sopenharmony_ci 18162306a36Sopenharmony_ci ret = snd_soc_card_jack_new_pins(rtd->card, "Headset Jack", 18262306a36Sopenharmony_ci SND_JACK_HEADSET | SND_JACK_BTN_0 | 18362306a36Sopenharmony_ci SND_JACK_BTN_1 | SND_JACK_BTN_2 | 18462306a36Sopenharmony_ci SND_JACK_BTN_3, 18562306a36Sopenharmony_ci jack, mt8186_jack_pins, 18662306a36Sopenharmony_ci ARRAY_SIZE(mt8186_jack_pins)); 18762306a36Sopenharmony_ci if (ret) { 18862306a36Sopenharmony_ci dev_err(rtd->dev, "Headset Jack creation failed: %d\n", ret); 18962306a36Sopenharmony_ci return ret; 19062306a36Sopenharmony_ci } 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_ci snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_PLAYPAUSE); 19362306a36Sopenharmony_ci snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOICECOMMAND); 19462306a36Sopenharmony_ci snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEUP); 19562306a36Sopenharmony_ci snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN); 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ci return snd_soc_component_set_jack(cmpnt_codec, jack, NULL); 19862306a36Sopenharmony_ci} 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_cistatic int mt8186_rt5682s_i2s_hw_params(struct snd_pcm_substream *substream, 20162306a36Sopenharmony_ci struct snd_pcm_hw_params *params) 20262306a36Sopenharmony_ci{ 20362306a36Sopenharmony_ci struct snd_soc_pcm_runtime *rtd = substream->private_data; 20462306a36Sopenharmony_ci struct snd_soc_card *card = rtd->card; 20562306a36Sopenharmony_ci struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0); 20662306a36Sopenharmony_ci struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0); 20762306a36Sopenharmony_ci unsigned int rate = params_rate(params); 20862306a36Sopenharmony_ci unsigned int mclk_fs_ratio = 128; 20962306a36Sopenharmony_ci unsigned int mclk_fs = rate * mclk_fs_ratio; 21062306a36Sopenharmony_ci int bitwidth; 21162306a36Sopenharmony_ci int ret; 21262306a36Sopenharmony_ci 21362306a36Sopenharmony_ci bitwidth = snd_pcm_format_width(params_format(params)); 21462306a36Sopenharmony_ci if (bitwidth < 0) { 21562306a36Sopenharmony_ci dev_err(card->dev, "invalid bit width: %d\n", bitwidth); 21662306a36Sopenharmony_ci return bitwidth; 21762306a36Sopenharmony_ci } 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ci ret = snd_soc_dai_set_tdm_slot(codec_dai, 0x00, 0x0, 0x2, bitwidth); 22062306a36Sopenharmony_ci if (ret) { 22162306a36Sopenharmony_ci dev_err(card->dev, "failed to set tdm slot\n"); 22262306a36Sopenharmony_ci return ret; 22362306a36Sopenharmony_ci } 22462306a36Sopenharmony_ci 22562306a36Sopenharmony_ci ret = snd_soc_dai_set_pll(codec_dai, RT5682_PLL1, 22662306a36Sopenharmony_ci RT5682_PLL1_S_BCLK1, 22762306a36Sopenharmony_ci params_rate(params) * 64, 22862306a36Sopenharmony_ci params_rate(params) * 512); 22962306a36Sopenharmony_ci if (ret) { 23062306a36Sopenharmony_ci dev_err(card->dev, "failed to set pll\n"); 23162306a36Sopenharmony_ci return ret; 23262306a36Sopenharmony_ci } 23362306a36Sopenharmony_ci 23462306a36Sopenharmony_ci ret = snd_soc_dai_set_sysclk(codec_dai, 23562306a36Sopenharmony_ci RT5682_SCLK_S_PLL1, 23662306a36Sopenharmony_ci params_rate(params) * 512, 23762306a36Sopenharmony_ci SND_SOC_CLOCK_IN); 23862306a36Sopenharmony_ci if (ret) { 23962306a36Sopenharmony_ci dev_err(card->dev, "failed to set sysclk\n"); 24062306a36Sopenharmony_ci return ret; 24162306a36Sopenharmony_ci } 24262306a36Sopenharmony_ci 24362306a36Sopenharmony_ci return snd_soc_dai_set_sysclk(cpu_dai, 0, mclk_fs, SND_SOC_CLOCK_OUT); 24462306a36Sopenharmony_ci} 24562306a36Sopenharmony_ci 24662306a36Sopenharmony_cistatic const struct snd_soc_ops mt8186_rt5682s_i2s_ops = { 24762306a36Sopenharmony_ci .hw_params = mt8186_rt5682s_i2s_hw_params, 24862306a36Sopenharmony_ci}; 24962306a36Sopenharmony_ci 25062306a36Sopenharmony_cistatic int mt8186_mt6366_rt1019_rt5682s_hdmi_init(struct snd_soc_pcm_runtime *rtd) 25162306a36Sopenharmony_ci{ 25262306a36Sopenharmony_ci struct snd_soc_component *cmpnt_afe = 25362306a36Sopenharmony_ci snd_soc_rtdcom_lookup(rtd, AFE_PCM_NAME); 25462306a36Sopenharmony_ci struct mtk_base_afe *afe = snd_soc_component_get_drvdata(cmpnt_afe); 25562306a36Sopenharmony_ci struct snd_soc_component *cmpnt_codec = 25662306a36Sopenharmony_ci asoc_rtd_to_codec(rtd, 0)->component; 25762306a36Sopenharmony_ci struct mtk_soc_card_data *soc_card_data = 25862306a36Sopenharmony_ci snd_soc_card_get_drvdata(rtd->card); 25962306a36Sopenharmony_ci struct mt8186_mt6366_rt1019_rt5682s_priv *priv = soc_card_data->mach_priv; 26062306a36Sopenharmony_ci int ret; 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ci ret = mt8186_dai_i2s_set_share(afe, "I2S2", "I2S3"); 26362306a36Sopenharmony_ci if (ret) { 26462306a36Sopenharmony_ci dev_err(rtd->dev, "Failed to set up shared clocks\n"); 26562306a36Sopenharmony_ci return ret; 26662306a36Sopenharmony_ci } 26762306a36Sopenharmony_ci 26862306a36Sopenharmony_ci ret = snd_soc_card_jack_new(rtd->card, "HDMI Jack", SND_JACK_LINEOUT, &priv->hdmi_jack); 26962306a36Sopenharmony_ci if (ret) { 27062306a36Sopenharmony_ci dev_err(rtd->dev, "HDMI Jack creation failed: %d\n", ret); 27162306a36Sopenharmony_ci return ret; 27262306a36Sopenharmony_ci } 27362306a36Sopenharmony_ci 27462306a36Sopenharmony_ci return snd_soc_component_set_jack(cmpnt_codec, &priv->hdmi_jack, NULL); 27562306a36Sopenharmony_ci} 27662306a36Sopenharmony_ci 27762306a36Sopenharmony_cistatic int mt8186_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, 27862306a36Sopenharmony_ci struct snd_pcm_hw_params *params, 27962306a36Sopenharmony_ci snd_pcm_format_t fmt) 28062306a36Sopenharmony_ci{ 28162306a36Sopenharmony_ci struct snd_interval *channels = hw_param_interval(params, 28262306a36Sopenharmony_ci SNDRV_PCM_HW_PARAM_CHANNELS); 28362306a36Sopenharmony_ci 28462306a36Sopenharmony_ci dev_dbg(rtd->dev, "%s(), fix format to %d\n", __func__, fmt); 28562306a36Sopenharmony_ci 28662306a36Sopenharmony_ci /* fix BE i2s channel to 2 channel */ 28762306a36Sopenharmony_ci channels->min = 2; 28862306a36Sopenharmony_ci channels->max = 2; 28962306a36Sopenharmony_ci 29062306a36Sopenharmony_ci /* clean param mask first */ 29162306a36Sopenharmony_ci snd_mask_reset_range(hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT), 29262306a36Sopenharmony_ci 0, (__force unsigned int)SNDRV_PCM_FORMAT_LAST); 29362306a36Sopenharmony_ci 29462306a36Sopenharmony_ci params_set_format(params, fmt); 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci return 0; 29762306a36Sopenharmony_ci} 29862306a36Sopenharmony_ci 29962306a36Sopenharmony_cistatic int mt8186_i2s_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, 30062306a36Sopenharmony_ci struct snd_pcm_hw_params *params) 30162306a36Sopenharmony_ci{ 30262306a36Sopenharmony_ci return mt8186_hw_params_fixup(rtd, params, SNDRV_PCM_FORMAT_S24_LE); 30362306a36Sopenharmony_ci} 30462306a36Sopenharmony_ci 30562306a36Sopenharmony_cistatic int mt8186_it6505_i2s_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, 30662306a36Sopenharmony_ci struct snd_pcm_hw_params *params) 30762306a36Sopenharmony_ci{ 30862306a36Sopenharmony_ci return mt8186_hw_params_fixup(rtd, params, SNDRV_PCM_FORMAT_S32_LE); 30962306a36Sopenharmony_ci} 31062306a36Sopenharmony_ci 31162306a36Sopenharmony_ci/* fixup the BE DAI link to match any values from topology */ 31262306a36Sopenharmony_cistatic int mt8186_sof_dai_link_fixup(struct snd_soc_pcm_runtime *rtd, 31362306a36Sopenharmony_ci struct snd_pcm_hw_params *params) 31462306a36Sopenharmony_ci{ 31562306a36Sopenharmony_ci int ret; 31662306a36Sopenharmony_ci 31762306a36Sopenharmony_ci ret = mtk_sof_dai_link_fixup(rtd, params); 31862306a36Sopenharmony_ci 31962306a36Sopenharmony_ci if (!strcmp(rtd->dai_link->name, "I2S0") || 32062306a36Sopenharmony_ci !strcmp(rtd->dai_link->name, "I2S1") || 32162306a36Sopenharmony_ci !strcmp(rtd->dai_link->name, "I2S2")) 32262306a36Sopenharmony_ci mt8186_i2s_hw_params_fixup(rtd, params); 32362306a36Sopenharmony_ci else if (!strcmp(rtd->dai_link->name, "I2S3")) 32462306a36Sopenharmony_ci mt8186_it6505_i2s_hw_params_fixup(rtd, params); 32562306a36Sopenharmony_ci 32662306a36Sopenharmony_ci return ret; 32762306a36Sopenharmony_ci} 32862306a36Sopenharmony_ci 32962306a36Sopenharmony_cistatic int mt8186_mt6366_rt1019_rt5682s_playback_startup(struct snd_pcm_substream *substream) 33062306a36Sopenharmony_ci{ 33162306a36Sopenharmony_ci static const unsigned int rates[] = { 33262306a36Sopenharmony_ci 48000 33362306a36Sopenharmony_ci }; 33462306a36Sopenharmony_ci static const unsigned int channels[] = { 33562306a36Sopenharmony_ci 2 33662306a36Sopenharmony_ci }; 33762306a36Sopenharmony_ci static const struct snd_pcm_hw_constraint_list constraints_rates = { 33862306a36Sopenharmony_ci .count = ARRAY_SIZE(rates), 33962306a36Sopenharmony_ci .list = rates, 34062306a36Sopenharmony_ci .mask = 0, 34162306a36Sopenharmony_ci }; 34262306a36Sopenharmony_ci static const struct snd_pcm_hw_constraint_list constraints_channels = { 34362306a36Sopenharmony_ci .count = ARRAY_SIZE(channels), 34462306a36Sopenharmony_ci .list = channels, 34562306a36Sopenharmony_ci .mask = 0, 34662306a36Sopenharmony_ci }; 34762306a36Sopenharmony_ci 34862306a36Sopenharmony_ci struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); 34962306a36Sopenharmony_ci struct snd_pcm_runtime *runtime = substream->runtime; 35062306a36Sopenharmony_ci int ret; 35162306a36Sopenharmony_ci 35262306a36Sopenharmony_ci ret = snd_pcm_hw_constraint_list(runtime, 0, 35362306a36Sopenharmony_ci SNDRV_PCM_HW_PARAM_RATE, 35462306a36Sopenharmony_ci &constraints_rates); 35562306a36Sopenharmony_ci if (ret < 0) { 35662306a36Sopenharmony_ci dev_err(rtd->dev, "hw_constraint_list rate failed\n"); 35762306a36Sopenharmony_ci return ret; 35862306a36Sopenharmony_ci } 35962306a36Sopenharmony_ci 36062306a36Sopenharmony_ci ret = snd_pcm_hw_constraint_list(runtime, 0, 36162306a36Sopenharmony_ci SNDRV_PCM_HW_PARAM_CHANNELS, 36262306a36Sopenharmony_ci &constraints_channels); 36362306a36Sopenharmony_ci if (ret < 0) { 36462306a36Sopenharmony_ci dev_err(rtd->dev, "hw_constraint_list channel failed\n"); 36562306a36Sopenharmony_ci return ret; 36662306a36Sopenharmony_ci } 36762306a36Sopenharmony_ci 36862306a36Sopenharmony_ci return 0; 36962306a36Sopenharmony_ci} 37062306a36Sopenharmony_ci 37162306a36Sopenharmony_cistatic const struct snd_soc_ops mt8186_mt6366_rt1019_rt5682s_playback_ops = { 37262306a36Sopenharmony_ci .startup = mt8186_mt6366_rt1019_rt5682s_playback_startup, 37362306a36Sopenharmony_ci}; 37462306a36Sopenharmony_ci 37562306a36Sopenharmony_cistatic int mt8186_mt6366_rt1019_rt5682s_capture_startup(struct snd_pcm_substream *substream) 37662306a36Sopenharmony_ci{ 37762306a36Sopenharmony_ci static const unsigned int rates[] = { 37862306a36Sopenharmony_ci 48000 37962306a36Sopenharmony_ci }; 38062306a36Sopenharmony_ci static const unsigned int channels[] = { 38162306a36Sopenharmony_ci 1, 2 38262306a36Sopenharmony_ci }; 38362306a36Sopenharmony_ci static const struct snd_pcm_hw_constraint_list constraints_rates = { 38462306a36Sopenharmony_ci .count = ARRAY_SIZE(rates), 38562306a36Sopenharmony_ci .list = rates, 38662306a36Sopenharmony_ci .mask = 0, 38762306a36Sopenharmony_ci }; 38862306a36Sopenharmony_ci static const struct snd_pcm_hw_constraint_list constraints_channels = { 38962306a36Sopenharmony_ci .count = ARRAY_SIZE(channels), 39062306a36Sopenharmony_ci .list = channels, 39162306a36Sopenharmony_ci .mask = 0, 39262306a36Sopenharmony_ci }; 39362306a36Sopenharmony_ci 39462306a36Sopenharmony_ci struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); 39562306a36Sopenharmony_ci struct snd_pcm_runtime *runtime = substream->runtime; 39662306a36Sopenharmony_ci int ret; 39762306a36Sopenharmony_ci 39862306a36Sopenharmony_ci ret = snd_pcm_hw_constraint_list(runtime, 0, 39962306a36Sopenharmony_ci SNDRV_PCM_HW_PARAM_RATE, 40062306a36Sopenharmony_ci &constraints_rates); 40162306a36Sopenharmony_ci if (ret < 0) { 40262306a36Sopenharmony_ci dev_err(rtd->dev, "hw_constraint_list rate failed\n"); 40362306a36Sopenharmony_ci return ret; 40462306a36Sopenharmony_ci } 40562306a36Sopenharmony_ci 40662306a36Sopenharmony_ci ret = snd_pcm_hw_constraint_list(runtime, 0, 40762306a36Sopenharmony_ci SNDRV_PCM_HW_PARAM_CHANNELS, 40862306a36Sopenharmony_ci &constraints_channels); 40962306a36Sopenharmony_ci if (ret < 0) { 41062306a36Sopenharmony_ci dev_err(rtd->dev, "hw_constraint_list channel failed\n"); 41162306a36Sopenharmony_ci return ret; 41262306a36Sopenharmony_ci } 41362306a36Sopenharmony_ci 41462306a36Sopenharmony_ci return 0; 41562306a36Sopenharmony_ci} 41662306a36Sopenharmony_ci 41762306a36Sopenharmony_cistatic const struct snd_soc_ops mt8186_mt6366_rt1019_rt5682s_capture_ops = { 41862306a36Sopenharmony_ci .startup = mt8186_mt6366_rt1019_rt5682s_capture_startup, 41962306a36Sopenharmony_ci}; 42062306a36Sopenharmony_ci 42162306a36Sopenharmony_ci/* FE */ 42262306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(playback1, 42362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("DL1")), 42462306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 42562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 42662306a36Sopenharmony_ci 42762306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(playback12, 42862306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("DL12")), 42962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 43062306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 43162306a36Sopenharmony_ci 43262306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(playback2, 43362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("DL2")), 43462306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 43562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 43662306a36Sopenharmony_ci 43762306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(playback3, 43862306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("DL3")), 43962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 44062306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 44162306a36Sopenharmony_ci 44262306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(playback4, 44362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("DL4")), 44462306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 44562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 44662306a36Sopenharmony_ci 44762306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(playback5, 44862306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("DL5")), 44962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 45062306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 45162306a36Sopenharmony_ci 45262306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(playback6, 45362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("DL6")), 45462306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 45562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 45662306a36Sopenharmony_ci 45762306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(playback7, 45862306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("DL7")), 45962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 46062306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 46162306a36Sopenharmony_ci 46262306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(playback8, 46362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("DL8")), 46462306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 46562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 46662306a36Sopenharmony_ci 46762306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(capture1, 46862306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("UL1")), 46962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 47062306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 47162306a36Sopenharmony_ci 47262306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(capture2, 47362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("UL2")), 47462306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 47562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 47662306a36Sopenharmony_ci 47762306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(capture3, 47862306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("UL3")), 47962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 48062306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 48162306a36Sopenharmony_ci 48262306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(capture4, 48362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("UL4")), 48462306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 48562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 48662306a36Sopenharmony_ci 48762306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(capture5, 48862306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("UL5")), 48962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 49062306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 49162306a36Sopenharmony_ci 49262306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(capture6, 49362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("UL6")), 49462306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 49562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 49662306a36Sopenharmony_ci 49762306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(capture7, 49862306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("UL7")), 49962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 50062306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 50162306a36Sopenharmony_ci 50262306a36Sopenharmony_ci/* hostless */ 50362306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(hostless_lpbk, 50462306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("Hostless LPBK DAI")), 50562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 50662306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 50762306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(hostless_fm, 50862306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("Hostless FM DAI")), 50962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 51062306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 51162306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(hostless_src1, 51262306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("Hostless_SRC_1_DAI")), 51362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 51462306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 51562306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(hostless_src_bargein, 51662306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("Hostless_SRC_Bargein_DAI")), 51762306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 51862306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 51962306a36Sopenharmony_ci 52062306a36Sopenharmony_ci/* BE */ 52162306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(adda, 52262306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("ADDA")), 52362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CODEC("mt6358-sound", 52462306a36Sopenharmony_ci "mt6358-snd-codec-aif1"), 52562306a36Sopenharmony_ci COMP_CODEC("dmic-codec", 52662306a36Sopenharmony_ci "dmic-hifi")), 52762306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 52862306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(i2s0, 52962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("I2S0")), 53062306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY()), 53162306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 53262306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(i2s1, 53362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("I2S1")), 53462306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY()), 53562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 53662306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(i2s2, 53762306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("I2S2")), 53862306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 53962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 54062306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(i2s3, 54162306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("I2S3")), 54262306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY()), 54362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 54462306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(hw_gain1, 54562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("HW Gain 1")), 54662306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 54762306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 54862306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(hw_gain2, 54962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("HW Gain 2")), 55062306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 55162306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 55262306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(hw_src1, 55362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("HW_SRC_1")), 55462306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 55562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 55662306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(hw_src2, 55762306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("HW_SRC_2")), 55862306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 55962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 56062306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(connsys_i2s, 56162306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("CONNSYS_I2S")), 56262306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 56362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 56462306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(pcm1, 56562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("PCM 1")), 56662306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CODEC("bt-sco", "bt-sco-pcm-wb")), 56762306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 56862306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(tdm_in, 56962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("TDM IN")), 57062306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 57162306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 57262306a36Sopenharmony_ci 57362306a36Sopenharmony_ci/* hostless */ 57462306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(hostless_ul1, 57562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("Hostless_UL1 DAI")), 57662306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 57762306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 57862306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(hostless_ul2, 57962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("Hostless_UL2 DAI")), 58062306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 58162306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 58262306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(hostless_ul3, 58362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("Hostless_UL3 DAI")), 58462306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 58562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 58662306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(hostless_ul5, 58762306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("Hostless_UL5 DAI")), 58862306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 58962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 59062306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(hostless_ul6, 59162306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("Hostless_UL6 DAI")), 59262306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 59362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 59462306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(hostless_hw_gain_aaudio, 59562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("Hostless HW Gain AAudio DAI")), 59662306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 59762306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 59862306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(hostless_src_aaudio, 59962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("Hostless SRC AAudio DAI")), 60062306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 60162306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 60262306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(AFE_SOF_DL1, 60362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("SOF_DL1")), 60462306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 60562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 60662306a36Sopenharmony_ci 60762306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(AFE_SOF_DL2, 60862306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("SOF_DL2")), 60962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 61062306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 61162306a36Sopenharmony_ci 61262306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(AFE_SOF_UL1, 61362306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("SOF_UL1")), 61462306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 61562306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 61662306a36Sopenharmony_ci 61762306a36Sopenharmony_ciSND_SOC_DAILINK_DEFS(AFE_SOF_UL2, 61862306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_CPU("SOF_UL2")), 61962306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_DUMMY()), 62062306a36Sopenharmony_ci DAILINK_COMP_ARRAY(COMP_EMPTY())); 62162306a36Sopenharmony_ci 62262306a36Sopenharmony_cistatic const struct sof_conn_stream g_sof_conn_streams[] = { 62362306a36Sopenharmony_ci { "I2S1", "AFE_SOF_DL1", SOF_DMA_DL1, SNDRV_PCM_STREAM_PLAYBACK}, 62462306a36Sopenharmony_ci { "I2S3", "AFE_SOF_DL2", SOF_DMA_DL2, SNDRV_PCM_STREAM_PLAYBACK}, 62562306a36Sopenharmony_ci { "Primary Codec", "AFE_SOF_UL1", SOF_DMA_UL1, SNDRV_PCM_STREAM_CAPTURE}, 62662306a36Sopenharmony_ci { "I2S0", "AFE_SOF_UL2", SOF_DMA_UL2, SNDRV_PCM_STREAM_CAPTURE}, 62762306a36Sopenharmony_ci}; 62862306a36Sopenharmony_ci 62962306a36Sopenharmony_cistatic struct snd_soc_dai_link mt8186_mt6366_rt1019_rt5682s_dai_links[] = { 63062306a36Sopenharmony_ci /* Front End DAI links */ 63162306a36Sopenharmony_ci { 63262306a36Sopenharmony_ci .name = "Playback_1", 63362306a36Sopenharmony_ci .stream_name = "Playback_1", 63462306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 63562306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 63662306a36Sopenharmony_ci .dynamic = 1, 63762306a36Sopenharmony_ci .dpcm_playback = 1, 63862306a36Sopenharmony_ci .dpcm_merged_format = 1, 63962306a36Sopenharmony_ci .dpcm_merged_chan = 1, 64062306a36Sopenharmony_ci .dpcm_merged_rate = 1, 64162306a36Sopenharmony_ci .ops = &mt8186_mt6366_rt1019_rt5682s_playback_ops, 64262306a36Sopenharmony_ci SND_SOC_DAILINK_REG(playback1), 64362306a36Sopenharmony_ci }, 64462306a36Sopenharmony_ci { 64562306a36Sopenharmony_ci .name = "Playback_12", 64662306a36Sopenharmony_ci .stream_name = "Playback_12", 64762306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 64862306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 64962306a36Sopenharmony_ci .dynamic = 1, 65062306a36Sopenharmony_ci .dpcm_playback = 1, 65162306a36Sopenharmony_ci SND_SOC_DAILINK_REG(playback12), 65262306a36Sopenharmony_ci }, 65362306a36Sopenharmony_ci { 65462306a36Sopenharmony_ci .name = "Playback_2", 65562306a36Sopenharmony_ci .stream_name = "Playback_2", 65662306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 65762306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 65862306a36Sopenharmony_ci .dynamic = 1, 65962306a36Sopenharmony_ci .dpcm_playback = 1, 66062306a36Sopenharmony_ci .dpcm_merged_format = 1, 66162306a36Sopenharmony_ci .dpcm_merged_chan = 1, 66262306a36Sopenharmony_ci .dpcm_merged_rate = 1, 66362306a36Sopenharmony_ci SND_SOC_DAILINK_REG(playback2), 66462306a36Sopenharmony_ci }, 66562306a36Sopenharmony_ci { 66662306a36Sopenharmony_ci .name = "Playback_3", 66762306a36Sopenharmony_ci .stream_name = "Playback_3", 66862306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 66962306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 67062306a36Sopenharmony_ci .dynamic = 1, 67162306a36Sopenharmony_ci .dpcm_playback = 1, 67262306a36Sopenharmony_ci .dpcm_merged_format = 1, 67362306a36Sopenharmony_ci .dpcm_merged_chan = 1, 67462306a36Sopenharmony_ci .dpcm_merged_rate = 1, 67562306a36Sopenharmony_ci .ops = &mt8186_mt6366_rt1019_rt5682s_playback_ops, 67662306a36Sopenharmony_ci SND_SOC_DAILINK_REG(playback3), 67762306a36Sopenharmony_ci }, 67862306a36Sopenharmony_ci { 67962306a36Sopenharmony_ci .name = "Playback_4", 68062306a36Sopenharmony_ci .stream_name = "Playback_4", 68162306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 68262306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 68362306a36Sopenharmony_ci .dynamic = 1, 68462306a36Sopenharmony_ci .dpcm_playback = 1, 68562306a36Sopenharmony_ci SND_SOC_DAILINK_REG(playback4), 68662306a36Sopenharmony_ci }, 68762306a36Sopenharmony_ci { 68862306a36Sopenharmony_ci .name = "Playback_5", 68962306a36Sopenharmony_ci .stream_name = "Playback_5", 69062306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 69162306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 69262306a36Sopenharmony_ci .dynamic = 1, 69362306a36Sopenharmony_ci .dpcm_playback = 1, 69462306a36Sopenharmony_ci SND_SOC_DAILINK_REG(playback5), 69562306a36Sopenharmony_ci }, 69662306a36Sopenharmony_ci { 69762306a36Sopenharmony_ci .name = "Playback_6", 69862306a36Sopenharmony_ci .stream_name = "Playback_6", 69962306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 70062306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 70162306a36Sopenharmony_ci .dynamic = 1, 70262306a36Sopenharmony_ci .dpcm_playback = 1, 70362306a36Sopenharmony_ci SND_SOC_DAILINK_REG(playback6), 70462306a36Sopenharmony_ci }, 70562306a36Sopenharmony_ci { 70662306a36Sopenharmony_ci .name = "Playback_7", 70762306a36Sopenharmony_ci .stream_name = "Playback_7", 70862306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 70962306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 71062306a36Sopenharmony_ci .dynamic = 1, 71162306a36Sopenharmony_ci .dpcm_playback = 1, 71262306a36Sopenharmony_ci SND_SOC_DAILINK_REG(playback7), 71362306a36Sopenharmony_ci }, 71462306a36Sopenharmony_ci { 71562306a36Sopenharmony_ci .name = "Playback_8", 71662306a36Sopenharmony_ci .stream_name = "Playback_8", 71762306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 71862306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 71962306a36Sopenharmony_ci .dynamic = 1, 72062306a36Sopenharmony_ci .dpcm_playback = 1, 72162306a36Sopenharmony_ci SND_SOC_DAILINK_REG(playback8), 72262306a36Sopenharmony_ci }, 72362306a36Sopenharmony_ci { 72462306a36Sopenharmony_ci .name = "Capture_1", 72562306a36Sopenharmony_ci .stream_name = "Capture_1", 72662306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 72762306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 72862306a36Sopenharmony_ci .dynamic = 1, 72962306a36Sopenharmony_ci .dpcm_capture = 1, 73062306a36Sopenharmony_ci SND_SOC_DAILINK_REG(capture1), 73162306a36Sopenharmony_ci }, 73262306a36Sopenharmony_ci { 73362306a36Sopenharmony_ci .name = "Capture_2", 73462306a36Sopenharmony_ci .stream_name = "Capture_2", 73562306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 73662306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 73762306a36Sopenharmony_ci .dynamic = 1, 73862306a36Sopenharmony_ci .dpcm_capture = 1, 73962306a36Sopenharmony_ci .dpcm_merged_format = 1, 74062306a36Sopenharmony_ci .dpcm_merged_chan = 1, 74162306a36Sopenharmony_ci .dpcm_merged_rate = 1, 74262306a36Sopenharmony_ci .ops = &mt8186_mt6366_rt1019_rt5682s_capture_ops, 74362306a36Sopenharmony_ci SND_SOC_DAILINK_REG(capture2), 74462306a36Sopenharmony_ci }, 74562306a36Sopenharmony_ci { 74662306a36Sopenharmony_ci .name = "Capture_3", 74762306a36Sopenharmony_ci .stream_name = "Capture_3", 74862306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 74962306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 75062306a36Sopenharmony_ci .dynamic = 1, 75162306a36Sopenharmony_ci .dpcm_capture = 1, 75262306a36Sopenharmony_ci SND_SOC_DAILINK_REG(capture3), 75362306a36Sopenharmony_ci }, 75462306a36Sopenharmony_ci { 75562306a36Sopenharmony_ci .name = "Capture_4", 75662306a36Sopenharmony_ci .stream_name = "Capture_4", 75762306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 75862306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 75962306a36Sopenharmony_ci .dynamic = 1, 76062306a36Sopenharmony_ci .dpcm_capture = 1, 76162306a36Sopenharmony_ci .dpcm_merged_format = 1, 76262306a36Sopenharmony_ci .dpcm_merged_chan = 1, 76362306a36Sopenharmony_ci .dpcm_merged_rate = 1, 76462306a36Sopenharmony_ci .ops = &mt8186_mt6366_rt1019_rt5682s_capture_ops, 76562306a36Sopenharmony_ci SND_SOC_DAILINK_REG(capture4), 76662306a36Sopenharmony_ci }, 76762306a36Sopenharmony_ci { 76862306a36Sopenharmony_ci .name = "Capture_5", 76962306a36Sopenharmony_ci .stream_name = "Capture_5", 77062306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 77162306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 77262306a36Sopenharmony_ci .dynamic = 1, 77362306a36Sopenharmony_ci .dpcm_capture = 1, 77462306a36Sopenharmony_ci SND_SOC_DAILINK_REG(capture5), 77562306a36Sopenharmony_ci }, 77662306a36Sopenharmony_ci { 77762306a36Sopenharmony_ci .name = "Capture_6", 77862306a36Sopenharmony_ci .stream_name = "Capture_6", 77962306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 78062306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 78162306a36Sopenharmony_ci .dynamic = 1, 78262306a36Sopenharmony_ci .dpcm_capture = 1, 78362306a36Sopenharmony_ci .dpcm_merged_format = 1, 78462306a36Sopenharmony_ci .dpcm_merged_chan = 1, 78562306a36Sopenharmony_ci .dpcm_merged_rate = 1, 78662306a36Sopenharmony_ci SND_SOC_DAILINK_REG(capture6), 78762306a36Sopenharmony_ci }, 78862306a36Sopenharmony_ci { 78962306a36Sopenharmony_ci .name = "Capture_7", 79062306a36Sopenharmony_ci .stream_name = "Capture_7", 79162306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 79262306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 79362306a36Sopenharmony_ci .dynamic = 1, 79462306a36Sopenharmony_ci .dpcm_capture = 1, 79562306a36Sopenharmony_ci SND_SOC_DAILINK_REG(capture7), 79662306a36Sopenharmony_ci }, 79762306a36Sopenharmony_ci { 79862306a36Sopenharmony_ci .name = "Hostless_LPBK", 79962306a36Sopenharmony_ci .stream_name = "Hostless_LPBK", 80062306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 80162306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 80262306a36Sopenharmony_ci .dynamic = 1, 80362306a36Sopenharmony_ci .dpcm_playback = 1, 80462306a36Sopenharmony_ci .dpcm_capture = 1, 80562306a36Sopenharmony_ci .ignore_suspend = 1, 80662306a36Sopenharmony_ci SND_SOC_DAILINK_REG(hostless_lpbk), 80762306a36Sopenharmony_ci }, 80862306a36Sopenharmony_ci { 80962306a36Sopenharmony_ci .name = "Hostless_FM", 81062306a36Sopenharmony_ci .stream_name = "Hostless_FM", 81162306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 81262306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 81362306a36Sopenharmony_ci .dynamic = 1, 81462306a36Sopenharmony_ci .dpcm_playback = 1, 81562306a36Sopenharmony_ci .dpcm_capture = 1, 81662306a36Sopenharmony_ci .ignore_suspend = 1, 81762306a36Sopenharmony_ci SND_SOC_DAILINK_REG(hostless_fm), 81862306a36Sopenharmony_ci }, 81962306a36Sopenharmony_ci { 82062306a36Sopenharmony_ci .name = "Hostless_SRC_1", 82162306a36Sopenharmony_ci .stream_name = "Hostless_SRC_1", 82262306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 82362306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 82462306a36Sopenharmony_ci .dynamic = 1, 82562306a36Sopenharmony_ci .dpcm_playback = 1, 82662306a36Sopenharmony_ci .dpcm_capture = 1, 82762306a36Sopenharmony_ci .ignore_suspend = 1, 82862306a36Sopenharmony_ci SND_SOC_DAILINK_REG(hostless_src1), 82962306a36Sopenharmony_ci }, 83062306a36Sopenharmony_ci { 83162306a36Sopenharmony_ci .name = "Hostless_SRC_Bargein", 83262306a36Sopenharmony_ci .stream_name = "Hostless_SRC_Bargein", 83362306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 83462306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 83562306a36Sopenharmony_ci .dynamic = 1, 83662306a36Sopenharmony_ci .dpcm_playback = 1, 83762306a36Sopenharmony_ci .dpcm_capture = 1, 83862306a36Sopenharmony_ci .ignore_suspend = 1, 83962306a36Sopenharmony_ci SND_SOC_DAILINK_REG(hostless_src_bargein), 84062306a36Sopenharmony_ci }, 84162306a36Sopenharmony_ci { 84262306a36Sopenharmony_ci .name = "Hostless_HW_Gain_AAudio", 84362306a36Sopenharmony_ci .stream_name = "Hostless_HW_Gain_AAudio", 84462306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 84562306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 84662306a36Sopenharmony_ci .dynamic = 1, 84762306a36Sopenharmony_ci .dpcm_capture = 1, 84862306a36Sopenharmony_ci .ignore_suspend = 1, 84962306a36Sopenharmony_ci SND_SOC_DAILINK_REG(hostless_hw_gain_aaudio), 85062306a36Sopenharmony_ci }, 85162306a36Sopenharmony_ci { 85262306a36Sopenharmony_ci .name = "Hostless_SRC_AAudio", 85362306a36Sopenharmony_ci .stream_name = "Hostless_SRC_AAudio", 85462306a36Sopenharmony_ci .trigger = {SND_SOC_DPCM_TRIGGER_PRE, 85562306a36Sopenharmony_ci SND_SOC_DPCM_TRIGGER_PRE}, 85662306a36Sopenharmony_ci .dynamic = 1, 85762306a36Sopenharmony_ci .dpcm_playback = 1, 85862306a36Sopenharmony_ci .dpcm_capture = 1, 85962306a36Sopenharmony_ci .ignore_suspend = 1, 86062306a36Sopenharmony_ci SND_SOC_DAILINK_REG(hostless_src_aaudio), 86162306a36Sopenharmony_ci }, 86262306a36Sopenharmony_ci /* Back End DAI links */ 86362306a36Sopenharmony_ci { 86462306a36Sopenharmony_ci .name = "Primary Codec", 86562306a36Sopenharmony_ci .no_pcm = 1, 86662306a36Sopenharmony_ci .dpcm_playback = 1, 86762306a36Sopenharmony_ci .dpcm_capture = 1, 86862306a36Sopenharmony_ci .ignore_suspend = 1, 86962306a36Sopenharmony_ci .init = primary_codec_init, 87062306a36Sopenharmony_ci SND_SOC_DAILINK_REG(adda), 87162306a36Sopenharmony_ci }, 87262306a36Sopenharmony_ci { 87362306a36Sopenharmony_ci .name = "I2S3", 87462306a36Sopenharmony_ci .no_pcm = 1, 87562306a36Sopenharmony_ci .dai_fmt = SND_SOC_DAIFMT_I2S | 87662306a36Sopenharmony_ci SND_SOC_DAIFMT_IB_IF | 87762306a36Sopenharmony_ci SND_SOC_DAIFMT_CBM_CFM, 87862306a36Sopenharmony_ci .dpcm_playback = 1, 87962306a36Sopenharmony_ci .ignore_suspend = 1, 88062306a36Sopenharmony_ci .init = mt8186_mt6366_rt1019_rt5682s_hdmi_init, 88162306a36Sopenharmony_ci .be_hw_params_fixup = mt8186_it6505_i2s_hw_params_fixup, 88262306a36Sopenharmony_ci SND_SOC_DAILINK_REG(i2s3), 88362306a36Sopenharmony_ci }, 88462306a36Sopenharmony_ci { 88562306a36Sopenharmony_ci .name = "I2S0", 88662306a36Sopenharmony_ci .no_pcm = 1, 88762306a36Sopenharmony_ci .dpcm_capture = 1, 88862306a36Sopenharmony_ci .ignore_suspend = 1, 88962306a36Sopenharmony_ci .be_hw_params_fixup = mt8186_i2s_hw_params_fixup, 89062306a36Sopenharmony_ci .ops = &mt8186_rt5682s_i2s_ops, 89162306a36Sopenharmony_ci SND_SOC_DAILINK_REG(i2s0), 89262306a36Sopenharmony_ci }, 89362306a36Sopenharmony_ci { 89462306a36Sopenharmony_ci .name = "I2S1", 89562306a36Sopenharmony_ci .no_pcm = 1, 89662306a36Sopenharmony_ci .dpcm_playback = 1, 89762306a36Sopenharmony_ci .ignore_suspend = 1, 89862306a36Sopenharmony_ci .be_hw_params_fixup = mt8186_i2s_hw_params_fixup, 89962306a36Sopenharmony_ci .init = mt8186_rt5682s_init, 90062306a36Sopenharmony_ci .ops = &mt8186_rt5682s_i2s_ops, 90162306a36Sopenharmony_ci SND_SOC_DAILINK_REG(i2s1), 90262306a36Sopenharmony_ci }, 90362306a36Sopenharmony_ci { 90462306a36Sopenharmony_ci .name = "I2S2", 90562306a36Sopenharmony_ci .no_pcm = 1, 90662306a36Sopenharmony_ci .dpcm_capture = 1, 90762306a36Sopenharmony_ci .ignore_suspend = 1, 90862306a36Sopenharmony_ci .be_hw_params_fixup = mt8186_i2s_hw_params_fixup, 90962306a36Sopenharmony_ci SND_SOC_DAILINK_REG(i2s2), 91062306a36Sopenharmony_ci }, 91162306a36Sopenharmony_ci { 91262306a36Sopenharmony_ci .name = "HW Gain 1", 91362306a36Sopenharmony_ci .no_pcm = 1, 91462306a36Sopenharmony_ci .dpcm_playback = 1, 91562306a36Sopenharmony_ci .dpcm_capture = 1, 91662306a36Sopenharmony_ci .ignore_suspend = 1, 91762306a36Sopenharmony_ci SND_SOC_DAILINK_REG(hw_gain1), 91862306a36Sopenharmony_ci }, 91962306a36Sopenharmony_ci { 92062306a36Sopenharmony_ci .name = "HW Gain 2", 92162306a36Sopenharmony_ci .no_pcm = 1, 92262306a36Sopenharmony_ci .dpcm_playback = 1, 92362306a36Sopenharmony_ci .dpcm_capture = 1, 92462306a36Sopenharmony_ci .ignore_suspend = 1, 92562306a36Sopenharmony_ci SND_SOC_DAILINK_REG(hw_gain2), 92662306a36Sopenharmony_ci }, 92762306a36Sopenharmony_ci { 92862306a36Sopenharmony_ci .name = "HW_SRC_1", 92962306a36Sopenharmony_ci .no_pcm = 1, 93062306a36Sopenharmony_ci .dpcm_playback = 1, 93162306a36Sopenharmony_ci .dpcm_capture = 1, 93262306a36Sopenharmony_ci .ignore_suspend = 1, 93362306a36Sopenharmony_ci SND_SOC_DAILINK_REG(hw_src1), 93462306a36Sopenharmony_ci }, 93562306a36Sopenharmony_ci { 93662306a36Sopenharmony_ci .name = "HW_SRC_2", 93762306a36Sopenharmony_ci .no_pcm = 1, 93862306a36Sopenharmony_ci .dpcm_playback = 1, 93962306a36Sopenharmony_ci .dpcm_capture = 1, 94062306a36Sopenharmony_ci .ignore_suspend = 1, 94162306a36Sopenharmony_ci SND_SOC_DAILINK_REG(hw_src2), 94262306a36Sopenharmony_ci }, 94362306a36Sopenharmony_ci { 94462306a36Sopenharmony_ci .name = "CONNSYS_I2S", 94562306a36Sopenharmony_ci .no_pcm = 1, 94662306a36Sopenharmony_ci .dpcm_capture = 1, 94762306a36Sopenharmony_ci .ignore_suspend = 1, 94862306a36Sopenharmony_ci SND_SOC_DAILINK_REG(connsys_i2s), 94962306a36Sopenharmony_ci }, 95062306a36Sopenharmony_ci { 95162306a36Sopenharmony_ci .name = "PCM 1", 95262306a36Sopenharmony_ci .dai_fmt = SND_SOC_DAIFMT_I2S | 95362306a36Sopenharmony_ci SND_SOC_DAIFMT_NB_IF, 95462306a36Sopenharmony_ci .no_pcm = 1, 95562306a36Sopenharmony_ci .dpcm_playback = 1, 95662306a36Sopenharmony_ci .dpcm_capture = 1, 95762306a36Sopenharmony_ci .ignore_suspend = 1, 95862306a36Sopenharmony_ci SND_SOC_DAILINK_REG(pcm1), 95962306a36Sopenharmony_ci }, 96062306a36Sopenharmony_ci { 96162306a36Sopenharmony_ci .name = "TDM IN", 96262306a36Sopenharmony_ci .no_pcm = 1, 96362306a36Sopenharmony_ci .dpcm_capture = 1, 96462306a36Sopenharmony_ci .ignore_suspend = 1, 96562306a36Sopenharmony_ci SND_SOC_DAILINK_REG(tdm_in), 96662306a36Sopenharmony_ci }, 96762306a36Sopenharmony_ci /* dummy BE for ul memif to record from dl memif */ 96862306a36Sopenharmony_ci { 96962306a36Sopenharmony_ci .name = "Hostless_UL1", 97062306a36Sopenharmony_ci .no_pcm = 1, 97162306a36Sopenharmony_ci .dpcm_capture = 1, 97262306a36Sopenharmony_ci .ignore_suspend = 1, 97362306a36Sopenharmony_ci SND_SOC_DAILINK_REG(hostless_ul1), 97462306a36Sopenharmony_ci }, 97562306a36Sopenharmony_ci { 97662306a36Sopenharmony_ci .name = "Hostless_UL2", 97762306a36Sopenharmony_ci .no_pcm = 1, 97862306a36Sopenharmony_ci .dpcm_capture = 1, 97962306a36Sopenharmony_ci .ignore_suspend = 1, 98062306a36Sopenharmony_ci SND_SOC_DAILINK_REG(hostless_ul2), 98162306a36Sopenharmony_ci }, 98262306a36Sopenharmony_ci { 98362306a36Sopenharmony_ci .name = "Hostless_UL3", 98462306a36Sopenharmony_ci .no_pcm = 1, 98562306a36Sopenharmony_ci .dpcm_capture = 1, 98662306a36Sopenharmony_ci .ignore_suspend = 1, 98762306a36Sopenharmony_ci SND_SOC_DAILINK_REG(hostless_ul3), 98862306a36Sopenharmony_ci }, 98962306a36Sopenharmony_ci { 99062306a36Sopenharmony_ci .name = "Hostless_UL5", 99162306a36Sopenharmony_ci .no_pcm = 1, 99262306a36Sopenharmony_ci .dpcm_capture = 1, 99362306a36Sopenharmony_ci .ignore_suspend = 1, 99462306a36Sopenharmony_ci SND_SOC_DAILINK_REG(hostless_ul5), 99562306a36Sopenharmony_ci }, 99662306a36Sopenharmony_ci { 99762306a36Sopenharmony_ci .name = "Hostless_UL6", 99862306a36Sopenharmony_ci .no_pcm = 1, 99962306a36Sopenharmony_ci .dpcm_capture = 1, 100062306a36Sopenharmony_ci .ignore_suspend = 1, 100162306a36Sopenharmony_ci SND_SOC_DAILINK_REG(hostless_ul6), 100262306a36Sopenharmony_ci }, 100362306a36Sopenharmony_ci /* SOF BE */ 100462306a36Sopenharmony_ci { 100562306a36Sopenharmony_ci .name = "AFE_SOF_DL1", 100662306a36Sopenharmony_ci .no_pcm = 1, 100762306a36Sopenharmony_ci .dpcm_playback = 1, 100862306a36Sopenharmony_ci SND_SOC_DAILINK_REG(AFE_SOF_DL1), 100962306a36Sopenharmony_ci }, 101062306a36Sopenharmony_ci { 101162306a36Sopenharmony_ci .name = "AFE_SOF_DL2", 101262306a36Sopenharmony_ci .no_pcm = 1, 101362306a36Sopenharmony_ci .dpcm_playback = 1, 101462306a36Sopenharmony_ci SND_SOC_DAILINK_REG(AFE_SOF_DL2), 101562306a36Sopenharmony_ci }, 101662306a36Sopenharmony_ci { 101762306a36Sopenharmony_ci .name = "AFE_SOF_UL1", 101862306a36Sopenharmony_ci .no_pcm = 1, 101962306a36Sopenharmony_ci .dpcm_capture = 1, 102062306a36Sopenharmony_ci SND_SOC_DAILINK_REG(AFE_SOF_UL1), 102162306a36Sopenharmony_ci }, 102262306a36Sopenharmony_ci { 102362306a36Sopenharmony_ci .name = "AFE_SOF_UL2", 102462306a36Sopenharmony_ci .no_pcm = 1, 102562306a36Sopenharmony_ci .dpcm_capture = 1, 102662306a36Sopenharmony_ci SND_SOC_DAILINK_REG(AFE_SOF_UL2), 102762306a36Sopenharmony_ci }, 102862306a36Sopenharmony_ci}; 102962306a36Sopenharmony_ci 103062306a36Sopenharmony_cistatic const struct snd_soc_dapm_widget 103162306a36Sopenharmony_cimt8186_mt6366_rt1019_rt5682s_widgets[] = { 103262306a36Sopenharmony_ci SND_SOC_DAPM_SPK("Speakers", NULL), 103362306a36Sopenharmony_ci SND_SOC_DAPM_HP("Headphone", NULL), 103462306a36Sopenharmony_ci SND_SOC_DAPM_MIC("Headset Mic", NULL), 103562306a36Sopenharmony_ci SND_SOC_DAPM_OUTPUT("HDMI1"), 103662306a36Sopenharmony_ci SND_SOC_DAPM_MIXER(SOF_DMA_DL1, SND_SOC_NOPM, 0, 0, NULL, 0), 103762306a36Sopenharmony_ci SND_SOC_DAPM_MIXER(SOF_DMA_DL2, SND_SOC_NOPM, 0, 0, NULL, 0), 103862306a36Sopenharmony_ci SND_SOC_DAPM_MIXER(SOF_DMA_UL1, SND_SOC_NOPM, 0, 0, NULL, 0), 103962306a36Sopenharmony_ci SND_SOC_DAPM_MIXER(SOF_DMA_UL2, SND_SOC_NOPM, 0, 0, NULL, 0), 104062306a36Sopenharmony_ci}; 104162306a36Sopenharmony_ci 104262306a36Sopenharmony_cistatic const struct snd_soc_dapm_route 104362306a36Sopenharmony_cimt8186_mt6366_rt1019_rt5682s_routes[] = { 104462306a36Sopenharmony_ci /* SPK */ 104562306a36Sopenharmony_ci { "Speakers", NULL, "Speaker" }, 104662306a36Sopenharmony_ci /* Headset */ 104762306a36Sopenharmony_ci { "Headphone", NULL, "HPOL" }, 104862306a36Sopenharmony_ci { "Headphone", NULL, "HPOR" }, 104962306a36Sopenharmony_ci { "IN1P", NULL, "Headset Mic" }, 105062306a36Sopenharmony_ci /* HDMI */ 105162306a36Sopenharmony_ci { "HDMI1", NULL, "TX" }, 105262306a36Sopenharmony_ci /* SOF Uplink */ 105362306a36Sopenharmony_ci {SOF_DMA_UL1, NULL, "UL1_CH1"}, 105462306a36Sopenharmony_ci {SOF_DMA_UL1, NULL, "UL1_CH2"}, 105562306a36Sopenharmony_ci {SOF_DMA_UL2, NULL, "UL2_CH1"}, 105662306a36Sopenharmony_ci {SOF_DMA_UL2, NULL, "UL2_CH2"}, 105762306a36Sopenharmony_ci /* SOF Downlink */ 105862306a36Sopenharmony_ci {"DSP_DL1_VIRT", NULL, SOF_DMA_DL1}, 105962306a36Sopenharmony_ci {"DSP_DL2_VIRT", NULL, SOF_DMA_DL2}, 106062306a36Sopenharmony_ci}; 106162306a36Sopenharmony_ci 106262306a36Sopenharmony_cistatic const struct snd_kcontrol_new 106362306a36Sopenharmony_cimt8186_mt6366_rt1019_rt5682s_controls[] = { 106462306a36Sopenharmony_ci SOC_DAPM_PIN_SWITCH("Speakers"), 106562306a36Sopenharmony_ci SOC_DAPM_PIN_SWITCH("Headphone"), 106662306a36Sopenharmony_ci SOC_DAPM_PIN_SWITCH("Headset Mic"), 106762306a36Sopenharmony_ci SOC_DAPM_PIN_SWITCH("HDMI1"), 106862306a36Sopenharmony_ci}; 106962306a36Sopenharmony_ci 107062306a36Sopenharmony_cistatic struct snd_soc_card mt8186_mt6366_rt1019_rt5682s_soc_card = { 107162306a36Sopenharmony_ci .name = "mt8186_rt1019_rt5682s", 107262306a36Sopenharmony_ci .owner = THIS_MODULE, 107362306a36Sopenharmony_ci .dai_link = mt8186_mt6366_rt1019_rt5682s_dai_links, 107462306a36Sopenharmony_ci .num_links = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_dai_links), 107562306a36Sopenharmony_ci .controls = mt8186_mt6366_rt1019_rt5682s_controls, 107662306a36Sopenharmony_ci .num_controls = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_controls), 107762306a36Sopenharmony_ci .dapm_widgets = mt8186_mt6366_rt1019_rt5682s_widgets, 107862306a36Sopenharmony_ci .num_dapm_widgets = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_widgets), 107962306a36Sopenharmony_ci .dapm_routes = mt8186_mt6366_rt1019_rt5682s_routes, 108062306a36Sopenharmony_ci .num_dapm_routes = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_routes), 108162306a36Sopenharmony_ci .codec_conf = mt8186_mt6366_rt1019_rt5682s_codec_conf, 108262306a36Sopenharmony_ci .num_configs = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_codec_conf), 108362306a36Sopenharmony_ci}; 108462306a36Sopenharmony_ci 108562306a36Sopenharmony_cistatic struct snd_soc_card mt8186_mt6366_rt5682s_max98360_soc_card = { 108662306a36Sopenharmony_ci .name = "mt8186_rt5682s_max98360", 108762306a36Sopenharmony_ci .owner = THIS_MODULE, 108862306a36Sopenharmony_ci .dai_link = mt8186_mt6366_rt1019_rt5682s_dai_links, 108962306a36Sopenharmony_ci .num_links = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_dai_links), 109062306a36Sopenharmony_ci .controls = mt8186_mt6366_rt1019_rt5682s_controls, 109162306a36Sopenharmony_ci .num_controls = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_controls), 109262306a36Sopenharmony_ci .dapm_widgets = mt8186_mt6366_rt1019_rt5682s_widgets, 109362306a36Sopenharmony_ci .num_dapm_widgets = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_widgets), 109462306a36Sopenharmony_ci .dapm_routes = mt8186_mt6366_rt1019_rt5682s_routes, 109562306a36Sopenharmony_ci .num_dapm_routes = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_routes), 109662306a36Sopenharmony_ci .codec_conf = mt8186_mt6366_rt1019_rt5682s_codec_conf, 109762306a36Sopenharmony_ci .num_configs = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_codec_conf), 109862306a36Sopenharmony_ci}; 109962306a36Sopenharmony_ci 110062306a36Sopenharmony_cistatic int mt8186_mt6366_rt1019_rt5682s_dev_probe(struct platform_device *pdev) 110162306a36Sopenharmony_ci{ 110262306a36Sopenharmony_ci struct snd_soc_card *card; 110362306a36Sopenharmony_ci struct snd_soc_dai_link *dai_link; 110462306a36Sopenharmony_ci struct mtk_soc_card_data *soc_card_data; 110562306a36Sopenharmony_ci struct mt8186_mt6366_rt1019_rt5682s_priv *mach_priv; 110662306a36Sopenharmony_ci struct device_node *platform_node, *headset_codec, *playback_codec, *adsp_node; 110762306a36Sopenharmony_ci int sof_on = 0; 110862306a36Sopenharmony_ci int ret, i; 110962306a36Sopenharmony_ci 111062306a36Sopenharmony_ci card = (struct snd_soc_card *)device_get_match_data(&pdev->dev); 111162306a36Sopenharmony_ci if (!card) 111262306a36Sopenharmony_ci return -EINVAL; 111362306a36Sopenharmony_ci card->dev = &pdev->dev; 111462306a36Sopenharmony_ci 111562306a36Sopenharmony_ci soc_card_data = devm_kzalloc(&pdev->dev, sizeof(*soc_card_data), GFP_KERNEL); 111662306a36Sopenharmony_ci if (!soc_card_data) 111762306a36Sopenharmony_ci return -ENOMEM; 111862306a36Sopenharmony_ci mach_priv = devm_kzalloc(&pdev->dev, sizeof(*mach_priv), GFP_KERNEL); 111962306a36Sopenharmony_ci if (!mach_priv) 112062306a36Sopenharmony_ci return -ENOMEM; 112162306a36Sopenharmony_ci 112262306a36Sopenharmony_ci soc_card_data->mach_priv = mach_priv; 112362306a36Sopenharmony_ci 112462306a36Sopenharmony_ci mach_priv->dmic_sel = devm_gpiod_get_optional(&pdev->dev, 112562306a36Sopenharmony_ci "dmic", GPIOD_OUT_LOW); 112662306a36Sopenharmony_ci if (IS_ERR(mach_priv->dmic_sel)) { 112762306a36Sopenharmony_ci dev_err(&pdev->dev, "DMIC gpio failed err=%ld\n", 112862306a36Sopenharmony_ci PTR_ERR(mach_priv->dmic_sel)); 112962306a36Sopenharmony_ci return PTR_ERR(mach_priv->dmic_sel); 113062306a36Sopenharmony_ci } 113162306a36Sopenharmony_ci 113262306a36Sopenharmony_ci adsp_node = of_parse_phandle(pdev->dev.of_node, "mediatek,adsp", 0); 113362306a36Sopenharmony_ci if (adsp_node) { 113462306a36Sopenharmony_ci struct mtk_sof_priv *sof_priv; 113562306a36Sopenharmony_ci 113662306a36Sopenharmony_ci sof_priv = devm_kzalloc(&pdev->dev, sizeof(*sof_priv), GFP_KERNEL); 113762306a36Sopenharmony_ci if (!sof_priv) { 113862306a36Sopenharmony_ci ret = -ENOMEM; 113962306a36Sopenharmony_ci goto err_adsp_node; 114062306a36Sopenharmony_ci } 114162306a36Sopenharmony_ci sof_priv->conn_streams = g_sof_conn_streams; 114262306a36Sopenharmony_ci sof_priv->num_streams = ARRAY_SIZE(g_sof_conn_streams); 114362306a36Sopenharmony_ci sof_priv->sof_dai_link_fixup = mt8186_sof_dai_link_fixup; 114462306a36Sopenharmony_ci soc_card_data->sof_priv = sof_priv; 114562306a36Sopenharmony_ci card->probe = mtk_sof_card_probe; 114662306a36Sopenharmony_ci card->late_probe = mtk_sof_card_late_probe; 114762306a36Sopenharmony_ci if (!card->topology_shortname_created) { 114862306a36Sopenharmony_ci snprintf(card->topology_shortname, 32, "sof-%s", card->name); 114962306a36Sopenharmony_ci card->topology_shortname_created = true; 115062306a36Sopenharmony_ci } 115162306a36Sopenharmony_ci card->name = card->topology_shortname; 115262306a36Sopenharmony_ci sof_on = 1; 115362306a36Sopenharmony_ci } else { 115462306a36Sopenharmony_ci dev_dbg(&pdev->dev, "Probe without adsp\n"); 115562306a36Sopenharmony_ci } 115662306a36Sopenharmony_ci 115762306a36Sopenharmony_ci if (of_property_read_bool(pdev->dev.of_node, "mediatek,dai-link")) { 115862306a36Sopenharmony_ci ret = mtk_sof_dailink_parse_of(card, pdev->dev.of_node, 115962306a36Sopenharmony_ci "mediatek,dai-link", 116062306a36Sopenharmony_ci mt8186_mt6366_rt1019_rt5682s_dai_links, 116162306a36Sopenharmony_ci ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_dai_links)); 116262306a36Sopenharmony_ci if (ret) { 116362306a36Sopenharmony_ci dev_dbg(&pdev->dev, "Parse dai-link fail\n"); 116462306a36Sopenharmony_ci goto err_adsp_node; 116562306a36Sopenharmony_ci } 116662306a36Sopenharmony_ci } else { 116762306a36Sopenharmony_ci if (!sof_on) 116862306a36Sopenharmony_ci card->num_links = ARRAY_SIZE(mt8186_mt6366_rt1019_rt5682s_dai_links) 116962306a36Sopenharmony_ci - ARRAY_SIZE(g_sof_conn_streams); 117062306a36Sopenharmony_ci } 117162306a36Sopenharmony_ci 117262306a36Sopenharmony_ci platform_node = of_parse_phandle(pdev->dev.of_node, "mediatek,platform", 0); 117362306a36Sopenharmony_ci if (!platform_node) { 117462306a36Sopenharmony_ci ret = -EINVAL; 117562306a36Sopenharmony_ci dev_err_probe(&pdev->dev, ret, "Property 'platform' missing or invalid\n"); 117662306a36Sopenharmony_ci goto err_platform_node; 117762306a36Sopenharmony_ci } 117862306a36Sopenharmony_ci 117962306a36Sopenharmony_ci playback_codec = of_get_child_by_name(pdev->dev.of_node, "playback-codecs"); 118062306a36Sopenharmony_ci if (!playback_codec) { 118162306a36Sopenharmony_ci ret = -EINVAL; 118262306a36Sopenharmony_ci dev_err_probe(&pdev->dev, ret, "Property 'playback-codecs' missing or invalid\n"); 118362306a36Sopenharmony_ci goto err_playback_codec; 118462306a36Sopenharmony_ci } 118562306a36Sopenharmony_ci 118662306a36Sopenharmony_ci headset_codec = of_get_child_by_name(pdev->dev.of_node, "headset-codec"); 118762306a36Sopenharmony_ci if (!headset_codec) { 118862306a36Sopenharmony_ci ret = -EINVAL; 118962306a36Sopenharmony_ci dev_err_probe(&pdev->dev, ret, "Property 'headset-codec' missing or invalid\n"); 119062306a36Sopenharmony_ci goto err_headset_codec; 119162306a36Sopenharmony_ci } 119262306a36Sopenharmony_ci 119362306a36Sopenharmony_ci for_each_card_prelinks(card, i, dai_link) { 119462306a36Sopenharmony_ci ret = mt8186_mt6366_card_set_be_link(card, dai_link, playback_codec, "I2S3"); 119562306a36Sopenharmony_ci if (ret) { 119662306a36Sopenharmony_ci dev_err_probe(&pdev->dev, ret, "%s set playback_codec fail\n", 119762306a36Sopenharmony_ci dai_link->name); 119862306a36Sopenharmony_ci goto err_probe; 119962306a36Sopenharmony_ci } 120062306a36Sopenharmony_ci 120162306a36Sopenharmony_ci ret = mt8186_mt6366_card_set_be_link(card, dai_link, headset_codec, "I2S0"); 120262306a36Sopenharmony_ci if (ret) { 120362306a36Sopenharmony_ci dev_err_probe(&pdev->dev, ret, "%s set headset_codec fail\n", 120462306a36Sopenharmony_ci dai_link->name); 120562306a36Sopenharmony_ci goto err_probe; 120662306a36Sopenharmony_ci } 120762306a36Sopenharmony_ci 120862306a36Sopenharmony_ci ret = mt8186_mt6366_card_set_be_link(card, dai_link, headset_codec, "I2S1"); 120962306a36Sopenharmony_ci if (ret) { 121062306a36Sopenharmony_ci dev_err_probe(&pdev->dev, ret, "%s set headset_codec fail\n", 121162306a36Sopenharmony_ci dai_link->name); 121262306a36Sopenharmony_ci goto err_probe; 121362306a36Sopenharmony_ci } 121462306a36Sopenharmony_ci 121562306a36Sopenharmony_ci if (!strncmp(dai_link->name, "AFE_SOF", strlen("AFE_SOF")) && sof_on) 121662306a36Sopenharmony_ci dai_link->platforms->of_node = adsp_node; 121762306a36Sopenharmony_ci 121862306a36Sopenharmony_ci if (!dai_link->platforms->name && !dai_link->platforms->of_node) 121962306a36Sopenharmony_ci dai_link->platforms->of_node = platform_node; 122062306a36Sopenharmony_ci } 122162306a36Sopenharmony_ci 122262306a36Sopenharmony_ci snd_soc_card_set_drvdata(card, soc_card_data); 122362306a36Sopenharmony_ci 122462306a36Sopenharmony_ci ret = mt8186_afe_gpio_init(&pdev->dev); 122562306a36Sopenharmony_ci if (ret) { 122662306a36Sopenharmony_ci dev_err_probe(&pdev->dev, ret, "%s init gpio error\n", __func__); 122762306a36Sopenharmony_ci goto err_probe; 122862306a36Sopenharmony_ci } 122962306a36Sopenharmony_ci 123062306a36Sopenharmony_ci ret = devm_snd_soc_register_card(&pdev->dev, card); 123162306a36Sopenharmony_ci if (ret) 123262306a36Sopenharmony_ci dev_err_probe(&pdev->dev, ret, "%s snd_soc_register_card fail\n", __func__); 123362306a36Sopenharmony_ci 123462306a36Sopenharmony_cierr_probe: 123562306a36Sopenharmony_ci of_node_put(headset_codec); 123662306a36Sopenharmony_cierr_headset_codec: 123762306a36Sopenharmony_ci of_node_put(playback_codec); 123862306a36Sopenharmony_cierr_playback_codec: 123962306a36Sopenharmony_ci of_node_put(platform_node); 124062306a36Sopenharmony_cierr_platform_node: 124162306a36Sopenharmony_cierr_adsp_node: 124262306a36Sopenharmony_ci of_node_put(adsp_node); 124362306a36Sopenharmony_ci 124462306a36Sopenharmony_ci return ret; 124562306a36Sopenharmony_ci} 124662306a36Sopenharmony_ci 124762306a36Sopenharmony_ci#if IS_ENABLED(CONFIG_OF) 124862306a36Sopenharmony_cistatic const struct of_device_id mt8186_mt6366_rt1019_rt5682s_dt_match[] = { 124962306a36Sopenharmony_ci { 125062306a36Sopenharmony_ci .compatible = "mediatek,mt8186-mt6366-rt1019-rt5682s-sound", 125162306a36Sopenharmony_ci .data = &mt8186_mt6366_rt1019_rt5682s_soc_card, 125262306a36Sopenharmony_ci }, 125362306a36Sopenharmony_ci { 125462306a36Sopenharmony_ci .compatible = "mediatek,mt8186-mt6366-rt5682s-max98360-sound", 125562306a36Sopenharmony_ci .data = &mt8186_mt6366_rt5682s_max98360_soc_card, 125662306a36Sopenharmony_ci }, 125762306a36Sopenharmony_ci {} 125862306a36Sopenharmony_ci}; 125962306a36Sopenharmony_ciMODULE_DEVICE_TABLE(of, mt8186_mt6366_rt1019_rt5682s_dt_match); 126062306a36Sopenharmony_ci#endif 126162306a36Sopenharmony_ci 126262306a36Sopenharmony_cistatic struct platform_driver mt8186_mt6366_rt1019_rt5682s_driver = { 126362306a36Sopenharmony_ci .driver = { 126462306a36Sopenharmony_ci .name = "mt8186_mt6366_rt1019_rt5682s", 126562306a36Sopenharmony_ci#if IS_ENABLED(CONFIG_OF) 126662306a36Sopenharmony_ci .of_match_table = mt8186_mt6366_rt1019_rt5682s_dt_match, 126762306a36Sopenharmony_ci#endif 126862306a36Sopenharmony_ci .pm = &snd_soc_pm_ops, 126962306a36Sopenharmony_ci }, 127062306a36Sopenharmony_ci .probe = mt8186_mt6366_rt1019_rt5682s_dev_probe, 127162306a36Sopenharmony_ci}; 127262306a36Sopenharmony_ci 127362306a36Sopenharmony_cimodule_platform_driver(mt8186_mt6366_rt1019_rt5682s_driver); 127462306a36Sopenharmony_ci 127562306a36Sopenharmony_ci/* Module information */ 127662306a36Sopenharmony_ciMODULE_DESCRIPTION("MT8186-MT6366-RT1019-RT5682S ALSA SoC machine driver"); 127762306a36Sopenharmony_ciMODULE_AUTHOR("Jiaxin Yu <jiaxin.yu@mediatek.com>"); 127862306a36Sopenharmony_ciMODULE_LICENSE("GPL v2"); 127962306a36Sopenharmony_ciMODULE_ALIAS("mt8186_mt6366_rt1019_rt5682s soc card"); 1280