/* arch/arm/mach-msm/include/mach/irqs.h
 *
 * Copyright (C) 2007 Google, Inc.
 * Author: Brian Swetland <swetland@google.com>
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
 * may be copied, distributed, and modified under those terms.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 */

#ifndef __ASM_ARCH_MSM_IRQS_H
#define __ASM_ARCH_MSM_IRQS_H

#if defined(CONFIG_ARCH_MSM_ARM11)

/* MSM ARM11 Interrupt Numbers */
/* See 80-VE113-1 A, pp219-221     */

#define INT_A9_M2A_0         0
#define INT_A9_M2A_1         1
#define INT_A9_M2A_2         2
#define INT_A9_M2A_3         3
#define INT_A9_M2A_4         4
#define INT_A9_M2A_5         5
#define INT_A9_M2A_6         6
#define INT_GP_TIMER_EXP     7
#define INT_DEBUG_TIMER_EXP  8
#define INT_UART1            9
#define INT_UART2            10
#define INT_UART3            11
#define INT_UART1_RX         12
#define INT_UART2_RX         13
#define INT_UART3_RX         14
#define INT_USB_OTG          15
#define INT_MDDI_PRI         16
#define INT_MDDI_EXT         17
#define INT_MDDI_CLIENT      18
#define INT_MDP              19
#define INT_GRAPHICS         20
#define INT_ADM_AARM         21
#define INT_ADSP_A11         22
#define INT_ADSP_A9_A11      23
#define INT_SDC1_0           24
#define INT_SDC1_1           25
#define INT_SDC2_0           26
#define INT_SDC2_1           27
#define INT_KEYSENSE         28
#define INT_TCHSCRN_SSBI     29
#define INT_TCHSCRN1         30
#define INT_TCHSCRN2         31

#define INT_GPIO_GROUP1      (32 + 0)
#define INT_GPIO_GROUP2      (32 + 1)
#define INT_PWB_I2C          (32 + 2)
#define INT_SOFTRESET        (32 + 3)
#define INT_NAND_WR_ER_DONE  (32 + 4)
#define INT_NAND_OP_DONE     (32 + 5)
#define INT_PBUS_ARM11       (32 + 6)
#define INT_AXI_MPU_SMI      (32 + 7)
#define INT_AXI_MPU_EBI1     (32 + 8)
#define INT_AD_HSSD          (32 + 9)
#define INT_ARM11_PMU        (32 + 10)
#define INT_ARM11_DMA        (32 + 11)
#define INT_TSIF_IRQ         (32 + 12)
#define INT_UART1DM_IRQ      (32 + 13)
#define INT_UART1DM_RX       (32 + 14)
#define INT_USB_HS           (32 + 15)
#define INT_SDC3_0           (32 + 16)
#define INT_SDC3_1           (32 + 17)
#define INT_SDC4_0           (32 + 18)
#define INT_SDC4_1           (32 + 19)
#define INT_UART2DM_RX       (32 + 20)
#define INT_UART2DM_IRQ      (32 + 21)
#define INT_VFE              (32 + 22)

/* 22-31 are reserved */

#define NR_MSM_IRQS 64
#define NR_SIRC_IRQS 0
#if defined(CONFIG_ARCH_MSM7225) || defined(CONFIG_ARCH_MSM7227)
#define NR_GPIO_IRQS 133
#else
#define NR_GPIO_IRQS 122
#endif
#endif

#if defined(CONFIG_ARCH_QSD8X50)
#define INT_A9_M2A_0         0
#define INT_A9_M2A_1         1
#define INT_A9_M2A_2         2
#define INT_A9_M2A_3         3
#define INT_A9_M2A_4         4
#define INT_A9_M2A_5         5
#define INT_A9_M2A_6         6
#define INT_GP_TIMER_EXP     7
#define INT_DEBUG_TIMER_EXP  8
#define INT_SIRC_0           9
#define INT_SDC3_0           10
#define INT_SDC3_1           11
#define INT_SDC4_0           12
#define INT_SDC4_1           13
#define INT_AD6_EXT_VFR      14
#define INT_USB_OTG          15
#define INT_MDDI_PRI         16
#define INT_MDDI_EXT         17
#define INT_MDDI_CLIENT      18
#define INT_MDP              19
#define INT_GRAPHICS         20
#define INT_ADM_AARM         21
#define INT_ADSP_A11         22
#define INT_ADSP_A9_A11      23
#define INT_SDC1_0           24
#define INT_SDC1_1           25
#define INT_SDC2_0           26
#define INT_SDC2_1           27
#define INT_KEYSENSE         28
#define INT_TCHSCRN_SSBI     29
#define INT_TCHSCRN1         30
#define INT_TCHSCRN2         31

#define INT_TCSR_MPRPH_SC1   (32 + 0)
#define INT_USB_FS2          (32 + 1)
#define INT_PWB_I2C          (32 + 2)
#define INT_SOFTRESET        (32 + 3)
#define INT_NAND_WR_ER_DONE  (32 + 4)
#define INT_NAND_OP_DONE     (32 + 5)
#define INT_TCSR_MPRPH_SC2   (32 + 6)
#define INT_OP_PEN           (32 + 7)
#define INT_AD_HSSD          (32 + 8)
#define INT_ARM11_PM         (32 + 9)
#define INT_SDMA_NON_SECURE  (32 + 10)
#define INT_TSIF_IRQ         (32 + 11)
#define INT_UART1DM_IRQ      (32 + 12)
#define INT_UART1DM_RX       (32 + 13)
#define INT_SDMA_SECURE      (32 + 14)
#define INT_SI2S_SLAVE       (32 + 15)
#define INT_SC_I2CPU         (32 + 16)
#define INT_SC_DBG_RDTRFULL  (32 + 17)
#define INT_SC_DBG_WDTRFULL  (32 + 18)
#define INT_SCPLL_CTL_DONE   (32 + 19)
#define INT_UART2DM_IRQ      (32 + 20)
#define INT_UART2DM_RX       (32 + 21)
#define INT_VDC_MEC          (32 + 22)
#define INT_VDC_DB           (32 + 23)
#define INT_VDC_AXI          (32 + 24)
#define INT_VFE              (32 + 25)
#define INT_USB_HS           (32 + 26)
#define INT_AUDIO_OUT0       (32 + 27)
#define INT_AUDIO_OUT1       (32 + 28)
#define INT_CRYPTO           (32 + 29)
#define INT_AD6M_IDLE        (32 + 30)
#define INT_SIRC_1           (32 + 31)

#define INT_UART1                     (64 + 0)
#define INT_UART2                     (64 + 1)
#define INT_UART3                     (64 + 2)
#define INT_UART1_RX                  (64 + 3)
#define INT_UART2_RX                  (64 + 4)
#define INT_UART3_RX                  (64 + 5)
#define INT_SPI_INPUT                 (64 + 6)
#define INT_SPI_OUTPUT                (64 + 7)
#define INT_SPI_ERROR                 (64 + 8)
#define INT_GPIO_GROUP1               (64 + 9)
#define INT_GPIO_GROUP2               (64 + 10)
#define INT_GPIO_GROUP1_SECURE        (64 + 11)
#define INT_GPIO_GROUP2_SECURE        (64 + 12)
#define INT_AVS_SVIC                  (64 + 13)
#define INT_AVS_REQ_UP                (64 + 14)
#define INT_AVS_REQ_DOWN              (64 + 15)
#define INT_PBUS_ERR                  (64 + 16)
#define INT_AXI_ERR                   (64 + 17)
#define INT_SMI_ERR                   (64 + 18)
#define INT_EBI1_ERR                  (64 + 19)
#define INT_IMEM_ERR                  (64 + 20)
#define INT_SC_TEMP_SENSOR            (64 + 21)
#define INT_TV_ENC                    (64 + 22)

#define NR_MSM_IRQS 64
#define NR_SIRC_IRQS 23
#define NR_GPIO_IRQS 165
#endif

#if defined(CONFIG_ARCH_MSM7X30)

#define INT_DEBUG_TIMER_EXP	0
#define INT_GPT0_TIMER_EXP	1
#define INT_GPT1_TIMER_EXP	2
#define INT_WDT0_ACCSCSSBARK	3
#define INT_WDT1_ACCSCSSBARK	4
#define INT_AVS_SVIC		5
#define INT_AVS_SVIC_SW_DONE	6
#define INT_SC_DBG_RX_FULL	7
#define INT_SC_DBG_TX_EMPTY	8
#define INT_ARM11_PM		9
#define INT_AVS_REQ_DOWN	10
#define INT_AVS_REQ_UP		11
#define INT_SC_ACG		12
/* SCSS_VICFIQSTS1[13:15] are RESERVED */
#define INT_L2_SVICCPUIRPTREQ	16
#define INT_L2_SVICDMANSIRPTREQ 17
#define INT_L2_SVICDMASIRPTREQ  18
#define INT_L2_SVICSLVIRPTREQ	19
#define INT_AD5A_MPROC_APPS_0	20
#define INT_AD5A_MPROC_APPS_1	21
#define INT_A9_M2A_0		22
#define INT_A9_M2A_1		23
#define INT_A9_M2A_2		24
#define INT_A9_M2A_3		25
#define INT_A9_M2A_4		26
#define INT_A9_M2A_5		27
#define INT_A9_M2A_6		28
#define INT_A9_M2A_7		29
#define INT_A9_M2A_8		30
#define INT_A9_M2A_9		31

#define INT_AXI_EBI1_SC		(32 + 0)
#define INT_IMEM_ERR		(32 + 1)
#define INT_AXI_EBI0_SC		(32 + 2)
#define INT_PBUS_SC_IRQC	(32 + 3)
#define INT_PERPH_BUS_BPM	(32 + 4)
#define INT_CC_TEMP_SENSE	(32 + 5)
#define INT_UXMC_EBI0		(32 + 6)
#define INT_UXMC_EBI1		(32 + 7)
#define INT_EBI2_OP_DONE	(32 + 8)
#define INT_EBI2_WR_ER_DONE	(32 + 9)
#define INT_TCSR_SPSS_CE	(32 + 10)
#define INT_EMDH		(32 + 11)
#define INT_PMDH		(32 + 12)
#define INT_MDC			(32 + 13)
#define INT_MIDI_TO_SUPSS	(32 + 14)
#define INT_LPA_2		(32 + 15)
#define INT_GPIO_GROUP1_SECURE	(32 + 16)
#define INT_GPIO_GROUP2_SECURE	(32 + 17)
#define INT_GPIO_GROUP1		(32 + 18)
#define INT_GPIO_GROUP2		(32 + 19)
#define INT_MPRPH_SOFTRESET	(32 + 20)
#define INT_PWB_I2C		(32 + 21)
#define INT_PWB_I2C_2		(32 + 22)
#define INT_TSSC_SAMPLE		(32 + 23)
#define INT_TSSC_PENUP		(32 + 24)
#define INT_TCHSCRN_SSBI	(32 + 25)
#define INT_FM_RDS		(32 + 26)
#define INT_KEYSENSE 		(32 + 27)
#define INT_USB_OTG_HS		(32 + 28)
#define INT_USB_OTG_HS2		(32 + 29)
#define INT_USB_OTG_HS3		(32 + 30)
#define INT_CSI			(32 + 31)

#define INT_SPI_OUTPUT		(64 + 0)
#define INT_SPI_INPUT		(64 + 1)
#define INT_SPI_ERROR		(64 + 2)
#define INT_UART1		(64 + 3)
#define INT_UART1_RX		(64 + 4)
#define INT_UART2		(64 + 5)
#define INT_UART2_RX		(64 + 6)
#define INT_UART3		(64 + 7)
#define INT_UART3_RX		(64 + 8)
#define INT_UART1DM_IRQ		(64 + 9)
#define INT_UART1DM_RX		(64 + 10)
#define INT_UART2DM_IRQ		(64 + 11)
#define INT_UART2DM_RX		(64 + 12)
#define INT_TSIF		(64 + 13)
#define INT_ADM_SC1		(64 + 14)
#define INT_ADM_SC2		(64 + 15)
#define INT_MDP			(64 + 16)
#define INT_VPE			(64 + 17)
#define INT_GRP_2D		(64 + 18)
#define INT_GRP_3D		(64 + 19)
#define INT_ROTATOR		(64 + 20)
#define INT_MFC720		(64 + 21)
#define INT_JPEG		(64 + 22)
#define INT_VFE			(64 + 23)
#define INT_TV_ENC		(64 + 24)
#define INT_PMIC_SSBI		(64 + 25)
#define INT_MPM_1		(64 + 26)
#define INT_TCSR_SPSS_SAMPLE	(64 + 27)
#define INT_TCSR_SPSS_PENUP	(64 + 28)
#define INT_MPM_2		(64 + 29)
#define INT_SDC1_0		(64 + 30)
#define INT_SDC1_1		(64 + 31)

#define INT_SDC3_0		(96 + 0)
#define INT_SDC3_1		(96 + 1)
#define INT_SDC2_0		(96 + 2)
#define INT_SDC2_1		(96 + 3)
#define INT_SDC4_0		(96 + 4)
#define INT_SDC4_1		(96 + 5)
#define INT_PWB_QUP_IN		(96 + 6)
#define INT_PWB_QUP_OUT		(96 + 7)
#define INT_PWB_QUP_ERR		(96 + 8)
#define INT_SCSS_WDT0_BITE	(96 + 9)
/* SCSS_VICFIQSTS3[10:31] are RESERVED */

/* Retrofit universal macro names */
#define INT_ADM_AARM		INT_ADM_SC2
#define INT_USB_HS   		INT_USB_OTG_HS
#define INT_USB_OTG   		INT_USB_OTG_HS
#define INT_TCHSCRN1 		INT_TSSC_SAMPLE
#define INT_TCHSCRN2 		INT_TSSC_PENUP
#define INT_GP_TIMER_EXP 	INT_GPT0_TIMER_EXP
#define INT_ADSP_A11 		INT_AD5A_MPROC_APPS_1
#define INT_ADSP_A9_A11 	INT_AD5A_MPROC_APPS_0
#define INT_MDDI_EXT		INT_EMDH
#define INT_MDDI_PRI		INT_PMDH
#define INT_MDDI_CLIENT		INT_MDC
#define INT_NAND_WR_ER_DONE	INT_EBI2_WR_ER_DONE
#define INT_NAND_OP_DONE	INT_EBI2_OP_DONE

#define NR_SIRC_IRQS	0

#define NR_MSM_IRQS		128
#define NR_GPIO_IRQS		182
#define PMIC8058_IRQ_BASE	(NR_MSM_IRQS + NR_GPIO_IRQS)
#define NR_PMIC8058_GPIO_IRQS	40
#define NR_PMIC8058_MPP_IRQS	12
#define NR_PMIC8058_MISC_IRQS	8
#define NR_PMIC8058_IRQS	(NR_PMIC8058_GPIO_IRQS +\
				NR_PMIC8058_MPP_IRQS +\
				NR_PMIC8058_MISC_IRQS)

#endif

#define MSM_IRQ_BIT(irq)     (1 << ((irq) & 31))

#define NR_BOARD_IRQS 64
#define NR_MICROP_IRQS 16
#define NR_IRQS (NR_MSM_IRQS + NR_SIRC_IRQS + NR_GPIO_IRQS + NR_BOARD_IRQS \
		+ NR_MICROP_IRQS)

#define FIRST_SIRC_IRQ (NR_MSM_IRQS)
#define FIRST_GPIO_IRQ (NR_MSM_IRQS + NR_SIRC_IRQS)
#define FIRST_BOARD_IRQ (NR_MSM_IRQS + NR_SIRC_IRQS + NR_GPIO_IRQS)
#define FIRST_MICROP_IRQ (FIRST_BOARD_IRQ + NR_BOARD_IRQS)

#define MSM_GPIO_TO_INT(n) (FIRST_GPIO_IRQ + (n))

#define MSM_INT_TO_GPIO(n) ((n) - NR_MSM_IRQS)

#define MSM_uP_TO_INT(n) (FIRST_MICROP_IRQ + (n))
#endif