diff options
Diffstat (limited to 'drivers/w1/w1.c')
-rw-r--r-- | drivers/w1/w1.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/drivers/w1/w1.c b/drivers/w1/w1.c index 9b5c11701c37..32418d4e555a 100644 --- a/drivers/w1/w1.c +++ b/drivers/w1/w1.c | |||
@@ -246,10 +246,14 @@ static ssize_t w1_master_attribute_store_search(struct device * dev, | |||
246 | struct device_attribute *attr, | 246 | struct device_attribute *attr, |
247 | const char * buf, size_t count) | 247 | const char * buf, size_t count) |
248 | { | 248 | { |
249 | long tmp; | ||
249 | struct w1_master *md = dev_to_w1_master(dev); | 250 | struct w1_master *md = dev_to_w1_master(dev); |
250 | 251 | ||
252 | if (strict_strtol(buf, 0, &tmp) == -EINVAL) | ||
253 | return -EINVAL; | ||
254 | |||
251 | mutex_lock(&md->mutex); | 255 | mutex_lock(&md->mutex); |
252 | md->search_count = simple_strtol(buf, NULL, 0); | 256 | md->search_count = tmp; |
253 | mutex_unlock(&md->mutex); | 257 | mutex_unlock(&md->mutex); |
254 | wake_up_process(md->thread); | 258 | wake_up_process(md->thread); |
255 | 259 | ||
@@ -270,6 +274,38 @@ static ssize_t w1_master_attribute_show_search(struct device *dev, | |||
270 | return count; | 274 | return count; |
271 | } | 275 | } |
272 | 276 | ||
277 | static ssize_t w1_master_attribute_store_pullup(struct device *dev, | ||
278 | struct device_attribute *attr, | ||
279 | const char *buf, size_t count) | ||
280 | { | ||
281 | long tmp; | ||
282 | struct w1_master *md = dev_to_w1_master(dev); | ||
283 | |||
284 | if (strict_strtol(buf, 0, &tmp) == -EINVAL) | ||
285 | return -EINVAL; | ||
286 | |||
287 | mutex_lock(&md->mutex); | ||
288 | md->enable_pullup = tmp; | ||
289 | mutex_unlock(&md->mutex); | ||
290 | wake_up_process(md->thread); | ||
291 | |||
292 | return count; | ||
293 | } | ||
294 | |||
295 | static ssize_t w1_master_attribute_show_pullup(struct device *dev, | ||
296 | struct device_attribute *attr, | ||
297 | char *buf) | ||
298 | { | ||
299 | struct w1_master *md = dev_to_w1_master(dev); | ||
300 | ssize_t count; | ||
301 | |||
302 | mutex_lock(&md->mutex); | ||
303 | count = sprintf(buf, "%d\n", md->enable_pullup); | ||
304 | mutex_unlock(&md->mutex); | ||
305 | |||
306 | return count; | ||
307 | } | ||
308 | |||
273 | static ssize_t w1_master_attribute_show_pointer(struct device *dev, struct device_attribute *attr, char *buf) | 309 | static ssize_t w1_master_attribute_show_pointer(struct device *dev, struct device_attribute *attr, char *buf) |
274 | { | 310 | { |
275 | struct w1_master *md = dev_to_w1_master(dev); | 311 | struct w1_master *md = dev_to_w1_master(dev); |
@@ -365,6 +401,7 @@ static W1_MASTER_ATTR_RO(attempts, S_IRUGO); | |||
365 | static W1_MASTER_ATTR_RO(timeout, S_IRUGO); | 401 | static W1_MASTER_ATTR_RO(timeout, S_IRUGO); |
366 | static W1_MASTER_ATTR_RO(pointer, S_IRUGO); | 402 | static W1_MASTER_ATTR_RO(pointer, S_IRUGO); |
367 | static W1_MASTER_ATTR_RW(search, S_IRUGO | S_IWUGO); | 403 | static W1_MASTER_ATTR_RW(search, S_IRUGO | S_IWUGO); |
404 | static W1_MASTER_ATTR_RW(pullup, S_IRUGO | S_IWUGO); | ||
368 | 405 | ||
369 | static struct attribute *w1_master_default_attrs[] = { | 406 | static struct attribute *w1_master_default_attrs[] = { |
370 | &w1_master_attribute_name.attr, | 407 | &w1_master_attribute_name.attr, |
@@ -375,6 +412,7 @@ static struct attribute *w1_master_default_attrs[] = { | |||
375 | &w1_master_attribute_timeout.attr, | 412 | &w1_master_attribute_timeout.attr, |
376 | &w1_master_attribute_pointer.attr, | 413 | &w1_master_attribute_pointer.attr, |
377 | &w1_master_attribute_search.attr, | 414 | &w1_master_attribute_search.attr, |
415 | &w1_master_attribute_pullup.attr, | ||
378 | NULL | 416 | NULL |
379 | }; | 417 | }; |
380 | 418 | ||