brintos

brintos / linux-shallow public Read only

0
0
Text · 1.8 KiB · bb26fa6 Raw
76 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Power off driver for ams AS3722 device.4 *5 * Copyright (c) 2013, NVIDIA CORPORATION.  All rights reserved.6 *7 * Author: Laxman Dewangan <ldewangan@nvidia.com>8 */9 10#include <linux/mfd/as3722.h>11#include <linux/module.h>12#include <linux/of.h>13#include <linux/platform_device.h>14#include <linux/reboot.h>15#include <linux/slab.h>16 17struct as3722_poweroff {18	struct device *dev;19	struct as3722 *as3722;20};21 22static int as3722_pm_power_off(struct sys_off_data *data)23{24	struct as3722_poweroff *as3722_pm_poweroff = data->cb_data;25	int ret;26 27	ret = as3722_update_bits(as3722_pm_poweroff->as3722,28		AS3722_RESET_CONTROL_REG, AS3722_POWER_OFF, AS3722_POWER_OFF);29	if (ret < 0)30		dev_err(as3722_pm_poweroff->dev,31			"RESET_CONTROL_REG update failed, %d\n", ret);32 33	return NOTIFY_DONE;34}35 36static int as3722_poweroff_probe(struct platform_device *pdev)37{38	struct as3722_poweroff *as3722_poweroff;39	struct device_node *np = pdev->dev.parent->of_node;40 41	if (!np)42		return -EINVAL;43 44	if (!of_property_read_bool(np, "ams,system-power-controller"))45		return 0;46 47	as3722_poweroff = devm_kzalloc(&pdev->dev, sizeof(*as3722_poweroff),48				GFP_KERNEL);49	if (!as3722_poweroff)50		return -ENOMEM;51 52	as3722_poweroff->as3722 = dev_get_drvdata(pdev->dev.parent);53	as3722_poweroff->dev = &pdev->dev;54 55	return devm_register_sys_off_handler(as3722_poweroff->dev,56					     SYS_OFF_MODE_POWER_OFF,57					     SYS_OFF_PRIO_DEFAULT,58					     as3722_pm_power_off,59					     as3722_poweroff);60 61	return 0;62}63 64static struct platform_driver as3722_poweroff_driver = {65	.driver = {66		.name = "as3722-power-off",67	},68	.probe = as3722_poweroff_probe,69};70 71module_platform_driver(as3722_poweroff_driver);72 73MODULE_DESCRIPTION("Power off driver for ams AS3722 PMIC Device");74MODULE_ALIAS("platform:as3722-power-off");75MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>");76