提交 f0caa527 编写于 作者: T Tero Kristo

ARM: OMAP3: PRM: invert the wkst_mask for the prm_clear_mod_irqs

This makes the API the same as used with OMAP2, and makes it possible
to implement a generic driver API for the functionality.
Signed-off-by: NTero Kristo <t-kristo@ti.com>
上级 3a1a388e
...@@ -137,9 +137,8 @@ static irqreturn_t _prcm_int_handle_io(int irq, void *unused) ...@@ -137,9 +137,8 @@ static irqreturn_t _prcm_int_handle_io(int irq, void *unused)
{ {
int c; int c;
c = omap3xxx_prm_clear_mod_irqs(WKUP_MOD, 1, c = omap3xxx_prm_clear_mod_irqs(WKUP_MOD, 1, OMAP3430_ST_IO_MASK |
~(OMAP3430_ST_IO_MASK | OMAP3430_ST_IO_CHAIN_MASK);
OMAP3430_ST_IO_CHAIN_MASK));
return c ? IRQ_HANDLED : IRQ_NONE; return c ? IRQ_HANDLED : IRQ_NONE;
} }
...@@ -154,13 +153,14 @@ static irqreturn_t _prcm_int_handle_wakeup(int irq, void *unused) ...@@ -154,13 +153,14 @@ static irqreturn_t _prcm_int_handle_wakeup(int irq, void *unused)
* IO events before parsing in mux code * IO events before parsing in mux code
*/ */
c = omap3xxx_prm_clear_mod_irqs(WKUP_MOD, 1, c = omap3xxx_prm_clear_mod_irqs(WKUP_MOD, 1,
OMAP3430_ST_IO_MASK | ~(OMAP3430_ST_IO_MASK |
OMAP3430_ST_IO_CHAIN_MASK); OMAP3430_ST_IO_CHAIN_MASK));
c += omap3xxx_prm_clear_mod_irqs(CORE_MOD, 1, 0); c += omap3xxx_prm_clear_mod_irqs(CORE_MOD, 1, ~0);
c += omap3xxx_prm_clear_mod_irqs(OMAP3430_PER_MOD, 1, 0); c += omap3xxx_prm_clear_mod_irqs(OMAP3430_PER_MOD, 1, ~0);
if (omap_rev() > OMAP3430_REV_ES1_0) { if (omap_rev() > OMAP3430_REV_ES1_0) {
c += omap3xxx_prm_clear_mod_irqs(CORE_MOD, 3, 0); c += omap3xxx_prm_clear_mod_irqs(CORE_MOD, 3, ~0);
c += omap3xxx_prm_clear_mod_irqs(OMAP3430ES2_USBHOST_MOD, 1, 0); c += omap3xxx_prm_clear_mod_irqs(OMAP3430ES2_USBHOST_MOD, 1,
~0);
} }
return c ? IRQ_HANDLED : IRQ_NONE; return c ? IRQ_HANDLED : IRQ_NONE;
......
...@@ -217,7 +217,7 @@ static void omap3xxx_prm_restore_irqen(u32 *saved_mask) ...@@ -217,7 +217,7 @@ static void omap3xxx_prm_restore_irqen(u32 *saved_mask)
* omap3xxx_prm_clear_mod_irqs - clear wake-up events from PRCM interrupt * omap3xxx_prm_clear_mod_irqs - clear wake-up events from PRCM interrupt
* @module: PRM module to clear wakeups from * @module: PRM module to clear wakeups from
* @regs: register set to clear, 1 or 3 * @regs: register set to clear, 1 or 3
* @ignore_bits: wakeup status bits to ignore * @wkst_mask: wkst bits to clear
* *
* The purpose of this function is to clear any wake-up events latched * The purpose of this function is to clear any wake-up events latched
* in the PRCM PM_WKST_x registers. It is possible that a wake-up event * in the PRCM PM_WKST_x registers. It is possible that a wake-up event
...@@ -226,7 +226,7 @@ static void omap3xxx_prm_restore_irqen(u32 *saved_mask) ...@@ -226,7 +226,7 @@ static void omap3xxx_prm_restore_irqen(u32 *saved_mask)
* that any peripheral wake-up events occurring while attempting to * that any peripheral wake-up events occurring while attempting to
* clear the PM_WKST_x are detected and cleared. * clear the PM_WKST_x are detected and cleared.
*/ */
int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits) int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 wkst_mask)
{ {
u32 wkst, fclk, iclk, clken; u32 wkst, fclk, iclk, clken;
u16 wkst_off = (regs == 3) ? OMAP3430ES2_PM_WKST3 : PM_WKST1; u16 wkst_off = (regs == 3) ? OMAP3430ES2_PM_WKST3 : PM_WKST1;
...@@ -238,7 +238,7 @@ int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits) ...@@ -238,7 +238,7 @@ int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits)
wkst = omap2_prm_read_mod_reg(module, wkst_off); wkst = omap2_prm_read_mod_reg(module, wkst_off);
wkst &= omap2_prm_read_mod_reg(module, grpsel_off); wkst &= omap2_prm_read_mod_reg(module, grpsel_off);
wkst &= ~ignore_bits; wkst &= wkst_mask;
if (wkst) { if (wkst) {
iclk = omap2_cm_read_mod_reg(module, iclk_off); iclk = omap2_cm_read_mod_reg(module, iclk_off);
fclk = omap2_cm_read_mod_reg(module, fclk_off); fclk = omap2_cm_read_mod_reg(module, fclk_off);
...@@ -254,7 +254,7 @@ int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits) ...@@ -254,7 +254,7 @@ int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits)
omap2_cm_set_mod_reg_bits(clken, module, fclk_off); omap2_cm_set_mod_reg_bits(clken, module, fclk_off);
omap2_prm_write_mod_reg(wkst, module, wkst_off); omap2_prm_write_mod_reg(wkst, module, wkst_off);
wkst = omap2_prm_read_mod_reg(module, wkst_off); wkst = omap2_prm_read_mod_reg(module, wkst_off);
wkst &= ~ignore_bits; wkst &= wkst_mask;
c++; c++;
} }
omap2_cm_write_mod_reg(iclk, module, iclk_off); omap2_cm_write_mod_reg(iclk, module, iclk_off);
......
...@@ -145,7 +145,7 @@ extern void omap3_prm_vcvp_write(u32 val, u8 offset); ...@@ -145,7 +145,7 @@ extern void omap3_prm_vcvp_write(u32 val, u8 offset);
extern u32 omap3_prm_vcvp_rmw(u32 mask, u32 bits, u8 offset); extern u32 omap3_prm_vcvp_rmw(u32 mask, u32 bits, u8 offset);
extern int __init omap3xxx_prm_init(void); extern int __init omap3xxx_prm_init(void);
int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits); int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 wkst_mask);
void omap3xxx_prm_iva_idle(void); void omap3xxx_prm_iva_idle(void);
void omap3_prm_reset_modem(void); void omap3_prm_reset_modem(void);
int omap3xxx_prm_clear_global_cold_reset(void); int omap3xxx_prm_clear_global_cold_reset(void);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册