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:
parent
c14a99feda
commit
4a1ee4b53e
|
@ -6,6 +6,7 @@ config BOARD_SPECIFIC_OPTIONS
|
|||
select DRIVERS_I2C_GENERIC
|
||||
select DRIVERS_GENERIC_MAX98357A
|
||||
select DRIVERS_I2C_DA7219
|
||||
select DRIVERS_I2C_MAX98373
|
||||
select GENERIC_SPD_BIN
|
||||
select HAVE_ACPI_RESUME
|
||||
select HAVE_ACPI_TABLES
|
||||
|
@ -56,6 +57,12 @@ config INCLUDE_SND_MAX98357_DA7219_NHLT
|
|||
select NHLT_DA7219
|
||||
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
|
||||
string
|
||||
depends on HAVE_ME_BIN
|
||||
|
|
|
@ -33,7 +33,8 @@ void __attribute__((weak)) variant_nhlt_init(struct nhlt *nhlt)
|
|||
!nhlt_soc_add_dmic_array(nhlt, 4))
|
||||
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
|
||||
* settings for render and capture endpoints.
|
||||
|
@ -44,5 +45,9 @@ void __attribute__((weak)) variant_nhlt_init(struct nhlt *nhlt)
|
|||
/* MAXIM Smart Amps for left and right speakers. */
|
||||
if (!nhlt_soc_add_max98357(nhlt, AUDIO_LINK_SSP1))
|
||||
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
|
||||
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 pci 00.0 on end # Host Bridge
|
||||
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.1 on end # I2C #1
|
||||
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.1 off end # Management Engine Interface 2
|
||||
device pci 16.2 off end # Management Engine IDE-R
|
||||
|
|
|
@ -141,6 +141,13 @@ config NHLT_MAX98357
|
|||
help
|
||||
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
|
||||
bool
|
||||
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
|
||||
MAX98357_RENDER = max98357-render-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)
|
||||
$(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)-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)
|
||||
$(DA7219_RENDER_CAPTURE)-file := $(NHLT_BLOB_PATH)/$(DA7219_RENDER_CAPTURE)
|
||||
$(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_max98357(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
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
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,
|
||||
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));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue