cros-ec-keyboard: Synchronize DT binding from linux
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>
This commit is contained in:
parent
ee5ee87642
commit
9332274989
@ -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>;
|
||||
@ -151,61 +151,6 @@
|
||||
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>;
|
||||
@ -250,3 +195,5 @@
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
#include "cros-ec-keyboard.dtsi"
|
||||
|
@ -28,61 +28,6 @@
|
||||
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";
|
||||
@ -157,7 +102,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;
|
||||
@ -211,3 +156,5 @@
|
||||
samsung,dual-lcd-enabled = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
#include "cros-ec-keyboard.dtsi"
|
||||
|
@ -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;
|
||||
@ -150,3 +150,5 @@
|
||||
samsung,dual-lcd-enabled = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
#include "cros-ec-keyboard.dtsi"
|
||||
|
@ -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 */
|
||||
|
@ -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__);
|
||||
|
Loading…
Reference in New Issue
Block a user