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
3 changed files with 10 additions and 1 deletions
|
@ -208,7 +208,7 @@ static int hidinput_setkeycode(struct input_dev *dev,
|
||||||
* Only exponent 1 length units are processed. Centimeters and inches are
|
* Only exponent 1 length units are processed. Centimeters and inches are
|
||||||
* converted to millimeters. Degrees are converted to radians.
|
* 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 unit_exponent = field->unit_exponent;
|
||||||
__s32 logical_extents = field->logical_maximum -
|
__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_X:
|
||||||
case ABS_Y:
|
case ABS_Y:
|
||||||
case ABS_Z:
|
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 */
|
if (field->unit == 0x11) { /* If centimeters */
|
||||||
/* Convert to millimeters */
|
/* Convert to millimeters */
|
||||||
unit_exponent += 1;
|
unit_exponent += 1;
|
||||||
|
@ -283,6 +289,7 @@ static __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code)
|
||||||
/* Calculate resolution */
|
/* Calculate resolution */
|
||||||
return logical_extents / physical_extents;
|
return logical_extents / physical_extents;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(hidinput_calc_abs_res);
|
||||||
|
|
||||||
#ifdef CONFIG_HID_BATTERY_STRENGTH
|
#ifdef CONFIG_HID_BATTERY_STRENGTH
|
||||||
static enum power_supply_property hidinput_battery_props[] = {
|
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 fmax = field->logical_maximum;
|
||||||
int fuzz = snratio ? (fmax - fmin) / snratio : 0;
|
int fuzz = snratio ? (fmax - fmin) / snratio : 0;
|
||||||
input_set_abs_params(input, code, fmin, fmax, fuzz, 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,
|
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);
|
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);
|
struct hid_field *hidinput_get_led_field(struct hid_device *hid);
|
||||||
unsigned int hidinput_count_leds(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);
|
void hid_output_report(struct hid_report *report, __u8 *data);
|
||||||
struct hid_device *hid_allocate_device(void);
|
struct hid_device *hid_allocate_device(void);
|
||||||
struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id);
|
struct hid_report *hid_register_report(struct hid_device *device, unsigned type, unsigned id);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue