rk30: dvfs determine whether the regulator correct before operating regulator
authorchenxing <chenxing@rock-chips.com>
Wed, 2 May 2012 02:51:48 +0000 (10:51 +0800)
committerchenxing <chenxing@rock-chips.com>
Wed, 2 May 2012 02:58:15 +0000 (10:58 +0800)
arch/arm/mach-rk30/dvfs.c

index fd9369bb594906c3301124c62324e5e3bf1b1f83..d7d48b50bfdacdc7fddeaeb7f02752476e68d89b 100755 (executable)
@@ -27,7 +27,7 @@
 #include <linux/delay.h>\r
 \r
 #define DVFS_DBG(fmt, args...) {while(0);}\r
-#define DVFS_ERR(fmt, args...) pr_err(fmt, ##args)\r
+#define DVFS_ERR(fmt, args...) pr_err("DVFS ERR:\t"fmt, ##args)\r
 #define DVFS_LOG(fmt, args...) pr_debug(fmt, ##args)\r
 //#define DVFS_LOG(fmt, args...) pr_err(fmt, ##args)\r
 \r
@@ -298,7 +298,7 @@ int clk_enable_dvfs(struct clk *clk)
                        regulator = NULL;\r
                        if (dvfs_clk->vd->regulator_name)\r
                                regulator = dvfs_regulator_get(NULL, dvfs_clk->vd->regulator_name);\r
-                       if (regulator) {\r
+                       if (!IS_ERR(regulator)) {\r
                                // DVFS_DBG("dvfs_regulator_get(%s)\n",dvfs_clk->vd->regulator_name);\r
                                dvfs_clk->vd->regulator = regulator;\r
                        } else {\r
@@ -308,7 +308,12 @@ int clk_enable_dvfs(struct clk *clk)
                                return -1;\r
                        }\r
                } else {\r
-                       dvfs_clk->vd->cur_volt = dvfs_regulator_get_voltage(dvfs_clk->vd->regulator);\r
+                       if (!IS_ERR(dvfs_clk->vd->regulator))\r
+                               dvfs_clk->vd->cur_volt = dvfs_regulator_get_voltage(dvfs_clk->vd->regulator);\r
+                       else {\r
+                               DVFS_ERR("%s regulator not NULL but error\n", __func__);\r
+                               return -1;\r
+                       }\r
                        // DVFS_DBG("%s(%s) vd volt=%u\n",__func__,dvfs_clk->name,dvfs_clk->vd->cur_volt);\r
                }\r
 \r
@@ -553,8 +558,8 @@ static int dvfs_set_depend_pre(struct clk_node *dvfs_clk, unsigned long rate_old
 \r
                        depend->dep_vd->regulator = regulator;\r
                }\r
-               if (!depend->dep_vd->regulator) {\r
-                       DVFS_ERR("%s vd's(%s) regulator empty\n", __func__, depend->dep_vd->name);\r
+               if (IS_ERR(depend->dep_vd->regulator)) {\r
+                       DVFS_ERR("%s vd's(%s) regulator not NULL but error\n", __func__, depend->dep_vd->name);\r
                        return -1;\r
                }\r
 \r
@@ -610,8 +615,8 @@ static int dvfs_set_depend_post(struct clk_node *dvfs_clk, unsigned long rate_ol
 \r
                        depend->dep_vd->regulator = regulator;\r
                }\r
-               if (!depend->dep_vd->regulator) {\r
-                       DVFS_ERR("%s vd's(%s) regulator empty\n", __func__, depend->dep_vd->name);\r
+               if (IS_ERR(depend->dep_vd->regulator)) {\r
+                       DVFS_ERR("%s vd's(%s) regulator not NULL but error\n", __func__, depend->dep_vd->name);\r
                        return -1;\r
                }\r
 \r
@@ -707,7 +712,7 @@ int dvfs_target_core(struct clk *clk, unsigned long rate_hz)
 \r
        /* if up the voltage */\r
        if (volt_old < volt_new) {\r
-               if (dvfs_clk->vd->regulator) {\r
+               if (!IS_ERR(dvfs_clk->vd->regulator)) {\r
                        ret = dvfs_regulator_set_voltage(dvfs_clk->vd->regulator, volt_new, volt_new);\r
                        if (ret < 0) {\r
                                flag_core_set_volt_err = 1;\r
@@ -745,7 +750,7 @@ int dvfs_target_core(struct clk *clk, unsigned long rate_hz)
 \r
        /* if down the voltage */\r
        if (volt_old > volt_new) {\r
-               if (dvfs_clk->vd->regulator) {\r
+               if (!IS_ERR(dvfs_clk->vd->regulator)) {\r
                        ret = dvfs_regulator_set_voltage(dvfs_clk->vd->regulator, volt_new, volt_new);\r
                        if (ret < 0) {\r
                                flag_core_set_volt_err = 1;\r
@@ -805,7 +810,11 @@ int dvfs_target_cpu(struct clk *clk, unsigned long rate_hz)
        volt_new = clk_fv.index;\r
        if (flag_arm_set_volt_err) {\r
                /* It means the last time set voltage error */\r
-               flag_set_volt_correct = dvfs_regulator_get_voltage(dvfs_clk->vd->regulator);\r
+               if (!IS_ERR(dvfs_clk->vd->regulator))\r
+                       flag_set_volt_correct = dvfs_regulator_get_voltage(dvfs_clk->vd->regulator);\r
+               else {\r
+                       DVFS_ERR("dvfs regulator is ERROR\n");\r
+               }\r
                if (flag_set_volt_correct <= 0) {\r
                        DVFS_ERR("%s (clk:%s),volt=%d(was %dmV),rate=%lu(was %lu), try to reload arm_volt error %d!!! stop scaling\n", \r
                                        __func__, dvfs_clk->name, volt_new, volt_old, \r
@@ -825,7 +834,7 @@ int dvfs_target_cpu(struct clk *clk, unsigned long rate_hz)
 \r
        /* if up the voltage */\r
        if (volt_old < volt_new) {\r
-               if (dvfs_clk->vd->regulator) {\r
+               if (!IS_ERR(dvfs_clk->vd->regulator)) {\r
                        ret = dvfs_regulator_set_voltage(dvfs_clk->vd->regulator, volt_new, volt_new);\r
                        if (ret < 0) {\r
                                flag_arm_set_volt_err = 1;\r
@@ -878,7 +887,7 @@ int dvfs_target_cpu(struct clk *clk, unsigned long rate_hz)
 \r
        /* if down the voltage */\r
        if (volt_old > volt_new) {\r
-               if (dvfs_clk->vd->regulator) {\r
+               if (!IS_ERR(dvfs_clk->vd->regulator)) {\r
                        ret = dvfs_regulator_set_voltage(dvfs_clk->vd->regulator, volt_new, volt_new);\r
                        if (ret < 0) {\r
                                flag_arm_set_volt_err = 1;\r