Lines Matching +full:max34408 +full:- +full:max34409

1 // SPDX-License-Identifier: GPL-2.0
3 * IIO driver for Maxim MAX34409/34408 ADC, 4-Channels/2-Channels, 8bits, I2C
5 …* Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/MAX34408-MAX34409
66 * struct max34408_data - max34408/max34409 specific data.
68 * @dev: max34408 device.
116 static int max34408_read_adc_avg(struct max34408_data *max34408, in max34408_read_adc_avg() argument
122 guard(mutex)(&max34408->lock); in max34408_read_adc_avg()
123 rc = regmap_read(max34408->regmap, MAX34408_CONTROL_REG, (u32 *)&ctrl); in max34408_read_adc_avg()
128 rc = regmap_write(max34408->regmap, MAX34408_CONTROL_REG, in max34408_read_adc_avg()
131 dev_err(max34408->dev, in max34408_read_adc_avg()
136 rc = regmap_read(max34408->regmap, chan->address, val); in max34408_read_adc_avg()
141 rc = regmap_write(max34408->regmap, MAX34408_CONTROL_REG, ctrl); in max34408_read_adc_avg()
143 dev_err(max34408->dev, in max34408_read_adc_avg()
153 struct max34408_data *max34408 = iio_priv(indio_dev); in max34408_read_raw() local
158 rc = max34408_read_adc_avg(max34408, chan, val); in max34408_read_raw()
167 * (max current * adc val * 1000) / (2^8 - 1) mA in max34408_read_raw()
169 *val = 10000 / max34408->input_rsense[chan->channel]; in max34408_read_raw()
173 return -EINVAL; in max34408_read_raw()
182 .model_name = "max34408",
188 .model_name = "max34409",
196 struct device *dev = &client->dev; in max34408_probe()
197 struct max34408_data *max34408; in max34408_probe() local
205 return -EINVAL; in max34408_probe()
214 indio_dev = devm_iio_device_alloc(dev, sizeof(*max34408)); in max34408_probe()
216 return -ENOMEM; in max34408_probe()
218 max34408 = iio_priv(indio_dev); in max34408_probe()
219 max34408->regmap = regmap; in max34408_probe()
220 max34408->dev = dev; in max34408_probe()
221 mutex_init(&max34408->lock); in max34408_probe()
224 fwnode_property_read_u32(node, "maxim,rsense-val-micro-ohms", in max34408_probe()
225 &max34408->input_rsense[i]); in max34408_probe()
230 rc = regmap_write(max34408->regmap, MAX34408_CONTROL_REG, 0x0); in max34408_probe()
234 indio_dev->channels = model_data->channels; in max34408_probe()
235 indio_dev->num_channels = model_data->num_channels; in max34408_probe()
236 indio_dev->name = model_data->model_name; in max34408_probe()
238 indio_dev->info = &max34408_info; in max34408_probe()
239 indio_dev->modes = INDIO_DIRECT_MODE; in max34408_probe()
246 .compatible = "maxim,max34408",
250 .compatible = "maxim,max34409",
258 { "max34408", (kernel_ulong_t)&max34408_model_data },
259 { "max34409", (kernel_ulong_t)&max34409_model_data },
266 .name = "max34408",
275 MODULE_DESCRIPTION("Maxim MAX34408/34409 ADC driver");