summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWendly Li <wendlyli@google.com>2022-11-10 18:31:06 +0000
committerWendly Li <wendlyli@google.com>2022-11-22 02:14:12 +0000
commitc44cc021f0c782639a2e3e223ba087941460d408 (patch)
tree456eeaa18aaff2c9fd52286fb591135417798bb8
parentace1c47def43c3d0c6f83dc40b7e9f54d4db3bab (diff)
downloadgoodix_touch-c44cc021f0c782639a2e3e223ba087941460d408.tar.gz
touch/goodix: Fix free input device twice
Bug: 255257453 Test: Run rmmod goodix_brl_touch; insmod goodix_brl_touch.ko Change-Id: Ib08e6e541b15e684c244ef95946e7b29631b96d2 Signed-off-by: Wendly Li <wendlyli@google.com>
-rw-r--r--goodix_ts_core.c51
1 files changed, 25 insertions, 26 deletions
diff --git a/goodix_ts_core.c b/goodix_ts_core.c
index 10617c5..b7f80fd 100644
--- a/goodix_ts_core.c
+++ b/goodix_ts_core.c
@@ -2038,9 +2038,6 @@ static int goodix_ts_input_dev_config(struct goodix_ts_core *core_data)
return -ENOMEM;
}
- core_data->input_dev = input_dev;
- input_set_drvdata(input_dev, core_data);
-
input_dev->name = GOODIX_CORE_DRIVER_NAME;
input_dev->phys = GOOIDX_INPUT_PHYS;
input_dev->uniq = "goodix_ts";
@@ -2085,6 +2082,9 @@ static int goodix_ts_input_dev_config(struct goodix_ts_core *core_data)
return r;
}
+ core_data->input_dev = input_dev;
+ input_set_drvdata(input_dev, core_data);
+
return 0;
}
@@ -2100,9 +2100,6 @@ static int goodix_ts_pen_dev_config(struct goodix_ts_core *core_data)
return -ENOMEM;
}
- core_data->pen_dev = pen_dev;
- input_set_drvdata(pen_dev, core_data);
-
pen_dev->name = GOODIX_PEN_DRIVER_NAME;
pen_dev->phys = "goodix_ts,pen/input0";
pen_dev->uniq = "goodix_ts,pen";
@@ -2137,6 +2134,9 @@ static int goodix_ts_pen_dev_config(struct goodix_ts_core *core_data)
return r;
}
+ core_data->pen_dev = pen_dev;
+ input_set_drvdata(pen_dev, core_data);
+
return 0;
}
@@ -2145,7 +2145,6 @@ void goodix_ts_input_dev_remove(struct goodix_ts_core *core_data)
if (!core_data->input_dev)
return;
input_unregister_device(core_data->input_dev);
- input_free_device(core_data->input_dev);
core_data->input_dev = NULL;
}
@@ -2154,7 +2153,6 @@ void goodix_ts_pen_dev_remove(struct goodix_ts_core *core_data)
if (!core_data->pen_dev)
return;
input_unregister_device(core_data->pen_dev);
- input_free_device(core_data->pen_dev);
core_data->pen_dev = NULL;
}
@@ -3148,39 +3146,40 @@ static int goodix_ts_remove(struct platform_device *pdev)
struct goodix_ts_core *core_data = platform_get_drvdata(pdev);
struct goodix_ts_hw_ops *hw_ops = core_data->hw_ops;
- goodix_ts_unregister_notifier(&core_data->ts_notifier);
- goodix_tools_exit();
- goodix_ts_power_off(core_data);
- goodix_set_pinctrl_state(core_data, PINCTRL_MODE_SUSPEND);
-
if (core_data->init_stage >= CORE_INIT_STAGE2) {
+ hw_ops->irq_enable(core_data, false);
+ inspect_module_exit();
#if IS_ENABLED(CONFIG_GOODIX_GESTURE)
gesture_module_exit();
#endif
- inspect_module_exit();
- hw_ops->irq_enable(core_data, false);
-#if IS_ENABLED(CONFIG_FB)
- fb_unregister_client(&core_data->fb_notifier);
-#endif
core_module_prob_sate = CORE_MODULE_REMOVED;
goodix_ts_esd_uninit(core_data);
+ goodix_ts_procfs_exit(core_data);
- goodix_fw_update_uninit();
- goodix_ts_input_dev_remove(core_data);
- goodix_ts_pen_dev_remove(core_data);
- goodix_ts_sysfs_exit(core_data);
#if IS_ENABLED(CONFIG_GOOG_TOUCH_INTERFACE)
#if IS_ENABLED(CONFIG_GTI_PM)
goog_pm_unregister_notification(core_data->gti);
#endif
- goog_touch_interface_remove(core_data->gti);
-#endif
destroy_workqueue(core_data->event_wq);
touch_apis_deinit(&core_data->pdev->dev);
- goodix_ts_procfs_exit(core_data);
- goodix_ts_power_off(core_data);
+ goog_touch_interface_remove(core_data->gti);
+ goodix_ts_sysfs_exit(core_data);
+#endif
+#if IS_ENABLED(CONFIG_FB)
+ fb_unregister_client(&core_data->fb_notifier);
+#endif
+ goodix_ts_pen_dev_remove(core_data);
+ goodix_ts_input_dev_remove(core_data);
+
+ goodix_fw_update_uninit();
}
+ goodix_tools_exit();
+ goodix_ts_unregister_notifier(&core_data->ts_notifier);
+ goodix_ts_power_off(core_data);
+ goodix_set_pinctrl_state(core_data, PINCTRL_MODE_SUSPEND);
+ mutex_destroy(&core_data->cmd_lock);
+
return 0;
}