power.c (1643B)
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Interface for power-management for ppc64 compliant platform 4 * 5 * Manish Ahuja <mahuja@us.ibm.com> 6 * 7 * Feb 2007 8 * 9 * Copyright (C) 2007 IBM Corporation. 10 */ 11 12#include <linux/kobject.h> 13#include <linux/string.h> 14#include <linux/errno.h> 15#include <linux/init.h> 16#include <asm/machdep.h> 17 18#include "pseries.h" 19 20unsigned long rtas_poweron_auto; /* default and normal state is 0 */ 21 22static ssize_t auto_poweron_show(struct kobject *kobj, 23 struct kobj_attribute *attr, char *buf) 24{ 25 return sprintf(buf, "%lu\n", rtas_poweron_auto); 26} 27 28static ssize_t auto_poweron_store(struct kobject *kobj, 29 struct kobj_attribute *attr, 30 const char *buf, size_t n) 31{ 32 int ret; 33 unsigned long ups_restart; 34 ret = sscanf(buf, "%lu", &ups_restart); 35 36 if ((ret == 1) && ((ups_restart == 1) || (ups_restart == 0))){ 37 rtas_poweron_auto = ups_restart; 38 return n; 39 } 40 return -EINVAL; 41} 42 43static struct kobj_attribute auto_poweron_attr = 44 __ATTR(auto_poweron, 0644, auto_poweron_show, auto_poweron_store); 45 46#ifndef CONFIG_PM 47struct kobject *power_kobj; 48 49static struct attribute *g[] = { 50 &auto_poweron_attr.attr, 51 NULL, 52}; 53 54static const struct attribute_group attr_group = { 55 .attrs = g, 56}; 57 58static int __init pm_init(void) 59{ 60 power_kobj = kobject_create_and_add("power", NULL); 61 if (!power_kobj) 62 return -ENOMEM; 63 return sysfs_create_group(power_kobj, &attr_group); 64} 65machine_core_initcall(pseries, pm_init); 66#else 67static int __init apo_pm_init(void) 68{ 69 return (sysfs_create_file(power_kobj, &auto_poweron_attr.attr)); 70} 71machine_device_initcall(pseries, apo_pm_init); 72#endif