Merge branch 'misc' of git://git.denx.de/u-boot-x86
This commit is contained in:
		
						commit
						fc078895d8
					
				|  | @ -64,7 +64,7 @@ | ||||||
| 	spi@131b0000 { | 	spi@131b0000 { | ||||||
| 		spi-max-frequency = <1000000>; | 		spi-max-frequency = <1000000>; | ||||||
| 		spi-deactivate-delay = <100>; | 		spi-deactivate-delay = <100>; | ||||||
| 		cros-ec@0 { | 		cros_ec: cros-ec@0 { | ||||||
| 			reg = <0>; | 			reg = <0>; | ||||||
| 			compatible = "google,cros-ec"; | 			compatible = "google,cros-ec"; | ||||||
| 			spi-max-frequency = <5000000>; | 			spi-max-frequency = <5000000>; | ||||||
|  | @ -151,61 +151,6 @@ | ||||||
| 		samsung,dc-value	= <25>; | 		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 { | 	fimd@14400000 { | ||||||
| 		samsung,vl-freq = <60>; | 		samsung,vl-freq = <60>; | ||||||
| 		samsung,vl-col = <1366>; | 		samsung,vl-col = <1366>; | ||||||
|  | @ -250,3 +195,5 @@ | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| }; | }; | ||||||
|  | 
 | ||||||
|  | #include "cros-ec-keyboard.dtsi" | ||||||
|  |  | ||||||
|  | @ -28,61 +28,6 @@ | ||||||
| 		pmic = "/i2c@12ca0000"; | 		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 { | 	dmc { | ||||||
| 		mem-manuf = "samsung"; | 		mem-manuf = "samsung"; | ||||||
| 		mem-type = "ddr3"; | 		mem-type = "ddr3"; | ||||||
|  | @ -157,7 +102,7 @@ | ||||||
| 	spi@12d40000 { /* spi2 */ | 	spi@12d40000 { /* spi2 */ | ||||||
| 		spi-max-frequency = <4000000>; | 		spi-max-frequency = <4000000>; | ||||||
| 		spi-deactivate-delay = <200>; | 		spi-deactivate-delay = <200>; | ||||||
| 		cros-ec@0 { | 		cros_ec: cros-ec@0 { | ||||||
| 			reg = <0>; | 			reg = <0>; | ||||||
| 			compatible = "google,cros-ec"; | 			compatible = "google,cros-ec"; | ||||||
| 			spi-half-duplex; | 			spi-half-duplex; | ||||||
|  | @ -211,3 +156,5 @@ | ||||||
| 		samsung,dual-lcd-enabled = <0>; | 		samsung,dual-lcd-enabled = <0>; | ||||||
| 	}; | 	}; | ||||||
| }; | }; | ||||||
|  | 
 | ||||||
|  | #include "cros-ec-keyboard.dtsi" | ||||||
|  |  | ||||||
|  | @ -96,7 +96,7 @@ | ||||||
| 	spi@12d40000 { /* spi2 */ | 	spi@12d40000 { /* spi2 */ | ||||||
| 		spi-max-frequency = <4000000>; | 		spi-max-frequency = <4000000>; | ||||||
| 		spi-deactivate-delay = <200>; | 		spi-deactivate-delay = <200>; | ||||||
| 		cros-ec@0 { | 		cros_ec: cros-ec@0 { | ||||||
| 			reg = <0>; | 			reg = <0>; | ||||||
| 			compatible = "google,cros-ec"; | 			compatible = "google,cros-ec"; | ||||||
| 			spi-half-duplex; | 			spi-half-duplex; | ||||||
|  | @ -150,3 +150,5 @@ | ||||||
| 		samsung,dual-lcd-enabled = <0>; | 		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 | Google's ChromeOS EC Keyboard is a simple matrix keyboard implemented on | ||||||
| micro used for keyboard, and possible other features. | 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 | This binding is based on matrix-keymap.txt and extends/modifies it as follows: | ||||||
| in U-Boot. |  | ||||||
| 
 | 
 | ||||||
| Required properties : | Required properties: | ||||||
| - compatible : "google,cros-ec-keyb" | - compatible: "google,cros-ec-keyb" | ||||||
| - google,key-rows : Number of key rows |  | ||||||
| - google,key-columns : Number of key columns |  | ||||||
| 
 | 
 | ||||||
| Optional properties, in addition to those specified by the shared | Optional properties: | ||||||
| matrix-keyboard bindings: | - 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 { | cros-ec-keyb { | ||||||
| 	compatible = "google,cros-ec-keyb"; | 	compatible = "google,cros-ec-keyb"; | ||||||
| 	google,key-rows = <8>; | 	keypad,num-rows = <8>; | ||||||
| 	google,key-columns = <13>; | 	keypad,num-columns = <13>; | ||||||
| 	google,ghost-filter; | 	google,needs-ghost-filter; | ||||||
| 	google,repeat-delay-ms = <240>; |  | ||||||
| 	google,repeat-rate-ms = <30>; |  | ||||||
| 	/* | 	/* | ||||||
| 		* Keymap entries take the form of 0xRRCCKKKK where | 	 * Keymap entries take the form of 0xRRCCKKKK where | ||||||
| 		* RR=Row CC=Column KKKK=Key Code | 	 * RR=Row CC=Column KKKK=Key Code | ||||||
| 		* The values below are for a US keyboard layout and | 	 * The values below are for a US keyboard layout and | ||||||
| 		* are taken from the Linux driver. Note that the | 	 * are taken from the Linux driver. Note that the | ||||||
| 		* 102ND key is not used for US keyboards. | 	 * 102ND key is not used for US keyboards. | ||||||
| 		*/ | 	 */ | ||||||
| 	linux,keymap = < | 	linux,keymap = < | ||||||
| 		/* CAPSLCK F1         B          F10     */ | 		/* CAPSLCK F1         B          F10     */ | ||||||
| 		0x0001003a 0x0002003c 0x00030030 0x00040044 | 		0x0001003a 0x0002003b 0x00030030 0x00040044 | ||||||
| 		/* N       =          R_ALT      ESC     */ | 		/* N       =          R_ALT      ESC     */ | ||||||
| 		0x00060031 0x0008000d 0x000a0064 0x01010001 | 		0x00060031 0x0008000d 0x000a0064 0x01010001 | ||||||
| 		/* F4      G          F7         H       */ | 		/* F4      G          F7         H       */ | ||||||
|  |  | ||||||
|  | @ -36,9 +36,9 @@ How to try it | ||||||
| 
 | 
 | ||||||
| Build U-Boot sandbox and run it: | Build U-Boot sandbox and run it: | ||||||
| 
 | 
 | ||||||
|    make sandbox_config |    make sandbox_defconfig | ||||||
|    make |    make | ||||||
|    ./u-boot |    ./u-boot -d u-boot.dtb | ||||||
| 
 | 
 | ||||||
|    (type 'reset' to exit U-Boot) |    (type 'reset' to exit U-Boot) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -18,6 +18,8 @@ DECLARE_GLOBAL_DATA_PTR; | ||||||
| 
 | 
 | ||||||
| enum { | enum { | ||||||
| 	KBC_MAX_KEYS		= 8,	/* Maximum keys held down at once */ | 	KBC_MAX_KEYS		= 8,	/* Maximum keys held down at once */ | ||||||
|  | 	KBC_REPEAT_RATE_MS	= 30, | ||||||
|  | 	KBC_REPEAT_DELAY_MS	= 240, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static struct keyb { | static struct keyb { | ||||||
|  | @ -26,8 +28,6 @@ static struct keyb { | ||||||
| 	struct key_matrix matrix;	/* The key matrix layer */ | 	struct key_matrix matrix;	/* The key matrix layer */ | ||||||
| 	int key_rows;			/* Number of keyboard rows */ | 	int key_rows;			/* Number of keyboard rows */ | ||||||
| 	int key_cols;			/* Number of keyboard columns */ | 	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 ghost_filter;		/* 1 to enable ghost filter, else 0 */ | ||||||
| 	int inited;			/* 1 if keyboard is ready */ | 	int inited;			/* 1 if keyboard is ready */ | ||||||
| } config; | } 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 | 	 * Get keyboard rows and columns - at present we are limited to | ||||||
| 	 * 8 columns by the protocol (one byte per row scan) | 	 * 8 columns by the protocol (one byte per row scan) | ||||||
| 	 */ | 	 */ | ||||||
| 	config->key_rows = fdtdec_get_int(blob, node, "google,key-rows", 0); | 	config->key_rows = fdtdec_get_int(blob, node, "keypad,num-rows", 0); | ||||||
| 	config->key_cols = fdtdec_get_int(blob, node, "google,key-columns", 0); | 	config->key_cols = fdtdec_get_int(blob, node, "keypad,num-columns", 0); | ||||||
| 	if (!config->key_rows || !config->key_cols || | 	if (!config->key_rows || !config->key_cols || | ||||||
| 			config->key_rows * config->key_cols / 8 | 			config->key_rows * config->key_cols / 8 | ||||||
| 				> CROS_EC_KEYSCAN_COLS) { | 				> 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); | 		      config->key_rows, config->key_cols); | ||||||
| 		return -1; | 		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, | 	config->ghost_filter = fdtdec_get_bool(blob, node, | ||||||
| 					       "google,ghost-filter"); | 					       "google,ghost-filter"); | ||||||
| 	return 0; | 	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)) | 	if (cros_ec_keyb_decode_fdt(blob, node, &config)) | ||||||
| 		return -1; | 		return -1; | ||||||
| 	input_set_delays(&config.input, config.repeat_delay_ms, | 	input_set_delays(&config.input, KBC_REPEAT_DELAY_MS, | ||||||
| 			 config.repeat_rate_ms); | 			 KBC_REPEAT_RATE_MS); | ||||||
| 	if (key_matrix_init(&config.matrix, config.key_rows, | 	if (key_matrix_init(&config.matrix, config.key_rows, | ||||||
| 			config.key_cols, config.ghost_filter)) { | 			config.key_cols, config.ghost_filter)) { | ||||||
| 		debug("%s: cannot init key matrix\n", __func__); | 		debug("%s: cannot init key matrix\n", __func__); | ||||||
|  |  | ||||||
|  | @ -5,6 +5,7 @@ | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #include <common.h> | #include <common.h> | ||||||
|  | #include <linux/err.h> | ||||||
| #include <dm.h> | #include <dm.h> | ||||||
| #include <i2c.h> | #include <i2c.h> | ||||||
| #include <i2c_eeprom.h> | #include <i2c_eeprom.h> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue