Lines Matching full:ipa

16 #include "ipa.h"
23 * DOC: IPA Power Management
25 * The IPA hardware is enabled when the IPA core clock and all the
38 * enum ipa_power_flag - IPA power flags
54 * struct ipa_power - IPA power management information
55 * @dev: IPA device pointer
56 * @core: IPA core clock
73 /* Initialize interconnects required for IPA operation */
114 /* Enable IPA power, enabling interconnects and the core clock */
115 static int ipa_power_enable(struct ipa *ipa) in ipa_power_enable() argument
117 struct ipa_power *power = ipa->power; in ipa_power_enable()
135 static void ipa_power_disable(struct ipa *ipa) in ipa_power_disable() argument
137 struct ipa_power *power = ipa->power; in ipa_power_disable()
146 struct ipa *ipa = dev_get_drvdata(dev); in ipa_runtime_suspend() local
149 if (ipa->setup_complete) { in ipa_runtime_suspend()
150 __clear_bit(IPA_POWER_FLAG_RESUMED, ipa->power->flags); in ipa_runtime_suspend()
151 ipa_endpoint_suspend(ipa); in ipa_runtime_suspend()
152 gsi_suspend(&ipa->gsi); in ipa_runtime_suspend()
155 ipa_power_disable(ipa); in ipa_runtime_suspend()
162 struct ipa *ipa = dev_get_drvdata(dev); in ipa_runtime_resume() local
165 ret = ipa_power_enable(ipa); in ipa_runtime_resume()
170 if (ipa->setup_complete) { in ipa_runtime_resume()
171 gsi_resume(&ipa->gsi); in ipa_runtime_resume()
172 ipa_endpoint_resume(ipa); in ipa_runtime_resume()
180 struct ipa *ipa = dev_get_drvdata(dev); in ipa_suspend() local
182 __set_bit(IPA_POWER_FLAG_SYSTEM, ipa->power->flags); in ipa_suspend()
190 * irq wake. If wakeup is enabled for the IPA then the IRQ in ipa_suspend()
193 ipa_interrupt_irq_disable(ipa); in ipa_suspend()
200 struct ipa *ipa = dev_get_drvdata(dev); in ipa_resume() local
205 __clear_bit(IPA_POWER_FLAG_SYSTEM, ipa->power->flags); in ipa_resume()
211 ipa_interrupt_irq_enable(ipa); in ipa_resume()
216 /* Return the current IPA core clock rate */
217 u32 ipa_core_clock_rate(struct ipa *ipa) in ipa_core_clock_rate() argument
219 return ipa->power ? (u32)clk_get_rate(ipa->power->core) : 0; in ipa_core_clock_rate()
222 void ipa_power_suspend_handler(struct ipa *ipa, enum ipa_irq_id irq_id) in ipa_power_suspend_handler() argument
224 /* To handle an IPA interrupt we will have resumed the hardware in ipa_power_suspend_handler()
228 if (!__test_and_set_bit(IPA_POWER_FLAG_RESUMED, ipa->power->flags)) in ipa_power_suspend_handler()
229 if (test_bit(IPA_POWER_FLAG_SYSTEM, ipa->power->flags)) in ipa_power_suspend_handler()
230 pm_wakeup_dev_event(&ipa->pdev->dev, 0, true); in ipa_power_suspend_handler()
233 ipa_interrupt_suspend_clear_all(ipa->interrupt); in ipa_power_suspend_handler()
259 void ipa_power_modem_queue_stop(struct ipa *ipa) in ipa_power_modem_queue_stop() argument
261 struct ipa_power *power = ipa->power; in ipa_power_modem_queue_stop()
267 netif_stop_queue(ipa->modem_netdev); in ipa_power_modem_queue_stop()
279 void ipa_power_modem_queue_wake(struct ipa *ipa) in ipa_power_modem_queue_wake() argument
281 struct ipa_power *power = ipa->power; in ipa_power_modem_queue_wake()
288 netif_wake_queue(ipa->modem_netdev); in ipa_power_modem_queue_wake()
295 void ipa_power_modem_queue_active(struct ipa *ipa) in ipa_power_modem_queue_active() argument
297 clear_bit(IPA_POWER_FLAG_STARTED, ipa->power->flags); in ipa_power_modem_queue_active()
323 void ipa_power_retention(struct ipa *ipa, bool enable) in ipa_power_retention() argument
326 struct ipa_power *power = ipa->power; in ipa_power_retention()
338 int ipa_power_setup(struct ipa *ipa) in ipa_power_setup() argument
342 ipa_interrupt_enable(ipa, IPA_IRQ_TX_SUSPEND); in ipa_power_setup()
344 ret = device_init_wakeup(&ipa->pdev->dev, true); in ipa_power_setup()
346 ipa_interrupt_disable(ipa, IPA_IRQ_TX_SUSPEND); in ipa_power_setup()
351 void ipa_power_teardown(struct ipa *ipa) in ipa_power_teardown() argument
353 (void)device_init_wakeup(&ipa->pdev->dev, false); in ipa_power_teardown()
354 ipa_interrupt_disable(ipa, IPA_IRQ_TX_SUSPEND); in ipa_power_teardown()
357 /* Initialize IPA power management */