Skip to content

Commit 19f9b02

Browse files
georgemoussalemdlezcano
authored andcommitted
thermal/drivers/qcom/tsens: Add support for tsens v1 without RPM
Adding generic support for SoCs with tsens v1.0 IP with no RPM. Due to lack of RPM, tsens has to be reset and enabled in the driver init. SoCs can have support for more sensors than those which will actually be enabled. As such, init will only enable those explicitly added to the hw_ids array. Co-developed-by: Sricharan Ramabadhran <quic_srichara@quicinc.com> Signed-off-by: Sricharan Ramabadhran <quic_srichara@quicinc.com> Signed-off-by: George Moussalem <george.moussalem@outlook.com> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Link: https://lore.kernel.org/r/DS7PR19MB8883C5D7974C7735E23923769DCC2@DS7PR19MB8883.namprd19.prod.outlook.com Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
1 parent e3f90f1 commit 19f9b02

File tree

3 files changed

+59
-4
lines changed

3 files changed

+59
-4
lines changed

drivers/thermal/qcom/tsens-v1.c

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,17 @@ static struct tsens_features tsens_v1_feat = {
7979
.trip_max_temp = 120000,
8080
};
8181

82+
static struct tsens_features tsens_v1_no_rpm_feat = {
83+
.ver_major = VER_1_X_NO_RPM,
84+
.crit_int = 0,
85+
.combo_int = 0,
86+
.adc = 1,
87+
.srot_split = 1,
88+
.max_sensors = 11,
89+
.trip_min_temp = -40000,
90+
.trip_max_temp = 120000,
91+
};
92+
8293
static const struct reg_field tsens_v1_regfields[MAX_REGFIELDS] = {
8394
/* ----- SROT ------ */
8495
/* VERSION */
@@ -150,6 +161,43 @@ static int __init init_8956(struct tsens_priv *priv) {
150161
return init_common(priv);
151162
}
152163

164+
static int __init init_tsens_v1_no_rpm(struct tsens_priv *priv)
165+
{
166+
int i, ret;
167+
u32 mask = 0;
168+
169+
ret = init_common(priv);
170+
if (ret < 0) {
171+
dev_err(priv->dev, "Init common failed %d\n", ret);
172+
return ret;
173+
}
174+
175+
ret = regmap_field_write(priv->rf[TSENS_SW_RST], 1);
176+
if (ret) {
177+
dev_err(priv->dev, "Reset failed\n");
178+
return ret;
179+
}
180+
181+
for (i = 0; i < priv->num_sensors; i++)
182+
mask |= BIT(priv->sensor[i].hw_id);
183+
184+
ret = regmap_field_update_bits(priv->rf[SENSOR_EN], mask, mask);
185+
if (ret) {
186+
dev_err(priv->dev, "Sensor Enable failed\n");
187+
return ret;
188+
}
189+
190+
ret = regmap_field_write(priv->rf[TSENS_EN], 1);
191+
if (ret) {
192+
dev_err(priv->dev, "Enable failed\n");
193+
return ret;
194+
}
195+
196+
ret = regmap_field_write(priv->rf[TSENS_SW_RST], 0);
197+
198+
return ret;
199+
}
200+
153201
static const struct tsens_ops ops_generic_v1 = {
154202
.init = init_common,
155203
.calibrate = calibrate_v1,

drivers/thermal/qcom/tsens.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -975,10 +975,16 @@ int __init init_common(struct tsens_priv *priv)
975975
ret = regmap_field_read(priv->rf[TSENS_EN], &enabled);
976976
if (ret)
977977
goto err_put_device;
978-
if (!enabled && (tsens_version(priv) != VER_2_X_NO_RPM)) {
979-
dev_err(dev, "%s: device not enabled\n", __func__);
980-
ret = -ENODEV;
981-
goto err_put_device;
978+
if (!enabled) {
979+
switch (tsens_version(priv)) {
980+
case VER_1_X_NO_RPM:
981+
case VER_2_X_NO_RPM:
982+
break;
983+
default:
984+
dev_err(dev, "%s: device not enabled\n", __func__);
985+
ret = -ENODEV;
986+
goto err_put_device;
987+
}
982988
}
983989

984990
priv->rf[SENSOR_EN] = devm_regmap_field_alloc(dev, priv->srot_map,

drivers/thermal/qcom/tsens.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ enum tsens_ver {
3434
VER_0 = 0,
3535
VER_0_1,
3636
VER_1_X,
37+
VER_1_X_NO_RPM,
3738
VER_2_X,
3839
VER_2_X_NO_RPM,
3940
};

0 commit comments

Comments
 (0)