2019-05-27 08:55:15 +02:00
// SPDX-License-Identifier: GPL-2.0-only
2007-02-08 16:01:17 -06:00
/*
* Interface for power - management for ppc64 compliant platform
*
* Manish Ahuja < mahuja @ us . ibm . com >
*
* Feb 2007
*
* Copyright ( C ) 2007 IBM Corporation .
*/
# include <linux/kobject.h>
# include <linux/string.h>
# include <linux/errno.h>
# include <linux/init.h>
2014-07-16 12:02:43 +10:00
# include <asm/machdep.h>
2007-02-08 16:01:17 -06:00
2016-05-18 11:16:51 +10:00
# include "pseries.h"
2007-02-08 16:01:17 -06:00
unsigned long rtas_poweron_auto ; /* default and normal state is 0 */
2007-11-02 13:20:40 -07:00
static ssize_t auto_poweron_show ( struct kobject * kobj ,
struct kobj_attribute * attr , char * buf )
2007-02-08 16:01:17 -06:00
{
return sprintf ( buf , " %lu \n " , rtas_poweron_auto ) ;
}
2007-11-02 13:20:40 -07:00
static ssize_t auto_poweron_store ( struct kobject * kobj ,
struct kobj_attribute * attr ,
const char * buf , size_t n )
2007-02-08 16:01:17 -06:00
{
int ret ;
unsigned long ups_restart ;
ret = sscanf ( buf , " %lu " , & ups_restart ) ;
if ( ( ret = = 1 ) & & ( ( ups_restart = = 1 ) | | ( ups_restart = = 0 ) ) ) {
rtas_poweron_auto = ups_restart ;
return n ;
}
return - EINVAL ;
}
2007-11-02 13:20:40 -07:00
static struct kobj_attribute auto_poweron_attr =
__ATTR ( auto_poweron , 0644 , auto_poweron_show , auto_poweron_store ) ;
2007-02-08 16:01:17 -06:00
# ifndef CONFIG_PM
2007-11-27 11:28:26 -08:00
struct kobject * power_kobj ;
2007-02-08 16:01:17 -06:00
static struct attribute * g [ ] = {
& auto_poweron_attr . attr ,
NULL ,
} ;
2022-03-08 10:14:14 +11:00
static const struct attribute_group attr_group = {
2007-02-08 16:01:17 -06:00
. attrs = g ,
} ;
static int __init pm_init ( void )
{
2007-11-27 11:28:26 -08:00
power_kobj = kobject_create_and_add ( " power " , NULL ) ;
if ( ! power_kobj )
2007-11-01 10:39:50 -07:00
return - ENOMEM ;
2007-11-27 11:28:26 -08:00
return sysfs_create_group ( power_kobj , & attr_group ) ;
2007-02-08 16:01:17 -06:00
}
2014-07-16 12:02:43 +10:00
machine_core_initcall ( pseries , pm_init ) ;
2007-02-08 16:01:17 -06:00
# else
static int __init apo_pm_init ( void )
{
2008-02-20 11:27:04 +11:00
return ( sysfs_create_file ( power_kobj , & auto_poweron_attr . attr ) ) ;
2007-02-08 16:01:17 -06:00
}
2014-07-16 12:02:43 +10:00
machine_device_initcall ( pseries , apo_pm_init ) ;
2007-02-08 16:01:17 -06:00
# endif