aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/w1/w1_int.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/w1/w1_int.c')
-rw-r--r--drivers/w1/w1_int.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/w1/w1_int.c b/drivers/w1/w1_int.c
index bd877b24ce42..9d723efdf915 100644
--- a/drivers/w1/w1_int.c
+++ b/drivers/w1/w1_int.c
@@ -31,6 +31,9 @@
31 31
32static u32 w1_ids = 1; 32static u32 w1_ids = 1;
33 33
34static int w1_enable_pullup = 1;
35module_param_named(enable_pullup, w1_enable_pullup, int, 0);
36
34static struct w1_master * w1_alloc_dev(u32 id, int slave_count, int slave_ttl, 37static struct w1_master * w1_alloc_dev(u32 id, int slave_count, int slave_ttl,
35 struct device_driver *driver, 38 struct device_driver *driver,
36 struct device *device) 39 struct device *device)
@@ -59,6 +62,7 @@ static struct w1_master * w1_alloc_dev(u32 id, int slave_count, int slave_ttl,
59 dev->initialized = 0; 62 dev->initialized = 0;
60 dev->id = id; 63 dev->id = id;
61 dev->slave_ttl = slave_ttl; 64 dev->slave_ttl = slave_ttl;
65 dev->enable_pullup = w1_enable_pullup;
62 dev->search_count = -1; /* continual scan */ 66 dev->search_count = -1; /* continual scan */
63 67
64 /* 1 for w1_process to decrement 68 /* 1 for w1_process to decrement
@@ -107,6 +111,18 @@ int w1_add_master_device(struct w1_bus_master *master)
107 printk(KERN_ERR "w1_add_master_device: invalid function set\n"); 111 printk(KERN_ERR "w1_add_master_device: invalid function set\n");
108 return(-EINVAL); 112 return(-EINVAL);
109 } 113 }
114 /* While it would be electrically possible to make a device that
115 * generated a strong pullup in bit bang mode, only hardare that
116 * controls 1-wire time frames are even expected to support a strong
117 * pullup. w1_io.c would need to support calling set_pullup before
118 * the last write_bit operation of a w1_write_8 which it currently
119 * doesn't.
120 */
121 if (!master->write_byte && !master->touch_bit && master->set_pullup) {
122 printk(KERN_ERR "w1_add_master_device: set_pullup requires "
123 "write_byte or touch_bit, disabling\n");
124 master->set_pullup = NULL;
125 }
110 126
111 dev = w1_alloc_dev(w1_ids++, w1_max_slave_count, w1_max_slave_ttl, &w1_master_driver, &w1_master_device); 127 dev = w1_alloc_dev(w1_ids++, w1_max_slave_count, w1_max_slave_ttl, &w1_master_driver, &w1_master_device);
112 if (!dev) 128 if (!dev)