aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/w1/w1.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/w1/w1.c')
-rw-r--r--drivers/w1/w1.c40
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
277static 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
295static 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
273static ssize_t w1_master_attribute_show_pointer(struct device *dev, struct device_attribute *attr, char *buf) 309static 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);
365static W1_MASTER_ATTR_RO(timeout, S_IRUGO); 401static W1_MASTER_ATTR_RO(timeout, S_IRUGO);
366static W1_MASTER_ATTR_RO(pointer, S_IRUGO); 402static W1_MASTER_ATTR_RO(pointer, S_IRUGO);
367static W1_MASTER_ATTR_RW(search, S_IRUGO | S_IWUGO); 403static W1_MASTER_ATTR_RW(search, S_IRUGO | S_IWUGO);
404static W1_MASTER_ATTR_RW(pullup, S_IRUGO | S_IWUGO);
368 405
369static struct attribute *w1_master_default_attrs[] = { 406static 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