Symbol: dht11
drivers/iio/humidity/dht11.c
100
str_high_low(dht11->edges[i - 1].value));
drivers/iio/humidity/dht11.c
119
static int dht11_decode(struct dht11 *dht11, int offset)
drivers/iio/humidity/dht11.c
126
t = dht11->edges[offset + 2 * i + 2].ts -
drivers/iio/humidity/dht11.c
127
dht11->edges[offset + 2 * i + 1].ts;
drivers/iio/humidity/dht11.c
128
if (!dht11->edges[offset + 2 * i + 1].value) {
drivers/iio/humidity/dht11.c
129
dev_dbg(dht11->dev,
drivers/iio/humidity/dht11.c
144
dev_dbg(dht11->dev, "invalid checksum\n");
drivers/iio/humidity/dht11.c
148
dht11->timestamp = ktime_get_boottime_ns();
drivers/iio/humidity/dht11.c
150
dht11->temperature = (((temp_int & 0x7f) << 8) + temp_dec) *
drivers/iio/humidity/dht11.c
152
dht11->humidity = ((hum_int << 8) + hum_dec) * 100;
drivers/iio/humidity/dht11.c
154
dht11->temperature = temp_int * 1000;
drivers/iio/humidity/dht11.c
155
dht11->humidity = hum_int * 1000;
drivers/iio/humidity/dht11.c
157
dev_err(dht11->dev,
drivers/iio/humidity/dht11.c
172
struct dht11 *dht11 = iio_priv(iio);
drivers/iio/humidity/dht11.c
174
if (dht11->num_edges < DHT11_EDGES_PER_READ && dht11->num_edges >= 0) {
drivers/iio/humidity/dht11.c
175
dht11->edges[dht11->num_edges].ts = ktime_get_boottime_ns();
drivers/iio/humidity/dht11.c
176
dht11->edges[dht11->num_edges++].value =
drivers/iio/humidity/dht11.c
177
gpiod_get_value(dht11->gpiod);
drivers/iio/humidity/dht11.c
179
if (dht11->num_edges >= DHT11_EDGES_PER_READ)
drivers/iio/humidity/dht11.c
180
complete(&dht11->completion);
drivers/iio/humidity/dht11.c
190
struct dht11 *dht11 = iio_priv(iio_dev);
drivers/iio/humidity/dht11.c
193
mutex_lock(&dht11->lock);
drivers/iio/humidity/dht11.c
194
if (dht11->timestamp + DHT11_DATA_VALID_TIME < ktime_get_boottime_ns()) {
drivers/iio/humidity/dht11.c
196
dev_dbg(dht11->dev, "current timeresolution: %dns\n", timeres);
drivers/iio/humidity/dht11.c
198
dev_err(dht11->dev, "timeresolution %dns too low\n",
drivers/iio/humidity/dht11.c
208
dev_warn(dht11->dev,
drivers/iio/humidity/dht11.c
212
reinit_completion(&dht11->completion);
drivers/iio/humidity/dht11.c
214
dht11->num_edges = 0;
drivers/iio/humidity/dht11.c
215
ret = gpiod_direction_output(dht11->gpiod, 0);
drivers/iio/humidity/dht11.c
220
ret = gpiod_direction_input(dht11->gpiod);
drivers/iio/humidity/dht11.c
224
ret = request_irq(dht11->irq, dht11_handle_irq,
drivers/iio/humidity/dht11.c
230
ret = wait_for_completion_killable_timeout(&dht11->completion,
drivers/iio/humidity/dht11.c
233
free_irq(dht11->irq, iio_dev);
drivers/iio/humidity/dht11.c
236
dht11_edges_print(dht11);
drivers/iio/humidity/dht11.c
239
if (ret == 0 && dht11->num_edges < DHT11_EDGES_PER_READ - 1) {
drivers/iio/humidity/dht11.c
240
dev_err(dht11->dev, "Only %d signal edges detected\n",
drivers/iio/humidity/dht11.c
241
dht11->num_edges);
drivers/iio/humidity/dht11.c
248
dht11->num_edges - DHT11_EDGES_PER_READ;
drivers/iio/humidity/dht11.c
250
ret = dht11_decode(dht11, offset);
drivers/iio/humidity/dht11.c
261
*val = dht11->temperature;
drivers/iio/humidity/dht11.c
263
*val = dht11->humidity;
drivers/iio/humidity/dht11.c
267
dht11->num_edges = -1;
drivers/iio/humidity/dht11.c
268
mutex_unlock(&dht11->lock);
drivers/iio/humidity/dht11.c
292
struct dht11 *dht11;
drivers/iio/humidity/dht11.c
295
iio = devm_iio_device_alloc(dev, sizeof(*dht11));
drivers/iio/humidity/dht11.c
299
dht11 = iio_priv(iio);
drivers/iio/humidity/dht11.c
300
dht11->dev = dev;
drivers/iio/humidity/dht11.c
301
dht11->gpiod = devm_gpiod_get(dev, NULL, GPIOD_IN);
drivers/iio/humidity/dht11.c
302
if (IS_ERR(dht11->gpiod))
drivers/iio/humidity/dht11.c
303
return PTR_ERR(dht11->gpiod);
drivers/iio/humidity/dht11.c
305
dht11->irq = gpiod_to_irq(dht11->gpiod);
drivers/iio/humidity/dht11.c
306
if (dht11->irq < 0) {
drivers/iio/humidity/dht11.c
307
dev_err(dev, "GPIO %d has no interrupt\n", desc_to_gpio(dht11->gpiod));
drivers/iio/humidity/dht11.c
311
dht11->timestamp = ktime_get_boottime_ns() - DHT11_DATA_VALID_TIME - 1;
drivers/iio/humidity/dht11.c
312
dht11->num_edges = -1;
drivers/iio/humidity/dht11.c
316
init_completion(&dht11->completion);
drivers/iio/humidity/dht11.c
317
mutex_init(&dht11->lock);
drivers/iio/humidity/dht11.c
92
static void dht11_edges_print(struct dht11 *dht11)
drivers/iio/humidity/dht11.c
96
dev_dbg(dht11->dev, "%d edges detected:\n", dht11->num_edges);
drivers/iio/humidity/dht11.c
97
for (i = 1; i < dht11->num_edges; ++i) {
drivers/iio/humidity/dht11.c
98
dev_dbg(dht11->dev, "%d: %lld ns %s\n", i,
drivers/iio/humidity/dht11.c
99
dht11->edges[i].ts - dht11->edges[i - 1].ts,