|
@@ -725,12 +725,13 @@ static void mt_touch_report(struct hid_device *hid, struct hid_report *report)
|
|
|
mt_sync_frame(td, report->field[0]->hidinput->input);
|
|
|
}
|
|
|
|
|
|
-static void mt_touch_input_configured(struct hid_device *hdev,
|
|
|
+static int mt_touch_input_configured(struct hid_device *hdev,
|
|
|
struct hid_input *hi)
|
|
|
{
|
|
|
struct mt_device *td = hid_get_drvdata(hdev);
|
|
|
struct mt_class *cls = &td->mtclass;
|
|
|
struct input_dev *input = hi->input;
|
|
|
+ int ret;
|
|
|
|
|
|
if (!td->maxcontacts)
|
|
|
td->maxcontacts = MT_DEFAULT_MAXCONTACT;
|
|
@@ -752,9 +753,12 @@ static void mt_touch_input_configured(struct hid_device *hdev,
|
|
|
if (td->is_buttonpad)
|
|
|
__set_bit(INPUT_PROP_BUTTONPAD, input->propbit);
|
|
|
|
|
|
- input_mt_init_slots(input, td->maxcontacts, td->mt_flags);
|
|
|
+ ret = input_mt_init_slots(input, td->maxcontacts, td->mt_flags);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
|
|
|
td->mt_flags = 0;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
|
|
@@ -930,15 +934,19 @@ static void mt_post_parse(struct mt_device *td)
|
|
|
cls->quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
|
|
|
}
|
|
|
|
|
|
-static void mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
|
|
|
+static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
|
|
|
{
|
|
|
struct mt_device *td = hid_get_drvdata(hdev);
|
|
|
char *name;
|
|
|
const char *suffix = NULL;
|
|
|
struct hid_field *field = hi->report->field[0];
|
|
|
+ int ret;
|
|
|
|
|
|
- if (hi->report->id == td->mt_report_id)
|
|
|
- mt_touch_input_configured(hdev, hi);
|
|
|
+ if (hi->report->id == td->mt_report_id) {
|
|
|
+ ret = mt_touch_input_configured(hdev, hi);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
|
|
|
/*
|
|
|
* some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
|
|
@@ -989,6 +997,8 @@ static void mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
|
|
|
hi->input->name = name;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
|