]> rtime.felk.cvut.cz Git - can-eth-gw-linux.git/blobdiff - arch/arm/mach-exynos/common.c
Merge tag 'pm-merge' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
[can-eth-gw-linux.git] / arch / arm / mach-exynos / common.c
index 68b4b8eb63dc65ecb74759b8730c0855e6c9fbff..ddd4b72c6f9a9530e432399708b7e38af889e1c6 100644 (file)
@@ -66,7 +66,7 @@ static void exynos5_map_io(void);
 static void exynos5440_map_io(void);
 static void exynos4_init_clocks(int xtal);
 static void exynos5_init_clocks(int xtal);
-static void exynos_init_uarts(struct s3c2410_uartcfg *cfg, int no);
+static void exynos4_init_uarts(struct s3c2410_uartcfg *cfg, int no);
 static int exynos_init(void);
 
 static struct cpu_table cpu_ids[] __initdata = {
@@ -75,7 +75,7 @@ static struct cpu_table cpu_ids[] __initdata = {
                .idmask         = EXYNOS4_CPU_MASK,
                .map_io         = exynos4_map_io,
                .init_clocks    = exynos4_init_clocks,
-               .init_uarts     = exynos_init_uarts,
+               .init_uarts     = exynos4_init_uarts,
                .init           = exynos_init,
                .name           = name_exynos4210,
        }, {
@@ -83,7 +83,7 @@ static struct cpu_table cpu_ids[] __initdata = {
                .idmask         = EXYNOS4_CPU_MASK,
                .map_io         = exynos4_map_io,
                .init_clocks    = exynos4_init_clocks,
-               .init_uarts     = exynos_init_uarts,
+               .init_uarts     = exynos4_init_uarts,
                .init           = exynos_init,
                .name           = name_exynos4212,
        }, {
@@ -91,7 +91,7 @@ static struct cpu_table cpu_ids[] __initdata = {
                .idmask         = EXYNOS4_CPU_MASK,
                .map_io         = exynos4_map_io,
                .init_clocks    = exynos4_init_clocks,
-               .init_uarts     = exynos_init_uarts,
+               .init_uarts     = exynos4_init_uarts,
                .init           = exynos_init,
                .name           = name_exynos4412,
        }, {
@@ -99,7 +99,6 @@ static struct cpu_table cpu_ids[] __initdata = {
                .idmask         = EXYNOS5_SOC_MASK,
                .map_io         = exynos5_map_io,
                .init_clocks    = exynos5_init_clocks,
-               .init_uarts     = exynos_init_uarts,
                .init           = exynos_init,
                .name           = name_exynos5250,
        }, {
@@ -276,26 +275,11 @@ static struct map_desc exynos5_iodesc[] __initdata = {
                .pfn            = __phys_to_pfn(EXYNOS5_PA_PMU),
                .length         = SZ_64K,
                .type           = MT_DEVICE,
-       }, {
-               .virtual        = (unsigned long)S5P_VA_COMBINER_BASE,
-               .pfn            = __phys_to_pfn(EXYNOS5_PA_COMBINER),
-               .length         = SZ_4K,
-               .type           = MT_DEVICE,
        }, {
                .virtual        = (unsigned long)S3C_VA_UART,
                .pfn            = __phys_to_pfn(EXYNOS5_PA_UART),
                .length         = SZ_512K,
                .type           = MT_DEVICE,
-       }, {
-               .virtual        = (unsigned long)S5P_VA_GIC_CPU,
-               .pfn            = __phys_to_pfn(EXYNOS5_PA_GIC_CPU),
-               .length         = SZ_8K,
-               .type           = MT_DEVICE,
-       }, {
-               .virtual        = (unsigned long)S5P_VA_GIC_DIST,
-               .pfn            = __phys_to_pfn(EXYNOS5_PA_GIC_DIST),
-               .length         = SZ_4K,
-               .type           = MT_DEVICE,
        },
 };
 
@@ -413,23 +397,6 @@ static void __init exynos4_map_io(void)
 static void __init exynos5_map_io(void)
 {
        iotable_init(exynos5_iodesc, ARRAY_SIZE(exynos5_iodesc));
-
-       s3c_device_i2c0.resource[0].start = EXYNOS5_PA_IIC(0);
-       s3c_device_i2c0.resource[0].end   = EXYNOS5_PA_IIC(0) + SZ_4K - 1;
-       s3c_device_i2c0.resource[1].start = EXYNOS5_IRQ_IIC;
-       s3c_device_i2c0.resource[1].end   = EXYNOS5_IRQ_IIC;
-
-       s3c_sdhci_setname(0, "exynos4-sdhci");
-       s3c_sdhci_setname(1, "exynos4-sdhci");
-       s3c_sdhci_setname(2, "exynos4-sdhci");
-       s3c_sdhci_setname(3, "exynos4-sdhci");
-
-       /* The I2C bus controllers are directly compatible with s3c2440 */
-       s3c_i2c0_setname("s3c2440-i2c");
-       s3c_i2c1_setname("s3c2440-i2c");
-       s3c_i2c2_setname("s3c2440-i2c");
-
-       s3c64xx_spi_setname("exynos4210-spi");
 }
 
 static void __init exynos4_init_clocks(int xtal)
@@ -653,7 +620,8 @@ static void __init combiner_init(void __iomem *combiner_base,
 }
 
 #ifdef CONFIG_OF
-int __init combiner_of_init(struct device_node *np, struct device_node *parent)
+static int __init combiner_of_init(struct device_node *np,
+                                  struct device_node *parent)
 {
        void __iomem *combiner_base;
 
@@ -712,6 +680,8 @@ void __init exynos5_init_irq(void)
         * uses GIC instead of VIC.
         */
        s5p_init_irq(NULL, 0);
+
+       gic_arch_extn.irq_set_wake = s3c_irq_wake;
 }
 
 struct bus_type exynos_subsys = {
@@ -792,7 +762,7 @@ static int __init exynos_init(void)
 
 /* uart registration process */
 
-static void __init exynos_init_uarts(struct s3c2410_uartcfg *cfg, int no)
+static void __init exynos4_init_uarts(struct s3c2410_uartcfg *cfg, int no)
 {
        struct s3c2410_uartcfg *tcfg = cfg;
        u32 ucnt;
@@ -800,10 +770,7 @@ static void __init exynos_init_uarts(struct s3c2410_uartcfg *cfg, int no)
        for (ucnt = 0; ucnt < no; ucnt++, tcfg++)
                tcfg->has_fracval = 1;
 
-       if (soc_is_exynos5250())
-               s3c24xx_init_uartdevs("exynos4210-uart", exynos5_uart_resources, cfg, no);
-       else
-               s3c24xx_init_uartdevs("exynos4210-uart", exynos4_uart_resources, cfg, no);
+       s3c24xx_init_uartdevs("exynos4210-uart", exynos4_uart_resources, cfg, no);
 }
 
 static void __iomem *exynos_eint_base;
@@ -1035,14 +1002,7 @@ static void exynos_irq_eint0_15(unsigned int irq, struct irq_desc *desc)
        struct irq_chip *chip = irq_get_chip(irq);
 
        chained_irq_enter(chip, desc);
-       chip->irq_mask(&desc->irq_data);
-
-       if (chip->irq_ack)
-               chip->irq_ack(&desc->irq_data);
-
        generic_handle_irq(*irq_data);
-
-       chip->irq_unmask(&desc->irq_data);
        chained_irq_exit(chip, desc);
 }
 
@@ -1062,11 +1022,14 @@ static int __init exynos_init_irq_eint(void)
         * platforms switch over to using the pinctrl driver, the wakeup
         * interrupt support code here can be completely removed.
         */
+       static const struct of_device_id exynos_pinctrl_ids[] = {
+               { .compatible = "samsung,pinctrl-exynos4210", },
+               { .compatible = "samsung,pinctrl-exynos4x12", },
+       };
        struct device_node *pctrl_np, *wkup_np;
-       const char *pctrl_compat = "samsung,pinctrl-exynos4210";
        const char *wkup_compat = "samsung,exynos4210-wakeup-eint";
 
-       for_each_compatible_node(pctrl_np, NULL, pctrl_compat) {
+       for_each_matching_node(pctrl_np, exynos_pinctrl_ids) {
                if (of_device_is_available(pctrl_np)) {
                        wkup_np = of_find_compatible_node(pctrl_np, NULL,
                                                        wkup_compat);