power.c 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. * Interface for power-management for ppc64 compliant platform
  3. *
  4. * Manish Ahuja <mahuja@us.ibm.com>
  5. *
  6. * Feb 2007
  7. *
  8. * Copyright (C) 2007 IBM Corporation.
  9. *
  10. * This program is free software; you can redistribute it and/or modify
  11. * it under the terms of the GNU General Public License as published by
  12. * the Free Software Foundation; version 2 of the License.
  13. *
  14. * This program is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. * GNU General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU General Public License
  20. * along with this program; if not, write to the Free Software
  21. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  22. */
  23. #include <linux/kobject.h>
  24. #include <linux/string.h>
  25. #include <linux/errno.h>
  26. #include <linux/init.h>
  27. #include <asm/machdep.h>
  28. #include "pseries.h"
  29. unsigned long rtas_poweron_auto; /* default and normal state is 0 */
  30. static ssize_t auto_poweron_show(struct kobject *kobj,
  31. struct kobj_attribute *attr, char *buf)
  32. {
  33. return sprintf(buf, "%lu\n", rtas_poweron_auto);
  34. }
  35. static ssize_t auto_poweron_store(struct kobject *kobj,
  36. struct kobj_attribute *attr,
  37. const char *buf, size_t n)
  38. {
  39. int ret;
  40. unsigned long ups_restart;
  41. ret = sscanf(buf, "%lu", &ups_restart);
  42. if ((ret == 1) && ((ups_restart == 1) || (ups_restart == 0))){
  43. rtas_poweron_auto = ups_restart;
  44. return n;
  45. }
  46. return -EINVAL;
  47. }
  48. static struct kobj_attribute auto_poweron_attr =
  49. __ATTR(auto_poweron, 0644, auto_poweron_show, auto_poweron_store);
  50. #ifndef CONFIG_PM
  51. struct kobject *power_kobj;
  52. static struct attribute *g[] = {
  53. &auto_poweron_attr.attr,
  54. NULL,
  55. };
  56. static struct attribute_group attr_group = {
  57. .attrs = g,
  58. };
  59. static int __init pm_init(void)
  60. {
  61. power_kobj = kobject_create_and_add("power", NULL);
  62. if (!power_kobj)
  63. return -ENOMEM;
  64. return sysfs_create_group(power_kobj, &attr_group);
  65. }
  66. machine_core_initcall(pseries, pm_init);
  67. #else
  68. static int __init apo_pm_init(void)
  69. {
  70. return (sysfs_create_file(power_kobj, &auto_poweron_attr.attr));
  71. }
  72. machine_device_initcall(pseries, apo_pm_init);
  73. #endif