|
@@ -370,3 +370,125 @@
|
|
#define OMAP3430_EN_MCBSP2_SHIFT 0
|
|
#define OMAP3430_EN_MCBSP2_SHIFT 0
|
|
|
|
|
|
/* CM_IDLEST_PER, PM_WKST_PER shared bits */
|
|
/* CM_IDLEST_PER, PM_WKST_PER shared bits */
|
|
|
|
+#define OMAP3630_ST_UART4_SHIFT 18
|
|
|
|
+#define OMAP3630_ST_UART4_MASK (1 << 18)
|
|
|
|
+#define OMAP3430_ST_GPIO6_SHIFT 17
|
|
|
|
+#define OMAP3430_ST_GPIO6_MASK (1 << 17)
|
|
|
|
+#define OMAP3430_ST_GPIO5_SHIFT 16
|
|
|
|
+#define OMAP3430_ST_GPIO5_MASK (1 << 16)
|
|
|
|
+#define OMAP3430_ST_GPIO4_SHIFT 15
|
|
|
|
+#define OMAP3430_ST_GPIO4_MASK (1 << 15)
|
|
|
|
+#define OMAP3430_ST_GPIO3_SHIFT 14
|
|
|
|
+#define OMAP3430_ST_GPIO3_MASK (1 << 14)
|
|
|
|
+#define OMAP3430_ST_GPIO2_SHIFT 13
|
|
|
|
+#define OMAP3430_ST_GPIO2_MASK (1 << 13)
|
|
|
|
+#define OMAP3430_ST_UART3_SHIFT 11
|
|
|
|
+#define OMAP3430_ST_UART3_MASK (1 << 11)
|
|
|
|
+#define OMAP3430_ST_GPT9_SHIFT 10
|
|
|
|
+#define OMAP3430_ST_GPT9_MASK (1 << 10)
|
|
|
|
+#define OMAP3430_ST_GPT8_SHIFT 9
|
|
|
|
+#define OMAP3430_ST_GPT8_MASK (1 << 9)
|
|
|
|
+#define OMAP3430_ST_GPT7_SHIFT 8
|
|
|
|
+#define OMAP3430_ST_GPT7_MASK (1 << 8)
|
|
|
|
+#define OMAP3430_ST_GPT6_SHIFT 7
|
|
|
|
+#define OMAP3430_ST_GPT6_MASK (1 << 7)
|
|
|
|
+#define OMAP3430_ST_GPT5_SHIFT 6
|
|
|
|
+#define OMAP3430_ST_GPT5_MASK (1 << 6)
|
|
|
|
+#define OMAP3430_ST_GPT4_SHIFT 5
|
|
|
|
+#define OMAP3430_ST_GPT4_MASK (1 << 5)
|
|
|
|
+#define OMAP3430_ST_GPT3_SHIFT 4
|
|
|
|
+#define OMAP3430_ST_GPT3_MASK (1 << 4)
|
|
|
|
+#define OMAP3430_ST_GPT2_SHIFT 3
|
|
|
|
+#define OMAP3430_ST_GPT2_MASK (1 << 3)
|
|
|
|
+
|
|
|
|
+/* CM_SLEEPDEP_PER, PM_WKDEP_IVA2, PM_WKDEP_MPU, PM_WKDEP_PER shared bits */
|
|
|
|
+#define OMAP3430_EN_CORE_SHIFT 0
|
|
|
|
+#define OMAP3430_EN_CORE_MASK (1 << 0)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * Maximum time(us) it takes to output the signal WUCLKOUT of the last
|
|
|
|
+ * pad of the I/O ring after asserting WUCLKIN high. Tero measured
|
|
|
|
+ * the actual time at 7 to 8 microseconds on OMAP3 and 2 to 4
|
|
|
|
+ * microseconds on OMAP4, so this timeout may be too high.
|
|
|
|
+ */
|
|
|
|
+#define MAX_IOPAD_LATCH_TIME 100
|
|
|
|
+# ifndef __ASSEMBLER__
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * struct omap_prcm_irq - describes a PRCM interrupt bit
|
|
|
|
+ * @name: a short name describing the interrupt type, e.g. "wkup" or "io"
|
|
|
|
+ * @offset: the bit shift of the interrupt inside the IRQ{ENABLE,STATUS} regs
|
|
|
|
+ * @priority: should this interrupt be handled before @priority=false IRQs?
|
|
|
|
+ *
|
|
|
|
+ * Describes interrupt bits inside the PRM_IRQ{ENABLE,STATUS}_MPU* registers.
|
|
|
|
+ * On systems with multiple PRM MPU IRQ registers, the bitfields read from
|
|
|
|
+ * the registers are concatenated, so @offset could be > 31 on these systems -
|
|
|
|
+ * see omap_prm_irq_handler() for more details. I/O ring interrupts should
|
|
|
|
+ * have @priority set to true.
|
|
|
|
+ */
|
|
|
|
+struct omap_prcm_irq {
|
|
|
|
+ const char *name;
|
|
|
|
+ unsigned int offset;
|
|
|
|
+ bool priority;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * struct omap_prcm_irq_setup - PRCM interrupt controller details
|
|
|
|
+ * @ack: PRM register offset for the first PRM_IRQSTATUS_MPU register
|
|
|
|
+ * @mask: PRM register offset for the first PRM_IRQENABLE_MPU register
|
|
|
|
+ * @nr_regs: number of PRM_IRQ{STATUS,ENABLE}_MPU* registers
|
|
|
|
+ * @nr_irqs: number of entries in the @irqs array
|
|
|
|
+ * @irqs: ptr to an array of PRCM interrupt bits (see @nr_irqs)
|
|
|
|
+ * @irq: MPU IRQ asserted when a PRCM interrupt arrives
|
|
|
|
+ * @read_pending_irqs: fn ptr to determine if any PRCM IRQs are pending
|
|
|
|
+ * @ocp_barrier: fn ptr to force buffered PRM writes to complete
|
|
|
|
+ * @save_and_clear_irqen: fn ptr to save and clear IRQENABLE regs
|
|
|
|
+ * @restore_irqen: fn ptr to save and clear IRQENABLE regs
|
|
|
|
+ * @saved_mask: IRQENABLE regs are saved here during suspend
|
|
|
|
+ * @priority_mask: 1 bit per IRQ, set to 1 if omap_prcm_irq.priority = true
|
|
|
|
+ * @base_irq: base dynamic IRQ number, returned from irq_alloc_descs() in init
|
|
|
|
+ * @suspended: set to true after Linux suspend code has called our ->prepare()
|
|
|
|
+ * @suspend_save_flag: set to true after IRQ masks have been saved and disabled
|
|
|
|
+ *
|
|
|
|
+ * @saved_mask, @priority_mask, @base_irq, @suspended, and
|
|
|
|
+ * @suspend_save_flag are populated dynamically, and are not to be
|
|
|
|
+ * specified in static initializers.
|
|
|
|
+ */
|
|
|
|
+struct omap_prcm_irq_setup {
|
|
|
|
+ u16 ack;
|
|
|
|
+ u16 mask;
|
|
|
|
+ u8 nr_regs;
|
|
|
|
+ u8 nr_irqs;
|
|
|
|
+ const struct omap_prcm_irq *irqs;
|
|
|
|
+ int irq;
|
|
|
|
+ void (*read_pending_irqs)(unsigned long *events);
|
|
|
|
+ void (*ocp_barrier)(void);
|
|
|
|
+ void (*save_and_clear_irqen)(u32 *saved_mask);
|
|
|
|
+ void (*restore_irqen)(u32 *saved_mask);
|
|
|
|
+ u32 *saved_mask;
|
|
|
|
+ u32 *priority_mask;
|
|
|
|
+ int base_irq;
|
|
|
|
+ bool suspended;
|
|
|
|
+ bool suspend_save_flag;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/* OMAP_PRCM_IRQ: convenience macro for creating struct omap_prcm_irq records */
|
|
|
|
+#define OMAP_PRCM_IRQ(_name, _offset, _priority) { \
|
|
|
|
+ .name = _name, \
|
|
|
|
+ .offset = _offset, \
|
|
|
|
+ .priority = _priority \
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+extern void omap_prcm_irq_cleanup(void);
|
|
|
|
+extern int omap_prcm_register_chain_handler(
|
|
|
|
+ struct omap_prcm_irq_setup *irq_setup);
|
|
|
|
+extern int omap_prcm_event_to_irq(const char *event);
|
|
|
|
+extern void omap_prcm_irq_prepare(void);
|
|
|
|
+extern void omap_prcm_irq_complete(void);
|
|
|
|
+
|
|
|
|
+# endif
|
|
|
|
+
|
|
|
|
+#endif
|
|
|
|
+
|