Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux
Pull thermal updates from Zhang Rui: - use int instead of unsigned long to represent temperature to avoid bogus overheat detection when negative temperature reported. From Sascha Hauer. - export available thermal governors information to user space via sysfs. From Wei Ni. - introduce new thermal driver for Wildcat Point platform controller hub, which uses PCH thermal sensor and associated critical and hot trip points. From Tushar Dave. - add suuport for Intel Skylake and Denlow platforms in powerclamp driver. - some small cleanups in thermal core. * 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux: thermal: Add Intel PCH thermal driver thermal: Add comment explaining test for critical temperature thermal: Use IS_ENABLED instead of #ifdef thermal: remove unnecessary call to thermal_zone_device_set_polling thermal: trivial: fix typo in comment thermal: consistently use int for temperatures thermal: add available policies sysfs attribute thermal/powerclamp: add cpu id for denlow platform thermal/powerclamp: add cpu id for Skylake u/y thermal/powerclamp: add cpu id for skylake h/s
This commit is contained in:
commit
9ebd051a7d
|
@ -180,6 +180,7 @@ Thermal zone device sys I/F, created once it's registered:
|
|||
|---temp: Current temperature
|
||||
|---mode: Working mode of the thermal zone
|
||||
|---policy: Thermal governor used for this zone
|
||||
|---available_policies: Available thermal governors for this zone
|
||||
|---trip_point_[0-*]_temp: Trip point temperature
|
||||
|---trip_point_[0-*]_type: Trip point type
|
||||
|---trip_point_[0-*]_hyst: Hysteresis value for this trip point
|
||||
|
@ -256,6 +257,10 @@ policy
|
|||
One of the various thermal governors used for a particular zone.
|
||||
RW, Required
|
||||
|
||||
available_policies
|
||||
Available thermal governors which can be used for a particular zone.
|
||||
RO, Required
|
||||
|
||||
trip_point_[0-*]_temp
|
||||
The temperature above which trip point will be fired.
|
||||
Unit: millidegree Celsius
|
||||
|
@ -417,6 +422,7 @@ method, the sys I/F structure will be built like this:
|
|||
|---temp: 37000
|
||||
|---mode: enabled
|
||||
|---policy: step_wise
|
||||
|---available_policies: step_wise fair_share
|
||||
|---trip_point_0_temp: 100000
|
||||
|---trip_point_0_type: critical
|
||||
|---trip_point_1_temp: 80000
|
||||
|
|
|
@ -525,8 +525,7 @@ static void acpi_thermal_check(void *data)
|
|||
|
||||
/* sys I/F for generic thermal sysfs support */
|
||||
|
||||
static int thermal_get_temp(struct thermal_zone_device *thermal,
|
||||
unsigned long *temp)
|
||||
static int thermal_get_temp(struct thermal_zone_device *thermal, int *temp)
|
||||
{
|
||||
struct acpi_thermal *tz = thermal->devdata;
|
||||
int result;
|
||||
|
@ -633,7 +632,7 @@ static int thermal_get_trip_type(struct thermal_zone_device *thermal,
|
|||
}
|
||||
|
||||
static int thermal_get_trip_temp(struct thermal_zone_device *thermal,
|
||||
int trip, unsigned long *temp)
|
||||
int trip, int *temp)
|
||||
{
|
||||
struct acpi_thermal *tz = thermal->devdata;
|
||||
int i;
|
||||
|
@ -686,7 +685,8 @@ static int thermal_get_trip_temp(struct thermal_zone_device *thermal,
|
|||
}
|
||||
|
||||
static int thermal_get_crit_temp(struct thermal_zone_device *thermal,
|
||||
unsigned long *temperature) {
|
||||
int *temperature)
|
||||
{
|
||||
struct acpi_thermal *tz = thermal->devdata;
|
||||
|
||||
if (tz->trips.critical.flags.valid) {
|
||||
|
@ -709,8 +709,8 @@ static int thermal_get_trend(struct thermal_zone_device *thermal,
|
|||
return -EINVAL;
|
||||
|
||||
if (type == THERMAL_TRIP_ACTIVE) {
|
||||
unsigned long trip_temp;
|
||||
unsigned long temp = DECI_KELVIN_TO_MILLICELSIUS_WITH_OFFSET(
|
||||
int trip_temp;
|
||||
int temp = DECI_KELVIN_TO_MILLICELSIUS_WITH_OFFSET(
|
||||
tz->temperature, tz->kelvin_offset);
|
||||
if (thermal_get_trip_temp(thermal, trip, &trip_temp))
|
||||
return -EINVAL;
|
||||
|
|
|
@ -104,7 +104,7 @@ static inline long lm75_reg_to_mc(s16 temp, u8 resolution)
|
|||
|
||||
/* sysfs attributes for hwmon */
|
||||
|
||||
static int lm75_read_temp(void *dev, long *temp)
|
||||
static int lm75_read_temp(void *dev, int *temp)
|
||||
{
|
||||
struct lm75_data *data = lm75_update_device(dev);
|
||||
|
||||
|
|
|
@ -477,7 +477,7 @@ static int ntc_thermistor_get_ohm(struct ntc_data *data)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int ntc_read_temp(void *dev, long *temp)
|
||||
static int ntc_read_temp(void *dev, int *temp)
|
||||
{
|
||||
struct ntc_data *data = dev_get_drvdata(dev);
|
||||
int ohm;
|
||||
|
|
|
@ -98,7 +98,7 @@ static struct tmp102 *tmp102_update_device(struct device *dev)
|
|||
return tmp102;
|
||||
}
|
||||
|
||||
static int tmp102_read_temp(void *dev, long *temp)
|
||||
static int tmp102_read_temp(void *dev, int *temp)
|
||||
{
|
||||
struct tmp102 *tmp102 = tmp102_update_device(dev);
|
||||
|
||||
|
|
|
@ -191,7 +191,7 @@ static void sun4i_ts_close(struct input_dev *dev)
|
|||
writel(TEMP_IRQ_EN(1), ts->base + TP_INT_FIFOC);
|
||||
}
|
||||
|
||||
static int sun4i_get_temp(const struct sun4i_ts_data *ts, long *temp)
|
||||
static int sun4i_get_temp(const struct sun4i_ts_data *ts, int *temp)
|
||||
{
|
||||
/* No temp_data until the first irq */
|
||||
if (ts->temp_data == -1)
|
||||
|
@ -202,7 +202,7 @@ static int sun4i_get_temp(const struct sun4i_ts_data *ts, long *temp)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int sun4i_get_tz_temp(void *data, long *temp)
|
||||
static int sun4i_get_tz_temp(void *data, int *temp)
|
||||
{
|
||||
return sun4i_get_temp(data, temp);
|
||||
}
|
||||
|
@ -215,14 +215,14 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
|
|||
char *buf)
|
||||
{
|
||||
struct sun4i_ts_data *ts = dev_get_drvdata(dev);
|
||||
long temp;
|
||||
int temp;
|
||||
int error;
|
||||
|
||||
error = sun4i_get_temp(ts, &temp);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
return sprintf(buf, "%ld\n", temp);
|
||||
return sprintf(buf, "%d\n", temp);
|
||||
}
|
||||
|
||||
static ssize_t show_temp_label(struct device *dev,
|
||||
|
|
|
@ -346,8 +346,7 @@ static void acerhdf_check_param(struct thermal_zone_device *thermal)
|
|||
* as late as the polling interval is since we can't do that in the respective
|
||||
* accessors of the module parameters.
|
||||
*/
|
||||
static int acerhdf_get_ec_temp(struct thermal_zone_device *thermal,
|
||||
unsigned long *t)
|
||||
static int acerhdf_get_ec_temp(struct thermal_zone_device *thermal, int *t)
|
||||
{
|
||||
int temp, err = 0;
|
||||
|
||||
|
@ -453,7 +452,7 @@ static int acerhdf_get_trip_type(struct thermal_zone_device *thermal, int trip,
|
|||
}
|
||||
|
||||
static int acerhdf_get_trip_hyst(struct thermal_zone_device *thermal, int trip,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
if (trip != 0)
|
||||
return -EINVAL;
|
||||
|
@ -464,7 +463,7 @@ static int acerhdf_get_trip_hyst(struct thermal_zone_device *thermal, int trip,
|
|||
}
|
||||
|
||||
static int acerhdf_get_trip_temp(struct thermal_zone_device *thermal, int trip,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
if (trip == 0)
|
||||
*temp = fanon;
|
||||
|
@ -477,7 +476,7 @@ static int acerhdf_get_trip_temp(struct thermal_zone_device *thermal, int trip,
|
|||
}
|
||||
|
||||
static int acerhdf_get_crit_temp(struct thermal_zone_device *thermal,
|
||||
unsigned long *temperature)
|
||||
int *temperature)
|
||||
{
|
||||
*temperature = ACERHDF_TEMP_CRIT;
|
||||
return 0;
|
||||
|
|
|
@ -132,7 +132,7 @@ static int is_valid_adc(uint16_t adc_val, uint16_t min, uint16_t max)
|
|||
* to achieve very close approximate temp value with less than
|
||||
* 0.5C error
|
||||
*/
|
||||
static int adc_to_temp(int direct, uint16_t adc_val, unsigned long *tp)
|
||||
static int adc_to_temp(int direct, uint16_t adc_val, int *tp)
|
||||
{
|
||||
int temp;
|
||||
|
||||
|
@ -174,14 +174,13 @@ static int adc_to_temp(int direct, uint16_t adc_val, unsigned long *tp)
|
|||
*
|
||||
* Can sleep
|
||||
*/
|
||||
static int mid_read_temp(struct thermal_zone_device *tzd, unsigned long *temp)
|
||||
static int mid_read_temp(struct thermal_zone_device *tzd, int *temp)
|
||||
{
|
||||
struct thermal_device_info *td_info = tzd->devdata;
|
||||
uint16_t adc_val, addr;
|
||||
uint8_t data = 0;
|
||||
int ret;
|
||||
unsigned long curr_temp;
|
||||
|
||||
int curr_temp;
|
||||
|
||||
addr = td_info->chnl_addr;
|
||||
|
||||
|
@ -453,7 +452,7 @@ static SIMPLE_DEV_PM_OPS(mid_thermal_pm,
|
|||
*
|
||||
* Can sleep
|
||||
*/
|
||||
static int read_curr_temp(struct thermal_zone_device *tzd, unsigned long *temp)
|
||||
static int read_curr_temp(struct thermal_zone_device *tzd, int *temp)
|
||||
{
|
||||
WARN_ON(tzd == NULL);
|
||||
return mid_read_temp(tzd, temp);
|
||||
|
|
|
@ -619,7 +619,7 @@ static int cm_get_battery_temperature(struct charger_manager *cm,
|
|||
|
||||
#ifdef CONFIG_THERMAL
|
||||
if (cm->tzd_batt) {
|
||||
ret = thermal_zone_get_temp(cm->tzd_batt, (unsigned long *)temp);
|
||||
ret = thermal_zone_get_temp(cm->tzd_batt, temp);
|
||||
if (!ret)
|
||||
/* Calibrate temperature unit */
|
||||
*temp /= 100;
|
||||
|
|
|
@ -557,7 +557,7 @@ EXPORT_SYMBOL_GPL(power_supply_unreg_notifier);
|
|||
|
||||
#ifdef CONFIG_THERMAL
|
||||
static int power_supply_read_temp(struct thermal_zone_device *tzd,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
struct power_supply *psy;
|
||||
union power_supply_propval val;
|
||||
|
|
|
@ -340,6 +340,14 @@ config ACPI_THERMAL_REL
|
|||
tristate
|
||||
depends on ACPI
|
||||
|
||||
config INTEL_PCH_THERMAL
|
||||
tristate "Intel PCH Thermal Reporting Driver"
|
||||
depends on X86 && PCI
|
||||
help
|
||||
Enable this to support thermal reporting on certain intel PCHs.
|
||||
Thermal reporting device will provide temperature reading,
|
||||
programmable trip points and other information.
|
||||
|
||||
menu "Texas Instruments thermal drivers"
|
||||
source "drivers/thermal/ti-soc-thermal/Kconfig"
|
||||
endmenu
|
||||
|
|
|
@ -41,6 +41,7 @@ obj-$(CONFIG_INTEL_SOC_DTS_THERMAL) += intel_soc_dts_thermal.o
|
|||
obj-$(CONFIG_INTEL_QUARK_DTS_THERMAL) += intel_quark_dts_thermal.o
|
||||
obj-$(CONFIG_TI_SOC_THERMAL) += ti-soc-thermal/
|
||||
obj-$(CONFIG_INT340X_THERMAL) += int340x_thermal/
|
||||
obj-$(CONFIG_INTEL_PCH_THERMAL) += intel_pch_thermal.o
|
||||
obj-$(CONFIG_ST_THERMAL) += st/
|
||||
obj-$(CONFIG_TEGRA_SOCTHERM) += tegra_soctherm.o
|
||||
obj-$(CONFIG_HISI_THERMAL) += hisi_thermal.o
|
||||
|
|
|
@ -155,7 +155,7 @@ static bool armada_is_valid(struct armada_thermal_priv *priv)
|
|||
}
|
||||
|
||||
static int armada_get_temp(struct thermal_zone_device *thermal,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
struct armada_thermal_priv *priv = thermal->devdata;
|
||||
unsigned long reg;
|
||||
|
|
|
@ -107,8 +107,7 @@ static int db8500_cdev_unbind(struct thermal_zone_device *thermal,
|
|||
}
|
||||
|
||||
/* Callback to get current temperature */
|
||||
static int db8500_sys_get_temp(struct thermal_zone_device *thermal,
|
||||
unsigned long *temp)
|
||||
static int db8500_sys_get_temp(struct thermal_zone_device *thermal, int *temp)
|
||||
{
|
||||
struct db8500_thermal_zone *pzone = thermal->devdata;
|
||||
|
||||
|
@ -180,7 +179,7 @@ static int db8500_sys_get_trip_type(struct thermal_zone_device *thermal,
|
|||
|
||||
/* Callback to get trip point temperature */
|
||||
static int db8500_sys_get_trip_temp(struct thermal_zone_device *thermal,
|
||||
int trip, unsigned long *temp)
|
||||
int trip, int *temp)
|
||||
{
|
||||
struct db8500_thermal_zone *pzone = thermal->devdata;
|
||||
struct db8500_thsens_platform_data *ptrips = pzone->trip_tab;
|
||||
|
@ -195,7 +194,7 @@ static int db8500_sys_get_trip_temp(struct thermal_zone_device *thermal,
|
|||
|
||||
/* Callback to get critical trip point temperature */
|
||||
static int db8500_sys_get_crit_temp(struct thermal_zone_device *thermal,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
struct db8500_thermal_zone *pzone = thermal->devdata;
|
||||
struct db8500_thsens_platform_data *ptrips = pzone->trip_tab;
|
||||
|
|
|
@ -93,7 +93,7 @@ static int dove_init_sensor(const struct dove_thermal_priv *priv)
|
|||
}
|
||||
|
||||
static int dove_get_temp(struct thermal_zone_device *thermal,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
unsigned long reg;
|
||||
struct dove_thermal_priv *priv = thermal->devdata;
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
static int get_trip_level(struct thermal_zone_device *tz)
|
||||
{
|
||||
int count = 0;
|
||||
unsigned long trip_temp;
|
||||
int trip_temp;
|
||||
enum thermal_trip_type trip_type;
|
||||
|
||||
if (tz->trips == 0 || !tz->ops->get_trip_temp)
|
||||
|
|
|
@ -25,14 +25,13 @@
|
|||
|
||||
static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip)
|
||||
{
|
||||
long trip_temp;
|
||||
unsigned long trip_hyst;
|
||||
int trip_temp, trip_hyst;
|
||||
struct thermal_instance *instance;
|
||||
|
||||
tz->ops->get_trip_temp(tz, trip, &trip_temp);
|
||||
tz->ops->get_trip_hyst(tz, trip, &trip_hyst);
|
||||
|
||||
dev_dbg(&tz->device, "Trip%d[temp=%ld]:temp=%d:hyst=%ld\n",
|
||||
dev_dbg(&tz->device, "Trip%d[temp=%d]:temp=%d:hyst=%d\n",
|
||||
trip, trip_temp, tz->temperature,
|
||||
trip_hyst);
|
||||
|
||||
|
|
|
@ -155,7 +155,7 @@ static void hisi_thermal_disable_sensor(struct hisi_thermal_data *data)
|
|||
mutex_unlock(&data->thermal_lock);
|
||||
}
|
||||
|
||||
static int hisi_thermal_get_temp(void *_sensor, long *temp)
|
||||
static int hisi_thermal_get_temp(void *_sensor, int *temp)
|
||||
{
|
||||
struct hisi_thermal_sensor *sensor = _sensor;
|
||||
struct hisi_thermal_data *data = sensor->thermal;
|
||||
|
@ -178,7 +178,7 @@ static int hisi_thermal_get_temp(void *_sensor, long *temp)
|
|||
data->irq_bind_sensor = sensor_id;
|
||||
mutex_unlock(&data->thermal_lock);
|
||||
|
||||
dev_dbg(&data->pdev->dev, "id=%d, irq=%d, temp=%ld, thres=%d\n",
|
||||
dev_dbg(&data->pdev->dev, "id=%d, irq=%d, temp=%d, thres=%d\n",
|
||||
sensor->id, data->irq_enabled, *temp, sensor->thres_temp);
|
||||
/*
|
||||
* Bind irq to sensor for two cases:
|
||||
|
|
|
@ -98,10 +98,10 @@ struct imx_thermal_data {
|
|||
enum thermal_device_mode mode;
|
||||
struct regmap *tempmon;
|
||||
u32 c1, c2; /* See formula in imx_get_sensor_data() */
|
||||
unsigned long temp_passive;
|
||||
unsigned long temp_critical;
|
||||
unsigned long alarm_temp;
|
||||
unsigned long last_temp;
|
||||
int temp_passive;
|
||||
int temp_critical;
|
||||
int alarm_temp;
|
||||
int last_temp;
|
||||
bool irq_enabled;
|
||||
int irq;
|
||||
struct clk *thermal_clk;
|
||||
|
@ -109,7 +109,7 @@ struct imx_thermal_data {
|
|||
};
|
||||
|
||||
static void imx_set_panic_temp(struct imx_thermal_data *data,
|
||||
signed long panic_temp)
|
||||
int panic_temp)
|
||||
{
|
||||
struct regmap *map = data->tempmon;
|
||||
int critical_value;
|
||||
|
@ -121,7 +121,7 @@ static void imx_set_panic_temp(struct imx_thermal_data *data,
|
|||
}
|
||||
|
||||
static void imx_set_alarm_temp(struct imx_thermal_data *data,
|
||||
signed long alarm_temp)
|
||||
int alarm_temp)
|
||||
{
|
||||
struct regmap *map = data->tempmon;
|
||||
int alarm_value;
|
||||
|
@ -133,7 +133,7 @@ static void imx_set_alarm_temp(struct imx_thermal_data *data,
|
|||
TEMPSENSE0_ALARM_VALUE_SHIFT);
|
||||
}
|
||||
|
||||
static int imx_get_temp(struct thermal_zone_device *tz, unsigned long *temp)
|
||||
static int imx_get_temp(struct thermal_zone_device *tz, int *temp)
|
||||
{
|
||||
struct imx_thermal_data *data = tz->devdata;
|
||||
struct regmap *map = data->tempmon;
|
||||
|
@ -189,13 +189,13 @@ static int imx_get_temp(struct thermal_zone_device *tz, unsigned long *temp)
|
|||
if (data->alarm_temp == data->temp_critical &&
|
||||
*temp < data->temp_passive) {
|
||||
imx_set_alarm_temp(data, data->temp_passive);
|
||||
dev_dbg(&tz->device, "thermal alarm off: T < %lu\n",
|
||||
dev_dbg(&tz->device, "thermal alarm off: T < %d\n",
|
||||
data->alarm_temp / 1000);
|
||||
}
|
||||
}
|
||||
|
||||
if (*temp != data->last_temp) {
|
||||
dev_dbg(&tz->device, "millicelsius: %ld\n", *temp);
|
||||
dev_dbg(&tz->device, "millicelsius: %d\n", *temp);
|
||||
data->last_temp = *temp;
|
||||
}
|
||||
|
||||
|
@ -262,8 +262,7 @@ static int imx_get_trip_type(struct thermal_zone_device *tz, int trip,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int imx_get_crit_temp(struct thermal_zone_device *tz,
|
||||
unsigned long *temp)
|
||||
static int imx_get_crit_temp(struct thermal_zone_device *tz, int *temp)
|
||||
{
|
||||
struct imx_thermal_data *data = tz->devdata;
|
||||
|
||||
|
@ -272,7 +271,7 @@ static int imx_get_crit_temp(struct thermal_zone_device *tz,
|
|||
}
|
||||
|
||||
static int imx_get_trip_temp(struct thermal_zone_device *tz, int trip,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
struct imx_thermal_data *data = tz->devdata;
|
||||
|
||||
|
@ -282,7 +281,7 @@ static int imx_get_trip_temp(struct thermal_zone_device *tz, int trip,
|
|||
}
|
||||
|
||||
static int imx_set_trip_temp(struct thermal_zone_device *tz, int trip,
|
||||
unsigned long temp)
|
||||
int temp)
|
||||
{
|
||||
struct imx_thermal_data *data = tz->devdata;
|
||||
|
||||
|
@ -434,7 +433,7 @@ static irqreturn_t imx_thermal_alarm_irq_thread(int irq, void *dev)
|
|||
{
|
||||
struct imx_thermal_data *data = dev;
|
||||
|
||||
dev_dbg(&data->tz->device, "THERMAL ALARM: T > %lu\n",
|
||||
dev_dbg(&data->tz->device, "THERMAL ALARM: T > %d\n",
|
||||
data->alarm_temp / 1000);
|
||||
|
||||
thermal_zone_device_update(data->tz);
|
||||
|
|
|
@ -186,7 +186,7 @@ static int int3400_thermal_run_osc(acpi_handle handle,
|
|||
}
|
||||
|
||||
static int int3400_thermal_get_temp(struct thermal_zone_device *thermal,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
*temp = 20 * 1000; /* faked temp sensor with 20C */
|
||||
return 0;
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#include "int340x_thermal_zone.h"
|
||||
|
||||
static int int340x_thermal_get_zone_temp(struct thermal_zone_device *zone,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
struct int34x_thermal_zone *d = zone->devdata;
|
||||
unsigned long long tmp;
|
||||
|
@ -49,7 +49,7 @@ static int int340x_thermal_get_zone_temp(struct thermal_zone_device *zone,
|
|||
}
|
||||
|
||||
static int int340x_thermal_get_trip_temp(struct thermal_zone_device *zone,
|
||||
int trip, unsigned long *temp)
|
||||
int trip, int *temp)
|
||||
{
|
||||
struct int34x_thermal_zone *d = zone->devdata;
|
||||
int i;
|
||||
|
@ -114,7 +114,7 @@ static int int340x_thermal_get_trip_type(struct thermal_zone_device *zone,
|
|||
}
|
||||
|
||||
static int int340x_thermal_set_trip_temp(struct thermal_zone_device *zone,
|
||||
int trip, unsigned long temp)
|
||||
int trip, int temp)
|
||||
{
|
||||
struct int34x_thermal_zone *d = zone->devdata;
|
||||
acpi_status status;
|
||||
|
@ -136,7 +136,7 @@ static int int340x_thermal_set_trip_temp(struct thermal_zone_device *zone,
|
|||
|
||||
|
||||
static int int340x_thermal_get_trip_hyst(struct thermal_zone_device *zone,
|
||||
int trip, unsigned long *temp)
|
||||
int trip, int *temp)
|
||||
{
|
||||
struct int34x_thermal_zone *d = zone->devdata;
|
||||
acpi_status status;
|
||||
|
@ -163,7 +163,7 @@ static struct thermal_zone_device_ops int340x_thermal_zone_ops = {
|
|||
};
|
||||
|
||||
static int int340x_thermal_get_trip_config(acpi_handle handle, char *name,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
unsigned long long r;
|
||||
acpi_status status;
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#define INT340X_THERMAL_MAX_ACT_TRIP_COUNT 10
|
||||
|
||||
struct active_trip {
|
||||
unsigned long temp;
|
||||
int temp;
|
||||
int id;
|
||||
bool valid;
|
||||
};
|
||||
|
@ -31,11 +31,11 @@ struct int34x_thermal_zone {
|
|||
struct active_trip act_trips[INT340X_THERMAL_MAX_ACT_TRIP_COUNT];
|
||||
unsigned long *aux_trips;
|
||||
int aux_trip_nr;
|
||||
unsigned long psv_temp;
|
||||
int psv_temp;
|
||||
int psv_trip_id;
|
||||
unsigned long crt_temp;
|
||||
int crt_temp;
|
||||
int crt_trip_id;
|
||||
unsigned long hot_temp;
|
||||
int hot_temp;
|
||||
int hot_trip_id;
|
||||
struct thermal_zone_device *zone;
|
||||
struct thermal_zone_device_ops *override_ops;
|
||||
|
|
|
@ -145,7 +145,7 @@ static int get_tjmax(void)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int read_temp_msr(unsigned long *temp)
|
||||
static int read_temp_msr(int *temp)
|
||||
{
|
||||
int cpu;
|
||||
u32 eax, edx;
|
||||
|
@ -177,7 +177,7 @@ err_ret:
|
|||
}
|
||||
|
||||
static int proc_thermal_get_zone_temp(struct thermal_zone_device *zone,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
|
|
@ -0,0 +1,286 @@
|
|||
/* intel_pch_thermal.c - Intel PCH Thermal driver
|
||||
*
|
||||
* Copyright (c) 2015, Intel Corporation.
|
||||
*
|
||||
* Authors:
|
||||
* Tushar Dave <tushar.n.dave@intel.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms and conditions of the GNU General Public License,
|
||||
* version 2, as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/thermal.h>
|
||||
|
||||
/* Intel PCH thermal Device IDs */
|
||||
#define PCH_THERMAL_DID_WPT 0x9CA4 /* Wildcat Point */
|
||||
|
||||
/* Wildcat Point-LP PCH Thermal registers */
|
||||
#define WPT_TEMP 0x0000 /* Temperature */
|
||||
#define WPT_TSC 0x04 /* Thermal Sensor Control */
|
||||
#define WPT_TSS 0x06 /* Thermal Sensor Status */
|
||||
#define WPT_TSEL 0x08 /* Thermal Sensor Enable and Lock */
|
||||
#define WPT_TSREL 0x0A /* Thermal Sensor Report Enable and Lock */
|
||||
#define WPT_TSMIC 0x0C /* Thermal Sensor SMI Control */
|
||||
#define WPT_CTT 0x0010 /* Catastrophic Trip Point */
|
||||
#define WPT_TAHV 0x0014 /* Thermal Alert High Value */
|
||||
#define WPT_TALV 0x0018 /* Thermal Alert Low Value */
|
||||
#define WPT_TL 0x00000040 /* Throttle Value */
|
||||
#define WPT_PHL 0x0060 /* PCH Hot Level */
|
||||
#define WPT_PHLC 0x62 /* PHL Control */
|
||||
#define WPT_TAS 0x80 /* Thermal Alert Status */
|
||||
#define WPT_TSPIEN 0x82 /* PCI Interrupt Event Enables */
|
||||
#define WPT_TSGPEN 0x84 /* General Purpose Event Enables */
|
||||
|
||||
/* Wildcat Point-LP PCH Thermal Register bit definitions */
|
||||
#define WPT_TEMP_TSR 0x00ff /* Temp TS Reading */
|
||||
#define WPT_TSC_CPDE 0x01 /* Catastrophic Power-Down Enable */
|
||||
#define WPT_TSS_TSDSS 0x10 /* Thermal Sensor Dynamic Shutdown Status */
|
||||
#define WPT_TSS_GPES 0x08 /* GPE status */
|
||||
#define WPT_TSEL_ETS 0x01 /* Enable TS */
|
||||
#define WPT_TSEL_PLDB 0x80 /* TSEL Policy Lock-Down Bit */
|
||||
#define WPT_TL_TOL 0x000001FF /* T0 Level */
|
||||
#define WPT_TL_T1L 0x1ff00000 /* T1 Level */
|
||||
#define WPT_TL_TTEN 0x20000000 /* TT Enable */
|
||||
|
||||
static char driver_name[] = "Intel PCH thermal driver";
|
||||
|
||||
struct pch_thermal_device {
|
||||
void __iomem *hw_base;
|
||||
const struct pch_dev_ops *ops;
|
||||
struct pci_dev *pdev;
|
||||
struct thermal_zone_device *tzd;
|
||||
int crt_trip_id;
|
||||
unsigned long crt_temp;
|
||||
int hot_trip_id;
|
||||
unsigned long hot_temp;
|
||||
};
|
||||
|
||||
static int pch_wpt_init(struct pch_thermal_device *ptd, int *nr_trips)
|
||||
{
|
||||
u8 tsel;
|
||||
u16 trip_temp;
|
||||
|
||||
*nr_trips = 0;
|
||||
|
||||
/* Check if BIOS has already enabled thermal sensor */
|
||||
if (WPT_TSS_TSDSS & readb(ptd->hw_base + WPT_TSS))
|
||||
goto read_trips;
|
||||
|
||||
tsel = readb(ptd->hw_base + WPT_TSEL);
|
||||
/*
|
||||
* When TSEL's Policy Lock-Down bit is 1, TSEL become RO.
|
||||
* If so, thermal sensor cannot enable. Bail out.
|
||||
*/
|
||||
if (tsel & WPT_TSEL_PLDB) {
|
||||
dev_err(&ptd->pdev->dev, "Sensor can't be enabled\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
writeb(tsel|WPT_TSEL_ETS, ptd->hw_base + WPT_TSEL);
|
||||
if (!(WPT_TSS_TSDSS & readb(ptd->hw_base + WPT_TSS))) {
|
||||
dev_err(&ptd->pdev->dev, "Sensor can't be enabled\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
read_trips:
|
||||
ptd->crt_trip_id = -1;
|
||||
trip_temp = readw(ptd->hw_base + WPT_CTT);
|
||||
trip_temp &= 0x1FF;
|
||||
if (trip_temp) {
|
||||
/* Resolution of 1/2 degree C and an offset of -50C */
|
||||
ptd->crt_temp = trip_temp * 1000 / 2 - 50000;
|
||||
ptd->crt_trip_id = 0;
|
||||
++(*nr_trips);
|
||||
}
|
||||
|
||||
ptd->hot_trip_id = -1;
|
||||
trip_temp = readw(ptd->hw_base + WPT_PHL);
|
||||
trip_temp &= 0x1FF;
|
||||
if (trip_temp) {
|
||||
/* Resolution of 1/2 degree C and an offset of -50C */
|
||||
ptd->hot_temp = trip_temp * 1000 / 2 - 50000;
|
||||
ptd->hot_trip_id = *nr_trips;
|
||||
++(*nr_trips);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pch_wpt_get_temp(struct pch_thermal_device *ptd,
|
||||
unsigned long *temp)
|
||||
{
|
||||
u8 wpt_temp;
|
||||
|
||||
wpt_temp = WPT_TEMP_TSR & readl(ptd->hw_base + WPT_TEMP);
|
||||
|
||||
/* Resolution of 1/2 degree C and an offset of -50C */
|
||||
*temp = (wpt_temp * 1000 / 2 - 50000);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct pch_dev_ops {
|
||||
int (*hw_init)(struct pch_thermal_device *ptd, int *nr_trips);
|
||||
int (*get_temp)(struct pch_thermal_device *ptd, unsigned long *temp);
|
||||
};
|
||||
|
||||
|
||||
/* dev ops for Wildcat Point */
|
||||
static struct pch_dev_ops pch_dev_ops_wpt = {
|
||||
.hw_init = pch_wpt_init,
|
||||
.get_temp = pch_wpt_get_temp,
|
||||
};
|
||||
|
||||
static int pch_thermal_get_temp(struct thermal_zone_device *tzd,
|
||||
unsigned long *temp)
|
||||
{
|
||||
struct pch_thermal_device *ptd = tzd->devdata;
|
||||
|
||||
return ptd->ops->get_temp(ptd, temp);
|
||||
}
|
||||
|
||||
static int pch_get_trip_type(struct thermal_zone_device *tzd, int trip,
|
||||
enum thermal_trip_type *type)
|
||||
{
|
||||
struct pch_thermal_device *ptd = tzd->devdata;
|
||||
|
||||
if (ptd->crt_trip_id == trip)
|
||||
*type = THERMAL_TRIP_CRITICAL;
|
||||
else if (ptd->hot_trip_id == trip)
|
||||
*type = THERMAL_TRIP_HOT;
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pch_get_trip_temp(struct thermal_zone_device *tzd, int trip,
|
||||
unsigned long *temp)
|
||||
{
|
||||
struct pch_thermal_device *ptd = tzd->devdata;
|
||||
|
||||
if (ptd->crt_trip_id == trip)
|
||||
*temp = ptd->crt_temp;
|
||||
else if (ptd->hot_trip_id == trip)
|
||||
*temp = ptd->hot_temp;
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct thermal_zone_device_ops tzd_ops = {
|
||||
.get_temp = pch_thermal_get_temp,
|
||||
.get_trip_type = pch_get_trip_type,
|
||||
.get_trip_temp = pch_get_trip_temp,
|
||||
};
|
||||
|
||||
|
||||
static int intel_pch_thermal_probe(struct pci_dev *pdev,
|
||||
const struct pci_device_id *id)
|
||||
{
|
||||
struct pch_thermal_device *ptd;
|
||||
int err;
|
||||
int nr_trips;
|
||||
char *dev_name;
|
||||
|
||||
ptd = devm_kzalloc(&pdev->dev, sizeof(*ptd), GFP_KERNEL);
|
||||
if (!ptd)
|
||||
return -ENOMEM;
|
||||
|
||||
switch (pdev->device) {
|
||||
case PCH_THERMAL_DID_WPT:
|
||||
ptd->ops = &pch_dev_ops_wpt;
|
||||
dev_name = "pch_wildcat_point";
|
||||
break;
|
||||
default:
|
||||
dev_err(&pdev->dev, "unknown pch thermal device\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
pci_set_drvdata(pdev, ptd);
|
||||
ptd->pdev = pdev;
|
||||
|
||||
err = pci_enable_device(pdev);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev, "failed to enable pci device\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
err = pci_request_regions(pdev, driver_name);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev, "failed to request pci region\n");
|
||||
goto error_disable;
|
||||
}
|
||||
|
||||
ptd->hw_base = pci_ioremap_bar(pdev, 0);
|
||||
if (!ptd->hw_base) {
|
||||
err = -ENOMEM;
|
||||
dev_err(&pdev->dev, "failed to map mem base\n");
|
||||
goto error_release;
|
||||
}
|
||||
|
||||
err = ptd->ops->hw_init(ptd, &nr_trips);
|
||||
if (err)
|
||||
goto error_cleanup;
|
||||
|
||||
ptd->tzd = thermal_zone_device_register(dev_name, nr_trips, 0, ptd,
|
||||
&tzd_ops, NULL, 0, 0);
|
||||
if (IS_ERR(ptd->tzd)) {
|
||||
dev_err(&pdev->dev, "Failed to register thermal zone %s\n",
|
||||
dev_name);
|
||||
err = PTR_ERR(ptd->tzd);
|
||||
goto error_cleanup;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
error_cleanup:
|
||||
iounmap(ptd->hw_base);
|
||||
error_release:
|
||||
pci_release_regions(pdev);
|
||||
error_disable:
|
||||
pci_disable_device(pdev);
|
||||
dev_err(&pdev->dev, "pci device failed to probe\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
static void intel_pch_thermal_remove(struct pci_dev *pdev)
|
||||
{
|
||||
struct pch_thermal_device *ptd = pci_get_drvdata(pdev);
|
||||
|
||||
thermal_zone_device_unregister(ptd->tzd);
|
||||
iounmap(ptd->hw_base);
|
||||
pci_set_drvdata(pdev, NULL);
|
||||
pci_release_region(pdev, 0);
|
||||
pci_disable_device(pdev);
|
||||
}
|
||||
|
||||
static struct pci_device_id intel_pch_thermal_id[] = {
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCH_THERMAL_DID_WPT) },
|
||||
{ 0, },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, intel_pch_thermal_id);
|
||||
|
||||
static struct pci_driver intel_pch_thermal_driver = {
|
||||
.name = "intel_pch_thermal",
|
||||
.id_table = intel_pch_thermal_id,
|
||||
.probe = intel_pch_thermal_probe,
|
||||
.remove = intel_pch_thermal_remove,
|
||||
};
|
||||
|
||||
module_pci_driver(intel_pch_thermal_driver);
|
||||
|
||||
MODULE_LICENSE("GPL v2");
|
||||
MODULE_DESCRIPTION("Intel PCH Thermal driver");
|
|
@ -693,11 +693,14 @@ static const struct x86_cpu_id intel_powerclamp_ids[] __initconst = {
|
|||
{ X86_VENDOR_INTEL, 6, 0x3f},
|
||||
{ X86_VENDOR_INTEL, 6, 0x45},
|
||||
{ X86_VENDOR_INTEL, 6, 0x46},
|
||||
{ X86_VENDOR_INTEL, 6, 0x47},
|
||||
{ X86_VENDOR_INTEL, 6, 0x4c},
|
||||
{ X86_VENDOR_INTEL, 6, 0x4d},
|
||||
{ X86_VENDOR_INTEL, 6, 0x4e},
|
||||
{ X86_VENDOR_INTEL, 6, 0x4f},
|
||||
{ X86_VENDOR_INTEL, 6, 0x56},
|
||||
{ X86_VENDOR_INTEL, 6, 0x57},
|
||||
{ X86_VENDOR_INTEL, 6, 0x5e},
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(x86cpu, intel_powerclamp_ids);
|
||||
|
|
|
@ -186,7 +186,7 @@ static int soc_dts_disable(struct thermal_zone_device *tzd)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int _get_trip_temp(int trip, unsigned long *temp)
|
||||
static int _get_trip_temp(int trip, int *temp)
|
||||
{
|
||||
int status;
|
||||
u32 out;
|
||||
|
@ -212,19 +212,18 @@ static int _get_trip_temp(int trip, unsigned long *temp)
|
|||
}
|
||||
|
||||
static inline int sys_get_trip_temp(struct thermal_zone_device *tzd,
|
||||
int trip, unsigned long *temp)
|
||||
int trip, int *temp)
|
||||
{
|
||||
return _get_trip_temp(trip, temp);
|
||||
}
|
||||
|
||||
static inline int sys_get_crit_temp(struct thermal_zone_device *tzd,
|
||||
unsigned long *temp)
|
||||
static inline int sys_get_crit_temp(struct thermal_zone_device *tzd, int *temp)
|
||||
{
|
||||
return _get_trip_temp(QRK_DTS_ID_TP_CRITICAL, temp);
|
||||
}
|
||||
|
||||
static int update_trip_temp(struct soc_sensor_entry *aux_entry,
|
||||
int trip, unsigned long temp)
|
||||
int trip, int temp)
|
||||
{
|
||||
u32 out;
|
||||
u32 temp_out;
|
||||
|
@ -272,7 +271,7 @@ failed:
|
|||
}
|
||||
|
||||
static inline int sys_set_trip_temp(struct thermal_zone_device *tzd, int trip,
|
||||
unsigned long temp)
|
||||
int temp)
|
||||
{
|
||||
return update_trip_temp(tzd->devdata, trip, temp);
|
||||
}
|
||||
|
@ -289,7 +288,7 @@ static int sys_get_trip_type(struct thermal_zone_device *thermal,
|
|||
}
|
||||
|
||||
static int sys_get_curr_temp(struct thermal_zone_device *tzd,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
u32 out;
|
||||
int ret;
|
||||
|
|
|
@ -80,7 +80,7 @@ err_ret:
|
|||
}
|
||||
|
||||
static int sys_get_trip_temp(struct thermal_zone_device *tzd, int trip,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
int status;
|
||||
u32 out;
|
||||
|
@ -106,7 +106,7 @@ static int sys_get_trip_temp(struct thermal_zone_device *tzd, int trip,
|
|||
}
|
||||
|
||||
static int update_trip_temp(struct intel_soc_dts_sensor_entry *dts,
|
||||
int thres_index, unsigned long temp,
|
||||
int thres_index, int temp,
|
||||
enum thermal_trip_type trip_type)
|
||||
{
|
||||
int status;
|
||||
|
@ -196,7 +196,7 @@ err_restore_ptps:
|
|||
}
|
||||
|
||||
static int sys_set_trip_temp(struct thermal_zone_device *tzd, int trip,
|
||||
unsigned long temp)
|
||||
int temp)
|
||||
{
|
||||
struct intel_soc_dts_sensor_entry *dts = tzd->devdata;
|
||||
struct intel_soc_dts_sensors *sensors = dts->sensors;
|
||||
|
@ -226,7 +226,7 @@ static int sys_get_trip_type(struct thermal_zone_device *tzd,
|
|||
}
|
||||
|
||||
static int sys_get_curr_temp(struct thermal_zone_device *tzd,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
int status;
|
||||
u32 out;
|
||||
|
|
|
@ -33,7 +33,7 @@ struct kirkwood_thermal_priv {
|
|||
};
|
||||
|
||||
static int kirkwood_get_temp(struct thermal_zone_device *thermal,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
unsigned long reg;
|
||||
struct kirkwood_thermal_priv *priv = thermal->devdata;
|
||||
|
|
|
@ -91,7 +91,7 @@ struct __thermal_zone {
|
|||
/*** DT thermal zone device callbacks ***/
|
||||
|
||||
static int of_thermal_get_temp(struct thermal_zone_device *tz,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
struct __thermal_zone *data = tz->devdata;
|
||||
|
||||
|
@ -177,7 +177,7 @@ EXPORT_SYMBOL_GPL(of_thermal_get_trip_points);
|
|||
* Return: zero on success, error code otherwise
|
||||
*/
|
||||
static int of_thermal_set_emul_temp(struct thermal_zone_device *tz,
|
||||
unsigned long temp)
|
||||
int temp)
|
||||
{
|
||||
struct __thermal_zone *data = tz->devdata;
|
||||
|
||||
|
@ -311,7 +311,7 @@ static int of_thermal_get_trip_type(struct thermal_zone_device *tz, int trip,
|
|||
}
|
||||
|
||||
static int of_thermal_get_trip_temp(struct thermal_zone_device *tz, int trip,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
struct __thermal_zone *data = tz->devdata;
|
||||
|
||||
|
@ -324,7 +324,7 @@ static int of_thermal_get_trip_temp(struct thermal_zone_device *tz, int trip,
|
|||
}
|
||||
|
||||
static int of_thermal_set_trip_temp(struct thermal_zone_device *tz, int trip,
|
||||
unsigned long temp)
|
||||
int temp)
|
||||
{
|
||||
struct __thermal_zone *data = tz->devdata;
|
||||
|
||||
|
@ -338,7 +338,7 @@ static int of_thermal_set_trip_temp(struct thermal_zone_device *tz, int trip,
|
|||
}
|
||||
|
||||
static int of_thermal_get_trip_hyst(struct thermal_zone_device *tz, int trip,
|
||||
unsigned long *hyst)
|
||||
int *hyst)
|
||||
{
|
||||
struct __thermal_zone *data = tz->devdata;
|
||||
|
||||
|
@ -351,7 +351,7 @@ static int of_thermal_get_trip_hyst(struct thermal_zone_device *tz, int trip,
|
|||
}
|
||||
|
||||
static int of_thermal_set_trip_hyst(struct thermal_zone_device *tz, int trip,
|
||||
unsigned long hyst)
|
||||
int hyst)
|
||||
{
|
||||
struct __thermal_zone *data = tz->devdata;
|
||||
|
||||
|
@ -365,7 +365,7 @@ static int of_thermal_set_trip_hyst(struct thermal_zone_device *tz, int trip,
|
|||
}
|
||||
|
||||
static int of_thermal_get_crit_temp(struct thermal_zone_device *tz,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
struct __thermal_zone *data = tz->devdata;
|
||||
int i;
|
||||
|
|
|
@ -92,8 +92,8 @@ struct power_allocator_params {
|
|||
* Return: The power budget for the next period.
|
||||
*/
|
||||
static u32 pid_controller(struct thermal_zone_device *tz,
|
||||
unsigned long current_temp,
|
||||
unsigned long control_temp,
|
||||
int current_temp,
|
||||
int control_temp,
|
||||
u32 max_allocatable_power)
|
||||
{
|
||||
s64 p, i, d, power_range;
|
||||
|
@ -102,7 +102,7 @@ static u32 pid_controller(struct thermal_zone_device *tz,
|
|||
|
||||
max_power_frac = int_to_frac(max_allocatable_power);
|
||||
|
||||
err = ((s32)control_temp - (s32)current_temp);
|
||||
err = control_temp - current_temp;
|
||||
err = int_to_frac(err);
|
||||
|
||||
/* Calculate the proportional term */
|
||||
|
@ -223,8 +223,8 @@ static void divvy_up_power(u32 *req_power, u32 *max_power, int num_actors,
|
|||
}
|
||||
|
||||
static int allocate_power(struct thermal_zone_device *tz,
|
||||
unsigned long current_temp,
|
||||
unsigned long control_temp)
|
||||
int current_temp,
|
||||
int control_temp)
|
||||
{
|
||||
struct thermal_instance *instance;
|
||||
struct power_allocator_params *params = tz->governor_data;
|
||||
|
@ -331,7 +331,7 @@ static int allocate_power(struct thermal_zone_device *tz,
|
|||
granted_power, total_granted_power,
|
||||
num_actors, power_range,
|
||||
max_allocatable_power, current_temp,
|
||||
(s32)control_temp - (s32)current_temp);
|
||||
control_temp - current_temp);
|
||||
|
||||
kfree(req_power);
|
||||
unlock:
|
||||
|
@ -416,7 +416,7 @@ static int power_allocator_bind(struct thermal_zone_device *tz)
|
|||
{
|
||||
int ret;
|
||||
struct power_allocator_params *params;
|
||||
unsigned long switch_on_temp, control_temp;
|
||||
int switch_on_temp, control_temp;
|
||||
u32 temperature_threshold;
|
||||
|
||||
if (!tz->tzp || !tz->tzp->sustainable_power) {
|
||||
|
@ -481,7 +481,7 @@ static void power_allocator_unbind(struct thermal_zone_device *tz)
|
|||
static int power_allocator_throttle(struct thermal_zone_device *tz, int trip)
|
||||
{
|
||||
int ret;
|
||||
unsigned long switch_on_temp, control_temp, current_temp;
|
||||
int switch_on_temp, control_temp, current_temp;
|
||||
struct power_allocator_params *params = tz->governor_data;
|
||||
|
||||
/*
|
||||
|
|
|
@ -117,7 +117,7 @@ static int qpnp_tm_update_temp_no_adc(struct qpnp_tm_chip *chip)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int qpnp_tm_get_temp(void *data, long *temp)
|
||||
static int qpnp_tm_get_temp(void *data, int *temp)
|
||||
{
|
||||
struct qpnp_tm_chip *chip = data;
|
||||
int ret, mili_celsius;
|
||||
|
|
|
@ -200,8 +200,7 @@ err_out_unlock:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int rcar_thermal_get_temp(struct thermal_zone_device *zone,
|
||||
unsigned long *temp)
|
||||
static int rcar_thermal_get_temp(struct thermal_zone_device *zone, int *temp)
|
||||
{
|
||||
struct rcar_thermal_priv *priv = rcar_zone_to_priv(zone);
|
||||
|
||||
|
@ -235,7 +234,7 @@ static int rcar_thermal_get_trip_type(struct thermal_zone_device *zone,
|
|||
}
|
||||
|
||||
static int rcar_thermal_get_trip_temp(struct thermal_zone_device *zone,
|
||||
int trip, unsigned long *temp)
|
||||
int trip, int *temp)
|
||||
{
|
||||
struct rcar_thermal_priv *priv = rcar_zone_to_priv(zone);
|
||||
struct device *dev = rcar_priv_to_dev(priv);
|
||||
|
@ -299,7 +298,7 @@ static void _rcar_thermal_irq_ctrl(struct rcar_thermal_priv *priv, int enable)
|
|||
static void rcar_thermal_work(struct work_struct *work)
|
||||
{
|
||||
struct rcar_thermal_priv *priv;
|
||||
unsigned long cctemp, nctemp;
|
||||
int cctemp, nctemp;
|
||||
|
||||
priv = container_of(work, struct rcar_thermal_priv, work.work);
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ struct rockchip_tsadc_chip {
|
|||
void (*control)(void __iomem *reg, bool on);
|
||||
|
||||
/* Per-sensor methods */
|
||||
int (*get_temp)(int chn, void __iomem *reg, long *temp);
|
||||
int (*get_temp)(int chn, void __iomem *reg, int *temp);
|
||||
void (*set_tshut_temp)(int chn, void __iomem *reg, long temp);
|
||||
void (*set_tshut_mode)(int chn, void __iomem *reg, enum tshut_mode m);
|
||||
};
|
||||
|
@ -191,7 +191,7 @@ static u32 rk_tsadcv2_temp_to_code(long temp)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static long rk_tsadcv2_code_to_temp(u32 code)
|
||||
static int rk_tsadcv2_code_to_temp(u32 code)
|
||||
{
|
||||
unsigned int low = 0;
|
||||
unsigned int high = ARRAY_SIZE(v2_code_table) - 1;
|
||||
|
@ -277,7 +277,7 @@ static void rk_tsadcv2_control(void __iomem *regs, bool enable)
|
|||
writel_relaxed(val, regs + TSADCV2_AUTO_CON);
|
||||
}
|
||||
|
||||
static int rk_tsadcv2_get_temp(int chn, void __iomem *regs, long *temp)
|
||||
static int rk_tsadcv2_get_temp(int chn, void __iomem *regs, int *temp)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
|
@ -366,7 +366,7 @@ static irqreturn_t rockchip_thermal_alarm_irq_thread(int irq, void *dev)
|
|||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static int rockchip_thermal_get_temp(void *_sensor, long *out_temp)
|
||||
static int rockchip_thermal_get_temp(void *_sensor, int *out_temp)
|
||||
{
|
||||
struct rockchip_thermal_sensor *sensor = _sensor;
|
||||
struct rockchip_thermal_data *thermal = sensor->thermal;
|
||||
|
@ -374,7 +374,7 @@ static int rockchip_thermal_get_temp(void *_sensor, long *out_temp)
|
|||
int retval;
|
||||
|
||||
retval = tsadc->get_temp(sensor->id, thermal->regs, out_temp);
|
||||
dev_dbg(&thermal->pdev->dev, "sensor %d - temp: %ld, retval: %d\n",
|
||||
dev_dbg(&thermal->pdev->dev, "sensor %d - temp: %d, retval: %d\n",
|
||||
sensor->id, *out_temp, retval);
|
||||
|
||||
return retval;
|
||||
|
|
|
@ -207,8 +207,7 @@ struct exynos_tmu_data {
|
|||
int (*tmu_initialize)(struct platform_device *pdev);
|
||||
void (*tmu_control)(struct platform_device *pdev, bool on);
|
||||
int (*tmu_read)(struct exynos_tmu_data *data);
|
||||
void (*tmu_set_emulation)(struct exynos_tmu_data *data,
|
||||
unsigned long temp);
|
||||
void (*tmu_set_emulation)(struct exynos_tmu_data *data, int temp);
|
||||
void (*tmu_clear_irqs)(struct exynos_tmu_data *data);
|
||||
};
|
||||
|
||||
|
@ -216,7 +215,7 @@ static void exynos_report_trigger(struct exynos_tmu_data *p)
|
|||
{
|
||||
char data[10], *envp[] = { data, NULL };
|
||||
struct thermal_zone_device *tz = p->tzd;
|
||||
unsigned long temp;
|
||||
int temp;
|
||||
unsigned int i;
|
||||
|
||||
if (!tz) {
|
||||
|
@ -517,7 +516,7 @@ static int exynos5433_tmu_initialize(struct platform_device *pdev)
|
|||
struct thermal_zone_device *tz = data->tzd;
|
||||
unsigned int status, trim_info;
|
||||
unsigned int rising_threshold = 0, falling_threshold = 0;
|
||||
unsigned long temp, temp_hist;
|
||||
int temp, temp_hist;
|
||||
int ret = 0, threshold_code, i, sensor_id, cal_type;
|
||||
|
||||
status = readb(data->base + EXYNOS_TMU_REG_STATUS);
|
||||
|
@ -610,7 +609,7 @@ static int exynos5440_tmu_initialize(struct platform_device *pdev)
|
|||
struct exynos_tmu_data *data = platform_get_drvdata(pdev);
|
||||
unsigned int trim_info = 0, con, rising_threshold;
|
||||
int ret = 0, threshold_code;
|
||||
unsigned long crit_temp = 0;
|
||||
int crit_temp = 0;
|
||||
|
||||
/*
|
||||
* For exynos5440 soc triminfo value is swapped between TMU0 and
|
||||
|
@ -663,7 +662,7 @@ static int exynos7_tmu_initialize(struct platform_device *pdev)
|
|||
unsigned int status, trim_info;
|
||||
unsigned int rising_threshold = 0, falling_threshold = 0;
|
||||
int ret = 0, threshold_code, i;
|
||||
unsigned long temp, temp_hist;
|
||||
int temp, temp_hist;
|
||||
unsigned int reg_off, bit_off;
|
||||
|
||||
status = readb(data->base + EXYNOS_TMU_REG_STATUS);
|
||||
|
@ -876,7 +875,7 @@ static void exynos7_tmu_control(struct platform_device *pdev, bool on)
|
|||
writel(con, data->base + EXYNOS_TMU_REG_CONTROL);
|
||||
}
|
||||
|
||||
static int exynos_get_temp(void *p, long *temp)
|
||||
static int exynos_get_temp(void *p, int *temp)
|
||||
{
|
||||
struct exynos_tmu_data *data = p;
|
||||
|
||||
|
@ -896,7 +895,7 @@ static int exynos_get_temp(void *p, long *temp)
|
|||
|
||||
#ifdef CONFIG_THERMAL_EMULATION
|
||||
static u32 get_emul_con_reg(struct exynos_tmu_data *data, unsigned int val,
|
||||
unsigned long temp)
|
||||
int temp)
|
||||
{
|
||||
if (temp) {
|
||||
temp /= MCELSIUS;
|
||||
|
@ -926,7 +925,7 @@ static u32 get_emul_con_reg(struct exynos_tmu_data *data, unsigned int val,
|
|||
}
|
||||
|
||||
static void exynos4412_tmu_set_emulation(struct exynos_tmu_data *data,
|
||||
unsigned long temp)
|
||||
int temp)
|
||||
{
|
||||
unsigned int val;
|
||||
u32 emul_con;
|
||||
|
@ -946,7 +945,7 @@ static void exynos4412_tmu_set_emulation(struct exynos_tmu_data *data,
|
|||
}
|
||||
|
||||
static void exynos5440_tmu_set_emulation(struct exynos_tmu_data *data,
|
||||
unsigned long temp)
|
||||
int temp)
|
||||
{
|
||||
unsigned int val;
|
||||
|
||||
|
@ -955,7 +954,7 @@ static void exynos5440_tmu_set_emulation(struct exynos_tmu_data *data,
|
|||
writel(val, data->base + EXYNOS5440_TMU_S0_7_DEBUG);
|
||||
}
|
||||
|
||||
static int exynos_tmu_set_emulation(void *drv_data, unsigned long temp)
|
||||
static int exynos_tmu_set_emulation(void *drv_data, int temp)
|
||||
{
|
||||
struct exynos_tmu_data *data = drv_data;
|
||||
int ret = -EINVAL;
|
||||
|
@ -978,7 +977,7 @@ out:
|
|||
#else
|
||||
#define exynos4412_tmu_set_emulation NULL
|
||||
#define exynos5440_tmu_set_emulation NULL
|
||||
static int exynos_tmu_set_emulation(void *drv_data, unsigned long temp)
|
||||
static int exynos_tmu_set_emulation(void *drv_data, int temp)
|
||||
{ return -EINVAL; }
|
||||
#endif /* CONFIG_THERMAL_EMULATION */
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ struct spear_thermal_dev {
|
|||
};
|
||||
|
||||
static inline int thermal_get_temp(struct thermal_zone_device *thermal,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
struct spear_thermal_dev *stdev = thermal->devdata;
|
||||
|
||||
|
|
|
@ -111,8 +111,7 @@ static int st_thermal_calibration(struct st_thermal_sensor *sensor)
|
|||
}
|
||||
|
||||
/* Callback to get temperature from HW*/
|
||||
static int st_thermal_get_temp(struct thermal_zone_device *th,
|
||||
unsigned long *temperature)
|
||||
static int st_thermal_get_temp(struct thermal_zone_device *th, int *temperature)
|
||||
{
|
||||
struct st_thermal_sensor *sensor = th->devdata;
|
||||
struct device *dev = sensor->dev;
|
||||
|
@ -159,7 +158,7 @@ static int st_thermal_get_trip_type(struct thermal_zone_device *th,
|
|||
}
|
||||
|
||||
static int st_thermal_get_trip_temp(struct thermal_zone_device *th,
|
||||
int trip, unsigned long *temp)
|
||||
int trip, int *temp)
|
||||
{
|
||||
struct st_thermal_sensor *sensor = th->devdata;
|
||||
struct device *dev = sensor->dev;
|
||||
|
|
|
@ -113,7 +113,7 @@ static void update_passive_instance(struct thermal_zone_device *tz,
|
|||
|
||||
static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip)
|
||||
{
|
||||
long trip_temp;
|
||||
int trip_temp;
|
||||
enum thermal_trip_type trip_type;
|
||||
enum thermal_trend trend;
|
||||
struct thermal_instance *instance;
|
||||
|
@ -135,7 +135,7 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip)
|
|||
trace_thermal_zone_trip(tz, trip, trip_type);
|
||||
}
|
||||
|
||||
dev_dbg(&tz->device, "Trip%d[type=%d,temp=%ld]:trend=%d,throttle=%d\n",
|
||||
dev_dbg(&tz->device, "Trip%d[type=%d,temp=%d]:trend=%d,throttle=%d\n",
|
||||
trip, trip_type, trip_temp, trend, throttle);
|
||||
|
||||
mutex_lock(&tz->lock);
|
||||
|
|
|
@ -293,7 +293,7 @@ static int enable_tsensor(struct tegra_soctherm *tegra,
|
|||
* H denotes an addition of 0.5 Celsius and N denotes negation
|
||||
* of the final value.
|
||||
*/
|
||||
static long translate_temp(u16 val)
|
||||
static int translate_temp(u16 val)
|
||||
{
|
||||
long t;
|
||||
|
||||
|
@ -306,7 +306,7 @@ static long translate_temp(u16 val)
|
|||
return t;
|
||||
}
|
||||
|
||||
static int tegra_thermctl_get_temp(void *data, long *out_temp)
|
||||
static int tegra_thermctl_get_temp(void *data, int *out_temp)
|
||||
{
|
||||
struct tegra_thermctl_zone *zone = data;
|
||||
u32 val;
|
||||
|
|
|
@ -426,7 +426,7 @@ static void handle_non_critical_trips(struct thermal_zone_device *tz,
|
|||
static void handle_critical_trips(struct thermal_zone_device *tz,
|
||||
int trip, enum thermal_trip_type trip_type)
|
||||
{
|
||||
long trip_temp;
|
||||
int trip_temp;
|
||||
|
||||
tz->ops->get_trip_temp(tz, trip, &trip_temp);
|
||||
|
||||
|
@ -465,7 +465,7 @@ static void handle_thermal_trip(struct thermal_zone_device *tz, int trip)
|
|||
}
|
||||
|
||||
/**
|
||||
* thermal_zone_get_temp() - returns its the temperature of thermal zone
|
||||
* thermal_zone_get_temp() - returns the temperature of a thermal zone
|
||||
* @tz: a valid pointer to a struct thermal_zone_device
|
||||
* @temp: a valid pointer to where to store the resulting temperature.
|
||||
*
|
||||
|
@ -474,14 +474,12 @@ static void handle_thermal_trip(struct thermal_zone_device *tz, int trip)
|
|||
*
|
||||
* Return: On success returns 0, an error code otherwise
|
||||
*/
|
||||
int thermal_zone_get_temp(struct thermal_zone_device *tz, unsigned long *temp)
|
||||
int thermal_zone_get_temp(struct thermal_zone_device *tz, int *temp)
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
#ifdef CONFIG_THERMAL_EMULATION
|
||||
int count;
|
||||
unsigned long crit_temp = -1UL;
|
||||
int crit_temp = INT_MAX;
|
||||
enum thermal_trip_type type;
|
||||
#endif
|
||||
|
||||
if (!tz || IS_ERR(tz) || !tz->ops->get_temp)
|
||||
goto exit;
|
||||
|
@ -489,25 +487,26 @@ int thermal_zone_get_temp(struct thermal_zone_device *tz, unsigned long *temp)
|
|||
mutex_lock(&tz->lock);
|
||||
|
||||
ret = tz->ops->get_temp(tz, temp);
|
||||
#ifdef CONFIG_THERMAL_EMULATION
|
||||
if (!tz->emul_temperature)
|
||||
goto skip_emul;
|
||||
|
||||
for (count = 0; count < tz->trips; count++) {
|
||||
ret = tz->ops->get_trip_type(tz, count, &type);
|
||||
if (!ret && type == THERMAL_TRIP_CRITICAL) {
|
||||
ret = tz->ops->get_trip_temp(tz, count, &crit_temp);
|
||||
break;
|
||||
if (IS_ENABLED(CONFIG_THERMAL_EMULATION) && tz->emul_temperature) {
|
||||
for (count = 0; count < tz->trips; count++) {
|
||||
ret = tz->ops->get_trip_type(tz, count, &type);
|
||||
if (!ret && type == THERMAL_TRIP_CRITICAL) {
|
||||
ret = tz->ops->get_trip_temp(tz, count,
|
||||
&crit_temp);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Only allow emulating a temperature when the real temperature
|
||||
* is below the critical temperature so that the emulation code
|
||||
* cannot hide critical conditions.
|
||||
*/
|
||||
if (!ret && *temp < crit_temp)
|
||||
*temp = tz->emul_temperature;
|
||||
}
|
||||
|
||||
if (ret)
|
||||
goto skip_emul;
|
||||
|
||||
if (*temp < crit_temp)
|
||||
*temp = tz->emul_temperature;
|
||||
skip_emul:
|
||||
#endif
|
||||
|
||||
mutex_unlock(&tz->lock);
|
||||
exit:
|
||||
return ret;
|
||||
|
@ -516,8 +515,7 @@ EXPORT_SYMBOL_GPL(thermal_zone_get_temp);
|
|||
|
||||
static void update_temperature(struct thermal_zone_device *tz)
|
||||
{
|
||||
long temp;
|
||||
int ret;
|
||||
int temp, ret;
|
||||
|
||||
ret = thermal_zone_get_temp(tz, &temp);
|
||||
if (ret) {
|
||||
|
@ -577,15 +575,14 @@ static ssize_t
|
|||
temp_show(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct thermal_zone_device *tz = to_thermal_zone(dev);
|
||||
long temperature;
|
||||
int ret;
|
||||
int temperature, ret;
|
||||
|
||||
ret = thermal_zone_get_temp(tz, &temperature);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return sprintf(buf, "%ld\n", temperature);
|
||||
return sprintf(buf, "%d\n", temperature);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
|
@ -689,7 +686,7 @@ trip_point_temp_show(struct device *dev, struct device_attribute *attr,
|
|||
{
|
||||
struct thermal_zone_device *tz = to_thermal_zone(dev);
|
||||
int trip, ret;
|
||||
long temperature;
|
||||
int temperature;
|
||||
|
||||
if (!tz->ops->get_trip_temp)
|
||||
return -EPERM;
|
||||
|
@ -702,7 +699,7 @@ trip_point_temp_show(struct device *dev, struct device_attribute *attr,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
return sprintf(buf, "%ld\n", temperature);
|
||||
return sprintf(buf, "%d\n", temperature);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
|
@ -711,7 +708,7 @@ trip_point_hyst_store(struct device *dev, struct device_attribute *attr,
|
|||
{
|
||||
struct thermal_zone_device *tz = to_thermal_zone(dev);
|
||||
int trip, ret;
|
||||
unsigned long temperature;
|
||||
int temperature;
|
||||
|
||||
if (!tz->ops->set_trip_hyst)
|
||||
return -EPERM;
|
||||
|
@ -719,7 +716,7 @@ trip_point_hyst_store(struct device *dev, struct device_attribute *attr,
|
|||
if (!sscanf(attr->attr.name, "trip_point_%d_hyst", &trip))
|
||||
return -EINVAL;
|
||||
|
||||
if (kstrtoul(buf, 10, &temperature))
|
||||
if (kstrtoint(buf, 10, &temperature))
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
|
@ -738,7 +735,7 @@ trip_point_hyst_show(struct device *dev, struct device_attribute *attr,
|
|||
{
|
||||
struct thermal_zone_device *tz = to_thermal_zone(dev);
|
||||
int trip, ret;
|
||||
unsigned long temperature;
|
||||
int temperature;
|
||||
|
||||
if (!tz->ops->get_trip_hyst)
|
||||
return -EPERM;
|
||||
|
@ -748,7 +745,7 @@ trip_point_hyst_show(struct device *dev, struct device_attribute *attr,
|
|||
|
||||
ret = tz->ops->get_trip_hyst(tz, trip, &temperature);
|
||||
|
||||
return ret ? ret : sprintf(buf, "%ld\n", temperature);
|
||||
return ret ? ret : sprintf(buf, "%d\n", temperature);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
|
@ -847,7 +844,27 @@ policy_show(struct device *dev, struct device_attribute *devattr, char *buf)
|
|||
return sprintf(buf, "%s\n", tz->governor->name);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_THERMAL_EMULATION
|
||||
static ssize_t
|
||||
available_policies_show(struct device *dev, struct device_attribute *devattr,
|
||||
char *buf)
|
||||
{
|
||||
struct thermal_governor *pos;
|
||||
ssize_t count = 0;
|
||||
ssize_t size = PAGE_SIZE;
|
||||
|
||||
mutex_lock(&thermal_governor_lock);
|
||||
|
||||
list_for_each_entry(pos, &thermal_governor_list, governor_list) {
|
||||
size = PAGE_SIZE - count;
|
||||
count += scnprintf(buf + count, size, "%s ", pos->name);
|
||||
}
|
||||
count += scnprintf(buf + count, size, "\n");
|
||||
|
||||
mutex_unlock(&thermal_governor_lock);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
emul_temp_store(struct device *dev, struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
|
@ -873,7 +890,6 @@ emul_temp_store(struct device *dev, struct device_attribute *attr,
|
|||
return ret ? ret : count;
|
||||
}
|
||||
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,
|
||||
|
@ -1032,6 +1048,7 @@ static DEVICE_ATTR(temp, 0444, temp_show, NULL);
|
|||
static DEVICE_ATTR(mode, 0644, mode_show, mode_store);
|
||||
static DEVICE_ATTR(passive, S_IRUGO | S_IWUSR, passive_show, passive_store);
|
||||
static DEVICE_ATTR(policy, S_IRUGO | S_IWUSR, policy_show, policy_store);
|
||||
static DEVICE_ATTR(available_policies, S_IRUGO, available_policies_show, NULL);
|
||||
|
||||
/* sys I/F for cooling device */
|
||||
#define to_cooling_device(_dev) \
|
||||
|
@ -1803,11 +1820,12 @@ struct thermal_zone_device *thermal_zone_device_register(const char *type,
|
|||
goto unregister;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_THERMAL_EMULATION
|
||||
result = device_create_file(&tz->device, &dev_attr_emul_temp);
|
||||
if (result)
|
||||
goto unregister;
|
||||
#endif
|
||||
if (IS_ENABLED(CONFIG_THERMAL_EMULATION)) {
|
||||
result = device_create_file(&tz->device, &dev_attr_emul_temp);
|
||||
if (result)
|
||||
goto unregister;
|
||||
}
|
||||
|
||||
/* Create policy attribute */
|
||||
result = device_create_file(&tz->device, &dev_attr_policy);
|
||||
if (result)
|
||||
|
@ -1818,6 +1836,11 @@ struct thermal_zone_device *thermal_zone_device_register(const char *type,
|
|||
if (result)
|
||||
goto unregister;
|
||||
|
||||
/* Create available_policies attribute */
|
||||
result = device_create_file(&tz->device, &dev_attr_available_policies);
|
||||
if (result)
|
||||
goto unregister;
|
||||
|
||||
/* Update 'this' zone's governor information */
|
||||
mutex_lock(&thermal_governor_lock);
|
||||
|
||||
|
@ -1849,9 +1872,6 @@ struct thermal_zone_device *thermal_zone_device_register(const char *type,
|
|||
|
||||
INIT_DELAYED_WORK(&(tz->poll_queue), thermal_zone_device_check);
|
||||
|
||||
if (!tz->ops->get_temp)
|
||||
thermal_zone_device_set_polling(tz, 0);
|
||||
|
||||
thermal_zone_device_update(tz);
|
||||
|
||||
return tz;
|
||||
|
@ -1918,6 +1938,7 @@ void thermal_zone_device_unregister(struct thermal_zone_device *tz)
|
|||
if (tz->ops->get_mode)
|
||||
device_remove_file(&tz->device, &dev_attr_mode);
|
||||
device_remove_file(&tz->device, &dev_attr_policy);
|
||||
device_remove_file(&tz->device, &dev_attr_available_policies);
|
||||
remove_trip_attrs(tz);
|
||||
thermal_set_governor(tz, NULL);
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@ static DEVICE_ATTR(name, 0444, name_show, NULL);
|
|||
static ssize_t
|
||||
temp_input_show(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
long temperature;
|
||||
int temperature;
|
||||
int ret;
|
||||
struct thermal_hwmon_attr *hwmon_attr
|
||||
= container_of(attr, struct thermal_hwmon_attr, attr);
|
||||
|
@ -83,7 +83,7 @@ temp_input_show(struct device *dev, struct device_attribute *attr, char *buf)
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
return sprintf(buf, "%ld\n", temperature);
|
||||
return sprintf(buf, "%d\n", temperature);
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
|
@ -95,14 +95,14 @@ temp_crit_show(struct device *dev, struct device_attribute *attr, char *buf)
|
|||
= container_of(hwmon_attr, struct thermal_hwmon_temp,
|
||||
temp_crit);
|
||||
struct thermal_zone_device *tz = temp->tz;
|
||||
long temperature;
|
||||
int temperature;
|
||||
int ret;
|
||||
|
||||
ret = tz->ops->get_trip_temp(tz, 0, &temperature);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return sprintf(buf, "%ld\n", temperature);
|
||||
return sprintf(buf, "%d\n", temperature);
|
||||
}
|
||||
|
||||
|
||||
|
@ -142,7 +142,7 @@ thermal_hwmon_lookup_temp(const struct thermal_hwmon_device *hwmon,
|
|||
|
||||
static bool thermal_zone_crit_temp_valid(struct thermal_zone_device *tz)
|
||||
{
|
||||
unsigned long temp;
|
||||
int temp;
|
||||
return tz->ops->get_crit_temp && !tz->ops->get_crit_temp(tz, &temp);
|
||||
}
|
||||
|
||||
|
|
|
@ -76,14 +76,14 @@ static inline int ti_thermal_hotspot_temperature(int t, int s, int c)
|
|||
|
||||
/* thermal zone ops */
|
||||
/* Get temperature callback function for thermal zone */
|
||||
static inline int __ti_thermal_get_temp(void *devdata, long *temp)
|
||||
static inline int __ti_thermal_get_temp(void *devdata, int *temp)
|
||||
{
|
||||
struct thermal_zone_device *pcb_tz = NULL;
|
||||
struct ti_thermal_data *data = devdata;
|
||||
struct ti_bandgap *bgp;
|
||||
const struct ti_temp_sensor *s;
|
||||
int ret, tmp, slope, constant;
|
||||
unsigned long pcb_temp;
|
||||
int pcb_temp;
|
||||
|
||||
if (!data)
|
||||
return 0;
|
||||
|
@ -119,7 +119,7 @@ static inline int __ti_thermal_get_temp(void *devdata, long *temp)
|
|||
}
|
||||
|
||||
static inline int ti_thermal_get_temp(struct thermal_zone_device *thermal,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
struct ti_thermal_data *data = thermal->devdata;
|
||||
|
||||
|
@ -229,7 +229,7 @@ static int ti_thermal_get_trip_type(struct thermal_zone_device *thermal,
|
|||
|
||||
/* Get trip temperature callback functions for thermal zone */
|
||||
static int ti_thermal_get_trip_temp(struct thermal_zone_device *thermal,
|
||||
int trip, unsigned long *temp)
|
||||
int trip, int *temp)
|
||||
{
|
||||
if (!ti_thermal_is_valid_trip(trip))
|
||||
return -EINVAL;
|
||||
|
@ -280,7 +280,7 @@ static int ti_thermal_get_trend(struct thermal_zone_device *thermal,
|
|||
|
||||
/* Get critical temperature callback functions for thermal zone */
|
||||
static int ti_thermal_get_crit_temp(struct thermal_zone_device *thermal,
|
||||
unsigned long *temp)
|
||||
int *temp)
|
||||
{
|
||||
/* shutdown zone */
|
||||
return ti_thermal_get_trip_temp(thermal, OMAP_TRIP_NUMBER - 1, temp);
|
||||
|
|
|
@ -164,7 +164,7 @@ err_ret:
|
|||
return err;
|
||||
}
|
||||
|
||||
static int sys_get_curr_temp(struct thermal_zone_device *tzd, unsigned long *temp)
|
||||
static int sys_get_curr_temp(struct thermal_zone_device *tzd, int *temp)
|
||||
{
|
||||
u32 eax, edx;
|
||||
struct phy_dev_entry *phy_dev_entry;
|
||||
|
@ -175,7 +175,7 @@ static int sys_get_curr_temp(struct thermal_zone_device *tzd, unsigned long *tem
|
|||
if (eax & 0x80000000) {
|
||||
*temp = phy_dev_entry->tj_max -
|
||||
((eax >> 16) & 0x7f) * 1000;
|
||||
pr_debug("sys_get_curr_temp %ld\n", *temp);
|
||||
pr_debug("sys_get_curr_temp %d\n", *temp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -183,7 +183,7 @@ static int sys_get_curr_temp(struct thermal_zone_device *tzd, unsigned long *tem
|
|||
}
|
||||
|
||||
static int sys_get_trip_temp(struct thermal_zone_device *tzd,
|
||||
int trip, unsigned long *temp)
|
||||
int trip, int *temp)
|
||||
{
|
||||
u32 eax, edx;
|
||||
struct phy_dev_entry *phy_dev_entry;
|
||||
|
@ -214,13 +214,13 @@ static int sys_get_trip_temp(struct thermal_zone_device *tzd,
|
|||
*temp = phy_dev_entry->tj_max - thres_reg_value * 1000;
|
||||
else
|
||||
*temp = 0;
|
||||
pr_debug("sys_get_trip_temp %ld\n", *temp);
|
||||
pr_debug("sys_get_trip_temp %d\n", *temp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sys_set_trip_temp(struct thermal_zone_device *tzd, int trip,
|
||||
unsigned long temp)
|
||||
int temp)
|
||||
{
|
||||
u32 l, h;
|
||||
struct phy_dev_entry *phy_dev_entry;
|
||||
|
|
|
@ -92,23 +92,19 @@ struct thermal_zone_device_ops {
|
|||
struct thermal_cooling_device *);
|
||||
int (*unbind) (struct thermal_zone_device *,
|
||||
struct thermal_cooling_device *);
|
||||
int (*get_temp) (struct thermal_zone_device *, unsigned long *);
|
||||
int (*get_temp) (struct thermal_zone_device *, int *);
|
||||
int (*get_mode) (struct thermal_zone_device *,
|
||||
enum thermal_device_mode *);
|
||||
int (*set_mode) (struct thermal_zone_device *,
|
||||
enum thermal_device_mode);
|
||||
int (*get_trip_type) (struct thermal_zone_device *, int,
|
||||
enum thermal_trip_type *);
|
||||
int (*get_trip_temp) (struct thermal_zone_device *, int,
|
||||
unsigned long *);
|
||||
int (*set_trip_temp) (struct thermal_zone_device *, int,
|
||||
unsigned long);
|
||||
int (*get_trip_hyst) (struct thermal_zone_device *, int,
|
||||
unsigned long *);
|
||||
int (*set_trip_hyst) (struct thermal_zone_device *, int,
|
||||
unsigned long);
|
||||
int (*get_crit_temp) (struct thermal_zone_device *, unsigned long *);
|
||||
int (*set_emul_temp) (struct thermal_zone_device *, unsigned long);
|
||||
int (*get_trip_temp) (struct thermal_zone_device *, int, int *);
|
||||
int (*set_trip_temp) (struct thermal_zone_device *, int, int);
|
||||
int (*get_trip_hyst) (struct thermal_zone_device *, int, int *);
|
||||
int (*set_trip_hyst) (struct thermal_zone_device *, int, int);
|
||||
int (*get_crit_temp) (struct thermal_zone_device *, int *);
|
||||
int (*set_emul_temp) (struct thermal_zone_device *, int);
|
||||
int (*get_trend) (struct thermal_zone_device *, int,
|
||||
enum thermal_trend *);
|
||||
int (*notify) (struct thermal_zone_device *, int,
|
||||
|
@ -332,9 +328,9 @@ struct thermal_genl_event {
|
|||
* temperature.
|
||||
*/
|
||||
struct thermal_zone_of_device_ops {
|
||||
int (*get_temp)(void *, long *);
|
||||
int (*get_temp)(void *, int *);
|
||||
int (*get_trend)(void *, long *);
|
||||
int (*set_emul_temp)(void *, unsigned long);
|
||||
int (*set_emul_temp)(void *, int);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -406,7 +402,7 @@ thermal_of_cooling_device_register(struct device_node *np, char *, void *,
|
|||
const struct thermal_cooling_device_ops *);
|
||||
void thermal_cooling_device_unregister(struct thermal_cooling_device *);
|
||||
struct thermal_zone_device *thermal_zone_get_zone_by_name(const char *name);
|
||||
int thermal_zone_get_temp(struct thermal_zone_device *tz, unsigned long *temp);
|
||||
int thermal_zone_get_temp(struct thermal_zone_device *tz, int *temp);
|
||||
|
||||
int get_tz_trend(struct thermal_zone_device *, int);
|
||||
struct thermal_instance *get_thermal_instance(struct thermal_zone_device *,
|
||||
|
@ -457,7 +453,7 @@ static inline struct thermal_zone_device *thermal_zone_get_zone_by_name(
|
|||
const char *name)
|
||||
{ return ERR_PTR(-ENODEV); }
|
||||
static inline int thermal_zone_get_temp(
|
||||
struct thermal_zone_device *tz, unsigned long *temp)
|
||||
struct thermal_zone_device *tz, int *temp)
|
||||
{ return -ENODEV; }
|
||||
static inline int get_tz_trend(struct thermal_zone_device *tz, int trip)
|
||||
{ return -ENODEV; }
|
||||
|
|
|
@ -11,7 +11,7 @@ TRACE_EVENT(thermal_power_allocator,
|
|||
u32 total_req_power, u32 *granted_power,
|
||||
u32 total_granted_power, size_t num_actors,
|
||||
u32 power_range, u32 max_allocatable_power,
|
||||
unsigned long current_temp, s32 delta_temp),
|
||||
int current_temp, s32 delta_temp),
|
||||
TP_ARGS(tz, req_power, total_req_power, granted_power,
|
||||
total_granted_power, num_actors, power_range,
|
||||
max_allocatable_power, current_temp, delta_temp),
|
||||
|
@ -24,7 +24,7 @@ TRACE_EVENT(thermal_power_allocator,
|
|||
__field(size_t, num_actors )
|
||||
__field(u32, power_range )
|
||||
__field(u32, max_allocatable_power )
|
||||
__field(unsigned long, current_temp )
|
||||
__field(int, current_temp )
|
||||
__field(s32, delta_temp )
|
||||
),
|
||||
TP_fast_assign(
|
||||
|
@ -42,7 +42,7 @@ TRACE_EVENT(thermal_power_allocator,
|
|||
__entry->delta_temp = delta_temp;
|
||||
),
|
||||
|
||||
TP_printk("thermal_zone_id=%d req_power={%s} total_req_power=%u granted_power={%s} total_granted_power=%u power_range=%u max_allocatable_power=%u current_temperature=%lu delta_temperature=%d",
|
||||
TP_printk("thermal_zone_id=%d req_power={%s} total_req_power=%u granted_power={%s} total_granted_power=%u power_range=%u max_allocatable_power=%u current_temperature=%d delta_temperature=%d",
|
||||
__entry->tz_id,
|
||||
__print_array(__get_dynamic_array(req_power),
|
||||
__entry->num_actors, 4),
|
||||
|
|
Loading…
Reference in New Issue