Lines Matching refs:wirq

15  * @wirq: Wake irq specific data
19 static int dev_pm_attach_wake_irq(struct device *dev, struct wake_irq *wirq)
23 if (!dev || !wirq)
33 dev->power.wakeirq = wirq;
34 device_wakeup_attach_irq(dev, wirq);
52 struct wake_irq *wirq;
58 wirq = kzalloc(sizeof(*wirq), GFP_KERNEL);
59 if (!wirq)
62 wirq->dev = dev;
63 wirq->irq = irq;
65 err = dev_pm_attach_wake_irq(dev, wirq);
67 kfree(wirq);
86 struct wake_irq *wirq = dev->power.wakeirq;
89 if (!wirq)
97 if (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED) {
98 free_irq(wirq->irq, wirq);
99 wirq->status &= ~WAKE_IRQ_DEDICATED_MASK;
101 kfree(wirq->name);
102 kfree(wirq);
126 struct wake_irq *wirq = _wirq;
131 pm_wakeup_event(wirq->dev, 0);
137 res = pm_runtime_resume(wirq->dev);
139 dev_warn(wirq->dev,
147 struct wake_irq *wirq;
153 wirq = kzalloc(sizeof(*wirq), GFP_KERNEL);
154 if (!wirq)
157 wirq->name = kasprintf(GFP_KERNEL, "%s:wakeup", dev_name(dev));
158 if (!wirq->name) {
163 wirq->dev = dev;
164 wirq->irq = irq;
175 wirq->name, wirq);
179 err = dev_pm_attach_wake_irq(dev, wirq);
183 wirq->status = WAKE_IRQ_DEDICATED_ALLOCATED | flag;
188 free_irq(irq, wirq);
190 kfree(wirq->name);
192 kfree(wirq);
248 * Caller must hold &dev->power.lock to change wirq->status
253 struct wake_irq *wirq = dev->power.wakeirq;
255 if (!wirq || !(wirq->status & WAKE_IRQ_DEDICATED_MASK))
258 if (likely(wirq->status & WAKE_IRQ_DEDICATED_MANAGED)) {
261 wirq->status |= WAKE_IRQ_DEDICATED_MANAGED;
268 if (!can_change_status || !(wirq->status & WAKE_IRQ_DEDICATED_REVERSE)) {
269 enable_irq(wirq->irq);
270 wirq->status |= WAKE_IRQ_DEDICATED_ENABLED;
284 struct wake_irq *wirq = dev->power.wakeirq;
286 if (!wirq || !(wirq->status & WAKE_IRQ_DEDICATED_MASK))
289 if (cond_disable && (wirq->status & WAKE_IRQ_DEDICATED_REVERSE))
292 if (wirq->status & WAKE_IRQ_DEDICATED_MANAGED) {
293 wirq->status &= ~WAKE_IRQ_DEDICATED_ENABLED;
294 disable_irq_nosync(wirq->irq);
310 struct wake_irq *wirq = dev->power.wakeirq;
312 if (!wirq || !(wirq->status & WAKE_IRQ_DEDICATED_MASK))
315 if (wirq->status & WAKE_IRQ_DEDICATED_MANAGED &&
316 wirq->status & WAKE_IRQ_DEDICATED_REVERSE) {
317 enable_irq(wirq->irq);
318 wirq->status |= WAKE_IRQ_DEDICATED_ENABLED;
324 * @wirq: Device wake-up interrupt
329 void dev_pm_arm_wake_irq(struct wake_irq *wirq)
331 if (!wirq)
334 if (device_may_wakeup(wirq->dev)) {
335 if (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED &&
336 !(wirq->status & WAKE_IRQ_DEDICATED_ENABLED))
337 enable_irq(wirq->irq);
339 enable_irq_wake(wirq->irq);
345 * @wirq: Device wake-up interrupt
350 void dev_pm_disarm_wake_irq(struct wake_irq *wirq)
352 if (!wirq)
355 if (device_may_wakeup(wirq->dev)) {
356 disable_irq_wake(wirq->irq);
358 if (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED &&
359 !(wirq->status & WAKE_IRQ_DEDICATED_ENABLED))
360 disable_irq_nosync(wirq->irq);