Lines Matching refs:wirq

19 static int dev_pm_attach_wake_irq(struct device *dev, struct wake_irq *wirq)  in dev_pm_attach_wake_irq()  argument
23 if (!dev || !wirq) in dev_pm_attach_wake_irq()
33 dev->power.wakeirq = wirq; in dev_pm_attach_wake_irq()
34 device_wakeup_attach_irq(dev, wirq); in dev_pm_attach_wake_irq()
52 struct wake_irq *wirq; in dev_pm_set_wake_irq() local
58 wirq = kzalloc(sizeof(*wirq), GFP_KERNEL); in dev_pm_set_wake_irq()
59 if (!wirq) in dev_pm_set_wake_irq()
62 wirq->dev = dev; in dev_pm_set_wake_irq()
63 wirq->irq = irq; in dev_pm_set_wake_irq()
65 err = dev_pm_attach_wake_irq(dev, wirq); in dev_pm_set_wake_irq()
67 kfree(wirq); in dev_pm_set_wake_irq()
86 struct wake_irq *wirq = dev->power.wakeirq; in dev_pm_clear_wake_irq() local
89 if (!wirq) in dev_pm_clear_wake_irq()
97 if (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED) { in dev_pm_clear_wake_irq()
98 free_irq(wirq->irq, wirq); in dev_pm_clear_wake_irq()
99 wirq->status &= ~WAKE_IRQ_DEDICATED_MASK; in dev_pm_clear_wake_irq()
101 kfree(wirq->name); in dev_pm_clear_wake_irq()
102 kfree(wirq); in dev_pm_clear_wake_irq()
126 struct wake_irq *wirq = _wirq; in handle_threaded_wake_irq() local
131 pm_wakeup_event(wirq->dev, 0); in handle_threaded_wake_irq()
137 res = pm_runtime_resume(wirq->dev); in handle_threaded_wake_irq()
139 dev_warn(wirq->dev, in handle_threaded_wake_irq()
147 struct wake_irq *wirq; in __dev_pm_set_dedicated_wake_irq() local
153 wirq = kzalloc(sizeof(*wirq), GFP_KERNEL); in __dev_pm_set_dedicated_wake_irq()
154 if (!wirq) in __dev_pm_set_dedicated_wake_irq()
157 wirq->name = kasprintf(GFP_KERNEL, "%s:wakeup", dev_name(dev)); in __dev_pm_set_dedicated_wake_irq()
158 if (!wirq->name) { in __dev_pm_set_dedicated_wake_irq()
163 wirq->dev = dev; in __dev_pm_set_dedicated_wake_irq()
164 wirq->irq = irq; in __dev_pm_set_dedicated_wake_irq()
175 wirq->name, wirq); in __dev_pm_set_dedicated_wake_irq()
179 err = dev_pm_attach_wake_irq(dev, wirq); in __dev_pm_set_dedicated_wake_irq()
183 wirq->status = WAKE_IRQ_DEDICATED_ALLOCATED | flag; in __dev_pm_set_dedicated_wake_irq()
188 free_irq(irq, wirq); in __dev_pm_set_dedicated_wake_irq()
190 kfree(wirq->name); in __dev_pm_set_dedicated_wake_irq()
192 kfree(wirq); in __dev_pm_set_dedicated_wake_irq()
261 struct wake_irq *wirq = dev->power.wakeirq; in dev_pm_enable_wake_irq() local
263 if (wirq && (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED)) in dev_pm_enable_wake_irq()
264 enable_irq(wirq->irq); in dev_pm_enable_wake_irq()
278 struct wake_irq *wirq = dev->power.wakeirq; in dev_pm_disable_wake_irq() local
280 if (wirq && (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED)) in dev_pm_disable_wake_irq()
281 disable_irq_nosync(wirq->irq); in dev_pm_disable_wake_irq()
302 struct wake_irq *wirq = dev->power.wakeirq; in dev_pm_enable_wake_irq_check() local
304 if (!wirq || !(wirq->status & WAKE_IRQ_DEDICATED_MASK)) in dev_pm_enable_wake_irq_check()
307 if (likely(wirq->status & WAKE_IRQ_DEDICATED_MANAGED)) { in dev_pm_enable_wake_irq_check()
310 wirq->status |= WAKE_IRQ_DEDICATED_MANAGED; in dev_pm_enable_wake_irq_check()
317 if (!can_change_status || !(wirq->status & WAKE_IRQ_DEDICATED_REVERSE)) in dev_pm_enable_wake_irq_check()
318 enable_irq(wirq->irq); in dev_pm_enable_wake_irq_check()
331 struct wake_irq *wirq = dev->power.wakeirq; in dev_pm_disable_wake_irq_check() local
333 if (!wirq || !(wirq->status & WAKE_IRQ_DEDICATED_MASK)) in dev_pm_disable_wake_irq_check()
336 if (cond_disable && (wirq->status & WAKE_IRQ_DEDICATED_REVERSE)) in dev_pm_disable_wake_irq_check()
339 if (wirq->status & WAKE_IRQ_DEDICATED_MANAGED) in dev_pm_disable_wake_irq_check()
340 disable_irq_nosync(wirq->irq); in dev_pm_disable_wake_irq_check()
355 struct wake_irq *wirq = dev->power.wakeirq; in dev_pm_enable_wake_irq_complete() local
357 if (!wirq || !(wirq->status & WAKE_IRQ_DEDICATED_MASK)) in dev_pm_enable_wake_irq_complete()
360 if (wirq->status & WAKE_IRQ_DEDICATED_MANAGED && in dev_pm_enable_wake_irq_complete()
361 wirq->status & WAKE_IRQ_DEDICATED_REVERSE) in dev_pm_enable_wake_irq_complete()
362 enable_irq(wirq->irq); in dev_pm_enable_wake_irq_complete()
372 void dev_pm_arm_wake_irq(struct wake_irq *wirq) in dev_pm_arm_wake_irq() argument
374 if (!wirq) in dev_pm_arm_wake_irq()
377 if (device_may_wakeup(wirq->dev)) { in dev_pm_arm_wake_irq()
378 if (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED && in dev_pm_arm_wake_irq()
379 !pm_runtime_status_suspended(wirq->dev)) in dev_pm_arm_wake_irq()
380 enable_irq(wirq->irq); in dev_pm_arm_wake_irq()
382 enable_irq_wake(wirq->irq); in dev_pm_arm_wake_irq()
393 void dev_pm_disarm_wake_irq(struct wake_irq *wirq) in dev_pm_disarm_wake_irq() argument
395 if (!wirq) in dev_pm_disarm_wake_irq()
398 if (device_may_wakeup(wirq->dev)) { in dev_pm_disarm_wake_irq()
399 disable_irq_wake(wirq->irq); in dev_pm_disarm_wake_irq()
401 if (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED && in dev_pm_disarm_wake_irq()
402 !pm_runtime_status_suspended(wirq->dev)) in dev_pm_disarm_wake_irq()
403 disable_irq_nosync(wirq->irq); in dev_pm_disarm_wake_irq()