Messages in this thread | | | Date | Thu, 18 Sep 2014 13:32:06 -0700 (PDT) | From | Thomas Gleixner <> | Subject | Re: irq mask swapping during suspend/resume |
| |
On Wed, 17 Sep 2014, Dmitry Torokhov wrote: > Hi Thomas, > > On Wednesday, September 17, 2014 12:05:42 PM Thomas Gleixner wrote: > > On Tue, 16 Sep 2014, Eric Caruso wrote: > > > We would like to be able to set different irq masks for triggers during > > > normal operation and for waking up the system. For example, while a laptop > > > is awake, closing the lid and opening the lid should both fire an > > > interrupt, but when the system is asleep, we would like to stay asleep > > > when > > > closing the lid. > > > > > > We are thinking about stashing the irq mask used specifically for waking > > > the system up in the irq_desc struct, and then swapping it during > > > enable_irq_wake and disable_irq_wake calls. Devices that do not specify a > > > different wake mask will use their normal trigger mask for both > > > situations. > > > > > > Is this acceptable? > > > > Not really. Why should irq_desc provide storage for random > > configurations and bind them to some random system state? > > > > What's wrong with calling > > > > irq_set_type(irq, B); > > enable_irq_wake(irq); > > > > disable_irq_wake(irq); > > irq_set_type(irq, A); > > The desire is to avoid doing it in [every] driver but rather have it done > centrally by device/PM core. It does not have to be irq_desc though, > maybe you can suggest a better place for it (aside of the individual driver > code that is)?
Well, if it should be done by the device/pm core then you want to store that information in the device related data structure.
struct dev_pm_info might be the right place for it, but that's up to Rafael.
So driver would set
dev->power.update_wakeirq_type = true; dev->power.irq_type_normal = IRQ_TYPE_EDGE_BOTH; dev->power.irq_type_sleep = IRQ_TYPE_EDGE_LOW;
And the dev/PM core can issue the calls on suspend/resume.
Thanks,
tglx
| |