Lines Matching +full:startup +full:- +full:sensor

1 // SPDX-License-Identifier: GPL-2.0-only
3 * hp206c.c - HOPERF HP206C precision barometer and altimeter sensor
7 * (7-bit I2C slave address 0x76)
10 * http://www.hoperf.com/upload/sensor/HP206C_DataSheet_EN_V2.0.pdf
102 return -EIO; in hp206c_read_20bit()
112 struct i2c_client *client = data->client; in hp206c_wait_dev_rdy()
117 dev_err(&indio_dev->dev, "Failed READ_REG INT_SRC: %d\n", ret); in hp206c_wait_dev_rdy()
124 return -ETIMEDOUT; in hp206c_wait_dev_rdy()
147 struct i2c_client *client = data->client; in hp206c_soft_reset()
151 dev_err(&client->dev, "Failed to reset device: %d\n", ret); in hp206c_soft_reset()
159 dev_err(&client->dev, "Device not ready after soft reset: %d\n", ret); in hp206c_soft_reset()
165 dev_err(&client->dev, "Failed to enable compensation: %d\n", ret); in hp206c_soft_reset()
175 struct i2c_client *client = data->client; in hp206c_conv_and_read()
179 dev_err(&indio_dev->dev, "Device not ready: %d\n", ret); in hp206c_conv_and_read()
185 dev_err(&indio_dev->dev, "Failed convert: %d\n", ret); in hp206c_conv_and_read()
193 dev_err(&indio_dev->dev, "Device not ready: %d\n", ret); in hp206c_conv_and_read()
199 dev_err(&indio_dev->dev, "Failed read: %d\n", ret); in hp206c_conv_and_read()
213 mutex_lock(&data->mutex); in hp206c_read_raw()
217 switch (chan->type) { in hp206c_read_raw()
219 *val = hp206c_osr_rates[data->temp_osr_index]; in hp206c_read_raw()
224 *val = hp206c_osr_rates[data->pres_osr_index]; in hp206c_read_raw()
228 ret = -EINVAL; in hp206c_read_raw()
233 switch (chan->type) { in hp206c_read_raw()
235 osr_setting = &hp206c_osr_settings[data->temp_osr_index]; in hp206c_read_raw()
237 osr_setting->osr_mask | in hp206c_read_raw()
242 osr_setting->temp_conv_time_us); in hp206c_read_raw()
253 osr_setting = &hp206c_osr_settings[data->pres_osr_index]; in hp206c_read_raw()
255 osr_setting->osr_mask | in hp206c_read_raw()
260 osr_setting->pres_conv_time_us); in hp206c_read_raw()
267 ret = -EINVAL; in hp206c_read_raw()
272 switch (chan->type) { in hp206c_read_raw()
285 ret = -EINVAL; in hp206c_read_raw()
290 ret = -EINVAL; in hp206c_read_raw()
293 mutex_unlock(&data->mutex); in hp206c_read_raw()
305 return -EINVAL; in hp206c_write_raw()
306 mutex_lock(&data->mutex); in hp206c_write_raw()
307 switch (chan->type) { in hp206c_write_raw()
309 data->temp_osr_index = find_closest_descending(val, in hp206c_write_raw()
313 data->pres_osr_index = find_closest_descending(val, in hp206c_write_raw()
317 ret = -EINVAL; in hp206c_write_raw()
319 mutex_unlock(&data->mutex); in hp206c_write_raw()
362 if (!i2c_check_functionality(client->adapter, in hp206c_probe()
366 dev_err(&client->dev, "Adapter does not support " in hp206c_probe()
368 return -ENODEV; in hp206c_probe()
371 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); in hp206c_probe()
373 return -ENOMEM; in hp206c_probe()
376 data->client = client; in hp206c_probe()
377 mutex_init(&data->mutex); in hp206c_probe()
379 indio_dev->info = &hp206c_info; in hp206c_probe()
380 indio_dev->name = id->name; in hp206c_probe()
381 indio_dev->modes = INDIO_DIRECT_MODE; in hp206c_probe()
382 indio_dev->channels = hp206c_channels; in hp206c_probe()
383 indio_dev->num_channels = ARRAY_SIZE(hp206c_channels); in hp206c_probe()
390 dev_err(&client->dev, "Failed to reset on startup: %d\n", ret); in hp206c_probe()
391 return -ENODEV; in hp206c_probe()
394 return devm_iio_device_register(&client->dev, indio_dev); in hp206c_probe()
422 MODULE_DESCRIPTION("HOPERF HP206C precision barometer and altimeter sensor");