mirror of
https://github.com/torvalds/linux.git
synced 2026-05-21 21:37:25 +02:00
ASoC: add support for some new Lenovo laptops with
Merge series from Bard Liao <yung-chuan.liao@linux.intel.com>:
Some SKUs are using host DMICs rather than the cs42l43 DMICs, update the
endpoint structure for these SKUs to remove the DMIC endpoint.
Charles Keepax (4):
ASoC: sdw_utils: Add support for exclusion DAI quirks
ASoC: sdw_utils: Add a quirk to allow the cs42l43 mic DAI to be
ignored
ASoC: Intel: sof_sdw: Add quirk for cs42l43 system using host DMICs
ASoC: Intel: sof_sdw: Add quirks for some new Lenovo laptops
include/sound/soc_sdw_utils.h | 2 ++
sound/soc/intel/boards/sof_sdw.c | 41 +++++++++++++++++++++++++++++
sound/soc/sdw_utils/soc_sdw_utils.c | 5 +++-
3 files changed, 47 insertions(+), 1 deletion(-)
--
2.43.0
This commit is contained in:
commit
42fb51612f
|
|
@ -28,6 +28,7 @@
|
|||
* - SOC_SDW_CODEC_SPKR | SOF_SIDECAR_AMPS - Not currently supported
|
||||
*/
|
||||
#define SOC_SDW_SIDECAR_AMPS BIT(16)
|
||||
#define SOC_SDW_CODEC_MIC BIT(17)
|
||||
|
||||
#define SOC_SDW_UNUSED_DAI_ID -1
|
||||
#define SOC_SDW_JACK_OUT_DAI_ID 0
|
||||
|
|
@ -59,6 +60,7 @@ struct asoc_sdw_dai_info {
|
|||
int (*rtd_init)(struct snd_soc_pcm_runtime *rtd, struct snd_soc_dai *dai);
|
||||
bool rtd_init_done; /* Indicate that the rtd_init callback is done */
|
||||
unsigned long quirk;
|
||||
bool quirk_exclude;
|
||||
};
|
||||
|
||||
struct asoc_sdw_codec_info {
|
||||
|
|
|
|||
|
|
@ -580,6 +580,47 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = {
|
|||
},
|
||||
.driver_data = (void *)(SOC_SDW_CODEC_SPKR),
|
||||
},
|
||||
{
|
||||
.callback = sof_sdw_quirk_cb,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "3838")
|
||||
},
|
||||
.driver_data = (void *)(SOC_SDW_SIDECAR_AMPS),
|
||||
},
|
||||
{
|
||||
.callback = sof_sdw_quirk_cb,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "3832")
|
||||
},
|
||||
.driver_data = (void *)(SOC_SDW_SIDECAR_AMPS),
|
||||
},
|
||||
{
|
||||
.callback = sof_sdw_quirk_cb,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "380E")
|
||||
},
|
||||
.driver_data = (void *)(SOC_SDW_SIDECAR_AMPS),
|
||||
},
|
||||
{
|
||||
.callback = sof_sdw_quirk_cb,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "233C")
|
||||
},
|
||||
/* Note this quirk excludes the CODEC mic */
|
||||
.driver_data = (void *)(SOC_SDW_CODEC_MIC),
|
||||
},
|
||||
{
|
||||
.callback = sof_sdw_quirk_cb,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "233B")
|
||||
},
|
||||
.driver_data = (void *)(SOC_SDW_SIDECAR_AMPS),
|
||||
},
|
||||
|
||||
/* ArrowLake devices */
|
||||
{
|
||||
|
|
|
|||
|
|
@ -528,6 +528,8 @@ struct asoc_sdw_codec_info codec_info_list[] = {
|
|||
.rtd_init = asoc_sdw_cs42l43_dmic_rtd_init,
|
||||
.widgets = generic_dmic_widgets,
|
||||
.num_widgets = ARRAY_SIZE(generic_dmic_widgets),
|
||||
.quirk = SOC_SDW_CODEC_MIC,
|
||||
.quirk_exclude = true,
|
||||
},
|
||||
{
|
||||
.direction = {false, true},
|
||||
|
|
@ -1153,7 +1155,8 @@ int asoc_sdw_parse_sdw_endpoints(struct snd_soc_card *card,
|
|||
dai_info = &codec_info->dais[adr_end->num];
|
||||
soc_dai = asoc_sdw_find_dailink(soc_dais, adr_end);
|
||||
|
||||
if (dai_info->quirk && !(dai_info->quirk & ctx->mc_quirk))
|
||||
if (dai_info->quirk &&
|
||||
!(dai_info->quirk_exclude ^ !!(dai_info->quirk & ctx->mc_quirk)))
|
||||
continue;
|
||||
|
||||
dev_dbg(dev,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user