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);
 };
 
        struct hwspinlock       *hwlock;
        unsigned long           slave_vbase;
        unsigned long           slave_pbase;
-       struct notifier_block   restart_handler;
        const struct sprd_adi_data *data;
 };
 
 #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)
        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,
                .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)
        }
 
        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;
        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,
                .of_match_table = sprd_adi_of_match,
        },
        .probe = sprd_adi_probe,
-       .remove_new = sprd_adi_remove,
 };
 module_platform_driver(sprd_adi_driver);