Messages in this thread | | | Date | Wed, 30 Nov 2011 15:37:59 +0100 (CET) | From | Jiri Kosina <> | Subject | Re: [PATCH 2/3] HID: multitouch: use input_register callback |
| |
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@gmail.com> > --- > 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
| |