This patch adds the possibility for slave drivers to register a
callback, to be called whenever a new device matching the slave ID
is connected.

Signed-off-by: Antoine Tenart <antoine.ten...@free-electrons.com>
---
 drivers/w1/w1.c        | 10 ++++++++++
 drivers/w1/w1_family.h |  2 ++
 2 files changed, 12 insertions(+)

diff --git a/drivers/w1/w1.c b/drivers/w1/w1.c
index 80d0cc4e6e7f..7010ffd1ea93 100644
--- a/drivers/w1/w1.c
+++ b/drivers/w1/w1.c
@@ -659,6 +659,16 @@ static int w1_family_notify(unsigned long action, struct 
w1_slave *sl)
                                return err;
                        }
                }
+               if (fops->callback) {
+                       err = fops->callback(sl);
+                       /*
+                        * Do not return an error as the slave driver correctly
+                        * probed.
+                        */
+                       if (err)
+                               dev_err(&sl->dev,
+                                       "callback call failed. err=%d\n", err);
+               }
 
                break;
        case BUS_NOTIFY_DEL_DEVICE:
diff --git a/drivers/w1/w1_family.h b/drivers/w1/w1_family.h
index 10a7a0767187..5e165babc6f3 100644
--- a/drivers/w1/w1_family.h
+++ b/drivers/w1/w1_family.h
@@ -55,11 +55,13 @@ struct w1_slave;
  * @add_slave: add_slave
  * @remove_slave: remove_slave
  * @groups: sysfs group
+ * @callback: called when a new device is discovered
  */
 struct w1_family_ops
 {
        int  (* add_slave)(struct w1_slave *);
        void (* remove_slave)(struct w1_slave *);
+       int  (* callback)(struct w1_slave *);
        const struct attribute_group **groups;
 };
 
-- 
2.10.1

Reply via email to