Lines Matching +full:low +full:- +full:precision
1 // SPDX-License-Identifier: GPL-2.0-or-later
13 #include <linux/hwmon-sysfs.h>
19 /* commands (high precision mode) */
23 /* commands (low precision mode) */
41 /* delays for non-blocking i2c commands, both in us */
75 int ret = i2c_master_send(client, data->command, SHTC1_CMD_LENGTH); in shtc1_update_values()
77 dev_err(&client->dev, "failed to send command: %d\n", ret); in shtc1_update_values()
78 return ret < 0 ? ret : -EIO; in shtc1_update_values()
87 if (!data->setup.blocking_io) in shtc1_update_values()
88 usleep_range(data->nonblocking_wait_time, in shtc1_update_values()
89 data->nonblocking_wait_time + 1000); in shtc1_update_values()
93 dev_err(&client->dev, "failed to read values: %d\n", ret); in shtc1_update_values()
94 return ret < 0 ? ret : -EIO; in shtc1_update_values()
104 struct i2c_client *client = data->client; in shtc1_update_client()
109 mutex_lock(&data->update_lock); in shtc1_update_client()
111 if (time_after(jiffies, data->last_updated + HZ / 10) || !data->valid) { in shtc1_update_client()
118 * T = -45 + 175 * ST / 2^16 in shtc1_update_client()
124 data->temperature = ((21875 * val) >> 13) - 45000; in shtc1_update_client()
126 data->humidity = ((12500 * val) >> 13); in shtc1_update_client()
128 data->last_updated = jiffies; in shtc1_update_client()
129 data->valid = true; in shtc1_update_client()
133 mutex_unlock(&data->update_lock); in shtc1_update_client()
146 return sprintf(buf, "%d\n", data->temperature); in temp1_input_show()
156 return sprintf(buf, "%d\n", data->humidity); in humidity1_input_show()
172 if (data->setup.high_precision) { in shtc1_select_command()
173 data->command = data->setup.blocking_io ? in shtc1_select_command()
176 data->nonblocking_wait_time = (data->chip == shtc1) ? in shtc1_select_command()
180 data->command = data->setup.blocking_io ? in shtc1_select_command()
183 data->nonblocking_wait_time = (data->chip == shtc1) ? in shtc1_select_command()
198 enum shtcx_chips chip = i2c_match_id(shtc1_id, client)->driver_data; in shtc1_probe()
199 struct i2c_adapter *adap = client->adapter; in shtc1_probe()
200 struct device *dev = &client->dev; in shtc1_probe()
201 struct device_node *np = dev->of_node; in shtc1_probe()
205 return -ENODEV; in shtc1_probe()
211 return ret < 0 ? ret : -ENODEV; in shtc1_probe()
216 return -ENODEV; in shtc1_probe()
223 return -ENODEV; in shtc1_probe()
227 return -ENODEV; in shtc1_probe()
232 return -ENOMEM; in shtc1_probe()
234 data->setup.blocking_io = false; in shtc1_probe()
235 data->setup.high_precision = true; in shtc1_probe()
236 data->client = client; in shtc1_probe()
237 data->chip = chip; in shtc1_probe()
240 data->setup.blocking_io = of_property_read_bool(np, "sensirion,blocking-io"); in shtc1_probe()
241 data->setup.high_precision = !of_property_read_bool(np, "sensicon,low-precision"); in shtc1_probe()
243 if (client->dev.platform_data) in shtc1_probe()
244 data->setup = *(struct shtc1_platform_data *)dev->platform_data; in shtc1_probe()
248 mutex_init(&data->update_lock); in shtc1_probe()
251 client->name, in shtc1_probe()