diff options
| -rw-r--r-- | arch/arm/boot/dts/msm8660-surf.dts | 4 | ||||
| -rw-r--r-- | arch/arm/configs/mini2440_defconfig | 2 | ||||
| -rw-r--r-- | arch/arm/mach-exynos/clock-exynos4.c | 24 | ||||
| -rw-r--r-- | arch/arm/mach-exynos/clock-exynos5.c | 24 | ||||
| -rw-r--r-- | arch/arm/mach-exynos/common.c | 14 | ||||
| -rw-r--r-- | arch/arm/mach-exynos/dev-dwmci.c | 13 | ||||
| -rw-r--r-- | arch/arm/mach-exynos/mach-nuri.c | 1 | ||||
| -rw-r--r-- | arch/arm/mach-exynos/mach-universal_c210.c | 1 | ||||
| -rw-r--r-- | arch/arm/mach-msm/board-msm8x60.c | 25 | ||||
| -rw-r--r-- | arch/arm/mach-pxa/include/mach/mfp-pxa2xx.h | 7 | ||||
| -rw-r--r-- | arch/arm/mach-pxa/mfp-pxa2xx.c | 21 | ||||
| -rw-r--r-- | arch/arm/mach-pxa/pxa27x.c | 6 | ||||
| -rw-r--r-- | arch/arm/mach-s3c24xx/Kconfig | 8 | ||||
| -rw-r--r-- | arch/arm/mach-s5pv210/mach-goni.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-sa1100/generic.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-u300/core.c | 6 | ||||
| -rw-r--r-- | arch/arm/mach-u300/i2c.c | 9 | ||||
| -rw-r--r-- | arch/arm/mach-u300/include/mach/irqs.h | 150 | ||||
| -rw-r--r-- | arch/arm/plat-samsung/include/plat/sdhci.h | 28 | ||||
| -rw-r--r-- | drivers/gpio/gpio-pxa.c | 21 | ||||
| -rw-r--r-- | include/linux/gpio-pxa.h | 4 |
21 files changed, 230 insertions, 142 deletions
diff --git a/arch/arm/boot/dts/msm8660-surf.dts b/arch/arm/boot/dts/msm8660-surf.dts index 15ded0deaa79..45bc4bb04e57 100644 --- a/arch/arm/boot/dts/msm8660-surf.dts +++ b/arch/arm/boot/dts/msm8660-surf.dts | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | intc: interrupt-controller@02080000 { | 10 | intc: interrupt-controller@02080000 { |
| 11 | compatible = "qcom,msm-8660-qgic"; | 11 | compatible = "qcom,msm-8660-qgic"; |
| 12 | interrupt-controller; | 12 | interrupt-controller; |
| 13 | #interrupt-cells = <1>; | 13 | #interrupt-cells = <3>; |
| 14 | reg = < 0x02080000 0x1000 >, | 14 | reg = < 0x02080000 0x1000 >, |
| 15 | < 0x02081000 0x1000 >; | 15 | < 0x02081000 0x1000 >; |
| 16 | }; | 16 | }; |
| @@ -19,6 +19,6 @@ | |||
| 19 | compatible = "qcom,msm-hsuart", "qcom,msm-uart"; | 19 | compatible = "qcom,msm-hsuart", "qcom,msm-uart"; |
| 20 | reg = <0x19c40000 0x1000>, | 20 | reg = <0x19c40000 0x1000>, |
| 21 | <0x19c00000 0x1000>; | 21 | <0x19c00000 0x1000>; |
| 22 | interrupts = <195>; | 22 | interrupts = <0 195 0x0>; |
| 23 | }; | 23 | }; |
| 24 | }; | 24 | }; |
diff --git a/arch/arm/configs/mini2440_defconfig b/arch/arm/configs/mini2440_defconfig index 42da9183acc8..082175c54e7c 100644 --- a/arch/arm/configs/mini2440_defconfig +++ b/arch/arm/configs/mini2440_defconfig | |||
| @@ -14,6 +14,8 @@ CONFIG_MODULE_FORCE_UNLOAD=y | |||
| 14 | # CONFIG_BLK_DEV_BSG is not set | 14 | # CONFIG_BLK_DEV_BSG is not set |
| 15 | CONFIG_BLK_DEV_INTEGRITY=y | 15 | CONFIG_BLK_DEV_INTEGRITY=y |
| 16 | CONFIG_ARCH_S3C24XX=y | 16 | CONFIG_ARCH_S3C24XX=y |
| 17 | # CONFIG_CPU_S3C2410 is not set | ||
| 18 | CONFIG_CPU_S3C2440=y | ||
| 17 | CONFIG_S3C_ADC=y | 19 | CONFIG_S3C_ADC=y |
| 18 | CONFIG_S3C24XX_PWM=y | 20 | CONFIG_S3C24XX_PWM=y |
| 19 | CONFIG_MACH_MINI2440=y | 21 | CONFIG_MACH_MINI2440=y |
diff --git a/arch/arm/mach-exynos/clock-exynos4.c b/arch/arm/mach-exynos/clock-exynos4.c index df54c2a92225..6efd1e5919fd 100644 --- a/arch/arm/mach-exynos/clock-exynos4.c +++ b/arch/arm/mach-exynos/clock-exynos4.c | |||
| @@ -497,25 +497,25 @@ static struct clk exynos4_init_clocks_off[] = { | |||
| 497 | .ctrlbit = (1 << 3), | 497 | .ctrlbit = (1 << 3), |
| 498 | }, { | 498 | }, { |
| 499 | .name = "hsmmc", | 499 | .name = "hsmmc", |
| 500 | .devname = "s3c-sdhci.0", | 500 | .devname = "exynos4-sdhci.0", |
| 501 | .parent = &exynos4_clk_aclk_133.clk, | 501 | .parent = &exynos4_clk_aclk_133.clk, |
| 502 | .enable = exynos4_clk_ip_fsys_ctrl, | 502 | .enable = exynos4_clk_ip_fsys_ctrl, |
| 503 | .ctrlbit = (1 << 5), | 503 | .ctrlbit = (1 << 5), |
| 504 | }, { | 504 | }, { |
| 505 | .name = "hsmmc", | 505 | .name = "hsmmc", |
| 506 | .devname = "s3c-sdhci.1", | 506 | .devname = "exynos4-sdhci.1", |
| 507 | .parent = &exynos4_clk_aclk_133.clk, | 507 | .parent = &exynos4_clk_aclk_133.clk, |
| 508 | .enable = exynos4_clk_ip_fsys_ctrl, | 508 | .enable = exynos4_clk_ip_fsys_ctrl, |
| 509 | .ctrlbit = (1 << 6), | 509 | .ctrlbit = (1 << 6), |
| 510 | }, { | 510 | }, { |
| 511 | .name = "hsmmc", | 511 | .name = "hsmmc", |
| 512 | .devname = "s3c-sdhci.2", | 512 | .devname = "exynos4-sdhci.2", |
| 513 | .parent = &exynos4_clk_aclk_133.clk, | 513 | .parent = &exynos4_clk_aclk_133.clk, |
| 514 | .enable = exynos4_clk_ip_fsys_ctrl, | 514 | .enable = exynos4_clk_ip_fsys_ctrl, |
| 515 | .ctrlbit = (1 << 7), | 515 | .ctrlbit = (1 << 7), |
| 516 | }, { | 516 | }, { |
| 517 | .name = "hsmmc", | 517 | .name = "hsmmc", |
| 518 | .devname = "s3c-sdhci.3", | 518 | .devname = "exynos4-sdhci.3", |
| 519 | .parent = &exynos4_clk_aclk_133.clk, | 519 | .parent = &exynos4_clk_aclk_133.clk, |
| 520 | .enable = exynos4_clk_ip_fsys_ctrl, | 520 | .enable = exynos4_clk_ip_fsys_ctrl, |
| 521 | .ctrlbit = (1 << 8), | 521 | .ctrlbit = (1 << 8), |
| @@ -1202,7 +1202,7 @@ static struct clksrc_clk exynos4_clk_sclk_uart3 = { | |||
| 1202 | static struct clksrc_clk exynos4_clk_sclk_mmc0 = { | 1202 | static struct clksrc_clk exynos4_clk_sclk_mmc0 = { |
| 1203 | .clk = { | 1203 | .clk = { |
| 1204 | .name = "sclk_mmc", | 1204 | .name = "sclk_mmc", |
| 1205 | .devname = "s3c-sdhci.0", | 1205 | .devname = "exynos4-sdhci.0", |
| 1206 | .parent = &exynos4_clk_dout_mmc0.clk, | 1206 | .parent = &exynos4_clk_dout_mmc0.clk, |
| 1207 | .enable = exynos4_clksrc_mask_fsys_ctrl, | 1207 | .enable = exynos4_clksrc_mask_fsys_ctrl, |
| 1208 | .ctrlbit = (1 << 0), | 1208 | .ctrlbit = (1 << 0), |
| @@ -1213,7 +1213,7 @@ static struct clksrc_clk exynos4_clk_sclk_mmc0 = { | |||
| 1213 | static struct clksrc_clk exynos4_clk_sclk_mmc1 = { | 1213 | static struct clksrc_clk exynos4_clk_sclk_mmc1 = { |
| 1214 | .clk = { | 1214 | .clk = { |
| 1215 | .name = "sclk_mmc", | 1215 | .name = "sclk_mmc", |
| 1216 | .devname = "s3c-sdhci.1", | 1216 | .devname = "exynos4-sdhci.1", |
| 1217 | .parent = &exynos4_clk_dout_mmc1.clk, | 1217 | .parent = &exynos4_clk_dout_mmc1.clk, |
| 1218 | .enable = exynos4_clksrc_mask_fsys_ctrl, | 1218 | .enable = exynos4_clksrc_mask_fsys_ctrl, |
| 1219 | .ctrlbit = (1 << 4), | 1219 | .ctrlbit = (1 << 4), |
| @@ -1224,7 +1224,7 @@ static struct clksrc_clk exynos4_clk_sclk_mmc1 = { | |||
| 1224 | static struct clksrc_clk exynos4_clk_sclk_mmc2 = { | 1224 | static struct clksrc_clk exynos4_clk_sclk_mmc2 = { |
| 1225 | .clk = { | 1225 | .clk = { |
| 1226 | .name = "sclk_mmc", | 1226 | .name = "sclk_mmc", |
| 1227 | .devname = "s3c-sdhci.2", | 1227 | .devname = "exynos4-sdhci.2", |
| 1228 | .parent = &exynos4_clk_dout_mmc2.clk, | 1228 | .parent = &exynos4_clk_dout_mmc2.clk, |
| 1229 | .enable = exynos4_clksrc_mask_fsys_ctrl, | 1229 | .enable = exynos4_clksrc_mask_fsys_ctrl, |
| 1230 | .ctrlbit = (1 << 8), | 1230 | .ctrlbit = (1 << 8), |
| @@ -1235,7 +1235,7 @@ static struct clksrc_clk exynos4_clk_sclk_mmc2 = { | |||
| 1235 | static struct clksrc_clk exynos4_clk_sclk_mmc3 = { | 1235 | static struct clksrc_clk exynos4_clk_sclk_mmc3 = { |
| 1236 | .clk = { | 1236 | .clk = { |
| 1237 | .name = "sclk_mmc", | 1237 | .name = "sclk_mmc", |
| 1238 | .devname = "s3c-sdhci.3", | 1238 | .devname = "exynos4-sdhci.3", |
| 1239 | .parent = &exynos4_clk_dout_mmc3.clk, | 1239 | .parent = &exynos4_clk_dout_mmc3.clk, |
| 1240 | .enable = exynos4_clksrc_mask_fsys_ctrl, | 1240 | .enable = exynos4_clksrc_mask_fsys_ctrl, |
| 1241 | .ctrlbit = (1 << 12), | 1241 | .ctrlbit = (1 << 12), |
| @@ -1340,10 +1340,10 @@ static struct clk_lookup exynos4_clk_lookup[] = { | |||
| 1340 | CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &exynos4_clk_sclk_uart1.clk), | 1340 | CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &exynos4_clk_sclk_uart1.clk), |
| 1341 | CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &exynos4_clk_sclk_uart2.clk), | 1341 | CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &exynos4_clk_sclk_uart2.clk), |
| 1342 | CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &exynos4_clk_sclk_uart3.clk), | 1342 | CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &exynos4_clk_sclk_uart3.clk), |
| 1343 | CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &exynos4_clk_sclk_mmc0.clk), | 1343 | CLKDEV_INIT("exynos4-sdhci.0", "mmc_busclk.2", &exynos4_clk_sclk_mmc0.clk), |
| 1344 | CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &exynos4_clk_sclk_mmc1.clk), | 1344 | CLKDEV_INIT("exynos4-sdhci.1", "mmc_busclk.2", &exynos4_clk_sclk_mmc1.clk), |
| 1345 | CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &exynos4_clk_sclk_mmc2.clk), | 1345 | CLKDEV_INIT("exynos4-sdhci.2", "mmc_busclk.2", &exynos4_clk_sclk_mmc2.clk), |
| 1346 | CLKDEV_INIT("s3c-sdhci.3", "mmc_busclk.2", &exynos4_clk_sclk_mmc3.clk), | 1346 | CLKDEV_INIT("exynos4-sdhci.3", "mmc_busclk.2", &exynos4_clk_sclk_mmc3.clk), |
| 1347 | CLKDEV_INIT("exynos4-fb.0", "lcd", &exynos4_clk_fimd0), | 1347 | CLKDEV_INIT("exynos4-fb.0", "lcd", &exynos4_clk_fimd0), |
| 1348 | CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos4_clk_pdma0), | 1348 | CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos4_clk_pdma0), |
| 1349 | CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos4_clk_pdma1), | 1349 | CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos4_clk_pdma1), |
diff --git a/arch/arm/mach-exynos/clock-exynos5.c b/arch/arm/mach-exynos/clock-exynos5.c index d013982d0f8e..5cd7a8b8868c 100644 --- a/arch/arm/mach-exynos/clock-exynos5.c +++ b/arch/arm/mach-exynos/clock-exynos5.c | |||
| @@ -455,25 +455,25 @@ static struct clk exynos5_init_clocks_off[] = { | |||
| 455 | .ctrlbit = (1 << 20), | 455 | .ctrlbit = (1 << 20), |
| 456 | }, { | 456 | }, { |
| 457 | .name = "hsmmc", | 457 | .name = "hsmmc", |
| 458 | .devname = "s3c-sdhci.0", | 458 | .devname = "exynos4-sdhci.0", |
| 459 | .parent = &exynos5_clk_aclk_200.clk, | 459 | .parent = &exynos5_clk_aclk_200.clk, |
| 460 | .enable = exynos5_clk_ip_fsys_ctrl, | 460 | .enable = exynos5_clk_ip_fsys_ctrl, |
| 461 | .ctrlbit = (1 << 12), | 461 | .ctrlbit = (1 << 12), |
| 462 | }, { | 462 | }, { |
| 463 | .name = "hsmmc", | 463 | .name = "hsmmc", |
| 464 | .devname = "s3c-sdhci.1", | 464 | .devname = "exynos4-sdhci.1", |
| 465 | .parent = &exynos5_clk_aclk_200.clk, | 465 | .parent = &exynos5_clk_aclk_200.clk, |
| 466 | .enable = exynos5_clk_ip_fsys_ctrl, | 466 | .enable = exynos5_clk_ip_fsys_ctrl, |
| 467 | .ctrlbit = (1 << 13), | 467 | .ctrlbit = (1 << 13), |
| 468 | }, { | 468 | }, { |
| 469 | .name = "hsmmc", | 469 | .name = "hsmmc", |
| 470 | .devname = "s3c-sdhci.2", | 470 | .devname = "exynos4-sdhci.2", |
| 471 | .parent = &exynos5_clk_aclk_200.clk, | 471 | .parent = &exynos5_clk_aclk_200.clk, |
| 472 | .enable = exynos5_clk_ip_fsys_ctrl, | 472 | .enable = exynos5_clk_ip_fsys_ctrl, |
| 473 | .ctrlbit = (1 << 14), | 473 | .ctrlbit = (1 << 14), |
| 474 | }, { | 474 | }, { |
| 475 | .name = "hsmmc", | 475 | .name = "hsmmc", |
| 476 | .devname = "s3c-sdhci.3", | 476 | .devname = "exynos4-sdhci.3", |
| 477 | .parent = &exynos5_clk_aclk_200.clk, | 477 | .parent = &exynos5_clk_aclk_200.clk, |
| 478 | .enable = exynos5_clk_ip_fsys_ctrl, | 478 | .enable = exynos5_clk_ip_fsys_ctrl, |
| 479 | .ctrlbit = (1 << 15), | 479 | .ctrlbit = (1 << 15), |
| @@ -813,7 +813,7 @@ static struct clksrc_clk exynos5_clk_sclk_uart3 = { | |||
| 813 | static struct clksrc_clk exynos5_clk_sclk_mmc0 = { | 813 | static struct clksrc_clk exynos5_clk_sclk_mmc0 = { |
| 814 | .clk = { | 814 | .clk = { |
| 815 | .name = "sclk_mmc", | 815 | .name = "sclk_mmc", |
| 816 | .devname = "s3c-sdhci.0", | 816 | .devname = "exynos4-sdhci.0", |
| 817 | .parent = &exynos5_clk_dout_mmc0.clk, | 817 | .parent = &exynos5_clk_dout_mmc0.clk, |
| 818 | .enable = exynos5_clksrc_mask_fsys_ctrl, | 818 | .enable = exynos5_clksrc_mask_fsys_ctrl, |
| 819 | .ctrlbit = (1 << 0), | 819 | .ctrlbit = (1 << 0), |
| @@ -824,7 +824,7 @@ static struct clksrc_clk exynos5_clk_sclk_mmc0 = { | |||
| 824 | static struct clksrc_clk exynos5_clk_sclk_mmc1 = { | 824 | static struct clksrc_clk exynos5_clk_sclk_mmc1 = { |
| 825 | .clk = { | 825 | .clk = { |
| 826 | .name = "sclk_mmc", | 826 | .name = "sclk_mmc", |
| 827 | .devname = "s3c-sdhci.1", | 827 | .devname = "exynos4-sdhci.1", |
| 828 | .parent = &exynos5_clk_dout_mmc1.clk, | 828 | .parent = &exynos5_clk_dout_mmc1.clk, |
| 829 | .enable = exynos5_clksrc_mask_fsys_ctrl, | 829 | .enable = exynos5_clksrc_mask_fsys_ctrl, |
| 830 | .ctrlbit = (1 << 4), | 830 | .ctrlbit = (1 << 4), |
| @@ -835,7 +835,7 @@ static struct clksrc_clk exynos5_clk_sclk_mmc1 = { | |||
| 835 | static struct clksrc_clk exynos5_clk_sclk_mmc2 = { | 835 | static struct clksrc_clk exynos5_clk_sclk_mmc2 = { |
| 836 | .clk = { | 836 | .clk = { |
| 837 | .name = "sclk_mmc", | 837 | .name = "sclk_mmc", |
| 838 | .devname = "s3c-sdhci.2", | 838 | .devname = "exynos4-sdhci.2", |
| 839 | .parent = &exynos5_clk_dout_mmc2.clk, | 839 | .parent = &exynos5_clk_dout_mmc2.clk, |
| 840 | .enable = exynos5_clksrc_mask_fsys_ctrl, | 840 | .enable = exynos5_clksrc_mask_fsys_ctrl, |
| 841 | .ctrlbit = (1 << 8), | 841 | .ctrlbit = (1 << 8), |
| @@ -846,7 +846,7 @@ static struct clksrc_clk exynos5_clk_sclk_mmc2 = { | |||
| 846 | static struct clksrc_clk exynos5_clk_sclk_mmc3 = { | 846 | static struct clksrc_clk exynos5_clk_sclk_mmc3 = { |
| 847 | .clk = { | 847 | .clk = { |
| 848 | .name = "sclk_mmc", | 848 | .name = "sclk_mmc", |
| 849 | .devname = "s3c-sdhci.3", | 849 | .devname = "exynos4-sdhci.3", |
| 850 | .parent = &exynos5_clk_dout_mmc3.clk, | 850 | .parent = &exynos5_clk_dout_mmc3.clk, |
| 851 | .enable = exynos5_clksrc_mask_fsys_ctrl, | 851 | .enable = exynos5_clksrc_mask_fsys_ctrl, |
| 852 | .ctrlbit = (1 << 12), | 852 | .ctrlbit = (1 << 12), |
| @@ -990,10 +990,10 @@ static struct clk_lookup exynos5_clk_lookup[] = { | |||
| 990 | CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &exynos5_clk_sclk_uart1.clk), | 990 | CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &exynos5_clk_sclk_uart1.clk), |
| 991 | CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &exynos5_clk_sclk_uart2.clk), | 991 | CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &exynos5_clk_sclk_uart2.clk), |
| 992 | CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &exynos5_clk_sclk_uart3.clk), | 992 | CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &exynos5_clk_sclk_uart3.clk), |
| 993 | CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &exynos5_clk_sclk_mmc0.clk), | 993 | CLKDEV_INIT("exynos4-sdhci.0", "mmc_busclk.2", &exynos5_clk_sclk_mmc0.clk), |
| 994 | CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &exynos5_clk_sclk_mmc1.clk), | 994 | CLKDEV_INIT("exynos4-sdhci.1", "mmc_busclk.2", &exynos5_clk_sclk_mmc1.clk), |
| 995 | CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &exynos5_clk_sclk_mmc2.clk), | 995 | CLKDEV_INIT("exynos4-sdhci.2", "mmc_busclk.2", &exynos5_clk_sclk_mmc2.clk), |
| 996 | CLKDEV_INIT("s3c-sdhci.3", "mmc_busclk.2", &exynos5_clk_sclk_mmc3.clk), | 996 | CLKDEV_INIT("exynos4-sdhci.3", "mmc_busclk.2", &exynos5_clk_sclk_mmc3.clk), |
| 997 | CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos5_clk_pdma0), | 997 | CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos5_clk_pdma0), |
| 998 | CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos5_clk_pdma1), | 998 | CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos5_clk_pdma1), |
| 999 | CLKDEV_INIT("dma-pl330.2", "apb_pclk", &exynos5_clk_mdma1), | 999 | CLKDEV_INIT("dma-pl330.2", "apb_pclk", &exynos5_clk_mdma1), |
diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c index 8614aab47cc0..5ccd6e80a607 100644 --- a/arch/arm/mach-exynos/common.c +++ b/arch/arm/mach-exynos/common.c | |||
| @@ -326,6 +326,11 @@ static void __init exynos4_map_io(void) | |||
| 326 | s3c_fimc_setname(2, "exynos4-fimc"); | 326 | s3c_fimc_setname(2, "exynos4-fimc"); |
| 327 | s3c_fimc_setname(3, "exynos4-fimc"); | 327 | s3c_fimc_setname(3, "exynos4-fimc"); |
| 328 | 328 | ||
| 329 | s3c_sdhci_setname(0, "exynos4-sdhci"); | ||
| 330 | s3c_sdhci_setname(1, "exynos4-sdhci"); | ||
| 331 | s3c_sdhci_setname(2, "exynos4-sdhci"); | ||
| 332 | s3c_sdhci_setname(3, "exynos4-sdhci"); | ||
| 333 | |||
| 329 | /* The I2C bus controllers are directly compatible with s3c2440 */ | 334 | /* The I2C bus controllers are directly compatible with s3c2440 */ |
| 330 | s3c_i2c0_setname("s3c2440-i2c"); | 335 | s3c_i2c0_setname("s3c2440-i2c"); |
| 331 | s3c_i2c1_setname("s3c2440-i2c"); | 336 | s3c_i2c1_setname("s3c2440-i2c"); |
| @@ -344,6 +349,11 @@ static void __init exynos5_map_io(void) | |||
| 344 | s3c_device_i2c0.resource[1].start = EXYNOS5_IRQ_IIC; | 349 | s3c_device_i2c0.resource[1].start = EXYNOS5_IRQ_IIC; |
| 345 | s3c_device_i2c0.resource[1].end = EXYNOS5_IRQ_IIC; | 350 | s3c_device_i2c0.resource[1].end = EXYNOS5_IRQ_IIC; |
| 346 | 351 | ||
| 352 | s3c_sdhci_setname(0, "exynos4-sdhci"); | ||
| 353 | s3c_sdhci_setname(1, "exynos4-sdhci"); | ||
| 354 | s3c_sdhci_setname(2, "exynos4-sdhci"); | ||
| 355 | s3c_sdhci_setname(3, "exynos4-sdhci"); | ||
| 356 | |||
| 347 | /* The I2C bus controllers are directly compatible with s3c2440 */ | 357 | /* The I2C bus controllers are directly compatible with s3c2440 */ |
| 348 | s3c_i2c0_setname("s3c2440-i2c"); | 358 | s3c_i2c0_setname("s3c2440-i2c"); |
| 349 | s3c_i2c1_setname("s3c2440-i2c"); | 359 | s3c_i2c1_setname("s3c2440-i2c"); |
| @@ -537,7 +547,9 @@ void __init exynos5_init_irq(void) | |||
| 537 | { | 547 | { |
| 538 | int irq; | 548 | int irq; |
| 539 | 549 | ||
| 540 | gic_init(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU); | 550 | #ifdef CONFIG_OF |
| 551 | of_irq_init(exynos4_dt_irq_match); | ||
| 552 | #endif | ||
| 541 | 553 | ||
| 542 | for (irq = 0; irq < EXYNOS5_MAX_COMBINER_NR; irq++) { | 554 | for (irq = 0; irq < EXYNOS5_MAX_COMBINER_NR; irq++) { |
| 543 | combiner_init(irq, (void __iomem *)S5P_VA_COMBINER(irq), | 555 | combiner_init(irq, (void __iomem *)S5P_VA_COMBINER(irq), |
diff --git a/arch/arm/mach-exynos/dev-dwmci.c b/arch/arm/mach-exynos/dev-dwmci.c index b025db4bf602..79035018fb74 100644 --- a/arch/arm/mach-exynos/dev-dwmci.c +++ b/arch/arm/mach-exynos/dev-dwmci.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include <linux/dma-mapping.h> | 16 | #include <linux/dma-mapping.h> |
| 17 | #include <linux/platform_device.h> | 17 | #include <linux/platform_device.h> |
| 18 | #include <linux/interrupt.h> | 18 | #include <linux/interrupt.h> |
| 19 | #include <linux/ioport.h> | ||
| 19 | #include <linux/mmc/dw_mmc.h> | 20 | #include <linux/mmc/dw_mmc.h> |
| 20 | 21 | ||
| 21 | #include <plat/devs.h> | 22 | #include <plat/devs.h> |
| @@ -33,16 +34,8 @@ static int exynos4_dwmci_init(u32 slot_id, irq_handler_t handler, void *data) | |||
| 33 | } | 34 | } |
| 34 | 35 | ||
| 35 | static struct resource exynos4_dwmci_resource[] = { | 36 | static struct resource exynos4_dwmci_resource[] = { |
| 36 | [0] = { | 37 | [0] = DEFINE_RES_MEM(EXYNOS4_PA_DWMCI, SZ_4K), |
| 37 | .start = EXYNOS4_PA_DWMCI, | 38 | [1] = DEFINE_RES_IRQ(EXYNOS4_IRQ_DWMCI), |
| 38 | .end = EXYNOS4_PA_DWMCI + SZ_4K - 1, | ||
| 39 | .flags = IORESOURCE_MEM, | ||
| 40 | }, | ||
| 41 | [1] = { | ||
| 42 | .start = IRQ_DWMCI, | ||
| 43 | .end = IRQ_DWMCI, | ||
| 44 | .flags = IORESOURCE_IRQ, | ||
| 45 | } | ||
| 46 | }; | 39 | }; |
| 47 | 40 | ||
| 48 | static struct dw_mci_board exynos4_dwci_pdata = { | 41 | static struct dw_mci_board exynos4_dwci_pdata = { |
diff --git a/arch/arm/mach-exynos/mach-nuri.c b/arch/arm/mach-exynos/mach-nuri.c index b4f1f902ce6d..ed90aef404c3 100644 --- a/arch/arm/mach-exynos/mach-nuri.c +++ b/arch/arm/mach-exynos/mach-nuri.c | |||
| @@ -112,6 +112,7 @@ static struct s3c_sdhci_platdata nuri_hsmmc0_data __initdata = { | |||
| 112 | .host_caps = (MMC_CAP_8_BIT_DATA | MMC_CAP_4_BIT_DATA | | 112 | .host_caps = (MMC_CAP_8_BIT_DATA | MMC_CAP_4_BIT_DATA | |
| 113 | MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED | | 113 | MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED | |
| 114 | MMC_CAP_ERASE), | 114 | MMC_CAP_ERASE), |
| 115 | .host_caps2 = MMC_CAP2_BROKEN_VOLTAGE, | ||
| 115 | .cd_type = S3C_SDHCI_CD_PERMANENT, | 116 | .cd_type = S3C_SDHCI_CD_PERMANENT, |
| 116 | .clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL, | 117 | .clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL, |
| 117 | }; | 118 | }; |
diff --git a/arch/arm/mach-exynos/mach-universal_c210.c b/arch/arm/mach-exynos/mach-universal_c210.c index 7ebf79c2ab34..cb2b027f09a6 100644 --- a/arch/arm/mach-exynos/mach-universal_c210.c +++ b/arch/arm/mach-exynos/mach-universal_c210.c | |||
| @@ -747,6 +747,7 @@ static struct s3c_sdhci_platdata universal_hsmmc0_data __initdata = { | |||
| 747 | .max_width = 8, | 747 | .max_width = 8, |
| 748 | .host_caps = (MMC_CAP_8_BIT_DATA | MMC_CAP_4_BIT_DATA | | 748 | .host_caps = (MMC_CAP_8_BIT_DATA | MMC_CAP_4_BIT_DATA | |
| 749 | MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED), | 749 | MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED), |
| 750 | .host_caps2 = MMC_CAP2_BROKEN_VOLTAGE, | ||
| 750 | .cd_type = S3C_SDHCI_CD_PERMANENT, | 751 | .cd_type = S3C_SDHCI_CD_PERMANENT, |
| 751 | .clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL, | 752 | .clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL, |
| 752 | }; | 753 | }; |
diff --git a/arch/arm/mach-msm/board-msm8x60.c b/arch/arm/mach-msm/board-msm8x60.c index 962e71169750..fb3496a52ef4 100644 --- a/arch/arm/mach-msm/board-msm8x60.c +++ b/arch/arm/mach-msm/board-msm8x60.c | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include <linux/irqdomain.h> | 17 | #include <linux/irqdomain.h> |
| 18 | #include <linux/of.h> | 18 | #include <linux/of.h> |
| 19 | #include <linux/of_address.h> | 19 | #include <linux/of_address.h> |
| 20 | #include <linux/of_irq.h> | ||
| 20 | #include <linux/of_platform.h> | 21 | #include <linux/of_platform.h> |
| 21 | #include <linux/memblock.h> | 22 | #include <linux/memblock.h> |
| 22 | 23 | ||
| @@ -49,10 +50,22 @@ static void __init msm8x60_map_io(void) | |||
| 49 | msm_map_msm8x60_io(); | 50 | msm_map_msm8x60_io(); |
| 50 | } | 51 | } |
| 51 | 52 | ||
| 53 | #ifdef CONFIG_OF | ||
| 54 | static struct of_device_id msm_dt_gic_match[] __initdata = { | ||
| 55 | { .compatible = "qcom,msm-8660-qgic", .data = gic_of_init }, | ||
| 56 | {} | ||
| 57 | }; | ||
| 58 | #endif | ||
| 59 | |||
| 52 | static void __init msm8x60_init_irq(void) | 60 | static void __init msm8x60_init_irq(void) |
| 53 | { | 61 | { |
| 54 | gic_init(0, GIC_PPI_START, MSM_QGIC_DIST_BASE, | 62 | if (!of_have_populated_dt()) |
| 55 | (void *)MSM_QGIC_CPU_BASE); | 63 | gic_init(0, GIC_PPI_START, MSM_QGIC_DIST_BASE, |
| 64 | (void *)MSM_QGIC_CPU_BASE); | ||
| 65 | #ifdef CONFIG_OF | ||
| 66 | else | ||
| 67 | of_irq_init(msm_dt_gic_match); | ||
| 68 | #endif | ||
| 56 | 69 | ||
| 57 | /* Edge trigger PPIs except AVS_SVICINT and AVS_SVICINTSWDONE */ | 70 | /* Edge trigger PPIs except AVS_SVICINT and AVS_SVICINTSWDONE */ |
| 58 | writel(0xFFFFD7FF, MSM_QGIC_DIST_BASE + GIC_DIST_CONFIG + 4); | 71 | writel(0xFFFFD7FF, MSM_QGIC_DIST_BASE + GIC_DIST_CONFIG + 4); |
| @@ -73,16 +86,8 @@ static struct of_dev_auxdata msm_auxdata_lookup[] __initdata = { | |||
| 73 | {} | 86 | {} |
| 74 | }; | 87 | }; |
| 75 | 88 | ||
| 76 | static struct of_device_id msm_dt_gic_match[] __initdata = { | ||
| 77 | { .compatible = "qcom,msm-8660-qgic", }, | ||
| 78 | {} | ||
| 79 | }; | ||
| 80 | |||
| 81 | static void __init msm8x60_dt_init(void) | 89 | static void __init msm8x60_dt_init(void) |
| 82 | { | 90 | { |
| 83 | irq_domain_generate_simple(msm_dt_gic_match, MSM8X60_QGIC_DIST_PHYS, | ||
| 84 | GIC_SPI_START); | ||
| 85 | |||
| 86 | if (of_machine_is_compatible("qcom,msm8660-surf")) { | 91 | if (of_machine_is_compatible("qcom,msm8660-surf")) { |
| 87 | printk(KERN_INFO "Init surf UART registers\n"); | 92 | printk(KERN_INFO "Init surf UART registers\n"); |
| 88 | msm8x60_init_uart12dm(); | 93 | msm8x60_init_uart12dm(); |
diff --git a/arch/arm/mach-pxa/include/mach/mfp-pxa2xx.h b/arch/arm/mach-pxa/include/mach/mfp-pxa2xx.h index c54cef25895c..cbf51ae81855 100644 --- a/arch/arm/mach-pxa/include/mach/mfp-pxa2xx.h +++ b/arch/arm/mach-pxa/include/mach/mfp-pxa2xx.h | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | * | 17 | * |
| 18 | * bit 23 - Input/Output (PXA2xx specific) | 18 | * bit 23 - Input/Output (PXA2xx specific) |
| 19 | * bit 24 - Wakeup Enable(PXA2xx specific) | 19 | * bit 24 - Wakeup Enable(PXA2xx specific) |
| 20 | * bit 25 - Keep Output (PXA2xx specific) | ||
| 20 | */ | 21 | */ |
| 21 | 22 | ||
| 22 | #define MFP_DIR_IN (0x0 << 23) | 23 | #define MFP_DIR_IN (0x0 << 23) |
| @@ -25,6 +26,12 @@ | |||
| 25 | #define MFP_DIR(x) (((x) >> 23) & 0x1) | 26 | #define MFP_DIR(x) (((x) >> 23) & 0x1) |
| 26 | 27 | ||
| 27 | #define MFP_LPM_CAN_WAKEUP (0x1 << 24) | 28 | #define MFP_LPM_CAN_WAKEUP (0x1 << 24) |
| 29 | |||
| 30 | /* | ||
| 31 | * MFP_LPM_KEEP_OUTPUT must be specified for pins that need to | ||
| 32 | * retain their last output level (low or high). | ||
| 33 | * Note: MFP_LPM_KEEP_OUTPUT has no effect on pins configured for input. | ||
| 34 | */ | ||
| 28 | #define MFP_LPM_KEEP_OUTPUT (0x1 << 25) | 35 | #define MFP_LPM_KEEP_OUTPUT (0x1 << 25) |
| 29 | 36 | ||
| 30 | #define WAKEUP_ON_EDGE_RISE (MFP_LPM_CAN_WAKEUP | MFP_LPM_EDGE_RISE) | 37 | #define WAKEUP_ON_EDGE_RISE (MFP_LPM_CAN_WAKEUP | MFP_LPM_EDGE_RISE) |
diff --git a/arch/arm/mach-pxa/mfp-pxa2xx.c b/arch/arm/mach-pxa/mfp-pxa2xx.c index b0a842887780..ef0426a159d4 100644 --- a/arch/arm/mach-pxa/mfp-pxa2xx.c +++ b/arch/arm/mach-pxa/mfp-pxa2xx.c | |||
| @@ -33,6 +33,8 @@ | |||
| 33 | #define BANK_OFF(n) (((n) < 3) ? (n) << 2 : 0x100 + (((n) - 3) << 2)) | 33 | #define BANK_OFF(n) (((n) < 3) ? (n) << 2 : 0x100 + (((n) - 3) << 2)) |
| 34 | #define GPLR(x) __REG2(0x40E00000, BANK_OFF((x) >> 5)) | 34 | #define GPLR(x) __REG2(0x40E00000, BANK_OFF((x) >> 5)) |
| 35 | #define GPDR(x) __REG2(0x40E00000, BANK_OFF((x) >> 5) + 0x0c) | 35 | #define GPDR(x) __REG2(0x40E00000, BANK_OFF((x) >> 5) + 0x0c) |
| 36 | #define GPSR(x) __REG2(0x40E00000, BANK_OFF((x) >> 5) + 0x18) | ||
| 37 | #define GPCR(x) __REG2(0x40E00000, BANK_OFF((x) >> 5) + 0x24) | ||
| 36 | 38 | ||
| 37 | #define PWER_WE35 (1 << 24) | 39 | #define PWER_WE35 (1 << 24) |
| 38 | 40 | ||
| @@ -348,6 +350,7 @@ static inline void pxa27x_mfp_init(void) {} | |||
| 348 | #ifdef CONFIG_PM | 350 | #ifdef CONFIG_PM |
| 349 | static unsigned long saved_gafr[2][4]; | 351 | static unsigned long saved_gafr[2][4]; |
| 350 | static unsigned long saved_gpdr[4]; | 352 | static unsigned long saved_gpdr[4]; |
| 353 | static unsigned long saved_gplr[4]; | ||
| 351 | static unsigned long saved_pgsr[4]; | 354 | static unsigned long saved_pgsr[4]; |
| 352 | 355 | ||
| 353 | static int pxa2xx_mfp_suspend(void) | 356 | static int pxa2xx_mfp_suspend(void) |
| @@ -366,14 +369,26 @@ static int pxa2xx_mfp_suspend(void) | |||
| 366 | } | 369 | } |
| 367 | 370 | ||
| 368 | for (i = 0; i <= gpio_to_bank(pxa_last_gpio); i++) { | 371 | for (i = 0; i <= gpio_to_bank(pxa_last_gpio); i++) { |
| 369 | |||
| 370 | saved_gafr[0][i] = GAFR_L(i); | 372 | saved_gafr[0][i] = GAFR_L(i); |
| 371 | saved_gafr[1][i] = GAFR_U(i); | 373 | saved_gafr[1][i] = GAFR_U(i); |
| 372 | saved_gpdr[i] = GPDR(i * 32); | 374 | saved_gpdr[i] = GPDR(i * 32); |
| 375 | saved_gplr[i] = GPLR(i * 32); | ||
| 373 | saved_pgsr[i] = PGSR(i); | 376 | saved_pgsr[i] = PGSR(i); |
| 374 | 377 | ||
| 375 | GPDR(i * 32) = gpdr_lpm[i]; | 378 | GPSR(i * 32) = PGSR(i); |
| 379 | GPCR(i * 32) = ~PGSR(i); | ||
| 380 | } | ||
| 381 | |||
| 382 | /* set GPDR bits taking into account MFP_LPM_KEEP_OUTPUT */ | ||
| 383 | for (i = 0; i < pxa_last_gpio; i++) { | ||
| 384 | if ((gpdr_lpm[gpio_to_bank(i)] & GPIO_bit(i)) || | ||
| 385 | ((gpio_desc[i].config & MFP_LPM_KEEP_OUTPUT) && | ||
| 386 | (saved_gpdr[gpio_to_bank(i)] & GPIO_bit(i)))) | ||
| 387 | GPDR(i) |= GPIO_bit(i); | ||
| 388 | else | ||
| 389 | GPDR(i) &= ~GPIO_bit(i); | ||
| 376 | } | 390 | } |
| 391 | |||
| 377 | return 0; | 392 | return 0; |
| 378 | } | 393 | } |
| 379 | 394 | ||
| @@ -384,6 +399,8 @@ static void pxa2xx_mfp_resume(void) | |||
| 384 | for (i = 0; i <= gpio_to_bank(pxa_last_gpio); i++) { | 399 | for (i = 0; i <= gpio_to_bank(pxa_last_gpio); i++) { |
| 385 | GAFR_L(i) = saved_gafr[0][i]; | 400 | GAFR_L(i) = saved_gafr[0][i]; |
| 386 | GAFR_U(i) = saved_gafr[1][i]; | 401 | GAFR_U(i) = saved_gafr[1][i]; |
| 402 | GPSR(i * 32) = saved_gplr[i]; | ||
| 403 | GPCR(i * 32) = ~saved_gplr[i]; | ||
| 387 | GPDR(i * 32) = saved_gpdr[i]; | 404 | GPDR(i * 32) = saved_gpdr[i]; |
| 388 | PGSR(i) = saved_pgsr[i]; | 405 | PGSR(i) = saved_pgsr[i]; |
| 389 | } | 406 | } |
diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c index 6bce78edce7a..4726c246dcdc 100644 --- a/arch/arm/mach-pxa/pxa27x.c +++ b/arch/arm/mach-pxa/pxa27x.c | |||
| @@ -421,8 +421,11 @@ void __init pxa27x_set_i2c_power_info(struct i2c_pxa_platform_data *info) | |||
| 421 | pxa_register_device(&pxa27x_device_i2c_power, info); | 421 | pxa_register_device(&pxa27x_device_i2c_power, info); |
| 422 | } | 422 | } |
| 423 | 423 | ||
| 424 | static struct pxa_gpio_platform_data pxa27x_gpio_info __initdata = { | ||
| 425 | .gpio_set_wake = gpio_set_wake, | ||
| 426 | }; | ||
| 427 | |||
| 424 | static struct platform_device *devices[] __initdata = { | 428 | static struct platform_device *devices[] __initdata = { |
| 425 | &pxa_device_gpio, | ||
| 426 | &pxa27x_device_udc, | 429 | &pxa27x_device_udc, |
| 427 | &pxa_device_pmu, | 430 | &pxa_device_pmu, |
| 428 | &pxa_device_i2s, | 431 | &pxa_device_i2s, |
| @@ -458,6 +461,7 @@ static int __init pxa27x_init(void) | |||
| 458 | register_syscore_ops(&pxa2xx_mfp_syscore_ops); | 461 | register_syscore_ops(&pxa2xx_mfp_syscore_ops); |
| 459 | register_syscore_ops(&pxa2xx_clock_syscore_ops); | 462 | register_syscore_ops(&pxa2xx_clock_syscore_ops); |
| 460 | 463 | ||
| 464 | pxa_register_device(&pxa_device_gpio, &pxa27x_gpio_info); | ||
| 461 | ret = platform_add_devices(devices, ARRAY_SIZE(devices)); | 465 | ret = platform_add_devices(devices, ARRAY_SIZE(devices)); |
| 462 | } | 466 | } |
| 463 | 467 | ||
diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig index 0f3a327ebcaa..b34287ab5afd 100644 --- a/arch/arm/mach-s3c24xx/Kconfig +++ b/arch/arm/mach-s3c24xx/Kconfig | |||
| @@ -111,10 +111,6 @@ config S3C24XX_SETUP_TS | |||
| 111 | help | 111 | help |
| 112 | Compile in platform device definition for Samsung TouchScreen. | 112 | Compile in platform device definition for Samsung TouchScreen. |
| 113 | 113 | ||
| 114 | # cpu-specific sections | ||
| 115 | |||
| 116 | if CPU_S3C2410 | ||
| 117 | |||
| 118 | config S3C2410_DMA | 114 | config S3C2410_DMA |
| 119 | bool | 115 | bool |
| 120 | depends on S3C24XX_DMA && (CPU_S3C2410 || CPU_S3C2442) | 116 | depends on S3C24XX_DMA && (CPU_S3C2410 || CPU_S3C2442) |
| @@ -127,6 +123,10 @@ config S3C2410_PM | |||
| 127 | help | 123 | help |
| 128 | Power Management code common to S3C2410 and better | 124 | Power Management code common to S3C2410 and better |
| 129 | 125 | ||
| 126 | # cpu-specific sections | ||
| 127 | |||
| 128 | if CPU_S3C2410 | ||
| 129 | |||
| 130 | config S3C24XX_SIMTEC_NOR | 130 | config S3C24XX_SIMTEC_NOR |
| 131 | bool | 131 | bool |
| 132 | help | 132 | help |
diff --git a/arch/arm/mach-s5pv210/mach-goni.c b/arch/arm/mach-s5pv210/mach-goni.c index a8933de3d627..32395664e879 100644 --- a/arch/arm/mach-s5pv210/mach-goni.c +++ b/arch/arm/mach-s5pv210/mach-goni.c | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | #include <linux/gpio_keys.h> | 25 | #include <linux/gpio_keys.h> |
| 26 | #include <linux/input.h> | 26 | #include <linux/input.h> |
| 27 | #include <linux/gpio.h> | 27 | #include <linux/gpio.h> |
| 28 | #include <linux/mmc/host.h> | ||
| 28 | #include <linux/interrupt.h> | 29 | #include <linux/interrupt.h> |
| 29 | 30 | ||
| 30 | #include <asm/hardware/vic.h> | 31 | #include <asm/hardware/vic.h> |
| @@ -765,6 +766,7 @@ static void __init goni_pmic_init(void) | |||
| 765 | /* MoviNAND */ | 766 | /* MoviNAND */ |
| 766 | static struct s3c_sdhci_platdata goni_hsmmc0_data __initdata = { | 767 | static struct s3c_sdhci_platdata goni_hsmmc0_data __initdata = { |
| 767 | .max_width = 4, | 768 | .max_width = 4, |
| 769 | .host_caps2 = MMC_CAP2_BROKEN_VOLTAGE, | ||
| 768 | .cd_type = S3C_SDHCI_CD_PERMANENT, | 770 | .cd_type = S3C_SDHCI_CD_PERMANENT, |
| 769 | }; | 771 | }; |
| 770 | 772 | ||
diff --git a/arch/arm/mach-sa1100/generic.c b/arch/arm/mach-sa1100/generic.c index 7c524b4e415d..16be4c56abe3 100644 --- a/arch/arm/mach-sa1100/generic.c +++ b/arch/arm/mach-sa1100/generic.c | |||
| @@ -306,7 +306,7 @@ void sa11x0_register_irda(struct irda_platform_data *irda) | |||
| 306 | } | 306 | } |
| 307 | 307 | ||
| 308 | static struct resource sa1100_rtc_resources[] = { | 308 | static struct resource sa1100_rtc_resources[] = { |
| 309 | DEFINE_RES_MEM(0x90010000, 0x9001003f), | 309 | DEFINE_RES_MEM(0x90010000, 0x40), |
| 310 | DEFINE_RES_IRQ_NAMED(IRQ_RTC1Hz, "rtc 1Hz"), | 310 | DEFINE_RES_IRQ_NAMED(IRQ_RTC1Hz, "rtc 1Hz"), |
| 311 | DEFINE_RES_IRQ_NAMED(IRQ_RTCAlrm, "rtc alarm"), | 311 | DEFINE_RES_IRQ_NAMED(IRQ_RTCAlrm, "rtc alarm"), |
| 312 | }; | 312 | }; |
diff --git a/arch/arm/mach-u300/core.c b/arch/arm/mach-u300/core.c index 1621ad07d284..33339745d432 100644 --- a/arch/arm/mach-u300/core.c +++ b/arch/arm/mach-u300/core.c | |||
| @@ -1667,8 +1667,10 @@ void __init u300_init_irq(void) | |||
| 1667 | 1667 | ||
| 1668 | for (i = 0; i < U300_VIC_IRQS_END; i++) | 1668 | for (i = 0; i < U300_VIC_IRQS_END; i++) |
| 1669 | set_bit(i, (unsigned long *) &mask[0]); | 1669 | set_bit(i, (unsigned long *) &mask[0]); |
| 1670 | vic_init((void __iomem *) U300_INTCON0_VBASE, 0, mask[0], mask[0]); | 1670 | vic_init((void __iomem *) U300_INTCON0_VBASE, IRQ_U300_INTCON0_START, |
| 1671 | vic_init((void __iomem *) U300_INTCON1_VBASE, 32, mask[1], mask[1]); | 1671 | mask[0], mask[0]); |
| 1672 | vic_init((void __iomem *) U300_INTCON1_VBASE, IRQ_U300_INTCON1_START, | ||
| 1673 | mask[1], mask[1]); | ||
| 1672 | } | 1674 | } |
| 1673 | 1675 | ||
| 1674 | 1676 | ||
diff --git a/arch/arm/mach-u300/i2c.c b/arch/arm/mach-u300/i2c.c index a38f80238ea9..cb04bd6ab3e7 100644 --- a/arch/arm/mach-u300/i2c.c +++ b/arch/arm/mach-u300/i2c.c | |||
| @@ -146,9 +146,6 @@ static struct ab3100_platform_data ab3100_plf_data = { | |||
| 146 | .min_uV = 1800000, | 146 | .min_uV = 1800000, |
| 147 | .max_uV = 1800000, | 147 | .max_uV = 1800000, |
| 148 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | 148 | .valid_modes_mask = REGULATOR_MODE_NORMAL, |
| 149 | .valid_ops_mask = | ||
| 150 | REGULATOR_CHANGE_VOLTAGE | | ||
| 151 | REGULATOR_CHANGE_STATUS, | ||
| 152 | .always_on = 1, | 149 | .always_on = 1, |
| 153 | .boot_on = 1, | 150 | .boot_on = 1, |
| 154 | }, | 151 | }, |
| @@ -160,9 +157,6 @@ static struct ab3100_platform_data ab3100_plf_data = { | |||
| 160 | .min_uV = 2500000, | 157 | .min_uV = 2500000, |
| 161 | .max_uV = 2500000, | 158 | .max_uV = 2500000, |
| 162 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | 159 | .valid_modes_mask = REGULATOR_MODE_NORMAL, |
| 163 | .valid_ops_mask = | ||
| 164 | REGULATOR_CHANGE_VOLTAGE | | ||
| 165 | REGULATOR_CHANGE_STATUS, | ||
| 166 | .always_on = 1, | 160 | .always_on = 1, |
| 167 | .boot_on = 1, | 161 | .boot_on = 1, |
| 168 | }, | 162 | }, |
| @@ -230,8 +224,7 @@ static struct ab3100_platform_data ab3100_plf_data = { | |||
| 230 | .max_uV = 1800000, | 224 | .max_uV = 1800000, |
| 231 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | 225 | .valid_modes_mask = REGULATOR_MODE_NORMAL, |
| 232 | .valid_ops_mask = | 226 | .valid_ops_mask = |
| 233 | REGULATOR_CHANGE_VOLTAGE | | 227 | REGULATOR_CHANGE_VOLTAGE, |
| 234 | REGULATOR_CHANGE_STATUS, | ||
| 235 | .always_on = 1, | 228 | .always_on = 1, |
| 236 | .boot_on = 1, | 229 | .boot_on = 1, |
| 237 | }, | 230 | }, |
diff --git a/arch/arm/mach-u300/include/mach/irqs.h b/arch/arm/mach-u300/include/mach/irqs.h index ee78a26707eb..ec09c1e07b1a 100644 --- a/arch/arm/mach-u300/include/mach/irqs.h +++ b/arch/arm/mach-u300/include/mach/irqs.h | |||
| @@ -12,101 +12,101 @@ | |||
| 12 | #ifndef __MACH_IRQS_H | 12 | #ifndef __MACH_IRQS_H |
| 13 | #define __MACH_IRQS_H | 13 | #define __MACH_IRQS_H |
| 14 | 14 | ||
| 15 | #define IRQ_U300_INTCON0_START 0 | 15 | #define IRQ_U300_INTCON0_START 1 |
| 16 | #define IRQ_U300_INTCON1_START 32 | 16 | #define IRQ_U300_INTCON1_START 33 |
| 17 | /* These are on INTCON0 - 30 lines */ | 17 | /* These are on INTCON0 - 30 lines */ |
| 18 | #define IRQ_U300_IRQ0_EXT 0 | 18 | #define IRQ_U300_IRQ0_EXT 1 |
| 19 | #define IRQ_U300_IRQ1_EXT 1 | 19 | #define IRQ_U300_IRQ1_EXT 2 |
| 20 | #define IRQ_U300_DMA 2 | 20 | #define IRQ_U300_DMA 3 |
| 21 | #define IRQ_U300_VIDEO_ENC_0 3 | 21 | #define IRQ_U300_VIDEO_ENC_0 4 |
| 22 | #define IRQ_U300_VIDEO_ENC_1 4 | 22 | #define IRQ_U300_VIDEO_ENC_1 5 |
| 23 | #define IRQ_U300_AAIF_RX 5 | 23 | #define IRQ_U300_AAIF_RX 6 |
| 24 | #define IRQ_U300_AAIF_TX 6 | 24 | #define IRQ_U300_AAIF_TX 7 |
| 25 | #define IRQ_U300_AAIF_VGPIO 7 | 25 | #define IRQ_U300_AAIF_VGPIO 8 |
| 26 | #define IRQ_U300_AAIF_WAKEUP 8 | 26 | #define IRQ_U300_AAIF_WAKEUP 9 |
| 27 | #define IRQ_U300_PCM_I2S0_FRAME 9 | 27 | #define IRQ_U300_PCM_I2S0_FRAME 10 |
| 28 | #define IRQ_U300_PCM_I2S0_FIFO 10 | 28 | #define IRQ_U300_PCM_I2S0_FIFO 11 |
| 29 | #define IRQ_U300_PCM_I2S1_FRAME 11 | 29 | #define IRQ_U300_PCM_I2S1_FRAME 12 |
| 30 | #define IRQ_U300_PCM_I2S1_FIFO 12 | 30 | #define IRQ_U300_PCM_I2S1_FIFO 13 |
| 31 | #define IRQ_U300_XGAM_GAMCON 13 | 31 | #define IRQ_U300_XGAM_GAMCON 14 |
| 32 | #define IRQ_U300_XGAM_CDI 14 | 32 | #define IRQ_U300_XGAM_CDI 15 |
| 33 | #define IRQ_U300_XGAM_CDICON 15 | 33 | #define IRQ_U300_XGAM_CDICON 16 |
| 34 | #if defined(CONFIG_MACH_U300_BS2X) || defined(CONFIG_MACH_U300_BS330) | 34 | #if defined(CONFIG_MACH_U300_BS2X) || defined(CONFIG_MACH_U300_BS330) |
| 35 | /* MMIACC not used on the DB3210 or DB3350 chips */ | 35 | /* MMIACC not used on the DB3210 or DB3350 chips */ |
| 36 | #define IRQ_U300_XGAM_MMIACC 16 | 36 | #define IRQ_U300_XGAM_MMIACC 17 |
| 37 | #endif | 37 | #endif |
| 38 | #define IRQ_U300_XGAM_PDI 17 | 38 | #define IRQ_U300_XGAM_PDI 18 |
| 39 | #define IRQ_U300_XGAM_PDICON 18 | 39 | #define IRQ_U300_XGAM_PDICON 19 |
| 40 | #define IRQ_U300_XGAM_GAMEACC 19 | 40 | #define IRQ_U300_XGAM_GAMEACC 20 |
| 41 | #define IRQ_U300_XGAM_MCIDCT 20 | 41 | #define IRQ_U300_XGAM_MCIDCT 21 |
| 42 | #define IRQ_U300_APEX 21 | 42 | #define IRQ_U300_APEX 22 |
| 43 | #define IRQ_U300_UART0 22 | 43 | #define IRQ_U300_UART0 23 |
| 44 | #define IRQ_U300_SPI 23 | 44 | #define IRQ_U300_SPI 24 |
| 45 | #define IRQ_U300_TIMER_APP_OS 24 | 45 | #define IRQ_U300_TIMER_APP_OS 25 |
| 46 | #define IRQ_U300_TIMER_APP_DD 25 | 46 | #define IRQ_U300_TIMER_APP_DD 26 |
| 47 | #define IRQ_U300_TIMER_APP_GP1 26 | 47 | #define IRQ_U300_TIMER_APP_GP1 27 |
| 48 | #define IRQ_U300_TIMER_APP_GP2 27 | 48 | #define IRQ_U300_TIMER_APP_GP2 28 |
| 49 | #define IRQ_U300_TIMER_OS 28 | 49 | #define IRQ_U300_TIMER_OS 29 |
| 50 | #define IRQ_U300_TIMER_MS 29 | 50 | #define IRQ_U300_TIMER_MS 30 |
| 51 | #define IRQ_U300_KEYPAD_KEYBF 30 | 51 | #define IRQ_U300_KEYPAD_KEYBF 31 |
| 52 | #define IRQ_U300_KEYPAD_KEYBR 31 | 52 | #define IRQ_U300_KEYPAD_KEYBR 32 |
| 53 | /* These are on INTCON1 - 32 lines */ | 53 | /* These are on INTCON1 - 32 lines */ |
| 54 | #define IRQ_U300_GPIO_PORT0 32 | 54 | #define IRQ_U300_GPIO_PORT0 33 |
| 55 | #define IRQ_U300_GPIO_PORT1 33 | 55 | #define IRQ_U300_GPIO_PORT1 34 |
| 56 | #define IRQ_U300_GPIO_PORT2 34 | 56 | #define IRQ_U300_GPIO_PORT2 35 |
| 57 | 57 | ||
| 58 | #if defined(CONFIG_MACH_U300_BS2X) || defined(CONFIG_MACH_U300_BS330) || \ | 58 | #if defined(CONFIG_MACH_U300_BS2X) || defined(CONFIG_MACH_U300_BS330) || \ |
| 59 | defined(CONFIG_MACH_U300_BS335) | 59 | defined(CONFIG_MACH_U300_BS335) |
| 60 | /* These are for DB3150, DB3200 and DB3350 */ | 60 | /* These are for DB3150, DB3200 and DB3350 */ |
| 61 | #define IRQ_U300_WDOG 35 | 61 | #define IRQ_U300_WDOG 36 |
| 62 | #define IRQ_U300_EVHIST 36 | 62 | #define IRQ_U300_EVHIST 37 |
| 63 | #define IRQ_U300_MSPRO 37 | 63 | #define IRQ_U300_MSPRO 38 |
| 64 | #define IRQ_U300_MMCSD_MCIINTR0 38 | 64 | #define IRQ_U300_MMCSD_MCIINTR0 39 |
| 65 | #define IRQ_U300_MMCSD_MCIINTR1 39 | 65 | #define IRQ_U300_MMCSD_MCIINTR1 40 |
| 66 | #define IRQ_U300_I2C0 40 | 66 | #define IRQ_U300_I2C0 41 |
| 67 | #define IRQ_U300_I2C1 41 | 67 | #define IRQ_U300_I2C1 42 |
| 68 | #define IRQ_U300_RTC 42 | 68 | #define IRQ_U300_RTC 43 |
| 69 | #define IRQ_U300_NFIF 43 | 69 | #define IRQ_U300_NFIF 44 |
| 70 | #define IRQ_U300_NFIF2 44 | 70 | #define IRQ_U300_NFIF2 45 |
| 71 | #endif | 71 | #endif |
| 72 | 72 | ||
| 73 | /* DB3150 and DB3200 have only 45 IRQs */ | 73 | /* DB3150 and DB3200 have only 45 IRQs */ |
| 74 | #if defined(CONFIG_MACH_U300_BS2X) || defined(CONFIG_MACH_U300_BS330) | 74 | #if defined(CONFIG_MACH_U300_BS2X) || defined(CONFIG_MACH_U300_BS330) |
| 75 | #define U300_VIC_IRQS_END 45 | 75 | #define U300_VIC_IRQS_END 46 |
| 76 | #endif | 76 | #endif |
| 77 | 77 | ||
| 78 | /* The DB3350-specific interrupt lines */ | 78 | /* The DB3350-specific interrupt lines */ |
| 79 | #ifdef CONFIG_MACH_U300_BS335 | 79 | #ifdef CONFIG_MACH_U300_BS335 |
| 80 | #define IRQ_U300_ISP_F0 45 | 80 | #define IRQ_U300_ISP_F0 46 |
| 81 | #define IRQ_U300_ISP_F1 46 | 81 | #define IRQ_U300_ISP_F1 47 |
| 82 | #define IRQ_U300_ISP_F2 47 | 82 | #define IRQ_U300_ISP_F2 48 |
| 83 | #define IRQ_U300_ISP_F3 48 | 83 | #define IRQ_U300_ISP_F3 49 |
| 84 | #define IRQ_U300_ISP_F4 49 | 84 | #define IRQ_U300_ISP_F4 50 |
| 85 | #define IRQ_U300_GPIO_PORT3 50 | 85 | #define IRQ_U300_GPIO_PORT3 51 |
| 86 | #define IRQ_U300_SYSCON_PLL_LOCK 51 | 86 | #define IRQ_U300_SYSCON_PLL_LOCK 52 |
| 87 | #define IRQ_U300_UART1 52 | 87 | #define IRQ_U300_UART1 53 |
| 88 | #define IRQ_U300_GPIO_PORT4 53 | 88 | #define IRQ_U300_GPIO_PORT4 54 |
| 89 | #define IRQ_U300_GPIO_PORT5 54 | 89 | #define IRQ_U300_GPIO_PORT5 55 |
| 90 | #define IRQ_U300_GPIO_PORT6 55 | 90 | #define IRQ_U300_GPIO_PORT6 56 |
| 91 | #define U300_VIC_IRQS_END 56 | 91 | #define U300_VIC_IRQS_END 57 |
| 92 | #endif | 92 | #endif |
| 93 | 93 | ||
| 94 | /* The DB3210-specific interrupt lines */ | 94 | /* The DB3210-specific interrupt lines */ |
| 95 | #ifdef CONFIG_MACH_U300_BS365 | 95 | #ifdef CONFIG_MACH_U300_BS365 |
| 96 | #define IRQ_U300_GPIO_PORT3 35 | 96 | #define IRQ_U300_GPIO_PORT3 36 |
| 97 | #define IRQ_U300_GPIO_PORT4 36 | 97 | #define IRQ_U300_GPIO_PORT4 37 |
| 98 | #define IRQ_U300_WDOG 37 | 98 | #define IRQ_U300_WDOG 38 |
| 99 | #define IRQ_U300_EVHIST 38 | 99 | #define IRQ_U300_EVHIST 39 |
| 100 | #define IRQ_U300_MSPRO 39 | 100 | #define IRQ_U300_MSPRO 40 |
| 101 | #define IRQ_U300_MMCSD_MCIINTR0 40 | 101 | #define IRQ_U300_MMCSD_MCIINTR0 41 |
| 102 | #define IRQ_U300_MMCSD_MCIINTR1 41 | 102 | #define IRQ_U300_MMCSD_MCIINTR1 42 |
| 103 | #define IRQ_U300_I2C0 42 | 103 | #define IRQ_U300_I2C0 43 |
| 104 | #define IRQ_U300_I2C1 43 | 104 | #define IRQ_U300_I2C1 44 |
| 105 | #define IRQ_U300_RTC 44 | 105 | #define IRQ_U300_RTC 45 |
| 106 | #define IRQ_U300_NFIF 45 | 106 | #define IRQ_U300_NFIF 46 |
| 107 | #define IRQ_U300_NFIF2 46 | 107 | #define IRQ_U300_NFIF2 47 |
| 108 | #define IRQ_U300_SYSCON_PLL_LOCK 47 | 108 | #define IRQ_U300_SYSCON_PLL_LOCK 48 |
| 109 | #define U300_VIC_IRQS_END 48 | 109 | #define U300_VIC_IRQS_END 49 |
| 110 | #endif | 110 | #endif |
| 111 | 111 | ||
| 112 | /* Maximum 8*7 GPIO lines */ | 112 | /* Maximum 8*7 GPIO lines */ |
| @@ -117,6 +117,6 @@ | |||
| 117 | #define IRQ_U300_GPIO_END (U300_VIC_IRQS_END) | 117 | #define IRQ_U300_GPIO_END (U300_VIC_IRQS_END) |
| 118 | #endif | 118 | #endif |
| 119 | 119 | ||
| 120 | #define NR_IRQS (IRQ_U300_GPIO_END) | 120 | #define NR_IRQS (IRQ_U300_GPIO_END - IRQ_U300_INTCON0_START) |
| 121 | 121 | ||
| 122 | #endif | 122 | #endif |
diff --git a/arch/arm/plat-samsung/include/plat/sdhci.h b/arch/arm/plat-samsung/include/plat/sdhci.h index 317e246ffc56..e834c5ef437c 100644 --- a/arch/arm/plat-samsung/include/plat/sdhci.h +++ b/arch/arm/plat-samsung/include/plat/sdhci.h | |||
| @@ -18,6 +18,8 @@ | |||
| 18 | #ifndef __PLAT_S3C_SDHCI_H | 18 | #ifndef __PLAT_S3C_SDHCI_H |
| 19 | #define __PLAT_S3C_SDHCI_H __FILE__ | 19 | #define __PLAT_S3C_SDHCI_H __FILE__ |
| 20 | 20 | ||
| 21 | #include <plat/devs.h> | ||
| 22 | |||
| 21 | struct platform_device; | 23 | struct platform_device; |
| 22 | struct mmc_host; | 24 | struct mmc_host; |
| 23 | struct mmc_card; | 25 | struct mmc_card; |
| @@ -356,4 +358,30 @@ static inline void exynos4_default_sdhci3(void) { } | |||
| 356 | 358 | ||
| 357 | #endif /* CONFIG_EXYNOS4_SETUP_SDHCI */ | 359 | #endif /* CONFIG_EXYNOS4_SETUP_SDHCI */ |
| 358 | 360 | ||
| 361 | static inline void s3c_sdhci_setname(int id, char *name) | ||
| 362 | { | ||
| 363 | switch (id) { | ||
| 364 | #ifdef CONFIG_S3C_DEV_HSMMC | ||
| 365 | case 0: | ||
| 366 | s3c_device_hsmmc0.name = name; | ||
| 367 | break; | ||
| 368 | #endif | ||
| 369 | #ifdef CONFIG_S3C_DEV_HSMMC1 | ||
| 370 | case 1: | ||
| 371 | s3c_device_hsmmc1.name = name; | ||
| 372 | break; | ||
| 373 | #endif | ||
| 374 | #ifdef CONFIG_S3C_DEV_HSMMC2 | ||
| 375 | case 2: | ||
| 376 | s3c_device_hsmmc2.name = name; | ||
| 377 | break; | ||
| 378 | #endif | ||
| 379 | #ifdef CONFIG_S3C_DEV_HSMMC3 | ||
| 380 | case 3: | ||
| 381 | s3c_device_hsmmc3.name = name; | ||
| 382 | break; | ||
| 383 | #endif | ||
| 384 | } | ||
| 385 | } | ||
| 386 | |||
| 359 | #endif /* __PLAT_S3C_SDHCI_H */ | 387 | #endif /* __PLAT_S3C_SDHCI_H */ |
diff --git a/drivers/gpio/gpio-pxa.c b/drivers/gpio/gpio-pxa.c index 5689ce62fd81..fc3ace3fd4cb 100644 --- a/drivers/gpio/gpio-pxa.c +++ b/drivers/gpio/gpio-pxa.c | |||
| @@ -64,6 +64,7 @@ struct pxa_gpio_chip { | |||
| 64 | unsigned long irq_mask; | 64 | unsigned long irq_mask; |
| 65 | unsigned long irq_edge_rise; | 65 | unsigned long irq_edge_rise; |
| 66 | unsigned long irq_edge_fall; | 66 | unsigned long irq_edge_fall; |
| 67 | int (*set_wake)(unsigned int gpio, unsigned int on); | ||
| 67 | 68 | ||
| 68 | #ifdef CONFIG_PM | 69 | #ifdef CONFIG_PM |
| 69 | unsigned long saved_gplr; | 70 | unsigned long saved_gplr; |
| @@ -269,7 +270,8 @@ static void pxa_gpio_set(struct gpio_chip *chip, unsigned offset, int value) | |||
| 269 | (value ? GPSR_OFFSET : GPCR_OFFSET)); | 270 | (value ? GPSR_OFFSET : GPCR_OFFSET)); |
| 270 | } | 271 | } |
| 271 | 272 | ||
| 272 | static int __devinit pxa_init_gpio_chip(int gpio_end) | 273 | static int __devinit pxa_init_gpio_chip(int gpio_end, |
| 274 | int (*set_wake)(unsigned int, unsigned int)) | ||
| 273 | { | 275 | { |
| 274 | int i, gpio, nbanks = gpio_to_bank(gpio_end) + 1; | 276 | int i, gpio, nbanks = gpio_to_bank(gpio_end) + 1; |
| 275 | struct pxa_gpio_chip *chips; | 277 | struct pxa_gpio_chip *chips; |
| @@ -285,6 +287,7 @@ static int __devinit pxa_init_gpio_chip(int gpio_end) | |||
| 285 | 287 | ||
| 286 | sprintf(chips[i].label, "gpio-%d", i); | 288 | sprintf(chips[i].label, "gpio-%d", i); |
| 287 | chips[i].regbase = gpio_reg_base + BANK_OFF(i); | 289 | chips[i].regbase = gpio_reg_base + BANK_OFF(i); |
| 290 | chips[i].set_wake = set_wake; | ||
| 288 | 291 | ||
| 289 | c->base = gpio; | 292 | c->base = gpio; |
| 290 | c->label = chips[i].label; | 293 | c->label = chips[i].label; |
| @@ -412,6 +415,17 @@ static void pxa_mask_muxed_gpio(struct irq_data *d) | |||
| 412 | writel_relaxed(gfer, c->regbase + GFER_OFFSET); | 415 | writel_relaxed(gfer, c->regbase + GFER_OFFSET); |
| 413 | } | 416 | } |
| 414 | 417 | ||
| 418 | static int pxa_gpio_set_wake(struct irq_data *d, unsigned int on) | ||
| 419 | { | ||
| 420 | int gpio = pxa_irq_to_gpio(d->irq); | ||
| 421 | struct pxa_gpio_chip *c = gpio_to_pxachip(gpio); | ||
| 422 | |||
| 423 | if (c->set_wake) | ||
| 424 | return c->set_wake(gpio, on); | ||
| 425 | else | ||
| 426 | return 0; | ||
| 427 | } | ||
| 428 | |||
| 415 | static void pxa_unmask_muxed_gpio(struct irq_data *d) | 429 | static void pxa_unmask_muxed_gpio(struct irq_data *d) |
| 416 | { | 430 | { |
| 417 | int gpio = pxa_irq_to_gpio(d->irq); | 431 | int gpio = pxa_irq_to_gpio(d->irq); |
| @@ -427,6 +441,7 @@ static struct irq_chip pxa_muxed_gpio_chip = { | |||
| 427 | .irq_mask = pxa_mask_muxed_gpio, | 441 | .irq_mask = pxa_mask_muxed_gpio, |
| 428 | .irq_unmask = pxa_unmask_muxed_gpio, | 442 | .irq_unmask = pxa_unmask_muxed_gpio, |
| 429 | .irq_set_type = pxa_gpio_irq_type, | 443 | .irq_set_type = pxa_gpio_irq_type, |
| 444 | .irq_set_wake = pxa_gpio_set_wake, | ||
| 430 | }; | 445 | }; |
| 431 | 446 | ||
| 432 | static int pxa_gpio_nums(void) | 447 | static int pxa_gpio_nums(void) |
| @@ -471,6 +486,7 @@ static int __devinit pxa_gpio_probe(struct platform_device *pdev) | |||
| 471 | struct pxa_gpio_chip *c; | 486 | struct pxa_gpio_chip *c; |
| 472 | struct resource *res; | 487 | struct resource *res; |
| 473 | struct clk *clk; | 488 | struct clk *clk; |
| 489 | struct pxa_gpio_platform_data *info; | ||
| 474 | int gpio, irq, ret; | 490 | int gpio, irq, ret; |
| 475 | int irq0 = 0, irq1 = 0, irq_mux, gpio_offset = 0; | 491 | int irq0 = 0, irq1 = 0, irq_mux, gpio_offset = 0; |
| 476 | 492 | ||
| @@ -516,7 +532,8 @@ static int __devinit pxa_gpio_probe(struct platform_device *pdev) | |||
| 516 | } | 532 | } |
| 517 | 533 | ||
| 518 | /* Initialize GPIO chips */ | 534 | /* Initialize GPIO chips */ |
| 519 | pxa_init_gpio_chip(pxa_last_gpio); | 535 | info = dev_get_platdata(&pdev->dev); |
| 536 | pxa_init_gpio_chip(pxa_last_gpio, info ? info->gpio_set_wake : NULL); | ||
| 520 | 537 | ||
| 521 | /* clear all GPIO edge detects */ | 538 | /* clear all GPIO edge detects */ |
| 522 | for_each_gpio_chip(gpio, c) { | 539 | for_each_gpio_chip(gpio, c) { |
diff --git a/include/linux/gpio-pxa.h b/include/linux/gpio-pxa.h index 05071ee34c3f..d755b28ba635 100644 --- a/include/linux/gpio-pxa.h +++ b/include/linux/gpio-pxa.h | |||
| @@ -13,4 +13,8 @@ extern int pxa_last_gpio; | |||
| 13 | 13 | ||
| 14 | extern int pxa_irq_to_gpio(int irq); | 14 | extern int pxa_irq_to_gpio(int irq); |
| 15 | 15 | ||
| 16 | struct pxa_gpio_platform_data { | ||
| 17 | int (*gpio_set_wake)(unsigned int gpio, unsigned int on); | ||
| 18 | }; | ||
| 19 | |||
| 16 | #endif /* __GPIO_PXA_H */ | 20 | #endif /* __GPIO_PXA_H */ |
