drivers/thermal/rcar_gen3_thermal: refactor reading fuses into seprarate function
authorWolfram Sang <wsa+renesas@sang-engineering.com>
Thu, 11 May 2023 19:22:18 +0000 (21:22 +0200)
committerDaniel Lezcano <daniel.lezcano@linaro.org>
Mon, 26 Jun 2023 10:03:13 +0000 (12:03 +0200)
Gen4 will be very different, so refactor Gen3 access into separate call
first.

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Tested-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Link: https://lore.kernel.org/r/20230511192220.7523-3-wsa+renesas@sang-engineering.com
drivers/thermal/rcar_gen3_thermal.c

index e9b0aa0a20169d965da6e2574483f79dd0e9ae6c..39b382ee08c8d932ef58abdeadcd491266749f79 100644 (file)
@@ -66,8 +66,11 @@ struct equation_coefs {
        int b2;
 };
 
+struct rcar_gen3_thermal_priv;
+
 struct rcar_thermal_info {
        int ths_tj_1;
+       void (*read_fuses)(struct rcar_gen3_thermal_priv *priv);
 };
 
 struct rcar_gen3_thermal_tsc {
@@ -241,6 +244,34 @@ static irqreturn_t rcar_gen3_thermal_irq(int irq, void *data)
        return IRQ_HANDLED;
 }
 
+static void rcar_gen3_thermal_read_fuses_gen3(struct rcar_gen3_thermal_priv *priv)
+{
+       unsigned int i;
+
+       /*
+        * Set the pseudo calibration points with fused values.
+        * PTAT is shared between all TSCs but only fused for the first
+        * TSC while THCODEs are fused for each TSC.
+        */
+       priv->ptat[0] = rcar_gen3_thermal_read(priv->tscs[0], REG_GEN3_PTAT1) &
+               GEN3_FUSE_MASK;
+       priv->ptat[1] = rcar_gen3_thermal_read(priv->tscs[0], REG_GEN3_PTAT2) &
+               GEN3_FUSE_MASK;
+       priv->ptat[2] = rcar_gen3_thermal_read(priv->tscs[0], REG_GEN3_PTAT3) &
+               GEN3_FUSE_MASK;
+
+       for (i = 0; i < priv->num_tscs; i++) {
+               struct rcar_gen3_thermal_tsc *tsc = priv->tscs[i];
+
+               tsc->thcode[0] = rcar_gen3_thermal_read(tsc, REG_GEN3_THCODE1) &
+                       GEN3_FUSE_MASK;
+               tsc->thcode[1] = rcar_gen3_thermal_read(tsc, REG_GEN3_THCODE2) &
+                       GEN3_FUSE_MASK;
+               tsc->thcode[2] = rcar_gen3_thermal_read(tsc, REG_GEN3_THCODE3) &
+                       GEN3_FUSE_MASK;
+       }
+}
+
 static bool rcar_gen3_thermal_read_fuses(struct rcar_gen3_thermal_priv *priv)
 {
        unsigned int i;
@@ -248,7 +279,8 @@ static bool rcar_gen3_thermal_read_fuses(struct rcar_gen3_thermal_priv *priv)
 
        /* If fuses are not set, fallback to pseudo values. */
        thscp = rcar_gen3_thermal_read(priv->tscs[0], REG_GEN3_THSCP);
-       if ((thscp & THSCP_COR_PARA_VLD) != THSCP_COR_PARA_VLD) {
+       if (!priv->info->read_fuses ||
+           (thscp & THSCP_COR_PARA_VLD) != THSCP_COR_PARA_VLD) {
                /* Default THCODE values in case FUSEs are not set. */
                static const int thcodes[TSC_MAX_NUM][3] = {
                        { 3397, 2800, 2221 },
@@ -273,29 +305,7 @@ static bool rcar_gen3_thermal_read_fuses(struct rcar_gen3_thermal_priv *priv)
                return false;
        }
 
-       /*
-        * Set the pseudo calibration points with fused values.
-        * PTAT is shared between all TSCs but only fused for the first
-        * TSC while THCODEs are fused for each TSC.
-        */
-       priv->ptat[0] = rcar_gen3_thermal_read(priv->tscs[0], REG_GEN3_PTAT1) &
-               GEN3_FUSE_MASK;
-       priv->ptat[1] = rcar_gen3_thermal_read(priv->tscs[0], REG_GEN3_PTAT2) &
-               GEN3_FUSE_MASK;
-       priv->ptat[2] = rcar_gen3_thermal_read(priv->tscs[0], REG_GEN3_PTAT3) &
-               GEN3_FUSE_MASK;
-
-       for (i = 0; i < priv->num_tscs; i++) {
-               struct rcar_gen3_thermal_tsc *tsc = priv->tscs[i];
-
-               tsc->thcode[0] = rcar_gen3_thermal_read(tsc, REG_GEN3_THCODE1) &
-                       GEN3_FUSE_MASK;
-               tsc->thcode[1] = rcar_gen3_thermal_read(tsc, REG_GEN3_THCODE2) &
-                       GEN3_FUSE_MASK;
-               tsc->thcode[2] = rcar_gen3_thermal_read(tsc, REG_GEN3_THCODE3) &
-                       GEN3_FUSE_MASK;
-       }
-
+       priv->info->read_fuses(priv);
        return true;
 }
 
@@ -325,10 +335,12 @@ static void rcar_gen3_thermal_init(struct rcar_gen3_thermal_priv *priv,
 
 static const struct rcar_thermal_info rcar_m3w_thermal_info = {
        .ths_tj_1 = 116,
+       .read_fuses = rcar_gen3_thermal_read_fuses_gen3,
 };
 
 static const struct rcar_thermal_info rcar_gen3_thermal_info = {
        .ths_tj_1 = 126,
+       .read_fuses = rcar_gen3_thermal_read_fuses_gen3,
 };
 
 static const struct of_device_id rcar_gen3_thermal_dt_ids[] = {