aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hid/hid-lenovo-tpkbd.c
diff options
context:
space:
mode:
authorBenjamin Tissoires <benjamin.tissoires@redhat.com>2013-09-11 16:12:23 -0400
committerJiri Kosina <jkosina@suse.cz>2013-09-24 05:47:47 -0400
commit01ab35f14aafbc6e159254f52444895661c2f604 (patch)
treecab89ae2bb332a1fb9d96e5e606a1e770fa14bbf /drivers/hid/hid-lenovo-tpkbd.c
parent84fca9f38c5d646e95cdeef70e41cf15db549b95 (diff)
HID: lenovo-tpkbd: devm conversion
We can use the devres API in hid modules, so use it to avoid some kfree and potential leaks. Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers/hid/hid-lenovo-tpkbd.c')
-rw-r--r--drivers/hid/hid-lenovo-tpkbd.c30
1 files changed, 8 insertions, 22 deletions
diff --git a/drivers/hid/hid-lenovo-tpkbd.c b/drivers/hid/hid-lenovo-tpkbd.c
index 31cf29a6ba17..0d9a276af16a 100644
--- a/drivers/hid/hid-lenovo-tpkbd.c
+++ b/drivers/hid/hid-lenovo-tpkbd.c
@@ -339,7 +339,7 @@ static int tpkbd_probe_tp(struct hid_device *hdev)
339 struct tpkbd_data_pointer *data_pointer; 339 struct tpkbd_data_pointer *data_pointer;
340 size_t name_sz = strlen(dev_name(dev)) + 16; 340 size_t name_sz = strlen(dev_name(dev)) + 16;
341 char *name_mute, *name_micmute; 341 char *name_mute, *name_micmute;
342 int i, ret; 342 int i;
343 343
344 /* Validate required reports. */ 344 /* Validate required reports. */
345 for (i = 0; i < 4; i++) { 345 for (i = 0; i < 4; i++) {
@@ -354,7 +354,9 @@ static int tpkbd_probe_tp(struct hid_device *hdev)
354 hid_warn(hdev, "Could not create sysfs group\n"); 354 hid_warn(hdev, "Could not create sysfs group\n");
355 } 355 }
356 356
357 data_pointer = kzalloc(sizeof(struct tpkbd_data_pointer), GFP_KERNEL); 357 data_pointer = devm_kzalloc(&hdev->dev,
358 sizeof(struct tpkbd_data_pointer),
359 GFP_KERNEL);
358 if (data_pointer == NULL) { 360 if (data_pointer == NULL) {
359 hid_err(hdev, "Could not allocate memory for driver data\n"); 361 hid_err(hdev, "Could not allocate memory for driver data\n");
360 return -ENOMEM; 362 return -ENOMEM;
@@ -364,20 +366,13 @@ static int tpkbd_probe_tp(struct hid_device *hdev)
364 data_pointer->sensitivity = 0xa0; 366 data_pointer->sensitivity = 0xa0;
365 data_pointer->press_speed = 0x38; 367 data_pointer->press_speed = 0x38;
366 368
367 name_mute = kzalloc(name_sz, GFP_KERNEL); 369 name_mute = devm_kzalloc(&hdev->dev, name_sz, GFP_KERNEL);
368 if (name_mute == NULL) { 370 name_micmute = devm_kzalloc(&hdev->dev, name_sz, GFP_KERNEL);
371 if (name_mute == NULL || name_micmute == NULL) {
369 hid_err(hdev, "Could not allocate memory for led data\n"); 372 hid_err(hdev, "Could not allocate memory for led data\n");
370 ret = -ENOMEM; 373 return -ENOMEM;
371 goto err;
372 } 374 }
373 snprintf(name_mute, name_sz, "%s:amber:mute", dev_name(dev)); 375 snprintf(name_mute, name_sz, "%s:amber:mute", dev_name(dev));
374
375 name_micmute = kzalloc(name_sz, GFP_KERNEL);
376 if (name_micmute == NULL) {
377 hid_err(hdev, "Could not allocate memory for led data\n");
378 ret = -ENOMEM;
379 goto err2;
380 }
381 snprintf(name_micmute, name_sz, "%s:amber:micmute", dev_name(dev)); 376 snprintf(name_micmute, name_sz, "%s:amber:micmute", dev_name(dev));
382 377
383 hid_set_drvdata(hdev, data_pointer); 378 hid_set_drvdata(hdev, data_pointer);
@@ -397,12 +392,6 @@ static int tpkbd_probe_tp(struct hid_device *hdev)
397 tpkbd_features_set(hdev); 392 tpkbd_features_set(hdev);
398 393
399 return 0; 394 return 0;
400
401err2:
402 kfree(name_mute);
403err:
404 kfree(data_pointer);
405 return ret;
406} 395}
407 396
408static int tpkbd_probe(struct hid_device *hdev, 397static int tpkbd_probe(struct hid_device *hdev,
@@ -449,9 +438,6 @@ static void tpkbd_remove_tp(struct hid_device *hdev)
449 led_classdev_unregister(&data_pointer->led_mute); 438 led_classdev_unregister(&data_pointer->led_mute);
450 439
451 hid_set_drvdata(hdev, NULL); 440 hid_set_drvdata(hdev, NULL);
452 kfree(data_pointer->led_micmute.name);
453 kfree(data_pointer->led_mute.name);
454 kfree(data_pointer);
455} 441}
456 442
457static void tpkbd_remove(struct hid_device *hdev) 443static void tpkbd_remove(struct hid_device *hdev)