From a499a12ef2bebc1c6c31801e04e27e08cdf98bc2 Mon Sep 17 00:00:00 2001 From: Eduardo Valentin Date: Mon, 8 Apr 2013 08:19:13 -0400 Subject: [PATCH] --- yaml --- r: 363962 b: refs/heads/master c: f1553334236701f1c790d6dc800d8f327b6c5166 h: refs/heads/master v: v3 --- [refs] | 2 +- .../staging/ti-soc-thermal/ti-bandgap.c | 27 +++++++++++++++---- .../ti-soc-thermal/ti-thermal-common.c | 5 ++++ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 553eb9f02ac9..09594ff3c4c9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 537eb9364ccdce6713f55dc004ceb76b63735ba9 +refs/heads/master: f1553334236701f1c790d6dc800d8f327b6c5166 diff --git a/trunk/drivers/staging/ti-soc-thermal/ti-bandgap.c b/trunk/drivers/staging/ti-soc-thermal/ti-bandgap.c index 5b06b12ae91c..37fdba639842 100644 --- a/trunk/drivers/staging/ti-soc-thermal/ti-bandgap.c +++ b/trunk/drivers/staging/ti-soc-thermal/ti-bandgap.c @@ -1305,12 +1305,18 @@ int ti_bandgap_probe(struct platform_device *pdev) for (i = 0; i < bgp->conf->sensor_count; i++) { char *domain; - if (bgp->conf->sensors[i].register_cooling) - bgp->conf->sensors[i].register_cooling(bgp, i); + if (bgp->conf->sensors[i].register_cooling) { + ret = bgp->conf->sensors[i].register_cooling(bgp, i); + if (ret) + goto remove_sensors; + } - domain = bgp->conf->sensors[i].domain; - if (bgp->conf->expose_sensor) - bgp->conf->expose_sensor(bgp, i, domain); + if (bgp->conf->expose_sensor) { + domain = bgp->conf->sensors[i].domain; + ret = bgp->conf->expose_sensor(bgp, i, domain); + if (ret) + goto remove_last_cooling; + } } /* @@ -1329,6 +1335,17 @@ int ti_bandgap_probe(struct platform_device *pdev) return 0; +remove_last_cooling: + if (bgp->conf->sensors[i].unregister_cooling) + bgp->conf->sensors[i].unregister_cooling(bgp, i); +remove_sensors: + for (i--; i >= 0; i--) { + if (bgp->conf->sensors[i].unregister_cooling) + bgp->conf->sensors[i].unregister_cooling(bgp, i); + if (bgp->conf->remove_sensor) + bgp->conf->remove_sensor(bgp, i); + } + ti_bandgap_power(bgp, false); disable_clk: if (TI_BANDGAP_HAS(bgp, CLK_CTRL)) clk_disable_unprepare(bgp->fclock); diff --git a/trunk/drivers/staging/ti-soc-thermal/ti-thermal-common.c b/trunk/drivers/staging/ti-soc-thermal/ti-thermal-common.c index 58e19bc244df..e3c5e677eaa5 100644 --- a/trunk/drivers/staging/ti-soc-thermal/ti-thermal-common.c +++ b/trunk/drivers/staging/ti-soc-thermal/ti-thermal-common.c @@ -339,6 +339,11 @@ int ti_thermal_register_cpu_cooling(struct ti_bandgap *bgp, int id) if (!data) return -EINVAL; + if (!cpufreq_get_current_driver()) { + dev_dbg(bgp->dev, "no cpufreq driver yet\n"); + return -EPROBE_DEFER; + } + /* Register cooling device */ data->cool_dev = cpufreq_cooling_register(cpu_present_mask); if (IS_ERR_OR_NULL(data->cool_dev)) {