diff options
author | Phil Reid <preid@electromag.com.au> | 2017-08-24 05:31:03 -0400 |
---|---|---|
committer | Wolfram Sang <wsa@the-dreams.de> | 2017-10-28 17:42:47 -0400 |
commit | 69d17246ab255dda8e71c8d65396b4aa6121b7ad (patch) | |
tree | 9ed40351baed0773b7152f1b69996a454ef3b7c3 /drivers/i2c | |
parent | 3c0a60bee1d157d4ed9ae6a9727d508158d002c7 (diff) |
i2c: i2c-smbus: add of_i2c_setup_smbus_alert
This commit adds of_i2c_setup_smbus_alert which allows the smbalert
driver to be attached to an i2c adapter via the device tree.
Signed-off-by: Phil Reid <preid@electromag.com.au>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Diffstat (limited to 'drivers/i2c')
-rw-r--r-- | drivers/i2c/i2c-core-smbus.c | 22 | ||||
-rw-r--r-- | drivers/i2c/i2c-smbus.c | 10 |
2 files changed, 31 insertions, 1 deletions
diff --git a/drivers/i2c/i2c-core-smbus.c b/drivers/i2c/i2c-core-smbus.c index 7f3ec02f085a..4bb9927afd01 100644 --- a/drivers/i2c/i2c-core-smbus.c +++ b/drivers/i2c/i2c-core-smbus.c | |||
@@ -625,3 +625,25 @@ struct i2c_client *i2c_setup_smbus_alert(struct i2c_adapter *adapter, | |||
625 | return i2c_new_device(adapter, &ara_board_info); | 625 | return i2c_new_device(adapter, &ara_board_info); |
626 | } | 626 | } |
627 | EXPORT_SYMBOL_GPL(i2c_setup_smbus_alert); | 627 | EXPORT_SYMBOL_GPL(i2c_setup_smbus_alert); |
628 | |||
629 | #if IS_ENABLED(CONFIG_I2C_SMBUS) && IS_ENABLED(CONFIG_OF) | ||
630 | int of_i2c_setup_smbus_alert(struct i2c_adapter *adapter) | ||
631 | { | ||
632 | struct i2c_client *client; | ||
633 | int irq; | ||
634 | |||
635 | irq = of_property_match_string(adapter->dev.of_node, "interrupt-names", | ||
636 | "smbus_alert"); | ||
637 | if (irq == -EINVAL || irq == -ENODATA) | ||
638 | return 0; | ||
639 | else if (irq < 0) | ||
640 | return irq; | ||
641 | |||
642 | client = i2c_setup_smbus_alert(adapter, NULL); | ||
643 | if (!client) | ||
644 | return -ENODEV; | ||
645 | |||
646 | return 0; | ||
647 | } | ||
648 | EXPORT_SYMBOL_GPL(of_i2c_setup_smbus_alert); | ||
649 | #endif | ||
diff --git a/drivers/i2c/i2c-smbus.c b/drivers/i2c/i2c-smbus.c index d0bb0358b578..5a1dd7f13bac 100644 --- a/drivers/i2c/i2c-smbus.c +++ b/drivers/i2c/i2c-smbus.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/interrupt.h> | 21 | #include <linux/interrupt.h> |
22 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
23 | #include <linux/module.h> | 23 | #include <linux/module.h> |
24 | #include <linux/of_irq.h> | ||
24 | #include <linux/slab.h> | 25 | #include <linux/slab.h> |
25 | #include <linux/workqueue.h> | 26 | #include <linux/workqueue.h> |
26 | 27 | ||
@@ -139,7 +140,14 @@ static int smbalert_probe(struct i2c_client *ara, | |||
139 | if (!alert) | 140 | if (!alert) |
140 | return -ENOMEM; | 141 | return -ENOMEM; |
141 | 142 | ||
142 | irq = setup->irq; | 143 | if (setup) { |
144 | irq = setup->irq; | ||
145 | } else { | ||
146 | irq = of_irq_get_byname(adapter->dev.of_node, "smbus_alert"); | ||
147 | if (irq <= 0) | ||
148 | return irq; | ||
149 | } | ||
150 | |||
143 | INIT_WORK(&alert->alert, smbalert_work); | 151 | INIT_WORK(&alert->alert, smbalert_work); |
144 | alert->ara = ara; | 152 | alert->ara = ara; |
145 | 153 | ||