|
@@ -931,7 +931,10 @@ static int i2c_device_probe(struct device *dev)
|
|
|
if (!client->irq) {
|
|
|
int irq = -ENOENT;
|
|
|
|
|
|
- if (dev->of_node) {
|
|
|
+ if (client->flags & I2C_CLIENT_HOST_NOTIFY) {
|
|
|
+ dev_dbg(dev, "Using Host Notify IRQ\n");
|
|
|
+ irq = i2c_smbus_host_notify_to_irq(client);
|
|
|
+ } else if (dev->of_node) {
|
|
|
irq = of_irq_get_byname(dev->of_node, "irq");
|
|
|
if (irq == -EINVAL || irq == -ENODATA)
|
|
|
irq = of_irq_get(dev->of_node, 0);
|
|
@@ -940,14 +943,7 @@ static int i2c_device_probe(struct device *dev)
|
|
|
}
|
|
|
if (irq == -EPROBE_DEFER)
|
|
|
return irq;
|
|
|
- /*
|
|
|
- * ACPI and OF did not find any useful IRQ, try to see
|
|
|
- * if Host Notify can be used.
|
|
|
- */
|
|
|
- if (irq < 0) {
|
|
|
- dev_dbg(dev, "Using Host Notify IRQ\n");
|
|
|
- irq = i2c_smbus_host_notify_to_irq(client);
|
|
|
- }
|
|
|
+
|
|
|
if (irq < 0)
|
|
|
irq = 0;
|
|
|
|
|
@@ -1708,7 +1704,7 @@ static struct i2c_client *of_i2c_register_device(struct i2c_adapter *adap,
|
|
|
|
|
|
if (i2c_check_addr_validity(addr, info.flags)) {
|
|
|
dev_err(&adap->dev, "of_i2c: invalid addr=%x on %s\n",
|
|
|
- info.addr, node->full_name);
|
|
|
+ addr, node->full_name);
|
|
|
return ERR_PTR(-EINVAL);
|
|
|
}
|
|
|
|
|
@@ -1716,6 +1712,9 @@ static struct i2c_client *of_i2c_register_device(struct i2c_adapter *adap,
|
|
|
info.of_node = of_node_get(node);
|
|
|
info.archdata = &dev_ad;
|
|
|
|
|
|
+ if (of_property_read_bool(node, "host-notify"))
|
|
|
+ info.flags |= I2C_CLIENT_HOST_NOTIFY;
|
|
|
+
|
|
|
if (of_get_property(node, "wakeup-source", NULL))
|
|
|
info.flags |= I2C_CLIENT_WAKE;
|
|
|
|
|
@@ -3633,7 +3632,7 @@ int i2c_slave_register(struct i2c_client *client, i2c_slave_cb_t slave_cb)
|
|
|
int ret;
|
|
|
|
|
|
if (!client || !slave_cb) {
|
|
|
- WARN(1, "insufficent data\n");
|
|
|
+ WARN(1, "insufficient data\n");
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|