Commit e0fbd25b authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull input updates from Dmitry Torokhov:
 "Mostly existing driver fixes plus a new driver for game controllers
  directly connected to Nintendo 64, and an enhancement for keyboards
  driven by Chrome OS EC to communicate layout of the top row to
  userspace"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (47 commits)
  Input: st1232 - fix NORMAL vs. IDLE state handling
  Input: aiptek - convert sysfs sprintf/snprintf family to sysfs_emit
  Input: alps - fix spelling of "positive"
  ARM: dts: cros-ec-keyboard: Use keymap macros
  dt-bindings: input: Fix the keymap for LOCK key
  dt-bindings: input: Create macros for cros-ec keymap
  Input: cros-ec-keyb - expose function row physical map to userspace
  dt-bindings: input: cros-ec-keyb: Add a new property describing top row
  Input: applespi - fix occasional crc errors under load.
  Input: applespi - don't wait for responses to commands indefinitely.
  Input: st1232 - add IDLE state as ready condition
  Input: zinitix - fix return type of zinitix_init_touch()
  Input: i8042 - add ASUS Zenbook Flip to noselftest list
  Input: add missing dependencies on CONFIG_HAS_IOMEM
  Input: joydev - prevent potential read overflow in ioctl
  Input: elo - fix an error code in elo_connect()
  Input: xpad - add support for PowerA Enhanced Wired Controller for Xbox Series X|S
  Input: sur40 - fix an error code in sur40_probe()
  Input: elants_i2c - detect enum overflow
  Input: zinitix - remove unneeded semicolon
  ...
parents 69aea9d2 1bff77f4
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
What:		/sys/class/input/input(x)/device/function_row_physmap
Date:		January 2021
Contact:	Philip Chen <philipchen@chromium.org>
Description:	A space separated list of scancodes for the top row keys,
		ordered by the physical positions of the keys, from left
		to right.
+24 −0
Original line number Diff line number Diff line
@@ -31,6 +31,17 @@ properties:
      if the EC does not have its own logic or hardware for this.
    type: boolean

  function-row-physmap:
    minItems: 1
    maxItems: 15
    description: |
      An ordered u32 array describing the rows/columns (in the scan matrix)
      of top row keys from physical left (KEY_F1) to right. Each entry
      encodes the row/column as:
      (((row) & 0xFF) << 24) | (((column) & 0xFF) << 16)
      where the lower 16 bits are reserved. This property is specified only
      when the keyboard has a custom design for the top row keys.

required:
  - compatible

@@ -38,11 +49,24 @@ unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/input/input.h>
    cros-ec-keyb {
        compatible = "google,cros-ec-keyb";
        keypad,num-rows = <8>;
        keypad,num-columns = <13>;
        google,needs-ghost-filter;
        function-row-physmap = <
            MATRIX_KEY(0x00, 0x02, 0)   /* T1 */
            MATRIX_KEY(0x03, 0x02, 0)   /* T2 */
            MATRIX_KEY(0x02, 0x02, 0)   /* T3 */
            MATRIX_KEY(0x01, 0x02, 0)   /* T4 */
            MATRIX_KEY(0x03, 0x04, 0)   /* T5 */
            MATRIX_KEY(0x02, 0x04, 0)   /* T6 */
            MATRIX_KEY(0x01, 0x04, 0)   /* T7 */
            MATRIX_KEY(0x02, 0x09, 0)   /* T8 */
            MATRIX_KEY(0x01, 0x09, 0)   /* T9 */
            MATRIX_KEY(0x00, 0x04, 0)   /* T10 */
        >;
        /*
         * Keymap entries take the form of 0xRRCCKKKK where
         * RR=Row CC=Column KKKK=Key Code
+4 −89
Original line number Diff line number Diff line
@@ -6,103 +6,18 @@
*/

#include <dt-bindings/input/input.h>
#include <dt-bindings/input/cros-ec-keyboard.h>

&cros_ec {
	keyboard-controller {
	keyboard_controller: keyboard-controller {
		compatible = "google,cros-ec-keyb";
		keypad,num-rows = <8>;
		keypad,num-columns = <13>;
		google,needs-ghost-filter;

		linux,keymap = <
			MATRIX_KEY(0x00, 0x01, KEY_LEFTMETA)
			MATRIX_KEY(0x00, 0x02, KEY_F1)
			MATRIX_KEY(0x00, 0x03, KEY_B)
			MATRIX_KEY(0x00, 0x04, KEY_F10)
			MATRIX_KEY(0x00, 0x05, KEY_RO)
			MATRIX_KEY(0x00, 0x06, KEY_N)
			MATRIX_KEY(0x00, 0x08, KEY_EQUAL)
			MATRIX_KEY(0x00, 0x0a, KEY_RIGHTALT)

			MATRIX_KEY(0x01, 0x01, KEY_ESC)
			MATRIX_KEY(0x01, 0x02, KEY_F4)
			MATRIX_KEY(0x01, 0x03, KEY_G)
			MATRIX_KEY(0x01, 0x04, KEY_F7)
			MATRIX_KEY(0x01, 0x06, KEY_H)
			MATRIX_KEY(0x01, 0x08, KEY_APOSTROPHE)
			MATRIX_KEY(0x01, 0x09, KEY_F9)
			MATRIX_KEY(0x01, 0x0b, KEY_BACKSPACE)
			MATRIX_KEY(0x01, 0x0c, KEY_HENKAN)

			MATRIX_KEY(0x02, 0x00, KEY_LEFTCTRL)
			MATRIX_KEY(0x02, 0x01, KEY_TAB)
			MATRIX_KEY(0x02, 0x02, KEY_F3)
			MATRIX_KEY(0x02, 0x03, KEY_T)
			MATRIX_KEY(0x02, 0x04, KEY_F6)
			MATRIX_KEY(0x02, 0x05, KEY_RIGHTBRACE)
			MATRIX_KEY(0x02, 0x06, KEY_Y)
			MATRIX_KEY(0x02, 0x07, KEY_102ND)
			MATRIX_KEY(0x02, 0x08, KEY_LEFTBRACE)
			MATRIX_KEY(0x02, 0x09, KEY_F8)
			MATRIX_KEY(0x02, 0x0a, KEY_YEN)

			MATRIX_KEY(0x03, 0x00, KEY_LEFTMETA)
			MATRIX_KEY(0x03, 0x01, KEY_GRAVE)
			MATRIX_KEY(0x03, 0x02, KEY_F2)
			MATRIX_KEY(0x03, 0x03, KEY_5)
			MATRIX_KEY(0x03, 0x04, KEY_F5)
			MATRIX_KEY(0x03, 0x06, KEY_6)
			MATRIX_KEY(0x03, 0x08, KEY_MINUS)
			MATRIX_KEY(0x03, 0x09, KEY_F13)
			MATRIX_KEY(0x03, 0x0b, KEY_BACKSLASH)
			MATRIX_KEY(0x03, 0x0c, KEY_MUHENKAN)

			MATRIX_KEY(0x04, 0x00, KEY_RIGHTCTRL)
			MATRIX_KEY(0x04, 0x01, KEY_A)
			MATRIX_KEY(0x04, 0x02, KEY_D)
			MATRIX_KEY(0x04, 0x03, KEY_F)
			MATRIX_KEY(0x04, 0x04, KEY_S)
			MATRIX_KEY(0x04, 0x05, KEY_K)
			MATRIX_KEY(0x04, 0x06, KEY_J)
			MATRIX_KEY(0x04, 0x08, KEY_SEMICOLON)
			MATRIX_KEY(0x04, 0x09, KEY_L)
			MATRIX_KEY(0x04, 0x0a, KEY_BACKSLASH)
			MATRIX_KEY(0x04, 0x0b, KEY_ENTER)

			MATRIX_KEY(0x05, 0x01, KEY_Z)
			MATRIX_KEY(0x05, 0x02, KEY_C)
			MATRIX_KEY(0x05, 0x03, KEY_V)
			MATRIX_KEY(0x05, 0x04, KEY_X)
			MATRIX_KEY(0x05, 0x05, KEY_COMMA)
			MATRIX_KEY(0x05, 0x06, KEY_M)
			MATRIX_KEY(0x05, 0x07, KEY_LEFTSHIFT)
			MATRIX_KEY(0x05, 0x08, KEY_SLASH)
			MATRIX_KEY(0x05, 0x09, KEY_DOT)
			MATRIX_KEY(0x05, 0x0b, KEY_SPACE)

			MATRIX_KEY(0x06, 0x01, KEY_1)
			MATRIX_KEY(0x06, 0x02, KEY_3)
			MATRIX_KEY(0x06, 0x03, KEY_4)
			MATRIX_KEY(0x06, 0x04, KEY_2)
			MATRIX_KEY(0x06, 0x05, KEY_8)
			MATRIX_KEY(0x06, 0x06, KEY_7)
			MATRIX_KEY(0x06, 0x08, KEY_0)
			MATRIX_KEY(0x06, 0x09, KEY_9)
			MATRIX_KEY(0x06, 0x0a, KEY_LEFTALT)
			MATRIX_KEY(0x06, 0x0b, KEY_DOWN)
			MATRIX_KEY(0x06, 0x0c, KEY_RIGHT)

			MATRIX_KEY(0x07, 0x01, KEY_Q)
			MATRIX_KEY(0x07, 0x02, KEY_E)
			MATRIX_KEY(0x07, 0x03, KEY_R)
			MATRIX_KEY(0x07, 0x04, KEY_W)
			MATRIX_KEY(0x07, 0x05, KEY_I)
			MATRIX_KEY(0x07, 0x06, KEY_U)
			MATRIX_KEY(0x07, 0x07, KEY_RIGHTSHIFT)
			MATRIX_KEY(0x07, 0x08, KEY_P)
			MATRIX_KEY(0x07, 0x09, KEY_O)
			MATRIX_KEY(0x07, 0x0b, KEY_UP)
			MATRIX_KEY(0x07, 0x0c, KEY_LEFT)
			CROS_STD_TOP_ROW_KEYMAP
			CROS_STD_MAIN_KEYMAP
		>;
	};
};
+5 −2
Original line number Diff line number Diff line
@@ -456,7 +456,7 @@ static int joydev_handle_JSIOCSAXMAP(struct joydev *joydev,
	if (IS_ERR(abspam))
		return PTR_ERR(abspam);

	for (i = 0; i < joydev->nabs; i++) {
	for (i = 0; i < len && i < joydev->nabs; i++) {
		if (abspam[i] > ABS_MAX) {
			retval = -EINVAL;
			goto out;
@@ -480,6 +480,9 @@ static int joydev_handle_JSIOCSBTNMAP(struct joydev *joydev,
	int i;
	int retval = 0;

	if (len % sizeof(*keypam))
		return -EINVAL;

	len = min(len, sizeof(joydev->keypam));

	/* Validate the map. */
@@ -487,7 +490,7 @@ static int joydev_handle_JSIOCSBTNMAP(struct joydev *joydev,
	if (IS_ERR(keypam))
		return PTR_ERR(keypam);

	for (i = 0; i < joydev->nkey; i++) {
	for (i = 0; i < (len / 2) && i < joydev->nkey; i++) {
		if (keypam[i] > KEY_MAX || keypam[i] < BTN_MISC) {
			retval = -EINVAL;
			goto out;
+7 −0
Original line number Diff line number Diff line
@@ -382,4 +382,11 @@ config JOYSTICK_FSIA6B
	  To compile this driver as a module, choose M here: the
	  module will be called fsia6b.

config JOYSTICK_N64
	bool "N64 controller"
	depends on MACH_NINTENDO64
	help
	  Say Y here if you want enable support for the four
	  built-in controller ports on the Nintendo 64 console.

endif
Loading