[PATCH v6 01/16] OMAP2+: hwmod: Add API to enable IO ring wakeup.
From: Vishwanath Sripathy <hidden>
Date: 2011-10-03 15:10:44
Also in:
linux-omap, linux-serial
---snip--
quoted
+{ + struct omap_device_pad *pad; + int ret = -EINVAL, j; + + if (oh->mux&& oh->mux->enabled) { + for (j = 0; j< oh->mux->nr_pads_dynamic; j++) { + pad = oh->mux->pads_dynamic[j]; + if (pad->flags& OMAP_DEVICE_PAD_WAKEUP) { + if (set_wake) + pad->idle |= OMAP_WAKEUP_EN; + else + pad->idle&= ~OMAP_WAKEUP_EN;I think apart from enabling/disabling the IO wakeup's at the pad level, there is also a need to trigger the IO daisy chain control (Wu clock) by programming the PRCM.PM_WKEN_WKUP[16] EN_IO_CHAIN bit and waiting on the PRCM.PM_WKST_WKUP[16] ST_IO_CHAIN) bit, which is done by the omap3_enable/disable_io_chain function. This is still done in the cpuidle path, but it makes sense to move that over here, since it should be done every time a pad level wakeup is enabled or disabled. See section 3.5.7.2.2 I/O Wake-Up Mechanism of 36xx TRM revA. "The I/O wake-up scheme is enabled by triggering the I/O daisy chain control (Wu clock) by programming a dedicated register (PRCM.PM_WKEN_WKUP[16] EN_IO_CHAIN) in the PRCM module.Software must wait for the I/O daisy chain to complete before it transitions the PER domain to a nonfunctional state. This is done by polling a dedicated status bit in the PRCM module (PRCM.PM_WKST_WKUP[16] ST_IO_CHAIN). This status bit must be cleared by software when the bit is read to 1."
I am working on adding Daisy chain support via hwmod mux framework. I will post the patches soon. Regards Vishwa