pinctrl: ocelot: add missing destroy_workqueue() in error path in ocelot_pinctrl_probe()
[ Upstream commit8ada020ade
] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
55442d2f2c
commit
e02b42f3fc
|
@ -2047,6 +2047,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;
|
||||
|
@ -2078,6 +2083,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");
|
||||
|
@ -2119,15 +2129,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",
|
||||
|
@ -2135,7 +2136,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