Lines Matching +full:scan +full:- +full:delay

1 // SPDX-License-Identifier: GPL-2.0+
3 * hdc100x.c - Support for the TI HDC100x temperature + humidity sensors
16 #include <linux/delay.h>
48 } scan; member
127 .scan_index = -1,
136 int tmp = (~mask & data->config) | val; in hdc100x_update_config()
139 ret = i2c_smbus_write_word_swapped(data->client, in hdc100x_update_config()
142 data->config = tmp; in hdc100x_update_config()
150 int ret = -EINVAL; in hdc100x_set_it_time()
159 data->adc_int_us[chan] = val2; in hdc100x_set_it_time()
170 struct i2c_client *client = data->client; in hdc100x_get_measurement()
171 int delay = data->adc_int_us[chan->address] + 1*USEC_PER_MSEC; in hdc100x_get_measurement() local
176 ret = i2c_smbus_write_byte(client, chan->address); in hdc100x_get_measurement()
178 dev_err(&client->dev, "cannot start measurement"); in hdc100x_get_measurement()
183 usleep_range(delay, delay + 1000); in hdc100x_get_measurement()
186 ret = i2c_master_recv(data->client, (char *)&val, sizeof(val)); in hdc100x_get_measurement()
188 dev_err(&client->dev, "cannot read sensor data\n"); in hdc100x_get_measurement()
196 return !!(data->config & HDC100X_REG_CONFIG_HEATER_EN); in hdc100x_get_heater_status()
209 mutex_lock(&data->lock); in hdc100x_read_raw()
210 if (chan->type == IIO_CURRENT) { in hdc100x_read_raw()
216 mutex_unlock(&data->lock); in hdc100x_read_raw()
227 mutex_unlock(&data->lock); in hdc100x_read_raw()
232 *val2 = data->adc_int_us[chan->address]; in hdc100x_read_raw()
235 if (chan->type == IIO_TEMP) { in hdc100x_read_raw()
246 *val = -15887; in hdc100x_read_raw()
250 return -EINVAL; in hdc100x_read_raw()
259 int ret = -EINVAL; in hdc100x_write_raw()
264 return -EINVAL; in hdc100x_write_raw()
266 mutex_lock(&data->lock); in hdc100x_write_raw()
267 ret = hdc100x_set_it_time(data, chan->address, val2); in hdc100x_write_raw()
268 mutex_unlock(&data->lock); in hdc100x_write_raw()
271 if (chan->type != IIO_CURRENT || val2 != 0) in hdc100x_write_raw()
272 return -EINVAL; in hdc100x_write_raw()
274 mutex_lock(&data->lock); in hdc100x_write_raw()
277 mutex_unlock(&data->lock); in hdc100x_write_raw()
280 return -EINVAL; in hdc100x_write_raw()
290 mutex_lock(&data->lock); in hdc100x_buffer_postenable()
293 mutex_unlock(&data->lock); in hdc100x_buffer_postenable()
303 mutex_lock(&data->lock); in hdc100x_buffer_predisable()
305 mutex_unlock(&data->lock); in hdc100x_buffer_predisable()
318 struct iio_dev *indio_dev = pf->indio_dev; in hdc100x_trigger_handler()
320 struct i2c_client *client = data->client; in hdc100x_trigger_handler()
321 int delay = data->adc_int_us[0] + data->adc_int_us[1] + 2*USEC_PER_MSEC; in hdc100x_trigger_handler() local
325 mutex_lock(&data->lock); in hdc100x_trigger_handler()
328 dev_err(&client->dev, "cannot start measurement\n"); in hdc100x_trigger_handler()
331 usleep_range(delay, delay + 1000); in hdc100x_trigger_handler()
333 ret = i2c_master_recv(client, (u8 *)data->scan.channels, 4); in hdc100x_trigger_handler()
335 dev_err(&client->dev, "cannot read sensor data\n"); in hdc100x_trigger_handler()
339 iio_push_to_buffers_with_timestamp(indio_dev, &data->scan, in hdc100x_trigger_handler()
342 mutex_unlock(&data->lock); in hdc100x_trigger_handler()
343 iio_trigger_notify_done(indio_dev->trig); in hdc100x_trigger_handler()
360 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_WORD_DATA | in hdc100x_probe()
362 return -EOPNOTSUPP; in hdc100x_probe()
364 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); in hdc100x_probe()
366 return -ENOMEM; in hdc100x_probe()
370 data->client = client; in hdc100x_probe()
371 mutex_init(&data->lock); in hdc100x_probe()
373 indio_dev->name = dev_name(&client->dev); in hdc100x_probe()
374 indio_dev->modes = INDIO_DIRECT_MODE; in hdc100x_probe()
375 indio_dev->info = &hdc100x_info; in hdc100x_probe()
377 indio_dev->channels = hdc100x_channels; in hdc100x_probe()
378 indio_dev->num_channels = ARRAY_SIZE(hdc100x_channels); in hdc100x_probe()
379 indio_dev->available_scan_masks = hdc100x_scan_masks; in hdc100x_probe()
386 ret = devm_iio_triggered_buffer_setup(&client->dev, in hdc100x_probe()
391 dev_err(&client->dev, "iio triggered buffer setup failed\n"); in hdc100x_probe()
395 return devm_iio_device_register(&client->dev, indio_dev); in hdc100x_probe()