]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
cros-ec-keyboard: Synchronize DT binding from linux
authorSjoerd Simons <sjoerd.simons@collabora.co.uk>
Thu, 27 Nov 2014 15:34:08 +0000 (16:34 +0100)
committerSimon Glass <sjg@chromium.org>
Tue, 6 Jan 2015 00:45:16 +0000 (17:45 -0700)
The ChromeOS EC keyboard is used by various different chromebooks. Peach
pi being the third board in the u-boot tree to use it (snow and peach
pit the other two). Rather then embedding the same big DT node in the
peach-pi DT again, copy the dtsi snippit & bindings documentation from
linux and include it in all 3 boards.

This slightly changes the dt bindings in u-boot:
  * google,key-rows becomes keypad,num-rows
  * google,key-colums becomes keypad,num-colums
  * google,repeat-delay-ms and google,repeat-rate-ms are no longer used
    and replaced by hardcoded values (similar to tegra kbc)

Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
Acked-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>
arch/arm/dts/exynos5250-snow.dts
arch/arm/dts/exynos5420-peach-pit.dts
arch/arm/dts/exynos5800-peach-pi.dts
doc/device-tree-bindings/input/cros-ec-keyb.txt
drivers/input/cros_ec_keyb.c

index 95af02534caa6ea9058a22b23fdb5dfc87617ac1..bac501516fd257861f69c2b645553d0f2f920a33 100644 (file)
@@ -64,7 +64,7 @@
        spi@131b0000 {
                spi-max-frequency = <1000000>;
                spi-deactivate-delay = <100>;
-               cros-ec@0 {
+               cros_ec: cros-ec@0 {
                        reg = <0>;
                        compatible = "google,cros-ec";
                        spi-max-frequency = <5000000>;
                samsung,dc-value        = <25>;
        };
 
-       cros-ec-keyb {
-               compatible = "google,cros-ec-keyb";
-               google,key-rows = <8>;
-               google,key-columns = <13>;
-               google,repeat-delay-ms = <240>;
-               google,repeat-rate-ms = <30>;
-               google,ghost-filter;
-               /*
-                * Keymap entries take the form of 0xRRCCKKKK where
-                * RR=Row CC=Column KKKK=Key Code
-                * The values below are for a US keyboard layout and
-                * are taken from the Linux driver. Note that the
-                * 102ND key is not used for US keyboards.
-                */
-               linux,keymap = <
-                       /* CAPSLCK F1         B          F10     */
-                       0x0001003a 0x0002003b 0x00030030 0x00040044
-                       /* N       =          R_ALT      ESC     */
-                       0x00060031 0x0008000d 0x000a0064 0x01010001
-                       /* F4      G          F7         H       */
-                       0x0102003e 0x01030022 0x01040041 0x01060023
-                       /* '       F9         BKSPACE    L_CTRL  */
-                       0x01080028 0x01090043 0x010b000e 0x0200001d
-                       /* TAB     F3         T          F6      */
-                       0x0201000f 0x0202003d 0x02030014 0x02040040
-                       /* ]       Y          102ND      [       */
-                       0x0205001b 0x02060015 0x02070056 0x0208001a
-                       /* F8      GRAVE      F2         5       */
-                       0x02090042 0x03010029 0x0302003c 0x03030006
-                       /* F5      6          -          \       */
-                       0x0304003f 0x03060007 0x0308000c 0x030b002b
-                       /* R_CTRL  A          D          F       */
-                       0x04000061 0x0401001e 0x04020020 0x04030021
-                       /* S       K          J          ;       */
-                       0x0404001f 0x04050025 0x04060024 0x04080027
-                       /* L       ENTER      Z          C       */
-                       0x04090026 0x040b001c 0x0501002c 0x0502002e
-                       /* V       X          ,          M       */
-                       0x0503002f 0x0504002d 0x05050033 0x05060032
-                       /* L_SHIFT /          .          SPACE   */
-                       0x0507002a 0x05080035 0x05090034 0x050B0039
-                       /* 1       3          4          2       */
-                       0x06010002 0x06020004 0x06030005 0x06040003
-                       /* 8       7          0          9       */
-                       0x06050009 0x06060008 0x0608000b 0x0609000a
-                       /* L_ALT   DOWN       RIGHT      Q       */
-                       0x060a0038 0x060b006c 0x060c006a 0x07010010
-                       /* E       R          W          I       */
-                       0x07020012 0x07030013 0x07040011 0x07050017
-                       /* U       R_SHIFT    P          O       */
-                       0x07060016 0x07070036 0x07080019 0x07090018
-                       /* UP      LEFT    */
-                       0x070b0067 0x070c0069>;
-       };
-
        fimd@14400000 {
                samsung,vl-freq = <60>;
                samsung,vl-col = <1366>;
        };
 
 };
+
+#include "cros-ec-keyboard.dtsi"
index fde863de3cf6b00b9b5fbcc3aa7585f3026044fc..d1d87350be306fb48b88e32d6e9ded69b3adef32 100644 (file)
                pmic = "/i2c@12ca0000";
        };
 
-       cros-ec-keyb {
-               compatible = "google,cros-ec-keyb";
-               google,key-rows = <8>;
-               google,key-columns = <13>;
-               google,repeat-delay-ms = <240>;
-               google,repeat-rate-ms = <30>;
-               google,ghost-filter;
-               /*
-                * Keymap entries take the form of 0xRRCCKKKK where
-                * RR=Row CC=Column KKKK=Key Code
-                * The values below are for a US keyboard layout and
-                * are taken from the Linux driver. Note that the
-                * 102ND key is not used for US keyboards.
-                */
-               linux,keymap = <
-                       /* CAPSLCK F1         B          F10     */
-                       0x0001003a 0x0002003b 0x00030030 0x00040044
-                       /* N       =          R_ALT      ESC     */
-                       0x00060031 0x0008000d 0x000a0064 0x01010001
-                       /* F4      G          F7         H       */
-                       0x0102003e 0x01030022 0x01040041 0x01060023
-                       /* '       F9         BKSPACE    L_CTRL  */
-                       0x01080028 0x01090043 0x010b000e 0x0200001d
-                       /* TAB     F3         T          F6      */
-                       0x0201000f 0x0202003d 0x02030014 0x02040040
-                       /* ]       Y          102ND      [       */
-                       0x0205001b 0x02060015 0x02070056 0x0208001a
-                       /* F8      GRAVE      F2         5       */
-                       0x02090042 0x03010029 0x0302003c 0x03030006
-                       /* F5      6          -          \       */
-                       0x0304003f 0x03060007 0x0308000c 0x030b002b
-                       /* R_CTRL  A          D          F       */
-                       0x04000061 0x0401001e 0x04020020 0x04030021
-                       /* S       K          J          ;       */
-                       0x0404001f 0x04050025 0x04060024 0x04080027
-                       /* L       ENTER      Z          C       */
-                       0x04090026 0x040b001c 0x0501002c 0x0502002e
-                       /* V       X          ,          M       */
-                       0x0503002f 0x0504002d 0x05050033 0x05060032
-                       /* L_SHIFT /          .          SPACE   */
-                       0x0507002a 0x05080035 0x05090034 0x050B0039
-                       /* 1       3          4          2       */
-                       0x06010002 0x06020004 0x06030005 0x06040003
-                       /* 8       7          0          9       */
-                       0x06050009 0x06060008 0x0608000b 0x0609000a
-                       /* L_ALT   DOWN       RIGHT      Q       */
-                       0x060a0038 0x060b006c 0x060c006a 0x07010010
-                       /* E       R          W          I       */
-                       0x07020012 0x07030013 0x07040011 0x07050017
-                       /* U       R_SHIFT    P          O       */
-                       0x07060016 0x07070036 0x07080019 0x07090018
-                       /* UP      LEFT    */
-                       0x070b0067 0x070c0069>;
-       };
-
        dmc {
                mem-manuf = "samsung";
                mem-type = "ddr3";
        spi@12d40000 { /* spi2 */
                spi-max-frequency = <4000000>;
                spi-deactivate-delay = <200>;
-               cros-ec@0 {
+               cros_ec: cros-ec@0 {
                        reg = <0>;
                        compatible = "google,cros-ec";
                        spi-half-duplex;
                samsung,dual-lcd-enabled = <0>;
        };
 };
+
+#include "cros-ec-keyboard.dtsi"
index 2f9d2dbd54658cc2ceeab91739cb797aa38c96cc..e7c380f83beba0381b6d36ab09111056ab7492d6 100644 (file)
@@ -96,7 +96,7 @@
        spi@12d40000 { /* spi2 */
                spi-max-frequency = <4000000>;
                spi-deactivate-delay = <200>;
-               cros-ec@0 {
+               cros_ec: cros-ec@0 {
                        reg = <0>;
                        compatible = "google,cros-ec";
                        spi-half-duplex;
                samsung,dual-lcd-enabled = <0>;
        };
 };
+
+#include "cros-ec-keyboard.dtsi"
index 31182760780215d0f009582411a7ff494e6e782a..0f6355ce39b511e15bfa62b8897548793e5becb1 100644 (file)
@@ -1,45 +1,38 @@
-CROS_EC Keyboard
+ChromeOS EC Keyboard
 
-The CROS_EC (Matrix Keyboard Protocol) allows communcation with a secondary
-micro used for keyboard, and possible other features.
+Google's ChromeOS EC Keyboard is a simple matrix keyboard implemented on
+a separate EC (Embedded Controller) device. It provides a message for reading
+key scans from the EC. These are then converted into keycodes for processing
+by the kernel.
 
-The CROS_EC keyboard uses this protocol to receive key scans and produce input
-in U-Boot.
+This binding is based on matrix-keymap.txt and extends/modifies it as follows:
 
-Required properties :
-- compatible : "google,cros-ec-keyb"
-- google,key-rows : Number of key rows
-- google,key-columns : Number of key columns
+Required properties:
+- compatible: "google,cros-ec-keyb"
 
-Optional properties, in addition to those specified by the shared
-matrix-keyboard bindings:
+Optional properties:
+- google,needs-ghost-filter: True to enable a ghost filter for the matrix
+keyboard. This is recommended if the EC does not have its own logic or
+hardware for this.
 
-- linux,fn-keymap: a second keymap, same specification as the
-  matrix-keyboard-controller spec but to be used when the KEY_FN modifier
-  key is pressed.
-- google,repeat-delay-ms : delay in milliseconds before repeat starts
-- google,repeat-rate-ms : delay between each subsequent key press
-- google,ghost-filter : enable ghost filtering for this device
 
-Example, taken from daisy:
+Example:
 
 cros-ec-keyb {
        compatible = "google,cros-ec-keyb";
-       google,key-rows = <8>;
-       google,key-columns = <13>;
-       google,ghost-filter;
-       google,repeat-delay-ms = <240>;
-       google,repeat-rate-ms = <30>;
+       keypad,num-rows = <8>;
+       keypad,num-columns = <13>;
+       google,needs-ghost-filter;
        /*
-               * Keymap entries take the form of 0xRRCCKKKK where
-               * RR=Row CC=Column KKKK=Key Code
-               * The values below are for a US keyboard layout and
-               * are taken from the Linux driver. Note that the
-               * 102ND key is not used for US keyboards.
-               */
+        * Keymap entries take the form of 0xRRCCKKKK where
+        * RR=Row CC=Column KKKK=Key Code
+        * The values below are for a US keyboard layout and
+        * are taken from the Linux driver. Note that the
+        * 102ND key is not used for US keyboards.
+        */
        linux,keymap = <
                /* CAPSLCK F1         B          F10     */
-               0x0001003a 0x0002003c 0x00030030 0x00040044
+               0x0001003a 0x0002003b 0x00030030 0x00040044
                /* N       =          R_ALT      ESC     */
                0x00060031 0x0008000d 0x000a0064 0x01010001
                /* F4      G          F7         H       */
index 47502b176310f2b4ba84185b26301aeb1cafec72..49ee7b2c9b635733174d635c087013acb1c95618 100644 (file)
@@ -18,6 +18,8 @@ DECLARE_GLOBAL_DATA_PTR;
 
 enum {
        KBC_MAX_KEYS            = 8,    /* Maximum keys held down at once */
+       KBC_REPEAT_RATE_MS      = 30,
+       KBC_REPEAT_DELAY_MS     = 240,
 };
 
 static struct keyb {
@@ -26,8 +28,6 @@ static struct keyb {
        struct key_matrix matrix;       /* The key matrix layer */
        int key_rows;                   /* Number of keyboard rows */
        int key_cols;                   /* Number of keyboard columns */
-       unsigned int repeat_delay_ms;   /* Time before autorepeat starts */
-       unsigned int repeat_rate_ms;    /* Autorepeat rate in ms */
        int ghost_filter;               /* 1 to enable ghost filter, else 0 */
        int inited;                     /* 1 if keyboard is ready */
 } config;
@@ -188,8 +188,8 @@ static int cros_ec_keyb_decode_fdt(const void *blob, int node,
         * Get keyboard rows and columns - at present we are limited to
         * 8 columns by the protocol (one byte per row scan)
         */
-       config->key_rows = fdtdec_get_int(blob, node, "google,key-rows", 0);
-       config->key_cols = fdtdec_get_int(blob, node, "google,key-columns", 0);
+       config->key_rows = fdtdec_get_int(blob, node, "keypad,num-rows", 0);
+       config->key_cols = fdtdec_get_int(blob, node, "keypad,num-columns", 0);
        if (!config->key_rows || !config->key_cols ||
                        config->key_rows * config->key_cols / 8
                                > CROS_EC_KEYSCAN_COLS) {
@@ -197,10 +197,6 @@ static int cros_ec_keyb_decode_fdt(const void *blob, int node,
                      config->key_rows, config->key_cols);
                return -1;
        }
-       config->repeat_delay_ms = fdtdec_get_int(blob, node,
-                                                "google,repeat-delay-ms", 0);
-       config->repeat_rate_ms = fdtdec_get_int(blob, node,
-                                               "google,repeat-rate-ms", 0);
        config->ghost_filter = fdtdec_get_bool(blob, node,
                                               "google,ghost-filter");
        return 0;
@@ -232,8 +228,8 @@ static int cros_ec_init_keyboard(struct stdio_dev *dev)
        }
        if (cros_ec_keyb_decode_fdt(blob, node, &config))
                return -1;
-       input_set_delays(&config.input, config.repeat_delay_ms,
-                        config.repeat_rate_ms);
+       input_set_delays(&config.input, KBC_REPEAT_DELAY_MS,
+                        KBC_REPEAT_RATE_MS);
        if (key_matrix_init(&config.matrix, config.key_rows,
                        config.key_cols, config.ghost_filter)) {
                debug("%s: cannot init key matrix\n", __func__);