Lines Matching refs:data

168 static void ina226_set_update_interval(struct ina2xx_data *data)  in ina226_set_update_interval()  argument
172 ms = ina226_reg_to_interval(data->curr_config); in ina226_set_update_interval()
173 data->update_interval = msecs_to_jiffies(ms); in ina226_set_update_interval()
176 static int ina2xx_calibrate(struct ina2xx_data *data) in ina2xx_calibrate() argument
178 u16 val = DIV_ROUND_CLOSEST(data->config->calibration_factor, in ina2xx_calibrate()
179 data->rshunt); in ina2xx_calibrate()
181 return i2c_smbus_write_word_swapped(data->client, in ina2xx_calibrate()
188 static int ina2xx_init(struct ina2xx_data *data) in ina2xx_init() argument
190 struct i2c_client *client = data->client; in ina2xx_init()
195 data->curr_config); in ina2xx_init()
203 return ina2xx_calibrate(data); in ina2xx_init()
208 struct ina2xx_data *data = dev_get_drvdata(dev); in ina2xx_do_update() local
209 struct i2c_client *client = data->client; in ina2xx_do_update()
216 for (i = 0; i < data->config->registers; i++) { in ina2xx_do_update()
220 data->regs[i] = rv; in ina2xx_do_update()
229 if (data->regs[INA2XX_CALIBRATION] == 0) { in ina2xx_do_update()
232 rv = ina2xx_init(data); in ina2xx_do_update()
244 data->last_updated = jiffies; in ina2xx_do_update()
245 data->valid = 1; in ina2xx_do_update()
261 struct ina2xx_data *data = dev_get_drvdata(dev); in ina2xx_update_device() local
262 struct ina2xx_data *ret = data; in ina2xx_update_device()
266 mutex_lock(&data->update_lock); in ina2xx_update_device()
268 after = data->last_updated + data->update_interval; in ina2xx_update_device()
269 if (time_after(jiffies, after) || !data->valid) { in ina2xx_update_device()
275 mutex_unlock(&data->update_lock); in ina2xx_update_device()
279 static int ina2xx_get_value(struct ina2xx_data *data, u8 reg) in ina2xx_get_value() argument
286 val = DIV_ROUND_CLOSEST((s16)data->regs[reg], in ina2xx_get_value()
287 data->config->shunt_div); in ina2xx_get_value()
290 val = (data->regs[reg] >> data->config->bus_voltage_shift) in ina2xx_get_value()
291 * data->config->bus_voltage_lsb; in ina2xx_get_value()
295 val = data->regs[reg] * data->config->power_lsb; in ina2xx_get_value()
299 val = (s16)data->regs[reg]; in ina2xx_get_value()
302 val = DIV_ROUND_CLOSEST(data->config->calibration_factor, in ina2xx_get_value()
303 data->regs[reg]); in ina2xx_get_value()
319 struct ina2xx_data *data = ina2xx_update_device(dev); in ina2xx_show_value() local
321 if (IS_ERR(data)) in ina2xx_show_value()
322 return PTR_ERR(data); in ina2xx_show_value()
325 ina2xx_get_value(data, attr->index)); in ina2xx_show_value()
332 struct ina2xx_data *data = ina2xx_update_device(dev); in ina2xx_set_shunt() local
336 if (IS_ERR(data)) in ina2xx_set_shunt()
337 return PTR_ERR(data); in ina2xx_set_shunt()
345 val > data->config->calibration_factor) in ina2xx_set_shunt()
348 mutex_lock(&data->update_lock); in ina2xx_set_shunt()
349 data->rshunt = val; in ina2xx_set_shunt()
350 status = ina2xx_calibrate(data); in ina2xx_set_shunt()
351 mutex_unlock(&data->update_lock); in ina2xx_set_shunt()
362 struct ina2xx_data *data = dev_get_drvdata(dev); in ina226_set_interval() local
373 mutex_lock(&data->update_lock); in ina226_set_interval()
374 data->curr_config = ina226_interval_to_reg(val, in ina226_set_interval()
375 data->regs[INA2XX_CONFIG]); in ina226_set_interval()
376 status = i2c_smbus_write_word_swapped(data->client, in ina226_set_interval()
378 data->curr_config); in ina226_set_interval()
380 ina226_set_update_interval(data); in ina226_set_interval()
382 data->valid = 0; in ina226_set_interval()
383 mutex_unlock(&data->update_lock); in ina226_set_interval()
393 struct ina2xx_data *data = ina2xx_update_device(dev); in ina226_show_interval() local
395 if (IS_ERR(data)) in ina226_show_interval()
396 return PTR_ERR(data); in ina226_show_interval()
404 ina226_reg_to_interval(data->regs[INA2XX_CONFIG])); in ina226_show_interval()
461 struct ina2xx_data *data; in ina2xx_probe() local
469 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); in ina2xx_probe()
470 if (!data) in ina2xx_probe()
475 data->rshunt = pdata->shunt_uohms; in ina2xx_probe()
478 data->rshunt = val; in ina2xx_probe()
480 data->rshunt = INA2XX_RSHUNT_DEFAULT; in ina2xx_probe()
484 data->kind = id->driver_data; in ina2xx_probe()
485 data->config = &ina2xx_config[data->kind]; in ina2xx_probe()
486 data->curr_config = data->config->config_default; in ina2xx_probe()
487 data->client = client; in ina2xx_probe()
493 if (data->kind == ina226) in ina2xx_probe()
494 ina226_set_update_interval(data); in ina2xx_probe()
496 data->update_interval = HZ / INA2XX_CONVERSION_RATE; in ina2xx_probe()
498 if (data->rshunt <= 0 || in ina2xx_probe()
499 data->rshunt > data->config->calibration_factor) in ina2xx_probe()
502 ret = ina2xx_init(data); in ina2xx_probe()
508 mutex_init(&data->update_lock); in ina2xx_probe()
510 data->groups[group++] = &ina2xx_group; in ina2xx_probe()
511 if (data->kind == ina226) in ina2xx_probe()
512 data->groups[group++] = &ina226_group; in ina2xx_probe()
515 data, data->groups); in ina2xx_probe()
520 id->name, data->rshunt); in ina2xx_probe()