0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #include <sound/core.h>
0016 #include <sound/pcm_params.h>
0017 #include <sound/soc-acpi.h>
0018 #include <sound/soc-dapm.h>
0019 #include <linux/module.h>
0020
0021 #include "acp-mach.h"
0022
0023 static struct acp_card_drvdata rt5682_rt1019_data = {
0024 .hs_cpu_id = I2S_SP,
0025 .amp_cpu_id = I2S_SP,
0026 .dmic_cpu_id = DMIC,
0027 .hs_codec_id = RT5682,
0028 .amp_codec_id = RT1019,
0029 .dmic_codec_id = DMIC,
0030 };
0031
0032 static struct acp_card_drvdata rt5682s_max_data = {
0033 .hs_cpu_id = I2S_SP,
0034 .amp_cpu_id = I2S_SP,
0035 .dmic_cpu_id = DMIC,
0036 .hs_codec_id = RT5682S,
0037 .amp_codec_id = MAX98360A,
0038 .dmic_codec_id = DMIC,
0039 };
0040
0041 static struct acp_card_drvdata rt5682s_rt1019_data = {
0042 .hs_cpu_id = I2S_SP,
0043 .amp_cpu_id = I2S_SP,
0044 .dmic_cpu_id = DMIC,
0045 .hs_codec_id = RT5682S,
0046 .amp_codec_id = RT1019,
0047 .dmic_codec_id = DMIC,
0048 };
0049
0050 static struct acp_card_drvdata max_nau8825_data = {
0051 .hs_cpu_id = I2S_HS,
0052 .amp_cpu_id = I2S_HS,
0053 .dmic_cpu_id = DMIC,
0054 .hs_codec_id = NAU8825,
0055 .amp_codec_id = MAX98360A,
0056 .dmic_codec_id = DMIC,
0057 .soc_mclk = true,
0058 .platform = REMBRANDT,
0059 };
0060
0061 static struct acp_card_drvdata rt5682s_rt1019_rmb_data = {
0062 .hs_cpu_id = I2S_HS,
0063 .amp_cpu_id = I2S_HS,
0064 .dmic_cpu_id = DMIC,
0065 .hs_codec_id = RT5682S,
0066 .amp_codec_id = RT1019,
0067 .dmic_codec_id = DMIC,
0068 .soc_mclk = true,
0069 .platform = REMBRANDT,
0070 };
0071
0072 static const struct snd_kcontrol_new acp_controls[] = {
0073 SOC_DAPM_PIN_SWITCH("Headphone Jack"),
0074 SOC_DAPM_PIN_SWITCH("Headset Mic"),
0075 SOC_DAPM_PIN_SWITCH("Spk"),
0076 SOC_DAPM_PIN_SWITCH("Left Spk"),
0077 SOC_DAPM_PIN_SWITCH("Right Spk"),
0078
0079 };
0080
0081 static const struct snd_soc_dapm_widget acp_widgets[] = {
0082 SND_SOC_DAPM_HP("Headphone Jack", NULL),
0083 SND_SOC_DAPM_MIC("Headset Mic", NULL),
0084 SND_SOC_DAPM_SPK("Spk", NULL),
0085 SND_SOC_DAPM_SPK("Left Spk", NULL),
0086 SND_SOC_DAPM_SPK("Right Spk", NULL),
0087 };
0088
0089 static int acp_asoc_probe(struct platform_device *pdev)
0090 {
0091 struct snd_soc_card *card = NULL;
0092 struct device *dev = &pdev->dev;
0093 int ret;
0094
0095 if (!pdev->id_entry)
0096 return -EINVAL;
0097
0098 card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL);
0099 if (!card)
0100 return -ENOMEM;
0101
0102 card->dev = dev;
0103 card->owner = THIS_MODULE;
0104 card->name = pdev->id_entry->name;
0105 card->dapm_widgets = acp_widgets;
0106 card->num_dapm_widgets = ARRAY_SIZE(acp_widgets);
0107 card->controls = acp_controls;
0108 card->num_controls = ARRAY_SIZE(acp_controls);
0109 card->drvdata = (struct acp_card_drvdata *)pdev->id_entry->driver_data;
0110
0111 acp_legacy_dai_links_create(card);
0112
0113 ret = devm_snd_soc_register_card(&pdev->dev, card);
0114 if (ret) {
0115 dev_err(&pdev->dev,
0116 "devm_snd_soc_register_card(%s) failed: %d\n",
0117 card->name, ret);
0118 return ret;
0119 }
0120
0121 return 0;
0122 }
0123
0124 static const struct platform_device_id board_ids[] = {
0125 {
0126 .name = "acp3xalc56821019",
0127 .driver_data = (kernel_ulong_t)&rt5682_rt1019_data,
0128 },
0129 {
0130 .name = "acp3xalc5682sm98360",
0131 .driver_data = (kernel_ulong_t)&rt5682s_max_data,
0132 },
0133 {
0134 .name = "acp3xalc5682s1019",
0135 .driver_data = (kernel_ulong_t)&rt5682s_rt1019_data,
0136 },
0137 {
0138 .name = "rmb-nau8825-max",
0139 .driver_data = (kernel_ulong_t)&max_nau8825_data,
0140 },
0141 {
0142 .name = "rmb-rt5682s-rt1019",
0143 .driver_data = (kernel_ulong_t)&rt5682s_rt1019_rmb_data,
0144 },
0145 { }
0146 };
0147 static struct platform_driver acp_asoc_audio = {
0148 .driver = {
0149 .pm = &snd_soc_pm_ops,
0150 .name = "acp_mach",
0151 },
0152 .probe = acp_asoc_probe,
0153 .id_table = board_ids,
0154 };
0155
0156 module_platform_driver(acp_asoc_audio);
0157
0158 MODULE_IMPORT_NS(SND_SOC_AMD_MACH);
0159 MODULE_DESCRIPTION("ACP chrome audio support");
0160 MODULE_ALIAS("platform:acp3xalc56821019");
0161 MODULE_ALIAS("platform:acp3xalc5682sm98360");
0162 MODULE_ALIAS("platform:acp3xalc5682s1019");
0163 MODULE_ALIAS("platform:rmb-nau8825-max");
0164 MODULE_ALIAS("platform:rmb-rt5682s-rt1019");
0165 MODULE_LICENSE("GPL v2");