From: Dmitry Khromov <dk@icelogic.net>
To: linux-kernel@vger.kernel.org
Cc: gregkh@linuxfoundation.org, Evgeniy Polyakov <zbr@ioremap.net>
Subject: [PATCH] Introduce an ability to specify microseconds bus scanning intervals in w1 core
Date: Tue, 14 Apr 2015 10:40:55 +0300 [thread overview]
Message-ID: <552CC487.70402@icelogic.net> (raw)
In-Reply-To: <1040571428797306@web8j.yandex.ru>
DS1990* "iButtons" and compatible RFID card readers commonly found at
physical access control systems are usually attached/generate presence
for as short as 100 ms - hence the tens-to-hundreds milliseconds scan
intervals are required.
Tested on Raspberry Pi model B+ with DS2482-100 bus master,
tens-of-milliseconds intervals are easily achieved without significant
CPU load (and with unknown accuracy), and though I doubt
microseconds-scale intervals are really feasible in terms of practical
use and underlying buses timings, I believe it makes sense to give the
ability of using them to those willing to try.
Signed-off-by: Dmitry Khromov <dk@icelogic.net>
Acked-by: Evgeniy Polyakov <zbr@ioremap.net>
drivers/w1/w1.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
---
diff --git a/drivers/w1/w1.c b/drivers/w1/w1.c
index 181f41c..73b4e2d 100644
--- a/drivers/w1/w1.c
+++ b/drivers/w1/w1.c
@@ -46,11 +46,15 @@ MODULE_AUTHOR("Evgeniy Polyakov <zbr@ioremap.net>");
MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol.");
static int w1_timeout = 10;
+static int w1_timeout_us = 0;
int w1_max_slave_count = 64;
int w1_max_slave_ttl = 10;
module_param_named(timeout, w1_timeout, int, 0);
MODULE_PARM_DESC(timeout, "time in seconds between automatic slave searches");
+module_param_named(timeout_us, w1_timeout_us, int, 0);
+MODULE_PARM_DESC(timeout, "time in microseconds between automatic slave"
+ "searches");
/* A search stops when w1_max_slave_count devices have been found in that
* search. The next search will start over and detect the same set of devices
* on a static 1-wire bus. Memory is not allocated based on this number, just
@@ -317,6 +321,14 @@ static ssize_t w1_master_attribute_show_timeout(struct device *dev, struct devic
return count;
}
+static ssize_t w1_master_attribute_show_timeout_us(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ ssize_t count;
+ count = sprintf(buf, "%d\n", w1_timeout_us);
+ return count;
+}
+
static ssize_t w1_master_attribute_store_max_slave_count(struct device *dev,
struct device_attribute *attr, const char *buf, size_t count)
{
@@ -543,6 +555,7 @@ static W1_MASTER_ATTR_RO(slave_count, S_IRUGO);
static W1_MASTER_ATTR_RW(max_slave_count, S_IRUGO | S_IWUSR | S_IWGRP);
static W1_MASTER_ATTR_RO(attempts, S_IRUGO);
static W1_MASTER_ATTR_RO(timeout, S_IRUGO);
+static W1_MASTER_ATTR_RO(timeout_us, S_IRUGO);
static W1_MASTER_ATTR_RO(pointer, S_IRUGO);
static W1_MASTER_ATTR_RW(search, S_IRUGO | S_IWUSR | S_IWGRP);
static W1_MASTER_ATTR_RW(pullup, S_IRUGO | S_IWUSR | S_IWGRP);
@@ -556,6 +569,7 @@ static struct attribute *w1_master_default_attrs[] = {
&w1_master_attribute_max_slave_count.attr,
&w1_master_attribute_attempts.attr,
&w1_master_attribute_timeout.attr,
+ &w1_master_attribute_timeout_us.attr,
&w1_master_attribute_pointer.attr,
&w1_master_attribute_search.attr,
&w1_master_attribute_pullup.attr,
@@ -1108,7 +1122,8 @@ int w1_process(void *data)
/* As long as w1_timeout is only set by a module parameter the sleep
* time can be calculated in jiffies once.
*/
- const unsigned long jtime = msecs_to_jiffies(w1_timeout * 1000);
+ const unsigned long jtime =
+ usecs_to_jiffies(w1_timeout * 1000000 + w1_timeout_us);
/* remainder if it woke up early */
unsigned long jremain = 0;
next parent reply other threads:[~2015-04-14 7:48 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <55292A69.5020106@icelogic.net>
[not found] ` <1040571428797306@web8j.yandex.ru>
2015-04-14 7:40 ` Dmitry Khromov [this message]
2015-04-14 17:15 ` [PATCH] Introduce an ability to specify microseconds bus scanning intervals in w1 core Randy Dunlap
2015-04-22 21:55 ` [PATCH v2] w1: introduce an ability to specify microseconds bus scanning intervals Dmitry Khromov
2015-04-22 23:22 ` Evgeniy Polyakov
2015-04-23 9:20 ` Greg KH
2015-04-23 11:30 ` Dmitry Khromov
2015-04-23 11:33 ` [PATCH v3] " Dmitry Khromov
2015-05-12 19:29 ` Dmitry Khromov
2015-05-13 15:00 ` Evgeniy Polyakov
2015-05-13 15:31 ` gregkh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=552CC487.70402@icelogic.net \
--to=dk@icelogic.net \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=zbr@ioremap.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.