aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHanno Zulla <abos@hanno.de>2018-06-14 10:32:16 -0400
committerJiri Kosina <jkosina@suse.cz>2018-07-09 09:14:08 -0400
commitea58c33d4d85504b4255dd74999603a6793bc56a (patch)
tree058de49a79d18e88fb9aa9de59f45c836163050e
parent8082d3f02261adbdc4eb3301fb99960162c3d142 (diff)
HID: hid-sony.c: Use devm_ api to simplify sc->output_report_dmabuf
HID: hid-sony.c: Use devm_ api to simplify sc->output_report_dmabuf 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.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
index 9abdd77f16c9..9671a4bad643 100644
--- a/drivers/hid/hid-sony.c
+++ b/drivers/hid/hid-sony.c
@@ -2202,16 +2202,20 @@ static int sony_allocate_output_report(struct sony_sc *sc)
2202 if ((sc->quirks & SIXAXIS_CONTROLLER) || 2202 if ((sc->quirks & SIXAXIS_CONTROLLER) ||
2203 (sc->quirks & NAVIGATION_CONTROLLER)) 2203 (sc->quirks & NAVIGATION_CONTROLLER))
2204 sc->output_report_dmabuf = 2204 sc->output_report_dmabuf =
2205 kmalloc(sizeof(union sixaxis_output_report_01), 2205 devm_kmalloc(&sc->hdev->dev,
2206 sizeof(union sixaxis_output_report_01),
2206 GFP_KERNEL); 2207 GFP_KERNEL);
2207 else if (sc->quirks & DUALSHOCK4_CONTROLLER_BT) 2208 else if (sc->quirks & DUALSHOCK4_CONTROLLER_BT)
2208 sc->output_report_dmabuf = kmalloc(DS4_OUTPUT_REPORT_0x11_SIZE, 2209 sc->output_report_dmabuf = devm_kmalloc(&sc->hdev->dev,
2210 DS4_OUTPUT_REPORT_0x11_SIZE,
2209 GFP_KERNEL); 2211 GFP_KERNEL);
2210 else if (sc->quirks & (DUALSHOCK4_CONTROLLER_USB | DUALSHOCK4_DONGLE)) 2212 else if (sc->quirks & (DUALSHOCK4_CONTROLLER_USB | DUALSHOCK4_DONGLE))
2211 sc->output_report_dmabuf = kmalloc(DS4_OUTPUT_REPORT_0x05_SIZE, 2213 sc->output_report_dmabuf = devm_kmalloc(&sc->hdev->dev,
2214 DS4_OUTPUT_REPORT_0x05_SIZE,
2212 GFP_KERNEL); 2215 GFP_KERNEL);
2213 else if (sc->quirks & MOTION_CONTROLLER) 2216 else if (sc->quirks & MOTION_CONTROLLER)
2214 sc->output_report_dmabuf = kmalloc(MOTION_REPORT_0x02_SIZE, 2217 sc->output_report_dmabuf = devm_kmalloc(&sc->hdev->dev,
2218 MOTION_REPORT_0x02_SIZE,
2215 GFP_KERNEL); 2219 GFP_KERNEL);
2216 else 2220 else
2217 return 0; 2221 return 0;
@@ -2791,7 +2795,6 @@ err_stop:
2791 if (sc->hw_version) 2795 if (sc->hw_version)
2792 device_remove_file(&sc->hdev->dev, &dev_attr_hardware_version); 2796 device_remove_file(&sc->hdev->dev, &dev_attr_hardware_version);
2793 sony_cancel_work_sync(sc); 2797 sony_cancel_work_sync(sc);
2794 kfree(sc->output_report_dmabuf);
2795 sony_remove_dev_list(sc); 2798 sony_remove_dev_list(sc);
2796 sony_release_device_id(sc); 2799 sony_release_device_id(sc);
2797 hid_hw_stop(hdev); 2800 hid_hw_stop(hdev);
@@ -2879,8 +2882,6 @@ static void sony_remove(struct hid_device *hdev)
2879 2882
2880 sony_cancel_work_sync(sc); 2883 sony_cancel_work_sync(sc);
2881 2884
2882 kfree(sc->output_report_dmabuf);
2883
2884 sony_remove_dev_list(sc); 2885 sony_remove_dev_list(sc);
2885 2886
2886 sony_release_device_id(sc); 2887 sony_release_device_id(sc);