Lines Matching refs:ina
123 static inline bool ina3221_is_enabled(struct ina3221_data *ina, int channel) in ina3221_is_enabled() argument
125 return pm_runtime_active(ina->pm_dev) && in ina3221_is_enabled()
126 (ina->reg_config & INA3221_CONFIG_CHx_EN(channel)); in ina3221_is_enabled()
165 static inline int ina3221_wait_for_data(struct ina3221_data *ina) in ina3221_wait_for_data() argument
169 wait = ina3221_reg_to_interval_us(ina->reg_config); in ina3221_wait_for_data()
172 return regmap_field_read_poll_timeout(ina->fields[F_CVRF], in ina3221_wait_for_data()
176 static int ina3221_read_value(struct ina3221_data *ina, unsigned int reg, in ina3221_read_value() argument
182 ret = regmap_read(ina->regmap, reg, ®val); in ina3221_read_value()
202 struct ina3221_data *ina = dev_get_drvdata(dev); in ina3221_read_chip() local
207 regval = INA3221_CONFIG_AVG(ina->reg_config); in ina3221_read_chip()
212 *val = ina3221_reg_to_interval_us(ina->reg_config); in ina3221_read_chip()
223 struct ina3221_data *ina = dev_get_drvdata(dev); in ina3221_read_in() local
232 if (!ina3221_is_enabled(ina, channel)) in ina3221_read_in()
236 if (ina->single_shot) in ina3221_read_in()
237 regmap_write(ina->regmap, INA3221_CONFIG, in ina3221_read_in()
238 ina->reg_config); in ina3221_read_in()
240 ret = ina3221_wait_for_data(ina); in ina3221_read_in()
244 ret = ina3221_read_value(ina, reg, ®val); in ina3221_read_in()
255 *val = ina3221_is_enabled(ina, channel); in ina3221_read_in()
273 struct ina3221_data *ina = dev_get_drvdata(dev); in ina3221_read_curr() local
274 struct ina3221_input *input = &ina->inputs[channel]; in ina3221_read_curr()
281 if (!ina3221_is_enabled(ina, channel)) in ina3221_read_curr()
285 if (ina->single_shot) in ina3221_read_curr()
286 regmap_write(ina->regmap, INA3221_CONFIG, in ina3221_read_curr()
287 ina->reg_config); in ina3221_read_curr()
289 ret = ina3221_wait_for_data(ina); in ina3221_read_curr()
296 ret = ina3221_read_value(ina, reg, ®val); in ina3221_read_curr()
308 if (!ina3221_is_enabled(ina, channel)) { in ina3221_read_curr()
313 ret = regmap_field_read(ina->fields[reg], ®val); in ina3221_read_curr()
325 struct ina3221_data *ina = dev_get_drvdata(dev); in ina3221_write_chip() local
334 tmp = (ina->reg_config & ~INA3221_CONFIG_AVG_MASK) | in ina3221_write_chip()
336 ret = regmap_write(ina->regmap, INA3221_CONFIG, tmp); in ina3221_write_chip()
341 ina->reg_config = tmp; in ina3221_write_chip()
344 tmp = ina3221_interval_ms_to_conv_time(ina->reg_config, val); in ina3221_write_chip()
350 tmp = (ina->reg_config & ~tmp) | in ina3221_write_chip()
353 ret = regmap_write(ina->regmap, INA3221_CONFIG, tmp); in ina3221_write_chip()
358 ina->reg_config = tmp; in ina3221_write_chip()
368 struct ina3221_data *ina = dev_get_drvdata(dev); in ina3221_write_curr() local
369 struct ina3221_input *input = &ina->inputs[channel]; in ina3221_write_curr()
387 return regmap_write(ina->regmap, reg, regval); in ina3221_write_curr()
392 struct ina3221_data *ina = dev_get_drvdata(dev); in ina3221_write_enable() local
394 u16 config_old = ina->reg_config & mask; in ina3221_write_enable()
406 ret = pm_runtime_get_sync(ina->pm_dev); in ina3221_write_enable()
414 tmp = (ina->reg_config & ~mask) | (config & mask); in ina3221_write_enable()
415 ret = regmap_write(ina->regmap, INA3221_CONFIG, tmp); in ina3221_write_enable()
420 ina->reg_config = tmp; in ina3221_write_enable()
424 pm_runtime_put_sync(ina->pm_dev); in ina3221_write_enable()
432 pm_runtime_put_sync(ina->pm_dev); in ina3221_write_enable()
441 struct ina3221_data *ina = dev_get_drvdata(dev); in ina3221_read() local
444 mutex_lock(&ina->lock); in ina3221_read()
462 mutex_unlock(&ina->lock); in ina3221_read()
470 struct ina3221_data *ina = dev_get_drvdata(dev); in ina3221_write() local
473 mutex_lock(&ina->lock); in ina3221_write()
491 mutex_unlock(&ina->lock); in ina3221_write()
499 struct ina3221_data *ina = dev_get_drvdata(dev); in ina3221_read_string() local
502 *str = ina->inputs[index].label; in ina3221_read_string()
511 const struct ina3221_data *ina = drvdata; in ina3221_is_visible() local
531 input = &ina->inputs[channel - 1]; in ina3221_is_visible()
601 struct ina3221_data *ina = dev_get_drvdata(dev); in ina3221_shunt_show() local
603 struct ina3221_input *input = &ina->inputs[channel]; in ina3221_shunt_show()
613 struct ina3221_data *ina = dev_get_drvdata(dev); in ina3221_shunt_store() local
615 struct ina3221_input *input = &ina->inputs[channel]; in ina3221_shunt_store()
663 struct ina3221_data *ina) in ina3221_probe_child_from_dt() argument
678 input = &ina->inputs[val]; in ina3221_probe_child_from_dt()
702 static int ina3221_probe_from_dt(struct device *dev, struct ina3221_data *ina) in ina3221_probe_from_dt() argument
712 ina->single_shot = of_property_read_bool(np, "ti,single-shot"); in ina3221_probe_from_dt()
715 ret = ina3221_probe_child_from_dt(dev, child, ina); in ina3221_probe_from_dt()
729 struct ina3221_data *ina; in ina3221_probe() local
733 ina = devm_kzalloc(dev, sizeof(*ina), GFP_KERNEL); in ina3221_probe()
734 if (!ina) in ina3221_probe()
737 ina->regmap = devm_regmap_init_i2c(client, &ina3221_regmap_config); in ina3221_probe()
738 if (IS_ERR(ina->regmap)) { in ina3221_probe()
740 return PTR_ERR(ina->regmap); in ina3221_probe()
744 ina->fields[i] = devm_regmap_field_alloc(dev, in ina3221_probe()
745 ina->regmap, in ina3221_probe()
747 if (IS_ERR(ina->fields[i])) { in ina3221_probe()
749 return PTR_ERR(ina->fields[i]); in ina3221_probe()
754 ina->inputs[i].shunt_resistor = INA3221_RSHUNT_DEFAULT; in ina3221_probe()
756 ret = ina3221_probe_from_dt(dev, ina); in ina3221_probe()
763 ina->reg_config = INA3221_CONFIG_DEFAULT; in ina3221_probe()
766 if (ina->single_shot) in ina3221_probe()
767 ina->reg_config &= ~INA3221_CONFIG_MODE_CONTINUOUS; in ina3221_probe()
771 if (ina->inputs[i].disconnected) in ina3221_probe()
772 ina->reg_config &= ~INA3221_CONFIG_CHx_EN(i); in ina3221_probe()
775 ina->pm_dev = dev; in ina3221_probe()
776 mutex_init(&ina->lock); in ina3221_probe()
777 dev_set_drvdata(dev, ina); in ina3221_probe()
780 pm_runtime_enable(ina->pm_dev); in ina3221_probe()
784 if (ina->inputs[i].disconnected) in ina3221_probe()
787 ret = pm_runtime_get_sync(ina->pm_dev); in ina3221_probe()
792 hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name, ina, in ina3221_probe()
804 pm_runtime_disable(ina->pm_dev); in ina3221_probe()
805 pm_runtime_set_suspended(ina->pm_dev); in ina3221_probe()
808 pm_runtime_put_noidle(ina->pm_dev); in ina3221_probe()
809 mutex_destroy(&ina->lock); in ina3221_probe()
816 struct ina3221_data *ina = dev_get_drvdata(&client->dev); in ina3221_remove() local
819 pm_runtime_disable(ina->pm_dev); in ina3221_remove()
820 pm_runtime_set_suspended(ina->pm_dev); in ina3221_remove()
824 pm_runtime_put_noidle(ina->pm_dev); in ina3221_remove()
826 mutex_destroy(&ina->lock); in ina3221_remove()
833 struct ina3221_data *ina = dev_get_drvdata(dev); in ina3221_suspend() local
837 ret = regmap_read(ina->regmap, INA3221_CONFIG, &ina->reg_config); in ina3221_suspend()
842 ret = regmap_update_bits(ina->regmap, INA3221_CONFIG, in ina3221_suspend()
848 regcache_cache_only(ina->regmap, true); in ina3221_suspend()
849 regcache_mark_dirty(ina->regmap); in ina3221_suspend()
856 struct ina3221_data *ina = dev_get_drvdata(dev); in ina3221_resume() local
859 regcache_cache_only(ina->regmap, false); in ina3221_resume()
862 ret = regmap_field_write(ina->fields[F_RST], true); in ina3221_resume()
869 ret = regcache_sync(ina->regmap); in ina3221_resume()
874 ret = regmap_write(ina->regmap, INA3221_CONFIG, ina->reg_config); in ina3221_resume()