diff mbox

thermal: imx: correct thermal driver load sequence

Message ID 1410422657-30726-1-git-send-email-b51503@freescale.com (mailing list archive)
State Changes Requested
Delegated to: Eduardo Valentin
Headers show

Commit Message

Bai Ping Sept. 11, 2014, 8:04 a.m. UTC
Thermal driver should be registered after cpufreq driver have
been registered and probed. Doing so is to make sure that thermal
driver can get the max cpu cooling states correctly when calling
get_property.

Signed-off-by: Bai Ping <b51503@freescale.com>
---
 drivers/thermal/imx_thermal.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)



--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Eduardo Valentin Sept. 11, 2014, 12:16 p.m. UTC | #1
Hello Bai,

On Thu, Sep 11, 2014 at 04:04:17PM +0800, Bai Ping wrote:
> Thermal driver should be registered after cpufreq driver have
> been registered and probed. Doing so is to make sure that thermal
> driver can get the max cpu cooling states correctly when calling
> get_property.
> 

OK.

> Signed-off-by: Bai Ping <b51503@freescale.com>
> ---
>  drivers/thermal/imx_thermal.c | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/thermal/imx_thermal.c b/drivers/thermal/imx_thermal.c
> index 45af765..d00aaaf 100644
> --- a/drivers/thermal/imx_thermal.c
> +++ b/drivers/thermal/imx_thermal.c
> @@ -1,5 +1,5 @@
>  /*
> - * Copyright 2013 Freescale Semiconductor, Inc.
> + * Copyright 2013-2014 Freescale Semiconductor, Inc.
>   *

The above does not seam to be part of this patch.

>   * This program is free software; you can redistribute it and/or modify
>   * it under the terms of the GNU General Public License version 2 as
> @@ -557,7 +557,14 @@ static struct platform_driver imx_thermal = {
>  	.probe		= imx_thermal_probe,
>  	.remove		= imx_thermal_remove,
>  };
> -module_platform_driver(imx_thermal);
> +
> +static int __init imx_thermal_init(void)
> +{
> +	return platform_driver_register(&imx_thermal);
> +}
> +
> +late_initcall(imx_thermal_init);
> +

Have you considered checking if the cpufreq driver is loaded in your
probe? In case it is not loaded, you may return EPROBE_DEFER.

The problem that I have with the approach above is that it does not have
effect if you are building this driver as a module. Besides, in some
platforms, cpufreq also gets initialized in late phase, when most PM
layers are loaded. Are you sure the cpufreq in your case gets always
loaded before late init calls?

>  MODULE_AUTHOR("Freescale Semiconductor, Inc.");
>  MODULE_DESCRIPTION("Thermal driver for Freescale i.MX SoCs");
> -- 
> 1.9.1
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/thermal/imx_thermal.c b/drivers/thermal/imx_thermal.c
index 45af765..d00aaaf 100644
--- a/drivers/thermal/imx_thermal.c
+++ b/drivers/thermal/imx_thermal.c
@@ -1,5 +1,5 @@ 
 /*
- * Copyright 2013 Freescale Semiconductor, Inc.
+ * Copyright 2013-2014 Freescale Semiconductor, Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -557,7 +557,14 @@  static struct platform_driver imx_thermal = {
 	.probe		= imx_thermal_probe,
 	.remove		= imx_thermal_remove,
 };
-module_platform_driver(imx_thermal);
+
+static int __init imx_thermal_init(void)
+{
+	return platform_driver_register(&imx_thermal);
+}
+
+late_initcall(imx_thermal_init);
+
 MODULE_AUTHOR("Freescale Semiconductor, Inc.");
 MODULE_DESCRIPTION("Thermal driver for Freescale i.MX SoCs");
-- 
1.9.1