Lines Matching +full:data +full:- +full:channel

1 // SPDX-License-Identifier: GPL-2.0-or-later
75 /* Client data (each client gets its own) */
80 unsigned long interval; /* in milli-seconds */
102 struct lm95241_data *data = dev_get_drvdata(dev); in lm95241_update_device() local
103 struct i2c_client *client = data->client; in lm95241_update_device()
105 mutex_lock(&data->update_lock); in lm95241_update_device()
107 if (time_after(jiffies, data->last_updated in lm95241_update_device()
108 + msecs_to_jiffies(data->interval)) || in lm95241_update_device()
109 !data->valid) { in lm95241_update_device()
112 dev_dbg(dev, "Updating lm95241 data.\n"); in lm95241_update_device()
114 data->temp[i] in lm95241_update_device()
118 data->status = i2c_smbus_read_byte_data(client, in lm95241_update_device()
120 data->last_updated = jiffies; in lm95241_update_device()
121 data->valid = true; in lm95241_update_device()
124 mutex_unlock(&data->update_lock); in lm95241_update_device()
126 return data; in lm95241_update_device()
129 static int lm95241_read_chip(struct device *dev, u32 attr, int channel, in lm95241_read_chip() argument
132 struct lm95241_data *data = dev_get_drvdata(dev); in lm95241_read_chip() local
136 *val = data->interval; in lm95241_read_chip()
139 return -EOPNOTSUPP; in lm95241_read_chip()
143 static int lm95241_read_temp(struct device *dev, u32 attr, int channel, in lm95241_read_temp() argument
146 struct lm95241_data *data = lm95241_update_device(dev); in lm95241_read_temp() local
150 if (!channel || (data->config & BIT(channel - 1))) in lm95241_read_temp()
151 *val = temp_from_reg_signed(data->temp[channel * 2], in lm95241_read_temp()
152 data->temp[channel * 2 + 1]); in lm95241_read_temp()
154 *val = temp_from_reg_unsigned(data->temp[channel * 2], in lm95241_read_temp()
155 data->temp[channel * 2 + 1]); in lm95241_read_temp()
158 if (channel == 1) in lm95241_read_temp()
159 *val = (data->config & R1DF_MASK) ? -128000 : 0; in lm95241_read_temp()
161 *val = (data->config & R2DF_MASK) ? -128000 : 0; in lm95241_read_temp()
164 if (channel == 1) in lm95241_read_temp()
165 *val = (data->config & R1DF_MASK) ? 127875 : 255875; in lm95241_read_temp()
167 *val = (data->config & R2DF_MASK) ? 127875 : 255875; in lm95241_read_temp()
170 if (channel == 1) in lm95241_read_temp()
171 *val = (data->model & R1MS_MASK) ? 1 : 2; in lm95241_read_temp()
173 *val = (data->model & R2MS_MASK) ? 1 : 2; in lm95241_read_temp()
176 if (channel == 1) in lm95241_read_temp()
177 *val = !!(data->status & R1DM); in lm95241_read_temp()
179 *val = !!(data->status & R2DM); in lm95241_read_temp()
182 return -EOPNOTSUPP; in lm95241_read_temp()
187 u32 attr, int channel, long *val) in lm95241_read() argument
191 return lm95241_read_chip(dev, attr, channel, val); in lm95241_read()
193 return lm95241_read_temp(dev, attr, channel, val); in lm95241_read()
195 return -EOPNOTSUPP; in lm95241_read()
199 static int lm95241_write_chip(struct device *dev, u32 attr, int channel, in lm95241_write_chip() argument
202 struct lm95241_data *data = dev_get_drvdata(dev); in lm95241_write_chip() local
207 mutex_lock(&data->update_lock); in lm95241_write_chip()
211 config = data->config & ~CFG_CRMASK; in lm95241_write_chip()
225 data->interval = convrate; in lm95241_write_chip()
226 data->config = config; in lm95241_write_chip()
227 ret = i2c_smbus_write_byte_data(data->client, in lm95241_write_chip()
231 ret = -EOPNOTSUPP; in lm95241_write_chip()
234 mutex_unlock(&data->update_lock); in lm95241_write_chip()
238 static int lm95241_write_temp(struct device *dev, u32 attr, int channel, in lm95241_write_temp() argument
241 struct lm95241_data *data = dev_get_drvdata(dev); in lm95241_write_temp() local
242 struct i2c_client *client = data->client; in lm95241_write_temp()
245 mutex_lock(&data->update_lock); in lm95241_write_temp()
249 if (channel == 1) { in lm95241_write_temp()
251 data->config |= R1DF_MASK; in lm95241_write_temp()
253 data->config &= ~R1DF_MASK; in lm95241_write_temp()
256 data->config |= R2DF_MASK; in lm95241_write_temp()
258 data->config &= ~R2DF_MASK; in lm95241_write_temp()
260 data->valid = false; in lm95241_write_temp()
262 data->config); in lm95241_write_temp()
265 if (channel == 1) { in lm95241_write_temp()
267 data->config |= R1DF_MASK; in lm95241_write_temp()
269 data->config &= ~R1DF_MASK; in lm95241_write_temp()
272 data->config |= R2DF_MASK; in lm95241_write_temp()
274 data->config &= ~R2DF_MASK; in lm95241_write_temp()
276 data->valid = false; in lm95241_write_temp()
278 data->config); in lm95241_write_temp()
282 ret = -EINVAL; in lm95241_write_temp()
285 if (channel == 1) { in lm95241_write_temp()
286 data->trutherm &= ~(TT_MASK << TT1_SHIFT); in lm95241_write_temp()
288 data->model |= R1MS_MASK; in lm95241_write_temp()
289 data->trutherm |= (TT_ON << TT1_SHIFT); in lm95241_write_temp()
291 data->model &= ~R1MS_MASK; in lm95241_write_temp()
292 data->trutherm |= (TT_OFF << TT1_SHIFT); in lm95241_write_temp()
295 data->trutherm &= ~(TT_MASK << TT2_SHIFT); in lm95241_write_temp()
297 data->model |= R2MS_MASK; in lm95241_write_temp()
298 data->trutherm |= (TT_ON << TT2_SHIFT); in lm95241_write_temp()
300 data->model &= ~R2MS_MASK; in lm95241_write_temp()
301 data->trutherm |= (TT_OFF << TT2_SHIFT); in lm95241_write_temp()
306 data->model); in lm95241_write_temp()
310 data->trutherm); in lm95241_write_temp()
313 ret = -EOPNOTSUPP; in lm95241_write_temp()
317 mutex_unlock(&data->update_lock); in lm95241_write_temp()
323 u32 attr, int channel, long val) in lm95241_write() argument
327 return lm95241_write_chip(dev, attr, channel, val); in lm95241_write()
329 return lm95241_write_temp(dev, attr, channel, val); in lm95241_write()
331 return -EOPNOTSUPP; in lm95241_write()
335 static umode_t lm95241_is_visible(const void *data, in lm95241_is_visible() argument
337 u32 attr, int channel) in lm95241_is_visible() argument
364 /* Return 0 if detection is successful, -ENODEV otherwise */
368 struct i2c_adapter *adapter = new_client->adapter; in lm95241_detect()
373 return -ENODEV; in lm95241_detect()
377 return -ENODEV; in lm95241_detect()
388 return -ENODEV; in lm95241_detect()
392 strscpy(info->type, name, I2C_NAME_SIZE); in lm95241_detect()
397 struct lm95241_data *data) in lm95241_init_client() argument
399 data->interval = 1000; in lm95241_init_client()
400 data->config = CFG_CR1000; in lm95241_init_client()
401 data->trutherm = (TT_OFF << TT1_SHIFT) | (TT_OFF << TT2_SHIFT); in lm95241_init_client()
403 i2c_smbus_write_byte_data(client, LM95241_REG_RW_CONFIG, data->config); in lm95241_init_client()
407 data->trutherm); in lm95241_init_client()
409 data->model); in lm95241_init_client()
437 struct device *dev = &client->dev; in lm95241_probe()
438 struct lm95241_data *data; in lm95241_probe() local
441 data = devm_kzalloc(dev, sizeof(struct lm95241_data), GFP_KERNEL); in lm95241_probe()
442 if (!data) in lm95241_probe()
443 return -ENOMEM; in lm95241_probe()
445 data->client = client; in lm95241_probe()
446 mutex_init(&data->update_lock); in lm95241_probe()
449 lm95241_init_client(client, data); in lm95241_probe()
451 hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name, in lm95241_probe()
452 data, in lm95241_probe()
458 /* Driver data (common to all clients) */