aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hid
diff options
context:
space:
mode:
authorBenjamin Tissoires <benjamin.tissoires@gmail.com>2012-11-14 10:59:13 -0500
committerJiri Kosina <jkosina@suse.cz>2012-11-15 04:06:28 -0500
commit37cf6e6fc34e2fca4e7c565697e7cd5c317bc316 (patch)
tree8a33a35b0e8cfbc95ac8e7ea79141ef0c05edc1d /drivers/hid
parent976bacef40c66443173283cc02b537e37a62c981 (diff)
HID: export hidinput_calc_abs_res
Exporting the function allows us to calculate the resolution in third party drivers like hid-multitouch. This patch also complete the function with additional valid axes. Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com> Acked-by: Jiri Kosina <jkosina@suse.cz> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers/hid')
-rw-r--r--drivers/hid/hid-input.c9
-rw-r--r--drivers/hid/hid-multitouch.c1
2 files changed, 9 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 */
211static __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}
292EXPORT_SYMBOL_GPL(hidinput_calc_abs_res);
286 293
287#ifdef CONFIG_HID_BATTERY_STRENGTH 294#ifdef CONFIG_HID_BATTERY_STRENGTH
288static enum power_supply_property hidinput_battery_props[] = { 295static 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
302static void mt_store_field(struct hid_usage *usage, struct mt_device *td, 303static void mt_store_field(struct hid_usage *usage, struct mt_device *td,