Unverified Commit 8e6a4396 authored by Andrew Davis's avatar Andrew Davis Committed by Mark Brown
Browse files

spi: sprd: adi: Use devm_register_restart_handler()



Use device life-cycle managed register function to simplify probe error
path and eliminate need for explicit remove function.

Signed-off-by: default avatarAndrew Davis <afd@ti.com>
Link: https://lore.kernel.org/r/20231117161006.87734-5-afd@ti.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 4c3ff31a
Loading
Loading
Loading
Loading
+8 −22
Original line number Diff line number Diff line
@@ -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 @@ static int sprd_adi_probe(struct platform_device *pdev)
	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);