Lines Matching +full:address +full:- +full:data
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * lm90.c - Part of lm_sensors, Linux kernel modules for hardware
5 * Copyright (C) 2003-2010 Jean Delvare <jdelvare@suse.de>
10 * temperature) and a 3-4 deg accuracy.
18 * When device is auto-detected, the driver will assume an LM99.
32 * variants. We use the device address to detect MAX6659, which will result
33 * in a detection as max6657 if it is on address 0x4c. The extra address
35 * explicitly as max6659, or if its address is not 0x4c.
65 * and extended mode. They are mostly compatible with LM90 except for a data
77 * pin-compatible with the LM86, the ED/EDP parts are also address-compatible.
119 * Address is fully defined internally and cannot be changed except for
121 * LM86, LM89, LM90, LM99, ADM1032, ADM1032-1, ADT7461, ADT7461A, MAX6649,
122 * MAX6657, MAX6658, NCT1008 and W83L771 have address 0x4c.
123 * ADM1032-2, ADT7461-2, ADT7461A-2, LM89-1, LM99-1, MAX6646, and NCT1008D
124 * have address 0x4d.
125 * MAX6647 has address 0x4e.
126 * MAX6659 can have address 0x4c, 0x4d or 0x4e.
127 * MAX6654, MAX6680, and MAX6681 can have address 0x18, 0x19, 0x1a, 0x29,
129 * SA56004 can have address 0x48 through 0x4F.
235 * Driver data (common to all clients)
291 .data = (void *)adm1032
295 .data = (void *)adt7461
299 .data = (void *)adt7461a
303 .data = (void *)adt7481
307 .data = (void *)g781
311 .data = (void *)lm90
315 .data = (void *)lm90
319 .data = (void *)lm90
323 .data = (void *)lm99
327 .data = (void *)max6646
331 .data = (void *)max6646
335 .data = (void *)max6646
339 .data = (void *)max6654
343 .data = (void *)max6657
347 .data = (void *)max6657
351 .data = (void *)max6659
355 .data = (void *)max6680
359 .data = (void *)max6680
363 .data = (void *)max6696
367 .data = (void *)max6696
371 .data = (void *)adt7461a
375 .data = (void *)nct72
379 .data = (void *)nct72
383 .data = (void *)nct72
387 .data = (void *)w83l771
391 .data = (void *)sa56004
395 .data = (void *)tmp451
399 .data = (void *)tmp461
413 u8 resolution; /* 16-bit resolution (default 11 bit) */
682 * Client data (each client gets its own)
739 return i2c_smbus_xfer(client->adapter, client->addr, in lm90_write_no_pec()
740 client->flags & ~I2C_CLIENT_PEC, in lm90_write_no_pec()
745 * It is assumed that client->update_lock is held (unless we are in
747 * for chips with partial PEC support, because we don't want the address
752 struct lm90_data *data = i2c_get_clientdata(client); in lm90_read_reg() local
753 bool partial_pec = (client->flags & I2C_CLIENT_PEC) && in lm90_read_reg()
754 (data->flags & LM90_HAVE_PARTIAL_PEC); in lm90_read_reg()
767 * Return register write address
769 * The write address for registers 0x03 .. 0x08 is the read address plus 6.
770 * For other registers the write address matches the read address.
781 * Convert register address to write address if needed, then execute the
790 * Write into 16-bit LM90 register.
791 * Convert register addresses to write address if needed, then execute the
828 * the one-shot conversion register, which we don't want to do in lm90_read16()
847 static int lm90_update_confreg(struct lm90_data *data, u8 config) in lm90_update_confreg() argument
849 if (data->config != config) { in lm90_update_confreg()
852 err = lm90_write_reg(data->client, LM90_REG_CONFIG1, config); in lm90_update_confreg()
855 data->config = config; in lm90_update_confreg()
861 * client->update_lock must be held when calling this function (unless we are
863 * than channel 0 is selected. Also, calling code must make sure to re-select
866 * non-default remote channel.
868 static int lm90_select_remote_channel(struct lm90_data *data, bool second) in lm90_select_remote_channel() argument
870 u8 config = data->config & ~0x08; in lm90_select_remote_channel()
875 return lm90_update_confreg(data, config); in lm90_select_remote_channel()
878 static int lm90_write_convrate(struct lm90_data *data, int val) in lm90_write_convrate() argument
880 u8 config = data->config; in lm90_write_convrate()
884 if (data->flags & LM90_PAUSE_FOR_CONFIG) { in lm90_write_convrate()
885 err = lm90_update_confreg(data, config | 0x40); in lm90_write_convrate()
891 err = lm90_write_reg(data->client, LM90_REG_CONVRATE, val); in lm90_write_convrate()
894 lm90_update_confreg(data, config); in lm90_write_convrate()
901 * client->update_lock must be held when calling this function (unless we are
904 static int lm90_set_convrate(struct i2c_client *client, struct lm90_data *data, in lm90_set_convrate() argument
915 i < data->max_convrate; i++, update_interval >>= 1) in lm90_set_convrate()
919 err = lm90_write_convrate(data, i); in lm90_set_convrate()
920 data->update_interval = DIV_ROUND_CLOSEST(update_interval, 64); in lm90_set_convrate()
925 struct lm90_data *data, int val) in lm90_set_faultqueue() argument
929 if (data->faultqueue_mask) { in lm90_set_faultqueue()
930 err = lm90_update_confreg(data, val <= data->faultqueue_depth / 2 ? in lm90_set_faultqueue()
931 data->config & ~data->faultqueue_mask : in lm90_set_faultqueue()
932 data->config | data->faultqueue_mask); in lm90_set_faultqueue()
936 data->conalert = (data->conalert & 0xf1) | values[val - 1]; in lm90_set_faultqueue()
937 err = lm90_write_reg(data->client, TMP451_REG_CONALERT, in lm90_set_faultqueue()
938 data->conalert); in lm90_set_faultqueue()
946 struct lm90_data *data = dev_get_drvdata(dev); in lm90_update_limits() local
947 struct i2c_client *client = data->client; in lm90_update_limits()
950 if (data->flags & LM90_HAVE_CRIT) { in lm90_update_limits()
954 data->temp[LOCAL_CRIT] = val << 8; in lm90_update_limits()
959 data->temp[REMOTE_CRIT] = val << 8; in lm90_update_limits()
964 data->temp_hyst = val; in lm90_update_limits()
966 if ((data->flags & LM90_HAVE_FAULTQUEUE) && !data->faultqueue_mask) { in lm90_update_limits()
970 data->conalert = val; in lm90_update_limits()
974 (data->flags & LM90_HAVE_REM_LIMIT_EXT) ? LM90_REG_REMOTE_LOWL : 0, in lm90_update_limits()
978 data->temp[REMOTE_LOW] = val; in lm90_update_limits()
981 (data->flags & LM90_HAVE_REM_LIMIT_EXT) ? LM90_REG_REMOTE_HIGHL : 0, in lm90_update_limits()
985 data->temp[REMOTE_HIGH] = val; in lm90_update_limits()
987 if (data->flags & LM90_HAVE_OFFSET) { in lm90_update_limits()
992 data->temp[REMOTE_OFFSET] = val; in lm90_update_limits()
995 if (data->flags & LM90_HAVE_EMERGENCY) { in lm90_update_limits()
999 data->temp[LOCAL_EMERG] = val << 8; in lm90_update_limits()
1004 data->temp[REMOTE_EMERG] = val << 8; in lm90_update_limits()
1007 if (data->flags & LM90_HAVE_TEMP3) { in lm90_update_limits()
1008 val = lm90_select_remote_channel(data, true); in lm90_update_limits()
1015 data->temp[REMOTE2_CRIT] = val << 8; in lm90_update_limits()
1017 if (data->flags & LM90_HAVE_EMERGENCY) { in lm90_update_limits()
1021 data->temp[REMOTE2_EMERG] = val << 8; in lm90_update_limits()
1027 data->temp[REMOTE2_LOW] = val << 8; in lm90_update_limits()
1032 data->temp[REMOTE2_HIGH] = val << 8; in lm90_update_limits()
1034 if (data->flags & LM90_HAVE_OFFSET) { in lm90_update_limits()
1039 data->temp[REMOTE2_OFFSET] = val; in lm90_update_limits()
1042 lm90_select_remote_channel(data, false); in lm90_update_limits()
1050 struct lm90_data *data = container_of(work, struct lm90_data, report_work); in lm90_report_alarms() local
1052 struct device *hwmon_dev = data->hwmon_dev; in lm90_report_alarms()
1053 struct device *dev = &data->client->dev; in lm90_report_alarms()
1056 current_alarms = data->current_alarms; in lm90_report_alarms()
1057 cleared_alarms = data->reported_alarms & ~current_alarms; in lm90_report_alarms()
1058 new_alarms = current_alarms & ~data->reported_alarms; in lm90_report_alarms()
1111 data->reported_alarms = current_alarms; in lm90_report_alarms()
1114 static int lm90_update_alarms_locked(struct lm90_data *data, bool force) in lm90_update_alarms_locked() argument
1116 if (force || !data->alarms_valid || in lm90_update_alarms_locked()
1117 time_after(jiffies, data->alarms_updated + msecs_to_jiffies(data->update_interval))) { in lm90_update_alarms_locked()
1118 struct i2c_client *client = data->client; in lm90_update_alarms_locked()
1123 data->alarms_valid = false; in lm90_update_alarms_locked()
1130 if (data->reg_status2) { in lm90_update_alarms_locked()
1131 val = lm90_read_reg(client, data->reg_status2); in lm90_update_alarms_locked()
1138 * handler) and alarm data is valid, the alarms may have been in lm90_update_alarms_locked()
1143 if (force && data->alarms_valid) in lm90_update_alarms_locked()
1144 data->current_alarms |= alarms; in lm90_update_alarms_locked()
1146 data->current_alarms = alarms; in lm90_update_alarms_locked()
1147 data->alarms |= alarms; in lm90_update_alarms_locked()
1149 check_enable = (client->irq || !(data->config_orig & 0x80)) && in lm90_update_alarms_locked()
1150 (data->config & 0x80); in lm90_update_alarms_locked()
1153 schedule_work(&data->report_work); in lm90_update_alarms_locked()
1156 * Re-enable ALERT# output if it was originally enabled, relevant in lm90_update_alarms_locked()
1161 if (!(data->current_alarms & data->alert_alarms)) { in lm90_update_alarms_locked()
1162 dev_dbg(&client->dev, "Re-enabling ALERT#\n"); in lm90_update_alarms_locked()
1163 lm90_update_confreg(data, data->config & ~0x80); in lm90_update_alarms_locked()
1170 cancel_delayed_work(&data->alert_work); in lm90_update_alarms_locked()
1172 schedule_delayed_work(&data->alert_work, in lm90_update_alarms_locked()
1173 max_t(int, HZ, msecs_to_jiffies(data->update_interval))); in lm90_update_alarms_locked()
1176 data->alarms_updated = jiffies; in lm90_update_alarms_locked()
1177 data->alarms_valid = true; in lm90_update_alarms_locked()
1182 static int lm90_update_alarms(struct lm90_data *data, bool force) in lm90_update_alarms() argument
1186 mutex_lock(&data->update_lock); in lm90_update_alarms()
1187 err = lm90_update_alarms_locked(data, force); in lm90_update_alarms()
1188 mutex_unlock(&data->update_lock); in lm90_update_alarms()
1196 struct lm90_data *data = container_of(delayed_work, struct lm90_data, alert_work); in lm90_alert_work() local
1199 if (!(data->config & 0x80)) in lm90_alert_work()
1202 lm90_update_alarms(data, true); in lm90_alert_work()
1207 struct lm90_data *data = dev_get_drvdata(dev); in lm90_update_device() local
1208 struct i2c_client *client = data->client; in lm90_update_device()
1212 if (!data->valid) { in lm90_update_device()
1218 next_update = data->last_updated + in lm90_update_device()
1219 msecs_to_jiffies(data->update_interval); in lm90_update_device()
1220 if (time_after(jiffies, next_update) || !data->valid) { in lm90_update_device()
1221 dev_dbg(&client->dev, "Updating lm90 data.\n"); in lm90_update_device()
1223 data->valid = false; in lm90_update_device()
1228 data->temp[LOCAL_LOW] = val << 8; in lm90_update_device()
1233 data->temp[LOCAL_HIGH] = val << 8; in lm90_update_device()
1236 data->reg_local_ext, true); in lm90_update_device()
1239 data->temp[LOCAL_TEMP] = val; in lm90_update_device()
1241 data->reg_remote_ext, true); in lm90_update_device()
1244 data->temp[REMOTE_TEMP] = val; in lm90_update_device()
1246 if (data->flags & LM90_HAVE_TEMP3) { in lm90_update_device()
1247 val = lm90_select_remote_channel(data, true); in lm90_update_device()
1252 data->reg_remote_ext, true); in lm90_update_device()
1254 lm90_select_remote_channel(data, false); in lm90_update_device()
1257 data->temp[REMOTE2_TEMP] = val; in lm90_update_device()
1259 lm90_select_remote_channel(data, false); in lm90_update_device()
1262 val = lm90_update_alarms_locked(data, false); in lm90_update_device()
1266 data->last_updated = jiffies; in lm90_update_device()
1267 data->valid = true; in lm90_update_device()
1279 return sprintf(buf, "%d\n", !!(client->flags & I2C_CLIENT_PEC)); in pec_show()
1295 client->flags &= ~I2C_CLIENT_PEC; in pec_store()
1298 client->flags |= I2C_CLIENT_PEC; in pec_store()
1301 return -EINVAL; in pec_store()
1309 static int lm90_temp_get_resolution(struct lm90_data *data, int index) in lm90_temp_get_resolution() argument
1313 if (data->reg_remote_ext) in lm90_temp_get_resolution()
1314 return data->resolution; in lm90_temp_get_resolution()
1319 return data->resolution; in lm90_temp_get_resolution()
1321 if (data->reg_local_ext) in lm90_temp_get_resolution()
1322 return data->resolution; in lm90_temp_get_resolution()
1328 if (data->flags & LM90_HAVE_REM_LIMIT_EXT) in lm90_temp_get_resolution()
1329 return data->resolution; in lm90_temp_get_resolution()
1341 val = regval - 0x4000; in lm90_temp_from_reg()
1347 return ((val >> (16 - resolution)) * 1000) >> (resolution - 8); in lm90_temp_from_reg()
1350 static int lm90_get_temp(struct lm90_data *data, int index, int channel) in lm90_get_temp() argument
1352 int temp = lm90_temp_from_reg(data->flags, data->temp[index], in lm90_get_temp()
1353 lm90_temp_get_resolution(data, index)); in lm90_get_temp()
1356 if (data->kind == lm99 && channel) in lm90_get_temp()
1365 1000 - DIV_ROUND_CLOSEST(1000, BIT(resolution - 8)) : 0; in lm90_temp_to_reg()
1368 val = clamp_val(val, -64000, 191000 + fraction); in lm90_temp_to_reg()
1375 val = clamp_val(val, -128000, 127000 + fraction); in lm90_temp_to_reg()
1378 return DIV_ROUND_CLOSEST(val << (resolution - 8), 1000) << (16 - resolution); in lm90_temp_to_reg()
1381 static int lm90_set_temp(struct lm90_data *data, int index, int channel, long val) in lm90_set_temp() argument
1397 struct i2c_client *client = data->client; in lm90_set_temp()
1402 if (channel && (data->flags & LM90_HAVE_REM_LIMIT_EXT)) { in lm90_set_temp()
1410 if (data->kind == lm99 && channel) { in lm90_set_temp()
1412 val = max(val, -128000l); in lm90_set_temp()
1413 val -= 16000; in lm90_set_temp()
1416 data->temp[index] = lm90_temp_to_reg(data->flags, val, in lm90_set_temp()
1417 lm90_temp_get_resolution(data, index)); in lm90_set_temp()
1420 lm90_select_remote_channel(data, true); in lm90_set_temp()
1422 err = lm90_write16(client, regh, regl, data->temp[index]); in lm90_set_temp()
1425 lm90_select_remote_channel(data, false); in lm90_set_temp()
1430 static int lm90_get_temphyst(struct lm90_data *data, int index, int channel) in lm90_get_temphyst() argument
1432 int temp = lm90_get_temp(data, index, channel); in lm90_get_temphyst()
1434 return temp - data->temp_hyst * 1000; in lm90_get_temphyst()
1437 static int lm90_set_temphyst(struct lm90_data *data, long val) in lm90_set_temphyst() argument
1439 int temp = lm90_get_temp(data, LOCAL_CRIT, 0); in lm90_set_temphyst()
1442 val = clamp_val(val, -128000l, 255000l); in lm90_set_temphyst()
1443 data->temp_hyst = clamp_val(DIV_ROUND_CLOSEST(temp - val, 1000), 0, 31); in lm90_set_temphyst()
1445 return lm90_write_reg(data->client, LM90_REG_TCRIT_HYST, data->temp_hyst); in lm90_set_temphyst()
1448 static int lm90_get_temp_offset(struct lm90_data *data, int index) in lm90_get_temp_offset() argument
1450 int res = lm90_temp_get_resolution(data, index); in lm90_get_temp_offset()
1452 return lm90_temp_from_reg(0, data->temp[index], res); in lm90_get_temp_offset()
1455 static int lm90_set_temp_offset(struct lm90_data *data, int index, int channel, long val) in lm90_set_temp_offset() argument
1459 val = lm90_temp_to_reg(0, val, lm90_temp_get_resolution(data, index)); in lm90_set_temp_offset()
1463 lm90_select_remote_channel(data, true); in lm90_set_temp_offset()
1465 err = lm90_write16(data->client, LM90_REG_REMOTE_OFFSH, LM90_REG_REMOTE_OFFSL, val); in lm90_set_temp_offset()
1468 lm90_select_remote_channel(data, false); in lm90_set_temp_offset()
1473 data->temp[index] = val; in lm90_set_temp_offset()
1499 -1, REMOTE_OFFSET, REMOTE2_OFFSET
1511 struct lm90_data *data = dev_get_drvdata(dev); in lm90_temp_read() local
1515 mutex_lock(&data->update_lock); in lm90_temp_read()
1517 mutex_unlock(&data->update_lock); in lm90_temp_read()
1523 *val = lm90_get_temp(data, lm90_temp_index[channel], channel); in lm90_temp_read()
1538 if (data->flags & LM90_HAVE_CRIT_ALRM_SWP) in lm90_temp_read()
1550 *val = !!(data->alarms & bit); in lm90_temp_read()
1551 data->alarms &= ~bit; in lm90_temp_read()
1552 data->alarms |= data->current_alarms; in lm90_temp_read()
1555 *val = lm90_get_temp(data, lm90_temp_min_index[channel], channel); in lm90_temp_read()
1558 *val = lm90_get_temp(data, lm90_temp_max_index[channel], channel); in lm90_temp_read()
1561 *val = lm90_get_temp(data, lm90_temp_crit_index[channel], channel); in lm90_temp_read()
1564 *val = lm90_get_temphyst(data, lm90_temp_crit_index[channel], channel); in lm90_temp_read()
1567 *val = lm90_get_temp(data, lm90_temp_emerg_index[channel], channel); in lm90_temp_read()
1570 *val = lm90_get_temphyst(data, lm90_temp_emerg_index[channel], channel); in lm90_temp_read()
1573 *val = lm90_get_temp_offset(data, lm90_temp_offset_index[channel]); in lm90_temp_read()
1576 return -EOPNOTSUPP; in lm90_temp_read()
1583 struct lm90_data *data = dev_get_drvdata(dev); in lm90_temp_write() local
1586 mutex_lock(&data->update_lock); in lm90_temp_write()
1594 err = lm90_set_temp(data, lm90_temp_min_index[channel], in lm90_temp_write()
1598 err = lm90_set_temp(data, lm90_temp_max_index[channel], in lm90_temp_write()
1602 err = lm90_set_temp(data, lm90_temp_crit_index[channel], in lm90_temp_write()
1606 err = lm90_set_temphyst(data, val); in lm90_temp_write()
1609 err = lm90_set_temp(data, lm90_temp_emerg_index[channel], in lm90_temp_write()
1613 err = lm90_set_temp_offset(data, lm90_temp_offset_index[channel], in lm90_temp_write()
1617 err = -EOPNOTSUPP; in lm90_temp_write()
1621 mutex_unlock(&data->update_lock); in lm90_temp_write()
1626 static umode_t lm90_temp_is_visible(const void *data, u32 attr, int channel) in lm90_temp_is_visible() argument
1655 struct lm90_data *data = dev_get_drvdata(dev); in lm90_chip_read() local
1658 mutex_lock(&data->update_lock); in lm90_chip_read()
1660 mutex_unlock(&data->update_lock); in lm90_chip_read()
1666 *val = data->update_interval; in lm90_chip_read()
1669 *val = data->alarms; in lm90_chip_read()
1672 if (data->faultqueue_mask) { in lm90_chip_read()
1673 *val = (data->config & data->faultqueue_mask) ? in lm90_chip_read()
1674 data->faultqueue_depth : 1; in lm90_chip_read()
1676 switch (data->conalert & 0x0e) { in lm90_chip_read()
1694 return -EOPNOTSUPP; in lm90_chip_read()
1702 struct lm90_data *data = dev_get_drvdata(dev); in lm90_chip_write() local
1703 struct i2c_client *client = data->client; in lm90_chip_write()
1706 mutex_lock(&data->update_lock); in lm90_chip_write()
1714 err = lm90_set_convrate(client, data, in lm90_chip_write()
1718 err = lm90_set_faultqueue(client, data, clamp_val(val, 1, 4)); in lm90_chip_write()
1721 err = -EOPNOTSUPP; in lm90_chip_write()
1725 mutex_unlock(&data->update_lock); in lm90_chip_write()
1730 static umode_t lm90_chip_is_visible(const void *data, u32 attr, int channel) in lm90_chip_is_visible() argument
1752 return -EOPNOTSUPP; in lm90_read()
1759 struct lm90_data *data = dev_get_drvdata(dev); in lm90_read_string() local
1761 *str = data->channel_label[channel]; in lm90_read_string()
1775 return -EOPNOTSUPP; in lm90_write()
1779 static umode_t lm90_is_visible(const void *data, enum hwmon_sensor_types type, in lm90_is_visible() argument
1784 return lm90_chip_is_visible(data, attr, channel); in lm90_is_visible()
1786 return lm90_temp_is_visible(data, attr, channel); in lm90_is_visible()
1887 if (i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_WORD_DATA)) { in lm90_detect_max1617()
1909 int address = client->addr; in lm90_detect_national() local
1918 if (address != 0x4c && address != 0x4d) in lm90_detect_national()
1923 if (address == 0x4c) in lm90_detect_national()
1927 if (address == 0x4c) in lm90_detect_national()
1943 int address = client->addr; in lm90_detect_on() local
1948 if ((address == 0x4c || address == 0x4d) && !(config1 & 0x1b) && in lm90_detect_on()
1965 int address = client->addr; in lm90_detect_analog() local
1983 * ---------------------------------------------------------- in lm90_detect_analog()
1994 * adt7482 - - - 41 65 datasheet in lm90_detect_analog()
2001 * nct1008 - - - 41 57 datasheet rev. 3 in lm90_detect_analog()
2004 * nvt210 - - - 41 - datasheet in lm90_detect_analog()
2005 * nvt211 - - - 41 - datasheet in lm90_detect_analog()
2016 (address == 0x4c || address == 0x4d) && in lm90_detect_analog()
2023 * ADM1021A and compatible chips will be mis-detected as in lm90_detect_analog()
2041 (address == 0x4c || address == 0x4d || address == 0x4e) && in lm90_detect_analog()
2052 (address == 0x4c || address == 0x4d) && !(config1 & 0x3f) && in lm90_detect_analog()
2058 (address == 0x4c || address == 0x4d) && !(config1 & 0x1b) && in lm90_detect_analog()
2064 (address == 0x4c || address == 0x4d) && !(config1 & 0x1b) && in lm90_detect_analog()
2070 (address == 0x4c || address == 0x4d) && !(config1 & 0x1b) && in lm90_detect_analog()
2076 (address == 0x4c || address == 0x4d) && !(config1 & 0x1b) && in lm90_detect_analog()
2087 (address == 0x4b || address == 0x4c) && !(config1 & 0x10) && in lm90_detect_analog()
2095 address == 0x4c && !(config1 & 0x10) && !(config2 & 0x7f) && in lm90_detect_analog()
2102 ((address >= 0x18 && address <= 0x1a) || in lm90_detect_analog()
2103 (address >= 0x29 && address <= 0x2b) || in lm90_detect_analog()
2104 (address >= 0x4c && address <= 0x4e)) && in lm90_detect_analog()
2119 int address = client->addr; in lm90_detect_maxim() local
2128 * We read MAX6659_REG_REMOTE_EMERG twice, and re-read in lm90_detect_maxim()
2163 * address 0x12 (LM90_REG_REMOTE_OFFSL) exists for this chip and in lm90_detect_maxim()
2172 * address 0x10 or higher) except for manufacturer and in lm90_detect_maxim()
2211 * register. Reading from that address will return the last in lm90_detect_maxim()
2223 * thus the only way to detect MAX6659 is by its address. in lm90_detect_maxim()
2224 * For this reason it will be mis-detected as MAX6657 if its in lm90_detect_maxim()
2225 * address is 0x4c. in lm90_detect_maxim()
2227 if (address >= 0x48 && address <= 0x4f && config1 == convrate && in lm90_detect_maxim()
2237 /* re-read manufacturer ID to have a good baseline */ in lm90_detect_maxim()
2241 /* check various non-existing registers */ in lm90_detect_maxim()
2252 /* re-check unsupported registers */ in lm90_detect_maxim()
2259 } else if ((address == 0x4c || address == 0x4d || address == 0x4e) && in lm90_detect_maxim()
2261 if (address == 0x4c) in lm90_detect_maxim()
2272 * The I2C address of MAX6648/6692 is fixed at 0x4c. in lm90_detect_maxim()
2273 * MAX6646 is at address 0x4d, MAX6647 is at address 0x4e, in lm90_detect_maxim()
2274 * and MAX6649 is at address 0x4c. A slight difference between in lm90_detect_maxim()
2278 * chips. MAX6648 will be mis-detected as MAX6649 if the remote in lm90_detect_maxim()
2285 switch (address) { in lm90_detect_maxim()
2321 int address = client->addr; in lm90_detect_nuvoton() local
2327 if (address == 0x4c && !(config1 & 0x2a) && !(config2 & 0xf8)) { in lm90_detect_nuvoton()
2342 int address = client->addr; in lm90_detect_nxp() local
2351 if (address >= 0x48 && address <= 0x4f && in lm90_detect_nxp()
2368 int address = client->addr; in lm90_detect_gmt() local
2371 * According to the datasheet, G781 is supposed to be at I2C Address in lm90_detect_gmt()
2372 * 0x4c and have a chip ID of 0x01. G781-1 is supposed to be at I2C in lm90_detect_gmt()
2373 * address 0x4d and have a chip ID of 0x03. However, when support in lm90_detect_gmt()
2375 * chip ID of 0x01. A G781-1 at I2C address 0x4d was now found with in lm90_detect_gmt()
2390 (address == 0x4c || address == 0x4d) && in lm90_detect_gmt()
2422 int address = client->addr; in lm90_detect_ti() local
2437 if (address == 0x4c && !(chen & 0x03)) in lm90_detect_ti()
2439 else if (address >= 0x48 && address <= 0x4f) in lm90_detect_ti()
2447 /* Return 0 if detection is successful, -ENODEV otherwise */
2450 struct i2c_adapter *adapter = client->adapter; in lm90_detect()
2453 int address = client->addr; in lm90_detect() local
2455 (address >= 0x18 && address <= 0x1a) || in lm90_detect()
2456 (address >= 0x29 && address <= 0x2b) || in lm90_detect()
2457 (address >= 0x4c && address <= 0x4e); in lm90_detect()
2460 return -ENODEV; in lm90_detect()
2474 return -ENODEV; in lm90_detect()
2478 return -ENODEV; in lm90_detect()
2490 return -ENODEV; in lm90_detect()
2492 man_id = -1; in lm90_detect()
2495 case -1: /* Chip does not support man_id / chip_id */ in lm90_detect()
2545 dev_dbg(&adapter->dev, in lm90_detect()
2547 client->addr, man_id, chip_id); in lm90_detect()
2548 return -ENODEV; in lm90_detect()
2551 strscpy(info->type, name, I2C_NAME_SIZE); in lm90_detect()
2558 struct lm90_data *data = _data; in lm90_restore_conf() local
2559 struct i2c_client *client = data->client; in lm90_restore_conf()
2561 cancel_delayed_work_sync(&data->alert_work); in lm90_restore_conf()
2562 cancel_work_sync(&data->report_work); in lm90_restore_conf()
2565 if (data->flags & LM90_HAVE_CONVRATE) in lm90_restore_conf()
2566 lm90_write_convrate(data, data->convrate_orig); in lm90_restore_conf()
2567 lm90_write_reg(client, LM90_REG_CONFIG1, data->config_orig); in lm90_restore_conf()
2570 static int lm90_init_client(struct i2c_client *client, struct lm90_data *data) in lm90_init_client() argument
2572 struct device_node *np = client->dev.of_node; in lm90_init_client()
2575 if (data->flags & LM90_HAVE_CONVRATE) { in lm90_init_client()
2579 data->convrate_orig = convrate; in lm90_init_client()
2580 lm90_set_convrate(client, data, 500); /* 500ms; 2Hz conversion rate */ in lm90_init_client()
2582 data->update_interval = 500; in lm90_init_client()
2591 data->config_orig = config; in lm90_init_client()
2592 data->config = config; in lm90_init_client()
2595 if (data->flags & LM90_HAVE_EXTENDED_TEMP) { in lm90_init_client()
2596 if (of_property_read_bool(np, "ti,extended-range-enable")) in lm90_init_client()
2599 data->flags &= ~LM90_HAVE_EXTENDED_TEMP; in lm90_init_client()
2605 * to -64 degree) mode for the remote temperature sensor. in lm90_init_client()
2609 if (data->kind == max6680) in lm90_init_client()
2614 * 0 degrees to -64 degrees). Note that extended resolution is not in lm90_init_client()
2618 if (data->kind == max6654) in lm90_init_client()
2624 if (data->flags & LM90_HAVE_TEMP3) in lm90_init_client()
2631 if (client->irq) in lm90_init_client()
2635 lm90_update_confreg(data, config); in lm90_init_client()
2637 return devm_add_action_or_reset(&client->dev, lm90_restore_conf, data); in lm90_init_client()
2642 struct lm90_data *data = i2c_get_clientdata(client); in lm90_is_tripped() local
2645 ret = lm90_update_alarms(data, true); in lm90_is_tripped()
2649 return !!data->current_alarms; in lm90_is_tripped()
2669 struct lm90_data *data) in lm90_probe_channel_from_dt() argument
2674 struct device *dev = &client->dev; in lm90_probe_channel_from_dt()
2684 return -EINVAL; in lm90_probe_channel_from_dt()
2687 err = of_property_read_string(child, "label", &data->channel_label[id]); in lm90_probe_channel_from_dt()
2688 if (err == -ENODATA || err == -EILSEQ) { in lm90_probe_channel_from_dt()
2693 if (data->channel_label[id]) in lm90_probe_channel_from_dt()
2694 data->channel_config[id] |= HWMON_T_LABEL; in lm90_probe_channel_from_dt()
2696 err = of_property_read_s32(child, "temperature-offset-millicelsius", &val); in lm90_probe_channel_from_dt()
2699 dev_err(dev, "temperature-offset-millicelsius can't be set for internal channel\n"); in lm90_probe_channel_from_dt()
2700 return -EINVAL; in lm90_probe_channel_from_dt()
2703 err = lm90_set_temp_offset(data, lm90_temp_offset_index[id], id, val); in lm90_probe_channel_from_dt()
2715 struct lm90_data *data) in lm90_parse_dt_channel_info() argument
2719 struct device *dev = &client->dev; in lm90_parse_dt_channel_info()
2720 const struct device_node *np = dev->of_node; in lm90_parse_dt_channel_info()
2723 if (strcmp(child->name, "channel")) in lm90_parse_dt_channel_info()
2726 err = lm90_probe_channel_from_dt(client, child, data); in lm90_parse_dt_channel_info()
2745 struct device *dev = &client->dev; in lm90_probe()
2746 struct i2c_adapter *adapter = client->adapter; in lm90_probe()
2749 struct lm90_data *data; in lm90_probe() local
2756 data = devm_kzalloc(dev, sizeof(struct lm90_data), GFP_KERNEL); in lm90_probe()
2757 if (!data) in lm90_probe()
2758 return -ENOMEM; in lm90_probe()
2760 data->client = client; in lm90_probe()
2761 i2c_set_clientdata(client, data); in lm90_probe()
2762 mutex_init(&data->update_lock); in lm90_probe()
2763 INIT_DELAYED_WORK(&data->alert_work, lm90_alert_work); in lm90_probe()
2764 INIT_WORK(&data->report_work, lm90_report_alarms); in lm90_probe()
2767 if (client->dev.of_node) in lm90_probe()
2768 data->kind = (uintptr_t)of_device_get_match_data(&client->dev); in lm90_probe()
2770 data->kind = i2c_match_id(lm90_id, client)->driver_data; in lm90_probe()
2776 data->alert_alarms = lm90_params[data->kind].alert_alarms; in lm90_probe()
2777 data->resolution = lm90_params[data->kind].resolution ? : 11; in lm90_probe()
2780 data->flags = lm90_params[data->kind].flags; in lm90_probe()
2782 if ((data->flags & (LM90_HAVE_PEC | LM90_HAVE_PARTIAL_PEC)) && in lm90_probe()
2784 data->flags &= ~(LM90_HAVE_PEC | LM90_HAVE_PARTIAL_PEC); in lm90_probe()
2786 if ((data->flags & LM90_HAVE_PARTIAL_PEC) && in lm90_probe()
2788 data->flags &= ~LM90_HAVE_PARTIAL_PEC; in lm90_probe()
2790 data->chip.ops = &lm90_ops; in lm90_probe()
2791 data->chip.info = data->info; in lm90_probe()
2793 data->info[0] = &data->chip_info; in lm90_probe()
2794 info = &data->chip_info; in lm90_probe()
2795 info->type = hwmon_chip; in lm90_probe()
2796 info->config = data->chip_config; in lm90_probe()
2798 data->chip_config[0] = HWMON_C_REGISTER_TZ; in lm90_probe()
2799 if (data->flags & LM90_HAVE_ALARMS) in lm90_probe()
2800 data->chip_config[0] |= HWMON_C_ALARMS; in lm90_probe()
2801 if (data->flags & LM90_HAVE_CONVRATE) in lm90_probe()
2802 data->chip_config[0] |= HWMON_C_UPDATE_INTERVAL; in lm90_probe()
2803 if (data->flags & LM90_HAVE_FAULTQUEUE) in lm90_probe()
2804 data->chip_config[0] |= HWMON_C_TEMP_SAMPLES; in lm90_probe()
2805 data->info[1] = &data->temp_info; in lm90_probe()
2807 info = &data->temp_info; in lm90_probe()
2808 info->type = hwmon_temp; in lm90_probe()
2809 info->config = data->channel_config; in lm90_probe()
2811 data->channel_config[0] = HWMON_T_INPUT | HWMON_T_MAX | in lm90_probe()
2813 data->channel_config[1] = HWMON_T_INPUT | HWMON_T_MAX | in lm90_probe()
2816 if (data->flags & LM90_HAVE_LOW) { in lm90_probe()
2817 data->channel_config[0] |= HWMON_T_MIN | HWMON_T_MIN_ALARM; in lm90_probe()
2818 data->channel_config[1] |= HWMON_T_MIN | HWMON_T_MIN_ALARM; in lm90_probe()
2821 if (data->flags & LM90_HAVE_CRIT) { in lm90_probe()
2822 data->channel_config[0] |= HWMON_T_CRIT | HWMON_T_CRIT_ALARM | HWMON_T_CRIT_HYST; in lm90_probe()
2823 data->channel_config[1] |= HWMON_T_CRIT | HWMON_T_CRIT_ALARM | HWMON_T_CRIT_HYST; in lm90_probe()
2826 if (data->flags & LM90_HAVE_OFFSET) in lm90_probe()
2827 data->channel_config[1] |= HWMON_T_OFFSET; in lm90_probe()
2829 if (data->flags & LM90_HAVE_EMERGENCY) { in lm90_probe()
2830 data->channel_config[0] |= HWMON_T_EMERGENCY | in lm90_probe()
2832 data->channel_config[1] |= HWMON_T_EMERGENCY | in lm90_probe()
2836 if (data->flags & LM90_HAVE_EMERGENCY_ALARM) { in lm90_probe()
2837 data->channel_config[0] |= HWMON_T_EMERGENCY_ALARM; in lm90_probe()
2838 data->channel_config[1] |= HWMON_T_EMERGENCY_ALARM; in lm90_probe()
2841 if (data->flags & LM90_HAVE_TEMP3) { in lm90_probe()
2842 data->channel_config[2] = HWMON_T_INPUT | in lm90_probe()
2847 if (data->flags & LM90_HAVE_EMERGENCY) { in lm90_probe()
2848 data->channel_config[2] |= HWMON_T_EMERGENCY | in lm90_probe()
2851 if (data->flags & LM90_HAVE_EMERGENCY_ALARM) in lm90_probe()
2852 data->channel_config[2] |= HWMON_T_EMERGENCY_ALARM; in lm90_probe()
2853 if (data->flags & LM90_HAVE_OFFSET) in lm90_probe()
2854 data->channel_config[2] |= HWMON_T_OFFSET; in lm90_probe()
2857 data->faultqueue_mask = lm90_params[data->kind].faultqueue_mask; in lm90_probe()
2858 data->faultqueue_depth = lm90_params[data->kind].faultqueue_depth; in lm90_probe()
2859 data->reg_local_ext = lm90_params[data->kind].reg_local_ext; in lm90_probe()
2860 if (data->flags & LM90_HAVE_REMOTE_EXT) in lm90_probe()
2861 data->reg_remote_ext = LM90_REG_REMOTE_TEMPL; in lm90_probe()
2862 data->reg_status2 = lm90_params[data->kind].reg_status2; in lm90_probe()
2865 data->max_convrate = lm90_params[data->kind].max_convrate; in lm90_probe()
2867 /* Parse device-tree channel information */ in lm90_probe()
2868 if (client->dev.of_node) { in lm90_probe()
2869 err = lm90_parse_dt_channel_info(client, data); in lm90_probe()
2875 err = lm90_init_client(client, data); in lm90_probe()
2885 if (data->flags & (LM90_HAVE_PEC | LM90_HAVE_PARTIAL_PEC)) { in lm90_probe()
2894 hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name, in lm90_probe()
2895 data, &data->chip, in lm90_probe()
2900 data->hwmon_dev = hwmon_dev; in lm90_probe()
2902 if (client->irq) { in lm90_probe()
2903 dev_dbg(dev, "IRQ: %d\n", client->irq); in lm90_probe()
2904 err = devm_request_threaded_irq(dev, client->irq, in lm90_probe()
2908 dev_err(dev, "cannot request IRQ %d\n", client->irq); in lm90_probe()
2928 struct lm90_data *data = i2c_get_clientdata(client); in lm90_alert() local
2930 if ((data->flags & LM90_HAVE_BROKEN_ALERT) && in lm90_alert()
2931 (data->current_alarms & data->alert_alarms)) { in lm90_alert()
2932 if (!(data->config & 0x80)) { in lm90_alert()
2933 dev_dbg(&client->dev, "Disabling ALERT#\n"); in lm90_alert()
2934 lm90_update_confreg(data, data->config | 0x80); in lm90_alert()
2936 schedule_delayed_work(&data->alert_work, in lm90_alert()
2937 max_t(int, HZ, msecs_to_jiffies(data->update_interval))); in lm90_alert()
2940 dev_dbg(&client->dev, "Everything OK\n"); in lm90_alert()
2946 struct lm90_data *data = dev_get_drvdata(dev); in lm90_suspend() local
2947 struct i2c_client *client = data->client; in lm90_suspend()
2949 if (client->irq) in lm90_suspend()
2950 disable_irq(client->irq); in lm90_suspend()
2957 struct lm90_data *data = dev_get_drvdata(dev); in lm90_resume() local
2958 struct i2c_client *client = data->client; in lm90_resume()
2960 if (client->irq) in lm90_resume()
2961 enable_irq(client->irq); in lm90_resume()