| 
					
				 | 
			
			
				@@ -0,0 +1,54 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * OMAP2+ common Power & Reset Management (PRM) IP block functions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Copyright (C) 2011 Texas Instruments, Inc. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Tero Kristo <t-kristo@ti.com> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * This program is free software; you can redistribute it and/or modify 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * it under the terms of the GNU General Public License version 2 as 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * published by the Free Software Foundation. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * For historical purposes, the API used to configure the PRM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * interrupt handler refers to it as the "PRCM interrupt."  The 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * underlying registers are located in the PRM on OMAP3/4. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * XXX This code should eventually be moved to a PRM driver. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/kernel.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/module.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/init.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/io.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/irq.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/interrupt.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <linux/slab.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "prm2xxx_3xxx.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "prm2xxx.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "prm3xxx.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "prm44xx.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "common.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * OMAP_PRCM_MAX_NR_PENDING_REG: maximum number of PRM_IRQ*_MPU regs 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * XXX this is technically not needed, since 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * omap_prcm_register_chain_handler() could allocate this based on the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * actual amount of memory needed for the SoC 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define OMAP_PRCM_MAX_NR_PENDING_REG		2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * prcm_irq_chips: an array of all of the "generic IRQ chips" in use 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * by the PRCM interrupt handler code.  There will be one 'chip' per 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * PRM_{IRQSTATUS,IRQENABLE}_MPU register pair.  (So OMAP3 will have 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * one "chip" and OMAP4 will have two.) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct irq_chip_generic **prcm_irq_chips; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * prcm_irq_setup: the PRCM IRQ parameters for the hardware the code 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * is currently running on.  Defined and passed by initialization code 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * that calls omap_prcm_register_chain_handler(). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static struct omap_prcm_irq_setup *prcm_irq_setup; 
			 |