Lines Matching +full:attr +full:- +full:max +full:- +full:name

1 // SPDX-License-Identifier: GPL-2.0-or-later
8 #define pr_fmt(fmt) "opal-powercap: " fmt
22 struct kobj_attribute attr; member
30 static ssize_t powercap_show(struct kobject *kobj, struct kobj_attribute *attr, in powercap_show() argument
33 struct powercap_attr *pcap_attr = container_of(attr, in powercap_show()
34 struct powercap_attr, attr); in powercap_show()
49 ret = opal_get_powercap(pcap_attr->handle, token, (u32 *)__pa(&pcap)); in powercap_show()
55 ret = -EIO; in powercap_show()
62 ret = -EIO; in powercap_show()
68 ret = -EIO; in powercap_show()
82 struct kobj_attribute *attr, const char *buf, in powercap_store() argument
85 struct powercap_attr *pcap_attr = container_of(attr, in powercap_store()
86 struct powercap_attr, attr); in powercap_store()
105 ret = opal_set_powercap(pcap_attr->handle, token, pcap); in powercap_store()
111 ret = -EIO; in powercap_store()
132 static void __init powercap_add_attr(int handle, const char *name, in powercap_add_attr() argument
133 struct powercap_attr *attr) in powercap_add_attr() argument
135 attr->handle = handle; in powercap_add_attr()
136 sysfs_attr_init(&attr->attr.attr); in powercap_add_attr()
137 attr->attr.attr.name = name; in powercap_add_attr()
138 attr->attr.attr.mode = 0444; in powercap_add_attr()
139 attr->attr.show = powercap_show; in powercap_add_attr()
147 powercap = of_find_compatible_node(NULL, NULL, "ibm,opal-powercap"); in opal_powercap_init()
166 u32 cur, min, max; in opal_powercap_init() local
170 if (!of_property_read_u32(node, "powercap-min", &min)) { in opal_powercap_init()
175 if (!of_property_read_u32(node, "powercap-max", &max)) { in opal_powercap_init()
180 if (!of_property_read_u32(node, "powercap-current", &cur)) { in opal_powercap_init()
198 pcaps[i].pg.name = kasprintf(GFP_KERNEL, "%pOFn", node); in opal_powercap_init()
199 if (!pcaps[i].pg.name) { in opal_powercap_init()
206 powercap_add_attr(min, "powercap-min", in opal_powercap_init()
208 pcaps[i].pg.attrs[j] = &pcaps[i].pattrs[j].attr.attr; in opal_powercap_init()
213 powercap_add_attr(max, "powercap-max", in opal_powercap_init()
215 pcaps[i].pg.attrs[j] = &pcaps[i].pattrs[j].attr.attr; in opal_powercap_init()
220 powercap_add_attr(cur, "powercap-current", in opal_powercap_init()
222 pcaps[i].pattrs[j].attr.attr.mode |= 0220; in opal_powercap_init()
223 pcaps[i].pattrs[j].attr.store = powercap_store; in opal_powercap_init()
224 pcaps[i].pg.attrs[j] = &pcaps[i].pattrs[j].attr.attr; in opal_powercap_init()
230 pcaps[i].pg.name); in opal_powercap_init()
240 while (--i >= 0) { in opal_powercap_init()
243 kfree(pcaps[i].pg.name); in opal_powercap_init()