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;
                }
                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:
 
 #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