mainboard/google/poppy: Generate required nhlt table

poppy board uses Maxim 98927 speaker codec and Realtek RT5663
for headset. Select the apropriate NHLT blobs to be packaged in CBFS.
Also, generate the required ACPI NHLT table for codec and the supported
topology in poppy.

BUG=chrome-os-partner:62051
BRANCH=None
TEST=With the required driver support in kernel verify that
the Audio plays on on-board speakers and headset, recording
works from on-board mics and headset mics.

Change-Id: I98c65038b35fe99a661807de0766e6eac2c80eed
Signed-off-by: M Naveen <naveen.m@intel.com>
Signed-off-by: Rizwan Qureshi <rizwan.qureshi@intel.com>
Signed-off-by: Naresh G Solanki <naresh.solanki@intel.com>
Reviewed-on: https://review.coreboot.org/18214
Tested-by: build bot (Jenkins)
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
This commit is contained in:
Rizwan Qureshi 2017-01-13 22:30:01 +05:30 committed by Martin Roth
parent 5360c7ef94
commit 2f5446be4a
2 changed files with 51 additions and 0 deletions

View File

@ -41,4 +41,10 @@ config MAX_CPUS
int int
default 8 default 8
config INCLUDE_NHLT_BLOBS
bool "Include blobs for audio."
select NHLT_DMIC_2CH
select NHLT_DMIC_4CH
select NHLT_MAX98927
select NHLT_RT5663
endif endif

View File

@ -14,19 +14,64 @@
*/ */
#include <arch/acpi.h> #include <arch/acpi.h>
#include <console/console.h>
#include <device/device.h> #include <device/device.h>
#include <ec/ec.h> #include <ec/ec.h>
#include <soc/nhlt.h>
#include <vendorcode/google/chromeos/chromeos.h> #include <vendorcode/google/chromeos/chromeos.h>
static const char *oem_id_maxim = "GOOGLE";
static const char *oem_table_id_maxim = "POPPYMAX";
static void mainboard_init(device_t dev) static void mainboard_init(device_t dev)
{ {
mainboard_ec_init(); mainboard_ec_init();
} }
static unsigned long mainboard_write_acpi_tables(device_t device,
unsigned long current, acpi_rsdp_t *rsdp)
{
uintptr_t start_addr;
uintptr_t end_addr;
struct nhlt *nhlt;
start_addr = current;
nhlt = nhlt_init();
if (nhlt == NULL)
return start_addr;
/* 2 Channel DMIC array. */
if (nhlt_soc_add_dmic_array(nhlt, 2))
printk(BIOS_ERR, "Couldn't add 2CH DMIC array.\n");
/* 4 Channel DMIC array. */
if (nhlt_soc_add_dmic_array(nhlt, 4))
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))
printk(BIOS_ERR, "Couldn't add Maxim MAX98927\n");
/* Realtek RT5663 Headset codec. */
if (nhlt_soc_add_rt5663(nhlt, AUDIO_LINK_SSP1))
printk(BIOS_ERR, "Couldn't add Realtek RT5663.\n");
end_addr = nhlt_soc_serialize_oem_overrides(nhlt, start_addr,
oem_id_maxim, oem_table_id_maxim, 0);
if (end_addr != start_addr)
acpi_add_table(rsdp, (void *)start_addr);
return end_addr;
}
static void mainboard_enable(device_t dev) static void mainboard_enable(device_t dev)
{ {
dev->ops->init = mainboard_init; dev->ops->init = mainboard_init;
dev->ops->acpi_inject_dsdt_generator = chromeos_dsdt_generator; dev->ops->acpi_inject_dsdt_generator = chromeos_dsdt_generator;
dev->ops->write_acpi_tables = mainboard_write_acpi_tables;
} }
struct chip_operations mainboard_ops = { struct chip_operations mainboard_ops = {