From 51210e347c72c68d51a4d8445e7dc498e0aea0fc Mon Sep 17 00:00:00 2001 From: Anson Huang Date: Fri, 8 Sep 2017 16:04:25 +0800 Subject: MLK-16415 thermal: imx_sc: add device cooling for all thermal zones For system controller thermal devices, add device cooling for all thermal zones, when temperature exceeds passive trip point, thermal driver will send out notification, all devices that register device cooling notification can take actions to cooling down the chip, such as for GPU, below message will be printed out: [ 581.284453] System is too hot. GPU3D will work at 1/64 clock. And when temperature drops to below passive trip point, GPU cooling action will be cancelled: [ 578.300532] Hot alarm is canceled. GPU3D clock will return to 64/64 Signed-off-by: Anson Huang --- drivers/thermal/imx_sc_thermal.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/thermal/imx_sc_thermal.c b/drivers/thermal/imx_sc_thermal.c index ce9bf6d7df20..8503c38a4507 100644 --- a/drivers/thermal/imx_sc_thermal.c +++ b/drivers/thermal/imx_sc_thermal.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -179,6 +180,28 @@ static int imx_sc_tsens_probe(struct platform_device *pdev) trip = of_thermal_get_trip_points(sensor->tzd); sensor->temp_passive = trip[0].temperature; sensor->temp_critical = trip[1].temperature; + + sensor->cdev = devfreq_cooling_register(); + if (IS_ERR(sensor->cdev)) { + dev_err(&pdev->dev, + "failed to register devfreq cooling device: %d\n", + ret); + goto failed; + } + + ret = thermal_zone_bind_cooling_device(sensor->tzd, + IMX_TRIP_PASSIVE, + sensor->cdev, + THERMAL_NO_LIMIT, + THERMAL_NO_LIMIT, + THERMAL_WEIGHT_DEFAULT); + if (ret) { + dev_err(&sensor->tzd->device, + "binding zone %s with cdev %s failed:%d\n", + sensor->tzd->type, sensor->cdev->type, ret); + devfreq_cooling_unregister(sensor->cdev); + goto failed; + } } return 0; -- cgit v1.2.3