1
0
Fork 0

max17135: add thermistor regulator to read temperature

pull/1/head
Martin T. H. Sandsmark 2017-05-18 10:03:36 +02:00
parent ed5da916de
commit f24882dcd7
2 changed files with 39 additions and 0 deletions

View File

@ -79,6 +79,8 @@
#define MAX17135_VPOS_MIN_VAL 0
#define MAX17135_VPOS_MAX_VAL 1
#define MAX17135_EXT_TEMP_DEFAULT 25
struct max17135_vcom_programming_data {
int vcom_min_uV;
int vcom_max_uV;
@ -409,6 +411,35 @@ static int max17135_v3p3_is_enabled(struct regulator_dev *reg)
return 1;
}
static int max17135_tmst_get_temperature(struct regulator_dev *reg)
{
struct max17135 *max17135 = rdev_get_drvdata(reg);
unsigned int reg_val;
int retry, temp;
for (retry = 0; retry < 50; retry++) {
/* max 500ms after VIN> VIN_UVLO and VDD>VDD_UVLO */
if (max17135_reg_read(REG_MAX17135_EXT_TEMP, &reg_val) ==
PMIC_SUCCESS) {
reg_val >>= 8;
if (reg_val&0x80) {
reg_val = ((~reg_val)&0xFF)+1;
temp = (0 - (int)reg_val);
} else {
temp = (int)reg_val;
}
dev_dbg(max17135->dev, "EXT temperature = %d after waiting %d ms\n",
temp, retry*10);
return temp;
}
msleep(10);
}
dev_dbg(max17135->dev, "Unable to read temperature, use default=%d\n",
MAX17135_EXT_TEMP_DEFAULT);
return MAX17135_EXT_TEMP_DEFAULT;
}
/*
* Regulator operations
*/
@ -523,6 +554,13 @@ static struct regulator_desc max17135_reg[MAX17135_NUM_REGULATORS] = {
.type = REGULATOR_VOLTAGE,
.owner = THIS_MODULE,
},
{
.name = "TMST",
.id = MAX17135_TMST,
.ops = &max17135_tmst_ops,
.type = REGULATOR_VOLTAGE,
.owner = THIS_MODULE,
},
};
static void max17135_setup_timings(struct max17135 *max17135)

View File

@ -173,6 +173,7 @@ enum {
MAX17135_VNEG,
MAX17135_VPOS,
MAX17135_V3P3,
MAX17135_TMST,
MAX17135_NUM_REGULATORS,
};