Lines Matching +full:current +full:- +full:lsb
4 * SPDX-License-Identifier: Apache-2.0
13 #include <zephyr/dt-bindings/sensor/ina226.h>
40 int16_t current; member
58 /** @brief Calibration scaling value (scaled by 10^-5) */
61 /** @brief The LSB value for the bus voltage register, in microvolts/LSB. */
64 /** @brief The LSB value for the shunt voltage register, in microvolts/LSB. */
98 val->val1 = value_microX / 1000000L; in micro_s32_to_sensor_value()
99 val->val2 = value_microX % 1000000L; in micro_s32_to_sensor_value()
105 const struct ina226_data *data = dev->data; in ina226_channel_get()
106 const struct ina226_config *config = dev->config; in ina226_channel_get()
110 micro_s32_to_sensor_value(val, INA226_BUS_VOLTAGE_TO_uV(data->bus_voltage)); in ina226_channel_get()
113 /* see datasheet "Current and Power calculations" section */ in ina226_channel_get()
114 micro_s32_to_sensor_value(val, data->current * config->current_lsb); in ina226_channel_get()
119 INA226_POWER_TO_uW((uint32_t)data->power * config->current_lsb)); in ina226_channel_get()
123 micro_s32_to_sensor_value(val, INA226_SHUNT_VOLTAGE_TO_uV(data->shunt_voltage)); in ina226_channel_get()
127 return -ENOTSUP; in ina226_channel_get()
135 struct ina226_data *data = dev->data; in ina226_read_data()
136 const struct ina226_config *config = dev->config; in ina226_read_data()
139 if ((data->chan == SENSOR_CHAN_ALL) || (data->chan == SENSOR_CHAN_VOLTAGE)) { in ina226_read_data()
140 ret = ina226_reg_read_16(&config->bus, INA226_REG_BUS_VOLT, &data->bus_voltage); in ina226_read_data()
147 if ((data->chan == SENSOR_CHAN_ALL) || (data->chan == SENSOR_CHAN_CURRENT)) { in ina226_read_data()
148 ret = ina226_reg_read_16(&config->bus, INA226_REG_CURRENT, &data->current); in ina226_read_data()
150 LOG_ERR("Failed to read current"); in ina226_read_data()
155 if ((data->chan == SENSOR_CHAN_ALL) || (data->chan == SENSOR_CHAN_POWER)) { in ina226_read_data()
156 ret = ina226_reg_read_16(&config->bus, INA226_REG_POWER, &data->power); in ina226_read_data()
164 if ((data->chan == SENSOR_CHAN_ALL) || (data->chan == SENSOR_CHAN_VSHUNT)) { in ina226_read_data()
165 ret = ina226_reg_read_16(&config->bus, INA226_REG_SHUNT_VOLT, &data->shunt_voltage); in ina226_read_data()
178 struct ina226_data *data = dev->data; in ina226_sample_fetch()
186 return -ENOTSUP; in ina226_sample_fetch()
189 data->chan = chan; in ina226_sample_fetch()
197 const struct ina226_config *config = dev->config; in ina226_attr_set()
198 uint16_t data = val->val1; in ina226_attr_set()
202 return ina226_reg_write(&config->bus, INA226_REG_CONFIG, data); in ina226_attr_set()
204 return ina226_reg_write(&config->bus, INA226_REG_CALIB, data); in ina226_attr_set()
207 return -ENOTSUP; in ina226_attr_set()
214 const struct ina226_config *config = dev->config; in ina226_attr_get()
220 ret = ina226_reg_read_16(&config->bus, INA226_REG_CONFIG, &data); in ina226_attr_get()
226 ret = ina226_reg_read_16(&config->bus, INA226_REG_CALIB, &data); in ina226_attr_get()
233 return -ENOTSUP; in ina226_attr_get()
236 val->val1 = data; in ina226_attr_get()
237 val->val2 = 0; in ina226_attr_get()
244 const struct ina226_config *config = dev->config; in ina226_calibrate()
247 ret = ina226_reg_write(&config->bus, INA226_REG_CALIB, config->cal); in ina226_calibrate()
257 struct ina226_data *data = dev->data; in ina226_init()
258 const struct ina226_config *config = dev->config; in ina226_init()
262 if (!i2c_is_ready_dt(&config->bus)) { in ina226_init()
263 LOG_ERR("I2C bus %s is not ready", config->bus.bus->name); in ina226_init()
264 return -ENODEV; in ina226_init()
267 data->dev = dev; in ina226_init()
269 ret = ina226_reg_read_16(&config->bus, INA226_REG_MANUFACTURER_ID, &id); in ina226_init()
277 return -ENODEV; in ina226_init()
280 ret = ina226_reg_read_16(&config->bus, INA226_REG_DEVICE_ID, &id); in ina226_init()
288 return -ENODEV; in ina226_init()
291 ret = ina226_reg_write(&config->bus, INA226_REG_CONFIG, config->config); in ina226_init()