diff options
Diffstat (limited to 'drivers/w1/w1_int.c')
-rw-r--r-- | drivers/w1/w1_int.c | 16 |
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 | ||
32 | static u32 w1_ids = 1; | 32 | static u32 w1_ids = 1; |
33 | 33 | ||
34 | static int w1_enable_pullup = 1; | ||
35 | module_param_named(enable_pullup, w1_enable_pullup, int, 0); | ||
36 | |||
34 | static struct w1_master * w1_alloc_dev(u32 id, int slave_count, int slave_ttl, | 37 | static 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) |