summaryrefslogtreecommitdiff
path: root/src/ec/google/chromeec/ec_lpc.c
diff options
context:
space:
mode:
authorHung-Te Lin <hungte@chromium.org>2013-04-15 18:06:32 +0800
committerStefan Reinauer <stefan.reinauer@coreboot.org>2013-04-16 01:07:16 +0200
commit76720d064da18d67c1be53ab4c0b2af6f1fcfd06 (patch)
treeda0759975b3a071dfcbd00f155495d4bb0dd9c37 /src/ec/google/chromeec/ec_lpc.c
parent6bfbb33a64f95bcfdf46f8a35c342177886bb594 (diff)
downloadcoreboot-76720d064da18d67c1be53ab4c0b2af6f1fcfd06.tar.xz
ec/google: Move plug-n-play initialization to LPC protocol.
"Plug-n-play" is not supported on all platforms using Google's Chrome EC. For example, EC on I2C bus will need explicit configuration and initialization. So move the plug-n-play initialization to the LPC implementation. Verified by building Google/Link (with EC/LPC) successfully. Change-Id: I49e5943503fd5301aa2b2f8c1265f3813719d7e3 Signed-off-by: Hung-Te Lin <hungte@chromium.org> Reviewed-on: http://review.coreboot.org/3089 Tested-by: build bot (Jenkins) Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'src/ec/google/chromeec/ec_lpc.c')
-rw-r--r--src/ec/google/chromeec/ec_lpc.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/ec/google/chromeec/ec_lpc.c b/src/ec/google/chromeec/ec_lpc.c
index 6443592532..4e8d3fbb77 100644
--- a/src/ec/google/chromeec/ec_lpc.c
+++ b/src/ec/google/chromeec/ec_lpc.c
@@ -18,9 +18,13 @@
*/
#include <stdint.h>
+#include <stdlib.h>
+
#include <console/console.h>
#include <arch/io.h>
#include <delay.h>
+#include <device/pnp.h>
+#include "chip.h"
#include "ec.h"
#include "ec_commands.h"
@@ -180,6 +184,51 @@ int google_chromeec_command(struct chromeec_command *cec_command)
}
#ifndef __PRE_RAM__
+
+#ifndef __SMM__
+static void lpc_ec_init(device_t dev)
+{
+ struct ec_google_chromeec_config *conf = dev->chip_info;
+
+ if (!dev->enabled)
+ return;
+ pc_keyboard_init(&conf->keyboard);
+ google_chromeec_init();
+}
+
+static void lpc_ec_read_resources(device_t dev)
+{
+ /* Nothing, but this function avoids an error on serial console. */
+}
+
+static void lpc_ec_enable_resources(device_t dev)
+{
+ /* Nothing, but this function avoids an error on serial console. */
+}
+
+static struct device_operations ops = {
+ .init = lpc_ec_init,
+ .read_resources = lpc_ec_read_resources,
+ .enable_resources = lpc_ec_enable_resources
+};
+
+static struct pnp_info pnp_dev_info[] = {
+ { &ops, 0, 0, { 0, 0 }, }
+};
+
+static void enable_dev(device_t dev)
+{
+ pnp_enable_devices(dev, &pnp_ops, ARRAY_SIZE(pnp_dev_info),
+ pnp_dev_info);
+}
+
+struct chip_operations ec_google_chromeec_ops = {
+ CHIP_NAME("Google Chrome EC")
+ .enable_dev = enable_dev,
+};
+
+#endif /* __SMM__ */
+
u8 google_chromeec_get_event(void)
{
if (google_chromeec_wait_ready(EC_LPC_ADDR_ACPI_CMD)) {