linux/drivers/thermal
Leo Yan 469ace07c2 thermal: hisilicon: fix IRQ imbalance enabling
When register sensors into thermal zone during initialization phase, it
reports error for IRQ imbalance enabling:

[    2.040713] WARNING: at kernel/irq/manage.c:513
[    2.040719] Modules linked in:
[    2.040721]
[    2.040729] CPU: 1 PID: 804 Comm: irq/33-hisi_the Not tainted 4.5.0-rc4+ #505
[    2.040732] Hardware name: HiKey Development Board (DT)
[    2.040736] task: ffffffc03ae82580 ti: ffffffc0379c8000 task.ti: ffffffc0379c8000
[    2.040745] PC is at __enable_irq+0x74/0x84
[    2.040749] LR is at __enable_irq+0x74/0x84

This warning is for IRQ imbalance enabling, which is caused by
enable_irq() twice. During sensor's initialization it tries to enable
IRQ, the driver will call thermal_zone_of_sensor_register() to bind
sensors and read sensor's temperature. But at this moment the flag
"data->irq_enabled" has been not initialized as correct state, so it
finally introduces the function enabled_irq() to be called twice. In
essentially this is caused by the flag "data->irq_enabled" is
inconsistent with real hardware IRQ enabling state.

So this patch is to fix this issue, firstly init "irq_enabled" flag
before binding sensors to thermal zone. Also change to use the function
irq_get_irqchip_state() to read back real interrupt line state.

Signed-off-by: Leo Yan <leo.yan@linaro.org>
Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
2016-05-17 07:28:30 -07:00
..
int340x_thermal Thermal: Enable Broxton SoC thermal reporting device 2015-12-29 16:17:53 +08:00
samsung thermal: exynos: Defer probe if vtmu is present but not registered 2016-03-08 14:22:25 -08:00
st Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux 2015-09-11 16:13:47 -07:00
tegra thermal: tegra: add PM support 2016-05-17 07:28:29 -07:00
ti-soc-thermal thermal: convert ti-thermal to use devm_thermal_zone_of_sensor_register 2016-05-17 07:28:27 -07:00
armada_thermal.c thermal: armada: Fix possible overflow in the Armada 380 thermal sensor formula 2015-10-30 11:33:23 -07:00
clock_cooling.c thermal: introduce clock cooling device 2014-11-20 10:43:16 -04:00
cpu_cooling.c thermal: cpu_cooling: fix out of bounds access in time_in_idle 2016-02-11 07:13:29 -08:00
db8500_cpufreq_cooling.c thermal: db8500_cpufreq_cooling: Fix module autoload for OF platform driver 2015-09-13 20:26:19 -07:00
db8500_thermal.c thermal: consistently use int for temperatures 2015-08-03 23:15:50 +08:00
devfreq_cooling.c devfreq_cooling: return on allocation failure 2015-11-04 11:06:29 -08:00
dove_thermal.c thermal: consistently use int for temperatures 2015-08-03 23:15:50 +08:00
fair_share.c thermal: consistently use int for temperatures 2015-08-03 23:15:50 +08:00
gov_bang_bang.c thermal: consistently use int for temperatures 2015-08-03 23:15:50 +08:00
hisi_thermal.c thermal: hisilicon: fix IRQ imbalance enabling 2016-05-17 07:28:30 -07:00
imx_thermal.c imx: thermal: use CPU temperature grade info for thresholds 2015-11-23 16:38:40 -08:00
intel_pch_thermal.c thermal: intel_pch_thermal: Enable Skylake PCH thermal 2016-03-15 07:51:17 +08:00
intel_powerclamp.c Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux 2015-09-11 16:13:47 -07:00
intel_quark_dts_thermal.c x86/platform/iosf_mbi: Remove duplicate definitions 2015-12-09 01:18:34 +01:00
intel_soc_dts_iosf.c x86/platform/iosf_mbi: Remove duplicate definitions 2015-12-09 01:18:34 +01:00
intel_soc_dts_iosf.h Thermal: Intel SoC: DTS thermal IOSF core 2015-05-01 11:20:42 +08:00
intel_soc_dts_thermal.c Thermal: Intel SoC: DTS thermal use common APIs 2015-05-01 11:20:42 +08:00
Kconfig thermal: tegra: move tegra thermal files into tegra directory 2016-05-17 07:28:27 -07:00
kirkwood_thermal.c thermal: consistently use int for temperatures 2015-08-03 23:15:50 +08:00
Makefile thermal: tegra: move tegra thermal files into tegra directory 2016-05-17 07:28:27 -07:00
mtk_thermal.c thermal: convert mtk_thermal to use devm_thermal_zone_of_sensor_register 2016-05-17 07:28:26 -07:00
of-thermal.c thermal: of-thermal: allow setting trip_temp on hardware 2016-05-17 07:28:28 -07:00
power_allocator.c thermal: power_allocator: req_range multiplication should be a 64 bit type 2016-04-20 16:22:45 -07:00
qcom-spmi-temp-alarm.c thermal: convert qcom-spmi to use devm_thermal_zone_of_sensor_register 2016-05-17 07:28:26 -07:00
rcar_thermal.c thermal: convert rcar_thermal to use devm_thermal_zone_of_sensor_register 2016-05-17 07:28:27 -07:00
rockchip_thermal.c thermal: convert rockchip_thermal to use devm_thermal_zone_of_sensor_register 2016-05-17 07:28:27 -07:00
spear_thermal.c thermal: spear: use __maybe_unused for PM functions 2016-02-09 14:12:08 -08:00
step_wise.c Thermal: initialize thermal zone device correctly 2015-12-29 15:59:44 +08:00
thermal_core.c thermal: use %d to print S32 parameters 2016-04-27 15:54:51 -07:00
thermal_core.h Thermal: initialize thermal zone device correctly 2015-12-29 15:59:44 +08:00
thermal_hwmon.c thermal: consistently use int for temperatures 2015-08-03 23:15:50 +08:00
thermal_hwmon.h thermal: hwmon: move hwmon support to single file 2013-09-03 09:09:12 -04:00
user_space.c Thermal: build thermal governors into thermal_sys module 2013-04-14 23:28:43 +08:00
x86_pkg_temp_thermal.c thermal: consistently use int for temperatures 2015-08-03 23:15:50 +08:00