+Tero Mohan V <mohanvforum@xxxxxxxxx> writes: > Hello all, > > I am trying to correct the implementation of the enabling/disabling IO > daisy chain in omap3. Thanks for doing the investigation and proposing a fix! > I am following the steps as listed in the OMAP36xx TRM Sec. 3.5.7.2.2 > for the same. Please add the TRM reference in the changelog (preferablly the public TRM reference, otherwise note it's the NDA TRM.) > Branch: linux-omap-pm: "pm" branch Patch should be generated against mainline. There shouldn't be any dependencies on my PM branch. > config: omap2plus_defconfig > > Please find the below patch for the same. In the future, please send patches inline. Any meta-comments that should not be in the git history can go after the '---' line in the changelog. > ------------------------------------------------------------ > > From: Mohan <mohanv@xxxxxx> > Date: Thu, 30 Jun 2011 12:19:55 +0530 > Subject: [PATCH] omap3: pm: correct enable/disable of daisy io chain > > Currently the enabling and disabling of IO Daisy chain is not > according to the TRM. > The below steps are followed to enable/disable the IO chain. > > Steps to enable IO chain: > (a) Set PM_WKEN_WKUP.EN_IO bit > (b) Set the PM_WKEN_WKUP.EN_IO_CHAIN bit > (c) Poll for PM_WKST_WKUP.ST_IO_CHAIN. When set to 1, clear it. > > Steps to disable IO chain: > [a] Clear PM_WKEN_WKUP.EN_IO_CHAIN bit > [b] Clear PM_WKEN_WKUP.EN_IO bit > [c] Clear PM_WKST_WKUP.ST_IO bit by writing 1 to it. Here, please report what platforms this was tested on. It should at least be tested using off-mode on 3430 and 3630. Also, I think we need to skip step 'c' of both, since that part will be handled later by the PRCM interrup handler. If we clear them here, by the time the PRCM interrupt handler runs, we won't be able to detect there was a wakeup. Kevin > Signed-off-by: Mohan V <mohanv@xxxxxx> > --- > arch/arm/mach-omap2/pm34xx.c | 7 ++++--- > 1 files changed, 4 insertions(+), 3 deletions(-) > > diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c > index d8c00e4..7f0d371 100644 > --- a/arch/arm/mach-omap2/pm34xx.c > +++ b/arch/arm/mach-omap2/pm34xx.c > @@ -91,7 +91,7 @@ static void omap3_enable_io_chain(void) > /* Do a readback to assure write has been done */ > prm_read_mod_reg(WKUP_MOD, PM_WKEN); > > - while (!(prm_read_mod_reg(WKUP_MOD, PM_WKEN) & > + while (!(prm_read_mod_reg(WKUP_MOD, PM_WKST) & > OMAP3430_ST_IO_CHAIN_MASK)) { > timeout++; > if (timeout > 1000) { > @@ -99,9 +99,9 @@ static void omap3_enable_io_chain(void) > "activation failed.\n"); > return; > } > - prm_set_mod_reg_bits(OMAP3430_ST_IO_CHAIN_MASK, > - WKUP_MOD, PM_WKEN); > } > + prm_set_mod_reg_bits(OMAP3430_ST_IO_CHAIN_MASK, > + WKUP_MOD, PM_WKST); > } > } > > @@ -572,6 +572,7 @@ void omap_sram_idle(void) > core_next_state < PWRDM_POWER_ON) { > prm_clear_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN); > omap3_disable_io_chain(); > + prm_set_mod_reg_bits(OMAP3430_ST_IO_MASK, WKUP_MOD, PM_WKST); > } > > pwrdm_post_transition(); -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html