drivers/thermal/rcar_gen3_thermal: refactor reading fuses into seprarate function
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
This commit is contained in:
parent
fe3bfa7539
commit
a216261d24
1 changed files with 36 additions and 24 deletions
|
@ -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[] = {
|
||||
|
|
Loading…
Add table
Reference in a new issue