Merge branch 'fixes-v5.14' into fixes
[platform/kernel/linux-rpi.git] / drivers / w1 / w1.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Copyright (c) 2004 Evgeniy Polyakov <zbr@ioremap.net>
4  */
5
6 #include <linux/delay.h>
7 #include <linux/kernel.h>
8 #include <linux/module.h>
9 #include <linux/moduleparam.h>
10 #include <linux/list.h>
11 #include <linux/interrupt.h>
12 #include <linux/spinlock.h>
13 #include <linux/timer.h>
14 #include <linux/device.h>
15 #include <linux/slab.h>
16 #include <linux/sched.h>
17 #include <linux/kthread.h>
18 #include <linux/freezer.h>
19 #include <linux/hwmon.h>
20 #include <linux/of.h>
21
22 #include <linux/atomic.h>
23
24 #include "w1_internal.h"
25 #include "w1_netlink.h"
26
27 #define W1_FAMILY_DEFAULT       0
28 #define W1_FAMILY_DS28E04       0x1C /* for crc quirk */
29
30
31 static int w1_timeout = 10;
32 module_param_named(timeout, w1_timeout, int, 0);
33 MODULE_PARM_DESC(timeout, "time in seconds between automatic slave searches");
34
35 static int w1_timeout_us = 0;
36 module_param_named(timeout_us, w1_timeout_us, int, 0);
37 MODULE_PARM_DESC(timeout_us,
38                  "time in microseconds between automatic slave searches");
39
40 /* A search stops when w1_max_slave_count devices have been found in that
41  * search.  The next search will start over and detect the same set of devices
42  * on a static 1-wire bus.  Memory is not allocated based on this number, just
43  * on the number of devices known to the kernel.  Having a high number does not
44  * consume additional resources.  As a special case, if there is only one
45  * device on the network and w1_max_slave_count is set to 1, the device id can
46  * be read directly skipping the normal slower search process.
47  */
48 int w1_max_slave_count = 64;
49 module_param_named(max_slave_count, w1_max_slave_count, int, 0);
50 MODULE_PARM_DESC(max_slave_count,
51         "maximum number of slaves detected in a search");
52
53 int w1_max_slave_ttl = 10;
54 module_param_named(slave_ttl, w1_max_slave_ttl, int, 0);
55 MODULE_PARM_DESC(slave_ttl,
56         "Number of searches not seeing a slave before it will be removed");
57
58 DEFINE_MUTEX(w1_mlock);
59 LIST_HEAD(w1_masters);
60
61 static int w1_master_match(struct device *dev, struct device_driver *drv)
62 {
63         return 1;
64 }
65
66 static int w1_master_probe(struct device *dev)
67 {
68         return -ENODEV;
69 }
70
71 static void w1_master_release(struct device *dev)
72 {
73         struct w1_master *md = dev_to_w1_master(dev);
74
75         dev_dbg(dev, "%s: Releasing %s.\n", __func__, md->name);
76         memset(md, 0, sizeof(struct w1_master) + sizeof(struct w1_bus_master));
77         kfree(md);
78 }
79
80 static void w1_slave_release(struct device *dev)
81 {
82         struct w1_slave *sl = dev_to_w1_slave(dev);
83
84         dev_dbg(dev, "%s: Releasing %s [%p]\n", __func__, sl->name, sl);
85
86         w1_family_put(sl->family);
87         sl->master->slave_count--;
88 }
89
90 static ssize_t name_show(struct device *dev, struct device_attribute *attr, char *buf)
91 {
92         struct w1_slave *sl = dev_to_w1_slave(dev);
93
94         return sprintf(buf, "%s\n", sl->name);
95 }
96 static DEVICE_ATTR_RO(name);
97
98 static ssize_t id_show(struct device *dev,
99         struct device_attribute *attr, char *buf)
100 {
101         struct w1_slave *sl = dev_to_w1_slave(dev);
102         ssize_t count = sizeof(sl->reg_num);
103
104         memcpy(buf, (u8 *)&sl->reg_num, count);
105         return count;
106 }
107 static DEVICE_ATTR_RO(id);
108
109 static struct attribute *w1_slave_attrs[] = {
110         &dev_attr_name.attr,
111         &dev_attr_id.attr,
112         NULL,
113 };
114 ATTRIBUTE_GROUPS(w1_slave);
115
116 /* Default family */
117
118 static ssize_t rw_write(struct file *filp, struct kobject *kobj,
119                         struct bin_attribute *bin_attr, char *buf, loff_t off,
120                         size_t count)
121 {
122         struct w1_slave *sl = kobj_to_w1_slave(kobj);
123
124         mutex_lock(&sl->master->mutex);
125         if (w1_reset_select_slave(sl)) {
126                 count = 0;
127                 goto out_up;
128         }
129
130         w1_write_block(sl->master, buf, count);
131
132 out_up:
133         mutex_unlock(&sl->master->mutex);
134         return count;
135 }
136
137 static ssize_t rw_read(struct file *filp, struct kobject *kobj,
138                        struct bin_attribute *bin_attr, char *buf, loff_t off,
139                        size_t count)
140 {
141         struct w1_slave *sl = kobj_to_w1_slave(kobj);
142
143         mutex_lock(&sl->master->mutex);
144         w1_read_block(sl->master, buf, count);
145         mutex_unlock(&sl->master->mutex);
146         return count;
147 }
148
149 static BIN_ATTR_RW(rw, PAGE_SIZE);
150
151 static struct bin_attribute *w1_slave_bin_attrs[] = {
152         &bin_attr_rw,
153         NULL,
154 };
155
156 static const struct attribute_group w1_slave_default_group = {
157         .bin_attrs = w1_slave_bin_attrs,
158 };
159
160 static const struct attribute_group *w1_slave_default_groups[] = {
161         &w1_slave_default_group,
162         NULL,
163 };
164
165 static const struct w1_family_ops w1_default_fops = {
166         .groups         = w1_slave_default_groups,
167 };
168
169 static struct w1_family w1_default_family = {
170         .fops = &w1_default_fops,
171 };
172
173 static int w1_uevent(struct device *dev, struct kobj_uevent_env *env);
174
175 static struct bus_type w1_bus_type = {
176         .name = "w1",
177         .match = w1_master_match,
178         .uevent = w1_uevent,
179 };
180
181 struct device_driver w1_master_driver = {
182         .name = "w1_master_driver",
183         .bus = &w1_bus_type,
184         .probe = w1_master_probe,
185 };
186
187 struct device w1_master_device = {
188         .parent = NULL,
189         .bus = &w1_bus_type,
190         .init_name = "w1 bus master",
191         .driver = &w1_master_driver,
192         .release = &w1_master_release
193 };
194
195 static struct device_driver w1_slave_driver = {
196         .name = "w1_slave_driver",
197         .bus = &w1_bus_type,
198 };
199
200 #if 0
201 struct device w1_slave_device = {
202         .parent = NULL,
203         .bus = &w1_bus_type,
204         .init_name = "w1 bus slave",
205         .driver = &w1_slave_driver,
206         .release = &w1_slave_release
207 };
208 #endif  /*  0  */
209
210 static ssize_t w1_master_attribute_show_name(struct device *dev, struct device_attribute *attr, char *buf)
211 {
212         struct w1_master *md = dev_to_w1_master(dev);
213         ssize_t count;
214
215         mutex_lock(&md->mutex);
216         count = sprintf(buf, "%s\n", md->name);
217         mutex_unlock(&md->mutex);
218
219         return count;
220 }
221
222 static ssize_t w1_master_attribute_store_search(struct device * dev,
223                                                 struct device_attribute *attr,
224                                                 const char * buf, size_t count)
225 {
226         long tmp;
227         struct w1_master *md = dev_to_w1_master(dev);
228         int ret;
229
230         ret = kstrtol(buf, 0, &tmp);
231         if (ret)
232                 return ret;
233
234         mutex_lock(&md->mutex);
235         md->search_count = tmp;
236         mutex_unlock(&md->mutex);
237         /* Only wake if it is going to be searching. */
238         if (tmp)
239                 wake_up_process(md->thread);
240
241         return count;
242 }
243
244 static ssize_t w1_master_attribute_show_search(struct device *dev,
245                                                struct device_attribute *attr,
246                                                char *buf)
247 {
248         struct w1_master *md = dev_to_w1_master(dev);
249         ssize_t count;
250
251         mutex_lock(&md->mutex);
252         count = sprintf(buf, "%d\n", md->search_count);
253         mutex_unlock(&md->mutex);
254
255         return count;
256 }
257
258 static ssize_t w1_master_attribute_store_pullup(struct device *dev,
259                                                 struct device_attribute *attr,
260                                                 const char *buf, size_t count)
261 {
262         long tmp;
263         struct w1_master *md = dev_to_w1_master(dev);
264         int ret;
265
266         ret = kstrtol(buf, 0, &tmp);
267         if (ret)
268                 return ret;
269
270         mutex_lock(&md->mutex);
271         md->enable_pullup = tmp;
272         mutex_unlock(&md->mutex);
273
274         return count;
275 }
276
277 static ssize_t w1_master_attribute_show_pullup(struct device *dev,
278                                                struct device_attribute *attr,
279                                                char *buf)
280 {
281         struct w1_master *md = dev_to_w1_master(dev);
282         ssize_t count;
283
284         mutex_lock(&md->mutex);
285         count = sprintf(buf, "%d\n", md->enable_pullup);
286         mutex_unlock(&md->mutex);
287
288         return count;
289 }
290
291 static ssize_t w1_master_attribute_show_pointer(struct device *dev, struct device_attribute *attr, char *buf)
292 {
293         struct w1_master *md = dev_to_w1_master(dev);
294         ssize_t count;
295
296         mutex_lock(&md->mutex);
297         count = sprintf(buf, "0x%p\n", md->bus_master);
298         mutex_unlock(&md->mutex);
299         return count;
300 }
301
302 static ssize_t w1_master_attribute_show_timeout(struct device *dev, struct device_attribute *attr, char *buf)
303 {
304         ssize_t count;
305         count = sprintf(buf, "%d\n", w1_timeout);
306         return count;
307 }
308
309 static ssize_t w1_master_attribute_show_timeout_us(struct device *dev,
310         struct device_attribute *attr, char *buf)
311 {
312         ssize_t count;
313         count = sprintf(buf, "%d\n", w1_timeout_us);
314         return count;
315 }
316
317 static ssize_t w1_master_attribute_store_max_slave_count(struct device *dev,
318         struct device_attribute *attr, const char *buf, size_t count)
319 {
320         int tmp;
321         struct w1_master *md = dev_to_w1_master(dev);
322
323         if (kstrtoint(buf, 0, &tmp) || tmp < 1)
324                 return -EINVAL;
325
326         mutex_lock(&md->mutex);
327         md->max_slave_count = tmp;
328         /* allow each time the max_slave_count is updated */
329         clear_bit(W1_WARN_MAX_COUNT, &md->flags);
330         mutex_unlock(&md->mutex);
331
332         return count;
333 }
334
335 static ssize_t w1_master_attribute_show_max_slave_count(struct device *dev, struct device_attribute *attr, char *buf)
336 {
337         struct w1_master *md = dev_to_w1_master(dev);
338         ssize_t count;
339
340         mutex_lock(&md->mutex);
341         count = sprintf(buf, "%d\n", md->max_slave_count);
342         mutex_unlock(&md->mutex);
343         return count;
344 }
345
346 static ssize_t w1_master_attribute_show_attempts(struct device *dev, struct device_attribute *attr, char *buf)
347 {
348         struct w1_master *md = dev_to_w1_master(dev);
349         ssize_t count;
350
351         mutex_lock(&md->mutex);
352         count = sprintf(buf, "%lu\n", md->attempts);
353         mutex_unlock(&md->mutex);
354         return count;
355 }
356
357 static ssize_t w1_master_attribute_show_slave_count(struct device *dev, struct device_attribute *attr, char *buf)
358 {
359         struct w1_master *md = dev_to_w1_master(dev);
360         ssize_t count;
361
362         mutex_lock(&md->mutex);
363         count = sprintf(buf, "%d\n", md->slave_count);
364         mutex_unlock(&md->mutex);
365         return count;
366 }
367
368 static ssize_t w1_master_attribute_show_slaves(struct device *dev,
369         struct device_attribute *attr, char *buf)
370 {
371         struct w1_master *md = dev_to_w1_master(dev);
372         int c = PAGE_SIZE;
373         struct list_head *ent, *n;
374         struct w1_slave *sl = NULL;
375
376         mutex_lock(&md->list_mutex);
377
378         list_for_each_safe(ent, n, &md->slist) {
379                 sl = list_entry(ent, struct w1_slave, w1_slave_entry);
380
381                 c -= snprintf(buf + PAGE_SIZE - c, c, "%s\n", sl->name);
382         }
383         if (!sl)
384                 c -= snprintf(buf + PAGE_SIZE - c, c, "not found.\n");
385
386         mutex_unlock(&md->list_mutex);
387
388         return PAGE_SIZE - c;
389 }
390
391 static ssize_t w1_master_attribute_show_add(struct device *dev,
392         struct device_attribute *attr, char *buf)
393 {
394         int c = PAGE_SIZE;
395         c -= snprintf(buf+PAGE_SIZE - c, c,
396                 "write device id xx-xxxxxxxxxxxx to add slave\n");
397         return PAGE_SIZE - c;
398 }
399
400 static int w1_atoreg_num(struct device *dev, const char *buf, size_t count,
401         struct w1_reg_num *rn)
402 {
403         unsigned int family;
404         unsigned long long id;
405         int i;
406         u64 rn64_le;
407
408         /* The CRC value isn't read from the user because the sysfs directory
409          * doesn't include it and most messages from the bus search don't
410          * print it either.  It would be unreasonable for the user to then
411          * provide it.
412          */
413         const char *error_msg = "bad slave string format, expecting "
414                 "ff-dddddddddddd\n";
415
416         if (buf[2] != '-') {
417                 dev_err(dev, "%s", error_msg);
418                 return -EINVAL;
419         }
420         i = sscanf(buf, "%02x-%012llx", &family, &id);
421         if (i != 2) {
422                 dev_err(dev, "%s", error_msg);
423                 return -EINVAL;
424         }
425         rn->family = family;
426         rn->id = id;
427
428         rn64_le = cpu_to_le64(*(u64 *)rn);
429         rn->crc = w1_calc_crc8((u8 *)&rn64_le, 7);
430
431 #if 0
432         dev_info(dev, "With CRC device is %02x.%012llx.%02x.\n",
433                   rn->family, (unsigned long long)rn->id, rn->crc);
434 #endif
435
436         return 0;
437 }
438
439 /* Searches the slaves in the w1_master and returns a pointer or NULL.
440  * Note: must not hold list_mutex
441  */
442 struct w1_slave *w1_slave_search_device(struct w1_master *dev,
443         struct w1_reg_num *rn)
444 {
445         struct w1_slave *sl;
446         mutex_lock(&dev->list_mutex);
447         list_for_each_entry(sl, &dev->slist, w1_slave_entry) {
448                 if (sl->reg_num.family == rn->family &&
449                                 sl->reg_num.id == rn->id &&
450                                 sl->reg_num.crc == rn->crc) {
451                         mutex_unlock(&dev->list_mutex);
452                         return sl;
453                 }
454         }
455         mutex_unlock(&dev->list_mutex);
456         return NULL;
457 }
458
459 static ssize_t w1_master_attribute_store_add(struct device *dev,
460                                                 struct device_attribute *attr,
461                                                 const char *buf, size_t count)
462 {
463         struct w1_master *md = dev_to_w1_master(dev);
464         struct w1_reg_num rn;
465         struct w1_slave *sl;
466         ssize_t result = count;
467
468         if (w1_atoreg_num(dev, buf, count, &rn))
469                 return -EINVAL;
470
471         mutex_lock(&md->mutex);
472         sl = w1_slave_search_device(md, &rn);
473         /* It would be nice to do a targeted search one the one-wire bus
474          * for the new device to see if it is out there or not.  But the
475          * current search doesn't support that.
476          */
477         if (sl) {
478                 dev_info(dev, "Device %s already exists\n", sl->name);
479                 result = -EINVAL;
480         } else {
481                 w1_attach_slave_device(md, &rn);
482         }
483         mutex_unlock(&md->mutex);
484
485         return result;
486 }
487
488 static ssize_t w1_master_attribute_show_remove(struct device *dev,
489         struct device_attribute *attr, char *buf)
490 {
491         int c = PAGE_SIZE;
492         c -= snprintf(buf+PAGE_SIZE - c, c,
493                 "write device id xx-xxxxxxxxxxxx to remove slave\n");
494         return PAGE_SIZE - c;
495 }
496
497 static ssize_t w1_master_attribute_store_remove(struct device *dev,
498                                                 struct device_attribute *attr,
499                                                 const char *buf, size_t count)
500 {
501         struct w1_master *md = dev_to_w1_master(dev);
502         struct w1_reg_num rn;
503         struct w1_slave *sl;
504         ssize_t result = count;
505
506         if (w1_atoreg_num(dev, buf, count, &rn))
507                 return -EINVAL;
508
509         mutex_lock(&md->mutex);
510         sl = w1_slave_search_device(md, &rn);
511         if (sl) {
512                 result = w1_slave_detach(sl);
513                 /* refcnt 0 means it was detached in the call */
514                 if (result == 0)
515                         result = count;
516         } else {
517                 dev_info(dev, "Device %02x-%012llx doesn't exists\n", rn.family,
518                         (unsigned long long)rn.id);
519                 result = -EINVAL;
520         }
521         mutex_unlock(&md->mutex);
522
523         return result;
524 }
525
526 #define W1_MASTER_ATTR_RO(_name, _mode)                         \
527         struct device_attribute w1_master_attribute_##_name =   \
528                 __ATTR(w1_master_##_name, _mode,                \
529                        w1_master_attribute_show_##_name, NULL)
530
531 #define W1_MASTER_ATTR_RW(_name, _mode)                         \
532         struct device_attribute w1_master_attribute_##_name =   \
533                 __ATTR(w1_master_##_name, _mode,                \
534                        w1_master_attribute_show_##_name,        \
535                        w1_master_attribute_store_##_name)
536
537 static W1_MASTER_ATTR_RO(name, S_IRUGO);
538 static W1_MASTER_ATTR_RO(slaves, S_IRUGO);
539 static W1_MASTER_ATTR_RO(slave_count, S_IRUGO);
540 static W1_MASTER_ATTR_RW(max_slave_count, S_IRUGO | S_IWUSR | S_IWGRP);
541 static W1_MASTER_ATTR_RO(attempts, S_IRUGO);
542 static W1_MASTER_ATTR_RO(timeout, S_IRUGO);
543 static W1_MASTER_ATTR_RO(timeout_us, S_IRUGO);
544 static W1_MASTER_ATTR_RO(pointer, S_IRUGO);
545 static W1_MASTER_ATTR_RW(search, S_IRUGO | S_IWUSR | S_IWGRP);
546 static W1_MASTER_ATTR_RW(pullup, S_IRUGO | S_IWUSR | S_IWGRP);
547 static W1_MASTER_ATTR_RW(add, S_IRUGO | S_IWUSR | S_IWGRP);
548 static W1_MASTER_ATTR_RW(remove, S_IRUGO | S_IWUSR | S_IWGRP);
549
550 static struct attribute *w1_master_default_attrs[] = {
551         &w1_master_attribute_name.attr,
552         &w1_master_attribute_slaves.attr,
553         &w1_master_attribute_slave_count.attr,
554         &w1_master_attribute_max_slave_count.attr,
555         &w1_master_attribute_attempts.attr,
556         &w1_master_attribute_timeout.attr,
557         &w1_master_attribute_timeout_us.attr,
558         &w1_master_attribute_pointer.attr,
559         &w1_master_attribute_search.attr,
560         &w1_master_attribute_pullup.attr,
561         &w1_master_attribute_add.attr,
562         &w1_master_attribute_remove.attr,
563         NULL
564 };
565
566 static const struct attribute_group w1_master_defattr_group = {
567         .attrs = w1_master_default_attrs,
568 };
569
570 int w1_create_master_attributes(struct w1_master *master)
571 {
572         return sysfs_create_group(&master->dev.kobj, &w1_master_defattr_group);
573 }
574
575 void w1_destroy_master_attributes(struct w1_master *master)
576 {
577         sysfs_remove_group(&master->dev.kobj, &w1_master_defattr_group);
578 }
579
580 static int w1_uevent(struct device *dev, struct kobj_uevent_env *env)
581 {
582         struct w1_master *md = NULL;
583         struct w1_slave *sl = NULL;
584         char *event_owner, *name;
585         int err = 0;
586
587         if (dev->driver == &w1_master_driver) {
588                 md = container_of(dev, struct w1_master, dev);
589                 event_owner = "master";
590                 name = md->name;
591         } else if (dev->driver == &w1_slave_driver) {
592                 sl = container_of(dev, struct w1_slave, dev);
593                 event_owner = "slave";
594                 name = sl->name;
595         } else {
596                 dev_dbg(dev, "Unknown event.\n");
597                 return -EINVAL;
598         }
599
600         dev_dbg(dev, "Hotplug event for %s %s, bus_id=%s.\n",
601                         event_owner, name, dev_name(dev));
602
603         if (dev->driver != &w1_slave_driver || !sl)
604                 goto end;
605
606         err = add_uevent_var(env, "W1_FID=%02X", sl->reg_num.family);
607         if (err)
608                 goto end;
609
610         err = add_uevent_var(env, "W1_SLAVE_ID=%024LX",
611                              (unsigned long long)sl->reg_num.id);
612 end:
613         return err;
614 }
615
616 static int w1_family_notify(unsigned long action, struct w1_slave *sl)
617 {
618         const struct w1_family_ops *fops;
619         int err;
620
621         fops = sl->family->fops;
622
623         if (!fops)
624                 return 0;
625
626         switch (action) {
627         case BUS_NOTIFY_ADD_DEVICE:
628                 /* if the family driver needs to initialize something... */
629                 if (fops->add_slave) {
630                         err = fops->add_slave(sl);
631                         if (err < 0) {
632                                 dev_err(&sl->dev,
633                                         "add_slave() call failed. err=%d\n",
634                                         err);
635                                 return err;
636                         }
637                 }
638                 if (fops->groups) {
639                         err = sysfs_create_groups(&sl->dev.kobj, fops->groups);
640                         if (err) {
641                                 dev_err(&sl->dev,
642                                         "sysfs group creation failed. err=%d\n",
643                                         err);
644                                 return err;
645                         }
646                 }
647                 if (IS_REACHABLE(CONFIG_HWMON) && fops->chip_info) {
648                         struct device *hwmon
649                                 = hwmon_device_register_with_info(&sl->dev,
650                                                 "w1_slave_temp", sl,
651                                                 fops->chip_info,
652                                                 NULL);
653                         if (IS_ERR(hwmon)) {
654                                 dev_warn(&sl->dev,
655                                          "could not create hwmon device\n");
656                         } else {
657                                 sl->hwmon = hwmon;
658                         }
659                 }
660                 break;
661         case BUS_NOTIFY_DEL_DEVICE:
662                 if (IS_REACHABLE(CONFIG_HWMON) && fops->chip_info &&
663                             sl->hwmon)
664                         hwmon_device_unregister(sl->hwmon);
665                 if (fops->remove_slave)
666                         sl->family->fops->remove_slave(sl);
667                 if (fops->groups)
668                         sysfs_remove_groups(&sl->dev.kobj, fops->groups);
669                 break;
670         }
671         return 0;
672 }
673
674 static int __w1_attach_slave_device(struct w1_slave *sl)
675 {
676         int err;
677
678         sl->dev.parent = &sl->master->dev;
679         sl->dev.driver = &w1_slave_driver;
680         sl->dev.bus = &w1_bus_type;
681         sl->dev.release = &w1_slave_release;
682         sl->dev.groups = w1_slave_groups;
683         sl->dev.of_node = of_find_matching_node(sl->master->dev.of_node,
684                                                 sl->family->of_match_table);
685
686         dev_set_name(&sl->dev, "%02x-%012llx",
687                  (unsigned int) sl->reg_num.family,
688                  (unsigned long long) sl->reg_num.id);
689         snprintf(&sl->name[0], sizeof(sl->name),
690                  "%02x-%012llx",
691                  (unsigned int) sl->reg_num.family,
692                  (unsigned long long) sl->reg_num.id);
693
694         dev_dbg(&sl->dev, "%s: registering %s as %p.\n", __func__,
695                 dev_name(&sl->dev), sl);
696
697         /* suppress for w1_family_notify before sending KOBJ_ADD */
698         dev_set_uevent_suppress(&sl->dev, true);
699
700         err = device_register(&sl->dev);
701         if (err < 0) {
702                 dev_err(&sl->dev,
703                         "Device registration [%s] failed. err=%d\n",
704                         dev_name(&sl->dev), err);
705                 put_device(&sl->dev);
706                 return err;
707         }
708         w1_family_notify(BUS_NOTIFY_ADD_DEVICE, sl);
709
710         dev_set_uevent_suppress(&sl->dev, false);
711         kobject_uevent(&sl->dev.kobj, KOBJ_ADD);
712
713         mutex_lock(&sl->master->list_mutex);
714         list_add_tail(&sl->w1_slave_entry, &sl->master->slist);
715         mutex_unlock(&sl->master->list_mutex);
716
717         return 0;
718 }
719
720 int w1_attach_slave_device(struct w1_master *dev, struct w1_reg_num *rn)
721 {
722         struct w1_slave *sl;
723         struct w1_family *f;
724         int err;
725         struct w1_netlink_msg msg;
726
727         sl = kzalloc(sizeof(struct w1_slave), GFP_KERNEL);
728         if (!sl) {
729                 dev_err(&dev->dev,
730                          "%s: failed to allocate new slave device.\n",
731                          __func__);
732                 return -ENOMEM;
733         }
734
735
736         sl->owner = THIS_MODULE;
737         sl->master = dev;
738         set_bit(W1_SLAVE_ACTIVE, &sl->flags);
739
740         memset(&msg, 0, sizeof(msg));
741         memcpy(&sl->reg_num, rn, sizeof(sl->reg_num));
742         atomic_set(&sl->refcnt, 1);
743         atomic_inc(&sl->master->refcnt);
744         dev->slave_count++;
745         dev_info(&dev->dev, "Attaching one wire slave %02x.%012llx crc %02x\n",
746                   rn->family, (unsigned long long)rn->id, rn->crc);
747
748         /* slave modules need to be loaded in a context with unlocked mutex */
749         mutex_unlock(&dev->mutex);
750         request_module("w1-family-0x%02X", rn->family);
751         mutex_lock(&dev->mutex);
752
753         spin_lock(&w1_flock);
754         f = w1_family_registered(rn->family);
755         if (!f) {
756                 f= &w1_default_family;
757                 dev_info(&dev->dev, "Family %x for %02x.%012llx.%02x is not registered.\n",
758                           rn->family, rn->family,
759                           (unsigned long long)rn->id, rn->crc);
760         }
761         __w1_family_get(f);
762         spin_unlock(&w1_flock);
763
764         sl->family = f;
765
766         err = __w1_attach_slave_device(sl);
767         if (err < 0) {
768                 dev_err(&dev->dev, "%s: Attaching %s failed.\n", __func__,
769                          sl->name);
770                 dev->slave_count--;
771                 w1_family_put(sl->family);
772                 atomic_dec(&sl->master->refcnt);
773                 kfree(sl);
774                 return err;
775         }
776
777         sl->ttl = dev->slave_ttl;
778
779         memcpy(msg.id.id, rn, sizeof(msg.id));
780         msg.type = W1_SLAVE_ADD;
781         w1_netlink_send(dev, &msg);
782
783         return 0;
784 }
785
786 int w1_unref_slave(struct w1_slave *sl)
787 {
788         struct w1_master *dev = sl->master;
789         int refcnt;
790         mutex_lock(&dev->list_mutex);
791         refcnt = atomic_sub_return(1, &sl->refcnt);
792         if (refcnt == 0) {
793                 struct w1_netlink_msg msg;
794
795                 dev_dbg(&sl->dev, "%s: detaching %s [%p].\n", __func__,
796                         sl->name, sl);
797
798                 list_del(&sl->w1_slave_entry);
799
800                 memset(&msg, 0, sizeof(msg));
801                 memcpy(msg.id.id, &sl->reg_num, sizeof(msg.id));
802                 msg.type = W1_SLAVE_REMOVE;
803                 w1_netlink_send(sl->master, &msg);
804
805                 w1_family_notify(BUS_NOTIFY_DEL_DEVICE, sl);
806                 device_unregister(&sl->dev);
807                 #ifdef DEBUG
808                 memset(sl, 0, sizeof(*sl));
809                 #endif
810                 kfree(sl);
811         }
812         atomic_dec(&dev->refcnt);
813         mutex_unlock(&dev->list_mutex);
814         return refcnt;
815 }
816
817 int w1_slave_detach(struct w1_slave *sl)
818 {
819         /* Only detach a slave once as it decreases the refcnt each time. */
820         int destroy_now;
821         mutex_lock(&sl->master->list_mutex);
822         destroy_now = !test_bit(W1_SLAVE_DETACH, &sl->flags);
823         set_bit(W1_SLAVE_DETACH, &sl->flags);
824         mutex_unlock(&sl->master->list_mutex);
825
826         if (destroy_now)
827                 destroy_now = !w1_unref_slave(sl);
828         return destroy_now ? 0 : -EBUSY;
829 }
830
831 struct w1_master *w1_search_master_id(u32 id)
832 {
833         struct w1_master *dev;
834         int found = 0;
835
836         mutex_lock(&w1_mlock);
837         list_for_each_entry(dev, &w1_masters, w1_master_entry) {
838                 if (dev->id == id) {
839                         found = 1;
840                         atomic_inc(&dev->refcnt);
841                         break;
842                 }
843         }
844         mutex_unlock(&w1_mlock);
845
846         return (found)?dev:NULL;
847 }
848
849 struct w1_slave *w1_search_slave(struct w1_reg_num *id)
850 {
851         struct w1_master *dev;
852         struct w1_slave *sl = NULL;
853         int found = 0;
854
855         mutex_lock(&w1_mlock);
856         list_for_each_entry(dev, &w1_masters, w1_master_entry) {
857                 mutex_lock(&dev->list_mutex);
858                 list_for_each_entry(sl, &dev->slist, w1_slave_entry) {
859                         if (sl->reg_num.family == id->family &&
860                                         sl->reg_num.id == id->id &&
861                                         sl->reg_num.crc == id->crc) {
862                                 found = 1;
863                                 atomic_inc(&dev->refcnt);
864                                 atomic_inc(&sl->refcnt);
865                                 break;
866                         }
867                 }
868                 mutex_unlock(&dev->list_mutex);
869
870                 if (found)
871                         break;
872         }
873         mutex_unlock(&w1_mlock);
874
875         return (found)?sl:NULL;
876 }
877
878 void w1_reconnect_slaves(struct w1_family *f, int attach)
879 {
880         struct w1_slave *sl, *sln;
881         struct w1_master *dev;
882
883         mutex_lock(&w1_mlock);
884         list_for_each_entry(dev, &w1_masters, w1_master_entry) {
885                 dev_dbg(&dev->dev, "Reconnecting slaves in device %s "
886                         "for family %02x.\n", dev->name, f->fid);
887                 mutex_lock(&dev->mutex);
888                 mutex_lock(&dev->list_mutex);
889                 list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) {
890                         /* If it is a new family, slaves with the default
891                          * family driver and are that family will be
892                          * connected.  If the family is going away, devices
893                          * matching that family are reconneced.
894                          */
895                         if ((attach && sl->family->fid == W1_FAMILY_DEFAULT
896                                 && sl->reg_num.family == f->fid) ||
897                                 (!attach && sl->family->fid == f->fid)) {
898                                 struct w1_reg_num rn;
899
900                                 mutex_unlock(&dev->list_mutex);
901                                 memcpy(&rn, &sl->reg_num, sizeof(rn));
902                                 /* If it was already in use let the automatic
903                                  * scan pick it up again later.
904                                  */
905                                 if (!w1_slave_detach(sl))
906                                         w1_attach_slave_device(dev, &rn);
907                                 mutex_lock(&dev->list_mutex);
908                         }
909                 }
910                 dev_dbg(&dev->dev, "Reconnecting slaves in device %s "
911                         "has been finished.\n", dev->name);
912                 mutex_unlock(&dev->list_mutex);
913                 mutex_unlock(&dev->mutex);
914         }
915         mutex_unlock(&w1_mlock);
916 }
917
918 static int w1_addr_crc_is_valid(struct w1_master *dev, u64 rn)
919 {
920         u64 rn_le = cpu_to_le64(rn);
921         struct w1_reg_num *tmp = (struct w1_reg_num *)&rn;
922         u8 crc;
923
924         crc = w1_calc_crc8((u8 *)&rn_le, 7);
925
926         /* quirk:
927          *   DS28E04 (1w eeprom) has strapping pins to change
928          *   address, but will not update the crc. So normal rules
929          *   for consistent w1 addresses are violated. We test
930          *   with the 7 LSBs of the address forced high.
931          *
932          *   (char*)&rn_le = { family, addr_lsb, ..., addr_msb, crc }.
933          */
934         if (crc != tmp->crc && tmp->family == W1_FAMILY_DS28E04) {
935                 u64 corr_le = rn_le;
936
937                 ((u8 *)&corr_le)[1] |= 0x7f;
938                 crc = w1_calc_crc8((u8 *)&corr_le, 7);
939
940                 dev_info(&dev->dev, "DS28E04 crc workaround on %02x.%012llx.%02x\n",
941                         tmp->family, (unsigned long long)tmp->id, tmp->crc);
942         }
943
944         if (crc != tmp->crc) {
945                 dev_dbg(&dev->dev, "w1 addr crc mismatch: %02x.%012llx.%02x != 0x%02x.\n",
946                         tmp->family, (unsigned long long)tmp->id, tmp->crc, crc);
947                 return 0;
948         }
949         return 1;
950 }
951
952 void w1_slave_found(struct w1_master *dev, u64 rn)
953 {
954         struct w1_slave *sl;
955         struct w1_reg_num *tmp;
956
957         atomic_inc(&dev->refcnt);
958
959         tmp = (struct w1_reg_num *) &rn;
960
961         sl = w1_slave_search_device(dev, tmp);
962         if (sl) {
963                 set_bit(W1_SLAVE_ACTIVE, &sl->flags);
964         } else {
965                 if (rn && w1_addr_crc_is_valid(dev, rn))
966                         w1_attach_slave_device(dev, tmp);
967         }
968
969         atomic_dec(&dev->refcnt);
970 }
971
972 /**
973  * w1_search() - Performs a ROM Search & registers any devices found.
974  * @dev: The master device to search
975  * @search_type: W1_SEARCH to search all devices, or W1_ALARM_SEARCH
976  * to return only devices in the alarmed state
977  * @cb: Function to call when a device is found
978  *
979  * The 1-wire search is a simple binary tree search.
980  * For each bit of the address, we read two bits and write one bit.
981  * The bit written will put to sleep all devies that don't match that bit.
982  * When the two reads differ, the direction choice is obvious.
983  * When both bits are 0, we must choose a path to take.
984  * When we can scan all 64 bits without having to choose a path, we are done.
985  *
986  * See "Application note 187 1-wire search algorithm" at www.maxim-ic.com
987  *
988  */
989 void w1_search(struct w1_master *dev, u8 search_type, w1_slave_found_callback cb)
990 {
991         u64 last_rn, rn, tmp64;
992         int i, slave_count = 0;
993         int last_zero, last_device;
994         int search_bit, desc_bit;
995         u8  triplet_ret = 0;
996
997         search_bit = 0;
998         rn = dev->search_id;
999         last_rn = 0;
1000         last_device = 0;
1001         last_zero = -1;
1002
1003         desc_bit = 64;
1004
1005         while ( !last_device && (slave_count++ < dev->max_slave_count) ) {
1006                 last_rn = rn;
1007                 rn = 0;
1008
1009                 /*
1010                  * Reset bus and all 1-wire device state machines
1011                  * so they can respond to our requests.
1012                  *
1013                  * Return 0 - device(s) present, 1 - no devices present.
1014                  */
1015                 mutex_lock(&dev->bus_mutex);
1016                 if (w1_reset_bus(dev)) {
1017                         mutex_unlock(&dev->bus_mutex);
1018                         dev_dbg(&dev->dev, "No devices present on the wire.\n");
1019                         break;
1020                 }
1021
1022                 /* Do fast search on single slave bus */
1023                 if (dev->max_slave_count == 1) {
1024                         int rv;
1025                         w1_write_8(dev, W1_READ_ROM);
1026                         rv = w1_read_block(dev, (u8 *)&rn, 8);
1027                         mutex_unlock(&dev->bus_mutex);
1028
1029                         if (rv == 8 && rn)
1030                                 cb(dev, rn);
1031
1032                         break;
1033                 }
1034
1035                 /* Start the search */
1036                 w1_write_8(dev, search_type);
1037                 for (i = 0; i < 64; ++i) {
1038                         /* Determine the direction/search bit */
1039                         if (i == desc_bit)
1040                                 search_bit = 1;   /* took the 0 path last time, so take the 1 path */
1041                         else if (i > desc_bit)
1042                                 search_bit = 0;   /* take the 0 path on the next branch */
1043                         else
1044                                 search_bit = ((last_rn >> i) & 0x1);
1045
1046                         /* Read two bits and write one bit */
1047                         triplet_ret = w1_triplet(dev, search_bit);
1048
1049                         /* quit if no device responded */
1050                         if ( (triplet_ret & 0x03) == 0x03 )
1051                                 break;
1052
1053                         /* If both directions were valid, and we took the 0 path... */
1054                         if (triplet_ret == 0)
1055                                 last_zero = i;
1056
1057                         /* extract the direction taken & update the device number */
1058                         tmp64 = (triplet_ret >> 2);
1059                         rn |= (tmp64 << i);
1060
1061                         if (test_bit(W1_ABORT_SEARCH, &dev->flags)) {
1062                                 mutex_unlock(&dev->bus_mutex);
1063                                 dev_dbg(&dev->dev, "Abort w1_search\n");
1064                                 return;
1065                         }
1066                 }
1067                 mutex_unlock(&dev->bus_mutex);
1068
1069                 if ( (triplet_ret & 0x03) != 0x03 ) {
1070                         if ((desc_bit == last_zero) || (last_zero < 0)) {
1071                                 last_device = 1;
1072                                 dev->search_id = 0;
1073                         } else {
1074                                 dev->search_id = rn;
1075                         }
1076                         desc_bit = last_zero;
1077                         cb(dev, rn);
1078                 }
1079
1080                 if (!last_device && slave_count == dev->max_slave_count &&
1081                         !test_bit(W1_WARN_MAX_COUNT, &dev->flags)) {
1082                         /* Only max_slave_count will be scanned in a search,
1083                          * but it will start where it left off next search
1084                          * until all ids are identified and then it will start
1085                          * over.  A continued search will report the previous
1086                          * last id as the first id (provided it is still on the
1087                          * bus).
1088                          */
1089                         dev_info(&dev->dev, "%s: max_slave_count %d reached, "
1090                                 "will continue next search.\n", __func__,
1091                                 dev->max_slave_count);
1092                         set_bit(W1_WARN_MAX_COUNT, &dev->flags);
1093                 }
1094         }
1095 }
1096
1097 void w1_search_process_cb(struct w1_master *dev, u8 search_type,
1098         w1_slave_found_callback cb)
1099 {
1100         struct w1_slave *sl, *sln;
1101
1102         mutex_lock(&dev->list_mutex);
1103         list_for_each_entry(sl, &dev->slist, w1_slave_entry)
1104                 clear_bit(W1_SLAVE_ACTIVE, &sl->flags);
1105         mutex_unlock(&dev->list_mutex);
1106
1107         w1_search_devices(dev, search_type, cb);
1108
1109         mutex_lock(&dev->list_mutex);
1110         list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) {
1111                 if (!test_bit(W1_SLAVE_ACTIVE, &sl->flags) && !--sl->ttl) {
1112                         mutex_unlock(&dev->list_mutex);
1113                         w1_slave_detach(sl);
1114                         mutex_lock(&dev->list_mutex);
1115                 }
1116                 else if (test_bit(W1_SLAVE_ACTIVE, &sl->flags))
1117                         sl->ttl = dev->slave_ttl;
1118         }
1119         mutex_unlock(&dev->list_mutex);
1120
1121         if (dev->search_count > 0)
1122                 dev->search_count--;
1123 }
1124
1125 static void w1_search_process(struct w1_master *dev, u8 search_type)
1126 {
1127         w1_search_process_cb(dev, search_type, w1_slave_found);
1128 }
1129
1130 /**
1131  * w1_process_callbacks() - execute each dev->async_list callback entry
1132  * @dev: w1_master device
1133  *
1134  * The w1 master list_mutex must be held.
1135  *
1136  * Return: 1 if there were commands to executed 0 otherwise
1137  */
1138 int w1_process_callbacks(struct w1_master *dev)
1139 {
1140         int ret = 0;
1141         struct w1_async_cmd *async_cmd, *async_n;
1142
1143         /* The list can be added to in another thread, loop until it is empty */
1144         while (!list_empty(&dev->async_list)) {
1145                 list_for_each_entry_safe(async_cmd, async_n, &dev->async_list,
1146                         async_entry) {
1147                         /* drop the lock, if it is a search it can take a long
1148                          * time */
1149                         mutex_unlock(&dev->list_mutex);
1150                         async_cmd->cb(dev, async_cmd);
1151                         ret = 1;
1152                         mutex_lock(&dev->list_mutex);
1153                 }
1154         }
1155         return ret;
1156 }
1157
1158 int w1_process(void *data)
1159 {
1160         struct w1_master *dev = (struct w1_master *) data;
1161         /* As long as w1_timeout is only set by a module parameter the sleep
1162          * time can be calculated in jiffies once.
1163          */
1164         const unsigned long jtime =
1165           usecs_to_jiffies(w1_timeout * 1000000 + w1_timeout_us);
1166         /* remainder if it woke up early */
1167         unsigned long jremain = 0;
1168
1169         for (;;) {
1170
1171                 if (!jremain && dev->search_count) {
1172                         mutex_lock(&dev->mutex);
1173                         w1_search_process(dev, W1_SEARCH);
1174                         mutex_unlock(&dev->mutex);
1175                 }
1176
1177                 mutex_lock(&dev->list_mutex);
1178                 /* Note, w1_process_callback drops the lock while processing,
1179                  * but locks it again before returning.
1180                  */
1181                 if (!w1_process_callbacks(dev) && jremain) {
1182                         /* a wake up is either to stop the thread, process
1183                          * callbacks, or search, it isn't process callbacks, so
1184                          * schedule a search.
1185                          */
1186                         jremain = 1;
1187                 }
1188
1189                 __set_current_state(TASK_INTERRUPTIBLE);
1190
1191                 /* hold list_mutex until after interruptible to prevent loosing
1192                  * the wakeup signal when async_cmd is added.
1193                  */
1194                 mutex_unlock(&dev->list_mutex);
1195
1196                 if (kthread_should_stop())
1197                         break;
1198
1199                 /* Only sleep when the search is active. */
1200                 if (dev->search_count) {
1201                         if (!jremain)
1202                                 jremain = jtime;
1203                         jremain = schedule_timeout(jremain);
1204                 }
1205                 else
1206                         schedule();
1207         }
1208
1209         atomic_dec(&dev->refcnt);
1210
1211         return 0;
1212 }
1213
1214 static int __init w1_init(void)
1215 {
1216         int retval;
1217
1218         pr_info("Driver for 1-wire Dallas network protocol.\n");
1219
1220         w1_init_netlink();
1221
1222         retval = bus_register(&w1_bus_type);
1223         if (retval) {
1224                 pr_err("Failed to register bus. err=%d.\n", retval);
1225                 goto err_out_exit_init;
1226         }
1227
1228         retval = driver_register(&w1_master_driver);
1229         if (retval) {
1230                 pr_err("Failed to register master driver. err=%d.\n",
1231                         retval);
1232                 goto err_out_bus_unregister;
1233         }
1234
1235         retval = driver_register(&w1_slave_driver);
1236         if (retval) {
1237                 pr_err("Failed to register slave driver. err=%d.\n",
1238                         retval);
1239                 goto err_out_master_unregister;
1240         }
1241
1242         return 0;
1243
1244 #if 0
1245 /* For undoing the slave register if there was a step after it. */
1246 err_out_slave_unregister:
1247         driver_unregister(&w1_slave_driver);
1248 #endif
1249
1250 err_out_master_unregister:
1251         driver_unregister(&w1_master_driver);
1252
1253 err_out_bus_unregister:
1254         bus_unregister(&w1_bus_type);
1255
1256 err_out_exit_init:
1257         return retval;
1258 }
1259
1260 static void __exit w1_fini(void)
1261 {
1262         struct w1_master *dev;
1263
1264         /* Set netlink removal messages and some cleanup */
1265         list_for_each_entry(dev, &w1_masters, w1_master_entry)
1266                 __w1_remove_master_device(dev);
1267
1268         w1_fini_netlink();
1269
1270         driver_unregister(&w1_slave_driver);
1271         driver_unregister(&w1_master_driver);
1272         bus_unregister(&w1_bus_type);
1273 }
1274
1275 module_init(w1_init);
1276 module_exit(w1_fini);
1277
1278 MODULE_AUTHOR("Evgeniy Polyakov <zbr@ioremap.net>");
1279 MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol.");
1280 MODULE_LICENSE("GPL");