]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
HID: input: calculate resolution for pressure
authorAngela Czubak <aczubak@google.com>
Mon, 18 Aug 2025 23:08:48 +0000 (23:08 +0000)
committerBenjamin Tissoires <bentiss@kernel.org>
Mon, 15 Sep 2025 12:32:54 +0000 (14:32 +0200)
Assume that if the pressure is given in newtons it should be normalized
to grams. If the pressure has no unit do not calculate resolution.

Signed-off-by: Angela Czubak <aczubak@google.com>
Co-developed-by: Jonathan Denose <jdenose@google.com>
Signed-off-by: Jonathan Denose <jdenose@google.com>
Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
drivers/hid/hid-input.c

index f6a920fe3102e7bf71a4f77c6b81ed133fe5b506..5d7532d79d21c1476e7ed2d332dad368cf464386 100644 (file)
@@ -303,6 +303,19 @@ __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code)
                }
                break;
 
+       case ABS_PRESSURE:
+       case ABS_MT_PRESSURE:
+               if (field->unit == HID_UNIT_NEWTON) {
+                       /* Convert to grams, 1 newton is 101.97 grams */
+                       prev = physical_extents;
+                       physical_extents *= 10197;
+                       if (physical_extents < prev)
+                               return 0;
+                       unit_exponent -= 2;
+               } else if (field->unit != HID_UNIT_GRAM) {
+                       return 0;
+               }
+               break;
        default:
                return 0;
        }