|
@@ -304,11 +304,51 @@ static int wacom_raw_event(struct hid_device *hdev, struct hid_report *report,
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+static int wacom_input_mapped(struct hid_device *hdev, struct hid_input *hi,
|
|
|
+ struct hid_field *field, struct hid_usage *usage, unsigned long **bit,
|
|
|
+ int *max)
|
|
|
+{
|
|
|
+ struct input_dev *input = hi->input;
|
|
|
+
|
|
|
+ __set_bit(INPUT_PROP_POINTER, input->propbit);
|
|
|
+
|
|
|
+ /* Basics */
|
|
|
+ input->evbit[0] |= BIT(EV_KEY) | BIT(EV_ABS) | BIT(EV_REL);
|
|
|
+
|
|
|
+ __set_bit(REL_WHEEL, input->relbit);
|
|
|
+
|
|
|
+ __set_bit(BTN_TOOL_PEN, input->keybit);
|
|
|
+ __set_bit(BTN_TOUCH, input->keybit);
|
|
|
+ __set_bit(BTN_STYLUS, input->keybit);
|
|
|
+ __set_bit(BTN_STYLUS2, input->keybit);
|
|
|
+ __set_bit(BTN_LEFT, input->keybit);
|
|
|
+ __set_bit(BTN_RIGHT, input->keybit);
|
|
|
+ __set_bit(BTN_MIDDLE, input->keybit);
|
|
|
+
|
|
|
+ /* Pad */
|
|
|
+ input->evbit[0] |= BIT(EV_MSC);
|
|
|
+
|
|
|
+ __set_bit(MSC_SERIAL, input->mscbit);
|
|
|
+
|
|
|
+ __set_bit(BTN_0, input->keybit);
|
|
|
+ __set_bit(BTN_1, input->keybit);
|
|
|
+ __set_bit(BTN_TOOL_FINGER, input->keybit);
|
|
|
+
|
|
|
+ /* Distance, rubber and mouse */
|
|
|
+ __set_bit(BTN_TOOL_RUBBER, input->keybit);
|
|
|
+ __set_bit(BTN_TOOL_MOUSE, input->keybit);
|
|
|
+
|
|
|
+ input_set_abs_params(input, ABS_X, 0, 16704, 4, 0);
|
|
|
+ input_set_abs_params(input, ABS_Y, 0, 12064, 4, 0);
|
|
|
+ input_set_abs_params(input, ABS_PRESSURE, 0, 511, 0, 0);
|
|
|
+ input_set_abs_params(input, ABS_DISTANCE, 0, 32, 0, 0);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static int wacom_probe(struct hid_device *hdev,
|
|
|
const struct hid_device_id *id)
|
|
|
{
|
|
|
- struct hid_input *hidinput;
|
|
|
- struct input_dev *input;
|
|
|
struct wacom_data *wdata;
|
|
|
int ret;
|
|
|
|
|
@@ -370,42 +410,6 @@ static int wacom_probe(struct hid_device *hdev,
|
|
|
goto err_ac;
|
|
|
}
|
|
|
#endif
|
|
|
- hidinput = list_entry(hdev->inputs.next, struct hid_input, list);
|
|
|
- input = hidinput->input;
|
|
|
-
|
|
|
- __set_bit(INPUT_PROP_POINTER, input->propbit);
|
|
|
-
|
|
|
- /* Basics */
|
|
|
- input->evbit[0] |= BIT(EV_KEY) | BIT(EV_ABS) | BIT(EV_REL);
|
|
|
-
|
|
|
- __set_bit(REL_WHEEL, input->relbit);
|
|
|
-
|
|
|
- __set_bit(BTN_TOOL_PEN, input->keybit);
|
|
|
- __set_bit(BTN_TOUCH, input->keybit);
|
|
|
- __set_bit(BTN_STYLUS, input->keybit);
|
|
|
- __set_bit(BTN_STYLUS2, input->keybit);
|
|
|
- __set_bit(BTN_LEFT, input->keybit);
|
|
|
- __set_bit(BTN_RIGHT, input->keybit);
|
|
|
- __set_bit(BTN_MIDDLE, input->keybit);
|
|
|
-
|
|
|
- /* Pad */
|
|
|
- input->evbit[0] |= BIT(EV_MSC);
|
|
|
-
|
|
|
- __set_bit(MSC_SERIAL, input->mscbit);
|
|
|
-
|
|
|
- __set_bit(BTN_0, input->keybit);
|
|
|
- __set_bit(BTN_1, input->keybit);
|
|
|
- __set_bit(BTN_TOOL_FINGER, input->keybit);
|
|
|
-
|
|
|
- /* Distance, rubber and mouse */
|
|
|
- __set_bit(BTN_TOOL_RUBBER, input->keybit);
|
|
|
- __set_bit(BTN_TOOL_MOUSE, input->keybit);
|
|
|
-
|
|
|
- input_set_abs_params(input, ABS_X, 0, 16704, 4, 0);
|
|
|
- input_set_abs_params(input, ABS_Y, 0, 12064, 4, 0);
|
|
|
- input_set_abs_params(input, ABS_PRESSURE, 0, 511, 0, 0);
|
|
|
- input_set_abs_params(input, ABS_DISTANCE, 0, 32, 0, 0);
|
|
|
-
|
|
|
return 0;
|
|
|
|
|
|
#ifdef CONFIG_HID_WACOM_POWER_SUPPLY
|
|
@@ -448,6 +452,7 @@ static struct hid_driver wacom_driver = {
|
|
|
.probe = wacom_probe,
|
|
|
.remove = wacom_remove,
|
|
|
.raw_event = wacom_raw_event,
|
|
|
+ .input_mapped = wacom_input_mapped,
|
|
|
};
|
|
|
|
|
|
static int __init wacom_init(void)
|