Message ID | 20231117161006.87734-3-afd@ti.com |
---|---|
State | Superseded |
Headers | show |
Series | Deprecate register_restart_handler() | expand |
On Fri, Nov 17, 2023 at 10:10:03AM -0600, Andrew Davis wrote: > Use device life-cycle managed register function to simplify probe error > path and eliminate need for explicit remove function. > > Signed-off-by: Andrew Davis <afd@ti.com> Reviewed-by: Gabriel Somlo <gsomlo@gmail.com> Thanks much, --Gabriel > --- > drivers/soc/litex/litex_soc_ctrl.c | 23 +++++------------------ > 1 file changed, 5 insertions(+), 18 deletions(-) > > diff --git a/drivers/soc/litex/litex_soc_ctrl.c b/drivers/soc/litex/litex_soc_ctrl.c > index 10813299aa106..7a0096d93c73d 100644 > --- a/drivers/soc/litex/litex_soc_ctrl.c > +++ b/drivers/soc/litex/litex_soc_ctrl.c > @@ -69,14 +69,11 @@ static int litex_check_csr_access(void __iomem *reg_addr) > > struct litex_soc_ctrl_device { > void __iomem *base; > - struct notifier_block reset_nb; > }; > > -static int litex_reset_handler(struct notifier_block *this, unsigned long mode, > - void *cmd) > +static int litex_reset_handler(struct sys_off_data *data) > { > - struct litex_soc_ctrl_device *soc_ctrl_dev = > - container_of(this, struct litex_soc_ctrl_device, reset_nb); > + struct litex_soc_ctrl_device *soc_ctrl_dev = data->cb_data; > > litex_write32(soc_ctrl_dev->base + RESET_REG_OFF, RESET_REG_VALUE); > return NOTIFY_DONE; > @@ -107,11 +104,9 @@ static int litex_soc_ctrl_probe(struct platform_device *pdev) > if (error) > return error; > > - platform_set_drvdata(pdev, soc_ctrl_dev); > - > - soc_ctrl_dev->reset_nb.notifier_call = litex_reset_handler; > - soc_ctrl_dev->reset_nb.priority = 128; > - error = register_restart_handler(&soc_ctrl_dev->reset_nb); > + error = devm_register_restart_handler(&pdev->dev, > + litex_reset_handler, > + soc_ctrl_dev); > if (error) { > dev_warn(&pdev->dev, "cannot register restart handler: %d\n", > error); > @@ -120,20 +115,12 @@ static int litex_soc_ctrl_probe(struct platform_device *pdev) > return 0; > } > > -static void litex_soc_ctrl_remove(struct platform_device *pdev) > -{ > - struct litex_soc_ctrl_device *soc_ctrl_dev = platform_get_drvdata(pdev); > - > - unregister_restart_handler(&soc_ctrl_dev->reset_nb); > -} > - > static struct platform_driver litex_soc_ctrl_driver = { > .driver = { > .name = "litex-soc-controller", > .of_match_table = of_match_ptr(litex_soc_ctrl_of_match) > }, > .probe = litex_soc_ctrl_probe, > - .remove_new = litex_soc_ctrl_remove, > }; > > module_platform_driver(litex_soc_ctrl_driver); > -- > 2.39.2 >
On Fri, Nov 17, 2023 at 10:10:03AM -0600, Andrew Davis wrote: > Use device life-cycle managed register function to simplify probe error > path and eliminate need for explicit remove function. > > Signed-off-by: Andrew Davis <afd@ti.com> Reviewed-by: Gabriel Somlo <gsomlo@gmail.com> Arnd: the original patch is available here for the purpose of pulling via the soc tree: https://lore.kernel.org/lkml/20231117161006.87734-3-afd@ti.com/ Thanks, --Gabriel > --- > drivers/soc/litex/litex_soc_ctrl.c | 23 +++++------------------ > 1 file changed, 5 insertions(+), 18 deletions(-) > > diff --git a/drivers/soc/litex/litex_soc_ctrl.c b/drivers/soc/litex/litex_soc_ctrl.c > index 10813299aa106..7a0096d93c73d 100644 > --- a/drivers/soc/litex/litex_soc_ctrl.c > +++ b/drivers/soc/litex/litex_soc_ctrl.c > @@ -69,14 +69,11 @@ static int litex_check_csr_access(void __iomem *reg_addr) > > struct litex_soc_ctrl_device { > void __iomem *base; > - struct notifier_block reset_nb; > }; > > -static int litex_reset_handler(struct notifier_block *this, unsigned long mode, > - void *cmd) > +static int litex_reset_handler(struct sys_off_data *data) > { > - struct litex_soc_ctrl_device *soc_ctrl_dev = > - container_of(this, struct litex_soc_ctrl_device, reset_nb); > + struct litex_soc_ctrl_device *soc_ctrl_dev = data->cb_data; > > litex_write32(soc_ctrl_dev->base + RESET_REG_OFF, RESET_REG_VALUE); > return NOTIFY_DONE; > @@ -107,11 +104,9 @@ static int litex_soc_ctrl_probe(struct platform_device *pdev) > if (error) > return error; > > - platform_set_drvdata(pdev, soc_ctrl_dev); > - > - soc_ctrl_dev->reset_nb.notifier_call = litex_reset_handler; > - soc_ctrl_dev->reset_nb.priority = 128; > - error = register_restart_handler(&soc_ctrl_dev->reset_nb); > + error = devm_register_restart_handler(&pdev->dev, > + litex_reset_handler, > + soc_ctrl_dev); > if (error) { > dev_warn(&pdev->dev, "cannot register restart handler: %d\n", > error); > @@ -120,20 +115,12 @@ static int litex_soc_ctrl_probe(struct platform_device *pdev) > return 0; > } > > -static void litex_soc_ctrl_remove(struct platform_device *pdev) > -{ > - struct litex_soc_ctrl_device *soc_ctrl_dev = platform_get_drvdata(pdev); > - > - unregister_restart_handler(&soc_ctrl_dev->reset_nb); > -} > - > static struct platform_driver litex_soc_ctrl_driver = { > .driver = { > .name = "litex-soc-controller", > .of_match_table = of_match_ptr(litex_soc_ctrl_of_match) > }, > .probe = litex_soc_ctrl_probe, > - .remove_new = litex_soc_ctrl_remove, > }; > > module_platform_driver(litex_soc_ctrl_driver); > -- > 2.39.2 >
diff --git a/drivers/soc/litex/litex_soc_ctrl.c b/drivers/soc/litex/litex_soc_ctrl.c index 10813299aa106..7a0096d93c73d 100644 --- a/drivers/soc/litex/litex_soc_ctrl.c +++ b/drivers/soc/litex/litex_soc_ctrl.c @@ -69,14 +69,11 @@ static int litex_check_csr_access(void __iomem *reg_addr) struct litex_soc_ctrl_device { void __iomem *base; - struct notifier_block reset_nb; }; -static int litex_reset_handler(struct notifier_block *this, unsigned long mode, - void *cmd) +static int litex_reset_handler(struct sys_off_data *data) { - struct litex_soc_ctrl_device *soc_ctrl_dev = - container_of(this, struct litex_soc_ctrl_device, reset_nb); + struct litex_soc_ctrl_device *soc_ctrl_dev = data->cb_data; litex_write32(soc_ctrl_dev->base + RESET_REG_OFF, RESET_REG_VALUE); return NOTIFY_DONE; @@ -107,11 +104,9 @@ static int litex_soc_ctrl_probe(struct platform_device *pdev) if (error) return error; - platform_set_drvdata(pdev, soc_ctrl_dev); - - soc_ctrl_dev->reset_nb.notifier_call = litex_reset_handler; - soc_ctrl_dev->reset_nb.priority = 128; - error = register_restart_handler(&soc_ctrl_dev->reset_nb); + error = devm_register_restart_handler(&pdev->dev, + litex_reset_handler, + soc_ctrl_dev); if (error) { dev_warn(&pdev->dev, "cannot register restart handler: %d\n", error); @@ -120,20 +115,12 @@ static int litex_soc_ctrl_probe(struct platform_device *pdev) return 0; } -static void litex_soc_ctrl_remove(struct platform_device *pdev) -{ - struct litex_soc_ctrl_device *soc_ctrl_dev = platform_get_drvdata(pdev); - - unregister_restart_handler(&soc_ctrl_dev->reset_nb); -} - static struct platform_driver litex_soc_ctrl_driver = { .driver = { .name = "litex-soc-controller", .of_match_table = of_match_ptr(litex_soc_ctrl_of_match) }, .probe = litex_soc_ctrl_probe, - .remove_new = litex_soc_ctrl_remove, }; module_platform_driver(litex_soc_ctrl_driver);
Use device life-cycle managed register function to simplify probe error path and eliminate need for explicit remove function. Signed-off-by: Andrew Davis <afd@ti.com> --- drivers/soc/litex/litex_soc_ctrl.c | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-)