Messages in this thread Patch in this message | | | From | Constantine Shulyupin <> | Subject | [PATCH v2] hwmon: (nct7802) hwmon: (nct7802) Add device tree support | Date | Mon, 14 Sep 2015 00:11:30 +0300 |
| |
Introduced properties sensorX-type with string values "disabled", "thermal diode", "thermistor" and "voltage".
Signed-off-by: Constantine Shulyupin <const@MakeLinux.com> --- Changed in v2: - removed tempX_type - introduced nuvoton,sensorX-type with string values
Changed in v1: - Introduced tempX_type with numerical values --- drivers/hwmon/nct7802.c | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-)
diff --git a/drivers/hwmon/nct7802.c b/drivers/hwmon/nct7802.c index 3ce33d2..edd9063 100644 --- a/drivers/hwmon/nct7802.c +++ b/drivers/hwmon/nct7802.c @@ -1077,9 +1077,11 @@ static const struct regmap_config nct7802_regmap_config = { .volatile_reg = nct7802_regmap_is_volatile, }; -static int nct7802_init_chip(struct nct7802_data *data) +static int nct7802_init_chip(struct device_node *node, + struct nct7802_data *data) { int err; + int i; /* Enable ADC */ err = regmap_update_bits(data->regmap, REG_START, 0x01, 0x01); @@ -1092,7 +1094,34 @@ static int nct7802_init_chip(struct nct7802_data *data) return err; /* Enable Vcore and VCC voltage monitoring */ - return regmap_update_bits(data->regmap, REG_VMON_ENABLE, 0x03, 0x03); + err = regmap_update_bits(data->regmap, REG_VMON_ENABLE, 0x03, 0x03); + if (err) + return err; + + for (i = 0; i < 3; i++) { + char propname[30]; + const char *val; + int senor_type; + + snprintf(propname, sizeof(propname), "nuvoton,sensor%d-type", + i + 1); + err = of_property_read_string(node, propname, &val); + if (err < 0) + break; + if (!strcmp(val, "disabled")) + senor_type = 0; + else if (!strcmp(val, "thermal diode")) + senor_type = 1; + else if (!strcmp(val, "thermistor")) + senor_type = 2; + else if (!strcmp(val, "voltage")) + senor_type = 3; + else + return -EINVAL; + err = regmap_update_bits(data->regmap, REG_MODE, + 3 << 2 * i, senor_type << 2 * i); + } + return 0; } static int nct7802_probe(struct i2c_client *client, @@ -1113,7 +1142,7 @@ static int nct7802_probe(struct i2c_client *client, mutex_init(&data->access_lock); - ret = nct7802_init_chip(data); + ret = nct7802_init_chip(client->dev.of_node, data); if (ret < 0) return ret; @@ -1133,10 +1162,18 @@ static const struct i2c_device_id nct7802_idtable[] = { }; MODULE_DEVICE_TABLE(i2c, nct7802_idtable); +#ifdef CONFIG_OF +static const struct of_device_id nct7802_dt_match[] = { + { .compatible = "nuvoton,nct7802" }, + { }, +}; +#endif + static struct i2c_driver nct7802_driver = { .class = I2C_CLASS_HWMON, .driver = { .name = DRVNAME, + .of_match_table = of_match_ptr(nct7802_dt_match), }, .detect = nct7802_detect, .probe = nct7802_probe, -- 1.9.1
| |