platform/chrome: cros_ec_typec: add remove driver hook
This allows the driver to be unbound and bound again. Otherwise, when unbinding the driver, there will be leftover sysfs entries. When rebinding the driver, it also ends up touching freed memory when adding to the notifier chain as the old one was not removed and ends up being traversed. Add a remove_new driver hook, which removes the notifier from the chain and unregisters the typec ports. Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com> Link: https://lore.kernel.org/r/20240726181235.920335-1-cascardo@igalia.com Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
This commit is contained in:
committed by
Tzung-Bi Shih
parent
62be134abf
commit
a1927fbbf7
@@ -1285,6 +1285,15 @@ unregister_ports:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void cros_typec_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct cros_typec_data *typec = platform_get_drvdata(pdev);
|
||||
|
||||
cros_usbpd_unregister_notify(&typec->nb);
|
||||
cancel_work_sync(&typec->port_work);
|
||||
cros_unregister_ports(typec);
|
||||
}
|
||||
|
||||
static int __maybe_unused cros_typec_suspend(struct device *dev)
|
||||
{
|
||||
struct cros_typec_data *typec = dev_get_drvdata(dev);
|
||||
@@ -1316,6 +1325,7 @@ static struct platform_driver cros_typec_driver = {
|
||||
.pm = &cros_typec_pm_ops,
|
||||
},
|
||||
.probe = cros_typec_probe,
|
||||
.remove_new = cros_typec_remove,
|
||||
};
|
||||
|
||||
module_platform_driver(cros_typec_driver);
|
||||
|
||||
Reference in New Issue
Block a user