ASoC: Intel: byt-rt5640: Add quirk for Dell Venue 8 Pro tablet
authorJarkko Nikula <jarkko.nikula@linux.intel.com>
Thu, 2 Oct 2014 10:29:08 +0000 (13:29 +0300)
committerMark Brown <broonie@kernel.org>
Thu, 2 Oct 2014 10:50:22 +0000 (11:50 +0100)
It was found with help of Jan-Michael Brummer <jan.brummer@tabos.org> that
Dell Venue 8 Pro tablet has a digital microphone connected to DMIC2
interface of the RT564x.

This patch adds a DAPM route to DMIC2 and a quirk using it for that tablet.

Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Reported-by: Jan-Michael Brummer <jan.brummer@tabos.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/byt-rt5640.c

index 8392c160d9e2c1958868aed93101e222d9b1050f..a9619b4201f95a31bdca7f5fd479fd1bc7ad5913 100644 (file)
@@ -49,6 +49,10 @@ static const struct snd_soc_dapm_route byt_rt5640_intmic_dmic1_map[] = {
        {"DMIC1", NULL, "Internal Mic"},
 };
 
+static const struct snd_soc_dapm_route byt_rt5640_intmic_dmic2_map[] = {
+       {"DMIC2", NULL, "Internal Mic"},
+};
+
 static const struct snd_soc_dapm_route byt_rt5640_intmic_in1_map[] = {
        {"Internal Mic", NULL, "MICBIAS1"},
        {"IN1P", NULL, "Internal Mic"},
@@ -56,6 +60,7 @@ static const struct snd_soc_dapm_route byt_rt5640_intmic_in1_map[] = {
 
 enum {
        BYT_RT5640_DMIC1_MAP,
+       BYT_RT5640_DMIC2_MAP,
        BYT_RT5640_IN1_MAP,
 };
 
@@ -111,6 +116,15 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = {
                },
                .driver_data = (unsigned long *)BYT_RT5640_IN1_MAP,
        },
+       {
+               .callback = byt_rt5640_quirk_cb,
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "DellInc."),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "Venue 8 Pro 5830"),
+               },
+               .driver_data = (unsigned long *)(BYT_RT5640_DMIC2_MAP |
+                                                BYT_RT5640_DMIC_EN),
+       },
        {}
 };
 
@@ -138,6 +152,10 @@ static int byt_rt5640_init(struct snd_soc_pcm_runtime *runtime)
                custom_map = byt_rt5640_intmic_in1_map;
                num_routes = ARRAY_SIZE(byt_rt5640_intmic_in1_map);
                break;
+       case BYT_RT5640_DMIC2_MAP:
+               custom_map = byt_rt5640_intmic_dmic2_map;
+               num_routes = ARRAY_SIZE(byt_rt5640_intmic_dmic2_map);
+               break;
        default:
                custom_map = byt_rt5640_intmic_dmic1_map;
                num_routes = ARRAY_SIZE(byt_rt5640_intmic_dmic1_map);