void nrfx_qdec_uninit(void) { NRFX_ASSERT(m_state != NRFX_DRV_STATE_UNINITIALIZED); nrfx_qdec_disable(); NRFX_IRQ_DISABLE(QDEC_IRQn); m_state = NRFX_DRV_STATE_UNINITIALIZED; NRFX_LOG_INFO("Uninitialized."); }
static int qdec_nrfx_pm_set_state(struct qdec_nrfx_data *data, u32_t new_state) { u32_t old_state; unsigned int key; key = irq_lock(); old_state = data->pm_state; irq_unlock(key); if (old_state == new_state) { /* leave unchanged */ return 0; } if (old_state == DEVICE_PM_ACTIVE_STATE) { /* device must be suspended */ nrfx_qdec_disable(); qdec_nrfx_gpio_ctrl(false); } if (new_state == DEVICE_PM_OFF_STATE) { /* device must be uninitialized */ nrfx_qdec_uninit(); } if (new_state == DEVICE_PM_ACTIVE_STATE) { qdec_nrfx_gpio_ctrl(true); nrfx_qdec_enable(); } /* record the new state */ key = irq_lock(); data->pm_state = new_state; irq_unlock(key); return 0; }