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 20 unsigned long rtas_poweron_auto; /* default and normal state is 0 */ 21 22 static 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 28 static 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 43 static struct kobj_attribute auto_poweron_attr = 44 __ATTR(auto_poweron, 0644, auto_poweron_show, auto_poweron_store); 45 46 #ifndef CONFIG_PM 47 struct kobject *power_kobj; 48 49 static struct attribute *g[] = { 50 &auto_poweron_attr.attr, 51 NULL, 52 }; 53 54 static struct attribute_group attr_group = { 55 .attrs = g, 56 }; 57 58 static 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 } 65 machine_core_initcall(pseries, pm_init); 66 #else 67 static int __init apo_pm_init(void) 68 { 69 return (sysfs_create_file(power_kobj, &auto_poweron_attr.attr)); 70 } 71 machine_device_initcall(pseries, apo_pm_init); 72 #endif 73