Skip to content

Commit

Permalink
thermal: armada: Add infrastructure to support generic formulas
Browse files Browse the repository at this point in the history
In order to support other similar SoC, with different sensor
coefficients, this commit adds the coeficients to the per-variant
structure, instead of having the formula hardcoded.

Acked-by: Jason Cooper <jason@lakedaemon.net>
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
  • Loading branch information
Ezequiel Garcia authored and Zhang Rui committed May 15, 2014
1 parent 66fdb7b commit 9484bc6
Showing 1 changed file with 19 additions and 1 deletion.
20 changes: 19 additions & 1 deletion drivers/thermal/armada_thermal.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@ struct armada_thermal_data {

/* Test for a valid sensor value (optional) */
bool (*is_valid)(struct armada_thermal_priv *);

/* Formula coeficients: temp = (b + m * reg) / div */
unsigned long coef_b;
unsigned long coef_m;
unsigned long coef_div;
};

static void armadaxp_init_sensor(struct armada_thermal_priv *priv)
Expand Down Expand Up @@ -111,6 +116,7 @@ static int armada_get_temp(struct thermal_zone_device *thermal,
{
struct armada_thermal_priv *priv = thermal->devdata;
unsigned long reg;
unsigned long m, b, div;

/* Valid check */
if (priv->data->is_valid && !priv->data->is_valid(priv)) {
Expand All @@ -121,7 +127,13 @@ static int armada_get_temp(struct thermal_zone_device *thermal,

reg = readl_relaxed(priv->sensor);
reg = (reg >> THERMAL_TEMP_OFFSET) & THERMAL_TEMP_MASK;
*temp = (3153000000UL - (10000000UL*reg)) / 13825;

/* Get formula coeficients */
b = priv->data->coef_b;
m = priv->data->coef_m;
div = priv->data->coef_div;

*temp = (b - (m * reg)) / div;
return 0;
}

Expand All @@ -131,11 +143,17 @@ static struct thermal_zone_device_ops ops = {

static const struct armada_thermal_data armadaxp_data = {
.init_sensor = armadaxp_init_sensor,
.coef_b = 3153000000UL,
.coef_m = 10000000UL,
.coef_div = 13825,
};

static const struct armada_thermal_data armada370_data = {
.is_valid = armada_is_valid,
.init_sensor = armada370_init_sensor,
.coef_b = 3153000000UL,
.coef_m = 10000000UL,
.coef_div = 13825,
};

static const struct of_device_id armada_thermal_id_table[] = {
Expand Down

0 comments on commit 9484bc6

Please sign in to comment.