Lines Matching +full:shunt +full:- +full:resistor +full:- +full:micro +full:- +full:ohms

1 // SPDX-License-Identifier: GPL-2.0
158 struct device *dev = priv->dev; in rtq6056_adc_read_channel()
159 unsigned int addr = ch->address; in rtq6056_adc_read_channel()
164 ret = regmap_read(priv->regmap, addr, &regval); in rtq6056_adc_read_channel()
170 /* Power and VBUS is unsigned 16-bit, others are signed 16-bit */ in rtq6056_adc_read_channel()
182 switch (ch->address) { in rtq6056_adc_read_scale()
198 return -EINVAL; in rtq6056_adc_read_scale()
205 * https://www.richtek.com/assets/product_file/RTQ6056/DSQ6056-00.pdf
219 return -EINVAL; in rtq6056_adc_set_samp_freq()
221 if (ch->address == RTQ6056_REG_SHUNTVOLT) { in rtq6056_adc_set_samp_freq()
222 rm_field = priv->rm_fields[F_VSHUNTCT]; in rtq6056_adc_set_samp_freq()
223 ct = &priv->vshuntct_us; in rtq6056_adc_set_samp_freq()
224 } else if (ch->address == RTQ6056_REG_BUSVOLT) { in rtq6056_adc_set_samp_freq()
225 rm_field = priv->rm_fields[F_VBUSCT]; in rtq6056_adc_set_samp_freq()
226 ct = &priv->vbusct_us; in rtq6056_adc_set_samp_freq()
228 return -EINVAL; in rtq6056_adc_set_samp_freq()
245 * https://www.richtek.com/assets/product_file/RTQ6056/DSQ6056-00.pdf
257 return -EINVAL; in rtq6056_adc_set_average()
262 ret = regmap_field_write(priv->rm_fields[F_AVG], selector); in rtq6056_adc_set_average()
266 priv->avg_sample = rtq6056_avg_sample_list[selector]; in rtq6056_adc_set_average()
276 if (ch->address == RTQ6056_REG_SHUNTVOLT) in rtq6056_adc_get_sample_freq()
277 sample_time = priv->vshuntct_us; in rtq6056_adc_get_sample_freq()
278 else if (ch->address == RTQ6056_REG_BUSVOLT) in rtq6056_adc_get_sample_freq()
279 sample_time = priv->vbusct_us; in rtq6056_adc_get_sample_freq()
281 sample_time = priv->vshuntct_us + priv->vbusct_us; in rtq6056_adc_get_sample_freq()
282 sample_time *= priv->avg_sample; in rtq6056_adc_get_sample_freq()
302 *val = priv->avg_sample; in rtq6056_adc_read_raw()
307 return -EINVAL; in rtq6056_adc_read_raw()
328 return -EINVAL; in rtq6056_adc_read_avail()
351 ret = -EINVAL; in rtq6056_adc_write_raw()
371 return sysfs_emit(label, "%s\n", rtq6056_channel_labels[chan->channel]); in rtq6056_adc_read_label()
381 dev_err(priv->dev, "Invalid resistor [%d]\n", resistor_uohm); in rtq6056_set_shunt_resistor()
382 return -EINVAL; in rtq6056_set_shunt_resistor()
387 ret = regmap_write(priv->regmap, RTQ6056_REG_CALIBRATION, calib_val); in rtq6056_set_shunt_resistor()
391 priv->shunt_resistor_uohm = resistor_uohm; in rtq6056_set_shunt_resistor()
400 int vals[2] = { priv->shunt_resistor_uohm, 1000000 }; in shunt_resistor_show()
451 struct iio_dev *indio_dev = pf->indio_dev; in rtq6056_buffer_trigger_handler()
453 struct device *dev = priv->dev; in rtq6056_buffer_trigger_handler()
465 for_each_set_bit(bit, indio_dev->active_scan_mask, indio_dev->masklength) { in rtq6056_buffer_trigger_handler()
468 ret = regmap_read(priv->regmap, addr, &raw); in rtq6056_buffer_trigger_handler()
481 iio_trigger_notify_done(indio_dev->trig); in rtq6056_buffer_trigger_handler()
491 regmap_field_write(priv->rm_fields[F_OPMODE], 0); in rtq6056_enter_shutdown_state()
529 struct device *dev = &i2c->dev; in rtq6056_probe()
534 if (!i2c_check_functionality(i2c->adapter, I2C_FUNC_SMBUS_WORD_DATA)) in rtq6056_probe()
535 return -EOPNOTSUPP; in rtq6056_probe()
539 return -ENOMEM; in rtq6056_probe()
542 priv->dev = dev; in rtq6056_probe()
543 priv->vshuntct_us = priv->vbusct_us = 1037; in rtq6056_probe()
544 priv->avg_sample = 1; in rtq6056_probe()
552 priv->regmap = regmap; in rtq6056_probe()
560 return dev_err_probe(dev, -ENODEV, in rtq6056_probe()
563 ret = devm_regmap_field_bulk_alloc(dev, regmap, priv->rm_fields, in rtq6056_probe()
569 * By default, configure average sample as 1, bus and shunt conversion in rtq6056_probe()
589 /* By default, use 2000 micro-Ohm resistor */ in rtq6056_probe()
591 device_property_read_u32(dev, "shunt-resistor-micro-ohms", in rtq6056_probe()
597 "Failed to init shunt resistor\n"); in rtq6056_probe()
599 indio_dev->name = "rtq6056"; in rtq6056_probe()
600 indio_dev->modes = INDIO_DIRECT_MODE; in rtq6056_probe()
601 indio_dev->channels = rtq6056_channels; in rtq6056_probe()
602 indio_dev->num_channels = ARRAY_SIZE(rtq6056_channels); in rtq6056_probe()
603 indio_dev->info = &rtq6056_info; in rtq6056_probe()
620 return regmap_field_write(priv->rm_fields[F_OPMODE], 0); in rtq6056_runtime_suspend()
628 ret = regmap_field_write(priv->rm_fields[F_OPMODE], RTQ6056_CONT_ALLON); in rtq6056_runtime_resume()
632 sample_rdy_time_us = priv->vbusct_us + priv->vshuntct_us; in rtq6056_runtime_resume()
633 sample_rdy_time_us *= priv->avg_sample; in rtq6056_runtime_resume()