Merge back new thermal control material for v6.6.

This commit is contained in:
Rafael J. Wysocki 2023-07-31 19:59:26 +02:00
commit 3f9ce02454

View File

@ -15,6 +15,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 #define INT3400_KEEP_ALIVE 0xA0
#define INT3400_FAKE_TEMP (20 * 1000) /* faked temp sensor with 20C */
enum int3400_thermal_uuid { enum int3400_thermal_uuid {
INT3400_THERMAL_ACTIVE = 0, INT3400_THERMAL_ACTIVE = 0,
@ -453,6 +454,7 @@ static void int3400_notify(acpi_handle handle,
void *data) void *data)
{ {
struct int3400_thermal_priv *priv = data; struct int3400_thermal_priv *priv = data;
struct device *dev;
char *thermal_prop[5]; char *thermal_prop[5];
int therm_event; int therm_event;
@ -475,12 +477,14 @@ static void int3400_notify(acpi_handle handle,
return; return;
} }
thermal_prop[0] = kasprintf(GFP_KERNEL, "NAME=%s", priv->thermal->type); dev = thermal_zone_device(priv->thermal);
thermal_prop[1] = kasprintf(GFP_KERNEL, "TEMP=%d", priv->thermal->temperature);
thermal_prop[0] = kasprintf(GFP_KERNEL, "NAME=%s", thermal_zone_device_type(priv->thermal));
thermal_prop[1] = kasprintf(GFP_KERNEL, "TEMP=%d", INT3400_FAKE_TEMP);
thermal_prop[2] = kasprintf(GFP_KERNEL, "TRIP="); thermal_prop[2] = kasprintf(GFP_KERNEL, "TRIP=");
thermal_prop[3] = kasprintf(GFP_KERNEL, "EVENT=%d", therm_event); thermal_prop[3] = kasprintf(GFP_KERNEL, "EVENT=%d", therm_event);
thermal_prop[4] = NULL; thermal_prop[4] = NULL;
kobject_uevent_env(&priv->thermal->device.kobj, KOBJ_CHANGE, thermal_prop); kobject_uevent_env(&dev->kobj, KOBJ_CHANGE, thermal_prop);
kfree(thermal_prop[0]); kfree(thermal_prop[0]);
kfree(thermal_prop[1]); kfree(thermal_prop[1]);
kfree(thermal_prop[2]); kfree(thermal_prop[2]);
@ -490,7 +494,7 @@ static void int3400_notify(acpi_handle handle,
static int int3400_thermal_get_temp(struct thermal_zone_device *thermal, static int int3400_thermal_get_temp(struct thermal_zone_device *thermal,
int *temp) int *temp)
{ {
*temp = 20 * 1000; /* faked temp sensor with 20C */ *temp = INT3400_FAKE_TEMP;
return 0; return 0;
} }
@ -499,32 +503,28 @@ static int int3400_thermal_change_mode(struct thermal_zone_device *thermal,
{ {
struct int3400_thermal_priv *priv = thermal_zone_device_priv(thermal); struct int3400_thermal_priv *priv = thermal_zone_device_priv(thermal);
int result = 0; int result = 0;
int enabled;
if (!priv) if (!priv)
return -EINVAL; return -EINVAL;
if (mode != thermal->mode) { enabled = mode == THERMAL_DEVICE_ENABLED;
int enabled;
enabled = mode == THERMAL_DEVICE_ENABLED; if (priv->os_uuid_mask) {
if (!enabled) {
if (priv->os_uuid_mask) { priv->os_uuid_mask = 0;
if (!enabled) { result = set_os_uuid_mask(priv, priv->os_uuid_mask);
priv->os_uuid_mask = 0;
result = set_os_uuid_mask(priv, priv->os_uuid_mask);
}
goto eval_odvp;
} }
goto eval_odvp;
if (priv->current_uuid_index < 0 ||
priv->current_uuid_index >= INT3400_THERMAL_MAXIMUM_UUID)
return -EINVAL;
result = int3400_thermal_run_osc(priv->adev->handle,
int3400_thermal_uuids[priv->current_uuid_index],
&enabled);
} }
if (priv->current_uuid_index < 0 ||
priv->current_uuid_index >= INT3400_THERMAL_MAXIMUM_UUID)
return -EINVAL;
result = int3400_thermal_run_osc(priv->adev->handle,
int3400_thermal_uuids[priv->current_uuid_index],
&enabled);
eval_odvp: eval_odvp:
evaluate_odvp(priv); evaluate_odvp(priv);