Re: [PATCH 2/3] HID: multitouch: use input_register callback
From: Jiri Kosina <hidden>
Date: 2011-11-30 14:38:02
Also in:
lkml
On Tue, 29 Nov 2011, Benjamin Tissoires wrote:
quoted hunk ↗ jump to hunk
Use the input_register mechanism to avoid a race in which the device may emit events before the slots are ready. Signed-off-by: Benjamin Tissoires <redacted> --- drivers/hid/hid-multitouch.c | 37 ++++++++++++++++++++++++------------- 1 files changed, 24 insertions(+), 13 deletions(-)diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c index 91c13bc..bd6e410 100644 --- a/drivers/hid/hid-multitouch.c +++ b/drivers/hid/hid-multitouch.c@@ -574,6 +574,29 @@ static void mt_set_input_mode(struct hid_device *hdev) } } +static int mt_input_register(struct hid_device *hdev, + struct hid_input *hidinput) +{ + int ret; + struct mt_device *td = hid_get_drvdata(hdev); + + td->slots = kzalloc(td->maxcontacts * sizeof(struct mt_slot), + GFP_KERNEL); + if (!td->slots) { + dev_err(&hdev->dev, "cannot allocate multitouch slots\n"); + return -ENOMEM; + } + + ret = sysfs_create_group(&hdev->dev.kobj, &mt_attribute_group); + if (ret) + hid_warn(hdev, + "can't create sysfs quirks attribute err: %d\n", ret); + + mt_set_input_mode(hdev); + + return 0; +} + static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id) { int ret, i;@@ -610,19 +633,6 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id) if (ret) goto fail; - td->slots = kzalloc(td->maxcontacts * sizeof(struct mt_slot), - GFP_KERNEL); - if (!td->slots) { - dev_err(&hdev->dev, "cannot allocate multitouch slots\n"); - hid_hw_stop(hdev); - ret = -ENOMEM; - goto fail; - } - - ret = sysfs_create_group(&hdev->dev.kobj, &mt_attribute_group); - - mt_set_input_mode(hdev); - return 0; fail:@@ -843,6 +853,7 @@ static struct hid_driver mt_driver = { .input_mapping = mt_input_mapping, .input_mapped = mt_input_mapped, .feature_mapping = mt_feature_mapping, + .input_register = mt_input_register,
Umm, where does this come from? My memory is famous for not being really excellent, but I don't immediately remember any patchset adding such callback to hid_driver struct. And it's not anywhere in my applied queue anyway.
.usage_table = mt_grabbed_usages, .event = mt_event, #ifdef CONFIG_PM -- 1.7.4.4
-- Jiri Kosina SUSE Labs