ASoC: Intel: add support for new SoundWire hardware layout on TGL
authorBard Liao <yung-chuan.liao@linux.intel.com>
Wed, 23 Sep 2020 08:05:14 +0000 (11:05 +0300)
committerMark Brown <broonie@kernel.org>
Wed, 23 Sep 2020 17:13:16 +0000 (18:13 +0100)
The creativity of hardware folks is endless, with a complete
permutation of rt711 (was link0 now link1), rt1308 (was link1 now
link2) and rt715 (was link3 now link0).

Someday we will get all this information from platform firmware, for
now let's add the mapping table.

Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Link: https://lore.kernel.org/r/20200923080514.3242858-7-kai.vehmanen@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/boards/sof_sdw.c
sound/soc/intel/common/soc-acpi-intel-tgl-match.c

index 7c15a8d7557b3247ecf1b4502243005f92cf9e08..7fc6731aeb97f65ea27c6259f7572d2404374490 100644 (file)
@@ -48,6 +48,15 @@ static int sof_sdw_quirk_cb(const struct dmi_system_id *id)
 }
 
 static const struct dmi_system_id sof_sdw_quirk_table[] = {
+       {
+               .callback = sof_sdw_quirk_cb,
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc"),
+                       DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "0A3E")
+               },
+               .driver_data = (void *)(SOF_RT711_JD_SRC_JD2 |
+                                       SOF_RT715_DAI_ID_FIX),
+       },
        {
                .callback = sof_sdw_quirk_cb,
                .matches = {
index 76f4eaf684b0fe2bd9d7bb555760b3a52792f2cd..9f243e60b95c240c8013f0f2ef8c92d0bb384414 100644 (file)
@@ -44,6 +44,15 @@ static const struct snd_soc_acpi_adr_device rt711_0_adr[] = {
        }
 };
 
+static const struct snd_soc_acpi_adr_device rt711_1_adr[] = {
+       {
+               .adr = 0x000120025D071100,
+               .num_endpoints = 1,
+               .endpoints = &single_endpoint,
+               .name_prefix = "rt711"
+       }
+};
+
 static const struct snd_soc_acpi_adr_device rt1308_1_dual_adr[] = {
        {
                .adr = 0x000120025D130800,
@@ -68,6 +77,15 @@ static const struct snd_soc_acpi_adr_device rt1308_1_single_adr[] = {
        }
 };
 
+static const struct snd_soc_acpi_adr_device rt1308_2_single_adr[] = {
+       {
+               .adr = 0x000220025D130800,
+               .num_endpoints = 1,
+               .endpoints = &single_endpoint,
+               .name_prefix = "rt1308-1"
+       }
+};
+
 static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = {
        {
                .adr = 0x000120025D130800,
@@ -86,6 +104,15 @@ static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = {
        }
 };
 
+static const struct snd_soc_acpi_adr_device rt715_0_adr[] = {
+       {
+               .adr = 0x000021025D071500,
+               .num_endpoints = 1,
+               .endpoints = &single_endpoint,
+               .name_prefix = "rt715"
+       }
+};
+
 static const struct snd_soc_acpi_adr_device rt715_3_adr[] = {
        {
                .adr = 0x000320025D071500,
@@ -235,6 +262,25 @@ static const struct snd_soc_acpi_link_adr tgl_3_in_1_mono_amp[] = {
        {}
 };
 
+static const struct snd_soc_acpi_link_adr tgl_sdw_rt711_link1_rt1308_link2_rt715_link0[] = {
+       {
+               .mask = BIT(1),
+               .num_adr = ARRAY_SIZE(rt711_1_adr),
+               .adr_d = rt711_1_adr,
+       },
+       {
+               .mask = BIT(2),
+               .num_adr = ARRAY_SIZE(rt1308_2_single_adr),
+               .adr_d = rt1308_2_single_adr,
+       },
+       {
+               .mask = BIT(0),
+               .num_adr = ARRAY_SIZE(rt715_0_adr),
+               .adr_d = rt715_0_adr,
+       },
+       {}
+};
+
 static const struct snd_soc_acpi_link_adr tgl_3_in_1_sdca[] = {
        {
                .mask = BIT(0),
@@ -295,6 +341,13 @@ EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_tgl_machines);
 
 /* this table is used when there is no I2S codec present */
 struct snd_soc_acpi_mach snd_soc_acpi_intel_tgl_sdw_machines[] = {
+       {
+               .link_mask = 0x7,
+               .links = tgl_sdw_rt711_link1_rt1308_link2_rt715_link0,
+               .drv_name = "sof_sdw",
+               .sof_fw_filename = "sof-tgl.ri",
+               .sof_tplg_filename = "sof-tgl-rt715-rt711-rt1308-mono.tplg",
+       },
        {
                .link_mask = 0xF, /* 4 active links required */
                .links = tgl_3_in_1_default,