cros: exynos: enable cros-ec for smdk5250
authorHung-ying Tyan <tyanh@chromium.org>
Wed, 15 May 2013 10:27:34 +0000 (18:27 +0800)
committerTom Rini <trini@ti.com>
Wed, 26 Jun 2013 14:15:52 +0000 (10:15 -0400)
This patch initiates cros-ec in board_init() to enable it for smdk5250.

This patch depends on the patch in the MMC series that brings in exynos5-dt.c.
Refer to http://patchwork.ozlabs.org/patch/240084.

Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
Signed-off-by: Hung-ying Tyan <tyanh@chromium.org>
Acked-by: Simon Glass <sjg@chromium.org>
board/samsung/smdk5250/exynos5-dt.c
include/configs/exynos5250-dt.h

index 813150586f6274bef6269106e1dc1cb60e30698b..aacf43eaa483656914ac0932740b0e74b47568aa 100644 (file)
@@ -21,6 +21,7 @@
  */
 
 #include <common.h>
+#include <cros_ec.h>
 #include <fdtdec.h>
 #include <asm/io.h>
 #include <errno.h>
@@ -69,6 +70,13 @@ static void boot_temp_check(void)
 }
 #endif
 
+struct local_info {
+       struct cros_ec_dev *cros_ec_dev;        /* Pointer to cros_ec device */
+       int cros_ec_err;                        /* Error for cros_ec, 0 if ok */
+};
+
+static struct local_info local;
+
 #ifdef CONFIG_USB_EHCI_EXYNOS
 int board_usb_vbus_init(void)
 {
@@ -97,6 +105,20 @@ static void  board_enable_audio_codec(void)
 }
 #endif
 
+struct cros_ec_dev *board_get_cros_ec_dev(void)
+{
+       return local.cros_ec_dev;
+}
+
+static int board_init_cros_ec_devices(const void *blob)
+{
+       local.cros_ec_err = cros_ec_init(blob, &local.cros_ec_dev);
+       if (local.cros_ec_err)
+               return -1;  /* Will report in board_late_init() */
+
+       return 0;
+}
+
 int board_init(void)
 {
        gd->bd->bi_boot_params = (PHYS_SDRAM_1 + 0x100UL);
@@ -112,6 +134,10 @@ int board_init(void)
 #ifdef CONFIG_EXYNOS_SPI
        spi_init();
 #endif
+
+       if (board_init_cros_ec_devices(gd->fdt_blob))
+               return -1;
+
 #ifdef CONFIG_USB_EHCI_EXYNOS
        board_usb_vbus_init();
 #endif
@@ -421,3 +447,22 @@ void exynos_set_dp_phy(unsigned int onoff)
        set_dp_phy_ctrl(onoff);
 }
 #endif
+
+#ifdef CONFIG_BOARD_LATE_INIT
+int board_late_init(void)
+{
+       stdio_print_current_devices();
+
+       if (local.cros_ec_err) {
+               /* Force console on */
+               gd->flags &= ~GD_FLG_SILENT;
+
+               printf("cros-ec communications failure %d\n",
+                      local.cros_ec_err);
+               puts("\nPlease reset with Power+Refresh\n\n");
+               panic("Cannot init cros-ec device");
+               return -1;
+       }
+       return 0;
+}
+#endif
index 163243572f745303b6d2ce9d1729456d975e4b46..c104a3704f43ccb96cac12b071580907a001d4ce 100644 (file)
 #define CONFIG_BAUDRATE                        115200
 #define EXYNOS5_DEFAULT_UART_OFFSET    0x010000
 
+/* Enable keyboard */
+#define CONFIG_CROS_EC         /* CROS_EC protocol */
+#define CONFIG_CROS_EC_SPI             /* Support CROS_EC over SPI */
+#define CONFIG_CROS_EC_I2C             /* Support CROS_EC over I2C */
+#define CONFIG_CROS_EC_KEYB    /* CROS_EC keyboard input */
+#define CONFIG_CMD_CROS_EC
+#define CONFIG_KEYBOARD
+
 /* Console configuration */
 #define CONFIG_CONSOLE_MUX
 #define CONFIG_SYS_CONSOLE_IS_IN_ENV
 #define EXYNOS_DEVICE_SETTINGS \
-               "stdin=serial\0" \
+               "stdin=serial,cros-ec-keyb\0" \
                "stdout=serial,lcd\0" \
                "stderr=serial,lcd\0"