Lines Matching refs:data
70 static int ads1100_set_config_bits(struct ads1100_data *data, u8 mask, u8 value)
73 u8 config = (data->config & ~mask) | (value & mask);
75 if (data->config == config)
78 ret = i2c_master_send(data->client, &config, 1);
82 data->config = config;
87 static int ads1100_data_bits(struct ads1100_data *data)
89 return ads1100_data_rate_bits[FIELD_GET(ADS1100_DR_MASK, data->config)];
92 static int ads1100_get_adc_result(struct ads1100_data *data, int chan, int *val)
101 ret = pm_runtime_resume_and_get(&data->client->dev);
105 ret = i2c_master_recv(data->client, (char *)&buffer, sizeof(buffer));
107 pm_runtime_mark_last_busy(&data->client->dev);
108 pm_runtime_put_autosuspend(&data->client->dev);
111 dev_err(&data->client->dev, "I2C read fail: %d\n", ret);
119 value <<= 16 - ads1100_data_bits(data);
126 static int ads1100_set_scale(struct ads1100_data *data, int val, int val2)
138 microvolts = regulator_get_voltage(data->reg_vdd);
150 ads1100_set_config_bits(data, ADS1100_PGA_MASK, ffs(gain) - 1);
155 static int ads1100_set_data_rate(struct ads1100_data *data, int chan, int rate)
160 size = data->supports_data_rate ? ARRAY_SIZE(ads1100_data_rate) : 1;
163 return ads1100_set_config_bits(data, ADS1100_DR_MASK,
170 static int ads1100_get_vdd_millivolts(struct ads1100_data *data)
172 return regulator_get_voltage(data->reg_vdd) / (MICRO / MILLI);
175 static void ads1100_calc_scale_avail(struct ads1100_data *data)
177 int millivolts = ads1100_get_vdd_millivolts(data);
180 for (i = 0; i < ARRAY_SIZE(data->scale_avail) / 2; i++) {
181 data->scale_avail[i * 2 + 0] = millivolts;
182 data->scale_avail[i * 2 + 1] = 15 + i;
191 struct ads1100_data *data = iio_priv(indio_dev);
200 if (data->supports_data_rate)
207 *vals = data->scale_avail;
208 *length = ARRAY_SIZE(data->scale_avail);
220 struct ads1100_data *data = iio_priv(indio_dev);
222 mutex_lock(&data->lock);
229 ret = ads1100_get_adc_result(data, chan->address, val);
236 *val = ads1100_get_vdd_millivolts(data);
237 *val2 = 15 + FIELD_GET(ADS1100_PGA_MASK, data->config);
242 data->config)];
249 mutex_unlock(&data->lock);
258 struct ads1100_data *data = iio_priv(indio_dev);
261 mutex_lock(&data->lock);
264 ret = ads1100_set_scale(data, val, val2);
267 ret = ads1100_set_data_rate(data, chan->address, val);
273 mutex_unlock(&data->lock);
284 static int ads1100_setup(struct ads1100_data *data)
291 ret = i2c_master_send(data->client, buffer, 1);
295 ret = i2c_master_recv(data->client, buffer, sizeof(buffer));
300 data->config = buffer[2] & ~ADS1100_CFG_ST_BSY;
303 data->supports_data_rate = FIELD_GET(ADS1100_DR_MASK, buffer[2]) != 0;
313 static void ads1100_disable_continuous(void *data)
315 ads1100_set_config_bits(data, ADS1100_CFG_SC, ADS1100_SINGLESHOT);
321 struct ads1100_data *data;
325 indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
329 data = iio_priv(indio_dev);
330 dev_set_drvdata(dev, data);
331 data->client = client;
332 mutex_init(&data->lock);
340 data->reg_vdd = devm_regulator_get(dev, "vdd");
341 if (IS_ERR(data->reg_vdd))
342 return dev_err_probe(dev, PTR_ERR(data->reg_vdd),
345 ret = regulator_enable(data->reg_vdd);
350 ret = devm_add_action_or_reset(dev, ads1100_reg_disable, data->reg_vdd);
354 ret = ads1100_setup(data);
359 ret = devm_add_action_or_reset(dev, ads1100_disable_continuous, data);
363 ads1100_calc_scale_avail(data);
382 struct ads1100_data *data = dev_get_drvdata(dev);
384 ads1100_set_config_bits(data, ADS1100_CFG_SC, ADS1100_SINGLESHOT);
385 regulator_disable(data->reg_vdd);
392 struct ads1100_data *data = dev_get_drvdata(dev);
395 ret = regulator_enable(data->reg_vdd);
397 dev_err(&data->client->dev, "Failed to enable Vdd\n");
406 return ads1100_set_config_bits(data, ADS1100_CFG_SC,