/*
         * Ignore out-of-range values as per HID specification,
-        * section 5.10 and 6.2.25.
+        * section 5.10 and 6.2.25, when NULL state bit is present.
+        * When it's not, clamp the value to match Microsoft's input
+        * driver as mentioned in "Required HID usages for digitizers":
+        * https://msdn.microsoft.com/en-us/library/windows/hardware/dn672278(v=vs.85).asp
         *
         * The logical_minimum < logical_maximum check is done so that we
         * don't unintentionally discard values sent by devices which
         * don't specify logical min and max.
         */
        if ((field->flags & HID_MAIN_ITEM_VARIABLE) &&
-           (field->flags & HID_MAIN_ITEM_NULL_STATE) &&
-           (field->logical_minimum < field->logical_maximum) &&
-           (value < field->logical_minimum ||
-            value > field->logical_maximum)) {
-               dbg_hid("Ignoring out-of-range value %x\n", value);
-               return;
+           (field->logical_minimum < field->logical_maximum)) {
+               if (field->flags & HID_MAIN_ITEM_NULL_STATE &&
+                   (value < field->logical_minimum ||
+                    value > field->logical_maximum)) {
+                       dbg_hid("Ignoring out-of-range value %x\n", value);
+                       return;
+               }
+               value = clamp(value,
+                             field->logical_minimum,
+                             field->logical_maximum);
        }
 
        /*