On Tue, 29 Nov 2011, Benjamin Tissoires wrote: > 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 <benjamin.tissoires@xxxxxxxxx> > --- > 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 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html