diff options
author | Benjamin Tissoires <benjamin.tissoires@redhat.com> | 2013-09-11 16:12:23 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2013-09-24 05:47:47 -0400 |
commit | 01ab35f14aafbc6e159254f52444895661c2f604 (patch) | |
tree | cab89ae2bb332a1fb9d96e5e606a1e770fa14bbf /drivers/hid/hid-lenovo-tpkbd.c | |
parent | 84fca9f38c5d646e95cdeef70e41cf15db549b95 (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.c | 30 |
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 | |||
401 | err2: | ||
402 | kfree(name_mute); | ||
403 | err: | ||
404 | kfree(data_pointer); | ||
405 | return ret; | ||
406 | } | 395 | } |
407 | 396 | ||
408 | static int tpkbd_probe(struct hid_device *hdev, | 397 | static 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 | ||
457 | static void tpkbd_remove(struct hid_device *hdev) | 443 | static void tpkbd_remove(struct hid_device *hdev) |