mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
pinctrl: ocelot: add missing destroy_workqueue() in error path in ocelot_pinctrl_probe()
Using devm_add_action_or_reset() to make workqueue device-managed, so it can be
destroy whenever the driver is unbound.
Fixes: c297561bc9 ("pinctrl: ocelot: Fix interrupt controller")
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
Reviewed-by: Horatiu Vultur <horatiu.vultur@microchip.com>
Link: https://lore.kernel.org/r/20220925021258.1492905-1-yangyingliang@huawei.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
afb8d5f431
commit
8ada020ade
|
|
@ -2038,6 +2038,11 @@ static struct regmap *ocelot_pinctrl_create_pincfg(struct platform_device *pdev,
|
|||
return devm_regmap_init_mmio(&pdev->dev, base, ®map_config);
|
||||
}
|
||||
|
||||
static void ocelot_destroy_workqueue(void *data)
|
||||
{
|
||||
destroy_workqueue(data);
|
||||
}
|
||||
|
||||
static int ocelot_pinctrl_probe(struct platform_device *pdev)
|
||||
{
|
||||
const struct ocelot_match_data *data;
|
||||
|
|
@ -2069,6 +2074,11 @@ static int ocelot_pinctrl_probe(struct platform_device *pdev)
|
|||
if (!info->wq)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = devm_add_action_or_reset(dev, ocelot_destroy_workqueue,
|
||||
info->wq);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
info->pincfg_data = &data->pincfg_data;
|
||||
|
||||
reset = devm_reset_control_get_optional_shared(dev, "switch");
|
||||
|
|
@ -2110,15 +2120,6 @@ static int ocelot_pinctrl_probe(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int ocelot_pinctrl_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct ocelot_pinctrl *info = platform_get_drvdata(pdev);
|
||||
|
||||
destroy_workqueue(info->wq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver ocelot_pinctrl_driver = {
|
||||
.driver = {
|
||||
.name = "pinctrl-ocelot",
|
||||
|
|
@ -2126,7 +2127,6 @@ static struct platform_driver ocelot_pinctrl_driver = {
|
|||
.suppress_bind_attrs = true,
|
||||
},
|
||||
.probe = ocelot_pinctrl_probe,
|
||||
.remove = ocelot_pinctrl_remove,
|
||||
};
|
||||
module_platform_driver(ocelot_pinctrl_driver);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user