Lines Matching +full:data +full:- +full:channel
1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * Copyright (c) 2013, 2014 Guenter Roeck <linux@roeck-us.net>
47 #define LM95234_REG_TCRIT2(x) ((x) + 0x49) /* Remote channel 1,2 */
54 /* Client data (each client gets its own) */
68 regs[0] = LM95234_REG_UTEMPH(index - 1); in lm95234_read_temp()
69 regs[1] = LM95234_REG_UTEMPL(index - 1); in lm95234_read_temp()
101 *val = (regvals[0] - regvals[1]) * 1000; in lm95234_hyst_get()
105 static ssize_t lm95234_hyst_set(struct lm95234_data *data, long val) in lm95234_hyst_set() argument
110 mutex_lock(&data->update_lock); in lm95234_hyst_set()
112 ret = regmap_read(data->regmap, LM95234_REG_TCRIT1(0), &tcrit); in lm95234_hyst_set()
116 val = DIV_ROUND_CLOSEST(clamp_val(val, -255000, 255000), 1000); in lm95234_hyst_set()
117 val = clamp_val((int)tcrit - val, 0, 31); in lm95234_hyst_set()
119 ret = regmap_write(data->regmap, LM95234_REG_TCRIT_HYST, val); in lm95234_hyst_set()
121 mutex_unlock(&data->update_lock); in lm95234_hyst_set()
125 static int lm95234_crit_reg(int channel) in lm95234_crit_reg() argument
127 if (channel == 1 || channel == 2) in lm95234_crit_reg()
128 return LM95234_REG_TCRIT2(channel - 1); in lm95234_crit_reg()
129 return LM95234_REG_TCRIT1(channel); in lm95234_crit_reg()
132 static int lm95234_temp_write(struct device *dev, u32 attr, int channel, long val) in lm95234_temp_write() argument
134 struct lm95234_data *data = dev_get_drvdata(dev); in lm95234_temp_write() local
135 struct regmap *regmap = data->regmap; in lm95234_temp_write()
140 return -EINVAL; in lm95234_temp_write()
142 BIT(channel), val ? BIT(channel) : 0); in lm95234_temp_write()
145 return -EINVAL; in lm95234_temp_write()
147 BIT(channel), in lm95234_temp_write()
148 val == 1 ? BIT(channel) : 0); in lm95234_temp_write()
150 val = DIV_ROUND_CLOSEST(clamp_val(val, -64000, 63500), 500); in lm95234_temp_write()
151 return regmap_write(regmap, LM95234_REG_OFFSET(channel - 1), val); in lm95234_temp_write()
153 val = clamp_val(val, 0, channel == 1 ? 127000 : 255000); in lm95234_temp_write()
155 return regmap_write(regmap, lm95234_crit_reg(channel), val); in lm95234_temp_write()
157 return lm95234_hyst_set(data, val); in lm95234_temp_write()
160 return regmap_write(regmap, LM95234_REG_TCRIT1(channel), val); in lm95234_temp_write()
162 return -EOPNOTSUPP; in lm95234_temp_write()
167 static int lm95234_alarm_reg(int channel) in lm95234_alarm_reg() argument
169 if (channel == 1 || channel == 2) in lm95234_alarm_reg()
174 static int lm95234_temp_read(struct device *dev, u32 attr, int channel, long *val) in lm95234_temp_read() argument
176 struct lm95234_data *data = dev_get_drvdata(dev); in lm95234_temp_read() local
177 struct regmap *regmap = data->regmap; in lm95234_temp_read()
186 *val = !!(regval & BIT(channel)); in lm95234_temp_read()
189 return lm95234_read_temp(regmap, channel, val); in lm95234_temp_read()
191 ret = regmap_read(regmap, lm95234_alarm_reg(channel), ®val); in lm95234_temp_read()
194 *val = !!(regval & BIT(channel)); in lm95234_temp_read()
200 *val = !!(regval & BIT(channel)); in lm95234_temp_read()
203 return lm95234_hyst_get(regmap, LM95234_REG_TCRIT1(channel), val); in lm95234_temp_read()
208 *val = (regval & BIT(channel)) ? 1 : 2; in lm95234_temp_read()
211 ret = regmap_read(regmap, LM95234_REG_OFFSET(channel - 1), ®val); in lm95234_temp_read()
220 mask = (BIT(0) | BIT(1)) << ((channel - 1) << 1); in lm95234_temp_read()
224 ret = regmap_read(regmap, lm95234_crit_reg(channel), ®val); in lm95234_temp_read()
230 return lm95234_hyst_get(regmap, lm95234_crit_reg(channel), val); in lm95234_temp_read()
232 ret = regmap_read(regmap, LM95234_REG_TCRIT1(channel), ®val); in lm95234_temp_read()
238 return -EOPNOTSUPP; in lm95234_temp_read()
247 struct lm95234_data *data = dev_get_drvdata(dev); in lm95234_chip_write() local
252 return regmap_write(data->regmap, LM95234_REG_CONVRATE, val); in lm95234_chip_write()
254 return -EOPNOTSUPP; in lm95234_chip_write()
261 struct lm95234_data *data = dev_get_drvdata(dev); in lm95234_chip_read() local
267 ret = regmap_read(data->regmap, LM95234_REG_CONVRATE, &convrate); in lm95234_chip_read()
274 return -EOPNOTSUPP; in lm95234_chip_read()
280 u32 attr, int channel, long val) in lm95234_write() argument
286 return lm95234_temp_write(dev, attr, channel, val); in lm95234_write()
288 return -EOPNOTSUPP; in lm95234_write()
293 u32 attr, int channel, long *val) in lm95234_read() argument
299 return lm95234_temp_read(dev, attr, channel, val); in lm95234_read()
301 return -EOPNOTSUPP; in lm95234_read()
306 u32 attr, int channel) in lm95234_is_visible() argument
308 const struct lm95234_data *data = _data; in lm95234_is_visible() local
310 if (data->type == lm95233 && channel > 2) in lm95234_is_visible()
329 return (channel && channel < 3) ? 0444 : 0; in lm95234_is_visible()
332 return channel ? 0644 : 0; in lm95234_is_visible()
334 return channel ? 0444 : 0; in lm95234_is_visible()
339 return channel ? 0444 : 0644; in lm95234_is_visible()
341 return (channel && channel < 3) ? 0644 : 0; in lm95234_is_visible()
427 struct i2c_adapter *adapter = client->adapter; in lm95234_detect()
428 int address = client->addr; in lm95234_detect()
434 return -ENODEV; in lm95234_detect()
438 return -ENODEV; in lm95234_detect()
444 return -ENODEV; in lm95234_detect()
451 return -ENODEV; in lm95234_detect()
457 return -ENODEV; in lm95234_detect()
462 return -ENODEV; in lm95234_detect()
466 return -ENODEV; in lm95234_detect()
470 return -ENODEV; in lm95234_detect()
474 return -ENODEV; in lm95234_detect()
478 return -ENODEV; in lm95234_detect()
480 strscpy(info->type, name, I2C_NAME_SIZE); in lm95234_detect()
512 struct device *dev = &client->dev; in lm95234_probe()
513 struct lm95234_data *data; in lm95234_probe() local
518 data = devm_kzalloc(dev, sizeof(struct lm95234_data), GFP_KERNEL); in lm95234_probe()
519 if (!data) in lm95234_probe()
520 return -ENOMEM; in lm95234_probe()
522 data->type = (uintptr_t)i2c_get_match_data(client); in lm95234_probe()
528 data->regmap = regmap; in lm95234_probe()
529 mutex_init(&data->update_lock); in lm95234_probe()
536 hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name, in lm95234_probe()
537 data, &lm95234_chip_info, NULL); in lm95234_probe()
541 /* Driver data (common to all clients) */
562 MODULE_AUTHOR("Guenter Roeck <linux@roeck-us.net>");