Back to home page

OSCL-LXR

 
 

    


0001 # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
0002 %YAML 1.2
0003 ---
0004 
0005 $id: http://devicetree.org/schemas/input/google,cros-ec-keyb.yaml#
0006 $schema: http://devicetree.org/meta-schemas/core.yaml#
0007 
0008 title: ChromeOS EC Keyboard
0009 
0010 maintainers:
0011   - Simon Glass <sjg@chromium.org>
0012   - Benson Leung <bleung@chromium.org>
0013 
0014 description: |
0015   Google's ChromeOS EC Keyboard is a simple matrix keyboard
0016   implemented on a separate EC (Embedded Controller) device. It provides
0017   a message for reading key scans from the EC. These are then converted
0018   into keycodes for processing by the kernel. This device also supports
0019   switches/buttons like power and volume buttons.
0020 
0021 properties:
0022   compatible:
0023     oneOf:
0024       - description: ChromeOS EC with only buttons/switches
0025         const: google,cros-ec-keyb-switches
0026       - description: ChromeOS EC with keyboard and possibly buttons/switches
0027         const: google,cros-ec-keyb
0028 
0029   google,needs-ghost-filter:
0030     description:
0031       Enable a ghost filter for the matrix keyboard. This is recommended
0032       if the EC does not have its own logic or hardware for this.
0033     type: boolean
0034 
0035   function-row-physmap:
0036     $ref: /schemas/types.yaml#/definitions/uint32-array
0037     minItems: 1
0038     maxItems: 15
0039     description: |
0040       An ordered u32 array describing the rows/columns (in the scan matrix)
0041       of top row keys from physical left (KEY_F1) to right. Each entry
0042       encodes the row/column as:
0043       (((row) & 0xFF) << 24) | (((column) & 0xFF) << 16)
0044       where the lower 16 bits are reserved. This property is specified only
0045       when the keyboard has a custom design for the top row keys.
0046 
0047 dependencies:
0048   function-row-phsymap: [ 'linux,keymap' ]
0049   google,needs-ghost-filter: [ 'linux,keymap' ]
0050 
0051 required:
0052   - compatible
0053 
0054 if:
0055   properties:
0056     compatible:
0057       contains:
0058         const: google,cros-ec-keyb
0059 then:
0060   $ref: "/schemas/input/matrix-keymap.yaml#"
0061   required:
0062     - keypad,num-rows
0063     - keypad,num-columns
0064     - linux,keymap
0065 
0066 unevaluatedProperties: false
0067 
0068 examples:
0069   - |
0070     #include <dt-bindings/input/input.h>
0071     keyboard-controller {
0072         compatible = "google,cros-ec-keyb";
0073         keypad,num-rows = <8>;
0074         keypad,num-columns = <13>;
0075         google,needs-ghost-filter;
0076         function-row-physmap = <
0077             MATRIX_KEY(0x00, 0x02, 0)   /* T1 */
0078             MATRIX_KEY(0x03, 0x02, 0)   /* T2 */
0079             MATRIX_KEY(0x02, 0x02, 0)   /* T3 */
0080             MATRIX_KEY(0x01, 0x02, 0)   /* T4 */
0081             MATRIX_KEY(0x03, 0x04, 0)   /* T5 */
0082             MATRIX_KEY(0x02, 0x04, 0)   /* T6 */
0083             MATRIX_KEY(0x01, 0x04, 0)   /* T7 */
0084             MATRIX_KEY(0x02, 0x09, 0)   /* T8 */
0085             MATRIX_KEY(0x01, 0x09, 0)   /* T9 */
0086             MATRIX_KEY(0x00, 0x04, 0)   /* T10 */
0087         >;
0088         /*
0089          * Keymap entries take the form of 0xRRCCKKKK where
0090          * RR=Row CC=Column KKKK=Key Code
0091          * The values below are for a US keyboard layout and
0092          * are taken from the Linux driver. Note that the
0093          * 102ND key is not used for US keyboards.
0094          */
0095         linux,keymap = <
0096             /* CAPSLCK F1         B          F10     */
0097             0x0001003a 0x0002003b 0x00030030 0x00040044
0098             /* N       =          R_ALT      ESC     */
0099             0x00060031 0x0008000d 0x000a0064 0x01010001
0100             /* F4      G          F7         H       */
0101             0x0102003e 0x01030022 0x01040041 0x01060023
0102             /* '       F9         BKSPACE    L_CTRL  */
0103             0x01080028 0x01090043 0x010b000e 0x0200001d
0104             /* TAB     F3         T          F6      */
0105             0x0201000f 0x0202003d 0x02030014 0x02040040
0106             /* ]       Y          102ND      [       */
0107             0x0205001b 0x02060015 0x02070056 0x0208001a
0108             /* F8      GRAVE      F2         5       */
0109             0x02090042 0x03010029 0x0302003c 0x03030006
0110             /* F5      6          -          \       */
0111             0x0304003f 0x03060007 0x0308000c 0x030b002b
0112             /* R_CTRL  A          D          F       */
0113             0x04000061 0x0401001e 0x04020020 0x04030021
0114             /* S       K          J          ;       */
0115             0x0404001f 0x04050025 0x04060024 0x04080027
0116             /* L       ENTER      Z          C       */
0117             0x04090026 0x040b001c 0x0501002c 0x0502002e
0118             /* V       X          ,          M       */
0119             0x0503002f 0x0504002d 0x05050033 0x05060032
0120             /* L_SHIFT /          .          SPACE   */
0121             0x0507002a 0x05080035 0x05090034 0x050B0039
0122             /* 1       3          4          2       */
0123             0x06010002 0x06020004 0x06030005 0x06040003
0124             /* 8       7          0          9       */
0125             0x06050009 0x06060008 0x0608000b 0x0609000a
0126             /* L_ALT   DOWN       RIGHT      Q       */
0127             0x060a0038 0x060b006c 0x060c006a 0x07010010
0128             /* E       R          W          I       */
0129             0x07020012 0x07030013 0x07040011 0x07050017
0130             /* U       R_SHIFT    P          O       */
0131             0x07060016 0x07070036 0x07080019 0x07090018
0132             /* UP      LEFT    */
0133             0x070b0067 0x070c0069>;
0134     };
0135   - |
0136     /* No matrix keyboard, just buttons/switches */
0137     keyboard-controller {
0138         compatible = "google,cros-ec-keyb-switches";
0139     };
0140 ...