spi: sprd: adi: Use devm_register_restart_handler()
authorAndrew Davis <afd@ti.com>
Fri, 17 Nov 2023 16:10:05 +0000 (10:10 -0600)
committerMark Brown <broonie@kernel.org>
Mon, 27 Nov 2023 13:44:12 +0000 (13:44 +0000)
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>
Link: https://lore.kernel.org/r/20231117161006.87734-5-afd@ti.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-sprd-adi.c

index bf01feedbf93f6f2b4eabb563b5d1388ecb82a1e..58c3badd9c79ab0a9f32767a803a3204fd190d6f 100644 (file)
@@ -138,8 +138,7 @@ struct sprd_adi_data {
        u32 slave_offset;
        u32 slave_addr_size;
        int (*read_check)(u32 val, u32 reg);
-       int (*restart)(struct notifier_block *this,
-                      unsigned long mode, void *cmd);
+       int (*restart)(struct sys_off_data *data);
        void (*wdg_rst)(void *p);
 };
 
@@ -150,7 +149,6 @@ struct sprd_adi {
        struct hwspinlock       *hwlock;
        unsigned long           slave_vbase;
        unsigned long           slave_pbase;
-       struct notifier_block   restart_handler;
        const struct sprd_adi_data *data;
 };
 
@@ -370,11 +368,9 @@ static void sprd_adi_set_wdt_rst_mode(void *p)
 #endif
 }
 
-static int sprd_adi_restart(struct notifier_block *this, unsigned long mode,
-                                 void *cmd, struct sprd_adi_wdg *wdg)
+static int sprd_adi_restart(struct sprd_adi *sadi, unsigned long mode,
+                           const char *cmd, struct sprd_adi_wdg *wdg)
 {
-       struct sprd_adi *sadi = container_of(this, struct sprd_adi,
-                                            restart_handler);
        u32 val, reboot_mode = 0;
 
        if (!cmd)
@@ -448,8 +444,7 @@ static int sprd_adi_restart(struct notifier_block *this, unsigned long mode,
        return NOTIFY_DONE;
 }
 
-static int sprd_adi_restart_sc9860(struct notifier_block *this,
-                                          unsigned long mode, void *cmd)
+static int sprd_adi_restart_sc9860(struct sys_off_data *data)
 {
        struct sprd_adi_wdg wdg = {
                .base = PMIC_WDG_BASE,
@@ -458,7 +453,7 @@ static int sprd_adi_restart_sc9860(struct notifier_block *this,
                .wdg_clk = PMIC_CLK_EN,
        };
 
-       return sprd_adi_restart(this, mode, cmd, &wdg);
+       return sprd_adi_restart(data->cb_data, data->mode, data->cmd, &wdg);
 }
 
 static void sprd_adi_hw_init(struct sprd_adi *sadi)
@@ -590,9 +585,9 @@ static int sprd_adi_probe(struct platform_device *pdev)
        }
 
        if (sadi->data->restart) {
-               sadi->restart_handler.notifier_call = sadi->data->restart;
-               sadi->restart_handler.priority = 128;
-               ret = register_restart_handler(&sadi->restart_handler);
+               ret = devm_register_restart_handler(&pdev->dev,
+                                                   sadi->data->restart,
+                                                   sadi);
                if (ret) {
                        dev_err(&pdev->dev, "can not register restart handler\n");
                        goto put_ctlr;
@@ -606,14 +601,6 @@ put_ctlr:
        return ret;
 }
 
-static void sprd_adi_remove(struct platform_device *pdev)
-{
-       struct spi_controller *ctlr = dev_get_drvdata(&pdev->dev);
-       struct sprd_adi *sadi = spi_controller_get_devdata(ctlr);
-
-       unregister_restart_handler(&sadi->restart_handler);
-}
-
 static struct sprd_adi_data sc9860_data = {
        .slave_offset = ADI_10BIT_SLAVE_OFFSET,
        .slave_addr_size = ADI_10BIT_SLAVE_ADDR_SIZE,
@@ -657,7 +644,6 @@ static struct platform_driver sprd_adi_driver = {
                .of_match_table = sprd_adi_of_match,
        },
        .probe = sprd_adi_probe,
-       .remove_new = sprd_adi_remove,
 };
 module_platform_driver(sprd_adi_driver);