Skip to content

Commit 41e452e

Browse files
lumaglinusw
authored andcommitted
pinctrl: qcom: switch to devm_register_sys_off_handler()
Error-handling paths in msm_pinctrl_probe() don't call a function required to unroll restart handler registration, unregister_restart_handler(). Instead of adding calls to this function, switch the msm pinctrl code into using devm_register_sys_off_handler(). Fixes: cf1fc18 ("pinctrl: qcom: use restart_notifier mechanism for ps_hold") Signed-off-by: Dmitry Baryshkov <[email protected]> Link: https://lore.kernel.org/[email protected] Signed-off-by: Linus Walleij <[email protected]>
1 parent fdf6cab commit 41e452e

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

drivers/pinctrl/qcom/pinctrl-msm.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
* @pctrl: pinctrl handle.
4545
* @chip: gpiochip handle.
4646
* @desc: pin controller descriptor
47-
* @restart_nb: restart notifier block.
4847
* @irq: parent irq for the TLMM irq_chip.
4948
* @intr_target_use_scm: route irq to application cpu using scm calls
5049
* @lock: Spinlock to protect register resources as well
@@ -64,7 +63,6 @@ struct msm_pinctrl {
6463
struct pinctrl_dev *pctrl;
6564
struct gpio_chip chip;
6665
struct pinctrl_desc desc;
67-
struct notifier_block restart_nb;
6866

6967
int irq;
7068

@@ -1471,10 +1469,9 @@ static int msm_gpio_init(struct msm_pinctrl *pctrl)
14711469
return 0;
14721470
}
14731471

1474-
static int msm_ps_hold_restart(struct notifier_block *nb, unsigned long action,
1475-
void *data)
1472+
static int msm_ps_hold_restart(struct sys_off_data *data)
14761473
{
1477-
struct msm_pinctrl *pctrl = container_of(nb, struct msm_pinctrl, restart_nb);
1474+
struct msm_pinctrl *pctrl = data->cb_data;
14781475

14791476
writel(0, pctrl->regs[0] + PS_HOLD_OFFSET);
14801477
mdelay(1000);
@@ -1485,7 +1482,11 @@ static struct msm_pinctrl *poweroff_pctrl;
14851482

14861483
static void msm_ps_hold_poweroff(void)
14871484
{
1488-
msm_ps_hold_restart(&poweroff_pctrl->restart_nb, 0, NULL);
1485+
struct sys_off_data data = {
1486+
.cb_data = poweroff_pctrl,
1487+
};
1488+
1489+
msm_ps_hold_restart(&data);
14891490
}
14901491

14911492
static void msm_pinctrl_setup_pm_reset(struct msm_pinctrl *pctrl)
@@ -1495,9 +1496,11 @@ static void msm_pinctrl_setup_pm_reset(struct msm_pinctrl *pctrl)
14951496

14961497
for (i = 0; i < pctrl->soc->nfunctions; i++)
14971498
if (!strcmp(func[i].name, "ps_hold")) {
1498-
pctrl->restart_nb.notifier_call = msm_ps_hold_restart;
1499-
pctrl->restart_nb.priority = 128;
1500-
if (register_restart_handler(&pctrl->restart_nb))
1499+
if (devm_register_sys_off_handler(pctrl->dev,
1500+
SYS_OFF_MODE_RESTART,
1501+
128,
1502+
msm_ps_hold_restart,
1503+
pctrl))
15011504
dev_err(pctrl->dev,
15021505
"failed to setup restart handler.\n");
15031506
poweroff_pctrl = pctrl;
@@ -1599,8 +1602,6 @@ void msm_pinctrl_remove(struct platform_device *pdev)
15991602
struct msm_pinctrl *pctrl = platform_get_drvdata(pdev);
16001603

16011604
gpiochip_remove(&pctrl->chip);
1602-
1603-
unregister_restart_handler(&pctrl->restart_nb);
16041605
}
16051606
EXPORT_SYMBOL(msm_pinctrl_remove);
16061607

0 commit comments

Comments
 (0)