|
@@ -32,6 +32,18 @@
|
|
|
#include "../atom/sst-atom-controls.h"
|
|
|
#include "../common/sst-acpi.h"
|
|
|
|
|
|
+enum {
|
|
|
+ BYT_RT5640_DMIC1_MAP,
|
|
|
+ BYT_RT5640_DMIC2_MAP,
|
|
|
+ BYT_RT5640_IN1_MAP,
|
|
|
+};
|
|
|
+
|
|
|
+#define BYT_RT5640_MAP(quirk) ((quirk) & 0xff)
|
|
|
+#define BYT_RT5640_DMIC_EN BIT(16)
|
|
|
+
|
|
|
+static unsigned long byt_rt5640_quirk = BYT_RT5640_DMIC1_MAP |
|
|
|
+ BYT_RT5640_DMIC_EN;
|
|
|
+
|
|
|
static const struct snd_soc_dapm_widget byt_rt5640_widgets[] = {
|
|
|
SND_SOC_DAPM_HP("Headphone", NULL),
|
|
|
SND_SOC_DAPM_MIC("Headset Mic", NULL),
|
|
@@ -70,18 +82,6 @@ static const struct snd_soc_dapm_route byt_rt5640_intmic_in1_map[] = {
|
|
|
{"IN1P", NULL, "Internal Mic"},
|
|
|
};
|
|
|
|
|
|
-enum {
|
|
|
- BYT_RT5640_DMIC1_MAP,
|
|
|
- BYT_RT5640_DMIC2_MAP,
|
|
|
- BYT_RT5640_IN1_MAP,
|
|
|
-};
|
|
|
-
|
|
|
-#define BYT_RT5640_MAP(quirk) ((quirk) & 0xff)
|
|
|
-#define BYT_RT5640_DMIC_EN BIT(16)
|
|
|
-
|
|
|
-static unsigned long byt_rt5640_quirk = BYT_RT5640_DMIC1_MAP |
|
|
|
- BYT_RT5640_DMIC_EN;
|
|
|
-
|
|
|
static const struct snd_kcontrol_new byt_rt5640_controls[] = {
|
|
|
SOC_DAPM_PIN_SWITCH("Headphone"),
|
|
|
SOC_DAPM_PIN_SWITCH("Headset Mic"),
|
|
@@ -174,7 +174,6 @@ static int byt_rt5640_init(struct snd_soc_pcm_runtime *runtime)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- dmi_check_system(byt_rt5640_quirk_table);
|
|
|
switch (BYT_RT5640_MAP(byt_rt5640_quirk)) {
|
|
|
case BYT_RT5640_IN1_MAP:
|
|
|
custom_map = byt_rt5640_intmic_in1_map;
|
|
@@ -351,6 +350,9 @@ static int snd_byt_rt5640_mc_probe(struct platform_device *pdev)
|
|
|
"%s%s%s", "i2c-", mach->id, ":00");
|
|
|
byt_rt5640_dais[MERR_DPCM_COMPR+1].codec_name = byt_rt5640_codec_name;
|
|
|
|
|
|
+ /* check quirks before creating card */
|
|
|
+ dmi_check_system(byt_rt5640_quirk_table);
|
|
|
+
|
|
|
ret_val = devm_snd_soc_register_card(&pdev->dev, &byt_rt5640_card);
|
|
|
|
|
|
if (ret_val) {
|