summaryrefslogtreecommitdiff
path: root/src/mainboard/intel/amenia/mainboard.c
diff options
context:
space:
mode:
authorSaurabh Satija <saurabh.satija@intel.com>2016-05-26 16:08:45 -0700
committerAaron Durbin <adurbin@chromium.org>2016-07-01 03:21:22 +0200
commit90e716691df44d82e38039ce4be20d80f9b4f030 (patch)
tree9760456d36a89d399321bfdde86e0bcef5c17a0f /src/mainboard/intel/amenia/mainboard.c
parent734aa8713c7d169501ff74c0e7b02ba7e9cd9e71 (diff)
mainboard/intel/amenia: add NHLT support
Add ACPI NHLT table generation that the current hardware supports as well select the hardware used on the board. Amenia has support for two audio codecs, Dialog for headsets and Maxim for speakers. Change-Id: Iaba9ec81ffb4f128f2e4413dec5174d9ecb856c9 Signed-off-by: Saurabh Satija <saurabh.satija@intel.com> Reviewed-on: https://review.coreboot.org/15024 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'src/mainboard/intel/amenia/mainboard.c')
-rw-r--r--src/mainboard/intel/amenia/mainboard.c48
1 files changed, 46 insertions, 2 deletions
diff --git a/src/mainboard/intel/amenia/mainboard.c b/src/mainboard/intel/amenia/mainboard.c
index 8d10b28700..6ec5b98328 100644
--- a/src/mainboard/intel/amenia/mainboard.c
+++ b/src/mainboard/intel/amenia/mainboard.c
@@ -15,9 +15,10 @@
* GNU General Public License for more details.
*/
+#include <arch/acpi.h>
+#include <console/console.h>
#include <device/device.h>
-#include <soc/gpio.h>
-#include <soc/pci_devs.h>
+#include <soc/nhlt.h>
#include "ec.h"
#include "gpio.h"
@@ -27,6 +28,49 @@ static void mainboard_init(void *chip_info)
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, "Added 2CH DMIC array.\n");
+
+ /* Dialog for Headset codec.
+ * Headset codec is bi-directional but uses the same configuration
+ * settings for render and capture endpoints.
+ */
+ if (!nhlt_soc_add_da7219(nhlt, AUDIO_LINK_SSP1))
+ printk(BIOS_ERR, "Added Dialog_7219 codec.\n");
+
+ /* MAXIM Smart Amps for left and right speakers. */
+ if (!nhlt_soc_add_max98357(nhlt, AUDIO_LINK_SSP5))
+ printk(BIOS_ERR, "Added Maxim_98357 codec.\n");
+
+ end_addr = nhlt_soc_serialize(nhlt, start_addr);
+
+ if (end_addr != start_addr)
+ acpi_add_table(rsdp, (void *)start_addr);
+
+ return end_addr;
+}
+
+static void mainboard_enable(device_t dev)
+{
+ dev->ops->write_acpi_tables = mainboard_write_acpi_tables;
+}
+
struct chip_operations mainboard_ops = {
.init = mainboard_init,
+ .enable_dev = mainboard_enable,
};