Re: [PATCH] i2c: allow specifying separate wakeup interrupt in device tree

From: Wolfram Sang
Date: Wed Aug 19 2015 - 13:44:40 EST



> > > > @@ -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);
> > >
> > > I was about to ask if we couldn't combine this and the later if-blocks
> > > with an if-else combination. But now I stumble over the above block in
> > > general: If the device cannot cause wake ups, then we might initialize
> > > it as a wakeup-device depending on client->flags??
> >
> > I believe it is done so that we do not try to re-add wakeup source after
> > unbinding/rebinding the device. With my patch we clearing wakeup flag on
> > unbind, so it is OK, but there is still error path where we might want
> > to reset the wakeup flag as well.
>
> I was wondering if it wants to achieve that, why does it not
> unconditionally use 0 instead of the WAKE flag.

When reviewing V2, I wasn't comfortable with just guessing what the old
code means. So, I did some digging and found:

https://lkml.org/lkml/2008/8/10/204

Quoting the interesting paragraph from David Brownell:

===

Better would be to preserve any existing settings:

if (!device_can_wakeup(&client->dev))
device_init_wakeup(...)
That way the userspace policy setting is preserved unless the
device itself gets removed ... instead of being clobbered by
the simple act of (re)probing a driver.

> > + device_init_wakeup(&client->dev, client->flags &
> > I2C_CLIENT_WAKE);

===

I have to admit that I am not familiar with device wakeup handling and
especially its userspace policies. Can you double check that your V2
meets the above intention?

Thanks,

Wolfram

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/