diff options
-rw-r--r-- | drivers/hid/hid-input.c | 9 | ||||
-rw-r--r-- | drivers/hid/hid-multitouch.c | 1 | ||||
-rw-r--r-- | include/linux/hid.h | 1 |
3 files changed, 10 insertions, 1 deletions
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c index d917c0d53685..d1ec571bdb3b 100644 --- a/drivers/hid/hid-input.c +++ b/drivers/hid/hid-input.c | |||
@@ -208,7 +208,7 @@ static int hidinput_setkeycode(struct input_dev *dev, | |||
208 | * Only exponent 1 length units are processed. Centimeters and inches are | 208 | * Only exponent 1 length units are processed. Centimeters and inches are |
209 | * converted to millimeters. Degrees are converted to radians. | 209 | * converted to millimeters. Degrees are converted to radians. |
210 | */ | 210 | */ |
211 | static __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code) | 211 | __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code) |
212 | { | 212 | { |
213 | __s32 unit_exponent = field->unit_exponent; | 213 | __s32 unit_exponent = field->unit_exponent; |
214 | __s32 logical_extents = field->logical_maximum - | 214 | __s32 logical_extents = field->logical_maximum - |
@@ -229,6 +229,12 @@ static __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code) | |||
229 | case ABS_X: | 229 | case ABS_X: |
230 | case ABS_Y: | 230 | case ABS_Y: |
231 | case ABS_Z: | 231 | case ABS_Z: |
232 | case ABS_MT_POSITION_X: | ||
233 | case ABS_MT_POSITION_Y: | ||
234 | case ABS_MT_TOOL_X: | ||
235 | case ABS_MT_TOOL_Y: | ||
236 | case ABS_MT_TOUCH_MAJOR: | ||
237 | case ABS_MT_TOUCH_MINOR: | ||
232 | if (field->unit == 0x11) { /* If centimeters */ | 238 | if (field->unit == 0x11) { /* If centimeters */ |
233 | /* Convert to millimeters */ | 239 | /* Convert to millimeters */ |
234 | unit_exponent += 1; | 240 | unit_exponent += 1; |
@@ -283,6 +289,7 @@ static __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code) | |||
283 | /* Calculate resolution */ | 289 | /* Calculate resolution */ |
284 | return logical_extents / physical_extents; | 290 | return logical_extents / physical_extents; |
285 | } | 291 | } |
292 | EXPORT_SYMBOL_GPL(hidinput_calc_abs_res); | ||
286 | 293 | ||
287 | #ifdef CONFIG_HID_BATTERY_STRENGTH | 294 | #ifdef CONFIG_HID_BATTERY_STRENGTH |
288 | static enum power_supply_property hidinput_battery_props[] = { | 295 | static enum power_supply_property hidinput_battery_props[] = { |
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c index 7867d69f0efe..3687f797b731 100644 --- a/drivers/hid/hid-multitouch.c +++ b/drivers/hid/hid-multitouch.c | |||
@@ -297,6 +297,7 @@ static void set_abs(struct input_dev *input, unsigned int code, | |||
297 | int fmax = field->logical_maximum; | 297 | int fmax = field->logical_maximum; |
298 | int fuzz = snratio ? (fmax - fmin) / snratio : 0; | 298 | int fuzz = snratio ? (fmax - fmin) / snratio : 0; |
299 | input_set_abs_params(input, code, fmin, fmax, fuzz, 0); | 299 | input_set_abs_params(input, code, fmin, fmax, fuzz, 0); |
300 | input_abs_set_res(input, code, hidinput_calc_abs_res(field, code)); | ||
300 | } | 301 | } |
301 | 302 | ||
302 | static void mt_store_field(struct hid_usage *usage, struct mt_device *td, | 303 | static void mt_store_field(struct hid_usage *usage, struct mt_device *td, |
diff --git a/include/linux/hid.h b/include/linux/hid.h index c076041a069e..c6bef8f54a82 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
@@ -706,6 +706,7 @@ int hid_input_report(struct hid_device *, int type, u8 *, int, int); | |||
706 | int hidinput_find_field(struct hid_device *hid, unsigned int type, unsigned int code, struct hid_field **field); | 706 | int hidinput_find_field(struct hid_device *hid, unsigned int type, unsigned int code, struct hid_field **field); |
707 | struct hid_field *hidinput_get_led_field(struct hid_device *hid); | 707 | struct hid_field *hidinput_get_led_field(struct hid_device *hid); |
708 | unsigned int hidinput_count_leds(struct hid_device *hid); | 708 | unsigned int hidinput_count_leds(struct hid_device *hid); |
709 | __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code); | ||
709 | void hid_output_report(struct hid_report *report, __u8 *data); | 710 | void hid_output_report(struct hid_report *report, __u8 *data); |
710 | struct hid_device *hid_allocate_device(void); | 711 | struct hid_device *hid_allocate_device(void); |
711 | struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id); | 712 | struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id); |