On Fri, May 6, 2011 at 3:09 AM, Govindraj.R <govindraj.raja@ti.com> wrote:
...
+
+/**
+ * omap_hwmod_enable_ioring_wakeup - Set wakeup bit for iopad ring.
+ * @oh: struct omap_hwmod *
+ * @enable: based on 0 or 1 set or unset wakeup bit.
+ *
+ * Traverse through dynamic pads, if pad is enabled then
+ * set wakeup enable bit flag for the mux pin. Wakeup pad bit
+ * will be set during hwmod idle transistion.
+ * Return error if pads are not enabled or not available.
+ */
+int omap_hwmod_enable_ioring_wakeup(struct omap_hwmod *oh, bool enable)
+{
+ struct omap_device_pad *pad;
+ int ret = -EINVAL, j;
+ int val = 0;
+
+ /* Enable pin mux to make pad wake-up capable */
+ if (enable)
+ val = OMAP_WAKEUP_EN;
+ else
+ val = ~OMAP_WAKEUP_EN;
+
+ if (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) {
+ pad->idle = pad->enable | val;
I haven't gone to find the patch uses the pad->idle value (or the TRM docs), but the !enable case that OR's in every bit except for OMAP_WAKEUP_EN seems strange, should the non-wakeup-enabled idle value for the pad set all other bits in that reg?
..
Todd