diff options
author | Heiko Stuebner <heiko@sntech.de> | 2013-02-12 12:59:31 -0500 |
---|---|---|
committer | Kukjin Kim <kgene.kim@samsung.com> | 2013-03-05 06:20:49 -0500 |
commit | 70644ade48ae88f88f4935c4d2f3331c3ef177a1 (patch) | |
tree | a82d1ada0c1f81a02df3971c45bd2fa0a264194e /arch/arm/mach-s3c24xx | |
parent | 7cefed5e6b4b61b6bed309e9405eda0a00e9b66c (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.c | 78 |
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 |
880 | void __init s3c2442_init_irq(void) | 880 | static 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(); | 915 | static 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, | 931 | void __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 | ||