diff --git a/src/mainboard/google/eve/mainboard.c b/src/mainboard/google/eve/mainboard.c index 4abb91e57f..efe47a0b12 100644 --- a/src/mainboard/google/eve/mainboard.c +++ b/src/mainboard/google/eve/mainboard.c @@ -34,7 +34,7 @@ static unsigned long mainboard_write_acpi_tables( nhlt->subsystem_id = SUBSYSTEM_ID; /* 4 Channel DMIC array */ - if (nhlt_soc_add_rt5514(nhlt, AUDIO_LINK_SSP0, 4)) + if (nhlt_soc_add_rt5514(nhlt, AUDIO_LINK_SSP0, 4, 1)) printk(BIOS_ERR, "Couldn't add rt5514.\n"); /* RT5663 Headset codec */ @@ -42,7 +42,8 @@ static unsigned long mainboard_write_acpi_tables( printk(BIOS_ERR, "Couldn't add headset codec.\n"); /* MAXIM98927 Smart Amps for left and right channel */ - if (nhlt_soc_add_max98927(nhlt, AUDIO_LINK_SSP0)) + /* Render time_slot is 0 and feedback time_slot is 2 */ + if (nhlt_soc_add_max98927(nhlt, AUDIO_LINK_SSP0, 0, 2)) printk(BIOS_ERR, "Couldn't add max98927\n"); end_addr = nhlt_soc_serialize_oem_overrides(nhlt, start_addr, diff --git a/src/mainboard/google/poppy/variants/atlas/nhlt.c b/src/mainboard/google/poppy/variants/atlas/nhlt.c index 4d54772b28..ee642c0fc6 100644 --- a/src/mainboard/google/poppy/variants/atlas/nhlt.c +++ b/src/mainboard/google/poppy/variants/atlas/nhlt.c @@ -16,7 +16,8 @@ void variant_nhlt_init(struct nhlt *nhlt) printk(BIOS_ERR, "Couldn't add Dialog DA7219 codec.\n"); /* MAXIM Smart Amps for left and right speakers. */ - if (nhlt_soc_add_max98373(nhlt, AUDIO_LINK_SSP0)) + /* Render time_slot is 0 and feedback time_slot is 2 */ + if (nhlt_soc_add_max98373(nhlt, AUDIO_LINK_SSP0, 0, 2)) printk(BIOS_ERR, "Couldn't add Maxim 98373 codec.\n"); } diff --git a/src/mainboard/google/poppy/variants/baseboard/nhlt.c b/src/mainboard/google/poppy/variants/baseboard/nhlt.c index eef3abcecd..b3ead3b3de 100644 --- a/src/mainboard/google/poppy/variants/baseboard/nhlt.c +++ b/src/mainboard/google/poppy/variants/baseboard/nhlt.c @@ -16,7 +16,8 @@ void __weak variant_nhlt_init(struct nhlt *nhlt) printk(BIOS_ERR, "Couldn't add 4CH DMIC arrays.\n"); /* Maxim MAX98927 Smart Amps for left and right channel */ - if (nhlt_soc_add_max98927(nhlt, AUDIO_LINK_SSP0)) + /* Render time_slot is 0 and feedback time_slot is 2 */ + if (nhlt_soc_add_max98927(nhlt, AUDIO_LINK_SSP0, 0, 2)) printk(BIOS_ERR, "Couldn't add Maxim MAX98927\n"); /* Realtek RT5663 Headset codec. */ diff --git a/src/mainboard/google/poppy/variants/nocturne/nhlt.c b/src/mainboard/google/poppy/variants/nocturne/nhlt.c index 55787d1367..a3b239932c 100644 --- a/src/mainboard/google/poppy/variants/nocturne/nhlt.c +++ b/src/mainboard/google/poppy/variants/nocturne/nhlt.c @@ -12,7 +12,8 @@ void variant_nhlt_init(struct nhlt *nhlt) printk(BIOS_ERR, "Couldn't add 4CH DMIC array.\n"); /* MAXIM Smart Amps for left and right speakers. */ - if (nhlt_soc_add_max98373(nhlt, AUDIO_LINK_SSP0)) + /* Render time_slot is 0 and feedback time_slot is 2 */ + if (nhlt_soc_add_max98373(nhlt, AUDIO_LINK_SSP0, 0, 2)) printk(BIOS_ERR, "Couldn't add Maxim 98373 codec.\n"); } diff --git a/src/mainboard/google/poppy/variants/rammus/nhlt.c b/src/mainboard/google/poppy/variants/rammus/nhlt.c index 5802883118..14c6e708f7 100644 --- a/src/mainboard/google/poppy/variants/rammus/nhlt.c +++ b/src/mainboard/google/poppy/variants/rammus/nhlt.c @@ -16,7 +16,8 @@ void variant_nhlt_init(struct nhlt *nhlt) printk(BIOS_ERR, "Couldn't add Dialog DA7219.\n"); /* Maxim MAX98927 Smart Amps for left and right channel */ - if (nhlt_soc_add_max98927(nhlt, AUDIO_LINK_SSP0)) + /* Render time_slot is 0 and feedback time_slot is 2 */ + if (nhlt_soc_add_max98373(nhlt, AUDIO_LINK_SSP0, 0, 2)) printk(BIOS_ERR, "Couldn't add Maxim MAX98927\n"); } diff --git a/src/soc/intel/skylake/include/soc/nhlt.h b/src/soc/intel/skylake/include/soc/nhlt.h index dd2825590c..a511f2ff8d 100644 --- a/src/soc/intel/skylake/include/soc/nhlt.h +++ b/src/soc/intel/skylake/include/soc/nhlt.h @@ -51,12 +51,14 @@ int nhlt_soc_add_max98357(struct nhlt *nhlt, int hwlink); * Add max98373 amplifier in stereo configuration on provided SSP link. * Return 0 on success, < 0 on error. */ -int nhlt_soc_add_max98373(struct nhlt *nhlt, int hwlink); +int nhlt_soc_add_max98373(struct nhlt *nhlt, int hwlink, int render_slot, + int feedback_slot); /* * Add rt5514 DSP on provided SSP link. Return 0 on success, < 0 on error. */ -int nhlt_soc_add_rt5514(struct nhlt *nhlt, int hwlink, int num_channels); +int nhlt_soc_add_rt5514(struct nhlt *nhlt, int hwlink, int num_channels, + int virtual_slot); /* * Add rt5663 headset codec on provided SSP link. Return 0 on success, < 0 @@ -68,7 +70,8 @@ int nhlt_soc_add_rt5663(struct nhlt *nhlt, int hwlink); * Add max98927 amplifier in stereo configuration on provided SSP link. * Return 0 on success, < 0 on error. */ -int nhlt_soc_add_max98927(struct nhlt *nhlt, int hwlink); +int nhlt_soc_add_max98927(struct nhlt *nhlt, int hwlink, int render_slot, + int feedback_slot); /* * Add da7219 headset codec on provided SSP link. Return 0 on success, < 0 diff --git a/src/soc/intel/skylake/nhlt/max98373.c b/src/soc/intel/skylake/nhlt/max98373.c index 5f4d15ee25..9c02bb7e3f 100644 --- a/src/soc/intel/skylake/nhlt/max98373.c +++ b/src/soc/intel/skylake/nhlt/max98373.c @@ -81,8 +81,14 @@ static const struct nhlt_endp_descriptor max98373_descriptors[] = { }, }; -int nhlt_soc_add_max98373(struct nhlt *nhlt, int hwlink) +int nhlt_soc_add_max98373(struct nhlt *nhlt, int hwlink, int render_slot, + int feedback_slot) { + render_config.tdm_config.virtual_slot = render_slot; + render_config.feedback_virtual_slot = feedback_slot; + capture_config.tdm_config.virtual_slot = feedback_slot; + capture_config.feedback_virtual_slot = render_slot; + /* Virtual bus id of SSP links are the hardware port ids proper. */ return nhlt_add_ssp_endpoints(nhlt, hwlink, max98373_descriptors, ARRAY_SIZE(max98373_descriptors)); diff --git a/src/soc/intel/skylake/nhlt/max98927.c b/src/soc/intel/skylake/nhlt/max98927.c index b19db26224..a3caa0f8e9 100644 --- a/src/soc/intel/skylake/nhlt/max98927.c +++ b/src/soc/intel/skylake/nhlt/max98927.c @@ -74,8 +74,14 @@ static struct nhlt_endp_descriptor max98927_descriptors[] = { }, }; -int nhlt_soc_add_max98927(struct nhlt *nhlt, int hwlink) +int nhlt_soc_add_max98927(struct nhlt *nhlt, int hwlink, int render_slot, + int feedback_slot) { + render_config.tdm_config.virtual_slot = render_slot; + render_config.feedback_virtual_slot = feedback_slot; + capture_config.tdm_config.virtual_slot = feedback_slot; + capture_config.feedback_virtual_slot = render_slot; + /* Virtual bus id of SSP links are the hardware port ids proper. */ return nhlt_add_ssp_endpoints(nhlt, hwlink, max98927_descriptors, ARRAY_SIZE(max98927_descriptors)); diff --git a/src/soc/intel/skylake/nhlt/rt5514.c b/src/soc/intel/skylake/nhlt/rt5514.c index df4d1e00b3..894f45f143 100644 --- a/src/soc/intel/skylake/nhlt/rt5514.c +++ b/src/soc/intel/skylake/nhlt/rt5514.c @@ -16,7 +16,7 @@ static const struct nhlt_format_config rt5514_4ch_formats[] = { }, }; -static const struct nhlt_dmic_array_config rt5514_4ch_mic_config = { +static struct nhlt_dmic_array_config rt5514_4ch_mic_config = { .tdm_config = { .virtual_slot = 0x1, .config_type = NHLT_TDM_MIC_ARRAY, @@ -24,7 +24,7 @@ static const struct nhlt_dmic_array_config rt5514_4ch_mic_config = { .array_type = NHLT_MIC_ARRAY_4CH_L_SHAPED, }; -static const struct nhlt_endp_descriptor rt5514_4ch_descriptors[] = { +static struct nhlt_endp_descriptor rt5514_4ch_descriptors[] = { { .link = NHLT_LINK_SSP, .device = NHLT_SSP_DEV_I2S, @@ -38,8 +38,10 @@ static const struct nhlt_endp_descriptor rt5514_4ch_descriptors[] = { }, }; -int nhlt_soc_add_rt5514(struct nhlt *nhlt, int hwlink, int num_channels) +int nhlt_soc_add_rt5514(struct nhlt *nhlt, int hwlink, int num_channels, int virtual_slot) { + rt5514_4ch_mic_config.tdm_config.virtual_slot = virtual_slot; + switch (num_channels) { case 4: return nhlt_add_ssp_endpoints(nhlt, hwlink,