W1: more master attributes changes:
    - rename timeout parameter/attribute to scan_interval to better
      reflect its purpose;
    - make scan_timeout be a per-device attribute and allow changing
      it from userspace via sysfs;
    - allow changing max_slave_count it from userspace as well.

Signed-off-by: Dmitry Torokhov <[EMAIL PROTECTED]>
---

 w1.c |   60 +++++++++++++++++++++++++++++++++++++++++++++++++-----------
 w1.h |    1 +
 2 files changed, 50 insertions(+), 11 deletions(-)

Index: dtor/drivers/w1/w1.c
===================================================================
--- dtor.orig/drivers/w1/w1.c
+++ dtor/drivers/w1/w1.c
@@ -42,11 +42,11 @@ MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Evgeniy Polyakov <[EMAIL PROTECTED]>");
 MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol.");
 
-static int w1_timeout = 10;
+static int w1_scan_interval = 10;
 static int w1_max_slave_count = 10;
 static int w1_max_slave_ttl = 10;
 
-module_param_named(timeout, w1_timeout, int, 0);
+module_param_named(scan_interval, w1_scan_interval, int, 0);
 module_param_named(max_slave_count, w1_max_slave_count, int, 0);
 module_param_named(slave_ttl, w1_max_slave_ttl, int, 0);
 
@@ -357,7 +357,7 @@ static int w1_process(void *data)
 
        while (!dev->need_exit) {
                try_to_freeze(PF_FREEZE);
-               msleep_interruptible(w1_timeout * 1000);
+               msleep_interruptible(dev->scan_interval * 1000);
 
                if (signal_pending(current))
                        flush_signals(current);
@@ -401,33 +401,71 @@ static ssize_t w1_master_attribute_show_
        return sprintf(buf, "%s\n", master->name);
 }
 
-static ssize_t w1_master_attribute_show_timeout(struct device *dev, char *buf)
+static ssize_t
+w1_master_attribute_show_scan_interval(struct device *dev, char *buf)
 {
-       ssize_t count;
-       count = sprintf(buf, "%d\n", w1_timeout);
-       return count;
+       struct w1_master *master = to_w1_master(dev);
+
+       return sprintf(buf, "%d\n", master->scan_interval);
+}
+
+static ssize_t
+w1_master_attribute_set_scan_interval(struct device *dev, const char *buf,
+                                     size_t n)
+{
+       struct w1_master *master = to_w1_master(dev);
+       int interval;
+
+       interval = simple_strtoul(buf, NULL, 10);
+       if (!interval)
+               return -EINVAL;
+
+       master->scan_interval = interval;
+       return 0;
 }
 
-static ssize_t w1_master_attribute_show_max_slave_count(struct device *dev, 
char *buf)
+static ssize_t
+w1_master_attribute_show_max_slave_count(struct device *dev, char *buf)
 {
        struct w1_master *master = to_w1_master(dev);
 
        return sprintf(buf, "%d\n", master->max_slave_count);
 }
 
+static ssize_t
+w1_master_attribute_set_max_slave_count(struct device *dev, const char *buf,
+                                       size_t n)
+{
+       struct w1_master *master = to_w1_master(dev);
+       int max_count;
+
+       max_count = simple_strtoul(buf, NULL, 10);
+       if (!max_count)
+               return -EINVAL;
+
+       master->max_slave_count = max_count;
+       return 0;
+}
+
 #define W1_MASTER_ATTR_RO(_name, _mode)                                \
        struct device_attribute w1_master_attribute_##_name =   \
                __ATTR(_name, _mode,                            \
                       w1_master_attribute_show_##_name, NULL)
 
+#define W1_MASTER_ATTR_RW(_name, _mode)                                \
+       struct device_attribute w1_master_attribute_##_name =   \
+               __ATTR(_name, _mode,                            \
+                      w1_master_attribute_show_##_name,        \
+                      w1_master_attribute_set_##_name)
+
 static W1_MASTER_ATTR_RO(name, S_IRUGO);
-static W1_MASTER_ATTR_RO(max_slave_count, S_IRUGO);
-static W1_MASTER_ATTR_RO(timeout, S_IRUGO);
+static W1_MASTER_ATTR_RW(max_slave_count, S_IWUSR | S_IRUGO);
+static W1_MASTER_ATTR_RW(scan_interval, S_IWUSR | S_IRUGO);
 
 static struct attribute *w1_master_default_attrs[] = {
        &w1_master_attribute_name.attr,
        &w1_master_attribute_max_slave_count.attr,
-       &w1_master_attribute_timeout.attr,
+       &w1_master_attribute_scan_interval.attr,
        NULL
 };
 
Index: dtor/drivers/w1/w1.h
===================================================================
--- dtor.orig/drivers/w1/w1.h
+++ dtor/drivers/w1/w1.h
@@ -107,6 +107,7 @@ struct w1_master
        struct list_head        slist;
        int                     max_slave_count;
        int                     slave_ttl;
+       int                     scan_interval;
        int                     initialized;
        u32                     id;
 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to