forked from luck/tmp_suning_uos_patched
thermal: int340x: Add keep alive response method
When firmware requests keep alive response, send an event to user space to confirm by using imok sysfs entry. Create a new sysf entry called "imok". User space can write an integer, which results in execution of IMOK ACPI method of INT3400 thermal zone device. This results in sending response to firmware request for keep alive. Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> Link: https://lore.kernel.org/r/20200915223650.406046-4-srinivas.pandruvada@linux.intel.com
This commit is contained in:
parent
8805231962
commit
94a3c35eb0
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
#define INT3400_THERMAL_TABLE_CHANGED 0x83
|
#define INT3400_THERMAL_TABLE_CHANGED 0x83
|
||||||
#define INT3400_ODVP_CHANGED 0x88
|
#define INT3400_ODVP_CHANGED 0x88
|
||||||
|
#define INT3400_KEEP_ALIVE 0xA0
|
||||||
|
|
||||||
enum int3400_thermal_uuid {
|
enum int3400_thermal_uuid {
|
||||||
INT3400_THERMAL_PASSIVE_1,
|
INT3400_THERMAL_PASSIVE_1,
|
||||||
|
@ -83,8 +84,33 @@ static struct bin_attribute *data_attributes[] = {
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static ssize_t imok_store(struct device *dev, struct device_attribute *attr,
|
||||||
|
const char *buf, size_t count)
|
||||||
|
{
|
||||||
|
struct int3400_thermal_priv *priv = dev_get_drvdata(dev);
|
||||||
|
acpi_status status;
|
||||||
|
int input, ret;
|
||||||
|
|
||||||
|
ret = kstrtouint(buf, 10, &input);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
status = acpi_execute_simple_method(priv->adev->handle, "IMOK", input);
|
||||||
|
if (ACPI_FAILURE(status))
|
||||||
|
return -EIO;
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static DEVICE_ATTR_WO(imok);
|
||||||
|
|
||||||
|
static struct attribute *imok_attr[] = {
|
||||||
|
&dev_attr_imok.attr,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
static const struct attribute_group data_attribute_group = {
|
static const struct attribute_group data_attribute_group = {
|
||||||
.bin_attrs = data_attributes,
|
.bin_attrs = data_attributes,
|
||||||
|
.attrs = imok_attr,
|
||||||
};
|
};
|
||||||
|
|
||||||
static ssize_t available_uuids_show(struct device *dev,
|
static ssize_t available_uuids_show(struct device *dev,
|
||||||
|
@ -358,6 +384,9 @@ static void int3400_notify(acpi_handle handle,
|
||||||
case INT3400_THERMAL_TABLE_CHANGED:
|
case INT3400_THERMAL_TABLE_CHANGED:
|
||||||
therm_event = THERMAL_TABLE_CHANGED;
|
therm_event = THERMAL_TABLE_CHANGED;
|
||||||
break;
|
break;
|
||||||
|
case INT3400_KEEP_ALIVE:
|
||||||
|
therm_event = THERMAL_EVENT_KEEP_ALIVE;
|
||||||
|
break;
|
||||||
case INT3400_ODVP_CHANGED:
|
case INT3400_ODVP_CHANGED:
|
||||||
evaluate_odvp(priv);
|
evaluate_odvp(priv);
|
||||||
therm_event = THERMAL_DEVICE_POWER_CAPABILITY_CHANGED;
|
therm_event = THERMAL_DEVICE_POWER_CAPABILITY_CHANGED;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user