mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-04 13:21:45 +00:00
iio: dht11: Improve logging
* Unify log messages * Add more DEBUG messages Apparently this driver is working unreliably on some platforms that I can't test. Therefore I want an easy way for bug reporters to provide useful information without making the driver too chatty by default. Signed-off-by: Harald Geyer <harald@ccbib.org> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
This commit is contained in:
parent
ff5c37e3ea
commit
ab4b6496a2
1 changed files with 34 additions and 6 deletions
|
@ -96,6 +96,24 @@ struct dht11 {
|
||||||
struct {s64 ts; int value; } edges[DHT11_EDGES_PER_READ];
|
struct {s64 ts; int value; } edges[DHT11_EDGES_PER_READ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef CONFIG_DYNAMIC_DEBUG
|
||||||
|
/*
|
||||||
|
* dht11_edges_print: show the data as actually received by the
|
||||||
|
* driver.
|
||||||
|
*/
|
||||||
|
static void dht11_edges_print(struct dht11 *dht11)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
dev_dbg(dht11->dev, "%d edges detected:\n", dht11->num_edges);
|
||||||
|
for (i = 1; i < dht11->num_edges; ++i) {
|
||||||
|
dev_dbg(dht11->dev, "%d: %lld ns %s\n", i,
|
||||||
|
dht11->edges[i].ts - dht11->edges[i - 1].ts,
|
||||||
|
dht11->edges[i - 1].value ? "high" : "low");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_DYNAMIC_DEBUG */
|
||||||
|
|
||||||
static unsigned char dht11_decode_byte(char *bits)
|
static unsigned char dht11_decode_byte(char *bits)
|
||||||
{
|
{
|
||||||
unsigned char ret = 0;
|
unsigned char ret = 0;
|
||||||
|
@ -119,8 +137,12 @@ static int dht11_decode(struct dht11 *dht11, int offset)
|
||||||
for (i = 0; i < DHT11_BITS_PER_READ; ++i) {
|
for (i = 0; i < DHT11_BITS_PER_READ; ++i) {
|
||||||
t = dht11->edges[offset + 2 * i + 2].ts -
|
t = dht11->edges[offset + 2 * i + 2].ts -
|
||||||
dht11->edges[offset + 2 * i + 1].ts;
|
dht11->edges[offset + 2 * i + 1].ts;
|
||||||
if (!dht11->edges[offset + 2 * i + 1].value)
|
if (!dht11->edges[offset + 2 * i + 1].value) {
|
||||||
return -EIO; /* lost synchronisation */
|
dev_dbg(dht11->dev,
|
||||||
|
"lost synchronisation at edge %d\n",
|
||||||
|
offset + 2 * i + 1);
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
bits[i] = t > DHT11_THRESHOLD;
|
bits[i] = t > DHT11_THRESHOLD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,8 +152,10 @@ static int dht11_decode(struct dht11 *dht11, int offset)
|
||||||
temp_dec = dht11_decode_byte(&bits[24]);
|
temp_dec = dht11_decode_byte(&bits[24]);
|
||||||
checksum = dht11_decode_byte(&bits[32]);
|
checksum = dht11_decode_byte(&bits[32]);
|
||||||
|
|
||||||
if (((hum_int + hum_dec + temp_int + temp_dec) & 0xff) != checksum)
|
if (((hum_int + hum_dec + temp_int + temp_dec) & 0xff) != checksum) {
|
||||||
|
dev_dbg(dht11->dev, "invalid checksum\n");
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
dht11->timestamp = ktime_get_boot_ns();
|
dht11->timestamp = ktime_get_boot_ns();
|
||||||
if (hum_int < 20) { /* DHT22 */
|
if (hum_int < 20) { /* DHT22 */
|
||||||
|
@ -182,6 +206,7 @@ static int dht11_read_raw(struct iio_dev *iio_dev,
|
||||||
mutex_lock(&dht11->lock);
|
mutex_lock(&dht11->lock);
|
||||||
if (dht11->timestamp + DHT11_DATA_VALID_TIME < ktime_get_boot_ns()) {
|
if (dht11->timestamp + DHT11_DATA_VALID_TIME < ktime_get_boot_ns()) {
|
||||||
timeres = ktime_get_resolution_ns();
|
timeres = ktime_get_resolution_ns();
|
||||||
|
dev_dbg(dht11->dev, "current timeresolution: %dns\n", timeres);
|
||||||
if (timeres > DHT11_MIN_TIMERES) {
|
if (timeres > DHT11_MIN_TIMERES) {
|
||||||
dev_err(dht11->dev, "timeresolution %dns too low\n",
|
dev_err(dht11->dev, "timeresolution %dns too low\n",
|
||||||
timeres);
|
timeres);
|
||||||
|
@ -219,10 +244,13 @@ static int dht11_read_raw(struct iio_dev *iio_dev,
|
||||||
|
|
||||||
free_irq(dht11->irq, iio_dev);
|
free_irq(dht11->irq, iio_dev);
|
||||||
|
|
||||||
|
#ifdef CONFIG_DYNAMIC_DEBUG
|
||||||
|
dht11_edges_print(dht11);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (ret == 0 && dht11->num_edges < DHT11_EDGES_PER_READ - 1) {
|
if (ret == 0 && dht11->num_edges < DHT11_EDGES_PER_READ - 1) {
|
||||||
dev_err(&iio_dev->dev,
|
dev_err(dht11->dev, "Only %d signal edges detected\n",
|
||||||
"Only %d signal edges detected\n",
|
dht11->num_edges);
|
||||||
dht11->num_edges);
|
|
||||||
ret = -ETIMEDOUT;
|
ret = -ETIMEDOUT;
|
||||||
}
|
}
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue