brintos

brintos / linux-shallow public Read only

0
0
Text · 1.4 KiB · 6976dbc Raw
60 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (C) 2021 Emil Renner Berthing4 */5 6#include <linux/mfd/tps65086.h>7#include <linux/mod_devicetable.h>8#include <linux/module.h>9#include <linux/platform_device.h>10#include <linux/reboot.h>11 12static int tps65086_restart_notify(struct sys_off_data *data)13{14	struct tps65086 *tps65086 = data->cb_data;15	int ret;16 17	ret = regmap_write(tps65086->regmap, TPS65086_FORCESHUTDN, 1);18	if (ret) {19		dev_err(tps65086->dev, "%s: error writing to tps65086 pmic: %d\n",20			__func__, ret);21		return NOTIFY_DONE;22	}23 24	/* give it a little time */25	mdelay(200);26 27	WARN_ON(1);28 29	return NOTIFY_DONE;30}31 32static int tps65086_restart_probe(struct platform_device *pdev)33{34	struct tps65086 *tps65086 = dev_get_drvdata(pdev->dev.parent);35 36	return devm_register_sys_off_handler(&pdev->dev,37					     SYS_OFF_MODE_RESTART,38					     SYS_OFF_PRIO_HIGH,39					     tps65086_restart_notify,40					     tps65086);41}42 43static const struct platform_device_id tps65086_restart_id_table[] = {44	{ "tps65086-reset", },45	{ /* sentinel */ }46};47MODULE_DEVICE_TABLE(platform, tps65086_restart_id_table);48 49static struct platform_driver tps65086_restart_driver = {50	.driver = {51		.name = "tps65086-restart",52	},53	.probe = tps65086_restart_probe,54	.id_table = tps65086_restart_id_table,55};56module_platform_driver(tps65086_restart_driver);57 58MODULE_AUTHOR("Emil Renner Berthing <kernel@esmil.dk>");59MODULE_DESCRIPTION("TPS65086 restart driver");60