diff --git a/src/ec/google/wilco/chip.c b/src/ec/google/wilco/chip.c
new file mode 100644
index 0000000..cc9f030
--- /dev/null
+++ b/src/ec/google/wilco/chip.c
@@ -0,0 +1,80 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2018 Google LLC
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <device/pnp.h>
+#include <pc80/keyboard.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#include "commands.h"
+#include "ec.h"
+#include "chip.h"
+
+static void wilco_ec_init(struct device *dev)
+{
+	if (!dev->enabled)
+		return;
+
+	/* Print EC firmware information */
+	wilco_ec_print_all_info();
+
+	/* Initialize keyboard, ignore emulated PS/2 mouse */
+	pc_keyboard_init(NO_AUX_DEVICE);
+
+	/* Direct power button to the host for processing */
+	wilco_ec_send(KB_POWER_BUTTON_TO_HOST, 1);
+}
+
+static void wilco_ec_resource(struct device *dev, int index,
+			      size_t base, size_t size)
+{
+	struct resource *res = new_resource(dev, index);
+	res->flags = IORESOURCE_IO | IORESOURCE_ASSIGNED | IORESOURCE_FIXED;
+	res->base = base;
+	res->size = size;
+}
+
+static void wilco_ec_read_resources(struct device *dev)
+{
+	/* ACPI command and data regions */
+	wilco_ec_resource(dev, 0, CONFIG_EC_BASE_ACPI_DATA, 8);
+
+	/* Host command and data regions */
+	wilco_ec_resource(dev, 1, CONFIG_EC_BASE_HOST_DATA, 8);
+
+	/* Packet region */
+	wilco_ec_resource(dev, 2, CONFIG_EC_BASE_PACKET, 16);
+}
+
+static struct device_operations ops = {
+	.init			= wilco_ec_init,
+	.read_resources		= wilco_ec_read_resources,
+	.enable_resources	= DEVICE_NOOP,
+	.set_resources		= DEVICE_NOOP,
+};
+
+static struct pnp_info info[] = {
+	{ NULL, 0, 0, 0, }
+};
+
+static void wilco_ec_enable_dev(struct device *dev)
+{
+	pnp_enable_devices(dev, &ops, ARRAY_SIZE(info), info);
+}
+
+struct chip_operations ec_google_wilco_ops = {
+	CHIP_NAME("Google Wilco EC")
+	.enable_dev = wilco_ec_enable_dev,
+};
