mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
thermal: export thermal_zone_parameters to sysfs
It's useful for tuning to be able to edit thermal_zone_parameters from userspace. Export them to the thermal_zone sysfs so that they can be easily changed. Cc: Zhang Rui <[email protected]> Cc: Eduardo Valentin <[email protected]> Signed-off-by: Javi Merino <[email protected]> Signed-off-by: Eduardo Valentin <[email protected]>
This commit is contained in:
parent
0cdf97e1ad
commit
9f38271c6f
2 changed files with 153 additions and 0 deletions
|
|
@ -875,6 +875,102 @@ emul_temp_store(struct device *dev, struct device_attribute *attr,
|
|||
static DEVICE_ATTR(emul_temp, S_IWUSR, NULL, emul_temp_store);
|
||||
#endif/*CONFIG_THERMAL_EMULATION*/
|
||||
|
||||
static ssize_t
|
||||
sustainable_power_show(struct device *dev, struct device_attribute *devattr,
|
||||
char *buf)
|
||||
{
|
||||
struct thermal_zone_device *tz = to_thermal_zone(dev);
|
||||
|
||||
if (tz->tzp)
|
||||
return sprintf(buf, "%u\n", tz->tzp->sustainable_power);
|
||||
else
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
sustainable_power_store(struct device *dev, struct device_attribute *devattr,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
struct thermal_zone_device *tz = to_thermal_zone(dev);
|
||||
u32 sustainable_power;
|
||||
|
||||
if (!tz->tzp)
|
||||
return -EIO;
|
||||
|
||||
if (kstrtou32(buf, 10, &sustainable_power))
|
||||
return -EINVAL;
|
||||
|
||||
tz->tzp->sustainable_power = sustainable_power;
|
||||
|
||||
return count;
|
||||
}
|
||||
static DEVICE_ATTR(sustainable_power, S_IWUSR | S_IRUGO, sustainable_power_show,
|
||||
sustainable_power_store);
|
||||
|
||||
#define create_s32_tzp_attr(name) \
|
||||
static ssize_t \
|
||||
name##_show(struct device *dev, struct device_attribute *devattr, \
|
||||
char *buf) \
|
||||
{ \
|
||||
struct thermal_zone_device *tz = to_thermal_zone(dev); \
|
||||
\
|
||||
if (tz->tzp) \
|
||||
return sprintf(buf, "%u\n", tz->tzp->name); \
|
||||
else \
|
||||
return -EIO; \
|
||||
} \
|
||||
\
|
||||
static ssize_t \
|
||||
name##_store(struct device *dev, struct device_attribute *devattr, \
|
||||
const char *buf, size_t count) \
|
||||
{ \
|
||||
struct thermal_zone_device *tz = to_thermal_zone(dev); \
|
||||
s32 value; \
|
||||
\
|
||||
if (!tz->tzp) \
|
||||
return -EIO; \
|
||||
\
|
||||
if (kstrtos32(buf, 10, &value)) \
|
||||
return -EINVAL; \
|
||||
\
|
||||
tz->tzp->name = value; \
|
||||
\
|
||||
return count; \
|
||||
} \
|
||||
static DEVICE_ATTR(name, S_IWUSR | S_IRUGO, name##_show, name##_store)
|
||||
|
||||
create_s32_tzp_attr(k_po);
|
||||
create_s32_tzp_attr(k_pu);
|
||||
create_s32_tzp_attr(k_i);
|
||||
create_s32_tzp_attr(k_d);
|
||||
create_s32_tzp_attr(integral_cutoff);
|
||||
#undef create_s32_tzp_attr
|
||||
|
||||
static struct device_attribute *dev_tzp_attrs[] = {
|
||||
&dev_attr_sustainable_power,
|
||||
&dev_attr_k_po,
|
||||
&dev_attr_k_pu,
|
||||
&dev_attr_k_i,
|
||||
&dev_attr_k_d,
|
||||
&dev_attr_integral_cutoff,
|
||||
};
|
||||
|
||||
static int create_tzp_attrs(struct device *dev)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(dev_tzp_attrs); i++) {
|
||||
int ret;
|
||||
struct device_attribute *dev_attr = dev_tzp_attrs[i];
|
||||
|
||||
ret = device_create_file(dev, dev_attr);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* power_actor_get_max_power() - get the maximum power that a cdev can consume
|
||||
* @cdev: pointer to &thermal_cooling_device
|
||||
|
|
@ -1712,6 +1808,11 @@ struct thermal_zone_device *thermal_zone_device_register(const char *type,
|
|||
if (result)
|
||||
goto unregister;
|
||||
|
||||
/* Add thermal zone params */
|
||||
result = create_tzp_attrs(&tz->device);
|
||||
if (result)
|
||||
goto unregister;
|
||||
|
||||
/* Update 'this' zone's governor information */
|
||||
mutex_lock(&thermal_governor_lock);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue