From 87d111f12332e5425361cf48c5c6026c624e954c Mon Sep 17 00:00:00 2001 From: Wendly Li Date: Thu, 3 Nov 2022 11:15:39 +0000 Subject: touch/gti: fully remove sysfs when removing gti Bug: 255257453 Test: Run rmmod touch_driver && insmod touch_driver.ko Change-Id: I6023f1add1ce8624f76caf16ea78e906fba763d0 Signed-off-by: Wendly Li --- goog_touch_interface.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'goog_touch_interface.c') diff --git a/goog_touch_interface.c b/goog_touch_interface.c index d201956..ee64ce5 100644 --- a/goog_touch_interface.c +++ b/goog_touch_interface.c @@ -3092,15 +3092,23 @@ int goog_touch_interface_remove(struct goog_touch_interface *gti) if (!gti) return -ENODEV; - if (gti->vendor_dev) - sysfs_remove_link(>i->dev->kobj, "vendor"); - if (gti->vendor_input_dev) - sysfs_remove_link(>i->dev->kobj, "vendor_input"); + if (gti->dev) { + sysfs_remove_group(>i->dev->kobj, &goog_attr_group); + if (gti->vendor_dev) + sysfs_remove_link(>i->dev->kobj, "vendor"); + if (gti->vendor_input_dev) + sysfs_remove_link(>i->dev->kobj, "vendor_input"); + device_destroy(gti_class, gti->dev_id); + gti->dev = NULL; + gti_dev_num--; + } if (gti_class) { unregister_chrdev_region(gti->dev_id, 1); - device_destroy(gti_class, gti->dev_id); - gti_dev_num--; + if (!gti_dev_num) { + class_destroy(gti_class); + gti_class = NULL; + } } unregister_panel_bridge(>i->panel_bridge); @@ -3116,9 +3124,6 @@ int goog_touch_interface_remove(struct goog_touch_interface *gti) devm_kfree(gti->vendor_dev, gti->heatmap_buf); devm_kfree(gti->vendor_dev, gti); - if (gti_class && !gti_dev_num) - class_destroy(gti_class); - return 0; } EXPORT_SYMBOL(goog_touch_interface_remove); -- cgit v1.2.3