Commit a1927fbb authored by Thadeu Lima de Souza Cascardo's avatar Thadeu Lima de Souza Cascardo Committed by Tzung-Bi Shih

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: default avatarThadeu Lima de Souza Cascardo <cascardo@igalia.com>
Link: https://lore.kernel.org/r/20240726181235.920335-1-cascardo@igalia.comSigned-off-by: default avatarTzung-Bi Shih <tzungbi@kernel.org>
parent 62be134a
......@@ -1285,6 +1285,15 @@ static int cros_typec_probe(struct platform_device *pdev)
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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment