* Vignesh R <vigneshr@xxxxxx> [150731 04:00]: > On 07/31/2015 01:44 AM, Dmitry Torokhov wrote: > > Instead of having each i2c driver individually parse device tree data in > > case it or platform supports separate wakeup interrupt, and handle > > enabling and disabling wakeup interrupts in their power management > > routines, let's have i2c core do that for us. Good idea, yes the dedicated wake-up interrupts can be handled at the bus level to keep device drivers generic. One question below though.. > > @@ -639,11 +640,13 @@ static int i2c_device_probe(struct device *dev) > > if (!client->irq) { > > int irq = -ENOENT; > > > > - if (dev->of_node) > > - irq = of_irq_get(dev->of_node, 0); > > - else if (ACPI_COMPANION(dev)) > > + 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); > > + } else if (ACPI_COMPANION(dev)) { > > irq = acpi_dev_gpio_irq_get(ACPI_COMPANION(dev), 0); > > - > > + } > > if (irq == -EPROBE_DEFER) > > return irq; > > if (irq < 0) > > @@ -659,20 +662,47 @@ static int i2c_device_probe(struct device *dev) > > if (!device_can_wakeup(&client->dev)) > > device_init_wakeup(&client->dev, > > client->flags & I2C_CLIENT_WAKE); > > + > > + if (device_can_wakeup(&client->dev)) { > > + int wakeirq = -ENOENT; > > + > > + if (dev->of_node) { > > + wakeirq = of_irq_get_byname(dev->of_node, "wakeup"); > > + if (wakeirq == -EPROBE_DEFER) > > + return wakeirq; > > + } > > + > > + if (wakeirq > 0 && wakeirq != client->irq) > > + status = dev_pm_set_dedicated_wake_irq(dev, wakeirq); > > + else if (client->irq > 0) > > + status = dev_pm_set_wake_irq(dev, wakeirq); > > + else > > + status = 0; Hmm why do we need the check for if (device_can_wakeup(&client->dev)))? Also wondering about the dev vs &client->dev usage here.. But I take you have checked that we end up calling the runtime PM calls of the client instead of the i2c bus controller :) Regards, Tony -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html