mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
976bacef40
commit
37cf6e6fc3
|
@ -208,7 +208,7 @@ static int hidinput_setkeycode(struct input_dev *dev,
|
|||
* 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)
|
||||
__s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code)
|
||||
{
|
||||
__s32 unit_exponent = field->unit_exponent;
|
||||
__s32 logical_extents = field->logical_maximum -
|
||||
|
@ -229,6 +229,12 @@ static __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code)
|
|||
case ABS_X:
|
||||
case ABS_Y:
|
||||
case ABS_Z:
|
||||
case ABS_MT_POSITION_X:
|
||||
case ABS_MT_POSITION_Y:
|
||||
case ABS_MT_TOOL_X:
|
||||
case ABS_MT_TOOL_Y:
|
||||
case ABS_MT_TOUCH_MAJOR:
|
||||
case ABS_MT_TOUCH_MINOR:
|
||||
if (field->unit == 0x11) { /* If centimeters */
|
||||
/* Convert to millimeters */
|
||||
unit_exponent += 1;
|
||||
|
@ -283,6 +289,7 @@ static __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code)
|
|||
/* Calculate resolution */
|
||||
return logical_extents / physical_extents;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(hidinput_calc_abs_res);
|
||||
|
||||
#ifdef CONFIG_HID_BATTERY_STRENGTH
|
||||
static enum power_supply_property hidinput_battery_props[] = {
|
||||
|
|
|
@ -297,6 +297,7 @@ static void set_abs(struct input_dev *input, unsigned int code,
|
|||
int fmax = field->logical_maximum;
|
||||
int fuzz = snratio ? (fmax - fmin) / snratio : 0;
|
||||
input_set_abs_params(input, code, fmin, fmax, fuzz, 0);
|
||||
input_abs_set_res(input, code, hidinput_calc_abs_res(field, code));
|
||||
}
|
||||
|
||||
static void mt_store_field(struct hid_usage *usage, struct mt_device *td,
|
||||
|
|
|
@ -706,6 +706,7 @@ int hid_input_report(struct hid_device *, int type, u8 *, int, int);
|
|||
int hidinput_find_field(struct hid_device *hid, unsigned int type, unsigned int code, struct hid_field **field);
|
||||
struct hid_field *hidinput_get_led_field(struct hid_device *hid);
|
||||
unsigned int hidinput_count_leds(struct hid_device *hid);
|
||||
__s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code);
|
||||
void hid_output_report(struct hid_report *report, __u8 *data);
|
||||
struct hid_device *hid_allocate_device(void);
|
||||
struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id);
|
||||
|
|
Loading…
Reference in New Issue