diff options
Diffstat (limited to 'drivers/hid/hid-input.c')
| -rw-r--r-- | drivers/hid/hid-input.c | 21 | 
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c index bb0b3659437..d8d372bae3c 100644 --- a/drivers/hid/hid-input.c +++ b/drivers/hid/hid-input.c @@ -174,7 +174,7 @@ static int hidinput_setkeycode(struct input_dev *dev,  		clear_bit(*old_keycode, dev->keybit);  		set_bit(usage->code, dev->keybit); -		dbg_hid(KERN_DEBUG "Assigned keycode %d to HID usage code %x\n", +		dbg_hid("Assigned keycode %d to HID usage code %x\n",  			usage->code, usage->hid);  		/* @@ -203,8 +203,8 @@ static int hidinput_setkeycode(struct input_dev *dev,   *   * as seen in the HID specification v1.11 6.2.2.7 Global Items.   * - * Only exponent 1 length units are processed. Centimeters are converted to - * inches. Degrees are converted to radians. + * Only exponent 1 length units are processed. Centimeters and inches are + * converted to millimeters. Degrees are converted to radians.   */  static __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code)  { @@ -225,13 +225,16 @@ static __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code)  	 */  	if (code == ABS_X || code == ABS_Y || code == ABS_Z) {  		if (field->unit == 0x11) {		/* If centimeters */ -			/* Convert to inches */ -			prev = logical_extents; -			logical_extents *= 254; -			if (logical_extents < prev) +			/* Convert to millimeters */ +			unit_exponent += 1; +		} else if (field->unit == 0x13) {	/* If inches */ +			/* Convert to millimeters */ +			prev = physical_extents; +			physical_extents *= 254; +			if (physical_extents < prev)  				return 0; -			unit_exponent += 2; -		} else if (field->unit != 0x13) {	/* If not inches */ +			unit_exponent -= 1; +		} else {  			return 0;  		}  	} else if (code == ABS_RX || code == ABS_RY || code == ABS_RZ) {  |