mainboard/intel/cannonlake_rvp: Add support for MAX98373 speaker amp
Add NHLT and dt support for max98373 amp BUG=None TEST=check SSDT and verify entries for max98373 TEST=check NHLT ACPI tables included blobs for max98373 Change-Id: I0b402f89f1ece9e62a394f713c4b0feff29bd1e5 Signed-off-by: N, Harshapriya <harshapriya.n@intel.com> Signed-off-by: Sathyanarayana Nujella <sathyanarayana.nujella@intel.com> Reviewed-on: https://review.coreboot.org/22674 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
committed by
Martin Roth
parent
c14a99feda
commit
4a1ee4b53e
@@ -6,6 +6,7 @@ config BOARD_SPECIFIC_OPTIONS
|
|||||||
select DRIVERS_I2C_GENERIC
|
select DRIVERS_I2C_GENERIC
|
||||||
select DRIVERS_GENERIC_MAX98357A
|
select DRIVERS_GENERIC_MAX98357A
|
||||||
select DRIVERS_I2C_DA7219
|
select DRIVERS_I2C_DA7219
|
||||||
|
select DRIVERS_I2C_MAX98373
|
||||||
select GENERIC_SPD_BIN
|
select GENERIC_SPD_BIN
|
||||||
select HAVE_ACPI_RESUME
|
select HAVE_ACPI_RESUME
|
||||||
select HAVE_ACPI_TABLES
|
select HAVE_ACPI_TABLES
|
||||||
@@ -56,6 +57,12 @@ config INCLUDE_SND_MAX98357_DA7219_NHLT
|
|||||||
select NHLT_DA7219
|
select NHLT_DA7219
|
||||||
select NHLT_MAX98357
|
select NHLT_MAX98357
|
||||||
|
|
||||||
|
config INCLUDE_SND_MAX98373_NHLT
|
||||||
|
bool "Include blobs for audio with MAX98373"
|
||||||
|
select NHLT_DMIC_4CH_16B
|
||||||
|
select NHLT_DMIC_2CH_16B
|
||||||
|
select NHLT_MAX98373
|
||||||
|
|
||||||
config ME_BIN_PATH
|
config ME_BIN_PATH
|
||||||
string
|
string
|
||||||
depends on HAVE_ME_BIN
|
depends on HAVE_ME_BIN
|
||||||
|
@@ -33,16 +33,21 @@ void __attribute__((weak)) variant_nhlt_init(struct nhlt *nhlt)
|
|||||||
!nhlt_soc_add_dmic_array(nhlt, 4))
|
!nhlt_soc_add_dmic_array(nhlt, 4))
|
||||||
printk(BIOS_ERR, "Added 4CH DMIC array.\n");
|
printk(BIOS_ERR, "Added 4CH DMIC array.\n");
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_INCLUDE_SND_MAX98357_DA7219_NHLT)
|
if (IS_ENABLED(CONFIG_INCLUDE_SND_MAX98357_DA7219_NHLT))
|
||||||
/* Dialog for Headset codec.
|
{
|
||||||
* Headset codec is bi-directional but uses the same configuration
|
/* Dialog for Headset codec.
|
||||||
* settings for render and capture endpoints.
|
* Headset codec is bi-directional but uses the same configuration
|
||||||
*/
|
* settings for render and capture endpoints.
|
||||||
if (!nhlt_soc_add_da7219(nhlt, AUDIO_LINK_SSP2))
|
*/
|
||||||
printk(BIOS_ERR, "Added Dialog_7219 codec.\n");
|
if (!nhlt_soc_add_da7219(nhlt, AUDIO_LINK_SSP2))
|
||||||
|
printk(BIOS_ERR, "Added Dialog_7219 codec.\n");
|
||||||
|
|
||||||
/* MAXIM Smart Amps for left and right speakers. */
|
/* MAXIM Smart Amps for left and right speakers. */
|
||||||
if (!nhlt_soc_add_max98357(nhlt, AUDIO_LINK_SSP1))
|
if (!nhlt_soc_add_max98357(nhlt, AUDIO_LINK_SSP1))
|
||||||
printk(BIOS_ERR, "Added Maxim_98357 codec.\n");
|
printk(BIOS_ERR, "Added Maxim_98357 codec.\n");
|
||||||
#endif
|
}
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_INCLUDE_SND_MAX98373_NHLT) &&
|
||||||
|
!nhlt_soc_add_max98373(nhlt, AUDIO_LINK_SSP1))
|
||||||
|
printk(BIOS_ERR, "Added Maxim_98373 codec.\n");
|
||||||
}
|
}
|
||||||
|
@@ -70,6 +70,13 @@ chip soc/intel/cannonlake
|
|||||||
# GPIO for SD card detect
|
# GPIO for SD card detect
|
||||||
register "sdcard_cd_gpio" = "GPP_G5"
|
register "sdcard_cd_gpio" = "GPP_G5"
|
||||||
|
|
||||||
|
# Audio
|
||||||
|
register "i2c[3]" = "{
|
||||||
|
.speed = I2C_SPEED_STANDARD,
|
||||||
|
.rise_time_ns = 104,
|
||||||
|
.fall_time_ns = 52,
|
||||||
|
}"
|
||||||
|
|
||||||
device domain 0 on
|
device domain 0 on
|
||||||
device pci 00.0 on end # Host Bridge
|
device pci 00.0 on end # Host Bridge
|
||||||
device pci 02.0 on end # Integrated Graphics Device
|
device pci 02.0 on end # Integrated Graphics Device
|
||||||
@@ -84,7 +91,17 @@ chip soc/intel/cannonlake
|
|||||||
device pci 15.0 on end # I2C #0
|
device pci 15.0 on end # I2C #0
|
||||||
device pci 15.1 on end # I2C #1
|
device pci 15.1 on end # I2C #1
|
||||||
device pci 15.2 off end # I2C #2
|
device pci 15.2 off end # I2C #2
|
||||||
device pci 15.3 off end # I2C #3
|
device pci 15.3 on
|
||||||
|
chip drivers/i2c/max98373
|
||||||
|
register "interleave_mode" = "1"
|
||||||
|
register "vmon_slot_no" = "4"
|
||||||
|
register "imon_slot_no" = "5"
|
||||||
|
register "uid" = "0"
|
||||||
|
register "desc" = ""Right Speaker Amp""
|
||||||
|
register "name" = ""MAXR""
|
||||||
|
device i2c 32 on end
|
||||||
|
end
|
||||||
|
end # I2C #3
|
||||||
device pci 16.0 on end # Management Engine Interface 1
|
device pci 16.0 on end # Management Engine Interface 1
|
||||||
device pci 16.1 off end # Management Engine Interface 2
|
device pci 16.1 off end # Management Engine Interface 2
|
||||||
device pci 16.2 off end # Management Engine IDE-R
|
device pci 16.2 off end # Management Engine IDE-R
|
||||||
|
@@ -141,6 +141,13 @@ config NHLT_MAX98357
|
|||||||
help
|
help
|
||||||
Include DSP firmware settings for headset codec.
|
Include DSP firmware settings for headset codec.
|
||||||
|
|
||||||
|
config NHLT_MAX98373
|
||||||
|
bool
|
||||||
|
depends on ACPI_NHLT
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Include DSP firmware settings for headset codec.
|
||||||
|
|
||||||
config NHLT_DA7219
|
config NHLT_DA7219
|
||||||
bool
|
bool
|
||||||
depends on ACPI_NHLT
|
depends on ACPI_NHLT
|
||||||
|
@@ -81,6 +81,8 @@ DMIC_2CH_48KHZ_16B = dmic-2ch-48khz-16b.bin
|
|||||||
DMIC_4CH_48KHZ_16B = dmic-4ch-48khz-16b.bin
|
DMIC_4CH_48KHZ_16B = dmic-4ch-48khz-16b.bin
|
||||||
MAX98357_RENDER = max98357-render-2ch-48khz-24b.bin
|
MAX98357_RENDER = max98357-render-2ch-48khz-24b.bin
|
||||||
DA7219_RENDER_CAPTURE = dialog-2ch-48khz-24b.bin
|
DA7219_RENDER_CAPTURE = dialog-2ch-48khz-24b.bin
|
||||||
|
MAX98373_RENDER_24B = max98373-render-2ch-48khz-24b.bin
|
||||||
|
MAX98373_RENDER_16B = max98373-render-2ch-48khz-16b.bin
|
||||||
|
|
||||||
cbfs-files-$(CONFIG_NHLT_DMIC_1CH_16B) += $(DMIC_1CH_48KHZ_16B)
|
cbfs-files-$(CONFIG_NHLT_DMIC_1CH_16B) += $(DMIC_1CH_48KHZ_16B)
|
||||||
$(DMIC_1CH_48KHZ_16B)-file := $(NHLT_BLOB_PATH)/$(DMIC_1CH_48KHZ_16B)
|
$(DMIC_1CH_48KHZ_16B)-file := $(NHLT_BLOB_PATH)/$(DMIC_1CH_48KHZ_16B)
|
||||||
@@ -98,6 +100,14 @@ cbfs-files-$(CONFIG_NHLT_MAX98357) += $(MAX98357_RENDER)
|
|||||||
$(MAX98357_RENDER)-file := $(NHLT_BLOB_PATH)/$(MAX98357_RENDER)
|
$(MAX98357_RENDER)-file := $(NHLT_BLOB_PATH)/$(MAX98357_RENDER)
|
||||||
$(MAX98357_RENDER)-type := raw
|
$(MAX98357_RENDER)-type := raw
|
||||||
|
|
||||||
|
cbfs-files-$(CONFIG_NHLT_MAX98373) += $(MAX98373_RENDER_16B)
|
||||||
|
$(MAX98373_RENDER_16B)-file := $(NHLT_BLOB_PATH)/$(MAX98373_RENDER_16B)
|
||||||
|
$(MAX98373_RENDER_16B)-type := raw
|
||||||
|
|
||||||
|
cbfs-files-$(CONFIG_NHLT_MAX98373) += $(MAX98373_RENDER_24B)
|
||||||
|
$(MAX98373_RENDER_24B)-file := $(NHLT_BLOB_PATH)/$(MAX98373_RENDER_24B)
|
||||||
|
$(MAX98373_RENDER_24B)-type := raw
|
||||||
|
|
||||||
cbfs-files-$(CONFIG_NHLT_DA7219) += $(DA7219_RENDER_CAPTURE)
|
cbfs-files-$(CONFIG_NHLT_DA7219) += $(DA7219_RENDER_CAPTURE)
|
||||||
$(DA7219_RENDER_CAPTURE)-file := $(NHLT_BLOB_PATH)/$(DA7219_RENDER_CAPTURE)
|
$(DA7219_RENDER_CAPTURE)-file := $(NHLT_BLOB_PATH)/$(DA7219_RENDER_CAPTURE)
|
||||||
$(DA7219_RENDER_CAPTURE)-type := raw
|
$(DA7219_RENDER_CAPTURE)-type := raw
|
||||||
|
@@ -39,5 +39,6 @@ enum {
|
|||||||
int nhlt_soc_add_dmic_array(struct nhlt *nhlt, int num_channels);
|
int nhlt_soc_add_dmic_array(struct nhlt *nhlt, int num_channels);
|
||||||
int nhlt_soc_add_max98357(struct nhlt *nhlt, int hwlink);
|
int nhlt_soc_add_max98357(struct nhlt *nhlt, int hwlink);
|
||||||
int nhlt_soc_add_da7219(struct nhlt *nhlt, int hwlink);
|
int nhlt_soc_add_da7219(struct nhlt *nhlt, int hwlink);
|
||||||
|
int nhlt_soc_add_max98373(struct nhlt *nhlt, int hwlink);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -180,6 +180,60 @@ static const struct nhlt_endp_descriptor max98357_descriptors[] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct nhlt_format_config max98373_render_formats[] = {
|
||||||
|
/* 48 KHz 24-bits per sample. */
|
||||||
|
{
|
||||||
|
.num_channels = 2,
|
||||||
|
.sample_freq_khz = 48,
|
||||||
|
.container_bits_per_sample = 32,
|
||||||
|
.valid_bits_per_sample = 24,
|
||||||
|
.speaker_mask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT,
|
||||||
|
.settings_file = "max98373-render-2ch-48khz-24b.bin",
|
||||||
|
},
|
||||||
|
/* 48 KHz 16-bits per sample. */
|
||||||
|
{
|
||||||
|
.num_channels = 2,
|
||||||
|
.sample_freq_khz = 48,
|
||||||
|
.container_bits_per_sample = 16,
|
||||||
|
.valid_bits_per_sample = 16,
|
||||||
|
.speaker_mask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT,
|
||||||
|
.settings_file = "max98373-render-2ch-48khz-16b.bin",
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct nhlt_format_config max98373_capture_formats[] = {
|
||||||
|
/* 48 KHz 16-bits per sample. */
|
||||||
|
{
|
||||||
|
.num_channels = 2,
|
||||||
|
.sample_freq_khz = 48,
|
||||||
|
.container_bits_per_sample = 16,
|
||||||
|
.valid_bits_per_sample = 16,
|
||||||
|
.speaker_mask = SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT,
|
||||||
|
.settings_file = "max98373-render-2ch-48khz-16b.bin",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct nhlt_endp_descriptor max98373_descriptors[] = {
|
||||||
|
{
|
||||||
|
.link = NHLT_LINK_SSP,
|
||||||
|
.device = NHLT_SSP_DEV_I2S,
|
||||||
|
.direction = NHLT_DIR_RENDER,
|
||||||
|
.vid = NHLT_VID,
|
||||||
|
.did = NHLT_DID_SSP,
|
||||||
|
.formats = max98373_render_formats,
|
||||||
|
.num_formats = ARRAY_SIZE(max98373_render_formats),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.link = NHLT_LINK_SSP,
|
||||||
|
.device = NHLT_SSP_DEV_I2S,
|
||||||
|
.direction = NHLT_DIR_CAPTURE,
|
||||||
|
.vid = NHLT_VID,
|
||||||
|
.did = NHLT_DID_SSP,
|
||||||
|
.formats = max98373_capture_formats,
|
||||||
|
.num_formats = ARRAY_SIZE(max98373_capture_formats),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
int nhlt_soc_add_dmic_array(struct nhlt *nhlt, int num_channels)
|
int nhlt_soc_add_dmic_array(struct nhlt *nhlt, int num_channels)
|
||||||
{
|
{
|
||||||
switch (num_channels) {
|
switch (num_channels) {
|
||||||
@@ -210,3 +264,10 @@ int nhlt_soc_add_max98357(struct nhlt *nhlt, int hwlink)
|
|||||||
return nhlt_add_ssp_endpoints(nhlt, hwlink, max98357_descriptors,
|
return nhlt_add_ssp_endpoints(nhlt, hwlink, max98357_descriptors,
|
||||||
ARRAY_SIZE(max98357_descriptors));
|
ARRAY_SIZE(max98357_descriptors));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int nhlt_soc_add_max98373(struct nhlt *nhlt, int hwlink)
|
||||||
|
{
|
||||||
|
/* 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));
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user