Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8f57f231 authored by Guenter Roeck's avatar Guenter Roeck Committed by Sebastian Reichel
Browse files

power/reset: xgene: Register with kernel restart handler



Register with kernel restart handler instead of setting arm_pm_restart directly.

This patch also addresses the following compile warning.

drivers/power/reset/xgene-reboot.c: In function 'xgene_reboot_probe':
drivers/power/reset/xgene-reboot.c:77:17: warning:
	assignment from incompatible pointer type [enabled by default]

The warning was due to a mismatch between the type of arm_pm_restart
and the restart function.

Cc: Loc Ho <lho@apm.com>
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent 745e1976
Loading
Loading
Loading
Loading
+18 −10
Original line number Diff line number Diff line
@@ -26,38 +26,43 @@
 */
#include <linux/delay.h>
#include <linux/io.h>
#include <linux/notifier.h>
#include <linux/of_device.h>
#include <linux/of_address.h>
#include <linux/platform_device.h>
#include <linux/reboot.h>
#include <linux/stat.h>
#include <linux/slab.h>
#include <asm/system_misc.h>

struct xgene_reboot_context {
	struct device *dev;
	void *csr;
	u32 mask;
	struct notifier_block restart_handler;
};

static struct xgene_reboot_context *xgene_restart_ctx;

static void xgene_restart(enum reboot_mode mode, const char *cmd)
static int xgene_restart_handler(struct notifier_block *this,
				 unsigned long mode, void *cmd)
{
	struct xgene_reboot_context *ctx = xgene_restart_ctx;
	struct xgene_reboot_context *ctx =
		container_of(this, struct xgene_reboot_context,
			     restart_handler);

	/* Issue the reboot */
	if (ctx)
	writel(ctx->mask, ctx->csr);

	mdelay(1000);

	dev_emerg(ctx->dev, "Unable to restart system\n");

	return NOTIFY_DONE;
}

static int xgene_reboot_probe(struct platform_device *pdev)
{
	struct xgene_reboot_context *ctx;
	struct device *dev = &pdev->dev;
	int err;

	ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL);
	if (!ctx)
@@ -73,10 +78,13 @@ static int xgene_reboot_probe(struct platform_device *pdev)
		ctx->mask = 0xFFFFFFFF;

	ctx->dev = dev;
	arm_pm_restart = xgene_restart;
	xgene_restart_ctx = ctx;
	ctx->restart_handler.notifier_call = xgene_restart_handler;
	ctx->restart_handler.priority = 128;
	err = register_restart_handler(&ctx->restart_handler);
	if (err)
		dev_err(dev, "cannot register restart handler (err=%d)\n", err);

	return 0;
	return err;
}

static struct of_device_id xgene_reboot_of_match[] = {