Commit 80818fdc authored by Terry Tritton's avatar Terry Tritton Committed by Jiri Kosina
Browse files

HID: fix generic desktop D-Pad controls



The addition of the "System Do Not Disturb" event code caused the Generic
Desktop D-Pad configuration to be skipped. This commit allows both to be
configured without conflicting with each other.

Fixes: 22d6d060 ("input: Add support for "Do Not Disturb"")
Signed-off-by: default avatarTerry Tritton <terry.tritton@linaro.org>
Reviewed-by: default avatarAseda Aboagye <aaboagye@chromium.org>
Reviewed-by: default avatarCarlos Llamas <cmllamas@google.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.com>
parent b5e65ae5
Loading
Loading
Loading
Loading
+17 −20
Original line number Diff line number Diff line
@@ -810,10 +810,23 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
			break;
		}

		if ((usage->hid & 0xf0) == 0x90) { /* SystemControl*/
			switch (usage->hid & 0xf) {
			case 0xb: map_key_clear(KEY_DO_NOT_DISTURB); break;
			default: goto ignore;
		if ((usage->hid & 0xf0) == 0x90) { /* SystemControl & D-pad */
			switch (usage->hid) {
			case HID_GD_UP:	   usage->hat_dir = 1; break;
			case HID_GD_DOWN:  usage->hat_dir = 5; break;
			case HID_GD_RIGHT: usage->hat_dir = 3; break;
			case HID_GD_LEFT:  usage->hat_dir = 7; break;
			case HID_GD_DO_NOT_DISTURB:
				map_key_clear(KEY_DO_NOT_DISTURB); break;
			default: goto unknown;
			}

			if (usage->hid <= HID_GD_LEFT) {
				if (field->dpad) {
					map_abs(field->dpad);
					goto ignore;
				}
				map_abs(ABS_HAT0X);
			}
			break;
		}
@@ -844,22 +857,6 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
		if (field->application == HID_GD_SYSTEM_CONTROL)
			goto ignore;

		if ((usage->hid & 0xf0) == 0x90) {	/* D-pad */
			switch (usage->hid) {
			case HID_GD_UP:	   usage->hat_dir = 1; break;
			case HID_GD_DOWN:  usage->hat_dir = 5; break;
			case HID_GD_RIGHT: usage->hat_dir = 3; break;
			case HID_GD_LEFT:  usage->hat_dir = 7; break;
			default: goto unknown;
			}
			if (field->dpad) {
				map_abs(field->dpad);
				goto ignore;
			}
			map_abs(ABS_HAT0X);
			break;
		}

		switch (usage->hid) {
		/* These usage IDs map directly to the usage codes. */
		case HID_GD_X: case HID_GD_Y: case HID_GD_Z:
+1 −0
Original line number Diff line number Diff line
@@ -218,6 +218,7 @@ struct hid_item {
#define HID_GD_DOWN		0x00010091
#define HID_GD_RIGHT		0x00010092
#define HID_GD_LEFT		0x00010093
#define HID_GD_DO_NOT_DISTURB	0x0001009b
/* Microsoft Win8 Wireless Radio Controls CA usage codes */
#define HID_GD_RFKILL_BTN	0x000100c6
#define HID_GD_RFKILL_LED	0x000100c7