]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
HID: stop exporting hid_snto32()
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Thu, 3 Oct 2024 14:46:51 +0000 (07:46 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 9 Sep 2025 16:58:04 +0000 (18:58 +0200)
[ Upstream commit c653ffc283404a6c1c0e65143a833180c7ff799b ]

The only user of hid_snto32() is Logitech HID++ driver, which always
calls hid_snto32() with valid size (constant, either 12 or 8) and
therefore can simply use sign_extend32().

Make the switch and remove hid_snto32(). Move snto32() and s32ton() to
avoid introducing forward declaration.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Link: https://patch.msgid.link/20241003144656.3786064-2-dmitry.torokhov@gmail.com
[bentiss: fix checkpatch warning]
Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
Stable-dep-of: a6b87bfc2ab5 ("HID: core: Harden s32ton() against conversion to 0 bits")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/hid/hid-core.c
drivers/hid/hid-logitech-hidpp.c
include/linux/hid.h

index 1a8e88624acfb20bd71a72419baebd7ed6b3a3b6..5169d8d56c8890da3ba422fd633e089eff128b2f 100644 (file)
@@ -45,6 +45,34 @@ static int hid_ignore_special_drivers = 0;
 module_param_named(ignore_special_drivers, hid_ignore_special_drivers, int, 0600);
 MODULE_PARM_DESC(ignore_special_drivers, "Ignore any special drivers and handle all devices by generic driver");
 
+/*
+ * Convert a signed n-bit integer to signed 32-bit integer.
+ */
+
+static s32 snto32(__u32 value, unsigned int n)
+{
+       if (!value || !n)
+               return 0;
+
+       if (n > 32)
+               n = 32;
+
+       return sign_extend32(value, n - 1);
+}
+
+/*
+ * Convert a signed 32-bit integer to a signed n-bit integer.
+ */
+
+static u32 s32ton(__s32 value, unsigned int n)
+{
+       s32 a = value >> (n - 1);
+
+       if (a && a != -1)
+               return value < 0 ? 1 << (n - 1) : (1 << (n - 1)) - 1;
+       return value & ((1 << n) - 1);
+}
+
 /*
  * Register a new report for a device.
  */
@@ -425,7 +453,7 @@ static int hid_parser_global(struct hid_parser *parser, struct hid_item *item)
                 * both this and the standard encoding. */
                raw_value = item_sdata(item);
                if (!(raw_value & 0xfffffff0))
-                       parser->global.unit_exponent = hid_snto32(raw_value, 4);
+                       parser->global.unit_exponent = snto32(raw_value, 4);
                else
                        parser->global.unit_exponent = raw_value;
                return 0;
@@ -1317,39 +1345,6 @@ alloc_err:
 }
 EXPORT_SYMBOL_GPL(hid_open_report);
 
-/*
- * Convert a signed n-bit integer to signed 32-bit integer.
- */
-
-static s32 snto32(__u32 value, unsigned n)
-{
-       if (!value || !n)
-               return 0;
-
-       if (n > 32)
-               n = 32;
-
-       return sign_extend32(value, n - 1);
-}
-
-s32 hid_snto32(__u32 value, unsigned n)
-{
-       return snto32(value, n);
-}
-EXPORT_SYMBOL_GPL(hid_snto32);
-
-/*
- * Convert a signed 32-bit integer to a signed n-bit integer.
- */
-
-static u32 s32ton(__s32 value, unsigned n)
-{
-       s32 a = value >> (n - 1);
-       if (a && a != -1)
-               return value < 0 ? 1 << (n - 1) : (1 << (n - 1)) - 1;
-       return value & ((1 << n) - 1);
-}
-
 /*
  * Extract/implement a data field from/to a little endian report (bit array).
  *
index 234ddd4422d9029b7fa7d9b7ff158d16d7f2fded..59f630962338d3f245a92995e373547ca8b68e72 100644 (file)
@@ -3296,13 +3296,13 @@ static int m560_raw_event(struct hid_device *hdev, u8 *data, int size)
                                         120);
                }
 
-               v = hid_snto32(hid_field_extract(hdev, data+3, 0, 12), 12);
+               v = sign_extend32(hid_field_extract(hdev, data + 3, 0, 12), 11);
                input_report_rel(hidpp->input, REL_X, v);
 
-               v = hid_snto32(hid_field_extract(hdev, data+3, 12, 12), 12);
+               v = sign_extend32(hid_field_extract(hdev, data + 3, 12, 12), 11);
                input_report_rel(hidpp->input, REL_Y, v);
 
-               v = hid_snto32(data[6], 8);
+               v = sign_extend32(data[6], 7);
                if (v != 0)
                        hidpp_scroll_counter_handle_scroll(hidpp->input,
                                        &hidpp->vertical_wheel_counter, v);
index 017d31f1d27b8f19a30d9b0b1cc09f01fe7eb488..7d8d09318fa91d053291f124217a73ad9f6ca554 100644 (file)
@@ -978,7 +978,6 @@ const struct hid_device_id *hid_match_device(struct hid_device *hdev,
                                             struct hid_driver *hdrv);
 bool hid_compare_device_paths(struct hid_device *hdev_a,
                              struct hid_device *hdev_b, char separator);
-s32 hid_snto32(__u32 value, unsigned n);
 __u32 hid_field_extract(const struct hid_device *hid, __u8 *report,
                     unsigned offset, unsigned n);