aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHanno Zulla <abos@hanno.de>2018-06-14 10:29:08 -0400
committerJiri Kosina <jkosina@suse.cz>2018-07-09 09:14:07 -0400
commitcc070a847bc0b6fb66e4c05b5bd036d2ea80fb9a (patch)
tree34052578d1dd7be2643ee61de70d246e0538859a
parent81e97f01371f4e1701feeafe484665112cd9ddc2 (diff)
HID: hid-sony.c: Use devm_ api to simplify sony_register_touchpad()
HID: hid-sony.c: Use devm_ api to simplify sony_register_touchpad() Using devm_ calls, the resources of the Sony game devices's features are tied to the main device handle, making it easier to handle errors and teardown inside the device driver. Altogether, this reduces complexity of the driver source. Signed-off-by: Hanno Zulla <kontakt@hanno.de> Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
-rw-r--r--drivers/hid/hid-sony.c40
1 files changed, 6 insertions, 34 deletions
diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
index e475c5073c99..f14286e62e15 100644
--- a/drivers/hid/hid-sony.c
+++ b/drivers/hid/hid-sony.c
@@ -1353,7 +1353,7 @@ static int sony_register_touchpad(struct sony_sc *sc, int touch_count,
1353 char *name; 1353 char *name;
1354 int ret; 1354 int ret;
1355 1355
1356 sc->touchpad = input_allocate_device(); 1356 sc->touchpad = devm_input_allocate_device(&sc->hdev->dev);
1357 if (!sc->touchpad) 1357 if (!sc->touchpad)
1358 return -ENOMEM; 1358 return -ENOMEM;
1359 1359
@@ -1370,11 +1370,9 @@ static int sony_register_touchpad(struct sony_sc *sc, int touch_count,
1370 * DS4 compatible non-Sony devices with different names. 1370 * DS4 compatible non-Sony devices with different names.
1371 */ 1371 */
1372 name_sz = strlen(sc->hdev->name) + sizeof(DS4_TOUCHPAD_SUFFIX); 1372 name_sz = strlen(sc->hdev->name) + sizeof(DS4_TOUCHPAD_SUFFIX);
1373 name = kzalloc(name_sz, GFP_KERNEL); 1373 name = devm_kzalloc(&sc->hdev->dev, name_sz, GFP_KERNEL);
1374 if (!name) { 1374 if (!name)
1375 ret = -ENOMEM; 1375 return -ENOMEM;
1376 goto err;
1377 }
1378 snprintf(name, name_sz, "%s" DS4_TOUCHPAD_SUFFIX, sc->hdev->name); 1376 snprintf(name, name_sz, "%s" DS4_TOUCHPAD_SUFFIX, sc->hdev->name);
1379 sc->touchpad->name = name; 1377 sc->touchpad->name = name;
1380 1378
@@ -1403,34 +1401,13 @@ static int sony_register_touchpad(struct sony_sc *sc, int touch_count,
1403 1401
1404 ret = input_mt_init_slots(sc->touchpad, touch_count, INPUT_MT_POINTER); 1402 ret = input_mt_init_slots(sc->touchpad, touch_count, INPUT_MT_POINTER);
1405 if (ret < 0) 1403 if (ret < 0)
1406 goto err; 1404 return ret;
1407 1405
1408 ret = input_register_device(sc->touchpad); 1406 ret = input_register_device(sc->touchpad);
1409 if (ret < 0) 1407 if (ret < 0)
1410 goto err; 1408 return ret;
1411 1409
1412 return 0; 1410 return 0;
1413
1414err:
1415 kfree(sc->touchpad->name);
1416 sc->touchpad->name = NULL;
1417
1418 input_free_device(sc->touchpad);
1419 sc->touchpad = NULL;
1420
1421 return ret;
1422}
1423
1424static void sony_unregister_touchpad(struct sony_sc *sc)
1425{
1426 if (!sc->touchpad)
1427 return;
1428
1429 kfree(sc->touchpad->name);
1430 sc->touchpad->name = NULL;
1431
1432 input_unregister_device(sc->touchpad);
1433 sc->touchpad = NULL;
1434} 1411}
1435 1412
1436static int sony_register_sensors(struct sony_sc *sc) 1413static int sony_register_sensors(struct sony_sc *sc)
@@ -2883,8 +2860,6 @@ err_stop:
2883 sony_leds_remove(sc); 2860 sony_leds_remove(sc);
2884 if (sc->quirks & SONY_BATTERY_SUPPORT) 2861 if (sc->quirks & SONY_BATTERY_SUPPORT)
2885 sony_battery_remove(sc); 2862 sony_battery_remove(sc);
2886 if (sc->touchpad)
2887 sony_unregister_touchpad(sc);
2888 if (sc->sensor_dev) 2863 if (sc->sensor_dev)
2889 sony_unregister_sensors(sc); 2864 sony_unregister_sensors(sc);
2890 sony_cancel_work_sync(sc); 2865 sony_cancel_work_sync(sc);
@@ -2971,9 +2946,6 @@ static void sony_remove(struct hid_device *hdev)
2971 if (sc->quirks & SONY_BATTERY_SUPPORT) 2946 if (sc->quirks & SONY_BATTERY_SUPPORT)
2972 sony_battery_remove(sc); 2947 sony_battery_remove(sc);
2973 2948
2974 if (sc->touchpad)
2975 sony_unregister_touchpad(sc);
2976
2977 if (sc->sensor_dev) 2949 if (sc->sensor_dev)
2978 sony_unregister_sensors(sc); 2950 sony_unregister_sensors(sc);
2979 2951