提交 01ab35f1 编写于 作者: B Benjamin Tissoires 提交者: Jiri Kosina

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: NBenjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: NJiri Kosina <jkosina@suse.cz>
上级 84fca9f3
...@@ -339,7 +339,7 @@ static int tpkbd_probe_tp(struct hid_device *hdev) ...@@ -339,7 +339,7 @@ static int tpkbd_probe_tp(struct hid_device *hdev)
struct tpkbd_data_pointer *data_pointer; struct tpkbd_data_pointer *data_pointer;
size_t name_sz = strlen(dev_name(dev)) + 16; size_t name_sz = strlen(dev_name(dev)) + 16;
char *name_mute, *name_micmute; char *name_mute, *name_micmute;
int i, ret; int i;
/* Validate required reports. */ /* Validate required reports. */
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
...@@ -354,7 +354,9 @@ static int tpkbd_probe_tp(struct hid_device *hdev) ...@@ -354,7 +354,9 @@ static int tpkbd_probe_tp(struct hid_device *hdev)
hid_warn(hdev, "Could not create sysfs group\n"); hid_warn(hdev, "Could not create sysfs group\n");
} }
data_pointer = kzalloc(sizeof(struct tpkbd_data_pointer), GFP_KERNEL); data_pointer = devm_kzalloc(&hdev->dev,
sizeof(struct tpkbd_data_pointer),
GFP_KERNEL);
if (data_pointer == NULL) { if (data_pointer == NULL) {
hid_err(hdev, "Could not allocate memory for driver data\n"); hid_err(hdev, "Could not allocate memory for driver data\n");
return -ENOMEM; return -ENOMEM;
...@@ -364,20 +366,13 @@ static int tpkbd_probe_tp(struct hid_device *hdev) ...@@ -364,20 +366,13 @@ static int tpkbd_probe_tp(struct hid_device *hdev)
data_pointer->sensitivity = 0xa0; data_pointer->sensitivity = 0xa0;
data_pointer->press_speed = 0x38; data_pointer->press_speed = 0x38;
name_mute = kzalloc(name_sz, GFP_KERNEL); name_mute = devm_kzalloc(&hdev->dev, name_sz, GFP_KERNEL);
if (name_mute == NULL) { name_micmute = devm_kzalloc(&hdev->dev, name_sz, GFP_KERNEL);
if (name_mute == NULL || name_micmute == NULL) {
hid_err(hdev, "Could not allocate memory for led data\n"); hid_err(hdev, "Could not allocate memory for led data\n");
ret = -ENOMEM; return -ENOMEM;
goto err;
} }
snprintf(name_mute, name_sz, "%s:amber:mute", dev_name(dev)); snprintf(name_mute, name_sz, "%s:amber:mute", dev_name(dev));
name_micmute = kzalloc(name_sz, GFP_KERNEL);
if (name_micmute == NULL) {
hid_err(hdev, "Could not allocate memory for led data\n");
ret = -ENOMEM;
goto err2;
}
snprintf(name_micmute, name_sz, "%s:amber:micmute", dev_name(dev)); snprintf(name_micmute, name_sz, "%s:amber:micmute", dev_name(dev));
hid_set_drvdata(hdev, data_pointer); hid_set_drvdata(hdev, data_pointer);
...@@ -397,12 +392,6 @@ static int tpkbd_probe_tp(struct hid_device *hdev) ...@@ -397,12 +392,6 @@ static int tpkbd_probe_tp(struct hid_device *hdev)
tpkbd_features_set(hdev); tpkbd_features_set(hdev);
return 0; return 0;
err2:
kfree(name_mute);
err:
kfree(data_pointer);
return ret;
} }
static int tpkbd_probe(struct hid_device *hdev, static int tpkbd_probe(struct hid_device *hdev,
...@@ -449,9 +438,6 @@ static void tpkbd_remove_tp(struct hid_device *hdev) ...@@ -449,9 +438,6 @@ static void tpkbd_remove_tp(struct hid_device *hdev)
led_classdev_unregister(&data_pointer->led_mute); led_classdev_unregister(&data_pointer->led_mute);
hid_set_drvdata(hdev, NULL); hid_set_drvdata(hdev, NULL);
kfree(data_pointer->led_micmute.name);
kfree(data_pointer->led_mute.name);
kfree(data_pointer);
} }
static void tpkbd_remove(struct hid_device *hdev) static void tpkbd_remove(struct hid_device *hdev)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册