diff options
Diffstat (limited to 'drivers/hid/hid-input.c')
| -rw-r--r-- | drivers/hid/hid-input.c | 36 | 
1 files changed, 22 insertions, 14 deletions
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c index 002781c5a61..132b0019365 100644 --- a/drivers/hid/hid-input.c +++ b/drivers/hid/hid-input.c @@ -225,7 +225,10 @@ static __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code)  	 * Verify and convert units.  	 * See HID specification v1.11 6.2.2.7 Global Items for unit decoding  	 */ -	if (code == ABS_X || code == ABS_Y || code == ABS_Z) { +	switch (code) { +	case ABS_X: +	case ABS_Y: +	case ABS_Z:  		if (field->unit == 0x11) {		/* If centimeters */  			/* Convert to millimeters */  			unit_exponent += 1; @@ -239,7 +242,13 @@ static __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code)  		} else {  			return 0;  		} -	} else if (code == ABS_RX || code == ABS_RY || code == ABS_RZ) { +		break; + +	case ABS_RX: +	case ABS_RY: +	case ABS_RZ: +	case ABS_TILT_X: +	case ABS_TILT_Y:  		if (field->unit == 0x14) {		/* If degrees */  			/* Convert to radians */  			prev = logical_extents; @@ -250,7 +259,9 @@ static __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code)  		} else if (field->unit != 0x12) {	/* If not radians */  			return 0;  		} -	} else { +		break; + +	default:  		return 0;  	} @@ -623,6 +634,14 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel  			map_key_clear(BTN_TOOL_RUBBER);  			break; +		case 0x3d: /* X Tilt */ +			map_abs_clear(ABS_TILT_X); +			break; + +		case 0x3e: /* Y Tilt */ +			map_abs_clear(ABS_TILT_Y); +			break; +  		case 0x33: /* Touch */  		case 0x42: /* TipSwitch */  		case 0x43: /* TipSwitch2 */ @@ -638,10 +657,6 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel  			map_key_clear(BTN_STYLUS2);  			break; -		case 0x51: /* ContactID */ -			device->quirks |= HID_QUIRK_MULTITOUCH; -			goto unknown; -  		default:  goto unknown;  		}  		break; @@ -1208,13 +1223,6 @@ int hidinput_connect(struct hid_device *hid, unsigned int force)  		}  	} -	if (hid->quirks & HID_QUIRK_MULTITOUCH) { -		/* generic hid does not know how to handle multitouch devices */ -		if (hidinput) -			goto out_cleanup; -		goto out_unwind; -	} -  	if (hidinput && input_register_device(hidinput->input))  		goto out_cleanup;  |