aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-s3c24xx
diff options
context:
space:
mode:
authorHeiko Stuebner <heiko@sntech.de>2013-02-12 12:59:31 -0500
committerKukjin Kim <kgene.kim@samsung.com>2013-03-05 06:20:49 -0500
commit70644ade48ae88f88f4935c4d2f3331c3ef177a1 (patch)
treea82d1ada0c1f81a02df3971c45bd2fa0a264194e /arch/arm/mach-s3c24xx
parent7cefed5e6b4b61b6bed309e9405eda0a00e9b66c (diff)
ARM: S3C24XX: transform s3c2442 irqs into new structure
Simply declare a correct mapping structure to use the common irq code. Signed-off-by: Heiko Stuebner <heiko@sntech.de> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
Diffstat (limited to 'arch/arm/mach-s3c24xx')
-rw-r--r--arch/arm/mach-s3c24xx/irq.c78
1 files changed, 63 insertions, 15 deletions
diff --git a/arch/arm/mach-s3c24xx/irq.c b/arch/arm/mach-s3c24xx/irq.c
index 025c89897f19..7d4061980bb2 100644
--- a/arch/arm/mach-s3c24xx/irq.c
+++ b/arch/arm/mach-s3c24xx/irq.c
@@ -877,27 +877,75 @@ void __init s3c2440_init_irq(void)
877#endif 877#endif
878 878
879#ifdef CONFIG_CPU_S3C2442 879#ifdef CONFIG_CPU_S3C2442
880void __init s3c2442_init_irq(void) 880static struct s3c_irq_data init_s3c2442base[32] = {
881{ 881 { .type = S3C_IRQTYPE_EINT, }, /* EINT0 */
882 unsigned int irqno; 882 { .type = S3C_IRQTYPE_EINT, }, /* EINT1 */
883 { .type = S3C_IRQTYPE_EINT, }, /* EINT2 */
884 { .type = S3C_IRQTYPE_EINT, }, /* EINT3 */
885 { .type = S3C_IRQTYPE_LEVEL, }, /* EINT4to7 */
886 { .type = S3C_IRQTYPE_LEVEL, }, /* EINT8to23 */
887 { .type = S3C_IRQTYPE_LEVEL, }, /* CAM */
888 { .type = S3C_IRQTYPE_EDGE, }, /* nBATT_FLT */
889 { .type = S3C_IRQTYPE_EDGE, }, /* TICK */
890 { .type = S3C_IRQTYPE_EDGE, }, /* WDT */
891 { .type = S3C_IRQTYPE_EDGE, }, /* TIMER0 */
892 { .type = S3C_IRQTYPE_EDGE, }, /* TIMER1 */
893 { .type = S3C_IRQTYPE_EDGE, }, /* TIMER2 */
894 { .type = S3C_IRQTYPE_EDGE, }, /* TIMER3 */
895 { .type = S3C_IRQTYPE_EDGE, }, /* TIMER4 */
896 { .type = S3C_IRQTYPE_LEVEL, }, /* UART2 */
897 { .type = S3C_IRQTYPE_EDGE, }, /* LCD */
898 { .type = S3C_IRQTYPE_EDGE, }, /* DMA0 */
899 { .type = S3C_IRQTYPE_EDGE, }, /* DMA1 */
900 { .type = S3C_IRQTYPE_EDGE, }, /* DMA2 */
901 { .type = S3C_IRQTYPE_EDGE, }, /* DMA3 */
902 { .type = S3C_IRQTYPE_EDGE, }, /* SDI */
903 { .type = S3C_IRQTYPE_EDGE, }, /* SPI0 */
904 { .type = S3C_IRQTYPE_LEVEL, }, /* UART1 */
905 { .type = S3C_IRQTYPE_LEVEL, }, /* NFCON */
906 { .type = S3C_IRQTYPE_EDGE, }, /* USBD */
907 { .type = S3C_IRQTYPE_EDGE, }, /* USBH */
908 { .type = S3C_IRQTYPE_EDGE, }, /* IIC */
909 { .type = S3C_IRQTYPE_LEVEL, }, /* UART0 */
910 { .type = S3C_IRQTYPE_EDGE, }, /* SPI1 */
911 { .type = S3C_IRQTYPE_EDGE, }, /* RTC */
912 { .type = S3C_IRQTYPE_LEVEL, }, /* ADCPARENT */
913};
883 914
884 s3c24xx_init_irq(); 915static struct s3c_irq_data init_s3c2442subint[32] = {
916 { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 28 }, /* UART0-RX */
917 { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 28 }, /* UART0-TX */
918 { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 28 }, /* UART0-ERR */
919 { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 23 }, /* UART1-RX */
920 { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 23 }, /* UART1-TX */
921 { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 23 }, /* UART1-ERR */
922 { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 15 }, /* UART2-RX */
923 { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 15 }, /* UART2-TX */
924 { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 15 }, /* UART2-ERR */
925 { .type = S3C_IRQTYPE_EDGE, .parent_irq = 31 }, /* TC */
926 { .type = S3C_IRQTYPE_EDGE, .parent_irq = 31 }, /* ADC */
927 { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 6 }, /* TC */
928 { .type = S3C_IRQTYPE_LEVEL, .parent_irq = 6 }, /* ADC */
929};
885 930
886 irq_set_chip_and_handler(IRQ_NFCON, &s3c_irq_level_chip, 931void __init s3c2442_init_irq(void)
887 handle_level_irq); 932{
888 set_irq_flags(IRQ_NFCON, IRQF_VALID); 933 struct s3c_irq_intc *main_intc;
889 934
890 /* add chained handler for camera */ 935 pr_info("S3C2442: IRQ Support\n");
891 936
892 irq_set_chip_and_handler(IRQ_CAM, &s3c_irq_level_chip, 937#ifdef CONFIG_FIQ
893 handle_level_irq); 938 init_FIQ(FIQ_START);
894 irq_set_chained_handler(IRQ_CAM, s3c_irq_demux_cam); 939#endif
895 940
896 for (irqno = IRQ_S3C2440_CAM_C; irqno <= IRQ_S3C2440_CAM_P; irqno++) { 941 main_intc = s3c24xx_init_intc(NULL, &init_s3c2442base[0], NULL, 0x4a000000);
897 irq_set_chip_and_handler(irqno, &s3c_irq_cam, 942 if (IS_ERR(main_intc)) {
898 handle_level_irq); 943 pr_err("irq: could not create main interrupt controller\n");
899 set_irq_flags(irqno, IRQF_VALID); 944 return;
900 } 945 }
946
947 s3c24xx_init_intc(NULL, &init_eint[0], main_intc, 0x560000a4);
948 s3c24xx_init_intc(NULL, &init_s3c2442subint[0], main_intc, 0x4a000018);
901} 949}
902#endif 950#endif
903 951