From c44cc021f0c782639a2e3e223ba087941460d408 Mon Sep 17 00:00:00 2001 From: Wendly Li Date: Thu, 10 Nov 2022 18:31:06 +0000 Subject: 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 --- goodix_ts_core.c | 51 +++++++++++++++++++++++++-------------------------- 1 file 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; } -- cgit v1.2.3