diff options
author | Arnd Bergmann <arnd@arndb.de> | 2011-11-23 15:47:41 -0500 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2011-11-23 15:47:41 -0500 |
commit | 58a273745fbb2fbd01d26e7a60f0acc8c1d99469 (patch) | |
tree | bc16200f3b6ea150b298422754e32959eaa339bc /arch/arm | |
parent | 951c486f62490e032da0ad17e93270b0cfb6687f (diff) | |
parent | 0116da4fcc1ae8a80d9002441e98768f2a6fa2fe (diff) |
Merge branches 'drivers/macb-gem' and 'drivers/pxa-gpio' into next/drivers
Diffstat (limited to 'arch/arm')
150 files changed, 1112 insertions, 1420 deletions
diff --git a/arch/arm/boot/dts/tegra-ventana.dts b/arch/arm/boot/dts/tegra-ventana.dts index 9b29a623aaf1..3f9abd6b6964 100644 --- a/arch/arm/boot/dts/tegra-ventana.dts +++ b/arch/arm/boot/dts/tegra-ventana.dts | |||
@@ -22,11 +22,10 @@ | |||
22 | sdhci@c8000400 { | 22 | sdhci@c8000400 { |
23 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ | 23 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ |
24 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ | 24 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ |
25 | power-gpios = <&gpio 155 0>; /* gpio PT3 */ | 25 | power-gpios = <&gpio 70 0>; /* gpio PI6 */ |
26 | }; | 26 | }; |
27 | 27 | ||
28 | sdhci@c8000600 { | 28 | sdhci@c8000600 { |
29 | power-gpios = <&gpio 70 0>; /* gpio PI6 */ | ||
30 | support-8bit; | 29 | support-8bit; |
31 | }; | 30 | }; |
32 | }; | 31 | }; |
diff --git a/arch/arm/mach-at91/at91cap9.c b/arch/arm/mach-at91/at91cap9.c index ecdd54dd68c6..17632b82dd76 100644 --- a/arch/arm/mach-at91/at91cap9.c +++ b/arch/arm/mach-at91/at91cap9.c | |||
@@ -137,7 +137,7 @@ static struct clk pwm_clk = { | |||
137 | .type = CLK_TYPE_PERIPHERAL, | 137 | .type = CLK_TYPE_PERIPHERAL, |
138 | }; | 138 | }; |
139 | static struct clk macb_clk = { | 139 | static struct clk macb_clk = { |
140 | .name = "macb_clk", | 140 | .name = "pclk", |
141 | .pmc_mask = 1 << AT91CAP9_ID_EMAC, | 141 | .pmc_mask = 1 << AT91CAP9_ID_EMAC, |
142 | .type = CLK_TYPE_PERIPHERAL, | 142 | .type = CLK_TYPE_PERIPHERAL, |
143 | }; | 143 | }; |
@@ -210,6 +210,8 @@ static struct clk *periph_clocks[] __initdata = { | |||
210 | }; | 210 | }; |
211 | 211 | ||
212 | static struct clk_lookup periph_clocks_lookups[] = { | 212 | static struct clk_lookup periph_clocks_lookups[] = { |
213 | /* One additional fake clock for macb_hclk */ | ||
214 | CLKDEV_CON_ID("hclk", &macb_clk), | ||
213 | CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc", &utmi_clk), | 215 | CLKDEV_CON_DEV_ID("hclk", "atmel_usba_udc", &utmi_clk), |
214 | CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc", &udphs_clk), | 216 | CLKDEV_CON_DEV_ID("pclk", "atmel_usba_udc", &udphs_clk), |
215 | CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.0", &mmc0_clk), | 217 | CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.0", &mmc0_clk), |
diff --git a/arch/arm/mach-at91/at91cap9_devices.c b/arch/arm/mach-at91/at91cap9_devices.c index a4401d6b5b07..695aecab0a67 100644 --- a/arch/arm/mach-at91/at91cap9_devices.c +++ b/arch/arm/mach-at91/at91cap9_devices.c | |||
@@ -98,7 +98,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) {} | |||
98 | * USB HS Device (Gadget) | 98 | * USB HS Device (Gadget) |
99 | * -------------------------------------------------------------------- */ | 99 | * -------------------------------------------------------------------- */ |
100 | 100 | ||
101 | #if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE) | 101 | #if defined(CONFIG_USB_ATMEL_USBA) || defined(CONFIG_USB_ATMEL_USBA_MODULE) |
102 | 102 | ||
103 | static struct resource usba_udc_resources[] = { | 103 | static struct resource usba_udc_resources[] = { |
104 | [0] = { | 104 | [0] = { |
@@ -200,7 +200,7 @@ void __init at91_add_device_usba(struct usba_platform_data *data) {} | |||
200 | 200 | ||
201 | #if defined(CONFIG_MACB) || defined(CONFIG_MACB_MODULE) | 201 | #if defined(CONFIG_MACB) || defined(CONFIG_MACB_MODULE) |
202 | static u64 eth_dmamask = DMA_BIT_MASK(32); | 202 | static u64 eth_dmamask = DMA_BIT_MASK(32); |
203 | static struct at91_eth_data eth_data; | 203 | static struct macb_platform_data eth_data; |
204 | 204 | ||
205 | static struct resource eth_resources[] = { | 205 | static struct resource eth_resources[] = { |
206 | [0] = { | 206 | [0] = { |
@@ -227,7 +227,7 @@ static struct platform_device at91cap9_eth_device = { | |||
227 | .num_resources = ARRAY_SIZE(eth_resources), | 227 | .num_resources = ARRAY_SIZE(eth_resources), |
228 | }; | 228 | }; |
229 | 229 | ||
230 | void __init at91_add_device_eth(struct at91_eth_data *data) | 230 | void __init at91_add_device_eth(struct macb_platform_data *data) |
231 | { | 231 | { |
232 | if (!data) | 232 | if (!data) |
233 | return; | 233 | return; |
@@ -264,7 +264,7 @@ void __init at91_add_device_eth(struct at91_eth_data *data) | |||
264 | platform_device_register(&at91cap9_eth_device); | 264 | platform_device_register(&at91cap9_eth_device); |
265 | } | 265 | } |
266 | #else | 266 | #else |
267 | void __init at91_add_device_eth(struct at91_eth_data *data) {} | 267 | void __init at91_add_device_eth(struct macb_platform_data *data) {} |
268 | #endif | 268 | #endif |
269 | 269 | ||
270 | 270 | ||
@@ -1021,8 +1021,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {} | |||
1021 | #if defined(CONFIG_SERIAL_ATMEL) | 1021 | #if defined(CONFIG_SERIAL_ATMEL) |
1022 | static struct resource dbgu_resources[] = { | 1022 | static struct resource dbgu_resources[] = { |
1023 | [0] = { | 1023 | [0] = { |
1024 | .start = AT91_VA_BASE_SYS + AT91_DBGU, | 1024 | .start = AT91_BASE_SYS + AT91_DBGU, |
1025 | .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1, | 1025 | .end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1, |
1026 | .flags = IORESOURCE_MEM, | 1026 | .flags = IORESOURCE_MEM, |
1027 | }, | 1027 | }, |
1028 | [1] = { | 1028 | [1] = { |
@@ -1035,7 +1035,6 @@ static struct resource dbgu_resources[] = { | |||
1035 | static struct atmel_uart_data dbgu_data = { | 1035 | static struct atmel_uart_data dbgu_data = { |
1036 | .use_dma_tx = 0, | 1036 | .use_dma_tx = 0, |
1037 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ | 1037 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ |
1038 | .regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU), | ||
1039 | }; | 1038 | }; |
1040 | 1039 | ||
1041 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); | 1040 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); |
diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91/at91rm9200_devices.c index 01d8bbd1468b..5610f14e342e 100644 --- a/arch/arm/mach-at91/at91rm9200_devices.c +++ b/arch/arm/mach-at91/at91rm9200_devices.c | |||
@@ -135,7 +135,7 @@ void __init at91_add_device_udc(struct at91_udc_data *data) {} | |||
135 | 135 | ||
136 | #if defined(CONFIG_ARM_AT91_ETHER) || defined(CONFIG_ARM_AT91_ETHER_MODULE) | 136 | #if defined(CONFIG_ARM_AT91_ETHER) || defined(CONFIG_ARM_AT91_ETHER_MODULE) |
137 | static u64 eth_dmamask = DMA_BIT_MASK(32); | 137 | static u64 eth_dmamask = DMA_BIT_MASK(32); |
138 | static struct at91_eth_data eth_data; | 138 | static struct macb_platform_data eth_data; |
139 | 139 | ||
140 | static struct resource eth_resources[] = { | 140 | static struct resource eth_resources[] = { |
141 | [0] = { | 141 | [0] = { |
@@ -162,7 +162,7 @@ static struct platform_device at91rm9200_eth_device = { | |||
162 | .num_resources = ARRAY_SIZE(eth_resources), | 162 | .num_resources = ARRAY_SIZE(eth_resources), |
163 | }; | 163 | }; |
164 | 164 | ||
165 | void __init at91_add_device_eth(struct at91_eth_data *data) | 165 | void __init at91_add_device_eth(struct macb_platform_data *data) |
166 | { | 166 | { |
167 | if (!data) | 167 | if (!data) |
168 | return; | 168 | return; |
@@ -199,7 +199,7 @@ void __init at91_add_device_eth(struct at91_eth_data *data) | |||
199 | platform_device_register(&at91rm9200_eth_device); | 199 | platform_device_register(&at91rm9200_eth_device); |
200 | } | 200 | } |
201 | #else | 201 | #else |
202 | void __init at91_add_device_eth(struct at91_eth_data *data) {} | 202 | void __init at91_add_device_eth(struct macb_platform_data *data) {} |
203 | #endif | 203 | #endif |
204 | 204 | ||
205 | 205 | ||
@@ -877,8 +877,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {} | |||
877 | #if defined(CONFIG_SERIAL_ATMEL) | 877 | #if defined(CONFIG_SERIAL_ATMEL) |
878 | static struct resource dbgu_resources[] = { | 878 | static struct resource dbgu_resources[] = { |
879 | [0] = { | 879 | [0] = { |
880 | .start = AT91_VA_BASE_SYS + AT91_DBGU, | 880 | .start = AT91_BASE_SYS + AT91_DBGU, |
881 | .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1, | 881 | .end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1, |
882 | .flags = IORESOURCE_MEM, | 882 | .flags = IORESOURCE_MEM, |
883 | }, | 883 | }, |
884 | [1] = { | 884 | [1] = { |
@@ -891,7 +891,6 @@ static struct resource dbgu_resources[] = { | |||
891 | static struct atmel_uart_data dbgu_data = { | 891 | static struct atmel_uart_data dbgu_data = { |
892 | .use_dma_tx = 0, | 892 | .use_dma_tx = 0, |
893 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ | 893 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ |
894 | .regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU), | ||
895 | }; | 894 | }; |
896 | 895 | ||
897 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); | 896 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); |
diff --git a/arch/arm/mach-at91/at91sam9260.c b/arch/arm/mach-at91/at91sam9260.c index b84a9f642f59..249ed1f5912d 100644 --- a/arch/arm/mach-at91/at91sam9260.c +++ b/arch/arm/mach-at91/at91sam9260.c | |||
@@ -120,7 +120,7 @@ static struct clk ohci_clk = { | |||
120 | .type = CLK_TYPE_PERIPHERAL, | 120 | .type = CLK_TYPE_PERIPHERAL, |
121 | }; | 121 | }; |
122 | static struct clk macb_clk = { | 122 | static struct clk macb_clk = { |
123 | .name = "macb_clk", | 123 | .name = "pclk", |
124 | .pmc_mask = 1 << AT91SAM9260_ID_EMAC, | 124 | .pmc_mask = 1 << AT91SAM9260_ID_EMAC, |
125 | .type = CLK_TYPE_PERIPHERAL, | 125 | .type = CLK_TYPE_PERIPHERAL, |
126 | }; | 126 | }; |
@@ -190,6 +190,8 @@ static struct clk *periph_clocks[] __initdata = { | |||
190 | }; | 190 | }; |
191 | 191 | ||
192 | static struct clk_lookup periph_clocks_lookups[] = { | 192 | static struct clk_lookup periph_clocks_lookups[] = { |
193 | /* One additional fake clock for macb_hclk */ | ||
194 | CLKDEV_CON_ID("hclk", &macb_clk), | ||
193 | CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk), | 195 | CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.0", &spi0_clk), |
194 | CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk), | 196 | CLKDEV_CON_DEV_ID("spi_clk", "atmel_spi.1", &spi1_clk), |
195 | CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tc0_clk), | 197 | CLKDEV_CON_DEV_ID("t0_clk", "atmel_tcb.0", &tc0_clk), |
diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c index 24b6f8c0440d..ff75f7d4091b 100644 --- a/arch/arm/mach-at91/at91sam9260_devices.c +++ b/arch/arm/mach-at91/at91sam9260_devices.c | |||
@@ -136,7 +136,7 @@ void __init at91_add_device_udc(struct at91_udc_data *data) {} | |||
136 | 136 | ||
137 | #if defined(CONFIG_MACB) || defined(CONFIG_MACB_MODULE) | 137 | #if defined(CONFIG_MACB) || defined(CONFIG_MACB_MODULE) |
138 | static u64 eth_dmamask = DMA_BIT_MASK(32); | 138 | static u64 eth_dmamask = DMA_BIT_MASK(32); |
139 | static struct at91_eth_data eth_data; | 139 | static struct macb_platform_data eth_data; |
140 | 140 | ||
141 | static struct resource eth_resources[] = { | 141 | static struct resource eth_resources[] = { |
142 | [0] = { | 142 | [0] = { |
@@ -163,7 +163,7 @@ static struct platform_device at91sam9260_eth_device = { | |||
163 | .num_resources = ARRAY_SIZE(eth_resources), | 163 | .num_resources = ARRAY_SIZE(eth_resources), |
164 | }; | 164 | }; |
165 | 165 | ||
166 | void __init at91_add_device_eth(struct at91_eth_data *data) | 166 | void __init at91_add_device_eth(struct macb_platform_data *data) |
167 | { | 167 | { |
168 | if (!data) | 168 | if (!data) |
169 | return; | 169 | return; |
@@ -200,7 +200,7 @@ void __init at91_add_device_eth(struct at91_eth_data *data) | |||
200 | platform_device_register(&at91sam9260_eth_device); | 200 | platform_device_register(&at91sam9260_eth_device); |
201 | } | 201 | } |
202 | #else | 202 | #else |
203 | void __init at91_add_device_eth(struct at91_eth_data *data) {} | 203 | void __init at91_add_device_eth(struct macb_platform_data *data) {} |
204 | #endif | 204 | #endif |
205 | 205 | ||
206 | 206 | ||
@@ -837,8 +837,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {} | |||
837 | #if defined(CONFIG_SERIAL_ATMEL) | 837 | #if defined(CONFIG_SERIAL_ATMEL) |
838 | static struct resource dbgu_resources[] = { | 838 | static struct resource dbgu_resources[] = { |
839 | [0] = { | 839 | [0] = { |
840 | .start = AT91_VA_BASE_SYS + AT91_DBGU, | 840 | .start = AT91_BASE_SYS + AT91_DBGU, |
841 | .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1, | 841 | .end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1, |
842 | .flags = IORESOURCE_MEM, | 842 | .flags = IORESOURCE_MEM, |
843 | }, | 843 | }, |
844 | [1] = { | 844 | [1] = { |
@@ -851,7 +851,6 @@ static struct resource dbgu_resources[] = { | |||
851 | static struct atmel_uart_data dbgu_data = { | 851 | static struct atmel_uart_data dbgu_data = { |
852 | .use_dma_tx = 0, | 852 | .use_dma_tx = 0, |
853 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ | 853 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ |
854 | .regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU), | ||
855 | }; | 854 | }; |
856 | 855 | ||
857 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); | 856 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); |
diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c index 3b70b3897d95..ae78f4d03b73 100644 --- a/arch/arm/mach-at91/at91sam9261_devices.c +++ b/arch/arm/mach-at91/at91sam9261_devices.c | |||
@@ -816,8 +816,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {} | |||
816 | #if defined(CONFIG_SERIAL_ATMEL) | 816 | #if defined(CONFIG_SERIAL_ATMEL) |
817 | static struct resource dbgu_resources[] = { | 817 | static struct resource dbgu_resources[] = { |
818 | [0] = { | 818 | [0] = { |
819 | .start = AT91_VA_BASE_SYS + AT91_DBGU, | 819 | .start = AT91_BASE_SYS + AT91_DBGU, |
820 | .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1, | 820 | .end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1, |
821 | .flags = IORESOURCE_MEM, | 821 | .flags = IORESOURCE_MEM, |
822 | }, | 822 | }, |
823 | [1] = { | 823 | [1] = { |
@@ -830,7 +830,6 @@ static struct resource dbgu_resources[] = { | |||
830 | static struct atmel_uart_data dbgu_data = { | 830 | static struct atmel_uart_data dbgu_data = { |
831 | .use_dma_tx = 0, | 831 | .use_dma_tx = 0, |
832 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ | 832 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ |
833 | .regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU), | ||
834 | }; | 833 | }; |
835 | 834 | ||
836 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); | 835 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); |
diff --git a/arch/arm/mach-at91/at91sam9263.c b/arch/arm/mach-at91/at91sam9263.c index f83fbb0ee0c5..182d112dc59d 100644 --- a/arch/arm/mach-at91/at91sam9263.c +++ b/arch/arm/mach-at91/at91sam9263.c | |||
@@ -118,7 +118,7 @@ static struct clk pwm_clk = { | |||
118 | .type = CLK_TYPE_PERIPHERAL, | 118 | .type = CLK_TYPE_PERIPHERAL, |
119 | }; | 119 | }; |
120 | static struct clk macb_clk = { | 120 | static struct clk macb_clk = { |
121 | .name = "macb_clk", | 121 | .name = "pclk", |
122 | .pmc_mask = 1 << AT91SAM9263_ID_EMAC, | 122 | .pmc_mask = 1 << AT91SAM9263_ID_EMAC, |
123 | .type = CLK_TYPE_PERIPHERAL, | 123 | .type = CLK_TYPE_PERIPHERAL, |
124 | }; | 124 | }; |
@@ -182,6 +182,8 @@ static struct clk *periph_clocks[] __initdata = { | |||
182 | }; | 182 | }; |
183 | 183 | ||
184 | static struct clk_lookup periph_clocks_lookups[] = { | 184 | static struct clk_lookup periph_clocks_lookups[] = { |
185 | /* One additional fake clock for macb_hclk */ | ||
186 | CLKDEV_CON_ID("hclk", &macb_clk), | ||
185 | CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk), | 187 | CLKDEV_CON_DEV_ID("pclk", "ssc.0", &ssc0_clk), |
186 | CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk), | 188 | CLKDEV_CON_DEV_ID("pclk", "ssc.1", &ssc1_clk), |
187 | CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.0", &mmc0_clk), | 189 | CLKDEV_CON_DEV_ID("mci_clk", "at91_mci.0", &mmc0_clk), |
diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c index 3faa1fde9ad9..68562ce2af94 100644 --- a/arch/arm/mach-at91/at91sam9263_devices.c +++ b/arch/arm/mach-at91/at91sam9263_devices.c | |||
@@ -144,7 +144,7 @@ void __init at91_add_device_udc(struct at91_udc_data *data) {} | |||
144 | 144 | ||
145 | #if defined(CONFIG_MACB) || defined(CONFIG_MACB_MODULE) | 145 | #if defined(CONFIG_MACB) || defined(CONFIG_MACB_MODULE) |
146 | static u64 eth_dmamask = DMA_BIT_MASK(32); | 146 | static u64 eth_dmamask = DMA_BIT_MASK(32); |
147 | static struct at91_eth_data eth_data; | 147 | static struct macb_platform_data eth_data; |
148 | 148 | ||
149 | static struct resource eth_resources[] = { | 149 | static struct resource eth_resources[] = { |
150 | [0] = { | 150 | [0] = { |
@@ -171,7 +171,7 @@ static struct platform_device at91sam9263_eth_device = { | |||
171 | .num_resources = ARRAY_SIZE(eth_resources), | 171 | .num_resources = ARRAY_SIZE(eth_resources), |
172 | }; | 172 | }; |
173 | 173 | ||
174 | void __init at91_add_device_eth(struct at91_eth_data *data) | 174 | void __init at91_add_device_eth(struct macb_platform_data *data) |
175 | { | 175 | { |
176 | if (!data) | 176 | if (!data) |
177 | return; | 177 | return; |
@@ -208,7 +208,7 @@ void __init at91_add_device_eth(struct at91_eth_data *data) | |||
208 | platform_device_register(&at91sam9263_eth_device); | 208 | platform_device_register(&at91sam9263_eth_device); |
209 | } | 209 | } |
210 | #else | 210 | #else |
211 | void __init at91_add_device_eth(struct at91_eth_data *data) {} | 211 | void __init at91_add_device_eth(struct macb_platform_data *data) {} |
212 | #endif | 212 | #endif |
213 | 213 | ||
214 | 214 | ||
@@ -1196,8 +1196,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {} | |||
1196 | 1196 | ||
1197 | static struct resource dbgu_resources[] = { | 1197 | static struct resource dbgu_resources[] = { |
1198 | [0] = { | 1198 | [0] = { |
1199 | .start = AT91_VA_BASE_SYS + AT91_DBGU, | 1199 | .start = AT91_BASE_SYS + AT91_DBGU, |
1200 | .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1, | 1200 | .end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1, |
1201 | .flags = IORESOURCE_MEM, | 1201 | .flags = IORESOURCE_MEM, |
1202 | }, | 1202 | }, |
1203 | [1] = { | 1203 | [1] = { |
@@ -1210,7 +1210,6 @@ static struct resource dbgu_resources[] = { | |||
1210 | static struct atmel_uart_data dbgu_data = { | 1210 | static struct atmel_uart_data dbgu_data = { |
1211 | .use_dma_tx = 0, | 1211 | .use_dma_tx = 0, |
1212 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ | 1212 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ |
1213 | .regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU), | ||
1214 | }; | 1213 | }; |
1215 | 1214 | ||
1216 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); | 1215 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); |
diff --git a/arch/arm/mach-at91/at91sam9g45.c b/arch/arm/mach-at91/at91sam9g45.c index 318b0407ea04..5a0e522ffa94 100644 --- a/arch/arm/mach-at91/at91sam9g45.c +++ b/arch/arm/mach-at91/at91sam9g45.c | |||
@@ -150,7 +150,7 @@ static struct clk ac97_clk = { | |||
150 | .type = CLK_TYPE_PERIPHERAL, | 150 | .type = CLK_TYPE_PERIPHERAL, |
151 | }; | 151 | }; |
152 | static struct clk macb_clk = { | 152 | static struct clk macb_clk = { |
153 | .name = "macb_clk", | 153 | .name = "pclk", |
154 | .pmc_mask = 1 << AT91SAM9G45_ID_EMAC, | 154 | .pmc_mask = 1 << AT91SAM9G45_ID_EMAC, |
155 | .type = CLK_TYPE_PERIPHERAL, | 155 | .type = CLK_TYPE_PERIPHERAL, |
156 | }; | 156 | }; |
@@ -209,6 +209,8 @@ static struct clk *periph_clocks[] __initdata = { | |||
209 | }; | 209 | }; |
210 | 210 | ||
211 | static struct clk_lookup periph_clocks_lookups[] = { | 211 | static struct clk_lookup periph_clocks_lookups[] = { |
212 | /* One additional fake clock for macb_hclk */ | ||
213 | CLKDEV_CON_ID("hclk", &macb_clk), | ||
212 | /* One additional fake clock for ohci */ | 214 | /* One additional fake clock for ohci */ |
213 | CLKDEV_CON_ID("ohci_clk", &uhphs_clk), | 215 | CLKDEV_CON_ID("ohci_clk", &uhphs_clk), |
214 | CLKDEV_CON_DEV_ID("ehci_clk", "atmel-ehci", &uhphs_clk), | 216 | CLKDEV_CON_DEV_ID("ehci_clk", "atmel-ehci", &uhphs_clk), |
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index 000b5e1da965..e2cb835c4d7c 100644 --- a/arch/arm/mach-at91/at91sam9g45_devices.c +++ b/arch/arm/mach-at91/at91sam9g45_devices.c | |||
@@ -197,7 +197,7 @@ void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) {} | |||
197 | * USB HS Device (Gadget) | 197 | * USB HS Device (Gadget) |
198 | * -------------------------------------------------------------------- */ | 198 | * -------------------------------------------------------------------- */ |
199 | 199 | ||
200 | #if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE) | 200 | #if defined(CONFIG_USB_ATMEL_USBA) || defined(CONFIG_USB_ATMEL_USBA_MODULE) |
201 | static struct resource usba_udc_resources[] = { | 201 | static struct resource usba_udc_resources[] = { |
202 | [0] = { | 202 | [0] = { |
203 | .start = AT91SAM9G45_UDPHS_FIFO, | 203 | .start = AT91SAM9G45_UDPHS_FIFO, |
@@ -284,7 +284,7 @@ void __init at91_add_device_usba(struct usba_platform_data *data) {} | |||
284 | 284 | ||
285 | #if defined(CONFIG_MACB) || defined(CONFIG_MACB_MODULE) | 285 | #if defined(CONFIG_MACB) || defined(CONFIG_MACB_MODULE) |
286 | static u64 eth_dmamask = DMA_BIT_MASK(32); | 286 | static u64 eth_dmamask = DMA_BIT_MASK(32); |
287 | static struct at91_eth_data eth_data; | 287 | static struct macb_platform_data eth_data; |
288 | 288 | ||
289 | static struct resource eth_resources[] = { | 289 | static struct resource eth_resources[] = { |
290 | [0] = { | 290 | [0] = { |
@@ -311,7 +311,7 @@ static struct platform_device at91sam9g45_eth_device = { | |||
311 | .num_resources = ARRAY_SIZE(eth_resources), | 311 | .num_resources = ARRAY_SIZE(eth_resources), |
312 | }; | 312 | }; |
313 | 313 | ||
314 | void __init at91_add_device_eth(struct at91_eth_data *data) | 314 | void __init at91_add_device_eth(struct macb_platform_data *data) |
315 | { | 315 | { |
316 | if (!data) | 316 | if (!data) |
317 | return; | 317 | return; |
@@ -348,7 +348,7 @@ void __init at91_add_device_eth(struct at91_eth_data *data) | |||
348 | platform_device_register(&at91sam9g45_eth_device); | 348 | platform_device_register(&at91sam9g45_eth_device); |
349 | } | 349 | } |
350 | #else | 350 | #else |
351 | void __init at91_add_device_eth(struct at91_eth_data *data) {} | 351 | void __init at91_add_device_eth(struct macb_platform_data *data) {} |
352 | #endif | 352 | #endif |
353 | 353 | ||
354 | 354 | ||
@@ -1332,8 +1332,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {} | |||
1332 | #if defined(CONFIG_SERIAL_ATMEL) | 1332 | #if defined(CONFIG_SERIAL_ATMEL) |
1333 | static struct resource dbgu_resources[] = { | 1333 | static struct resource dbgu_resources[] = { |
1334 | [0] = { | 1334 | [0] = { |
1335 | .start = AT91_VA_BASE_SYS + AT91_DBGU, | 1335 | .start = AT91_BASE_SYS + AT91_DBGU, |
1336 | .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1, | 1336 | .end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1, |
1337 | .flags = IORESOURCE_MEM, | 1337 | .flags = IORESOURCE_MEM, |
1338 | }, | 1338 | }, |
1339 | [1] = { | 1339 | [1] = { |
@@ -1346,7 +1346,6 @@ static struct resource dbgu_resources[] = { | |||
1346 | static struct atmel_uart_data dbgu_data = { | 1346 | static struct atmel_uart_data dbgu_data = { |
1347 | .use_dma_tx = 0, | 1347 | .use_dma_tx = 0, |
1348 | .use_dma_rx = 0, | 1348 | .use_dma_rx = 0, |
1349 | .regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU), | ||
1350 | }; | 1349 | }; |
1351 | 1350 | ||
1352 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); | 1351 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); |
diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c index 305a851b5bff..628eb566d60c 100644 --- a/arch/arm/mach-at91/at91sam9rl_devices.c +++ b/arch/arm/mach-at91/at91sam9rl_devices.c | |||
@@ -75,7 +75,7 @@ void __init at91_add_device_hdmac(void) {} | |||
75 | * USB HS Device (Gadget) | 75 | * USB HS Device (Gadget) |
76 | * -------------------------------------------------------------------- */ | 76 | * -------------------------------------------------------------------- */ |
77 | 77 | ||
78 | #if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE) | 78 | #if defined(CONFIG_USB_ATMEL_USBA) || defined(CONFIG_USB_ATMEL_USBA_MODULE) |
79 | 79 | ||
80 | static struct resource usba_udc_resources[] = { | 80 | static struct resource usba_udc_resources[] = { |
81 | [0] = { | 81 | [0] = { |
@@ -908,8 +908,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {} | |||
908 | #if defined(CONFIG_SERIAL_ATMEL) | 908 | #if defined(CONFIG_SERIAL_ATMEL) |
909 | static struct resource dbgu_resources[] = { | 909 | static struct resource dbgu_resources[] = { |
910 | [0] = { | 910 | [0] = { |
911 | .start = AT91_VA_BASE_SYS + AT91_DBGU, | 911 | .start = AT91_BASE_SYS + AT91_DBGU, |
912 | .end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1, | 912 | .end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1, |
913 | .flags = IORESOURCE_MEM, | 913 | .flags = IORESOURCE_MEM, |
914 | }, | 914 | }, |
915 | [1] = { | 915 | [1] = { |
@@ -922,7 +922,6 @@ static struct resource dbgu_resources[] = { | |||
922 | static struct atmel_uart_data dbgu_data = { | 922 | static struct atmel_uart_data dbgu_data = { |
923 | .use_dma_tx = 0, | 923 | .use_dma_tx = 0, |
924 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ | 924 | .use_dma_rx = 0, /* DBGU not capable of receive DMA */ |
925 | .regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU), | ||
926 | }; | 925 | }; |
927 | 926 | ||
928 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); | 927 | static u64 dbgu_dmamask = DMA_BIT_MASK(32); |
diff --git a/arch/arm/mach-at91/board-1arm.c b/arch/arm/mach-at91/board-1arm.c index 367d5cd5e362..a60d98d7c3e2 100644 --- a/arch/arm/mach-at91/board-1arm.c +++ b/arch/arm/mach-at91/board-1arm.c | |||
@@ -63,7 +63,7 @@ static void __init onearm_init_early(void) | |||
63 | at91_set_serial_console(0); | 63 | at91_set_serial_console(0); |
64 | } | 64 | } |
65 | 65 | ||
66 | static struct at91_eth_data __initdata onearm_eth_data = { | 66 | static struct macb_platform_data __initdata onearm_eth_data = { |
67 | .phy_irq_pin = AT91_PIN_PC4, | 67 | .phy_irq_pin = AT91_PIN_PC4, |
68 | .is_rmii = 1, | 68 | .is_rmii = 1, |
69 | }; | 69 | }; |
diff --git a/arch/arm/mach-at91/board-afeb-9260v1.c b/arch/arm/mach-at91/board-afeb-9260v1.c index 0487ea10c2d6..17fc77925707 100644 --- a/arch/arm/mach-at91/board-afeb-9260v1.c +++ b/arch/arm/mach-at91/board-afeb-9260v1.c | |||
@@ -103,7 +103,7 @@ static struct spi_board_info afeb9260_spi_devices[] = { | |||
103 | /* | 103 | /* |
104 | * MACB Ethernet device | 104 | * MACB Ethernet device |
105 | */ | 105 | */ |
106 | static struct at91_eth_data __initdata afeb9260_macb_data = { | 106 | static struct macb_platform_data __initdata afeb9260_macb_data = { |
107 | .phy_irq_pin = AT91_PIN_PA9, | 107 | .phy_irq_pin = AT91_PIN_PA9, |
108 | .is_rmii = 0, | 108 | .is_rmii = 0, |
109 | }; | 109 | }; |
@@ -130,19 +130,14 @@ static struct mtd_partition __initdata afeb9260_nand_partition[] = { | |||
130 | }, | 130 | }, |
131 | }; | 131 | }; |
132 | 132 | ||
133 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
134 | { | ||
135 | *num_partitions = ARRAY_SIZE(afeb9260_nand_partition); | ||
136 | return afeb9260_nand_partition; | ||
137 | } | ||
138 | |||
139 | static struct atmel_nand_data __initdata afeb9260_nand_data = { | 133 | static struct atmel_nand_data __initdata afeb9260_nand_data = { |
140 | .ale = 21, | 134 | .ale = 21, |
141 | .cle = 22, | 135 | .cle = 22, |
142 | .rdy_pin = AT91_PIN_PC13, | 136 | .rdy_pin = AT91_PIN_PC13, |
143 | .enable_pin = AT91_PIN_PC14, | 137 | .enable_pin = AT91_PIN_PC14, |
144 | .partition_info = nand_partitions, | ||
145 | .bus_width_16 = 0, | 138 | .bus_width_16 = 0, |
139 | .parts = afeb9260_nand_partition, | ||
140 | .num_parts = ARRAY_SIZE(afeb9260_nand_partition), | ||
146 | }; | 141 | }; |
147 | 142 | ||
148 | 143 | ||
diff --git a/arch/arm/mach-at91/board-cam60.c b/arch/arm/mach-at91/board-cam60.c index 747b2eaa9737..2037d2c40eb4 100644 --- a/arch/arm/mach-at91/board-cam60.c +++ b/arch/arm/mach-at91/board-cam60.c | |||
@@ -115,7 +115,7 @@ static struct spi_board_info cam60_spi_devices[] __initdata = { | |||
115 | /* | 115 | /* |
116 | * MACB Ethernet device | 116 | * MACB Ethernet device |
117 | */ | 117 | */ |
118 | static struct __initdata at91_eth_data cam60_macb_data = { | 118 | static struct __initdata macb_platform_data cam60_macb_data = { |
119 | .phy_irq_pin = AT91_PIN_PB5, | 119 | .phy_irq_pin = AT91_PIN_PB5, |
120 | .is_rmii = 0, | 120 | .is_rmii = 0, |
121 | }; | 121 | }; |
@@ -132,19 +132,14 @@ static struct mtd_partition __initdata cam60_nand_partition[] = { | |||
132 | }, | 132 | }, |
133 | }; | 133 | }; |
134 | 134 | ||
135 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
136 | { | ||
137 | *num_partitions = ARRAY_SIZE(cam60_nand_partition); | ||
138 | return cam60_nand_partition; | ||
139 | } | ||
140 | |||
141 | static struct atmel_nand_data __initdata cam60_nand_data = { | 135 | static struct atmel_nand_data __initdata cam60_nand_data = { |
142 | .ale = 21, | 136 | .ale = 21, |
143 | .cle = 22, | 137 | .cle = 22, |
144 | // .det_pin = ... not there | 138 | // .det_pin = ... not there |
145 | .rdy_pin = AT91_PIN_PA9, | 139 | .rdy_pin = AT91_PIN_PA9, |
146 | .enable_pin = AT91_PIN_PA7, | 140 | .enable_pin = AT91_PIN_PA7, |
147 | .partition_info = nand_partitions, | 141 | .parts = cam60_nand_partition, |
142 | .num_parts = ARRAY_SIZE(cam60_nand_partition), | ||
148 | }; | 143 | }; |
149 | 144 | ||
150 | static struct sam9_smc_config __initdata cam60_nand_smc_config = { | 145 | static struct sam9_smc_config __initdata cam60_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-cap9adk.c b/arch/arm/mach-at91/board-cap9adk.c index 062670351a6a..af5520c366fe 100644 --- a/arch/arm/mach-at91/board-cap9adk.c +++ b/arch/arm/mach-at91/board-cap9adk.c | |||
@@ -153,7 +153,7 @@ static struct at91_mmc_data __initdata cap9adk_mmc_data = { | |||
153 | /* | 153 | /* |
154 | * MACB Ethernet device | 154 | * MACB Ethernet device |
155 | */ | 155 | */ |
156 | static struct at91_eth_data __initdata cap9adk_macb_data = { | 156 | static struct macb_platform_data __initdata cap9adk_macb_data = { |
157 | .is_rmii = 1, | 157 | .is_rmii = 1, |
158 | }; | 158 | }; |
159 | 159 | ||
@@ -169,19 +169,14 @@ static struct mtd_partition __initdata cap9adk_nand_partitions[] = { | |||
169 | }, | 169 | }, |
170 | }; | 170 | }; |
171 | 171 | ||
172 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
173 | { | ||
174 | *num_partitions = ARRAY_SIZE(cap9adk_nand_partitions); | ||
175 | return cap9adk_nand_partitions; | ||
176 | } | ||
177 | |||
178 | static struct atmel_nand_data __initdata cap9adk_nand_data = { | 172 | static struct atmel_nand_data __initdata cap9adk_nand_data = { |
179 | .ale = 21, | 173 | .ale = 21, |
180 | .cle = 22, | 174 | .cle = 22, |
181 | // .det_pin = ... not connected | 175 | // .det_pin = ... not connected |
182 | // .rdy_pin = ... not connected | 176 | // .rdy_pin = ... not connected |
183 | .enable_pin = AT91_PIN_PD15, | 177 | .enable_pin = AT91_PIN_PD15, |
184 | .partition_info = nand_partitions, | 178 | .parts = cap9adk_nand_partitions, |
179 | .num_parts = ARRAY_SIZE(cap9adk_nand_partitions), | ||
185 | }; | 180 | }; |
186 | 181 | ||
187 | static struct sam9_smc_config __initdata cap9adk_nand_smc_config = { | 182 | static struct sam9_smc_config __initdata cap9adk_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-carmeva.c b/arch/arm/mach-at91/board-carmeva.c index 774c87fcbd5b..529b356cdb7d 100644 --- a/arch/arm/mach-at91/board-carmeva.c +++ b/arch/arm/mach-at91/board-carmeva.c | |||
@@ -57,7 +57,7 @@ static void __init carmeva_init_early(void) | |||
57 | at91_set_serial_console(0); | 57 | at91_set_serial_console(0); |
58 | } | 58 | } |
59 | 59 | ||
60 | static struct at91_eth_data __initdata carmeva_eth_data = { | 60 | static struct macb_platform_data __initdata carmeva_eth_data = { |
61 | .phy_irq_pin = AT91_PIN_PC4, | 61 | .phy_irq_pin = AT91_PIN_PC4, |
62 | .is_rmii = 1, | 62 | .is_rmii = 1, |
63 | }; | 63 | }; |
diff --git a/arch/arm/mach-at91/board-cpu9krea.c b/arch/arm/mach-at91/board-cpu9krea.c index fc885a4ce243..04d2b9b50464 100644 --- a/arch/arm/mach-at91/board-cpu9krea.c +++ b/arch/arm/mach-at91/board-cpu9krea.c | |||
@@ -99,7 +99,7 @@ static struct at91_udc_data __initdata cpu9krea_udc_data = { | |||
99 | /* | 99 | /* |
100 | * MACB Ethernet device | 100 | * MACB Ethernet device |
101 | */ | 101 | */ |
102 | static struct at91_eth_data __initdata cpu9krea_macb_data = { | 102 | static struct macb_platform_data __initdata cpu9krea_macb_data = { |
103 | .is_rmii = 1, | 103 | .is_rmii = 1, |
104 | }; | 104 | }; |
105 | 105 | ||
diff --git a/arch/arm/mach-at91/board-cpuat91.c b/arch/arm/mach-at91/board-cpuat91.c index d35e65b08ccd..7a4c82e8da51 100644 --- a/arch/arm/mach-at91/board-cpuat91.c +++ b/arch/arm/mach-at91/board-cpuat91.c | |||
@@ -82,7 +82,7 @@ static void __init cpuat91_init_early(void) | |||
82 | at91_set_serial_console(0); | 82 | at91_set_serial_console(0); |
83 | } | 83 | } |
84 | 84 | ||
85 | static struct at91_eth_data __initdata cpuat91_eth_data = { | 85 | static struct macb_platform_data __initdata cpuat91_eth_data = { |
86 | .is_rmii = 1, | 86 | .is_rmii = 1, |
87 | }; | 87 | }; |
88 | 88 | ||
diff --git a/arch/arm/mach-at91/board-csb337.c b/arch/arm/mach-at91/board-csb337.c index c3936665e645..b004b20b8e42 100644 --- a/arch/arm/mach-at91/board-csb337.c +++ b/arch/arm/mach-at91/board-csb337.c | |||
@@ -58,7 +58,7 @@ static void __init csb337_init_early(void) | |||
58 | at91_set_serial_console(0); | 58 | at91_set_serial_console(0); |
59 | } | 59 | } |
60 | 60 | ||
61 | static struct at91_eth_data __initdata csb337_eth_data = { | 61 | static struct macb_platform_data __initdata csb337_eth_data = { |
62 | .phy_irq_pin = AT91_PIN_PC2, | 62 | .phy_irq_pin = AT91_PIN_PC2, |
63 | .is_rmii = 0, | 63 | .is_rmii = 0, |
64 | }; | 64 | }; |
diff --git a/arch/arm/mach-at91/board-csb637.c b/arch/arm/mach-at91/board-csb637.c index 586100e2acbb..e966de5219c7 100644 --- a/arch/arm/mach-at91/board-csb637.c +++ b/arch/arm/mach-at91/board-csb637.c | |||
@@ -52,7 +52,7 @@ static void __init csb637_init_early(void) | |||
52 | at91_set_serial_console(0); | 52 | at91_set_serial_console(0); |
53 | } | 53 | } |
54 | 54 | ||
55 | static struct at91_eth_data __initdata csb637_eth_data = { | 55 | static struct macb_platform_data __initdata csb637_eth_data = { |
56 | .phy_irq_pin = AT91_PIN_PC0, | 56 | .phy_irq_pin = AT91_PIN_PC0, |
57 | .is_rmii = 0, | 57 | .is_rmii = 0, |
58 | }; | 58 | }; |
diff --git a/arch/arm/mach-at91/board-eb9200.c b/arch/arm/mach-at91/board-eb9200.c index 45db7a3dbef0..3788fa527121 100644 --- a/arch/arm/mach-at91/board-eb9200.c +++ b/arch/arm/mach-at91/board-eb9200.c | |||
@@ -60,7 +60,7 @@ static void __init eb9200_init_early(void) | |||
60 | at91_set_serial_console(0); | 60 | at91_set_serial_console(0); |
61 | } | 61 | } |
62 | 62 | ||
63 | static struct at91_eth_data __initdata eb9200_eth_data = { | 63 | static struct macb_platform_data __initdata eb9200_eth_data = { |
64 | .phy_irq_pin = AT91_PIN_PC4, | 64 | .phy_irq_pin = AT91_PIN_PC4, |
65 | .is_rmii = 1, | 65 | .is_rmii = 1, |
66 | }; | 66 | }; |
diff --git a/arch/arm/mach-at91/board-ecbat91.c b/arch/arm/mach-at91/board-ecbat91.c index 2f9c16d29212..af7622eae1a9 100644 --- a/arch/arm/mach-at91/board-ecbat91.c +++ b/arch/arm/mach-at91/board-ecbat91.c | |||
@@ -64,7 +64,7 @@ static void __init ecb_at91init_early(void) | |||
64 | at91_set_serial_console(0); | 64 | at91_set_serial_console(0); |
65 | } | 65 | } |
66 | 66 | ||
67 | static struct at91_eth_data __initdata ecb_at91eth_data = { | 67 | static struct macb_platform_data __initdata ecb_at91eth_data = { |
68 | .phy_irq_pin = AT91_PIN_PC4, | 68 | .phy_irq_pin = AT91_PIN_PC4, |
69 | .is_rmii = 0, | 69 | .is_rmii = 0, |
70 | }; | 70 | }; |
diff --git a/arch/arm/mach-at91/board-eco920.c b/arch/arm/mach-at91/board-eco920.c index 8252c722607b..8e75867d1d18 100644 --- a/arch/arm/mach-at91/board-eco920.c +++ b/arch/arm/mach-at91/board-eco920.c | |||
@@ -47,7 +47,7 @@ static void __init eco920_init_early(void) | |||
47 | at91_set_serial_console(0); | 47 | at91_set_serial_console(0); |
48 | } | 48 | } |
49 | 49 | ||
50 | static struct at91_eth_data __initdata eco920_eth_data = { | 50 | static struct macb_platform_data __initdata eco920_eth_data = { |
51 | .phy_irq_pin = AT91_PIN_PC2, | 51 | .phy_irq_pin = AT91_PIN_PC2, |
52 | .is_rmii = 1, | 52 | .is_rmii = 1, |
53 | }; | 53 | }; |
diff --git a/arch/arm/mach-at91/board-foxg20.c b/arch/arm/mach-at91/board-foxg20.c index f27d1a780cfa..de8e09642f4e 100644 --- a/arch/arm/mach-at91/board-foxg20.c +++ b/arch/arm/mach-at91/board-foxg20.c | |||
@@ -135,7 +135,7 @@ static struct spi_board_info foxg20_spi_devices[] = { | |||
135 | /* | 135 | /* |
136 | * MACB Ethernet device | 136 | * MACB Ethernet device |
137 | */ | 137 | */ |
138 | static struct at91_eth_data __initdata foxg20_macb_data = { | 138 | static struct macb_platform_data __initdata foxg20_macb_data = { |
139 | .phy_irq_pin = AT91_PIN_PA7, | 139 | .phy_irq_pin = AT91_PIN_PA7, |
140 | .is_rmii = 1, | 140 | .is_rmii = 1, |
141 | }; | 141 | }; |
diff --git a/arch/arm/mach-at91/board-gsia18s.c b/arch/arm/mach-at91/board-gsia18s.c index 2e95949737e6..51c82f151119 100644 --- a/arch/arm/mach-at91/board-gsia18s.c +++ b/arch/arm/mach-at91/board-gsia18s.c | |||
@@ -93,7 +93,7 @@ static struct at91_udc_data __initdata udc_data = { | |||
93 | /* | 93 | /* |
94 | * MACB Ethernet device | 94 | * MACB Ethernet device |
95 | */ | 95 | */ |
96 | static struct at91_eth_data __initdata macb_data = { | 96 | static struct macb_platform_data __initdata macb_data = { |
97 | .phy_irq_pin = AT91_PIN_PA28, | 97 | .phy_irq_pin = AT91_PIN_PA28, |
98 | .is_rmii = 1, | 98 | .is_rmii = 1, |
99 | }; | 99 | }; |
diff --git a/arch/arm/mach-at91/board-kafa.c b/arch/arm/mach-at91/board-kafa.c index 3bae73e63633..9628a3defcf4 100644 --- a/arch/arm/mach-at91/board-kafa.c +++ b/arch/arm/mach-at91/board-kafa.c | |||
@@ -61,7 +61,7 @@ static void __init kafa_init_early(void) | |||
61 | at91_set_serial_console(0); | 61 | at91_set_serial_console(0); |
62 | } | 62 | } |
63 | 63 | ||
64 | static struct at91_eth_data __initdata kafa_eth_data = { | 64 | static struct macb_platform_data __initdata kafa_eth_data = { |
65 | .phy_irq_pin = AT91_PIN_PC4, | 65 | .phy_irq_pin = AT91_PIN_PC4, |
66 | .is_rmii = 0, | 66 | .is_rmii = 0, |
67 | }; | 67 | }; |
diff --git a/arch/arm/mach-at91/board-kb9202.c b/arch/arm/mach-at91/board-kb9202.c index 15a3f1a87ab0..5ba5244cb632 100644 --- a/arch/arm/mach-at91/board-kb9202.c +++ b/arch/arm/mach-at91/board-kb9202.c | |||
@@ -69,7 +69,7 @@ static void __init kb9202_init_early(void) | |||
69 | at91_set_serial_console(0); | 69 | at91_set_serial_console(0); |
70 | } | 70 | } |
71 | 71 | ||
72 | static struct at91_eth_data __initdata kb9202_eth_data = { | 72 | static struct macb_platform_data __initdata kb9202_eth_data = { |
73 | .phy_irq_pin = AT91_PIN_PB29, | 73 | .phy_irq_pin = AT91_PIN_PB29, |
74 | .is_rmii = 0, | 74 | .is_rmii = 0, |
75 | }; | 75 | }; |
@@ -97,19 +97,14 @@ static struct mtd_partition __initdata kb9202_nand_partition[] = { | |||
97 | }, | 97 | }, |
98 | }; | 98 | }; |
99 | 99 | ||
100 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
101 | { | ||
102 | *num_partitions = ARRAY_SIZE(kb9202_nand_partition); | ||
103 | return kb9202_nand_partition; | ||
104 | } | ||
105 | |||
106 | static struct atmel_nand_data __initdata kb9202_nand_data = { | 100 | static struct atmel_nand_data __initdata kb9202_nand_data = { |
107 | .ale = 22, | 101 | .ale = 22, |
108 | .cle = 21, | 102 | .cle = 21, |
109 | // .det_pin = ... not there | 103 | // .det_pin = ... not there |
110 | .rdy_pin = AT91_PIN_PC29, | 104 | .rdy_pin = AT91_PIN_PC29, |
111 | .enable_pin = AT91_PIN_PC28, | 105 | .enable_pin = AT91_PIN_PC28, |
112 | .partition_info = nand_partitions, | 106 | .parts = kb9202_nand_partition, |
107 | .num_parts = ARRAY_SIZE(kb9202_nand_partition), | ||
113 | }; | 108 | }; |
114 | 109 | ||
115 | static void __init kb9202_board_init(void) | 110 | static void __init kb9202_board_init(void) |
diff --git a/arch/arm/mach-at91/board-neocore926.c b/arch/arm/mach-at91/board-neocore926.c index 6094496f7edb..56e7aee11b59 100644 --- a/arch/arm/mach-at91/board-neocore926.c +++ b/arch/arm/mach-at91/board-neocore926.c | |||
@@ -155,7 +155,7 @@ static struct at91_mmc_data __initdata neocore926_mmc_data = { | |||
155 | /* | 155 | /* |
156 | * MACB Ethernet device | 156 | * MACB Ethernet device |
157 | */ | 157 | */ |
158 | static struct at91_eth_data __initdata neocore926_macb_data = { | 158 | static struct macb_platform_data __initdata neocore926_macb_data = { |
159 | .phy_irq_pin = AT91_PIN_PE31, | 159 | .phy_irq_pin = AT91_PIN_PE31, |
160 | .is_rmii = 1, | 160 | .is_rmii = 1, |
161 | }; | 161 | }; |
@@ -182,19 +182,14 @@ static struct mtd_partition __initdata neocore926_nand_partition[] = { | |||
182 | }, | 182 | }, |
183 | }; | 183 | }; |
184 | 184 | ||
185 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
186 | { | ||
187 | *num_partitions = ARRAY_SIZE(neocore926_nand_partition); | ||
188 | return neocore926_nand_partition; | ||
189 | } | ||
190 | |||
191 | static struct atmel_nand_data __initdata neocore926_nand_data = { | 185 | static struct atmel_nand_data __initdata neocore926_nand_data = { |
192 | .ale = 21, | 186 | .ale = 21, |
193 | .cle = 22, | 187 | .cle = 22, |
194 | .rdy_pin = AT91_PIN_PB19, | 188 | .rdy_pin = AT91_PIN_PB19, |
195 | .rdy_pin_active_low = 1, | 189 | .rdy_pin_active_low = 1, |
196 | .enable_pin = AT91_PIN_PD15, | 190 | .enable_pin = AT91_PIN_PD15, |
197 | .partition_info = nand_partitions, | 191 | .parts = neocore926_nand_partition, |
192 | .num_parts = ARRAY_SIZE(neocore926_nand_partition), | ||
198 | }; | 193 | }; |
199 | 194 | ||
200 | static struct sam9_smc_config __initdata neocore926_nand_smc_config = { | 195 | static struct sam9_smc_config __initdata neocore926_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-pcontrol-g20.c b/arch/arm/mach-at91/board-pcontrol-g20.c index 49e3f699b48e..c545a3e635a4 100644 --- a/arch/arm/mach-at91/board-pcontrol-g20.c +++ b/arch/arm/mach-at91/board-pcontrol-g20.c | |||
@@ -122,7 +122,7 @@ static struct at91_udc_data __initdata pcontrol_g20_udc_data = { | |||
122 | /* | 122 | /* |
123 | * MACB Ethernet device | 123 | * MACB Ethernet device |
124 | */ | 124 | */ |
125 | static struct at91_eth_data __initdata macb_data = { | 125 | static struct macb_platform_data __initdata macb_data = { |
126 | .phy_irq_pin = AT91_PIN_PA28, | 126 | .phy_irq_pin = AT91_PIN_PA28, |
127 | .is_rmii = 1, | 127 | .is_rmii = 1, |
128 | }; | 128 | }; |
diff --git a/arch/arm/mach-at91/board-picotux200.c b/arch/arm/mach-at91/board-picotux200.c index 0a8fe6a1b7c8..dc18759a24b4 100644 --- a/arch/arm/mach-at91/board-picotux200.c +++ b/arch/arm/mach-at91/board-picotux200.c | |||
@@ -60,7 +60,7 @@ static void __init picotux200_init_early(void) | |||
60 | at91_set_serial_console(0); | 60 | at91_set_serial_console(0); |
61 | } | 61 | } |
62 | 62 | ||
63 | static struct at91_eth_data __initdata picotux200_eth_data = { | 63 | static struct macb_platform_data __initdata picotux200_eth_data = { |
64 | .phy_irq_pin = AT91_PIN_PC4, | 64 | .phy_irq_pin = AT91_PIN_PC4, |
65 | .is_rmii = 1, | 65 | .is_rmii = 1, |
66 | }; | 66 | }; |
diff --git a/arch/arm/mach-at91/board-qil-a9260.c b/arch/arm/mach-at91/board-qil-a9260.c index 938cc390bea3..5444d6ac514a 100644 --- a/arch/arm/mach-at91/board-qil-a9260.c +++ b/arch/arm/mach-at91/board-qil-a9260.c | |||
@@ -104,7 +104,7 @@ static struct spi_board_info ek_spi_devices[] = { | |||
104 | /* | 104 | /* |
105 | * MACB Ethernet device | 105 | * MACB Ethernet device |
106 | */ | 106 | */ |
107 | static struct at91_eth_data __initdata ek_macb_data = { | 107 | static struct macb_platform_data __initdata ek_macb_data = { |
108 | .phy_irq_pin = AT91_PIN_PA31, | 108 | .phy_irq_pin = AT91_PIN_PA31, |
109 | .is_rmii = 1, | 109 | .is_rmii = 1, |
110 | }; | 110 | }; |
@@ -130,19 +130,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
130 | }, | 130 | }, |
131 | }; | 131 | }; |
132 | 132 | ||
133 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
134 | { | ||
135 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
136 | return ek_nand_partition; | ||
137 | } | ||
138 | |||
139 | static struct atmel_nand_data __initdata ek_nand_data = { | 133 | static struct atmel_nand_data __initdata ek_nand_data = { |
140 | .ale = 21, | 134 | .ale = 21, |
141 | .cle = 22, | 135 | .cle = 22, |
142 | // .det_pin = ... not connected | 136 | // .det_pin = ... not connected |
143 | .rdy_pin = AT91_PIN_PC13, | 137 | .rdy_pin = AT91_PIN_PC13, |
144 | .enable_pin = AT91_PIN_PC14, | 138 | .enable_pin = AT91_PIN_PC14, |
145 | .partition_info = nand_partitions, | 139 | .parts = ek_nand_partition, |
140 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
146 | }; | 141 | }; |
147 | 142 | ||
148 | static struct sam9_smc_config __initdata ek_nand_smc_config = { | 143 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-rm9200dk.c b/arch/arm/mach-at91/board-rm9200dk.c index b4ac30e38a9e..022d0cebda9d 100644 --- a/arch/arm/mach-at91/board-rm9200dk.c +++ b/arch/arm/mach-at91/board-rm9200dk.c | |||
@@ -65,7 +65,7 @@ static void __init dk_init_early(void) | |||
65 | at91_set_serial_console(0); | 65 | at91_set_serial_console(0); |
66 | } | 66 | } |
67 | 67 | ||
68 | static struct at91_eth_data __initdata dk_eth_data = { | 68 | static struct macb_platform_data __initdata dk_eth_data = { |
69 | .phy_irq_pin = AT91_PIN_PC4, | 69 | .phy_irq_pin = AT91_PIN_PC4, |
70 | .is_rmii = 1, | 70 | .is_rmii = 1, |
71 | }; | 71 | }; |
@@ -138,19 +138,14 @@ static struct mtd_partition __initdata dk_nand_partition[] = { | |||
138 | }, | 138 | }, |
139 | }; | 139 | }; |
140 | 140 | ||
141 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
142 | { | ||
143 | *num_partitions = ARRAY_SIZE(dk_nand_partition); | ||
144 | return dk_nand_partition; | ||
145 | } | ||
146 | |||
147 | static struct atmel_nand_data __initdata dk_nand_data = { | 141 | static struct atmel_nand_data __initdata dk_nand_data = { |
148 | .ale = 22, | 142 | .ale = 22, |
149 | .cle = 21, | 143 | .cle = 21, |
150 | .det_pin = AT91_PIN_PB1, | 144 | .det_pin = AT91_PIN_PB1, |
151 | .rdy_pin = AT91_PIN_PC2, | 145 | .rdy_pin = AT91_PIN_PC2, |
152 | // .enable_pin = ... not there | 146 | // .enable_pin = ... not there |
153 | .partition_info = nand_partitions, | 147 | .parts = dk_nand_partition, |
148 | .num_parts = ARRAY_SIZE(dk_nand_partition), | ||
154 | }; | 149 | }; |
155 | 150 | ||
156 | #define DK_FLASH_BASE AT91_CHIPSELECT_0 | 151 | #define DK_FLASH_BASE AT91_CHIPSELECT_0 |
diff --git a/arch/arm/mach-at91/board-rm9200ek.c b/arch/arm/mach-at91/board-rm9200ek.c index 99fd7f8aee0e..ed275861adef 100644 --- a/arch/arm/mach-at91/board-rm9200ek.c +++ b/arch/arm/mach-at91/board-rm9200ek.c | |||
@@ -65,7 +65,7 @@ static void __init ek_init_early(void) | |||
65 | at91_set_serial_console(0); | 65 | at91_set_serial_console(0); |
66 | } | 66 | } |
67 | 67 | ||
68 | static struct at91_eth_data __initdata ek_eth_data = { | 68 | static struct macb_platform_data __initdata ek_eth_data = { |
69 | .phy_irq_pin = AT91_PIN_PC4, | 69 | .phy_irq_pin = AT91_PIN_PC4, |
70 | .is_rmii = 1, | 70 | .is_rmii = 1, |
71 | }; | 71 | }; |
diff --git a/arch/arm/mach-at91/board-rsi-ews.c b/arch/arm/mach-at91/board-rsi-ews.c index e927df0175df..ed3b21f77674 100644 --- a/arch/arm/mach-at91/board-rsi-ews.c +++ b/arch/arm/mach-at91/board-rsi-ews.c | |||
@@ -60,7 +60,7 @@ static void __init rsi_ews_init_early(void) | |||
60 | /* | 60 | /* |
61 | * Ethernet | 61 | * Ethernet |
62 | */ | 62 | */ |
63 | static struct at91_eth_data rsi_ews_eth_data __initdata = { | 63 | static struct macb_platform_data rsi_ews_eth_data __initdata = { |
64 | .phy_irq_pin = AT91_PIN_PC4, | 64 | .phy_irq_pin = AT91_PIN_PC4, |
65 | .is_rmii = 1, | 65 | .is_rmii = 1, |
66 | }; | 66 | }; |
diff --git a/arch/arm/mach-at91/board-sam9-l9260.c b/arch/arm/mach-at91/board-sam9-l9260.c index 2a21e790250e..3e4b50e6f6ab 100644 --- a/arch/arm/mach-at91/board-sam9-l9260.c +++ b/arch/arm/mach-at91/board-sam9-l9260.c | |||
@@ -109,7 +109,7 @@ static struct spi_board_info ek_spi_devices[] = { | |||
109 | /* | 109 | /* |
110 | * MACB Ethernet device | 110 | * MACB Ethernet device |
111 | */ | 111 | */ |
112 | static struct at91_eth_data __initdata ek_macb_data = { | 112 | static struct macb_platform_data __initdata ek_macb_data = { |
113 | .phy_irq_pin = AT91_PIN_PA7, | 113 | .phy_irq_pin = AT91_PIN_PA7, |
114 | .is_rmii = 0, | 114 | .is_rmii = 0, |
115 | }; | 115 | }; |
@@ -131,19 +131,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
131 | }, | 131 | }, |
132 | }; | 132 | }; |
133 | 133 | ||
134 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
135 | { | ||
136 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
137 | return ek_nand_partition; | ||
138 | } | ||
139 | |||
140 | static struct atmel_nand_data __initdata ek_nand_data = { | 134 | static struct atmel_nand_data __initdata ek_nand_data = { |
141 | .ale = 21, | 135 | .ale = 21, |
142 | .cle = 22, | 136 | .cle = 22, |
143 | // .det_pin = ... not connected | 137 | // .det_pin = ... not connected |
144 | .rdy_pin = AT91_PIN_PC13, | 138 | .rdy_pin = AT91_PIN_PC13, |
145 | .enable_pin = AT91_PIN_PC14, | 139 | .enable_pin = AT91_PIN_PC14, |
146 | .partition_info = nand_partitions, | 140 | .parts = ek_nand_partition, |
141 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
147 | }; | 142 | }; |
148 | 143 | ||
149 | static struct sam9_smc_config __initdata ek_nand_smc_config = { | 144 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-sam9260ek.c b/arch/arm/mach-at91/board-sam9260ek.c index 89c8b579bfda..13478e14a543 100644 --- a/arch/arm/mach-at91/board-sam9260ek.c +++ b/arch/arm/mach-at91/board-sam9260ek.c | |||
@@ -151,7 +151,7 @@ static struct spi_board_info ek_spi_devices[] = { | |||
151 | /* | 151 | /* |
152 | * MACB Ethernet device | 152 | * MACB Ethernet device |
153 | */ | 153 | */ |
154 | static struct at91_eth_data __initdata ek_macb_data = { | 154 | static struct macb_platform_data __initdata ek_macb_data = { |
155 | .phy_irq_pin = AT91_PIN_PA7, | 155 | .phy_irq_pin = AT91_PIN_PA7, |
156 | .is_rmii = 1, | 156 | .is_rmii = 1, |
157 | }; | 157 | }; |
@@ -173,19 +173,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
173 | }, | 173 | }, |
174 | }; | 174 | }; |
175 | 175 | ||
176 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
177 | { | ||
178 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
179 | return ek_nand_partition; | ||
180 | } | ||
181 | |||
182 | static struct atmel_nand_data __initdata ek_nand_data = { | 176 | static struct atmel_nand_data __initdata ek_nand_data = { |
183 | .ale = 21, | 177 | .ale = 21, |
184 | .cle = 22, | 178 | .cle = 22, |
185 | // .det_pin = ... not connected | 179 | // .det_pin = ... not connected |
186 | .rdy_pin = AT91_PIN_PC13, | 180 | .rdy_pin = AT91_PIN_PC13, |
187 | .enable_pin = AT91_PIN_PC14, | 181 | .enable_pin = AT91_PIN_PC14, |
188 | .partition_info = nand_partitions, | 182 | .parts = ek_nand_partition, |
183 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
189 | }; | 184 | }; |
190 | 185 | ||
191 | static struct sam9_smc_config __initdata ek_nand_smc_config = { | 186 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-sam9261ek.c b/arch/arm/mach-at91/board-sam9261ek.c index 3741f43cdae9..b005b738e8ff 100644 --- a/arch/arm/mach-at91/board-sam9261ek.c +++ b/arch/arm/mach-at91/board-sam9261ek.c | |||
@@ -179,19 +179,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
179 | }, | 179 | }, |
180 | }; | 180 | }; |
181 | 181 | ||
182 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
183 | { | ||
184 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
185 | return ek_nand_partition; | ||
186 | } | ||
187 | |||
188 | static struct atmel_nand_data __initdata ek_nand_data = { | 182 | static struct atmel_nand_data __initdata ek_nand_data = { |
189 | .ale = 22, | 183 | .ale = 22, |
190 | .cle = 21, | 184 | .cle = 21, |
191 | // .det_pin = ... not connected | 185 | // .det_pin = ... not connected |
192 | .rdy_pin = AT91_PIN_PC15, | 186 | .rdy_pin = AT91_PIN_PC15, |
193 | .enable_pin = AT91_PIN_PC14, | 187 | .enable_pin = AT91_PIN_PC14, |
194 | .partition_info = nand_partitions, | 188 | .parts = ek_nand_partition, |
189 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
195 | }; | 190 | }; |
196 | 191 | ||
197 | static struct sam9_smc_config __initdata ek_nand_smc_config = { | 192 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-sam9263ek.c b/arch/arm/mach-at91/board-sam9263ek.c index a580dd451a41..fcf194e6e4fe 100644 --- a/arch/arm/mach-at91/board-sam9263ek.c +++ b/arch/arm/mach-at91/board-sam9263ek.c | |||
@@ -158,7 +158,7 @@ static struct at91_mmc_data __initdata ek_mmc_data = { | |||
158 | /* | 158 | /* |
159 | * MACB Ethernet device | 159 | * MACB Ethernet device |
160 | */ | 160 | */ |
161 | static struct at91_eth_data __initdata ek_macb_data = { | 161 | static struct macb_platform_data __initdata ek_macb_data = { |
162 | .phy_irq_pin = AT91_PIN_PE31, | 162 | .phy_irq_pin = AT91_PIN_PE31, |
163 | .is_rmii = 1, | 163 | .is_rmii = 1, |
164 | }; | 164 | }; |
@@ -180,19 +180,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
180 | }, | 180 | }, |
181 | }; | 181 | }; |
182 | 182 | ||
183 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
184 | { | ||
185 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
186 | return ek_nand_partition; | ||
187 | } | ||
188 | |||
189 | static struct atmel_nand_data __initdata ek_nand_data = { | 183 | static struct atmel_nand_data __initdata ek_nand_data = { |
190 | .ale = 21, | 184 | .ale = 21, |
191 | .cle = 22, | 185 | .cle = 22, |
192 | // .det_pin = ... not connected | 186 | // .det_pin = ... not connected |
193 | .rdy_pin = AT91_PIN_PA22, | 187 | .rdy_pin = AT91_PIN_PA22, |
194 | .enable_pin = AT91_PIN_PD15, | 188 | .enable_pin = AT91_PIN_PD15, |
195 | .partition_info = nand_partitions, | 189 | .parts = ek_nand_partition, |
190 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
196 | }; | 191 | }; |
197 | 192 | ||
198 | static struct sam9_smc_config __initdata ek_nand_smc_config = { | 193 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-sam9g20ek.c b/arch/arm/mach-at91/board-sam9g20ek.c index 8d77c2ff96b2..78d27cc3cc09 100644 --- a/arch/arm/mach-at91/board-sam9g20ek.c +++ b/arch/arm/mach-at91/board-sam9g20ek.c | |||
@@ -123,7 +123,7 @@ static struct spi_board_info ek_spi_devices[] = { | |||
123 | /* | 123 | /* |
124 | * MACB Ethernet device | 124 | * MACB Ethernet device |
125 | */ | 125 | */ |
126 | static struct at91_eth_data __initdata ek_macb_data = { | 126 | static struct macb_platform_data __initdata ek_macb_data = { |
127 | .phy_irq_pin = AT91_PIN_PA7, | 127 | .phy_irq_pin = AT91_PIN_PA7, |
128 | .is_rmii = 1, | 128 | .is_rmii = 1, |
129 | }; | 129 | }; |
@@ -157,19 +157,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
157 | }, | 157 | }, |
158 | }; | 158 | }; |
159 | 159 | ||
160 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
161 | { | ||
162 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
163 | return ek_nand_partition; | ||
164 | } | ||
165 | |||
166 | /* det_pin is not connected */ | 160 | /* det_pin is not connected */ |
167 | static struct atmel_nand_data __initdata ek_nand_data = { | 161 | static struct atmel_nand_data __initdata ek_nand_data = { |
168 | .ale = 21, | 162 | .ale = 21, |
169 | .cle = 22, | 163 | .cle = 22, |
170 | .rdy_pin = AT91_PIN_PC13, | 164 | .rdy_pin = AT91_PIN_PC13, |
171 | .enable_pin = AT91_PIN_PC14, | 165 | .enable_pin = AT91_PIN_PC14, |
172 | .partition_info = nand_partitions, | 166 | .parts = ek_nand_partition, |
167 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
173 | }; | 168 | }; |
174 | 169 | ||
175 | static struct sam9_smc_config __initdata ek_nand_smc_config = { | 170 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-sam9m10g45ek.c b/arch/arm/mach-at91/board-sam9m10g45ek.c index 2d6203ac1a42..4e1ee9d87096 100644 --- a/arch/arm/mach-at91/board-sam9m10g45ek.c +++ b/arch/arm/mach-at91/board-sam9m10g45ek.c | |||
@@ -115,7 +115,7 @@ static struct mci_platform_data __initdata mci1_data = { | |||
115 | /* | 115 | /* |
116 | * MACB Ethernet device | 116 | * MACB Ethernet device |
117 | */ | 117 | */ |
118 | static struct at91_eth_data __initdata ek_macb_data = { | 118 | static struct macb_platform_data __initdata ek_macb_data = { |
119 | .phy_irq_pin = AT91_PIN_PD5, | 119 | .phy_irq_pin = AT91_PIN_PD5, |
120 | .is_rmii = 1, | 120 | .is_rmii = 1, |
121 | }; | 121 | }; |
@@ -137,19 +137,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
137 | }, | 137 | }, |
138 | }; | 138 | }; |
139 | 139 | ||
140 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
141 | { | ||
142 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
143 | return ek_nand_partition; | ||
144 | } | ||
145 | |||
146 | /* det_pin is not connected */ | 140 | /* det_pin is not connected */ |
147 | static struct atmel_nand_data __initdata ek_nand_data = { | 141 | static struct atmel_nand_data __initdata ek_nand_data = { |
148 | .ale = 21, | 142 | .ale = 21, |
149 | .cle = 22, | 143 | .cle = 22, |
150 | .rdy_pin = AT91_PIN_PC8, | 144 | .rdy_pin = AT91_PIN_PC8, |
151 | .enable_pin = AT91_PIN_PC14, | 145 | .enable_pin = AT91_PIN_PC14, |
152 | .partition_info = nand_partitions, | 146 | .parts = ek_nand_partition, |
147 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
153 | }; | 148 | }; |
154 | 149 | ||
155 | static struct sam9_smc_config __initdata ek_nand_smc_config = { | 150 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-sam9rlek.c b/arch/arm/mach-at91/board-sam9rlek.c index 39a28effc3df..b2b748239f36 100644 --- a/arch/arm/mach-at91/board-sam9rlek.c +++ b/arch/arm/mach-at91/board-sam9rlek.c | |||
@@ -88,19 +88,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
88 | }, | 88 | }, |
89 | }; | 89 | }; |
90 | 90 | ||
91 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
92 | { | ||
93 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
94 | return ek_nand_partition; | ||
95 | } | ||
96 | |||
97 | static struct atmel_nand_data __initdata ek_nand_data = { | 91 | static struct atmel_nand_data __initdata ek_nand_data = { |
98 | .ale = 21, | 92 | .ale = 21, |
99 | .cle = 22, | 93 | .cle = 22, |
100 | // .det_pin = ... not connected | 94 | // .det_pin = ... not connected |
101 | .rdy_pin = AT91_PIN_PD17, | 95 | .rdy_pin = AT91_PIN_PD17, |
102 | .enable_pin = AT91_PIN_PB6, | 96 | .enable_pin = AT91_PIN_PB6, |
103 | .partition_info = nand_partitions, | 97 | .parts = ek_nand_partition, |
98 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
104 | }; | 99 | }; |
105 | 100 | ||
106 | static struct sam9_smc_config __initdata ek_nand_smc_config = { | 101 | static struct sam9_smc_config __initdata ek_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-snapper9260.c b/arch/arm/mach-at91/board-snapper9260.c index c73d25e5faea..fbec934a7ce9 100644 --- a/arch/arm/mach-at91/board-snapper9260.c +++ b/arch/arm/mach-at91/board-snapper9260.c | |||
@@ -65,7 +65,7 @@ static struct at91_udc_data __initdata snapper9260_udc_data = { | |||
65 | .vbus_polled = 1, | 65 | .vbus_polled = 1, |
66 | }; | 66 | }; |
67 | 67 | ||
68 | static struct at91_eth_data snapper9260_macb_data = { | 68 | static struct macb_platform_data snapper9260_macb_data = { |
69 | .is_rmii = 1, | 69 | .is_rmii = 1, |
70 | }; | 70 | }; |
71 | 71 | ||
@@ -97,18 +97,12 @@ static struct mtd_partition __initdata snapper9260_nand_partitions[] = { | |||
97 | }, | 97 | }, |
98 | }; | 98 | }; |
99 | 99 | ||
100 | static struct mtd_partition * __init | ||
101 | snapper9260_nand_partition_info(int size, int *num_partitions) | ||
102 | { | ||
103 | *num_partitions = ARRAY_SIZE(snapper9260_nand_partitions); | ||
104 | return snapper9260_nand_partitions; | ||
105 | } | ||
106 | |||
107 | static struct atmel_nand_data __initdata snapper9260_nand_data = { | 100 | static struct atmel_nand_data __initdata snapper9260_nand_data = { |
108 | .ale = 21, | 101 | .ale = 21, |
109 | .cle = 22, | 102 | .cle = 22, |
110 | .rdy_pin = AT91_PIN_PC13, | 103 | .rdy_pin = AT91_PIN_PC13, |
111 | .partition_info = snapper9260_nand_partition_info, | 104 | .parts = snapper9260_nand_partitions, |
105 | .num_parts = ARRAY_SIZE(snapper9260_nand_partitions), | ||
112 | .bus_width_16 = 0, | 106 | .bus_width_16 = 0, |
113 | }; | 107 | }; |
114 | 108 | ||
diff --git a/arch/arm/mach-at91/board-stamp9g20.c b/arch/arm/mach-at91/board-stamp9g20.c index 936e5fd7f406..7c06c07d872b 100644 --- a/arch/arm/mach-at91/board-stamp9g20.c +++ b/arch/arm/mach-at91/board-stamp9g20.c | |||
@@ -157,7 +157,7 @@ static struct at91_udc_data __initdata stamp9g20evb_udc_data = { | |||
157 | /* | 157 | /* |
158 | * MACB Ethernet device | 158 | * MACB Ethernet device |
159 | */ | 159 | */ |
160 | static struct at91_eth_data __initdata macb_data = { | 160 | static struct macb_platform_data __initdata macb_data = { |
161 | .phy_irq_pin = AT91_PIN_PA28, | 161 | .phy_irq_pin = AT91_PIN_PA28, |
162 | .is_rmii = 1, | 162 | .is_rmii = 1, |
163 | }; | 163 | }; |
diff --git a/arch/arm/mach-at91/board-usb-a926x.c b/arch/arm/mach-at91/board-usb-a926x.c index 5852d3d9890c..3d84233f78eb 100644 --- a/arch/arm/mach-at91/board-usb-a926x.c +++ b/arch/arm/mach-at91/board-usb-a926x.c | |||
@@ -146,7 +146,7 @@ static void __init ek_add_device_spi(void) | |||
146 | /* | 146 | /* |
147 | * MACB Ethernet device | 147 | * MACB Ethernet device |
148 | */ | 148 | */ |
149 | static struct at91_eth_data __initdata ek_macb_data = { | 149 | static struct macb_platform_data __initdata ek_macb_data = { |
150 | .phy_irq_pin = AT91_PIN_PE31, | 150 | .phy_irq_pin = AT91_PIN_PE31, |
151 | .is_rmii = 1, | 151 | .is_rmii = 1, |
152 | }; | 152 | }; |
@@ -190,19 +190,14 @@ static struct mtd_partition __initdata ek_nand_partition[] = { | |||
190 | } | 190 | } |
191 | }; | 191 | }; |
192 | 192 | ||
193 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
194 | { | ||
195 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
196 | return ek_nand_partition; | ||
197 | } | ||
198 | |||
199 | static struct atmel_nand_data __initdata ek_nand_data = { | 193 | static struct atmel_nand_data __initdata ek_nand_data = { |
200 | .ale = 21, | 194 | .ale = 21, |
201 | .cle = 22, | 195 | .cle = 22, |
202 | // .det_pin = ... not connected | 196 | // .det_pin = ... not connected |
203 | .rdy_pin = AT91_PIN_PA22, | 197 | .rdy_pin = AT91_PIN_PA22, |
204 | .enable_pin = AT91_PIN_PD15, | 198 | .enable_pin = AT91_PIN_PD15, |
205 | .partition_info = nand_partitions, | 199 | .parts = ek_nand_partition, |
200 | .num_parts = ARRAY_SIZE(ek_nand_partition), | ||
206 | }; | 201 | }; |
207 | 202 | ||
208 | static struct sam9_smc_config __initdata usb_a9260_nand_smc_config = { | 203 | static struct sam9_smc_config __initdata usb_a9260_nand_smc_config = { |
diff --git a/arch/arm/mach-at91/board-yl-9200.c b/arch/arm/mach-at91/board-yl-9200.c index 3c288b396fc4..2c40a21b2794 100644 --- a/arch/arm/mach-at91/board-yl-9200.c +++ b/arch/arm/mach-at91/board-yl-9200.c | |||
@@ -110,7 +110,7 @@ static struct gpio_led yl9200_leds[] = { | |||
110 | /* | 110 | /* |
111 | * Ethernet | 111 | * Ethernet |
112 | */ | 112 | */ |
113 | static struct at91_eth_data __initdata yl9200_eth_data = { | 113 | static struct macb_platform_data __initdata yl9200_eth_data = { |
114 | .phy_irq_pin = AT91_PIN_PB28, | 114 | .phy_irq_pin = AT91_PIN_PB28, |
115 | .is_rmii = 1, | 115 | .is_rmii = 1, |
116 | }; | 116 | }; |
@@ -172,19 +172,14 @@ static struct mtd_partition __initdata yl9200_nand_partition[] = { | |||
172 | } | 172 | } |
173 | }; | 173 | }; |
174 | 174 | ||
175 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
176 | { | ||
177 | *num_partitions = ARRAY_SIZE(yl9200_nand_partition); | ||
178 | return yl9200_nand_partition; | ||
179 | } | ||
180 | |||
181 | static struct atmel_nand_data __initdata yl9200_nand_data = { | 175 | static struct atmel_nand_data __initdata yl9200_nand_data = { |
182 | .ale = 6, | 176 | .ale = 6, |
183 | .cle = 7, | 177 | .cle = 7, |
184 | // .det_pin = ... not connected | 178 | // .det_pin = ... not connected |
185 | .rdy_pin = AT91_PIN_PC14, /* R/!B (Sheet10) */ | 179 | .rdy_pin = AT91_PIN_PC14, /* R/!B (Sheet10) */ |
186 | .enable_pin = AT91_PIN_PC15, /* !CE (Sheet10) */ | 180 | .enable_pin = AT91_PIN_PC15, /* !CE (Sheet10) */ |
187 | .partition_info = nand_partitions, | 181 | .parts = yl9200_nand_partition, |
182 | .num_parts = ARRAY_SIZE(yl9200_nand_partition), | ||
188 | }; | 183 | }; |
189 | 184 | ||
190 | /* | 185 | /* |
@@ -389,7 +384,7 @@ static struct spi_board_info yl9200_spi_devices[] = { | |||
389 | #include <video/s1d13xxxfb.h> | 384 | #include <video/s1d13xxxfb.h> |
390 | 385 | ||
391 | 386 | ||
392 | static void __init yl9200_init_video(void) | 387 | static void yl9200_init_video(void) |
393 | { | 388 | { |
394 | /* NWAIT Signal */ | 389 | /* NWAIT Signal */ |
395 | at91_set_A_periph(AT91_PIN_PC6, 0); | 390 | at91_set_A_periph(AT91_PIN_PC6, 0); |
diff --git a/arch/arm/mach-at91/cpuidle.c b/arch/arm/mach-at91/cpuidle.c index f474272c0eac..a851e6c98421 100644 --- a/arch/arm/mach-at91/cpuidle.c +++ b/arch/arm/mach-at91/cpuidle.c | |||
@@ -34,7 +34,8 @@ static struct cpuidle_driver at91_idle_driver = { | |||
34 | 34 | ||
35 | /* Actual code that puts the SoC in different idle states */ | 35 | /* Actual code that puts the SoC in different idle states */ |
36 | static int at91_enter_idle(struct cpuidle_device *dev, | 36 | static int at91_enter_idle(struct cpuidle_device *dev, |
37 | struct cpuidle_state *state) | 37 | struct cpuidle_driver *drv, |
38 | int index) | ||
38 | { | 39 | { |
39 | struct timeval before, after; | 40 | struct timeval before, after; |
40 | int idle_time; | 41 | int idle_time; |
@@ -42,10 +43,10 @@ static int at91_enter_idle(struct cpuidle_device *dev, | |||
42 | 43 | ||
43 | local_irq_disable(); | 44 | local_irq_disable(); |
44 | do_gettimeofday(&before); | 45 | do_gettimeofday(&before); |
45 | if (state == &dev->states[0]) | 46 | if (index == 0) |
46 | /* Wait for interrupt state */ | 47 | /* Wait for interrupt state */ |
47 | cpu_do_idle(); | 48 | cpu_do_idle(); |
48 | else if (state == &dev->states[1]) { | 49 | else if (index == 1) { |
49 | asm("b 1f; .align 5; 1:"); | 50 | asm("b 1f; .align 5; 1:"); |
50 | asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */ | 51 | asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */ |
51 | saved_lpr = sdram_selfrefresh_enable(); | 52 | saved_lpr = sdram_selfrefresh_enable(); |
@@ -56,34 +57,38 @@ static int at91_enter_idle(struct cpuidle_device *dev, | |||
56 | local_irq_enable(); | 57 | local_irq_enable(); |
57 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + | 58 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + |
58 | (after.tv_usec - before.tv_usec); | 59 | (after.tv_usec - before.tv_usec); |
59 | return idle_time; | 60 | |
61 | dev->last_residency = idle_time; | ||
62 | return index; | ||
60 | } | 63 | } |
61 | 64 | ||
62 | /* Initialize CPU idle by registering the idle states */ | 65 | /* Initialize CPU idle by registering the idle states */ |
63 | static int at91_init_cpuidle(void) | 66 | static int at91_init_cpuidle(void) |
64 | { | 67 | { |
65 | struct cpuidle_device *device; | 68 | struct cpuidle_device *device; |
66 | 69 | struct cpuidle_driver *driver = &at91_idle_driver; | |
67 | cpuidle_register_driver(&at91_idle_driver); | ||
68 | 70 | ||
69 | device = &per_cpu(at91_cpuidle_device, smp_processor_id()); | 71 | device = &per_cpu(at91_cpuidle_device, smp_processor_id()); |
70 | device->state_count = AT91_MAX_STATES; | 72 | device->state_count = AT91_MAX_STATES; |
73 | driver->state_count = AT91_MAX_STATES; | ||
71 | 74 | ||
72 | /* Wait for interrupt state */ | 75 | /* Wait for interrupt state */ |
73 | device->states[0].enter = at91_enter_idle; | 76 | driver->states[0].enter = at91_enter_idle; |
74 | device->states[0].exit_latency = 1; | 77 | driver->states[0].exit_latency = 1; |
75 | device->states[0].target_residency = 10000; | 78 | driver->states[0].target_residency = 10000; |
76 | device->states[0].flags = CPUIDLE_FLAG_TIME_VALID; | 79 | driver->states[0].flags = CPUIDLE_FLAG_TIME_VALID; |
77 | strcpy(device->states[0].name, "WFI"); | 80 | strcpy(driver->states[0].name, "WFI"); |
78 | strcpy(device->states[0].desc, "Wait for interrupt"); | 81 | strcpy(driver->states[0].desc, "Wait for interrupt"); |
79 | 82 | ||
80 | /* Wait for interrupt and RAM self refresh state */ | 83 | /* Wait for interrupt and RAM self refresh state */ |
81 | device->states[1].enter = at91_enter_idle; | 84 | driver->states[1].enter = at91_enter_idle; |
82 | device->states[1].exit_latency = 10; | 85 | driver->states[1].exit_latency = 10; |
83 | device->states[1].target_residency = 10000; | 86 | driver->states[1].target_residency = 10000; |
84 | device->states[1].flags = CPUIDLE_FLAG_TIME_VALID; | 87 | driver->states[1].flags = CPUIDLE_FLAG_TIME_VALID; |
85 | strcpy(device->states[1].name, "RAM_SR"); | 88 | strcpy(driver->states[1].name, "RAM_SR"); |
86 | strcpy(device->states[1].desc, "WFI and RAM Self Refresh"); | 89 | strcpy(driver->states[1].desc, "WFI and RAM Self Refresh"); |
90 | |||
91 | cpuidle_register_driver(&at91_idle_driver); | ||
87 | 92 | ||
88 | if (cpuidle_register_device(device)) { | 93 | if (cpuidle_register_device(device)) { |
89 | printk(KERN_ERR "at91_init_cpuidle: Failed registering\n"); | 94 | printk(KERN_ERR "at91_init_cpuidle: Failed registering\n"); |
diff --git a/arch/arm/mach-at91/include/mach/board.h b/arch/arm/mach-at91/include/mach/board.h index d07767f4052e..e209a2992245 100644 --- a/arch/arm/mach-at91/include/mach/board.h +++ b/arch/arm/mach-at91/include/mach/board.h | |||
@@ -40,6 +40,7 @@ | |||
40 | #include <linux/atmel-mci.h> | 40 | #include <linux/atmel-mci.h> |
41 | #include <sound/atmel-ac97c.h> | 41 | #include <sound/atmel-ac97c.h> |
42 | #include <linux/serial.h> | 42 | #include <linux/serial.h> |
43 | #include <linux/platform_data/macb.h> | ||
43 | 44 | ||
44 | /* USB Device */ | 45 | /* USB Device */ |
45 | struct at91_udc_data { | 46 | struct at91_udc_data { |
@@ -81,18 +82,7 @@ extern void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data) | |||
81 | /* atmel-mci platform config */ | 82 | /* atmel-mci platform config */ |
82 | extern void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data); | 83 | extern void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data); |
83 | 84 | ||
84 | /* Ethernet (EMAC & MACB) */ | 85 | extern void __init at91_add_device_eth(struct macb_platform_data *data); |
85 | struct at91_eth_data { | ||
86 | u32 phy_mask; | ||
87 | u8 phy_irq_pin; /* PHY IRQ */ | ||
88 | u8 is_rmii; /* using RMII interface? */ | ||
89 | }; | ||
90 | extern void __init at91_add_device_eth(struct at91_eth_data *data); | ||
91 | |||
92 | #if defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9263) || defined(CONFIG_ARCH_AT91SAM9G20) || defined(CONFIG_ARCH_AT91CAP9) \ | ||
93 | || defined(CONFIG_ARCH_AT91SAM9G45) | ||
94 | #define eth_platform_data at91_eth_data | ||
95 | #endif | ||
96 | 86 | ||
97 | /* USB Host */ | 87 | /* USB Host */ |
98 | struct at91_usbh_data { | 88 | struct at91_usbh_data { |
@@ -117,7 +107,8 @@ struct atmel_nand_data { | |||
117 | u8 ale; /* address line number connected to ALE */ | 107 | u8 ale; /* address line number connected to ALE */ |
118 | u8 cle; /* address line number connected to CLE */ | 108 | u8 cle; /* address line number connected to CLE */ |
119 | u8 bus_width_16; /* buswidth is 16 bit */ | 109 | u8 bus_width_16; /* buswidth is 16 bit */ |
120 | struct mtd_partition* (*partition_info)(int, int*); | 110 | struct mtd_partition *parts; |
111 | unsigned int num_parts; | ||
121 | }; | 112 | }; |
122 | extern void __init at91_add_device_nand(struct atmel_nand_data *data); | 113 | extern void __init at91_add_device_nand(struct atmel_nand_data *data); |
123 | 114 | ||
diff --git a/arch/arm/mach-at91/include/mach/vmalloc.h b/arch/arm/mach-at91/include/mach/vmalloc.h index 8eb459f3f5b7..8e4a1bd0ab1d 100644 --- a/arch/arm/mach-at91/include/mach/vmalloc.h +++ b/arch/arm/mach-at91/include/mach/vmalloc.h | |||
@@ -21,6 +21,8 @@ | |||
21 | #ifndef __ASM_ARCH_VMALLOC_H | 21 | #ifndef __ASM_ARCH_VMALLOC_H |
22 | #define __ASM_ARCH_VMALLOC_H | 22 | #define __ASM_ARCH_VMALLOC_H |
23 | 23 | ||
24 | #include <mach/hardware.h> | ||
25 | |||
24 | #define VMALLOC_END (AT91_VIRT_BASE & PGDIR_MASK) | 26 | #define VMALLOC_END (AT91_VIRT_BASE & PGDIR_MASK) |
25 | 27 | ||
26 | #endif | 28 | #endif |
diff --git a/arch/arm/mach-davinci/board-da830-evm.c b/arch/arm/mach-davinci/board-da830-evm.c index 26d94c0b555c..11c3db985285 100644 --- a/arch/arm/mach-davinci/board-da830-evm.c +++ b/arch/arm/mach-davinci/board-da830-evm.c | |||
@@ -377,7 +377,7 @@ static struct davinci_nand_pdata da830_evm_nand_pdata = { | |||
377 | .nr_parts = ARRAY_SIZE(da830_evm_nand_partitions), | 377 | .nr_parts = ARRAY_SIZE(da830_evm_nand_partitions), |
378 | .ecc_mode = NAND_ECC_HW, | 378 | .ecc_mode = NAND_ECC_HW, |
379 | .ecc_bits = 4, | 379 | .ecc_bits = 4, |
380 | .options = NAND_USE_FLASH_BBT, | 380 | .bbt_options = NAND_BBT_USE_FLASH, |
381 | .bbt_td = &da830_evm_nand_bbt_main_descr, | 381 | .bbt_td = &da830_evm_nand_bbt_main_descr, |
382 | .bbt_md = &da830_evm_nand_bbt_mirror_descr, | 382 | .bbt_md = &da830_evm_nand_bbt_mirror_descr, |
383 | .timing = &da830_evm_nandflash_timing, | 383 | .timing = &da830_evm_nandflash_timing, |
diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c index ec21663f8ddc..1d7d24995226 100644 --- a/arch/arm/mach-davinci/board-da850-evm.c +++ b/arch/arm/mach-davinci/board-da850-evm.c | |||
@@ -256,7 +256,7 @@ static struct davinci_nand_pdata da850_evm_nandflash_data = { | |||
256 | .nr_parts = ARRAY_SIZE(da850_evm_nandflash_partition), | 256 | .nr_parts = ARRAY_SIZE(da850_evm_nandflash_partition), |
257 | .ecc_mode = NAND_ECC_HW, | 257 | .ecc_mode = NAND_ECC_HW, |
258 | .ecc_bits = 4, | 258 | .ecc_bits = 4, |
259 | .options = NAND_USE_FLASH_BBT, | 259 | .bbt_options = NAND_BBT_USE_FLASH, |
260 | .timing = &da850_evm_nandflash_timing, | 260 | .timing = &da850_evm_nandflash_timing, |
261 | }; | 261 | }; |
262 | 262 | ||
diff --git a/arch/arm/mach-davinci/board-dm355-evm.c b/arch/arm/mach-davinci/board-dm355-evm.c index 65566280b7c9..4e0e707c313d 100644 --- a/arch/arm/mach-davinci/board-dm355-evm.c +++ b/arch/arm/mach-davinci/board-dm355-evm.c | |||
@@ -77,7 +77,7 @@ static struct davinci_nand_pdata davinci_nand_data = { | |||
77 | .parts = davinci_nand_partitions, | 77 | .parts = davinci_nand_partitions, |
78 | .nr_parts = ARRAY_SIZE(davinci_nand_partitions), | 78 | .nr_parts = ARRAY_SIZE(davinci_nand_partitions), |
79 | .ecc_mode = NAND_ECC_HW, | 79 | .ecc_mode = NAND_ECC_HW, |
80 | .options = NAND_USE_FLASH_BBT, | 80 | .bbt_options = NAND_BBT_USE_FLASH, |
81 | .ecc_bits = 4, | 81 | .ecc_bits = 4, |
82 | }; | 82 | }; |
83 | 83 | ||
diff --git a/arch/arm/mach-davinci/board-dm355-leopard.c b/arch/arm/mach-davinci/board-dm355-leopard.c index b307470b071d..ff2d2413279a 100644 --- a/arch/arm/mach-davinci/board-dm355-leopard.c +++ b/arch/arm/mach-davinci/board-dm355-leopard.c | |||
@@ -74,7 +74,7 @@ static struct davinci_nand_pdata davinci_nand_data = { | |||
74 | .parts = davinci_nand_partitions, | 74 | .parts = davinci_nand_partitions, |
75 | .nr_parts = ARRAY_SIZE(davinci_nand_partitions), | 75 | .nr_parts = ARRAY_SIZE(davinci_nand_partitions), |
76 | .ecc_mode = NAND_ECC_HW_SYNDROME, | 76 | .ecc_mode = NAND_ECC_HW_SYNDROME, |
77 | .options = NAND_USE_FLASH_BBT, | 77 | .bbt_options = NAND_BBT_USE_FLASH, |
78 | }; | 78 | }; |
79 | 79 | ||
80 | static struct resource davinci_nand_resources[] = { | 80 | static struct resource davinci_nand_resources[] = { |
diff --git a/arch/arm/mach-davinci/board-dm365-evm.c b/arch/arm/mach-davinci/board-dm365-evm.c index 04c43abcca66..1918ae711428 100644 --- a/arch/arm/mach-davinci/board-dm365-evm.c +++ b/arch/arm/mach-davinci/board-dm365-evm.c | |||
@@ -139,7 +139,7 @@ static struct davinci_nand_pdata davinci_nand_data = { | |||
139 | .parts = davinci_nand_partitions, | 139 | .parts = davinci_nand_partitions, |
140 | .nr_parts = ARRAY_SIZE(davinci_nand_partitions), | 140 | .nr_parts = ARRAY_SIZE(davinci_nand_partitions), |
141 | .ecc_mode = NAND_ECC_HW, | 141 | .ecc_mode = NAND_ECC_HW, |
142 | .options = NAND_USE_FLASH_BBT, | 142 | .bbt_options = NAND_BBT_USE_FLASH, |
143 | .ecc_bits = 4, | 143 | .ecc_bits = 4, |
144 | }; | 144 | }; |
145 | 145 | ||
diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c index 28fafa7819bc..0cf8abf78d33 100644 --- a/arch/arm/mach-davinci/board-dm644x-evm.c +++ b/arch/arm/mach-davinci/board-dm644x-evm.c | |||
@@ -151,7 +151,7 @@ static struct davinci_nand_pdata davinci_evm_nandflash_data = { | |||
151 | .parts = davinci_evm_nandflash_partition, | 151 | .parts = davinci_evm_nandflash_partition, |
152 | .nr_parts = ARRAY_SIZE(davinci_evm_nandflash_partition), | 152 | .nr_parts = ARRAY_SIZE(davinci_evm_nandflash_partition), |
153 | .ecc_mode = NAND_ECC_HW, | 153 | .ecc_mode = NAND_ECC_HW, |
154 | .options = NAND_USE_FLASH_BBT, | 154 | .bbt_options = NAND_BBT_USE_FLASH, |
155 | .timing = &davinci_evm_nandflash_timing, | 155 | .timing = &davinci_evm_nandflash_timing, |
156 | }; | 156 | }; |
157 | 157 | ||
diff --git a/arch/arm/mach-davinci/board-mityomapl138.c b/arch/arm/mach-davinci/board-mityomapl138.c index 6efc84cceca0..3cfff555e8f2 100644 --- a/arch/arm/mach-davinci/board-mityomapl138.c +++ b/arch/arm/mach-davinci/board-mityomapl138.c | |||
@@ -396,7 +396,8 @@ static struct davinci_nand_pdata mityomapl138_nandflash_data = { | |||
396 | .parts = mityomapl138_nandflash_partition, | 396 | .parts = mityomapl138_nandflash_partition, |
397 | .nr_parts = ARRAY_SIZE(mityomapl138_nandflash_partition), | 397 | .nr_parts = ARRAY_SIZE(mityomapl138_nandflash_partition), |
398 | .ecc_mode = NAND_ECC_HW, | 398 | .ecc_mode = NAND_ECC_HW, |
399 | .options = NAND_USE_FLASH_BBT | NAND_BUSWIDTH_16, | 399 | .bbt_options = NAND_BBT_USE_FLASH, |
400 | .options = NAND_BUSWIDTH_16, | ||
400 | .ecc_bits = 1, /* 4 bit mode is not supported with 16 bit NAND */ | 401 | .ecc_bits = 1, /* 4 bit mode is not supported with 16 bit NAND */ |
401 | }; | 402 | }; |
402 | 403 | ||
diff --git a/arch/arm/mach-davinci/board-neuros-osd2.c b/arch/arm/mach-davinci/board-neuros-osd2.c index 38d6f644d8b9..e5f231aefee4 100644 --- a/arch/arm/mach-davinci/board-neuros-osd2.c +++ b/arch/arm/mach-davinci/board-neuros-osd2.c | |||
@@ -87,7 +87,7 @@ static struct davinci_nand_pdata davinci_ntosd2_nandflash_data = { | |||
87 | .parts = davinci_ntosd2_nandflash_partition, | 87 | .parts = davinci_ntosd2_nandflash_partition, |
88 | .nr_parts = ARRAY_SIZE(davinci_ntosd2_nandflash_partition), | 88 | .nr_parts = ARRAY_SIZE(davinci_ntosd2_nandflash_partition), |
89 | .ecc_mode = NAND_ECC_HW, | 89 | .ecc_mode = NAND_ECC_HW, |
90 | .options = NAND_USE_FLASH_BBT, | 90 | .bbt_options = NAND_BBT_USE_FLASH, |
91 | }; | 91 | }; |
92 | 92 | ||
93 | static struct resource davinci_ntosd2_nandflash_resource[] = { | 93 | static struct resource davinci_ntosd2_nandflash_resource[] = { |
diff --git a/arch/arm/mach-davinci/board-tnetv107x-evm.c b/arch/arm/mach-davinci/board-tnetv107x-evm.c index 90ee7b5aabdc..f69e40a29e02 100644 --- a/arch/arm/mach-davinci/board-tnetv107x-evm.c +++ b/arch/arm/mach-davinci/board-tnetv107x-evm.c | |||
@@ -144,7 +144,7 @@ static struct davinci_nand_pdata nand_config = { | |||
144 | .parts = nand_partitions, | 144 | .parts = nand_partitions, |
145 | .nr_parts = ARRAY_SIZE(nand_partitions), | 145 | .nr_parts = ARRAY_SIZE(nand_partitions), |
146 | .ecc_mode = NAND_ECC_HW, | 146 | .ecc_mode = NAND_ECC_HW, |
147 | .options = NAND_USE_FLASH_BBT, | 147 | .bbt_options = NAND_BBT_USE_FLASH, |
148 | .ecc_bits = 1, | 148 | .ecc_bits = 1, |
149 | }; | 149 | }; |
150 | 150 | ||
diff --git a/arch/arm/mach-davinci/cpuidle.c b/arch/arm/mach-davinci/cpuidle.c index 60d2f4871afa..a30c7c5a6d83 100644 --- a/arch/arm/mach-davinci/cpuidle.c +++ b/arch/arm/mach-davinci/cpuidle.c | |||
@@ -79,9 +79,11 @@ static struct davinci_ops davinci_states[DAVINCI_CPUIDLE_MAX_STATES] = { | |||
79 | 79 | ||
80 | /* Actual code that puts the SoC in different idle states */ | 80 | /* Actual code that puts the SoC in different idle states */ |
81 | static int davinci_enter_idle(struct cpuidle_device *dev, | 81 | static int davinci_enter_idle(struct cpuidle_device *dev, |
82 | struct cpuidle_state *state) | 82 | struct cpuidle_driver *drv, |
83 | int index) | ||
83 | { | 84 | { |
84 | struct davinci_ops *ops = cpuidle_get_statedata(state); | 85 | struct cpuidle_state_usage *state_usage = &dev->states_usage[index]; |
86 | struct davinci_ops *ops = cpuidle_get_statedata(state_usage); | ||
85 | struct timeval before, after; | 87 | struct timeval before, after; |
86 | int idle_time; | 88 | int idle_time; |
87 | 89 | ||
@@ -99,13 +101,17 @@ static int davinci_enter_idle(struct cpuidle_device *dev, | |||
99 | local_irq_enable(); | 101 | local_irq_enable(); |
100 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + | 102 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + |
101 | (after.tv_usec - before.tv_usec); | 103 | (after.tv_usec - before.tv_usec); |
102 | return idle_time; | 104 | |
105 | dev->last_residency = idle_time; | ||
106 | |||
107 | return index; | ||
103 | } | 108 | } |
104 | 109 | ||
105 | static int __init davinci_cpuidle_probe(struct platform_device *pdev) | 110 | static int __init davinci_cpuidle_probe(struct platform_device *pdev) |
106 | { | 111 | { |
107 | int ret; | 112 | int ret; |
108 | struct cpuidle_device *device; | 113 | struct cpuidle_device *device; |
114 | struct cpuidle_driver *driver = &davinci_idle_driver; | ||
109 | struct davinci_cpuidle_config *pdata = pdev->dev.platform_data; | 115 | struct davinci_cpuidle_config *pdata = pdev->dev.platform_data; |
110 | 116 | ||
111 | device = &per_cpu(davinci_cpuidle_device, smp_processor_id()); | 117 | device = &per_cpu(davinci_cpuidle_device, smp_processor_id()); |
@@ -117,32 +123,33 @@ static int __init davinci_cpuidle_probe(struct platform_device *pdev) | |||
117 | 123 | ||
118 | ddr2_reg_base = pdata->ddr2_ctlr_base; | 124 | ddr2_reg_base = pdata->ddr2_ctlr_base; |
119 | 125 | ||
120 | ret = cpuidle_register_driver(&davinci_idle_driver); | ||
121 | if (ret) { | ||
122 | dev_err(&pdev->dev, "failed to register driver\n"); | ||
123 | return ret; | ||
124 | } | ||
125 | |||
126 | /* Wait for interrupt state */ | 126 | /* Wait for interrupt state */ |
127 | device->states[0].enter = davinci_enter_idle; | 127 | driver->states[0].enter = davinci_enter_idle; |
128 | device->states[0].exit_latency = 1; | 128 | driver->states[0].exit_latency = 1; |
129 | device->states[0].target_residency = 10000; | 129 | driver->states[0].target_residency = 10000; |
130 | device->states[0].flags = CPUIDLE_FLAG_TIME_VALID; | 130 | driver->states[0].flags = CPUIDLE_FLAG_TIME_VALID; |
131 | strcpy(device->states[0].name, "WFI"); | 131 | strcpy(driver->states[0].name, "WFI"); |
132 | strcpy(device->states[0].desc, "Wait for interrupt"); | 132 | strcpy(driver->states[0].desc, "Wait for interrupt"); |
133 | 133 | ||
134 | /* Wait for interrupt and DDR self refresh state */ | 134 | /* Wait for interrupt and DDR self refresh state */ |
135 | device->states[1].enter = davinci_enter_idle; | 135 | driver->states[1].enter = davinci_enter_idle; |
136 | device->states[1].exit_latency = 10; | 136 | driver->states[1].exit_latency = 10; |
137 | device->states[1].target_residency = 10000; | 137 | driver->states[1].target_residency = 10000; |
138 | device->states[1].flags = CPUIDLE_FLAG_TIME_VALID; | 138 | driver->states[1].flags = CPUIDLE_FLAG_TIME_VALID; |
139 | strcpy(device->states[1].name, "DDR SR"); | 139 | strcpy(driver->states[1].name, "DDR SR"); |
140 | strcpy(device->states[1].desc, "WFI and DDR Self Refresh"); | 140 | strcpy(driver->states[1].desc, "WFI and DDR Self Refresh"); |
141 | if (pdata->ddr2_pdown) | 141 | if (pdata->ddr2_pdown) |
142 | davinci_states[1].flags |= DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN; | 142 | davinci_states[1].flags |= DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN; |
143 | cpuidle_set_statedata(&device->states[1], &davinci_states[1]); | 143 | cpuidle_set_statedata(&device->states_usage[1], &davinci_states[1]); |
144 | 144 | ||
145 | device->state_count = DAVINCI_CPUIDLE_MAX_STATES; | 145 | device->state_count = DAVINCI_CPUIDLE_MAX_STATES; |
146 | driver->state_count = DAVINCI_CPUIDLE_MAX_STATES; | ||
147 | |||
148 | ret = cpuidle_register_driver(&davinci_idle_driver); | ||
149 | if (ret) { | ||
150 | dev_err(&pdev->dev, "failed to register driver\n"); | ||
151 | return ret; | ||
152 | } | ||
146 | 153 | ||
147 | ret = cpuidle_register_device(device); | 154 | ret = cpuidle_register_device(device); |
148 | if (ret) { | 155 | if (ret) { |
diff --git a/arch/arm/mach-davinci/include/mach/nand.h b/arch/arm/mach-davinci/include/mach/nand.h index 025151049f05..1cf555aef896 100644 --- a/arch/arm/mach-davinci/include/mach/nand.h +++ b/arch/arm/mach-davinci/include/mach/nand.h | |||
@@ -74,8 +74,10 @@ struct davinci_nand_pdata { /* platform_data */ | |||
74 | nand_ecc_modes_t ecc_mode; | 74 | nand_ecc_modes_t ecc_mode; |
75 | u8 ecc_bits; | 75 | u8 ecc_bits; |
76 | 76 | ||
77 | /* e.g. NAND_BUSWIDTH_16 or NAND_USE_FLASH_BBT */ | 77 | /* e.g. NAND_BUSWIDTH_16 */ |
78 | unsigned options; | 78 | unsigned options; |
79 | /* e.g. NAND_BBT_USE_FLASH */ | ||
80 | unsigned bbt_options; | ||
79 | 81 | ||
80 | /* Main and mirror bbt descriptor overrides */ | 82 | /* Main and mirror bbt descriptor overrides */ |
81 | struct nand_bbt_descr *bbt_td; | 83 | struct nand_bbt_descr *bbt_td; |
diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c index 1ade3c340507..8b2f1435bcac 100644 --- a/arch/arm/mach-ep93xx/ts72xx.c +++ b/arch/arm/mach-ep93xx/ts72xx.c | |||
@@ -116,8 +116,9 @@ static struct mtd_partition ts72xx_nand_parts[] = { | |||
116 | .mask_flags = MTD_WRITEABLE, /* force read-only */ | 116 | .mask_flags = MTD_WRITEABLE, /* force read-only */ |
117 | }, { | 117 | }, { |
118 | .name = "Linux", | 118 | .name = "Linux", |
119 | .offset = MTDPART_OFS_APPEND, | 119 | .offset = MTDPART_OFS_RETAIN, |
120 | .size = 0, /* filled in later */ | 120 | .size = TS72XX_REDBOOT_PART_SIZE, |
121 | /* leave so much for last partition */ | ||
121 | }, { | 122 | }, { |
122 | .name = "RedBoot", | 123 | .name = "RedBoot", |
123 | .offset = MTDPART_OFS_APPEND, | 124 | .offset = MTDPART_OFS_APPEND, |
@@ -126,28 +127,14 @@ static struct mtd_partition ts72xx_nand_parts[] = { | |||
126 | }, | 127 | }, |
127 | }; | 128 | }; |
128 | 129 | ||
129 | static void ts72xx_nand_set_parts(uint64_t size, | ||
130 | struct platform_nand_chip *chip) | ||
131 | { | ||
132 | /* Factory TS-72xx boards only come with 32MiB or 128MiB NAND options */ | ||
133 | if (size == SZ_32M || size == SZ_128M) { | ||
134 | /* Set the "Linux" partition size */ | ||
135 | ts72xx_nand_parts[1].size = size - TS72XX_REDBOOT_PART_SIZE; | ||
136 | |||
137 | chip->partitions = ts72xx_nand_parts; | ||
138 | chip->nr_partitions = ARRAY_SIZE(ts72xx_nand_parts); | ||
139 | } else { | ||
140 | pr_warning("Unknown nand disk size:%lluMiB\n", size >> 20); | ||
141 | } | ||
142 | } | ||
143 | |||
144 | static struct platform_nand_data ts72xx_nand_data = { | 130 | static struct platform_nand_data ts72xx_nand_data = { |
145 | .chip = { | 131 | .chip = { |
146 | .nr_chips = 1, | 132 | .nr_chips = 1, |
147 | .chip_offset = 0, | 133 | .chip_offset = 0, |
148 | .chip_delay = 15, | 134 | .chip_delay = 15, |
149 | .part_probe_types = ts72xx_nand_part_probes, | 135 | .part_probe_types = ts72xx_nand_part_probes, |
150 | .set_parts = ts72xx_nand_set_parts, | 136 | .partitions = ts72xx_nand_parts, |
137 | .nr_partitions = ARRAY_SIZE(ts72xx_nand_parts), | ||
151 | }, | 138 | }, |
152 | .ctrl = { | 139 | .ctrl = { |
153 | .cmd_ctrl = ts72xx_nand_hwcontrol, | 140 | .cmd_ctrl = ts72xx_nand_hwcontrol, |
diff --git a/arch/arm/mach-exynos/cpuidle.c b/arch/arm/mach-exynos/cpuidle.c index bf7e96f2793a..35f6502144ae 100644 --- a/arch/arm/mach-exynos/cpuidle.c +++ b/arch/arm/mach-exynos/cpuidle.c | |||
@@ -16,7 +16,8 @@ | |||
16 | #include <asm/proc-fns.h> | 16 | #include <asm/proc-fns.h> |
17 | 17 | ||
18 | static int exynos4_enter_idle(struct cpuidle_device *dev, | 18 | static int exynos4_enter_idle(struct cpuidle_device *dev, |
19 | struct cpuidle_state *state); | 19 | struct cpuidle_driver *drv, |
20 | int index); | ||
20 | 21 | ||
21 | static struct cpuidle_state exynos4_cpuidle_set[] = { | 22 | static struct cpuidle_state exynos4_cpuidle_set[] = { |
22 | [0] = { | 23 | [0] = { |
@@ -37,7 +38,8 @@ static struct cpuidle_driver exynos4_idle_driver = { | |||
37 | }; | 38 | }; |
38 | 39 | ||
39 | static int exynos4_enter_idle(struct cpuidle_device *dev, | 40 | static int exynos4_enter_idle(struct cpuidle_device *dev, |
40 | struct cpuidle_state *state) | 41 | struct cpuidle_driver *drv, |
42 | int index) | ||
41 | { | 43 | { |
42 | struct timeval before, after; | 44 | struct timeval before, after; |
43 | int idle_time; | 45 | int idle_time; |
@@ -52,29 +54,31 @@ static int exynos4_enter_idle(struct cpuidle_device *dev, | |||
52 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + | 54 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + |
53 | (after.tv_usec - before.tv_usec); | 55 | (after.tv_usec - before.tv_usec); |
54 | 56 | ||
55 | return idle_time; | 57 | dev->last_residency = idle_time; |
58 | return index; | ||
56 | } | 59 | } |
57 | 60 | ||
58 | static int __init exynos4_init_cpuidle(void) | 61 | static int __init exynos4_init_cpuidle(void) |
59 | { | 62 | { |
60 | int i, max_cpuidle_state, cpu_id; | 63 | int i, max_cpuidle_state, cpu_id; |
61 | struct cpuidle_device *device; | 64 | struct cpuidle_device *device; |
62 | 65 | struct cpuidle_driver *drv = &exynos4_idle_driver; | |
66 | |||
67 | /* Setup cpuidle driver */ | ||
68 | drv->state_count = (sizeof(exynos4_cpuidle_set) / | ||
69 | sizeof(struct cpuidle_state)); | ||
70 | max_cpuidle_state = drv->state_count; | ||
71 | for (i = 0; i < max_cpuidle_state; i++) { | ||
72 | memcpy(&drv->states[i], &exynos4_cpuidle_set[i], | ||
73 | sizeof(struct cpuidle_state)); | ||
74 | } | ||
63 | cpuidle_register_driver(&exynos4_idle_driver); | 75 | cpuidle_register_driver(&exynos4_idle_driver); |
64 | 76 | ||
65 | for_each_cpu(cpu_id, cpu_online_mask) { | 77 | for_each_cpu(cpu_id, cpu_online_mask) { |
66 | device = &per_cpu(exynos4_cpuidle_device, cpu_id); | 78 | device = &per_cpu(exynos4_cpuidle_device, cpu_id); |
67 | device->cpu = cpu_id; | 79 | device->cpu = cpu_id; |
68 | 80 | ||
69 | device->state_count = (sizeof(exynos4_cpuidle_set) / | 81 | device->state_count = drv->state_count; |
70 | sizeof(struct cpuidle_state)); | ||
71 | |||
72 | max_cpuidle_state = device->state_count; | ||
73 | |||
74 | for (i = 0; i < max_cpuidle_state; i++) { | ||
75 | memcpy(&device->states[i], &exynos4_cpuidle_set[i], | ||
76 | sizeof(struct cpuidle_state)); | ||
77 | } | ||
78 | 82 | ||
79 | if (cpuidle_register_device(device)) { | 83 | if (cpuidle_register_device(device)) { |
80 | printk(KERN_ERR "CPUidle register device failed\n,"); | 84 | printk(KERN_ERR "CPUidle register device failed\n,"); |
diff --git a/arch/arm/mach-imx/Makefile.boot b/arch/arm/mach-imx/Makefile.boot index 22d85889f622..cfede5768aa0 100644 --- a/arch/arm/mach-imx/Makefile.boot +++ b/arch/arm/mach-imx/Makefile.boot | |||
@@ -1,22 +1,26 @@ | |||
1 | zreladdr-$(CONFIG_ARCH_MX1) += 0x08008000 | 1 | zreladdr-$(CONFIG_SOC_IMX1) += 0x08008000 |
2 | params_phys-$(CONFIG_ARCH_MX1) := 0x08000100 | 2 | params_phys-$(CONFIG_SOC_IMX1) := 0x08000100 |
3 | initrd_phys-$(CONFIG_ARCH_MX1) := 0x08800000 | 3 | initrd_phys-$(CONFIG_SOC_IMX1) := 0x08800000 |
4 | 4 | ||
5 | zreladdr-$(CONFIG_MACH_MX21) += 0xC0008000 | 5 | zreladdr-$(CONFIG_SOC_IMX21) += 0xC0008000 |
6 | params_phys-$(CONFIG_MACH_MX21) := 0xC0000100 | 6 | params_phys-$(CONFIG_SOC_IMX21) := 0xC0000100 |
7 | initrd_phys-$(CONFIG_MACH_MX21) := 0xC0800000 | 7 | initrd_phys-$(CONFIG_SOC_IMX21) := 0xC0800000 |
8 | 8 | ||
9 | zreladdr-$(CONFIG_ARCH_MX25) += 0x80008000 | 9 | zreladdr-$(CONFIG_SOC_IMX25) += 0x80008000 |
10 | params_phys-$(CONFIG_ARCH_MX25) := 0x80000100 | 10 | params_phys-$(CONFIG_SOC_IMX25) := 0x80000100 |
11 | initrd_phys-$(CONFIG_ARCH_MX25) := 0x80800000 | 11 | initrd_phys-$(CONFIG_SOC_IMX25) := 0x80800000 |
12 | 12 | ||
13 | zreladdr-$(CONFIG_MACH_MX27) += 0xA0008000 | 13 | zreladdr-$(CONFIG_SOC_IMX27) += 0xA0008000 |
14 | params_phys-$(CONFIG_MACH_MX27) := 0xA0000100 | 14 | params_phys-$(CONFIG_SOC_IMX27) := 0xA0000100 |
15 | initrd_phys-$(CONFIG_MACH_MX27) := 0xA0800000 | 15 | initrd_phys-$(CONFIG_SOC_IMX27) := 0xA0800000 |
16 | 16 | ||
17 | zreladdr-$(CONFIG_ARCH_MX3) += 0x80008000 | 17 | zreladdr-$(CONFIG_SOC_IMX31) += 0x80008000 |
18 | params_phys-$(CONFIG_ARCH_MX3) := 0x80000100 | 18 | params_phys-$(CONFIG_SOC_IMX31) := 0x80000100 |
19 | initrd_phys-$(CONFIG_ARCH_MX3) := 0x80800000 | 19 | initrd_phys-$(CONFIG_SOC_IMX31) := 0x80800000 |
20 | |||
21 | zreladdr-$(CONFIG_SOC_IMX35) += 0x80008000 | ||
22 | params_phys-$(CONFIG_SOC_IMX35) := 0x80000100 | ||
23 | initrd_phys-$(CONFIG_SOC_IMX35) := 0x80800000 | ||
20 | 24 | ||
21 | zreladdr-$(CONFIG_SOC_IMX6Q) += 0x10008000 | 25 | zreladdr-$(CONFIG_SOC_IMX6Q) += 0x10008000 |
22 | params_phys-$(CONFIG_SOC_IMX6Q) := 0x10000100 | 26 | params_phys-$(CONFIG_SOC_IMX6Q) := 0x10000100 |
diff --git a/arch/arm/mach-imx/clock-imx6q.c b/arch/arm/mach-imx/clock-imx6q.c index e0b926dfeced..613a1b993bff 100644 --- a/arch/arm/mach-imx/clock-imx6q.c +++ b/arch/arm/mach-imx/clock-imx6q.c | |||
@@ -1139,7 +1139,7 @@ static int _clk_set_rate(struct clk *clk, unsigned long rate) | |||
1139 | return -EINVAL; | 1139 | return -EINVAL; |
1140 | 1140 | ||
1141 | max_div = ((d->bm_pred >> d->bp_pred) + 1) * | 1141 | max_div = ((d->bm_pred >> d->bp_pred) + 1) * |
1142 | ((d->bm_pred >> d->bp_pred) + 1); | 1142 | ((d->bm_podf >> d->bp_podf) + 1); |
1143 | 1143 | ||
1144 | div = parent_rate / rate; | 1144 | div = parent_rate / rate; |
1145 | if (div == 0) | 1145 | if (div == 0) |
@@ -2002,6 +2002,21 @@ int __init mx6q_clocks_init(void) | |||
2002 | clk_set_rate(&asrc_serial_clk, 1500000); | 2002 | clk_set_rate(&asrc_serial_clk, 1500000); |
2003 | clk_set_rate(&enfc_clk, 11000000); | 2003 | clk_set_rate(&enfc_clk, 11000000); |
2004 | 2004 | ||
2005 | /* | ||
2006 | * Before pinctrl API is available, we have to rely on the pad | ||
2007 | * configuration set up by bootloader. For usdhc example here, | ||
2008 | * u-boot sets up the pads for 49.5 MHz case, and we have to lower | ||
2009 | * the usdhc clock from 198 to 49.5 MHz to match the pad configuration. | ||
2010 | * | ||
2011 | * FIXME: This is should be removed after pinctrl API is available. | ||
2012 | * At that time, usdhc driver can call pinctrl API to change pad | ||
2013 | * configuration dynamically per different usdhc clock settings. | ||
2014 | */ | ||
2015 | clk_set_rate(&usdhc1_clk, 49500000); | ||
2016 | clk_set_rate(&usdhc2_clk, 49500000); | ||
2017 | clk_set_rate(&usdhc3_clk, 49500000); | ||
2018 | clk_set_rate(&usdhc4_clk, 49500000); | ||
2019 | |||
2005 | np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpt"); | 2020 | np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpt"); |
2006 | base = of_iomap(np, 0); | 2021 | base = of_iomap(np, 0); |
2007 | WARN_ON(!base); | 2022 | WARN_ON(!base); |
diff --git a/arch/arm/mach-kirkwood/cpuidle.c b/arch/arm/mach-kirkwood/cpuidle.c index 864e569f684e..7088180b018b 100644 --- a/arch/arm/mach-kirkwood/cpuidle.c +++ b/arch/arm/mach-kirkwood/cpuidle.c | |||
@@ -33,17 +33,18 @@ static DEFINE_PER_CPU(struct cpuidle_device, kirkwood_cpuidle_device); | |||
33 | 33 | ||
34 | /* Actual code that puts the SoC in different idle states */ | 34 | /* Actual code that puts the SoC in different idle states */ |
35 | static int kirkwood_enter_idle(struct cpuidle_device *dev, | 35 | static int kirkwood_enter_idle(struct cpuidle_device *dev, |
36 | struct cpuidle_state *state) | 36 | struct cpuidle_driver *drv, |
37 | int index) | ||
37 | { | 38 | { |
38 | struct timeval before, after; | 39 | struct timeval before, after; |
39 | int idle_time; | 40 | int idle_time; |
40 | 41 | ||
41 | local_irq_disable(); | 42 | local_irq_disable(); |
42 | do_gettimeofday(&before); | 43 | do_gettimeofday(&before); |
43 | if (state == &dev->states[0]) | 44 | if (index == 0) |
44 | /* Wait for interrupt state */ | 45 | /* Wait for interrupt state */ |
45 | cpu_do_idle(); | 46 | cpu_do_idle(); |
46 | else if (state == &dev->states[1]) { | 47 | else if (index == 1) { |
47 | /* | 48 | /* |
48 | * Following write will put DDR in self refresh. | 49 | * Following write will put DDR in self refresh. |
49 | * Note that we have 256 cycles before DDR puts it | 50 | * Note that we have 256 cycles before DDR puts it |
@@ -58,35 +59,40 @@ static int kirkwood_enter_idle(struct cpuidle_device *dev, | |||
58 | local_irq_enable(); | 59 | local_irq_enable(); |
59 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + | 60 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + |
60 | (after.tv_usec - before.tv_usec); | 61 | (after.tv_usec - before.tv_usec); |
61 | return idle_time; | 62 | |
63 | /* Update last residency */ | ||
64 | dev->last_residency = idle_time; | ||
65 | |||
66 | return index; | ||
62 | } | 67 | } |
63 | 68 | ||
64 | /* Initialize CPU idle by registering the idle states */ | 69 | /* Initialize CPU idle by registering the idle states */ |
65 | static int kirkwood_init_cpuidle(void) | 70 | static int kirkwood_init_cpuidle(void) |
66 | { | 71 | { |
67 | struct cpuidle_device *device; | 72 | struct cpuidle_device *device; |
68 | 73 | struct cpuidle_driver *driver = &kirkwood_idle_driver; | |
69 | cpuidle_register_driver(&kirkwood_idle_driver); | ||
70 | 74 | ||
71 | device = &per_cpu(kirkwood_cpuidle_device, smp_processor_id()); | 75 | device = &per_cpu(kirkwood_cpuidle_device, smp_processor_id()); |
72 | device->state_count = KIRKWOOD_MAX_STATES; | 76 | device->state_count = KIRKWOOD_MAX_STATES; |
77 | driver->state_count = KIRKWOOD_MAX_STATES; | ||
73 | 78 | ||
74 | /* Wait for interrupt state */ | 79 | /* Wait for interrupt state */ |
75 | device->states[0].enter = kirkwood_enter_idle; | 80 | driver->states[0].enter = kirkwood_enter_idle; |
76 | device->states[0].exit_latency = 1; | 81 | driver->states[0].exit_latency = 1; |
77 | device->states[0].target_residency = 10000; | 82 | driver->states[0].target_residency = 10000; |
78 | device->states[0].flags = CPUIDLE_FLAG_TIME_VALID; | 83 | driver->states[0].flags = CPUIDLE_FLAG_TIME_VALID; |
79 | strcpy(device->states[0].name, "WFI"); | 84 | strcpy(driver->states[0].name, "WFI"); |
80 | strcpy(device->states[0].desc, "Wait for interrupt"); | 85 | strcpy(driver->states[0].desc, "Wait for interrupt"); |
81 | 86 | ||
82 | /* Wait for interrupt and DDR self refresh state */ | 87 | /* Wait for interrupt and DDR self refresh state */ |
83 | device->states[1].enter = kirkwood_enter_idle; | 88 | driver->states[1].enter = kirkwood_enter_idle; |
84 | device->states[1].exit_latency = 10; | 89 | driver->states[1].exit_latency = 10; |
85 | device->states[1].target_residency = 10000; | 90 | driver->states[1].target_residency = 10000; |
86 | device->states[1].flags = CPUIDLE_FLAG_TIME_VALID; | 91 | driver->states[1].flags = CPUIDLE_FLAG_TIME_VALID; |
87 | strcpy(device->states[1].name, "DDR SR"); | 92 | strcpy(driver->states[1].name, "DDR SR"); |
88 | strcpy(device->states[1].desc, "WFI and DDR Self Refresh"); | 93 | strcpy(driver->states[1].desc, "WFI and DDR Self Refresh"); |
89 | 94 | ||
95 | cpuidle_register_driver(&kirkwood_idle_driver); | ||
90 | if (cpuidle_register_device(device)) { | 96 | if (cpuidle_register_device(device)) { |
91 | printk(KERN_ERR "kirkwood_init_cpuidle: Failed registering\n"); | 97 | printk(KERN_ERR "kirkwood_init_cpuidle: Failed registering\n"); |
92 | return -EIO; | 98 | return -EIO; |
diff --git a/arch/arm/mach-mmp/aspenite.c b/arch/arm/mach-mmp/aspenite.c index edcbadad31c1..f0d236dfb02b 100644 --- a/arch/arm/mach-mmp/aspenite.c +++ b/arch/arm/mach-mmp/aspenite.c | |||
@@ -167,8 +167,9 @@ static struct mtd_partition aspenite_nand_partitions[] = { | |||
167 | 167 | ||
168 | static struct pxa3xx_nand_platform_data aspenite_nand_info = { | 168 | static struct pxa3xx_nand_platform_data aspenite_nand_info = { |
169 | .enable_arbiter = 1, | 169 | .enable_arbiter = 1, |
170 | .parts = aspenite_nand_partitions, | 170 | .num_cs = 1, |
171 | .nr_parts = ARRAY_SIZE(aspenite_nand_partitions), | 171 | .parts[0] = aspenite_nand_partitions, |
172 | .nr_parts[0] = ARRAY_SIZE(aspenite_nand_partitions), | ||
172 | }; | 173 | }; |
173 | 174 | ||
174 | static struct i2c_board_info aspenite_i2c_info[] __initdata = { | 175 | static struct i2c_board_info aspenite_i2c_info[] __initdata = { |
diff --git a/arch/arm/mach-msm/Makefile b/arch/arm/mach-msm/Makefile index 4285dfd80b6f..4ad3969b9881 100644 --- a/arch/arm/mach-msm/Makefile +++ b/arch/arm/mach-msm/Makefile | |||
@@ -15,6 +15,8 @@ obj-$(CONFIG_MSM_SMD) += smd.o smd_debug.o | |||
15 | obj-$(CONFIG_MSM_SMD) += last_radio_log.o | 15 | obj-$(CONFIG_MSM_SMD) += last_radio_log.o |
16 | obj-$(CONFIG_MSM_SCM) += scm.o scm-boot.o | 16 | obj-$(CONFIG_MSM_SCM) += scm.o scm-boot.o |
17 | 17 | ||
18 | CFLAGS_scm.o :=$(call as-instr,.arch_extension sec,-DREQUIRES_SEC=1) | ||
19 | |||
18 | obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o | 20 | obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o |
19 | obj-$(CONFIG_SMP) += headsmp.o platsmp.o | 21 | obj-$(CONFIG_SMP) += headsmp.o platsmp.o |
20 | 22 | ||
diff --git a/arch/arm/mach-msm/board-msm7x30.c b/arch/arm/mach-msm/board-msm7x30.c index 71de5062c71e..db81ed531031 100644 --- a/arch/arm/mach-msm/board-msm7x30.c +++ b/arch/arm/mach-msm/board-msm7x30.c | |||
@@ -42,8 +42,8 @@ | |||
42 | 42 | ||
43 | extern struct sys_timer msm_timer; | 43 | extern struct sys_timer msm_timer; |
44 | 44 | ||
45 | static void __init msm7x30_fixup(struct machine_desc *desc, struct tag *tag, | 45 | static void __init msm7x30_fixup(struct tag *tag, char **cmdline, |
46 | char **cmdline, struct meminfo *mi) | 46 | struct meminfo *mi) |
47 | { | 47 | { |
48 | for (; tag->hdr.size; tag = tag_next(tag)) | 48 | for (; tag->hdr.size; tag = tag_next(tag)) |
49 | if (tag->hdr.tag == ATAG_MEM && tag->u.mem.start == 0x200000) { | 49 | if (tag->hdr.tag == ATAG_MEM && tag->u.mem.start == 0x200000) { |
diff --git a/arch/arm/mach-msm/board-msm8960.c b/arch/arm/mach-msm/board-msm8960.c index b04468e7d00e..6dc1cbd2a595 100644 --- a/arch/arm/mach-msm/board-msm8960.c +++ b/arch/arm/mach-msm/board-msm8960.c | |||
@@ -32,8 +32,8 @@ | |||
32 | 32 | ||
33 | #include "devices.h" | 33 | #include "devices.h" |
34 | 34 | ||
35 | static void __init msm8960_fixup(struct machine_desc *desc, struct tag *tag, | 35 | static void __init msm8960_fixup(struct tag *tag, char **cmdline, |
36 | char **cmdline, struct meminfo *mi) | 36 | struct meminfo *mi) |
37 | { | 37 | { |
38 | for (; tag->hdr.size; tag = tag_next(tag)) | 38 | for (; tag->hdr.size; tag = tag_next(tag)) |
39 | if (tag->hdr.tag == ATAG_MEM && | 39 | if (tag->hdr.tag == ATAG_MEM && |
diff --git a/arch/arm/mach-msm/board-msm8x60.c b/arch/arm/mach-msm/board-msm8x60.c index cf38e2284fa9..44bf71688373 100644 --- a/arch/arm/mach-msm/board-msm8x60.c +++ b/arch/arm/mach-msm/board-msm8x60.c | |||
@@ -28,8 +28,8 @@ | |||
28 | #include <mach/board.h> | 28 | #include <mach/board.h> |
29 | #include <mach/msm_iomap.h> | 29 | #include <mach/msm_iomap.h> |
30 | 30 | ||
31 | static void __init msm8x60_fixup(struct machine_desc *desc, struct tag *tag, | 31 | static void __init msm8x60_fixup(struct tag *tag, char **cmdline, |
32 | char **cmdline, struct meminfo *mi) | 32 | struct meminfo *mi) |
33 | { | 33 | { |
34 | for (; tag->hdr.size; tag = tag_next(tag)) | 34 | for (; tag->hdr.size; tag = tag_next(tag)) |
35 | if (tag->hdr.tag == ATAG_MEM && | 35 | if (tag->hdr.tag == ATAG_MEM && |
diff --git a/arch/arm/mach-msm/scm.c b/arch/arm/mach-msm/scm.c index 232f97a04504..bafabb502580 100644 --- a/arch/arm/mach-msm/scm.c +++ b/arch/arm/mach-msm/scm.c | |||
@@ -180,6 +180,9 @@ static u32 smc(u32 cmd_addr) | |||
180 | __asmeq("%1", "r0") | 180 | __asmeq("%1", "r0") |
181 | __asmeq("%2", "r1") | 181 | __asmeq("%2", "r1") |
182 | __asmeq("%3", "r2") | 182 | __asmeq("%3", "r2") |
183 | #ifdef REQUIRES_SEC | ||
184 | ".arch_extension sec\n" | ||
185 | #endif | ||
183 | "smc #0 @ switch to secure world\n" | 186 | "smc #0 @ switch to secure world\n" |
184 | : "=r" (r0) | 187 | : "=r" (r0) |
185 | : "r" (r0), "r" (r1), "r" (r2) | 188 | : "r" (r0), "r" (r1), "r" (r2) |
diff --git a/arch/arm/mach-mx5/clock-mx51-mx53.c b/arch/arm/mach-mx5/clock-mx51-mx53.c index 2aacf41c48e7..4cb276977190 100644 --- a/arch/arm/mach-mx5/clock-mx51-mx53.c +++ b/arch/arm/mach-mx5/clock-mx51-mx53.c | |||
@@ -1281,9 +1281,9 @@ DEFINE_CLOCK(gpt_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG9_OFFSET, | |||
1281 | NULL, NULL, &ipg_clk, &gpt_ipg_clk); | 1281 | NULL, NULL, &ipg_clk, &gpt_ipg_clk); |
1282 | 1282 | ||
1283 | DEFINE_CLOCK(pwm1_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG6_OFFSET, | 1283 | DEFINE_CLOCK(pwm1_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG6_OFFSET, |
1284 | NULL, NULL, &ipg_clk, NULL); | 1284 | NULL, NULL, &ipg_perclk, NULL); |
1285 | DEFINE_CLOCK(pwm2_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG8_OFFSET, | 1285 | DEFINE_CLOCK(pwm2_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG8_OFFSET, |
1286 | NULL, NULL, &ipg_clk, NULL); | 1286 | NULL, NULL, &ipg_perclk, NULL); |
1287 | 1287 | ||
1288 | /* I2C */ | 1288 | /* I2C */ |
1289 | DEFINE_CLOCK(i2c1_clk, 0, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG9_OFFSET, | 1289 | DEFINE_CLOCK(i2c1_clk, 0, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG9_OFFSET, |
@@ -1634,6 +1634,7 @@ int __init mx53_clocks_init(unsigned long ckil, unsigned long osc, | |||
1634 | return 0; | 1634 | return 0; |
1635 | } | 1635 | } |
1636 | 1636 | ||
1637 | #ifdef CONFIG_OF | ||
1637 | static void __init clk_get_freq_dt(unsigned long *ckil, unsigned long *osc, | 1638 | static void __init clk_get_freq_dt(unsigned long *ckil, unsigned long *osc, |
1638 | unsigned long *ckih1, unsigned long *ckih2) | 1639 | unsigned long *ckih1, unsigned long *ckih2) |
1639 | { | 1640 | { |
@@ -1671,3 +1672,4 @@ int __init mx53_clocks_init_dt(void) | |||
1671 | clk_get_freq_dt(&ckil, &osc, &ckih1, &ckih2); | 1672 | clk_get_freq_dt(&ckil, &osc, &ckih1, &ckih2); |
1672 | return mx53_clocks_init(ckil, osc, ckih1, ckih2); | 1673 | return mx53_clocks_init(ckil, osc, ckih1, ckih2); |
1673 | } | 1674 | } |
1675 | #endif | ||
diff --git a/arch/arm/mach-mxs/mach-mx28evk.c b/arch/arm/mach-mxs/mach-mx28evk.c index ac2316d53d3c..064ec5abaa55 100644 --- a/arch/arm/mach-mxs/mach-mx28evk.c +++ b/arch/arm/mach-mxs/mach-mx28evk.c | |||
@@ -471,7 +471,8 @@ static void __init mx28evk_init(void) | |||
471 | "mmc0-slot-power"); | 471 | "mmc0-slot-power"); |
472 | if (ret) | 472 | if (ret) |
473 | pr_warn("failed to request gpio mmc0-slot-power: %d\n", ret); | 473 | pr_warn("failed to request gpio mmc0-slot-power: %d\n", ret); |
474 | mx28_add_mxs_mmc(0, &mx28evk_mmc_pdata[0]); | 474 | else |
475 | mx28_add_mxs_mmc(0, &mx28evk_mmc_pdata[0]); | ||
475 | 476 | ||
476 | ret = gpio_request_one(MX28EVK_MMC1_SLOT_POWER, GPIOF_OUT_INIT_LOW, | 477 | ret = gpio_request_one(MX28EVK_MMC1_SLOT_POWER, GPIOF_OUT_INIT_LOW, |
477 | "mmc1-slot-power"); | 478 | "mmc1-slot-power"); |
@@ -480,7 +481,6 @@ static void __init mx28evk_init(void) | |||
480 | else | 481 | else |
481 | mx28_add_mxs_mmc(1, &mx28evk_mmc_pdata[1]); | 482 | mx28_add_mxs_mmc(1, &mx28evk_mmc_pdata[1]); |
482 | 483 | ||
483 | mx28_add_mxs_mmc(1, &mx28evk_mmc_pdata[1]); | ||
484 | mx28_add_rtc_stmp3xxx(); | 484 | mx28_add_rtc_stmp3xxx(); |
485 | 485 | ||
486 | gpio_led_register_device(0, &mx28evk_led_data); | 486 | gpio_led_register_device(0, &mx28evk_led_data); |
diff --git a/arch/arm/mach-omap1/board-palmz71.c b/arch/arm/mach-omap1/board-palmz71.c index c6fe61dfe856..42061573e380 100644 --- a/arch/arm/mach-omap1/board-palmz71.c +++ b/arch/arm/mach-omap1/board-palmz71.c | |||
@@ -42,7 +42,6 @@ | |||
42 | #include <plat/irda.h> | 42 | #include <plat/irda.h> |
43 | #include <plat/keypad.h> | 43 | #include <plat/keypad.h> |
44 | #include <plat/common.h> | 44 | #include <plat/common.h> |
45 | #include <plat/omap-alsa.h> | ||
46 | 45 | ||
47 | #include <linux/spi/spi.h> | 46 | #include <linux/spi/spi.h> |
48 | #include <linux/spi/ads7846.h> | 47 | #include <linux/spi/ads7846.h> |
diff --git a/arch/arm/mach-omap1/pm.c b/arch/arm/mach-omap1/pm.c index 495b3987d461..89ea20ca0ccc 100644 --- a/arch/arm/mach-omap1/pm.c +++ b/arch/arm/mach-omap1/pm.c | |||
@@ -116,7 +116,7 @@ void omap1_pm_idle(void) | |||
116 | return; | 116 | return; |
117 | } | 117 | } |
118 | 118 | ||
119 | #ifdef CONFIG_OMAP_MPU_TIMER | 119 | #if defined(CONFIG_OMAP_MPU_TIMER) && !defined(CONFIG_OMAP_DM_TIMER) |
120 | #warning Enable 32kHz OS timer in order to allow sleep states in idle | 120 | #warning Enable 32kHz OS timer in order to allow sleep states in idle |
121 | use_idlect1 = use_idlect1 & ~(1 << 9); | 121 | use_idlect1 = use_idlect1 & ~(1 << 9); |
122 | #else | 122 | #else |
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c index 42918940c530..90154e411da0 100644 --- a/arch/arm/mach-omap2/board-devkit8000.c +++ b/arch/arm/mach-omap2/board-devkit8000.c | |||
@@ -226,7 +226,6 @@ static int devkit8000_twl_gpio_setup(struct device *dev, | |||
226 | { | 226 | { |
227 | int ret; | 227 | int ret; |
228 | 228 | ||
229 | omap_mux_init_gpio(29, OMAP_PIN_INPUT); | ||
230 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ | 229 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ |
231 | mmc[0].gpio_cd = gpio + 0; | 230 | mmc[0].gpio_cd = gpio + 0; |
232 | omap2_hsmmc_init(mmc); | 231 | omap2_hsmmc_init(mmc); |
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c index 0cc9094e5ee0..fb55fa3dad5a 100644 --- a/arch/arm/mach-omap2/board-generic.c +++ b/arch/arm/mach-omap2/board-generic.c | |||
@@ -28,6 +28,7 @@ | |||
28 | * XXX: Still needed to boot until the i2c & twl driver is adapted to | 28 | * XXX: Still needed to boot until the i2c & twl driver is adapted to |
29 | * device-tree | 29 | * device-tree |
30 | */ | 30 | */ |
31 | #ifdef CONFIG_ARCH_OMAP4 | ||
31 | static struct twl4030_platform_data sdp4430_twldata = { | 32 | static struct twl4030_platform_data sdp4430_twldata = { |
32 | .irq_base = TWL6030_IRQ_BASE, | 33 | .irq_base = TWL6030_IRQ_BASE, |
33 | .irq_end = TWL6030_IRQ_END, | 34 | .irq_end = TWL6030_IRQ_END, |
@@ -37,7 +38,9 @@ static void __init omap4_i2c_init(void) | |||
37 | { | 38 | { |
38 | omap4_pmic_init("twl6030", &sdp4430_twldata); | 39 | omap4_pmic_init("twl6030", &sdp4430_twldata); |
39 | } | 40 | } |
41 | #endif | ||
40 | 42 | ||
43 | #ifdef CONFIG_ARCH_OMAP3 | ||
41 | static struct twl4030_platform_data beagle_twldata = { | 44 | static struct twl4030_platform_data beagle_twldata = { |
42 | .irq_base = TWL4030_IRQ_BASE, | 45 | .irq_base = TWL4030_IRQ_BASE, |
43 | .irq_end = TWL4030_IRQ_END, | 46 | .irq_end = TWL4030_IRQ_END, |
@@ -47,6 +50,7 @@ static void __init omap3_i2c_init(void) | |||
47 | { | 50 | { |
48 | omap3_pmic_init("twl4030", &beagle_twldata); | 51 | omap3_pmic_init("twl4030", &beagle_twldata); |
49 | } | 52 | } |
53 | #endif | ||
50 | 54 | ||
51 | static struct of_device_id omap_dt_match_table[] __initdata = { | 55 | static struct of_device_id omap_dt_match_table[] __initdata = { |
52 | { .compatible = "simple-bus", }, | 56 | { .compatible = "simple-bus", }, |
@@ -72,17 +76,21 @@ static void __init omap_generic_init(void) | |||
72 | of_platform_populate(NULL, omap_dt_match_table, NULL, NULL); | 76 | of_platform_populate(NULL, omap_dt_match_table, NULL, NULL); |
73 | } | 77 | } |
74 | 78 | ||
79 | #ifdef CONFIG_ARCH_OMAP4 | ||
75 | static void __init omap4_init(void) | 80 | static void __init omap4_init(void) |
76 | { | 81 | { |
77 | omap4_i2c_init(); | 82 | omap4_i2c_init(); |
78 | omap_generic_init(); | 83 | omap_generic_init(); |
79 | } | 84 | } |
85 | #endif | ||
80 | 86 | ||
87 | #ifdef CONFIG_ARCH_OMAP3 | ||
81 | static void __init omap3_init(void) | 88 | static void __init omap3_init(void) |
82 | { | 89 | { |
83 | omap3_i2c_init(); | 90 | omap3_i2c_init(); |
84 | omap_generic_init(); | 91 | omap_generic_init(); |
85 | } | 92 | } |
93 | #endif | ||
86 | 94 | ||
87 | #if defined(CONFIG_SOC_OMAP2420) | 95 | #if defined(CONFIG_SOC_OMAP2420) |
88 | static const char *omap242x_boards_compat[] __initdata = { | 96 | static const char *omap242x_boards_compat[] __initdata = { |
diff --git a/arch/arm/mach-omap2/board-h4.c b/arch/arm/mach-omap2/board-h4.c index c12666ee7017..8b351d92a1cc 100644 --- a/arch/arm/mach-omap2/board-h4.c +++ b/arch/arm/mach-omap2/board-h4.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <linux/err.h> | 25 | #include <linux/err.h> |
26 | #include <linux/clk.h> | 26 | #include <linux/clk.h> |
27 | #include <linux/io.h> | 27 | #include <linux/io.h> |
28 | #include <linux/input/matrix_keypad.h> | ||
28 | 29 | ||
29 | #include <mach/hardware.h> | 30 | #include <mach/hardware.h> |
30 | #include <asm/mach-types.h> | 31 | #include <asm/mach-types.h> |
@@ -34,7 +35,6 @@ | |||
34 | #include <plat/usb.h> | 35 | #include <plat/usb.h> |
35 | #include <plat/board.h> | 36 | #include <plat/board.h> |
36 | #include <plat/common.h> | 37 | #include <plat/common.h> |
37 | #include <plat/keypad.h> | ||
38 | #include <plat/menelaus.h> | 38 | #include <plat/menelaus.h> |
39 | #include <plat/dma.h> | 39 | #include <plat/dma.h> |
40 | #include <plat/gpmc.h> | 40 | #include <plat/gpmc.h> |
@@ -50,10 +50,8 @@ | |||
50 | 50 | ||
51 | #define H4_ETHR_GPIO_IRQ 92 | 51 | #define H4_ETHR_GPIO_IRQ 92 |
52 | 52 | ||
53 | static unsigned int row_gpios[6] = { 88, 89, 124, 11, 6, 96 }; | 53 | #if defined(CONFIG_KEYBOARD_MATRIX) || defined(CONFIG_KEYBOARD_MATRIX_MODULE) |
54 | static unsigned int col_gpios[7] = { 90, 91, 100, 36, 12, 97, 98 }; | 54 | static const uint32_t board_matrix_keys[] = { |
55 | |||
56 | static const unsigned int h4_keymap[] = { | ||
57 | KEY(0, 0, KEY_LEFT), | 55 | KEY(0, 0, KEY_LEFT), |
58 | KEY(1, 0, KEY_RIGHT), | 56 | KEY(1, 0, KEY_RIGHT), |
59 | KEY(2, 0, KEY_A), | 57 | KEY(2, 0, KEY_A), |
@@ -86,6 +84,71 @@ static const unsigned int h4_keymap[] = { | |||
86 | KEY(4, 5, KEY_ENTER), | 84 | KEY(4, 5, KEY_ENTER), |
87 | }; | 85 | }; |
88 | 86 | ||
87 | static const struct matrix_keymap_data board_keymap_data = { | ||
88 | .keymap = board_matrix_keys, | ||
89 | .keymap_size = ARRAY_SIZE(board_matrix_keys), | ||
90 | }; | ||
91 | |||
92 | static unsigned int board_keypad_row_gpios[] = { | ||
93 | 88, 89, 124, 11, 6, 96 | ||
94 | }; | ||
95 | |||
96 | static unsigned int board_keypad_col_gpios[] = { | ||
97 | 90, 91, 100, 36, 12, 97, 98 | ||
98 | }; | ||
99 | |||
100 | static struct matrix_keypad_platform_data board_keypad_platform_data = { | ||
101 | .keymap_data = &board_keymap_data, | ||
102 | .row_gpios = board_keypad_row_gpios, | ||
103 | .num_row_gpios = ARRAY_SIZE(board_keypad_row_gpios), | ||
104 | .col_gpios = board_keypad_col_gpios, | ||
105 | .num_col_gpios = ARRAY_SIZE(board_keypad_col_gpios), | ||
106 | .active_low = 1, | ||
107 | |||
108 | .debounce_ms = 20, | ||
109 | .col_scan_delay_us = 5, | ||
110 | }; | ||
111 | |||
112 | static struct platform_device board_keyboard = { | ||
113 | .name = "matrix-keypad", | ||
114 | .id = -1, | ||
115 | .dev = { | ||
116 | .platform_data = &board_keypad_platform_data, | ||
117 | }, | ||
118 | }; | ||
119 | static void __init board_mkp_init(void) | ||
120 | { | ||
121 | omap_mux_init_gpio(88, OMAP_PULL_ENA | OMAP_PULL_UP); | ||
122 | omap_mux_init_gpio(89, OMAP_PULL_ENA | OMAP_PULL_UP); | ||
123 | omap_mux_init_gpio(124, OMAP_PULL_ENA | OMAP_PULL_UP); | ||
124 | omap_mux_init_signal("mcbsp2_dr.gpio_11", OMAP_PULL_ENA | OMAP_PULL_UP); | ||
125 | if (omap_has_menelaus()) { | ||
126 | omap_mux_init_signal("sdrc_a14.gpio0", | ||
127 | OMAP_PULL_ENA | OMAP_PULL_UP); | ||
128 | omap_mux_init_signal("vlynq_rx0.gpio_15", 0); | ||
129 | omap_mux_init_signal("gpio_98", 0); | ||
130 | board_keypad_row_gpios[5] = 0; | ||
131 | board_keypad_col_gpios[2] = 15; | ||
132 | board_keypad_col_gpios[6] = 18; | ||
133 | } else { | ||
134 | omap_mux_init_signal("gpio_96", OMAP_PULL_ENA | OMAP_PULL_UP); | ||
135 | omap_mux_init_signal("gpio_100", 0); | ||
136 | omap_mux_init_signal("gpio_98", 0); | ||
137 | } | ||
138 | omap_mux_init_signal("gpio_90", 0); | ||
139 | omap_mux_init_signal("gpio_91", 0); | ||
140 | omap_mux_init_signal("gpio_36", 0); | ||
141 | omap_mux_init_signal("mcbsp2_clkx.gpio_12", 0); | ||
142 | omap_mux_init_signal("gpio_97", 0); | ||
143 | |||
144 | platform_device_register(&board_keyboard); | ||
145 | } | ||
146 | #else | ||
147 | static inline void board_mkp_init(void) | ||
148 | { | ||
149 | } | ||
150 | #endif | ||
151 | |||
89 | static struct mtd_partition h4_partitions[] = { | 152 | static struct mtd_partition h4_partitions[] = { |
90 | /* bootloader (U-Boot, etc) in first sector */ | 153 | /* bootloader (U-Boot, etc) in first sector */ |
91 | { | 154 | { |
@@ -137,31 +200,8 @@ static struct platform_device h4_flash_device = { | |||
137 | .resource = &h4_flash_resource, | 200 | .resource = &h4_flash_resource, |
138 | }; | 201 | }; |
139 | 202 | ||
140 | static const struct matrix_keymap_data h4_keymap_data = { | ||
141 | .keymap = h4_keymap, | ||
142 | .keymap_size = ARRAY_SIZE(h4_keymap), | ||
143 | }; | ||
144 | |||
145 | static struct omap_kp_platform_data h4_kp_data = { | ||
146 | .rows = 6, | ||
147 | .cols = 7, | ||
148 | .keymap_data = &h4_keymap_data, | ||
149 | .rep = true, | ||
150 | .row_gpios = row_gpios, | ||
151 | .col_gpios = col_gpios, | ||
152 | }; | ||
153 | |||
154 | static struct platform_device h4_kp_device = { | ||
155 | .name = "omap-keypad", | ||
156 | .id = -1, | ||
157 | .dev = { | ||
158 | .platform_data = &h4_kp_data, | ||
159 | }, | ||
160 | }; | ||
161 | |||
162 | static struct platform_device *h4_devices[] __initdata = { | 203 | static struct platform_device *h4_devices[] __initdata = { |
163 | &h4_flash_device, | 204 | &h4_flash_device, |
164 | &h4_kp_device, | ||
165 | }; | 205 | }; |
166 | 206 | ||
167 | static struct panel_generic_dpi_data h4_panel_data = { | 207 | static struct panel_generic_dpi_data h4_panel_data = { |
@@ -336,31 +376,7 @@ static void __init omap_h4_init(void) | |||
336 | * if not needed. | 376 | * if not needed. |
337 | */ | 377 | */ |
338 | 378 | ||
339 | #if defined(CONFIG_KEYBOARD_OMAP) || defined(CONFIG_KEYBOARD_OMAP_MODULE) | 379 | board_mkp_init(); |
340 | omap_mux_init_gpio(88, OMAP_PULL_ENA | OMAP_PULL_UP); | ||
341 | omap_mux_init_gpio(89, OMAP_PULL_ENA | OMAP_PULL_UP); | ||
342 | omap_mux_init_gpio(124, OMAP_PULL_ENA | OMAP_PULL_UP); | ||
343 | omap_mux_init_signal("mcbsp2_dr.gpio_11", OMAP_PULL_ENA | OMAP_PULL_UP); | ||
344 | if (omap_has_menelaus()) { | ||
345 | omap_mux_init_signal("sdrc_a14.gpio0", | ||
346 | OMAP_PULL_ENA | OMAP_PULL_UP); | ||
347 | omap_mux_init_signal("vlynq_rx0.gpio_15", 0); | ||
348 | omap_mux_init_signal("gpio_98", 0); | ||
349 | row_gpios[5] = 0; | ||
350 | col_gpios[2] = 15; | ||
351 | col_gpios[6] = 18; | ||
352 | } else { | ||
353 | omap_mux_init_signal("gpio_96", OMAP_PULL_ENA | OMAP_PULL_UP); | ||
354 | omap_mux_init_signal("gpio_100", 0); | ||
355 | omap_mux_init_signal("gpio_98", 0); | ||
356 | } | ||
357 | omap_mux_init_signal("gpio_90", 0); | ||
358 | omap_mux_init_signal("gpio_91", 0); | ||
359 | omap_mux_init_signal("gpio_36", 0); | ||
360 | omap_mux_init_signal("mcbsp2_clkx.gpio_12", 0); | ||
361 | omap_mux_init_signal("gpio_97", 0); | ||
362 | #endif | ||
363 | |||
364 | i2c_register_board_info(1, h4_i2c_board_info, | 380 | i2c_register_board_info(1, h4_i2c_board_info, |
365 | ARRAY_SIZE(h4_i2c_board_info)); | 381 | ARRAY_SIZE(h4_i2c_board_info)); |
366 | 382 | ||
diff --git a/arch/arm/mach-omap2/clkt_dpll.c b/arch/arm/mach-omap2/clkt_dpll.c index bcffee001bfa..e069a9be93df 100644 --- a/arch/arm/mach-omap2/clkt_dpll.c +++ b/arch/arm/mach-omap2/clkt_dpll.c | |||
@@ -46,10 +46,19 @@ | |||
46 | (DPLL_SCALE_FACTOR / DPLL_SCALE_BASE)) | 46 | (DPLL_SCALE_FACTOR / DPLL_SCALE_BASE)) |
47 | 47 | ||
48 | /* DPLL valid Fint frequency band limits - from 34xx TRM Section 4.7.6.2 */ | 48 | /* DPLL valid Fint frequency band limits - from 34xx TRM Section 4.7.6.2 */ |
49 | #define DPLL_FINT_BAND1_MIN 750000 | 49 | #define OMAP3430_DPLL_FINT_BAND1_MIN 750000 |
50 | #define DPLL_FINT_BAND1_MAX 2100000 | 50 | #define OMAP3430_DPLL_FINT_BAND1_MAX 2100000 |
51 | #define DPLL_FINT_BAND2_MIN 7500000 | 51 | #define OMAP3430_DPLL_FINT_BAND2_MIN 7500000 |
52 | #define DPLL_FINT_BAND2_MAX 21000000 | 52 | #define OMAP3430_DPLL_FINT_BAND2_MAX 21000000 |
53 | |||
54 | /* | ||
55 | * DPLL valid Fint frequency range for OMAP36xx and OMAP4xxx. | ||
56 | * From device data manual section 4.3 "DPLL and DLL Specifications". | ||
57 | */ | ||
58 | #define OMAP3PLUS_DPLL_FINT_JTYPE_MIN 500000 | ||
59 | #define OMAP3PLUS_DPLL_FINT_JTYPE_MAX 2500000 | ||
60 | #define OMAP3PLUS_DPLL_FINT_MIN 32000 | ||
61 | #define OMAP3PLUS_DPLL_FINT_MAX 52000000 | ||
53 | 62 | ||
54 | /* _dpll_test_fint() return codes */ | 63 | /* _dpll_test_fint() return codes */ |
55 | #define DPLL_FINT_UNDERFLOW -1 | 64 | #define DPLL_FINT_UNDERFLOW -1 |
@@ -71,33 +80,43 @@ | |||
71 | static int _dpll_test_fint(struct clk *clk, u8 n) | 80 | static int _dpll_test_fint(struct clk *clk, u8 n) |
72 | { | 81 | { |
73 | struct dpll_data *dd; | 82 | struct dpll_data *dd; |
74 | long fint; | 83 | long fint, fint_min, fint_max; |
75 | int ret = 0; | 84 | int ret = 0; |
76 | 85 | ||
77 | dd = clk->dpll_data; | 86 | dd = clk->dpll_data; |
78 | 87 | ||
79 | /* DPLL divider must result in a valid jitter correction val */ | 88 | /* DPLL divider must result in a valid jitter correction val */ |
80 | fint = clk->parent->rate / n; | 89 | fint = clk->parent->rate / n; |
81 | if (fint < DPLL_FINT_BAND1_MIN) { | ||
82 | 90 | ||
91 | if (cpu_is_omap24xx()) { | ||
92 | /* Should not be called for OMAP2, so warn if it is called */ | ||
93 | WARN(1, "No fint limits available for OMAP2!\n"); | ||
94 | return DPLL_FINT_INVALID; | ||
95 | } else if (cpu_is_omap3430()) { | ||
96 | fint_min = OMAP3430_DPLL_FINT_BAND1_MIN; | ||
97 | fint_max = OMAP3430_DPLL_FINT_BAND2_MAX; | ||
98 | } else if (dd->flags & DPLL_J_TYPE) { | ||
99 | fint_min = OMAP3PLUS_DPLL_FINT_JTYPE_MIN; | ||
100 | fint_max = OMAP3PLUS_DPLL_FINT_JTYPE_MAX; | ||
101 | } else { | ||
102 | fint_min = OMAP3PLUS_DPLL_FINT_MIN; | ||
103 | fint_max = OMAP3PLUS_DPLL_FINT_MAX; | ||
104 | } | ||
105 | |||
106 | if (fint < fint_min) { | ||
83 | pr_debug("rejecting n=%d due to Fint failure, " | 107 | pr_debug("rejecting n=%d due to Fint failure, " |
84 | "lowering max_divider\n", n); | 108 | "lowering max_divider\n", n); |
85 | dd->max_divider = n; | 109 | dd->max_divider = n; |
86 | ret = DPLL_FINT_UNDERFLOW; | 110 | ret = DPLL_FINT_UNDERFLOW; |
87 | 111 | } else if (fint > fint_max) { | |
88 | } else if (fint > DPLL_FINT_BAND1_MAX && | ||
89 | fint < DPLL_FINT_BAND2_MIN) { | ||
90 | |||
91 | pr_debug("rejecting n=%d due to Fint failure\n", n); | ||
92 | ret = DPLL_FINT_INVALID; | ||
93 | |||
94 | } else if (fint > DPLL_FINT_BAND2_MAX) { | ||
95 | |||
96 | pr_debug("rejecting n=%d due to Fint failure, " | 112 | pr_debug("rejecting n=%d due to Fint failure, " |
97 | "boosting min_divider\n", n); | 113 | "boosting min_divider\n", n); |
98 | dd->min_divider = n; | 114 | dd->min_divider = n; |
99 | ret = DPLL_FINT_INVALID; | 115 | ret = DPLL_FINT_INVALID; |
100 | 116 | } else if (cpu_is_omap3430() && fint > OMAP3430_DPLL_FINT_BAND1_MAX && | |
117 | fint < OMAP3430_DPLL_FINT_BAND2_MIN) { | ||
118 | pr_debug("rejecting n=%d due to Fint failure\n", n); | ||
119 | ret = DPLL_FINT_INVALID; | ||
101 | } | 120 | } |
102 | 121 | ||
103 | return ret; | 122 | return ret; |
diff --git a/arch/arm/mach-omap2/clock.h b/arch/arm/mach-omap2/clock.h index 48ac568881bd..2311bc217226 100644 --- a/arch/arm/mach-omap2/clock.h +++ b/arch/arm/mach-omap2/clock.h | |||
@@ -66,6 +66,8 @@ void omap3_noncore_dpll_disable(struct clk *clk); | |||
66 | int omap4_dpllmx_gatectrl_read(struct clk *clk); | 66 | int omap4_dpllmx_gatectrl_read(struct clk *clk); |
67 | void omap4_dpllmx_allow_gatectrl(struct clk *clk); | 67 | void omap4_dpllmx_allow_gatectrl(struct clk *clk); |
68 | void omap4_dpllmx_deny_gatectrl(struct clk *clk); | 68 | void omap4_dpllmx_deny_gatectrl(struct clk *clk); |
69 | long omap4_dpll_regm4xen_round_rate(struct clk *clk, unsigned long target_rate); | ||
70 | unsigned long omap4_dpll_regm4xen_recalc(struct clk *clk); | ||
69 | 71 | ||
70 | #ifdef CONFIG_OMAP_RESET_CLOCKS | 72 | #ifdef CONFIG_OMAP_RESET_CLOCKS |
71 | void omap2_clk_disable_unused(struct clk *clk); | 73 | void omap2_clk_disable_unused(struct clk *clk); |
diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c index 14a6277dd184..61ad3855f10a 100644 --- a/arch/arm/mach-omap2/clock2420_data.c +++ b/arch/arm/mach-omap2/clock2420_data.c | |||
@@ -1898,18 +1898,6 @@ static struct omap_clk omap2420_clks[] = { | |||
1898 | CLK(NULL, "pka_ick", &pka_ick, CK_242X), | 1898 | CLK(NULL, "pka_ick", &pka_ick, CK_242X), |
1899 | CLK(NULL, "usb_fck", &usb_fck, CK_242X), | 1899 | CLK(NULL, "usb_fck", &usb_fck, CK_242X), |
1900 | CLK("musb-hdrc", "fck", &osc_ck, CK_242X), | 1900 | CLK("musb-hdrc", "fck", &osc_ck, CK_242X), |
1901 | CLK("omap_timer.1", "fck", &gpt1_fck, CK_242X), | ||
1902 | CLK("omap_timer.2", "fck", &gpt2_fck, CK_242X), | ||
1903 | CLK("omap_timer.3", "fck", &gpt3_fck, CK_242X), | ||
1904 | CLK("omap_timer.4", "fck", &gpt4_fck, CK_242X), | ||
1905 | CLK("omap_timer.5", "fck", &gpt5_fck, CK_242X), | ||
1906 | CLK("omap_timer.6", "fck", &gpt6_fck, CK_242X), | ||
1907 | CLK("omap_timer.7", "fck", &gpt7_fck, CK_242X), | ||
1908 | CLK("omap_timer.8", "fck", &gpt8_fck, CK_242X), | ||
1909 | CLK("omap_timer.9", "fck", &gpt9_fck, CK_242X), | ||
1910 | CLK("omap_timer.10", "fck", &gpt10_fck, CK_242X), | ||
1911 | CLK("omap_timer.11", "fck", &gpt11_fck, CK_242X), | ||
1912 | CLK("omap_timer.12", "fck", &gpt12_fck, CK_242X), | ||
1913 | CLK("omap_timer.1", "32k_ck", &func_32k_ck, CK_243X), | 1901 | CLK("omap_timer.1", "32k_ck", &func_32k_ck, CK_243X), |
1914 | CLK("omap_timer.2", "32k_ck", &func_32k_ck, CK_243X), | 1902 | CLK("omap_timer.2", "32k_ck", &func_32k_ck, CK_243X), |
1915 | CLK("omap_timer.3", "32k_ck", &func_32k_ck, CK_243X), | 1903 | CLK("omap_timer.3", "32k_ck", &func_32k_ck, CK_243X), |
diff --git a/arch/arm/mach-omap2/clock2430_data.c b/arch/arm/mach-omap2/clock2430_data.c index ea6717cfa3c8..0cc12879e7b9 100644 --- a/arch/arm/mach-omap2/clock2430_data.c +++ b/arch/arm/mach-omap2/clock2430_data.c | |||
@@ -1998,18 +1998,6 @@ static struct omap_clk omap2430_clks[] = { | |||
1998 | CLK(NULL, "mdm_intc_ick", &mdm_intc_ick, CK_243X), | 1998 | CLK(NULL, "mdm_intc_ick", &mdm_intc_ick, CK_243X), |
1999 | CLK("omap_hsmmc.0", "mmchsdb_fck", &mmchsdb1_fck, CK_243X), | 1999 | CLK("omap_hsmmc.0", "mmchsdb_fck", &mmchsdb1_fck, CK_243X), |
2000 | CLK("omap_hsmmc.1", "mmchsdb_fck", &mmchsdb2_fck, CK_243X), | 2000 | CLK("omap_hsmmc.1", "mmchsdb_fck", &mmchsdb2_fck, CK_243X), |
2001 | CLK("omap_timer.1", "fck", &gpt1_fck, CK_243X), | ||
2002 | CLK("omap_timer.2", "fck", &gpt2_fck, CK_243X), | ||
2003 | CLK("omap_timer.3", "fck", &gpt3_fck, CK_243X), | ||
2004 | CLK("omap_timer.4", "fck", &gpt4_fck, CK_243X), | ||
2005 | CLK("omap_timer.5", "fck", &gpt5_fck, CK_243X), | ||
2006 | CLK("omap_timer.6", "fck", &gpt6_fck, CK_243X), | ||
2007 | CLK("omap_timer.7", "fck", &gpt7_fck, CK_243X), | ||
2008 | CLK("omap_timer.8", "fck", &gpt8_fck, CK_243X), | ||
2009 | CLK("omap_timer.9", "fck", &gpt9_fck, CK_243X), | ||
2010 | CLK("omap_timer.10", "fck", &gpt10_fck, CK_243X), | ||
2011 | CLK("omap_timer.11", "fck", &gpt11_fck, CK_243X), | ||
2012 | CLK("omap_timer.12", "fck", &gpt12_fck, CK_243X), | ||
2013 | CLK("omap_timer.1", "32k_ck", &func_32k_ck, CK_243X), | 2001 | CLK("omap_timer.1", "32k_ck", &func_32k_ck, CK_243X), |
2014 | CLK("omap_timer.2", "32k_ck", &func_32k_ck, CK_243X), | 2002 | CLK("omap_timer.2", "32k_ck", &func_32k_ck, CK_243X), |
2015 | CLK("omap_timer.3", "32k_ck", &func_32k_ck, CK_243X), | 2003 | CLK("omap_timer.3", "32k_ck", &func_32k_ck, CK_243X), |
diff --git a/arch/arm/mach-omap2/clock3xxx_data.c b/arch/arm/mach-omap2/clock3xxx_data.c index 65dd363163bc..5d0064a4fb5a 100644 --- a/arch/arm/mach-omap2/clock3xxx_data.c +++ b/arch/arm/mach-omap2/clock3xxx_data.c | |||
@@ -3464,18 +3464,6 @@ static struct omap_clk omap3xxx_clks[] = { | |||
3464 | CLK("musb-am35x", "fck", &hsotgusb_fck_am35xx, CK_AM35XX), | 3464 | CLK("musb-am35x", "fck", &hsotgusb_fck_am35xx, CK_AM35XX), |
3465 | CLK(NULL, "hecc_ck", &hecc_ck, CK_AM35XX), | 3465 | CLK(NULL, "hecc_ck", &hecc_ck, CK_AM35XX), |
3466 | CLK(NULL, "uart4_ick", &uart4_ick_am35xx, CK_AM35XX), | 3466 | CLK(NULL, "uart4_ick", &uart4_ick_am35xx, CK_AM35XX), |
3467 | CLK("omap_timer.1", "fck", &gpt1_fck, CK_3XXX), | ||
3468 | CLK("omap_timer.2", "fck", &gpt2_fck, CK_3XXX), | ||
3469 | CLK("omap_timer.3", "fck", &gpt3_fck, CK_3XXX), | ||
3470 | CLK("omap_timer.4", "fck", &gpt4_fck, CK_3XXX), | ||
3471 | CLK("omap_timer.5", "fck", &gpt5_fck, CK_3XXX), | ||
3472 | CLK("omap_timer.6", "fck", &gpt6_fck, CK_3XXX), | ||
3473 | CLK("omap_timer.7", "fck", &gpt7_fck, CK_3XXX), | ||
3474 | CLK("omap_timer.8", "fck", &gpt8_fck, CK_3XXX), | ||
3475 | CLK("omap_timer.9", "fck", &gpt9_fck, CK_3XXX), | ||
3476 | CLK("omap_timer.10", "fck", &gpt10_fck, CK_3XXX), | ||
3477 | CLK("omap_timer.11", "fck", &gpt11_fck, CK_3XXX), | ||
3478 | CLK("omap_timer.12", "fck", &gpt12_fck, CK_3XXX), | ||
3479 | CLK("omap_timer.1", "32k_ck", &omap_32k_fck, CK_3XXX), | 3467 | CLK("omap_timer.1", "32k_ck", &omap_32k_fck, CK_3XXX), |
3480 | CLK("omap_timer.2", "32k_ck", &omap_32k_fck, CK_3XXX), | 3468 | CLK("omap_timer.2", "32k_ck", &omap_32k_fck, CK_3XXX), |
3481 | CLK("omap_timer.3", "32k_ck", &omap_32k_fck, CK_3XXX), | 3469 | CLK("omap_timer.3", "32k_ck", &omap_32k_fck, CK_3XXX), |
diff --git a/arch/arm/mach-omap2/clock44xx.h b/arch/arm/mach-omap2/clock44xx.h index 7ceb870e7ab8..287a46f78d97 100644 --- a/arch/arm/mach-omap2/clock44xx.h +++ b/arch/arm/mach-omap2/clock44xx.h | |||
@@ -8,6 +8,13 @@ | |||
8 | #ifndef __ARCH_ARM_MACH_OMAP2_CLOCK44XX_H | 8 | #ifndef __ARCH_ARM_MACH_OMAP2_CLOCK44XX_H |
9 | #define __ARCH_ARM_MACH_OMAP2_CLOCK44XX_H | 9 | #define __ARCH_ARM_MACH_OMAP2_CLOCK44XX_H |
10 | 10 | ||
11 | /* | ||
12 | * OMAP4430_REGM4XEN_MULT: If the CM_CLKMODE_DPLL_ABE.DPLL_REGM4XEN bit is | ||
13 | * set, then the DPLL's lock frequency is multiplied by 4 (OMAP4430 TRM | ||
14 | * vV Section 3.6.3.3.1 "DPLLs Output Clocks Parameters") | ||
15 | */ | ||
16 | #define OMAP4430_REGM4XEN_MULT 4 | ||
17 | |||
11 | int omap4xxx_clk_init(void); | 18 | int omap4xxx_clk_init(void); |
12 | 19 | ||
13 | #endif | 20 | #endif |
diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c index 946bf04a956d..0798a802497a 100644 --- a/arch/arm/mach-omap2/clock44xx_data.c +++ b/arch/arm/mach-omap2/clock44xx_data.c | |||
@@ -270,8 +270,8 @@ static struct clk dpll_abe_ck = { | |||
270 | .dpll_data = &dpll_abe_dd, | 270 | .dpll_data = &dpll_abe_dd, |
271 | .init = &omap2_init_dpll_parent, | 271 | .init = &omap2_init_dpll_parent, |
272 | .ops = &clkops_omap3_noncore_dpll_ops, | 272 | .ops = &clkops_omap3_noncore_dpll_ops, |
273 | .recalc = &omap3_dpll_recalc, | 273 | .recalc = &omap4_dpll_regm4xen_recalc, |
274 | .round_rate = &omap2_dpll_round_rate, | 274 | .round_rate = &omap4_dpll_regm4xen_round_rate, |
275 | .set_rate = &omap3_noncore_dpll_set_rate, | 275 | .set_rate = &omap3_noncore_dpll_set_rate, |
276 | }; | 276 | }; |
277 | 277 | ||
@@ -1195,11 +1195,25 @@ static struct clk l4_wkup_clk_mux_ck = { | |||
1195 | .recalc = &omap2_clksel_recalc, | 1195 | .recalc = &omap2_clksel_recalc, |
1196 | }; | 1196 | }; |
1197 | 1197 | ||
1198 | static const struct clksel_rate div2_2to1_rates[] = { | ||
1199 | { .div = 1, .val = 1, .flags = RATE_IN_4430 }, | ||
1200 | { .div = 2, .val = 0, .flags = RATE_IN_4430 }, | ||
1201 | { .div = 0 }, | ||
1202 | }; | ||
1203 | |||
1204 | static const struct clksel ocp_abe_iclk_div[] = { | ||
1205 | { .parent = &aess_fclk, .rates = div2_2to1_rates }, | ||
1206 | { .parent = NULL }, | ||
1207 | }; | ||
1208 | |||
1198 | static struct clk ocp_abe_iclk = { | 1209 | static struct clk ocp_abe_iclk = { |
1199 | .name = "ocp_abe_iclk", | 1210 | .name = "ocp_abe_iclk", |
1200 | .parent = &aess_fclk, | 1211 | .parent = &aess_fclk, |
1212 | .clksel = ocp_abe_iclk_div, | ||
1213 | .clksel_reg = OMAP4430_CM1_ABE_AESS_CLKCTRL, | ||
1214 | .clksel_mask = OMAP4430_CLKSEL_AESS_FCLK_MASK, | ||
1201 | .ops = &clkops_null, | 1215 | .ops = &clkops_null, |
1202 | .recalc = &followparent_recalc, | 1216 | .recalc = &omap2_clksel_recalc, |
1203 | }; | 1217 | }; |
1204 | 1218 | ||
1205 | static struct clk per_abe_24m_fclk = { | 1219 | static struct clk per_abe_24m_fclk = { |
@@ -1398,9 +1412,9 @@ static struct clk dss_dss_clk = { | |||
1398 | }; | 1412 | }; |
1399 | 1413 | ||
1400 | static const struct clksel_rate div3_8to32_rates[] = { | 1414 | static const struct clksel_rate div3_8to32_rates[] = { |
1401 | { .div = 8, .val = 0, .flags = RATE_IN_44XX }, | 1415 | { .div = 8, .val = 0, .flags = RATE_IN_4460 }, |
1402 | { .div = 16, .val = 1, .flags = RATE_IN_44XX }, | 1416 | { .div = 16, .val = 1, .flags = RATE_IN_4460 }, |
1403 | { .div = 32, .val = 2, .flags = RATE_IN_44XX }, | 1417 | { .div = 32, .val = 2, .flags = RATE_IN_4460 }, |
1404 | { .div = 0 }, | 1418 | { .div = 0 }, |
1405 | }; | 1419 | }; |
1406 | 1420 | ||
@@ -3363,17 +3377,6 @@ static struct omap_clk omap44xx_clks[] = { | |||
3363 | CLK("usbhs-omap.0", "usbhost_ick", &dummy_ck, CK_443X), | 3377 | CLK("usbhs-omap.0", "usbhost_ick", &dummy_ck, CK_443X), |
3364 | CLK("usbhs-omap.0", "usbtll_fck", &dummy_ck, CK_443X), | 3378 | CLK("usbhs-omap.0", "usbtll_fck", &dummy_ck, CK_443X), |
3365 | CLK("omap_wdt", "ick", &dummy_ck, CK_443X), | 3379 | CLK("omap_wdt", "ick", &dummy_ck, CK_443X), |
3366 | CLK("omap_timer.1", "fck", &timer1_fck, CK_443X), | ||
3367 | CLK("omap_timer.2", "fck", &timer2_fck, CK_443X), | ||
3368 | CLK("omap_timer.3", "fck", &timer3_fck, CK_443X), | ||
3369 | CLK("omap_timer.4", "fck", &timer4_fck, CK_443X), | ||
3370 | CLK("omap_timer.5", "fck", &timer5_fck, CK_443X), | ||
3371 | CLK("omap_timer.6", "fck", &timer6_fck, CK_443X), | ||
3372 | CLK("omap_timer.7", "fck", &timer7_fck, CK_443X), | ||
3373 | CLK("omap_timer.8", "fck", &timer8_fck, CK_443X), | ||
3374 | CLK("omap_timer.9", "fck", &timer9_fck, CK_443X), | ||
3375 | CLK("omap_timer.10", "fck", &timer10_fck, CK_443X), | ||
3376 | CLK("omap_timer.11", "fck", &timer11_fck, CK_443X), | ||
3377 | CLK("omap_timer.1", "32k_ck", &sys_32k_ck, CK_443X), | 3380 | CLK("omap_timer.1", "32k_ck", &sys_32k_ck, CK_443X), |
3378 | CLK("omap_timer.2", "32k_ck", &sys_32k_ck, CK_443X), | 3381 | CLK("omap_timer.2", "32k_ck", &sys_32k_ck, CK_443X), |
3379 | CLK("omap_timer.3", "32k_ck", &sys_32k_ck, CK_443X), | 3382 | CLK("omap_timer.3", "32k_ck", &sys_32k_ck, CK_443X), |
@@ -3403,12 +3406,12 @@ int __init omap4xxx_clk_init(void) | |||
3403 | struct omap_clk *c; | 3406 | struct omap_clk *c; |
3404 | u32 cpu_clkflg; | 3407 | u32 cpu_clkflg; |
3405 | 3408 | ||
3406 | if (cpu_is_omap44xx()) { | 3409 | if (cpu_is_omap443x()) { |
3407 | cpu_mask = RATE_IN_4430; | 3410 | cpu_mask = RATE_IN_4430; |
3408 | cpu_clkflg = CK_443X; | 3411 | cpu_clkflg = CK_443X; |
3409 | } else if (cpu_is_omap446x()) { | 3412 | } else if (cpu_is_omap446x()) { |
3410 | cpu_mask = RATE_IN_4460; | 3413 | cpu_mask = RATE_IN_4460 | RATE_IN_4430; |
3411 | cpu_clkflg = CK_446X; | 3414 | cpu_clkflg = CK_446X | CK_443X; |
3412 | } else { | 3415 | } else { |
3413 | return 0; | 3416 | return 0; |
3414 | } | 3417 | } |
diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-omap2/cpuidle34xx.c index 4bf6e6e8b100..1fe35c24fba2 100644 --- a/arch/arm/mach-omap2/cpuidle34xx.c +++ b/arch/arm/mach-omap2/cpuidle34xx.c | |||
@@ -88,17 +88,21 @@ static int _cpuidle_deny_idle(struct powerdomain *pwrdm, | |||
88 | /** | 88 | /** |
89 | * omap3_enter_idle - Programs OMAP3 to enter the specified state | 89 | * omap3_enter_idle - Programs OMAP3 to enter the specified state |
90 | * @dev: cpuidle device | 90 | * @dev: cpuidle device |
91 | * @state: The target state to be programmed | 91 | * @drv: cpuidle driver |
92 | * @index: the index of state to be entered | ||
92 | * | 93 | * |
93 | * Called from the CPUidle framework to program the device to the | 94 | * Called from the CPUidle framework to program the device to the |
94 | * specified target state selected by the governor. | 95 | * specified target state selected by the governor. |
95 | */ | 96 | */ |
96 | static int omap3_enter_idle(struct cpuidle_device *dev, | 97 | static int omap3_enter_idle(struct cpuidle_device *dev, |
97 | struct cpuidle_state *state) | 98 | struct cpuidle_driver *drv, |
99 | int index) | ||
98 | { | 100 | { |
99 | struct omap3_idle_statedata *cx = cpuidle_get_statedata(state); | 101 | struct omap3_idle_statedata *cx = |
102 | cpuidle_get_statedata(&dev->states_usage[index]); | ||
100 | struct timespec ts_preidle, ts_postidle, ts_idle; | 103 | struct timespec ts_preidle, ts_postidle, ts_idle; |
101 | u32 mpu_state = cx->mpu_state, core_state = cx->core_state; | 104 | u32 mpu_state = cx->mpu_state, core_state = cx->core_state; |
105 | int idle_time; | ||
102 | 106 | ||
103 | /* Used to keep track of the total time in idle */ | 107 | /* Used to keep track of the total time in idle */ |
104 | getnstimeofday(&ts_preidle); | 108 | getnstimeofday(&ts_preidle); |
@@ -113,7 +117,7 @@ static int omap3_enter_idle(struct cpuidle_device *dev, | |||
113 | goto return_sleep_time; | 117 | goto return_sleep_time; |
114 | 118 | ||
115 | /* Deny idle for C1 */ | 119 | /* Deny idle for C1 */ |
116 | if (state == &dev->states[0]) { | 120 | if (index == 0) { |
117 | pwrdm_for_each_clkdm(mpu_pd, _cpuidle_deny_idle); | 121 | pwrdm_for_each_clkdm(mpu_pd, _cpuidle_deny_idle); |
118 | pwrdm_for_each_clkdm(core_pd, _cpuidle_deny_idle); | 122 | pwrdm_for_each_clkdm(core_pd, _cpuidle_deny_idle); |
119 | } | 123 | } |
@@ -122,7 +126,7 @@ static int omap3_enter_idle(struct cpuidle_device *dev, | |||
122 | omap_sram_idle(); | 126 | omap_sram_idle(); |
123 | 127 | ||
124 | /* Re-allow idle for C1 */ | 128 | /* Re-allow idle for C1 */ |
125 | if (state == &dev->states[0]) { | 129 | if (index == 0) { |
126 | pwrdm_for_each_clkdm(mpu_pd, _cpuidle_allow_idle); | 130 | pwrdm_for_each_clkdm(mpu_pd, _cpuidle_allow_idle); |
127 | pwrdm_for_each_clkdm(core_pd, _cpuidle_allow_idle); | 131 | pwrdm_for_each_clkdm(core_pd, _cpuidle_allow_idle); |
128 | } | 132 | } |
@@ -134,28 +138,38 @@ return_sleep_time: | |||
134 | local_irq_enable(); | 138 | local_irq_enable(); |
135 | local_fiq_enable(); | 139 | local_fiq_enable(); |
136 | 140 | ||
137 | return ts_idle.tv_nsec / NSEC_PER_USEC + ts_idle.tv_sec * USEC_PER_SEC; | 141 | idle_time = ts_idle.tv_nsec / NSEC_PER_USEC + ts_idle.tv_sec * \ |
142 | USEC_PER_SEC; | ||
143 | |||
144 | /* Update cpuidle counters */ | ||
145 | dev->last_residency = idle_time; | ||
146 | |||
147 | return index; | ||
138 | } | 148 | } |
139 | 149 | ||
140 | /** | 150 | /** |
141 | * next_valid_state - Find next valid C-state | 151 | * next_valid_state - Find next valid C-state |
142 | * @dev: cpuidle device | 152 | * @dev: cpuidle device |
143 | * @state: Currently selected C-state | 153 | * @drv: cpuidle driver |
154 | * @index: Index of currently selected c-state | ||
144 | * | 155 | * |
145 | * If the current state is valid, it is returned back to the caller. | 156 | * If the state corresponding to index is valid, index is returned back |
146 | * Else, this function searches for a lower c-state which is still | 157 | * to the caller. Else, this function searches for a lower c-state which is |
147 | * valid. | 158 | * still valid (as defined in omap3_power_states[]) and returns its index. |
148 | * | 159 | * |
149 | * A state is valid if the 'valid' field is enabled and | 160 | * A state is valid if the 'valid' field is enabled and |
150 | * if it satisfies the enable_off_mode condition. | 161 | * if it satisfies the enable_off_mode condition. |
151 | */ | 162 | */ |
152 | static struct cpuidle_state *next_valid_state(struct cpuidle_device *dev, | 163 | static int next_valid_state(struct cpuidle_device *dev, |
153 | struct cpuidle_state *curr) | 164 | struct cpuidle_driver *drv, |
165 | int index) | ||
154 | { | 166 | { |
155 | struct cpuidle_state *next = NULL; | 167 | struct cpuidle_state_usage *curr_usage = &dev->states_usage[index]; |
156 | struct omap3_idle_statedata *cx = cpuidle_get_statedata(curr); | 168 | struct cpuidle_state *curr = &drv->states[index]; |
169 | struct omap3_idle_statedata *cx = cpuidle_get_statedata(curr_usage); | ||
157 | u32 mpu_deepest_state = PWRDM_POWER_RET; | 170 | u32 mpu_deepest_state = PWRDM_POWER_RET; |
158 | u32 core_deepest_state = PWRDM_POWER_RET; | 171 | u32 core_deepest_state = PWRDM_POWER_RET; |
172 | int next_index = -1; | ||
159 | 173 | ||
160 | if (enable_off_mode) { | 174 | if (enable_off_mode) { |
161 | mpu_deepest_state = PWRDM_POWER_OFF; | 175 | mpu_deepest_state = PWRDM_POWER_OFF; |
@@ -172,20 +186,20 @@ static struct cpuidle_state *next_valid_state(struct cpuidle_device *dev, | |||
172 | if ((cx->valid) && | 186 | if ((cx->valid) && |
173 | (cx->mpu_state >= mpu_deepest_state) && | 187 | (cx->mpu_state >= mpu_deepest_state) && |
174 | (cx->core_state >= core_deepest_state)) { | 188 | (cx->core_state >= core_deepest_state)) { |
175 | return curr; | 189 | return index; |
176 | } else { | 190 | } else { |
177 | int idx = OMAP3_NUM_STATES - 1; | 191 | int idx = OMAP3_NUM_STATES - 1; |
178 | 192 | ||
179 | /* Reach the current state starting at highest C-state */ | 193 | /* Reach the current state starting at highest C-state */ |
180 | for (; idx >= 0; idx--) { | 194 | for (; idx >= 0; idx--) { |
181 | if (&dev->states[idx] == curr) { | 195 | if (&drv->states[idx] == curr) { |
182 | next = &dev->states[idx]; | 196 | next_index = idx; |
183 | break; | 197 | break; |
184 | } | 198 | } |
185 | } | 199 | } |
186 | 200 | ||
187 | /* Should never hit this condition */ | 201 | /* Should never hit this condition */ |
188 | WARN_ON(next == NULL); | 202 | WARN_ON(next_index == -1); |
189 | 203 | ||
190 | /* | 204 | /* |
191 | * Drop to next valid state. | 205 | * Drop to next valid state. |
@@ -193,41 +207,44 @@ static struct cpuidle_state *next_valid_state(struct cpuidle_device *dev, | |||
193 | */ | 207 | */ |
194 | idx--; | 208 | idx--; |
195 | for (; idx >= 0; idx--) { | 209 | for (; idx >= 0; idx--) { |
196 | cx = cpuidle_get_statedata(&dev->states[idx]); | 210 | cx = cpuidle_get_statedata(&dev->states_usage[idx]); |
197 | if ((cx->valid) && | 211 | if ((cx->valid) && |
198 | (cx->mpu_state >= mpu_deepest_state) && | 212 | (cx->mpu_state >= mpu_deepest_state) && |
199 | (cx->core_state >= core_deepest_state)) { | 213 | (cx->core_state >= core_deepest_state)) { |
200 | next = &dev->states[idx]; | 214 | next_index = idx; |
201 | break; | 215 | break; |
202 | } | 216 | } |
203 | } | 217 | } |
204 | /* | 218 | /* |
205 | * C1 is always valid. | 219 | * C1 is always valid. |
206 | * So, no need to check for 'next==NULL' outside this loop. | 220 | * So, no need to check for 'next_index == -1' outside |
221 | * this loop. | ||
207 | */ | 222 | */ |
208 | } | 223 | } |
209 | 224 | ||
210 | return next; | 225 | return next_index; |
211 | } | 226 | } |
212 | 227 | ||
213 | /** | 228 | /** |
214 | * omap3_enter_idle_bm - Checks for any bus activity | 229 | * omap3_enter_idle_bm - Checks for any bus activity |
215 | * @dev: cpuidle device | 230 | * @dev: cpuidle device |
216 | * @state: The target state to be programmed | 231 | * @drv: cpuidle driver |
232 | * @index: array index of target state to be programmed | ||
217 | * | 233 | * |
218 | * This function checks for any pending activity and then programs | 234 | * This function checks for any pending activity and then programs |
219 | * the device to the specified or a safer state. | 235 | * the device to the specified or a safer state. |
220 | */ | 236 | */ |
221 | static int omap3_enter_idle_bm(struct cpuidle_device *dev, | 237 | static int omap3_enter_idle_bm(struct cpuidle_device *dev, |
222 | struct cpuidle_state *state) | 238 | struct cpuidle_driver *drv, |
239 | int index) | ||
223 | { | 240 | { |
224 | struct cpuidle_state *new_state; | 241 | int new_state_idx; |
225 | u32 core_next_state, per_next_state = 0, per_saved_state = 0, cam_state; | 242 | u32 core_next_state, per_next_state = 0, per_saved_state = 0, cam_state; |
226 | struct omap3_idle_statedata *cx; | 243 | struct omap3_idle_statedata *cx; |
227 | int ret; | 244 | int ret; |
228 | 245 | ||
229 | if (!omap3_can_sleep()) { | 246 | if (!omap3_can_sleep()) { |
230 | new_state = dev->safe_state; | 247 | new_state_idx = drv->safe_state_index; |
231 | goto select_state; | 248 | goto select_state; |
232 | } | 249 | } |
233 | 250 | ||
@@ -237,7 +254,7 @@ static int omap3_enter_idle_bm(struct cpuidle_device *dev, | |||
237 | */ | 254 | */ |
238 | cam_state = pwrdm_read_pwrst(cam_pd); | 255 | cam_state = pwrdm_read_pwrst(cam_pd); |
239 | if (cam_state == PWRDM_POWER_ON) { | 256 | if (cam_state == PWRDM_POWER_ON) { |
240 | new_state = dev->safe_state; | 257 | new_state_idx = drv->safe_state_index; |
241 | goto select_state; | 258 | goto select_state; |
242 | } | 259 | } |
243 | 260 | ||
@@ -253,7 +270,7 @@ static int omap3_enter_idle_bm(struct cpuidle_device *dev, | |||
253 | * Prevent PER off if CORE is not in retention or off as this | 270 | * Prevent PER off if CORE is not in retention or off as this |
254 | * would disable PER wakeups completely. | 271 | * would disable PER wakeups completely. |
255 | */ | 272 | */ |
256 | cx = cpuidle_get_statedata(state); | 273 | cx = cpuidle_get_statedata(&dev->states_usage[index]); |
257 | core_next_state = cx->core_state; | 274 | core_next_state = cx->core_state; |
258 | per_next_state = per_saved_state = pwrdm_read_next_pwrst(per_pd); | 275 | per_next_state = per_saved_state = pwrdm_read_next_pwrst(per_pd); |
259 | if ((per_next_state == PWRDM_POWER_OFF) && | 276 | if ((per_next_state == PWRDM_POWER_OFF) && |
@@ -264,11 +281,10 @@ static int omap3_enter_idle_bm(struct cpuidle_device *dev, | |||
264 | if (per_next_state != per_saved_state) | 281 | if (per_next_state != per_saved_state) |
265 | pwrdm_set_next_pwrst(per_pd, per_next_state); | 282 | pwrdm_set_next_pwrst(per_pd, per_next_state); |
266 | 283 | ||
267 | new_state = next_valid_state(dev, state); | 284 | new_state_idx = next_valid_state(dev, drv, index); |
268 | 285 | ||
269 | select_state: | 286 | select_state: |
270 | dev->last_state = new_state; | 287 | ret = omap3_enter_idle(dev, drv, new_state_idx); |
271 | ret = omap3_enter_idle(dev, new_state); | ||
272 | 288 | ||
273 | /* Restore original PER state if it was modified */ | 289 | /* Restore original PER state if it was modified */ |
274 | if (per_next_state != per_saved_state) | 290 | if (per_next_state != per_saved_state) |
@@ -301,22 +317,31 @@ struct cpuidle_driver omap3_idle_driver = { | |||
301 | .owner = THIS_MODULE, | 317 | .owner = THIS_MODULE, |
302 | }; | 318 | }; |
303 | 319 | ||
304 | /* Helper to fill the C-state common data and register the driver_data */ | 320 | /* Helper to fill the C-state common data*/ |
305 | static inline struct omap3_idle_statedata *_fill_cstate( | 321 | static inline void _fill_cstate(struct cpuidle_driver *drv, |
306 | struct cpuidle_device *dev, | ||
307 | int idx, const char *descr) | 322 | int idx, const char *descr) |
308 | { | 323 | { |
309 | struct omap3_idle_statedata *cx = &omap3_idle_data[idx]; | 324 | struct cpuidle_state *state = &drv->states[idx]; |
310 | struct cpuidle_state *state = &dev->states[idx]; | ||
311 | 325 | ||
312 | state->exit_latency = cpuidle_params_table[idx].exit_latency; | 326 | state->exit_latency = cpuidle_params_table[idx].exit_latency; |
313 | state->target_residency = cpuidle_params_table[idx].target_residency; | 327 | state->target_residency = cpuidle_params_table[idx].target_residency; |
314 | state->flags = CPUIDLE_FLAG_TIME_VALID; | 328 | state->flags = CPUIDLE_FLAG_TIME_VALID; |
315 | state->enter = omap3_enter_idle_bm; | 329 | state->enter = omap3_enter_idle_bm; |
316 | cx->valid = cpuidle_params_table[idx].valid; | ||
317 | sprintf(state->name, "C%d", idx + 1); | 330 | sprintf(state->name, "C%d", idx + 1); |
318 | strncpy(state->desc, descr, CPUIDLE_DESC_LEN); | 331 | strncpy(state->desc, descr, CPUIDLE_DESC_LEN); |
319 | cpuidle_set_statedata(state, cx); | 332 | |
333 | } | ||
334 | |||
335 | /* Helper to register the driver_data */ | ||
336 | static inline struct omap3_idle_statedata *_fill_cstate_usage( | ||
337 | struct cpuidle_device *dev, | ||
338 | int idx) | ||
339 | { | ||
340 | struct omap3_idle_statedata *cx = &omap3_idle_data[idx]; | ||
341 | struct cpuidle_state_usage *state_usage = &dev->states_usage[idx]; | ||
342 | |||
343 | cx->valid = cpuidle_params_table[idx].valid; | ||
344 | cpuidle_set_statedata(state_usage, cx); | ||
320 | 345 | ||
321 | return cx; | 346 | return cx; |
322 | } | 347 | } |
@@ -330,6 +355,7 @@ static inline struct omap3_idle_statedata *_fill_cstate( | |||
330 | int __init omap3_idle_init(void) | 355 | int __init omap3_idle_init(void) |
331 | { | 356 | { |
332 | struct cpuidle_device *dev; | 357 | struct cpuidle_device *dev; |
358 | struct cpuidle_driver *drv = &omap3_idle_driver; | ||
333 | struct omap3_idle_statedata *cx; | 359 | struct omap3_idle_statedata *cx; |
334 | 360 | ||
335 | mpu_pd = pwrdm_lookup("mpu_pwrdm"); | 361 | mpu_pd = pwrdm_lookup("mpu_pwrdm"); |
@@ -337,44 +363,52 @@ int __init omap3_idle_init(void) | |||
337 | per_pd = pwrdm_lookup("per_pwrdm"); | 363 | per_pd = pwrdm_lookup("per_pwrdm"); |
338 | cam_pd = pwrdm_lookup("cam_pwrdm"); | 364 | cam_pd = pwrdm_lookup("cam_pwrdm"); |
339 | 365 | ||
340 | cpuidle_register_driver(&omap3_idle_driver); | 366 | |
367 | drv->safe_state_index = -1; | ||
341 | dev = &per_cpu(omap3_idle_dev, smp_processor_id()); | 368 | dev = &per_cpu(omap3_idle_dev, smp_processor_id()); |
342 | 369 | ||
343 | /* C1 . MPU WFI + Core active */ | 370 | /* C1 . MPU WFI + Core active */ |
344 | cx = _fill_cstate(dev, 0, "MPU ON + CORE ON"); | 371 | _fill_cstate(drv, 0, "MPU ON + CORE ON"); |
345 | (&dev->states[0])->enter = omap3_enter_idle; | 372 | (&drv->states[0])->enter = omap3_enter_idle; |
346 | dev->safe_state = &dev->states[0]; | 373 | drv->safe_state_index = 0; |
374 | cx = _fill_cstate_usage(dev, 0); | ||
347 | cx->valid = 1; /* C1 is always valid */ | 375 | cx->valid = 1; /* C1 is always valid */ |
348 | cx->mpu_state = PWRDM_POWER_ON; | 376 | cx->mpu_state = PWRDM_POWER_ON; |
349 | cx->core_state = PWRDM_POWER_ON; | 377 | cx->core_state = PWRDM_POWER_ON; |
350 | 378 | ||
351 | /* C2 . MPU WFI + Core inactive */ | 379 | /* C2 . MPU WFI + Core inactive */ |
352 | cx = _fill_cstate(dev, 1, "MPU ON + CORE ON"); | 380 | _fill_cstate(drv, 1, "MPU ON + CORE ON"); |
381 | cx = _fill_cstate_usage(dev, 1); | ||
353 | cx->mpu_state = PWRDM_POWER_ON; | 382 | cx->mpu_state = PWRDM_POWER_ON; |
354 | cx->core_state = PWRDM_POWER_ON; | 383 | cx->core_state = PWRDM_POWER_ON; |
355 | 384 | ||
356 | /* C3 . MPU CSWR + Core inactive */ | 385 | /* C3 . MPU CSWR + Core inactive */ |
357 | cx = _fill_cstate(dev, 2, "MPU RET + CORE ON"); | 386 | _fill_cstate(drv, 2, "MPU RET + CORE ON"); |
387 | cx = _fill_cstate_usage(dev, 2); | ||
358 | cx->mpu_state = PWRDM_POWER_RET; | 388 | cx->mpu_state = PWRDM_POWER_RET; |
359 | cx->core_state = PWRDM_POWER_ON; | 389 | cx->core_state = PWRDM_POWER_ON; |
360 | 390 | ||
361 | /* C4 . MPU OFF + Core inactive */ | 391 | /* C4 . MPU OFF + Core inactive */ |
362 | cx = _fill_cstate(dev, 3, "MPU OFF + CORE ON"); | 392 | _fill_cstate(drv, 3, "MPU OFF + CORE ON"); |
393 | cx = _fill_cstate_usage(dev, 3); | ||
363 | cx->mpu_state = PWRDM_POWER_OFF; | 394 | cx->mpu_state = PWRDM_POWER_OFF; |
364 | cx->core_state = PWRDM_POWER_ON; | 395 | cx->core_state = PWRDM_POWER_ON; |
365 | 396 | ||
366 | /* C5 . MPU RET + Core RET */ | 397 | /* C5 . MPU RET + Core RET */ |
367 | cx = _fill_cstate(dev, 4, "MPU RET + CORE RET"); | 398 | _fill_cstate(drv, 4, "MPU RET + CORE RET"); |
399 | cx = _fill_cstate_usage(dev, 4); | ||
368 | cx->mpu_state = PWRDM_POWER_RET; | 400 | cx->mpu_state = PWRDM_POWER_RET; |
369 | cx->core_state = PWRDM_POWER_RET; | 401 | cx->core_state = PWRDM_POWER_RET; |
370 | 402 | ||
371 | /* C6 . MPU OFF + Core RET */ | 403 | /* C6 . MPU OFF + Core RET */ |
372 | cx = _fill_cstate(dev, 5, "MPU OFF + CORE RET"); | 404 | _fill_cstate(drv, 5, "MPU OFF + CORE RET"); |
405 | cx = _fill_cstate_usage(dev, 5); | ||
373 | cx->mpu_state = PWRDM_POWER_OFF; | 406 | cx->mpu_state = PWRDM_POWER_OFF; |
374 | cx->core_state = PWRDM_POWER_RET; | 407 | cx->core_state = PWRDM_POWER_RET; |
375 | 408 | ||
376 | /* C7 . MPU OFF + Core OFF */ | 409 | /* C7 . MPU OFF + Core OFF */ |
377 | cx = _fill_cstate(dev, 6, "MPU OFF + CORE OFF"); | 410 | _fill_cstate(drv, 6, "MPU OFF + CORE OFF"); |
411 | cx = _fill_cstate_usage(dev, 6); | ||
378 | /* | 412 | /* |
379 | * Erratum i583: implementation for ES rev < Es1.2 on 3630. We cannot | 413 | * Erratum i583: implementation for ES rev < Es1.2 on 3630. We cannot |
380 | * enable OFF mode in a stable form for previous revisions. | 414 | * enable OFF mode in a stable form for previous revisions. |
@@ -388,6 +422,9 @@ int __init omap3_idle_init(void) | |||
388 | cx->mpu_state = PWRDM_POWER_OFF; | 422 | cx->mpu_state = PWRDM_POWER_OFF; |
389 | cx->core_state = PWRDM_POWER_OFF; | 423 | cx->core_state = PWRDM_POWER_OFF; |
390 | 424 | ||
425 | drv->state_count = OMAP3_NUM_STATES; | ||
426 | cpuidle_register_driver(&omap3_idle_driver); | ||
427 | |||
391 | dev->state_count = OMAP3_NUM_STATES; | 428 | dev->state_count = OMAP3_NUM_STATES; |
392 | if (cpuidle_register_device(dev)) { | 429 | if (cpuidle_register_device(dev)) { |
393 | printk(KERN_ERR "%s: CPUidle register device failed\n", | 430 | printk(KERN_ERR "%s: CPUidle register device failed\n", |
diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index 68ec03152d5f..c15cfada5f13 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c | |||
@@ -318,18 +318,10 @@ static inline void omap_init_audio(void) {} | |||
318 | #if defined(CONFIG_SND_OMAP_SOC_MCPDM) || \ | 318 | #if defined(CONFIG_SND_OMAP_SOC_MCPDM) || \ |
319 | defined(CONFIG_SND_OMAP_SOC_MCPDM_MODULE) | 319 | defined(CONFIG_SND_OMAP_SOC_MCPDM_MODULE) |
320 | 320 | ||
321 | static struct omap_device_pm_latency omap_mcpdm_latency[] = { | ||
322 | { | ||
323 | .deactivate_func = omap_device_idle_hwmods, | ||
324 | .activate_func = omap_device_enable_hwmods, | ||
325 | .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST, | ||
326 | }, | ||
327 | }; | ||
328 | |||
329 | static void omap_init_mcpdm(void) | 321 | static void omap_init_mcpdm(void) |
330 | { | 322 | { |
331 | struct omap_hwmod *oh; | 323 | struct omap_hwmod *oh; |
332 | struct omap_device *od; | 324 | struct platform_device *pdev; |
333 | 325 | ||
334 | oh = omap_hwmod_lookup("mcpdm"); | 326 | oh = omap_hwmod_lookup("mcpdm"); |
335 | if (!oh) { | 327 | if (!oh) { |
@@ -337,11 +329,8 @@ static void omap_init_mcpdm(void) | |||
337 | return; | 329 | return; |
338 | } | 330 | } |
339 | 331 | ||
340 | od = omap_device_build("omap-mcpdm", -1, oh, NULL, 0, | 332 | pdev = omap_device_build("omap-mcpdm", -1, oh, NULL, 0, NULL, 0, 0); |
341 | omap_mcpdm_latency, | 333 | WARN(IS_ERR(pdev), "Can't build omap_device for omap-mcpdm.\n"); |
342 | ARRAY_SIZE(omap_mcpdm_latency), 0); | ||
343 | if (IS_ERR(od)) | ||
344 | printk(KERN_ERR "Could not build omap_device for omap-mcpdm-dai\n"); | ||
345 | } | 334 | } |
346 | #else | 335 | #else |
347 | static inline void omap_init_mcpdm(void) {} | 336 | static inline void omap_init_mcpdm(void) {} |
diff --git a/arch/arm/mach-omap2/dpll3xxx.c b/arch/arm/mach-omap2/dpll3xxx.c index f77022be783d..fc56745676fa 100644 --- a/arch/arm/mach-omap2/dpll3xxx.c +++ b/arch/arm/mach-omap2/dpll3xxx.c | |||
@@ -390,7 +390,8 @@ int omap3_noncore_dpll_enable(struct clk *clk) | |||
390 | * propagating? | 390 | * propagating? |
391 | */ | 391 | */ |
392 | if (!r) | 392 | if (!r) |
393 | clk->rate = omap2_get_dpll_rate(clk); | 393 | clk->rate = (clk->recalc) ? clk->recalc(clk) : |
394 | omap2_get_dpll_rate(clk); | ||
394 | 395 | ||
395 | return r; | 396 | return r; |
396 | } | 397 | } |
@@ -424,6 +425,7 @@ void omap3_noncore_dpll_disable(struct clk *clk) | |||
424 | int omap3_noncore_dpll_set_rate(struct clk *clk, unsigned long rate) | 425 | int omap3_noncore_dpll_set_rate(struct clk *clk, unsigned long rate) |
425 | { | 426 | { |
426 | struct clk *new_parent = NULL; | 427 | struct clk *new_parent = NULL; |
428 | unsigned long hw_rate; | ||
427 | u16 freqsel = 0; | 429 | u16 freqsel = 0; |
428 | struct dpll_data *dd; | 430 | struct dpll_data *dd; |
429 | int ret; | 431 | int ret; |
@@ -435,7 +437,8 @@ int omap3_noncore_dpll_set_rate(struct clk *clk, unsigned long rate) | |||
435 | if (!dd) | 437 | if (!dd) |
436 | return -EINVAL; | 438 | return -EINVAL; |
437 | 439 | ||
438 | if (rate == omap2_get_dpll_rate(clk)) | 440 | hw_rate = (clk->recalc) ? clk->recalc(clk) : omap2_get_dpll_rate(clk); |
441 | if (rate == hw_rate) | ||
439 | return 0; | 442 | return 0; |
440 | 443 | ||
441 | /* | 444 | /* |
@@ -455,7 +458,7 @@ int omap3_noncore_dpll_set_rate(struct clk *clk, unsigned long rate) | |||
455 | new_parent = dd->clk_bypass; | 458 | new_parent = dd->clk_bypass; |
456 | } else { | 459 | } else { |
457 | if (dd->last_rounded_rate != rate) | 460 | if (dd->last_rounded_rate != rate) |
458 | omap2_dpll_round_rate(clk, rate); | 461 | rate = clk->round_rate(clk, rate); |
459 | 462 | ||
460 | if (dd->last_rounded_rate == 0) | 463 | if (dd->last_rounded_rate == 0) |
461 | return -EINVAL; | 464 | return -EINVAL; |
diff --git a/arch/arm/mach-omap2/dpll44xx.c b/arch/arm/mach-omap2/dpll44xx.c index 4e4da6160d05..9c6a296b3dc3 100644 --- a/arch/arm/mach-omap2/dpll44xx.c +++ b/arch/arm/mach-omap2/dpll44xx.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <plat/clock.h> | 19 | #include <plat/clock.h> |
20 | 20 | ||
21 | #include "clock.h" | 21 | #include "clock.h" |
22 | #include "clock44xx.h" | ||
22 | #include "cm-regbits-44xx.h" | 23 | #include "cm-regbits-44xx.h" |
23 | 24 | ||
24 | /* Supported only on OMAP4 */ | 25 | /* Supported only on OMAP4 */ |
@@ -82,3 +83,71 @@ const struct clkops clkops_omap4_dpllmx_ops = { | |||
82 | .deny_idle = omap4_dpllmx_deny_gatectrl, | 83 | .deny_idle = omap4_dpllmx_deny_gatectrl, |
83 | }; | 84 | }; |
84 | 85 | ||
86 | /** | ||
87 | * omap4_dpll_regm4xen_recalc - compute DPLL rate, considering REGM4XEN bit | ||
88 | * @clk: struct clk * of the DPLL to compute the rate for | ||
89 | * | ||
90 | * Compute the output rate for the OMAP4 DPLL represented by @clk. | ||
91 | * Takes the REGM4XEN bit into consideration, which is needed for the | ||
92 | * OMAP4 ABE DPLL. Returns the DPLL's output rate (before M-dividers) | ||
93 | * upon success, or 0 upon error. | ||
94 | */ | ||
95 | unsigned long omap4_dpll_regm4xen_recalc(struct clk *clk) | ||
96 | { | ||
97 | u32 v; | ||
98 | unsigned long rate; | ||
99 | struct dpll_data *dd; | ||
100 | |||
101 | if (!clk || !clk->dpll_data) | ||
102 | return 0; | ||
103 | |||
104 | dd = clk->dpll_data; | ||
105 | |||
106 | rate = omap2_get_dpll_rate(clk); | ||
107 | |||
108 | /* regm4xen adds a multiplier of 4 to DPLL calculations */ | ||
109 | v = __raw_readl(dd->control_reg); | ||
110 | if (v & OMAP4430_DPLL_REGM4XEN_MASK) | ||
111 | rate *= OMAP4430_REGM4XEN_MULT; | ||
112 | |||
113 | return rate; | ||
114 | } | ||
115 | |||
116 | /** | ||
117 | * omap4_dpll_regm4xen_round_rate - round DPLL rate, considering REGM4XEN bit | ||
118 | * @clk: struct clk * of the DPLL to round a rate for | ||
119 | * @target_rate: the desired rate of the DPLL | ||
120 | * | ||
121 | * Compute the rate that would be programmed into the DPLL hardware | ||
122 | * for @clk if set_rate() were to be provided with the rate | ||
123 | * @target_rate. Takes the REGM4XEN bit into consideration, which is | ||
124 | * needed for the OMAP4 ABE DPLL. Returns the rounded rate (before | ||
125 | * M-dividers) upon success, -EINVAL if @clk is null or not a DPLL, or | ||
126 | * ~0 if an error occurred in omap2_dpll_round_rate(). | ||
127 | */ | ||
128 | long omap4_dpll_regm4xen_round_rate(struct clk *clk, unsigned long target_rate) | ||
129 | { | ||
130 | u32 v; | ||
131 | struct dpll_data *dd; | ||
132 | long r; | ||
133 | |||
134 | if (!clk || !clk->dpll_data) | ||
135 | return -EINVAL; | ||
136 | |||
137 | dd = clk->dpll_data; | ||
138 | |||
139 | /* regm4xen adds a multiplier of 4 to DPLL calculations */ | ||
140 | v = __raw_readl(dd->control_reg) & OMAP4430_DPLL_REGM4XEN_MASK; | ||
141 | |||
142 | if (v) | ||
143 | target_rate = target_rate / OMAP4430_REGM4XEN_MULT; | ||
144 | |||
145 | r = omap2_dpll_round_rate(clk, target_rate); | ||
146 | if (r == ~0) | ||
147 | return r; | ||
148 | |||
149 | if (v) | ||
150 | clk->dpll_data->last_rounded_rate *= OMAP4430_REGM4XEN_MULT; | ||
151 | |||
152 | return clk->dpll_data->last_rounded_rate; | ||
153 | } | ||
diff --git a/arch/arm/mach-omap2/dsp.c b/arch/arm/mach-omap2/dsp.c index 911cd2e68d46..74f18f2952df 100644 --- a/arch/arm/mach-omap2/dsp.c +++ b/arch/arm/mach-omap2/dsp.c | |||
@@ -18,6 +18,7 @@ | |||
18 | * of the OMAP PM core code. | 18 | * of the OMAP PM core code. |
19 | */ | 19 | */ |
20 | 20 | ||
21 | #include <linux/module.h> | ||
21 | #include <linux/platform_device.h> | 22 | #include <linux/platform_device.h> |
22 | #include "cm2xxx_3xxx.h" | 23 | #include "cm2xxx_3xxx.h" |
23 | #include "prm2xxx_3xxx.h" | 24 | #include "prm2xxx_3xxx.h" |
diff --git a/arch/arm/mach-omap2/hsmmc.c b/arch/arm/mach-omap2/hsmmc.c index 77085847e4e7..f4a1020559a7 100644 --- a/arch/arm/mach-omap2/hsmmc.c +++ b/arch/arm/mach-omap2/hsmmc.c | |||
@@ -129,15 +129,11 @@ static void omap4_hsmmc1_before_set_reg(struct device *dev, int slot, | |||
129 | * Assume we power both OMAP VMMC1 (for CMD, CLK, DAT0..3) and the | 129 | * Assume we power both OMAP VMMC1 (for CMD, CLK, DAT0..3) and the |
130 | * card with Vcc regulator (from twl4030 or whatever). OMAP has both | 130 | * card with Vcc regulator (from twl4030 or whatever). OMAP has both |
131 | * 1.8V and 3.0V modes, controlled by the PBIAS register. | 131 | * 1.8V and 3.0V modes, controlled by the PBIAS register. |
132 | * | ||
133 | * In 8-bit modes, OMAP VMMC1A (for DAT4..7) needs a supply, which | ||
134 | * is most naturally TWL VSIM; those pins also use PBIAS. | ||
135 | * | ||
136 | * FIXME handle VMMC1A as needed ... | ||
137 | */ | 132 | */ |
138 | reg = omap4_ctrl_pad_readl(control_pbias_offset); | 133 | reg = omap4_ctrl_pad_readl(control_pbias_offset); |
139 | reg &= ~(OMAP4_MMC1_PBIASLITE_PWRDNZ_MASK | | 134 | reg &= ~(OMAP4_MMC1_PBIASLITE_PWRDNZ_MASK | |
140 | OMAP4_MMC1_PWRDNZ_MASK); | 135 | OMAP4_MMC1_PWRDNZ_MASK | |
136 | OMAP4_MMC1_PBIASLITE_VMODE_MASK); | ||
141 | omap4_ctrl_pad_writel(reg, control_pbias_offset); | 137 | omap4_ctrl_pad_writel(reg, control_pbias_offset); |
142 | } | 138 | } |
143 | 139 | ||
@@ -172,12 +168,6 @@ static void omap4_hsmmc1_after_set_reg(struct device *dev, int slot, | |||
172 | reg &= ~(OMAP4_MMC1_PWRDNZ_MASK); | 168 | reg &= ~(OMAP4_MMC1_PWRDNZ_MASK); |
173 | omap4_ctrl_pad_writel(reg, control_pbias_offset); | 169 | omap4_ctrl_pad_writel(reg, control_pbias_offset); |
174 | } | 170 | } |
175 | } else { | ||
176 | reg = omap4_ctrl_pad_readl(control_pbias_offset); | ||
177 | reg |= (OMAP4_MMC1_PBIASLITE_PWRDNZ_MASK | | ||
178 | OMAP4_MMC1_PWRDNZ_MASK | | ||
179 | OMAP4_MMC1_PBIASLITE_VMODE_MASK); | ||
180 | omap4_ctrl_pad_writel(reg, control_pbias_offset); | ||
181 | } | 171 | } |
182 | } | 172 | } |
183 | 173 | ||
@@ -489,7 +479,7 @@ void __init omap2_hsmmc_init(struct omap2_hsmmc_info *controllers) | |||
489 | OMAP4_SDMMC1_PUSTRENGTH_GRP1_MASK); | 479 | OMAP4_SDMMC1_PUSTRENGTH_GRP1_MASK); |
490 | reg &= ~(OMAP4_SDMMC1_PUSTRENGTH_GRP2_MASK | | 480 | reg &= ~(OMAP4_SDMMC1_PUSTRENGTH_GRP2_MASK | |
491 | OMAP4_SDMMC1_PUSTRENGTH_GRP3_MASK); | 481 | OMAP4_SDMMC1_PUSTRENGTH_GRP3_MASK); |
492 | reg |= (OMAP4_USBC1_DR0_SPEEDCTRL_MASK| | 482 | reg |= (OMAP4_SDMMC1_DR0_SPEEDCTRL_MASK | |
493 | OMAP4_SDMMC1_DR1_SPEEDCTRL_MASK | | 483 | OMAP4_SDMMC1_DR1_SPEEDCTRL_MASK | |
494 | OMAP4_SDMMC1_DR2_SPEEDCTRL_MASK); | 484 | OMAP4_SDMMC1_DR2_SPEEDCTRL_MASK); |
495 | omap4_ctrl_pad_writel(reg, control_mmc1); | 485 | omap4_ctrl_pad_writel(reg, control_mmc1); |
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c index d27daf921c7e..7f47092a193f 100644 --- a/arch/arm/mach-omap2/id.c +++ b/arch/arm/mach-omap2/id.c | |||
@@ -187,8 +187,11 @@ static void __init omap3_check_features(void) | |||
187 | OMAP3_CHECK_FEATURE(status, ISP); | 187 | OMAP3_CHECK_FEATURE(status, ISP); |
188 | if (cpu_is_omap3630()) | 188 | if (cpu_is_omap3630()) |
189 | omap_features |= OMAP3_HAS_192MHZ_CLK; | 189 | omap_features |= OMAP3_HAS_192MHZ_CLK; |
190 | if (!cpu_is_omap3505() && !cpu_is_omap3517()) | 190 | if (cpu_is_omap3430() || cpu_is_omap3630()) |
191 | omap_features |= OMAP3_HAS_IO_WAKEUP; | 191 | omap_features |= OMAP3_HAS_IO_WAKEUP; |
192 | if (cpu_is_omap3630() || omap_rev() == OMAP3430_REV_ES3_1 || | ||
193 | omap_rev() == OMAP3430_REV_ES3_1_2) | ||
194 | omap_features |= OMAP3_HAS_IO_CHAIN_CTRL; | ||
192 | 195 | ||
193 | omap_features |= OMAP3_HAS_SDRC; | 196 | omap_features |= OMAP3_HAS_SDRC; |
194 | 197 | ||
diff --git a/arch/arm/mach-omap2/include/mach/ctrl_module_pad_core_44xx.h b/arch/arm/mach-omap2/include/mach/ctrl_module_pad_core_44xx.h index c88420de1151..1e2d3322f33e 100644 --- a/arch/arm/mach-omap2/include/mach/ctrl_module_pad_core_44xx.h +++ b/arch/arm/mach-omap2/include/mach/ctrl_module_pad_core_44xx.h | |||
@@ -941,10 +941,10 @@ | |||
941 | #define OMAP4_DSI2_LANEENABLE_MASK (0x7 << 29) | 941 | #define OMAP4_DSI2_LANEENABLE_MASK (0x7 << 29) |
942 | #define OMAP4_DSI1_LANEENABLE_SHIFT 24 | 942 | #define OMAP4_DSI1_LANEENABLE_SHIFT 24 |
943 | #define OMAP4_DSI1_LANEENABLE_MASK (0x1f << 24) | 943 | #define OMAP4_DSI1_LANEENABLE_MASK (0x1f << 24) |
944 | #define OMAP4_DSI1_PIPD_SHIFT 19 | 944 | #define OMAP4_DSI2_PIPD_SHIFT 19 |
945 | #define OMAP4_DSI1_PIPD_MASK (0x1f << 19) | 945 | #define OMAP4_DSI2_PIPD_MASK (0x1f << 19) |
946 | #define OMAP4_DSI2_PIPD_SHIFT 14 | 946 | #define OMAP4_DSI1_PIPD_SHIFT 14 |
947 | #define OMAP4_DSI2_PIPD_MASK (0x1f << 14) | 947 | #define OMAP4_DSI1_PIPD_MASK (0x1f << 14) |
948 | 948 | ||
949 | /* CONTROL_MCBSPLP */ | 949 | /* CONTROL_MCBSPLP */ |
950 | #define OMAP4_ALBCTRLRX_FSX_SHIFT 31 | 950 | #define OMAP4_ALBCTRLRX_FSX_SHIFT 31 |
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index a5d8dce2a70b..25d20ced03e1 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c | |||
@@ -359,6 +359,7 @@ static void __init omap_hwmod_init_postsetup(void) | |||
359 | omap_pm_if_early_init(); | 359 | omap_pm_if_early_init(); |
360 | } | 360 | } |
361 | 361 | ||
362 | #ifdef CONFIG_ARCH_OMAP2 | ||
362 | void __init omap2420_init_early(void) | 363 | void __init omap2420_init_early(void) |
363 | { | 364 | { |
364 | omap2_set_globals_242x(); | 365 | omap2_set_globals_242x(); |
@@ -382,11 +383,13 @@ void __init omap2430_init_early(void) | |||
382 | omap_hwmod_init_postsetup(); | 383 | omap_hwmod_init_postsetup(); |
383 | omap2430_clk_init(); | 384 | omap2430_clk_init(); |
384 | } | 385 | } |
386 | #endif | ||
385 | 387 | ||
386 | /* | 388 | /* |
387 | * Currently only board-omap3beagle.c should call this because of the | 389 | * Currently only board-omap3beagle.c should call this because of the |
388 | * same machine_id for 34xx and 36xx beagle.. Will get fixed with DT. | 390 | * same machine_id for 34xx and 36xx beagle.. Will get fixed with DT. |
389 | */ | 391 | */ |
392 | #ifdef CONFIG_ARCH_OMAP3 | ||
390 | void __init omap3_init_early(void) | 393 | void __init omap3_init_early(void) |
391 | { | 394 | { |
392 | omap2_set_globals_3xxx(); | 395 | omap2_set_globals_3xxx(); |
@@ -430,7 +433,9 @@ void __init ti816x_init_early(void) | |||
430 | omap_hwmod_init_postsetup(); | 433 | omap_hwmod_init_postsetup(); |
431 | omap3xxx_clk_init(); | 434 | omap3xxx_clk_init(); |
432 | } | 435 | } |
436 | #endif | ||
433 | 437 | ||
438 | #ifdef CONFIG_ARCH_OMAP4 | ||
434 | void __init omap4430_init_early(void) | 439 | void __init omap4430_init_early(void) |
435 | { | 440 | { |
436 | omap2_set_globals_443x(); | 441 | omap2_set_globals_443x(); |
@@ -442,6 +447,7 @@ void __init omap4430_init_early(void) | |||
442 | omap_hwmod_init_postsetup(); | 447 | omap_hwmod_init_postsetup(); |
443 | omap4xxx_clk_init(); | 448 | omap4xxx_clk_init(); |
444 | } | 449 | } |
450 | #endif | ||
445 | 451 | ||
446 | void __init omap_sdrc_init(struct omap_sdrc_params *sdrc_cs0, | 452 | void __init omap_sdrc_init(struct omap_sdrc_params *sdrc_cs0, |
447 | struct omap_sdrc_params *sdrc_cs1) | 453 | struct omap_sdrc_params *sdrc_cs1) |
diff --git a/arch/arm/mach-omap2/mailbox.c b/arch/arm/mach-omap2/mailbox.c index 86d564a640bb..609ea2ded7e3 100644 --- a/arch/arm/mach-omap2/mailbox.c +++ b/arch/arm/mach-omap2/mailbox.c | |||
@@ -10,6 +10,7 @@ | |||
10 | * for more details. | 10 | * for more details. |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/module.h> | ||
13 | #include <linux/clk.h> | 14 | #include <linux/clk.h> |
14 | #include <linux/err.h> | 15 | #include <linux/err.h> |
15 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
diff --git a/arch/arm/mach-omap2/omap-iommu.c b/arch/arm/mach-omap2/omap-iommu.c index e61feadcda4e..b8822048e409 100644 --- a/arch/arm/mach-omap2/omap-iommu.c +++ b/arch/arm/mach-omap2/omap-iommu.c | |||
@@ -10,6 +10,7 @@ | |||
10 | * published by the Free Software Foundation. | 10 | * published by the Free Software Foundation. |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/module.h> | ||
13 | #include <linux/platform_device.h> | 14 | #include <linux/platform_device.h> |
14 | 15 | ||
15 | #include <plat/iommu.h> | 16 | #include <plat/iommu.h> |
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index d71380705080..6b3088db83b7 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c | |||
@@ -2625,7 +2625,7 @@ ohsps_unlock: | |||
2625 | * Returns the context loss count of the powerdomain assocated with @oh | 2625 | * Returns the context loss count of the powerdomain assocated with @oh |
2626 | * upon success, or zero if no powerdomain exists for @oh. | 2626 | * upon success, or zero if no powerdomain exists for @oh. |
2627 | */ | 2627 | */ |
2628 | u32 omap_hwmod_get_context_loss_count(struct omap_hwmod *oh) | 2628 | int omap_hwmod_get_context_loss_count(struct omap_hwmod *oh) |
2629 | { | 2629 | { |
2630 | struct powerdomain *pwrdm; | 2630 | struct powerdomain *pwrdm; |
2631 | int ret = 0; | 2631 | int ret = 0; |
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index 3008e1672c7a..bc9035ec87fc 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | |||
@@ -3159,7 +3159,6 @@ static __initdata struct omap_hwmod *omap3xxx_hwmods[] = { | |||
3159 | &omap3xxx_mmc2_hwmod, | 3159 | &omap3xxx_mmc2_hwmod, |
3160 | &omap3xxx_mmc3_hwmod, | 3160 | &omap3xxx_mmc3_hwmod, |
3161 | &omap3xxx_mpu_hwmod, | 3161 | &omap3xxx_mpu_hwmod, |
3162 | &omap3xxx_iva_hwmod, | ||
3163 | 3162 | ||
3164 | &omap3xxx_timer1_hwmod, | 3163 | &omap3xxx_timer1_hwmod, |
3165 | &omap3xxx_timer2_hwmod, | 3164 | &omap3xxx_timer2_hwmod, |
@@ -3188,8 +3187,6 @@ static __initdata struct omap_hwmod *omap3xxx_hwmods[] = { | |||
3188 | &omap3xxx_i2c1_hwmod, | 3187 | &omap3xxx_i2c1_hwmod, |
3189 | &omap3xxx_i2c2_hwmod, | 3188 | &omap3xxx_i2c2_hwmod, |
3190 | &omap3xxx_i2c3_hwmod, | 3189 | &omap3xxx_i2c3_hwmod, |
3191 | &omap34xx_sr1_hwmod, | ||
3192 | &omap34xx_sr2_hwmod, | ||
3193 | 3190 | ||
3194 | /* gpio class */ | 3191 | /* gpio class */ |
3195 | &omap3xxx_gpio1_hwmod, | 3192 | &omap3xxx_gpio1_hwmod, |
@@ -3211,8 +3208,6 @@ static __initdata struct omap_hwmod *omap3xxx_hwmods[] = { | |||
3211 | &omap3xxx_mcbsp2_sidetone_hwmod, | 3208 | &omap3xxx_mcbsp2_sidetone_hwmod, |
3212 | &omap3xxx_mcbsp3_sidetone_hwmod, | 3209 | &omap3xxx_mcbsp3_sidetone_hwmod, |
3213 | 3210 | ||
3214 | /* mailbox class */ | ||
3215 | &omap3xxx_mailbox_hwmod, | ||
3216 | 3211 | ||
3217 | /* mcspi class */ | 3212 | /* mcspi class */ |
3218 | &omap34xx_mcspi1, | 3213 | &omap34xx_mcspi1, |
@@ -3225,31 +3220,39 @@ static __initdata struct omap_hwmod *omap3xxx_hwmods[] = { | |||
3225 | 3220 | ||
3226 | /* 3430ES1-only hwmods */ | 3221 | /* 3430ES1-only hwmods */ |
3227 | static __initdata struct omap_hwmod *omap3430es1_hwmods[] = { | 3222 | static __initdata struct omap_hwmod *omap3430es1_hwmods[] = { |
3223 | &omap3xxx_iva_hwmod, | ||
3228 | &omap3430es1_dss_core_hwmod, | 3224 | &omap3430es1_dss_core_hwmod, |
3225 | &omap3xxx_mailbox_hwmod, | ||
3229 | NULL | 3226 | NULL |
3230 | }; | 3227 | }; |
3231 | 3228 | ||
3232 | /* 3430ES2+-only hwmods */ | 3229 | /* 3430ES2+-only hwmods */ |
3233 | static __initdata struct omap_hwmod *omap3430es2plus_hwmods[] = { | 3230 | static __initdata struct omap_hwmod *omap3430es2plus_hwmods[] = { |
3231 | &omap3xxx_iva_hwmod, | ||
3234 | &omap3xxx_dss_core_hwmod, | 3232 | &omap3xxx_dss_core_hwmod, |
3235 | &omap3xxx_usbhsotg_hwmod, | 3233 | &omap3xxx_usbhsotg_hwmod, |
3234 | &omap3xxx_mailbox_hwmod, | ||
3236 | NULL | 3235 | NULL |
3237 | }; | 3236 | }; |
3238 | 3237 | ||
3239 | /* 34xx-only hwmods (all ES revisions) */ | 3238 | /* 34xx-only hwmods (all ES revisions) */ |
3240 | static __initdata struct omap_hwmod *omap34xx_hwmods[] = { | 3239 | static __initdata struct omap_hwmod *omap34xx_hwmods[] = { |
3240 | &omap3xxx_iva_hwmod, | ||
3241 | &omap34xx_sr1_hwmod, | 3241 | &omap34xx_sr1_hwmod, |
3242 | &omap34xx_sr2_hwmod, | 3242 | &omap34xx_sr2_hwmod, |
3243 | &omap3xxx_mailbox_hwmod, | ||
3243 | NULL | 3244 | NULL |
3244 | }; | 3245 | }; |
3245 | 3246 | ||
3246 | /* 36xx-only hwmods (all ES revisions) */ | 3247 | /* 36xx-only hwmods (all ES revisions) */ |
3247 | static __initdata struct omap_hwmod *omap36xx_hwmods[] = { | 3248 | static __initdata struct omap_hwmod *omap36xx_hwmods[] = { |
3249 | &omap3xxx_iva_hwmod, | ||
3248 | &omap3xxx_uart4_hwmod, | 3250 | &omap3xxx_uart4_hwmod, |
3249 | &omap3xxx_dss_core_hwmod, | 3251 | &omap3xxx_dss_core_hwmod, |
3250 | &omap36xx_sr1_hwmod, | 3252 | &omap36xx_sr1_hwmod, |
3251 | &omap36xx_sr2_hwmod, | 3253 | &omap36xx_sr2_hwmod, |
3252 | &omap3xxx_usbhsotg_hwmod, | 3254 | &omap3xxx_usbhsotg_hwmod, |
3255 | &omap3xxx_mailbox_hwmod, | ||
3253 | NULL | 3256 | NULL |
3254 | }; | 3257 | }; |
3255 | 3258 | ||
@@ -3267,7 +3270,7 @@ int __init omap3xxx_hwmod_init(void) | |||
3267 | 3270 | ||
3268 | /* Register hwmods common to all OMAP3 */ | 3271 | /* Register hwmods common to all OMAP3 */ |
3269 | r = omap_hwmod_register(omap3xxx_hwmods); | 3272 | r = omap_hwmod_register(omap3xxx_hwmods); |
3270 | if (!r) | 3273 | if (r < 0) |
3271 | return r; | 3274 | return r; |
3272 | 3275 | ||
3273 | rev = omap_rev(); | 3276 | rev = omap_rev(); |
@@ -3292,7 +3295,7 @@ int __init omap3xxx_hwmod_init(void) | |||
3292 | }; | 3295 | }; |
3293 | 3296 | ||
3294 | r = omap_hwmod_register(h); | 3297 | r = omap_hwmod_register(h); |
3295 | if (!r) | 3298 | if (r < 0) |
3296 | return r; | 3299 | return r; |
3297 | 3300 | ||
3298 | /* | 3301 | /* |
diff --git a/arch/arm/mach-omap2/omap_l3_noc.c b/arch/arm/mach-omap2/omap_l3_noc.c index c8b1bef92e5a..6a66aa5e2a5b 100644 --- a/arch/arm/mach-omap2/omap_l3_noc.c +++ b/arch/arm/mach-omap2/omap_l3_noc.c | |||
@@ -20,6 +20,7 @@ | |||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
21 | * USA | 21 | * USA |
22 | */ | 22 | */ |
23 | #include <linux/module.h> | ||
23 | #include <linux/init.h> | 24 | #include <linux/init.h> |
24 | #include <linux/io.h> | 25 | #include <linux/io.h> |
25 | #include <linux/platform_device.h> | 26 | #include <linux/platform_device.h> |
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index c8cbd00a41af..efa66494c1e3 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c | |||
@@ -99,31 +99,27 @@ static void omap3_enable_io_chain(void) | |||
99 | { | 99 | { |
100 | int timeout = 0; | 100 | int timeout = 0; |
101 | 101 | ||
102 | if (omap_rev() >= OMAP3430_REV_ES3_1) { | 102 | omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD, |
103 | omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD, | 103 | PM_WKEN); |
104 | PM_WKEN); | 104 | /* Do a readback to assure write has been done */ |
105 | /* Do a readback to assure write has been done */ | 105 | omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN); |
106 | omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN); | 106 | |
107 | 107 | while (!(omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN) & | |
108 | while (!(omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN) & | 108 | OMAP3430_ST_IO_CHAIN_MASK)) { |
109 | OMAP3430_ST_IO_CHAIN_MASK)) { | 109 | timeout++; |
110 | timeout++; | 110 | if (timeout > 1000) { |
111 | if (timeout > 1000) { | 111 | pr_err("Wake up daisy chain activation failed.\n"); |
112 | printk(KERN_ERR "Wake up daisy chain " | 112 | return; |
113 | "activation failed.\n"); | ||
114 | return; | ||
115 | } | ||
116 | omap2_prm_set_mod_reg_bits(OMAP3430_ST_IO_CHAIN_MASK, | ||
117 | WKUP_MOD, PM_WKEN); | ||
118 | } | 113 | } |
114 | omap2_prm_set_mod_reg_bits(OMAP3430_ST_IO_CHAIN_MASK, | ||
115 | WKUP_MOD, PM_WKEN); | ||
119 | } | 116 | } |
120 | } | 117 | } |
121 | 118 | ||
122 | static void omap3_disable_io_chain(void) | 119 | static void omap3_disable_io_chain(void) |
123 | { | 120 | { |
124 | if (omap_rev() >= OMAP3430_REV_ES3_1) | 121 | omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD, |
125 | omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD, | 122 | PM_WKEN); |
126 | PM_WKEN); | ||
127 | } | 123 | } |
128 | 124 | ||
129 | static void omap3_core_save_context(void) | 125 | static void omap3_core_save_context(void) |
@@ -363,7 +359,6 @@ void omap_sram_idle(void) | |||
363 | printk(KERN_ERR "Invalid mpu state in sram_idle\n"); | 359 | printk(KERN_ERR "Invalid mpu state in sram_idle\n"); |
364 | return; | 360 | return; |
365 | } | 361 | } |
366 | pwrdm_pre_transition(); | ||
367 | 362 | ||
368 | /* NEON control */ | 363 | /* NEON control */ |
369 | if (pwrdm_read_pwrst(neon_pwrdm) == PWRDM_POWER_ON) | 364 | if (pwrdm_read_pwrst(neon_pwrdm) == PWRDM_POWER_ON) |
@@ -376,7 +371,8 @@ void omap_sram_idle(void) | |||
376 | (per_next_state < PWRDM_POWER_ON || | 371 | (per_next_state < PWRDM_POWER_ON || |
377 | core_next_state < PWRDM_POWER_ON)) { | 372 | core_next_state < PWRDM_POWER_ON)) { |
378 | omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN); | 373 | omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN); |
379 | omap3_enable_io_chain(); | 374 | if (omap3_has_io_chain_ctrl()) |
375 | omap3_enable_io_chain(); | ||
380 | } | 376 | } |
381 | 377 | ||
382 | /* Block console output in case it is on one of the OMAP UARTs */ | 378 | /* Block console output in case it is on one of the OMAP UARTs */ |
@@ -386,6 +382,8 @@ void omap_sram_idle(void) | |||
386 | if (!console_trylock()) | 382 | if (!console_trylock()) |
387 | goto console_still_active; | 383 | goto console_still_active; |
388 | 384 | ||
385 | pwrdm_pre_transition(); | ||
386 | |||
389 | /* PER */ | 387 | /* PER */ |
390 | if (per_next_state < PWRDM_POWER_ON) { | 388 | if (per_next_state < PWRDM_POWER_ON) { |
391 | per_going_off = (per_next_state == PWRDM_POWER_OFF) ? 1 : 0; | 389 | per_going_off = (per_next_state == PWRDM_POWER_OFF) ? 1 : 0; |
@@ -409,13 +407,14 @@ void omap_sram_idle(void) | |||
409 | omap3_intc_prepare_idle(); | 407 | omap3_intc_prepare_idle(); |
410 | 408 | ||
411 | /* | 409 | /* |
412 | * On EMU/HS devices ROM code restores a SRDC value | 410 | * On EMU/HS devices ROM code restores a SRDC value |
413 | * from scratchpad which has automatic self refresh on timeout | 411 | * from scratchpad which has automatic self refresh on timeout |
414 | * of AUTO_CNT = 1 enabled. This takes care of erratum ID i443. | 412 | * of AUTO_CNT = 1 enabled. This takes care of erratum ID i443. |
415 | * Hence store/restore the SDRC_POWER register here. | 413 | * Hence store/restore the SDRC_POWER register here. |
416 | */ | 414 | */ |
417 | if (omap_rev() >= OMAP3430_REV_ES3_0 && | 415 | if (cpu_is_omap3430() && omap_rev() >= OMAP3430_REV_ES3_0 && |
418 | omap_type() != OMAP2_DEVICE_TYPE_GP && | 416 | (omap_type() == OMAP2_DEVICE_TYPE_EMU || |
417 | omap_type() == OMAP2_DEVICE_TYPE_SEC) && | ||
419 | core_next_state == PWRDM_POWER_OFF) | 418 | core_next_state == PWRDM_POWER_OFF) |
420 | sdrc_pwr = sdrc_read_reg(SDRC_POWER); | 419 | sdrc_pwr = sdrc_read_reg(SDRC_POWER); |
421 | 420 | ||
@@ -432,8 +431,9 @@ void omap_sram_idle(void) | |||
432 | omap34xx_do_sram_idle(save_state); | 431 | omap34xx_do_sram_idle(save_state); |
433 | 432 | ||
434 | /* Restore normal SDRC POWER settings */ | 433 | /* Restore normal SDRC POWER settings */ |
435 | if (omap_rev() >= OMAP3430_REV_ES3_0 && | 434 | if (cpu_is_omap3430() && omap_rev() >= OMAP3430_REV_ES3_0 && |
436 | omap_type() != OMAP2_DEVICE_TYPE_GP && | 435 | (omap_type() == OMAP2_DEVICE_TYPE_EMU || |
436 | omap_type() == OMAP2_DEVICE_TYPE_SEC) && | ||
437 | core_next_state == PWRDM_POWER_OFF) | 437 | core_next_state == PWRDM_POWER_OFF) |
438 | sdrc_write_reg(sdrc_pwr, SDRC_POWER); | 438 | sdrc_write_reg(sdrc_pwr, SDRC_POWER); |
439 | 439 | ||
@@ -455,6 +455,8 @@ void omap_sram_idle(void) | |||
455 | } | 455 | } |
456 | omap3_intc_resume_idle(); | 456 | omap3_intc_resume_idle(); |
457 | 457 | ||
458 | pwrdm_post_transition(); | ||
459 | |||
458 | /* PER */ | 460 | /* PER */ |
459 | if (per_next_state < PWRDM_POWER_ON) { | 461 | if (per_next_state < PWRDM_POWER_ON) { |
460 | per_prev_state = pwrdm_read_prev_pwrst(per_pwrdm); | 462 | per_prev_state = pwrdm_read_prev_pwrst(per_pwrdm); |
@@ -475,11 +477,10 @@ console_still_active: | |||
475 | core_next_state < PWRDM_POWER_ON)) { | 477 | core_next_state < PWRDM_POWER_ON)) { |
476 | omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, | 478 | omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, |
477 | PM_WKEN); | 479 | PM_WKEN); |
478 | omap3_disable_io_chain(); | 480 | if (omap3_has_io_chain_ctrl()) |
481 | omap3_disable_io_chain(); | ||
479 | } | 482 | } |
480 | 483 | ||
481 | pwrdm_post_transition(); | ||
482 | |||
483 | clkdm_allow_idle(mpu_pwrdm->pwrdm_clkdms[0]); | 484 | clkdm_allow_idle(mpu_pwrdm->pwrdm_clkdms[0]); |
484 | } | 485 | } |
485 | 486 | ||
@@ -870,6 +871,9 @@ static int __init omap3_pm_init(void) | |||
870 | if (!cpu_is_omap34xx()) | 871 | if (!cpu_is_omap34xx()) |
871 | return -ENODEV; | 872 | return -ENODEV; |
872 | 873 | ||
874 | if (!omap3_has_io_chain_ctrl()) | ||
875 | pr_warning("PM: no software I/O chain control; some wakeups may be lost\n"); | ||
876 | |||
873 | pm_errata_configure(); | 877 | pm_errata_configure(); |
874 | 878 | ||
875 | /* XXX prcm_setup_regs needs to be before enabling hw | 879 | /* XXX prcm_setup_regs needs to be before enabling hw |
diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c index 5164d587ef52..8a18d1bd61c8 100644 --- a/arch/arm/mach-omap2/powerdomain.c +++ b/arch/arm/mach-omap2/powerdomain.c | |||
@@ -1002,16 +1002,16 @@ int pwrdm_post_transition(void) | |||
1002 | * @pwrdm: struct powerdomain * to wait for | 1002 | * @pwrdm: struct powerdomain * to wait for |
1003 | * | 1003 | * |
1004 | * Context loss count is the sum of powerdomain off-mode counter, the | 1004 | * Context loss count is the sum of powerdomain off-mode counter, the |
1005 | * logic off counter and the per-bank memory off counter. Returns 0 | 1005 | * logic off counter and the per-bank memory off counter. Returns negative |
1006 | * (and WARNs) upon error, otherwise, returns the context loss count. | 1006 | * (and WARNs) upon error, otherwise, returns the context loss count. |
1007 | */ | 1007 | */ |
1008 | u32 pwrdm_get_context_loss_count(struct powerdomain *pwrdm) | 1008 | int pwrdm_get_context_loss_count(struct powerdomain *pwrdm) |
1009 | { | 1009 | { |
1010 | int i, count; | 1010 | int i, count; |
1011 | 1011 | ||
1012 | if (!pwrdm) { | 1012 | if (!pwrdm) { |
1013 | WARN(1, "powerdomain: %s: pwrdm is null\n", __func__); | 1013 | WARN(1, "powerdomain: %s: pwrdm is null\n", __func__); |
1014 | return 0; | 1014 | return -ENODEV; |
1015 | } | 1015 | } |
1016 | 1016 | ||
1017 | count = pwrdm->state_counter[PWRDM_POWER_OFF]; | 1017 | count = pwrdm->state_counter[PWRDM_POWER_OFF]; |
@@ -1020,7 +1020,13 @@ u32 pwrdm_get_context_loss_count(struct powerdomain *pwrdm) | |||
1020 | for (i = 0; i < pwrdm->banks; i++) | 1020 | for (i = 0; i < pwrdm->banks; i++) |
1021 | count += pwrdm->ret_mem_off_counter[i]; | 1021 | count += pwrdm->ret_mem_off_counter[i]; |
1022 | 1022 | ||
1023 | pr_debug("powerdomain: %s: context loss count = %u\n", | 1023 | /* |
1024 | * Context loss count has to be a non-negative value. Clear the sign | ||
1025 | * bit to get a value range from 0 to INT_MAX. | ||
1026 | */ | ||
1027 | count &= INT_MAX; | ||
1028 | |||
1029 | pr_debug("powerdomain: %s: context loss count = %d\n", | ||
1024 | pwrdm->name, count); | 1030 | pwrdm->name, count); |
1025 | 1031 | ||
1026 | return count; | 1032 | return count; |
diff --git a/arch/arm/mach-omap2/powerdomain.h b/arch/arm/mach-omap2/powerdomain.h index 42e6dd8f2a78..0d72a8a8ce4d 100644 --- a/arch/arm/mach-omap2/powerdomain.h +++ b/arch/arm/mach-omap2/powerdomain.h | |||
@@ -217,7 +217,7 @@ int pwrdm_clkdm_state_switch(struct clockdomain *clkdm); | |||
217 | int pwrdm_pre_transition(void); | 217 | int pwrdm_pre_transition(void); |
218 | int pwrdm_post_transition(void); | 218 | int pwrdm_post_transition(void); |
219 | int pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm); | 219 | int pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm); |
220 | u32 pwrdm_get_context_loss_count(struct powerdomain *pwrdm); | 220 | int pwrdm_get_context_loss_count(struct powerdomain *pwrdm); |
221 | bool pwrdm_can_ever_lose_context(struct powerdomain *pwrdm); | 221 | bool pwrdm_can_ever_lose_context(struct powerdomain *pwrdm); |
222 | 222 | ||
223 | extern void omap242x_powerdomains_init(void); | 223 | extern void omap242x_powerdomains_init(void); |
diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c index 0347b93211e6..6a4f6839a7d9 100644 --- a/arch/arm/mach-omap2/smartreflex.c +++ b/arch/arm/mach-omap2/smartreflex.c | |||
@@ -17,6 +17,7 @@ | |||
17 | * published by the Free Software Foundation. | 17 | * published by the Free Software Foundation. |
18 | */ | 18 | */ |
19 | 19 | ||
20 | #include <linux/module.h> | ||
20 | #include <linux/interrupt.h> | 21 | #include <linux/interrupt.h> |
21 | #include <linux/clk.h> | 22 | #include <linux/clk.h> |
22 | #include <linux/io.h> | 23 | #include <linux/io.h> |
diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c index e49fc7be2229..037b0d7d4e05 100644 --- a/arch/arm/mach-omap2/timer.c +++ b/arch/arm/mach-omap2/timer.c | |||
@@ -408,14 +408,6 @@ static int omap2_dm_timer_set_src(struct platform_device *pdev, int source) | |||
408 | return ret; | 408 | return ret; |
409 | } | 409 | } |
410 | 410 | ||
411 | struct omap_device_pm_latency omap2_dmtimer_latency[] = { | ||
412 | { | ||
413 | .deactivate_func = omap_device_idle_hwmods, | ||
414 | .activate_func = omap_device_enable_hwmods, | ||
415 | .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST, | ||
416 | }, | ||
417 | }; | ||
418 | |||
419 | /** | 411 | /** |
420 | * omap_timer_init - build and register timer device with an | 412 | * omap_timer_init - build and register timer device with an |
421 | * associated timer hwmod | 413 | * associated timer hwmod |
@@ -477,9 +469,7 @@ static int __init omap_timer_init(struct omap_hwmod *oh, void *unused) | |||
477 | pdata->get_context_loss_count = omap_pm_get_dev_context_loss_count; | 469 | pdata->get_context_loss_count = omap_pm_get_dev_context_loss_count; |
478 | #endif | 470 | #endif |
479 | pdev = omap_device_build(name, id, oh, pdata, sizeof(*pdata), | 471 | pdev = omap_device_build(name, id, oh, pdata, sizeof(*pdata), |
480 | omap2_dmtimer_latency, | 472 | NULL, 0, 0); |
481 | ARRAY_SIZE(omap2_dmtimer_latency), | ||
482 | 0); | ||
483 | 473 | ||
484 | if (IS_ERR(pdev)) { | 474 | if (IS_ERR(pdev)) { |
485 | pr_err("%s: Can't build omap_device for %s: %s.\n", | 475 | pr_err("%s: Can't build omap_device for %s: %s.\n", |
diff --git a/arch/arm/mach-omap2/usb-musb.c b/arch/arm/mach-omap2/usb-musb.c index 47fb5d607630..267975086a7b 100644 --- a/arch/arm/mach-omap2/usb-musb.c +++ b/arch/arm/mach-omap2/usb-musb.c | |||
@@ -60,44 +60,6 @@ static struct musb_hdrc_platform_data musb_plat = { | |||
60 | 60 | ||
61 | static u64 musb_dmamask = DMA_BIT_MASK(32); | 61 | static u64 musb_dmamask = DMA_BIT_MASK(32); |
62 | 62 | ||
63 | static void usb_musb_mux_init(struct omap_musb_board_data *board_data) | ||
64 | { | ||
65 | switch (board_data->interface_type) { | ||
66 | case MUSB_INTERFACE_UTMI: | ||
67 | omap_mux_init_signal("usba0_otg_dp", OMAP_PIN_INPUT); | ||
68 | omap_mux_init_signal("usba0_otg_dm", OMAP_PIN_INPUT); | ||
69 | break; | ||
70 | case MUSB_INTERFACE_ULPI: | ||
71 | omap_mux_init_signal("usba0_ulpiphy_clk", | ||
72 | OMAP_PIN_INPUT_PULLDOWN); | ||
73 | omap_mux_init_signal("usba0_ulpiphy_stp", | ||
74 | OMAP_PIN_INPUT_PULLDOWN); | ||
75 | omap_mux_init_signal("usba0_ulpiphy_dir", | ||
76 | OMAP_PIN_INPUT_PULLDOWN); | ||
77 | omap_mux_init_signal("usba0_ulpiphy_nxt", | ||
78 | OMAP_PIN_INPUT_PULLDOWN); | ||
79 | omap_mux_init_signal("usba0_ulpiphy_dat0", | ||
80 | OMAP_PIN_INPUT_PULLDOWN); | ||
81 | omap_mux_init_signal("usba0_ulpiphy_dat1", | ||
82 | OMAP_PIN_INPUT_PULLDOWN); | ||
83 | omap_mux_init_signal("usba0_ulpiphy_dat2", | ||
84 | OMAP_PIN_INPUT_PULLDOWN); | ||
85 | omap_mux_init_signal("usba0_ulpiphy_dat3", | ||
86 | OMAP_PIN_INPUT_PULLDOWN); | ||
87 | omap_mux_init_signal("usba0_ulpiphy_dat4", | ||
88 | OMAP_PIN_INPUT_PULLDOWN); | ||
89 | omap_mux_init_signal("usba0_ulpiphy_dat5", | ||
90 | OMAP_PIN_INPUT_PULLDOWN); | ||
91 | omap_mux_init_signal("usba0_ulpiphy_dat6", | ||
92 | OMAP_PIN_INPUT_PULLDOWN); | ||
93 | omap_mux_init_signal("usba0_ulpiphy_dat7", | ||
94 | OMAP_PIN_INPUT_PULLDOWN); | ||
95 | break; | ||
96 | default: | ||
97 | break; | ||
98 | } | ||
99 | } | ||
100 | |||
101 | static struct omap_musb_board_data musb_default_board_data = { | 63 | static struct omap_musb_board_data musb_default_board_data = { |
102 | .interface_type = MUSB_INTERFACE_ULPI, | 64 | .interface_type = MUSB_INTERFACE_ULPI, |
103 | .mode = MUSB_OTG, | 65 | .mode = MUSB_OTG, |
diff --git a/arch/arm/mach-orion5x/ts78xx-setup.c b/arch/arm/mach-orion5x/ts78xx-setup.c index 6c75cd35c4c8..b35e2005a348 100644 --- a/arch/arm/mach-orion5x/ts78xx-setup.c +++ b/arch/arm/mach-orion5x/ts78xx-setup.c | |||
@@ -275,7 +275,7 @@ static struct platform_nand_data ts78xx_ts_nand_data = { | |||
275 | .partitions = ts78xx_ts_nand_parts, | 275 | .partitions = ts78xx_ts_nand_parts, |
276 | .nr_partitions = ARRAY_SIZE(ts78xx_ts_nand_parts), | 276 | .nr_partitions = ARRAY_SIZE(ts78xx_ts_nand_parts), |
277 | .chip_delay = 15, | 277 | .chip_delay = 15, |
278 | .options = NAND_USE_FLASH_BBT, | 278 | .bbt_options = NAND_BBT_USE_FLASH, |
279 | }, | 279 | }, |
280 | .ctrl = { | 280 | .ctrl = { |
281 | /* | 281 | /* |
diff --git a/arch/arm/mach-picoxcell/include/mach/debug-macro.S b/arch/arm/mach-picoxcell/include/mach/debug-macro.S index 8f2c234ed9d9..58d4ee3ae949 100644 --- a/arch/arm/mach-picoxcell/include/mach/debug-macro.S +++ b/arch/arm/mach-picoxcell/include/mach/debug-macro.S | |||
@@ -14,7 +14,7 @@ | |||
14 | 14 | ||
15 | #define UART_SHIFT 2 | 15 | #define UART_SHIFT 2 |
16 | 16 | ||
17 | .macro addruart, rp, rv | 17 | .macro addruart, rp, rv, tmp |
18 | ldr \rv, =PHYS_TO_IO(PICOXCELL_UART1_BASE) | 18 | ldr \rv, =PHYS_TO_IO(PICOXCELL_UART1_BASE) |
19 | ldr \rp, =PICOXCELL_UART1_BASE | 19 | ldr \rp, =PICOXCELL_UART1_BASE |
20 | .endm | 20 | .endm |
diff --git a/arch/arm/mach-pxa/cm-x300.c b/arch/arm/mach-pxa/cm-x300.c index 21ac8e3e2f7a..684acf6ed3d5 100644 --- a/arch/arm/mach-pxa/cm-x300.c +++ b/arch/arm/mach-pxa/cm-x300.c | |||
@@ -424,8 +424,9 @@ static struct mtd_partition cm_x300_nand_partitions[] = { | |||
424 | static struct pxa3xx_nand_platform_data cm_x300_nand_info = { | 424 | static struct pxa3xx_nand_platform_data cm_x300_nand_info = { |
425 | .enable_arbiter = 1, | 425 | .enable_arbiter = 1, |
426 | .keep_config = 1, | 426 | .keep_config = 1, |
427 | .parts = cm_x300_nand_partitions, | 427 | .num_cs = 1, |
428 | .nr_parts = ARRAY_SIZE(cm_x300_nand_partitions), | 428 | .parts[0] = cm_x300_nand_partitions, |
429 | .nr_parts[0] = ARRAY_SIZE(cm_x300_nand_partitions), | ||
429 | }; | 430 | }; |
430 | 431 | ||
431 | static void __init cm_x300_init_nand(void) | 432 | static void __init cm_x300_init_nand(void) |
diff --git a/arch/arm/mach-pxa/colibri-pxa3xx.c b/arch/arm/mach-pxa/colibri-pxa3xx.c index 3f9be419959d..2b8ca0de8a3d 100644 --- a/arch/arm/mach-pxa/colibri-pxa3xx.c +++ b/arch/arm/mach-pxa/colibri-pxa3xx.c | |||
@@ -139,8 +139,9 @@ static struct mtd_partition colibri_nand_partitions[] = { | |||
139 | static struct pxa3xx_nand_platform_data colibri_nand_info = { | 139 | static struct pxa3xx_nand_platform_data colibri_nand_info = { |
140 | .enable_arbiter = 1, | 140 | .enable_arbiter = 1, |
141 | .keep_config = 1, | 141 | .keep_config = 1, |
142 | .parts = colibri_nand_partitions, | 142 | .num_cs = 1, |
143 | .nr_parts = ARRAY_SIZE(colibri_nand_partitions), | 143 | .parts[0] = colibri_nand_partitions, |
144 | .nr_parts[0] = ARRAY_SIZE(colibri_nand_partitions), | ||
144 | }; | 145 | }; |
145 | 146 | ||
146 | void __init colibri_pxa3xx_init_nand(void) | 147 | void __init colibri_pxa3xx_init_nand(void) |
diff --git a/arch/arm/mach-pxa/littleton.c b/arch/arm/mach-pxa/littleton.c index 27147f6ff7cb..d21e28b46d81 100644 --- a/arch/arm/mach-pxa/littleton.c +++ b/arch/arm/mach-pxa/littleton.c | |||
@@ -325,8 +325,9 @@ static struct mtd_partition littleton_nand_partitions[] = { | |||
325 | 325 | ||
326 | static struct pxa3xx_nand_platform_data littleton_nand_info = { | 326 | static struct pxa3xx_nand_platform_data littleton_nand_info = { |
327 | .enable_arbiter = 1, | 327 | .enable_arbiter = 1, |
328 | .parts = littleton_nand_partitions, | 328 | .num_cs = 1, |
329 | .nr_parts = ARRAY_SIZE(littleton_nand_partitions), | 329 | .parts[0] = littleton_nand_partitions, |
330 | .nr_parts[0] = ARRAY_SIZE(littleton_nand_partitions), | ||
330 | }; | 331 | }; |
331 | 332 | ||
332 | static void __init littleton_init_nand(void) | 333 | static void __init littleton_init_nand(void) |
diff --git a/arch/arm/mach-pxa/mxm8x10.c b/arch/arm/mach-pxa/mxm8x10.c index a13a1e365851..83570a79e7d2 100644 --- a/arch/arm/mach-pxa/mxm8x10.c +++ b/arch/arm/mach-pxa/mxm8x10.c | |||
@@ -389,10 +389,11 @@ static struct mtd_partition mxm_8x10_nand_partitions[] = { | |||
389 | }; | 389 | }; |
390 | 390 | ||
391 | static struct pxa3xx_nand_platform_data mxm_8x10_nand_info = { | 391 | static struct pxa3xx_nand_platform_data mxm_8x10_nand_info = { |
392 | .enable_arbiter = 1, | 392 | .enable_arbiter = 1, |
393 | .keep_config = 1, | 393 | .keep_config = 1, |
394 | .parts = mxm_8x10_nand_partitions, | 394 | .num_cs = 1, |
395 | .nr_parts = ARRAY_SIZE(mxm_8x10_nand_partitions) | 395 | .parts[0] = mxm_8x10_nand_partitions, |
396 | .nr_parts[0] = ARRAY_SIZE(mxm_8x10_nand_partitions) | ||
396 | }; | 397 | }; |
397 | 398 | ||
398 | static void __init mxm_8x10_nand_init(void) | 399 | static void __init mxm_8x10_nand_init(void) |
diff --git a/arch/arm/mach-pxa/raumfeld.c b/arch/arm/mach-pxa/raumfeld.c index 9c58e87f2b82..78d643783f99 100644 --- a/arch/arm/mach-pxa/raumfeld.c +++ b/arch/arm/mach-pxa/raumfeld.c | |||
@@ -346,8 +346,9 @@ static struct mtd_partition raumfeld_nand_partitions[] = { | |||
346 | static struct pxa3xx_nand_platform_data raumfeld_nand_info = { | 346 | static struct pxa3xx_nand_platform_data raumfeld_nand_info = { |
347 | .enable_arbiter = 1, | 347 | .enable_arbiter = 1, |
348 | .keep_config = 1, | 348 | .keep_config = 1, |
349 | .parts = raumfeld_nand_partitions, | 349 | .num_cs = 1, |
350 | .nr_parts = ARRAY_SIZE(raumfeld_nand_partitions), | 350 | .parts[0] = raumfeld_nand_partitions, |
351 | .nr_parts[0] = ARRAY_SIZE(raumfeld_nand_partitions), | ||
351 | }; | 352 | }; |
352 | 353 | ||
353 | /** | 354 | /** |
diff --git a/arch/arm/mach-pxa/zylonite.c b/arch/arm/mach-pxa/zylonite.c index 2406fd2727ef..a4c807527095 100644 --- a/arch/arm/mach-pxa/zylonite.c +++ b/arch/arm/mach-pxa/zylonite.c | |||
@@ -366,8 +366,9 @@ static struct mtd_partition zylonite_nand_partitions[] = { | |||
366 | 366 | ||
367 | static struct pxa3xx_nand_platform_data zylonite_nand_info = { | 367 | static struct pxa3xx_nand_platform_data zylonite_nand_info = { |
368 | .enable_arbiter = 1, | 368 | .enable_arbiter = 1, |
369 | .parts = zylonite_nand_partitions, | 369 | .num_cs = 1, |
370 | .nr_parts = ARRAY_SIZE(zylonite_nand_partitions), | 370 | .parts[0] = zylonite_nand_partitions, |
371 | .nr_parts[0] = ARRAY_SIZE(zylonite_nand_partitions), | ||
371 | }; | 372 | }; |
372 | 373 | ||
373 | static void __init zylonite_init_nand(void) | 374 | static void __init zylonite_init_nand(void) |
diff --git a/arch/arm/mach-shmobile/Makefile b/arch/arm/mach-shmobile/Makefile index 2aec2f732515..737bdc631b0d 100644 --- a/arch/arm/mach-shmobile/Makefile +++ b/arch/arm/mach-shmobile/Makefile | |||
@@ -3,7 +3,7 @@ | |||
3 | # | 3 | # |
4 | 4 | ||
5 | # Common objects | 5 | # Common objects |
6 | obj-y := timer.o console.o clock.o pm_runtime.o | 6 | obj-y := timer.o console.o clock.o |
7 | 7 | ||
8 | # CPU objects | 8 | # CPU objects |
9 | obj-$(CONFIG_ARCH_SH7367) += setup-sh7367.o clock-sh7367.o intc-sh7367.o | 9 | obj-$(CONFIG_ARCH_SH7367) += setup-sh7367.o clock-sh7367.o intc-sh7367.o |
diff --git a/arch/arm/mach-shmobile/board-ag5evm.c b/arch/arm/mach-shmobile/board-ag5evm.c index 83624e26b884..b862e9f81e3e 100644 --- a/arch/arm/mach-shmobile/board-ag5evm.c +++ b/arch/arm/mach-shmobile/board-ag5evm.c | |||
@@ -515,14 +515,14 @@ static void __init ag5evm_init(void) | |||
515 | /* enable MMCIF */ | 515 | /* enable MMCIF */ |
516 | gpio_request(GPIO_FN_MMCCLK0, NULL); | 516 | gpio_request(GPIO_FN_MMCCLK0, NULL); |
517 | gpio_request(GPIO_FN_MMCCMD0_PU, NULL); | 517 | gpio_request(GPIO_FN_MMCCMD0_PU, NULL); |
518 | gpio_request(GPIO_FN_MMCD0_0, NULL); | 518 | gpio_request(GPIO_FN_MMCD0_0_PU, NULL); |
519 | gpio_request(GPIO_FN_MMCD0_1, NULL); | 519 | gpio_request(GPIO_FN_MMCD0_1_PU, NULL); |
520 | gpio_request(GPIO_FN_MMCD0_2, NULL); | 520 | gpio_request(GPIO_FN_MMCD0_2_PU, NULL); |
521 | gpio_request(GPIO_FN_MMCD0_3, NULL); | 521 | gpio_request(GPIO_FN_MMCD0_3_PU, NULL); |
522 | gpio_request(GPIO_FN_MMCD0_4, NULL); | 522 | gpio_request(GPIO_FN_MMCD0_4_PU, NULL); |
523 | gpio_request(GPIO_FN_MMCD0_5, NULL); | 523 | gpio_request(GPIO_FN_MMCD0_5_PU, NULL); |
524 | gpio_request(GPIO_FN_MMCD0_6, NULL); | 524 | gpio_request(GPIO_FN_MMCD0_6_PU, NULL); |
525 | gpio_request(GPIO_FN_MMCD0_7, NULL); | 525 | gpio_request(GPIO_FN_MMCD0_7_PU, NULL); |
526 | gpio_request(GPIO_PORT208, NULL); /* Reset */ | 526 | gpio_request(GPIO_PORT208, NULL); /* Reset */ |
527 | gpio_direction_output(GPIO_PORT208, 1); | 527 | gpio_direction_output(GPIO_PORT208, 1); |
528 | 528 | ||
diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c index a3aa0f6df964..4c865ece9ac4 100644 --- a/arch/arm/mach-shmobile/board-ap4evb.c +++ b/arch/arm/mach-shmobile/board-ap4evb.c | |||
@@ -201,7 +201,7 @@ static struct physmap_flash_data nor_flash_data = { | |||
201 | static struct resource nor_flash_resources[] = { | 201 | static struct resource nor_flash_resources[] = { |
202 | [0] = { | 202 | [0] = { |
203 | .start = 0x20000000, /* CS0 shadow instead of regular CS0 */ | 203 | .start = 0x20000000, /* CS0 shadow instead of regular CS0 */ |
204 | .end = 0x28000000 - 1, /* needed by USB MASK ROM boot */ | 204 | .end = 0x28000000 - 1, /* needed by USB MASK ROM boot */ |
205 | .flags = IORESOURCE_MEM, | 205 | .flags = IORESOURCE_MEM, |
206 | } | 206 | } |
207 | }; | 207 | }; |
diff --git a/arch/arm/mach-shmobile/board-kota2.c b/arch/arm/mach-shmobile/board-kota2.c index adc73122bf20..bd9a78424d6b 100644 --- a/arch/arm/mach-shmobile/board-kota2.c +++ b/arch/arm/mach-shmobile/board-kota2.c | |||
@@ -48,6 +48,7 @@ | |||
48 | #include <asm/hardware/cache-l2x0.h> | 48 | #include <asm/hardware/cache-l2x0.h> |
49 | #include <asm/traps.h> | 49 | #include <asm/traps.h> |
50 | 50 | ||
51 | /* SMSC 9220 */ | ||
51 | static struct resource smsc9220_resources[] = { | 52 | static struct resource smsc9220_resources[] = { |
52 | [0] = { | 53 | [0] = { |
53 | .start = 0x14000000, /* CS5A */ | 54 | .start = 0x14000000, /* CS5A */ |
@@ -77,6 +78,7 @@ static struct platform_device eth_device = { | |||
77 | .num_resources = ARRAY_SIZE(smsc9220_resources), | 78 | .num_resources = ARRAY_SIZE(smsc9220_resources), |
78 | }; | 79 | }; |
79 | 80 | ||
81 | /* KEYSC */ | ||
80 | static struct sh_keysc_info keysc_platdata = { | 82 | static struct sh_keysc_info keysc_platdata = { |
81 | .mode = SH_KEYSC_MODE_6, | 83 | .mode = SH_KEYSC_MODE_6, |
82 | .scan_timing = 3, | 84 | .scan_timing = 3, |
@@ -120,6 +122,7 @@ static struct platform_device keysc_device = { | |||
120 | }, | 122 | }, |
121 | }; | 123 | }; |
122 | 124 | ||
125 | /* GPIO KEY */ | ||
123 | #define GPIO_KEY(c, g, d) { .code = c, .gpio = g, .desc = d, .active_low = 1 } | 126 | #define GPIO_KEY(c, g, d) { .code = c, .gpio = g, .desc = d, .active_low = 1 } |
124 | 127 | ||
125 | static struct gpio_keys_button gpio_buttons[] = { | 128 | static struct gpio_keys_button gpio_buttons[] = { |
@@ -150,6 +153,7 @@ static struct platform_device gpio_keys_device = { | |||
150 | }, | 153 | }, |
151 | }; | 154 | }; |
152 | 155 | ||
156 | /* GPIO LED */ | ||
153 | #define GPIO_LED(n, g) { .name = n, .gpio = g } | 157 | #define GPIO_LED(n, g) { .name = n, .gpio = g } |
154 | 158 | ||
155 | static struct gpio_led gpio_leds[] = { | 159 | static struct gpio_led gpio_leds[] = { |
@@ -175,6 +179,7 @@ static struct platform_device gpio_leds_device = { | |||
175 | }, | 179 | }, |
176 | }; | 180 | }; |
177 | 181 | ||
182 | /* MMCIF */ | ||
178 | static struct resource mmcif_resources[] = { | 183 | static struct resource mmcif_resources[] = { |
179 | [0] = { | 184 | [0] = { |
180 | .name = "MMCIF", | 185 | .name = "MMCIF", |
@@ -207,6 +212,7 @@ static struct platform_device mmcif_device = { | |||
207 | .resource = mmcif_resources, | 212 | .resource = mmcif_resources, |
208 | }; | 213 | }; |
209 | 214 | ||
215 | /* SDHI0 */ | ||
210 | static struct sh_mobile_sdhi_info sdhi0_info = { | 216 | static struct sh_mobile_sdhi_info sdhi0_info = { |
211 | .tmio_caps = MMC_CAP_SD_HIGHSPEED, | 217 | .tmio_caps = MMC_CAP_SD_HIGHSPEED, |
212 | .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_HAS_IDLE_WAIT, | 218 | .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_HAS_IDLE_WAIT, |
@@ -243,6 +249,7 @@ static struct platform_device sdhi0_device = { | |||
243 | }, | 249 | }, |
244 | }; | 250 | }; |
245 | 251 | ||
252 | /* SDHI1 */ | ||
246 | static struct sh_mobile_sdhi_info sdhi1_info = { | 253 | static struct sh_mobile_sdhi_info sdhi1_info = { |
247 | .tmio_caps = MMC_CAP_NONREMOVABLE | MMC_CAP_SDIO_IRQ, | 254 | .tmio_caps = MMC_CAP_NONREMOVABLE | MMC_CAP_SDIO_IRQ, |
248 | .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_HAS_IDLE_WAIT, | 255 | .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_HAS_IDLE_WAIT, |
diff --git a/arch/arm/mach-shmobile/clock-sh7372.c b/arch/arm/mach-shmobile/clock-sh7372.c index 66975921e646..995a9c3aec8f 100644 --- a/arch/arm/mach-shmobile/clock-sh7372.c +++ b/arch/arm/mach-shmobile/clock-sh7372.c | |||
@@ -476,7 +476,7 @@ static struct clk_ops fsidiv_clk_ops = { | |||
476 | .disable = fsidiv_disable, | 476 | .disable = fsidiv_disable, |
477 | }; | 477 | }; |
478 | 478 | ||
479 | static struct clk_mapping sh7372_fsidiva_clk_mapping = { | 479 | static struct clk_mapping fsidiva_clk_mapping = { |
480 | .phys = FSIDIVA, | 480 | .phys = FSIDIVA, |
481 | .len = 8, | 481 | .len = 8, |
482 | }; | 482 | }; |
@@ -484,10 +484,10 @@ static struct clk_mapping sh7372_fsidiva_clk_mapping = { | |||
484 | struct clk sh7372_fsidiva_clk = { | 484 | struct clk sh7372_fsidiva_clk = { |
485 | .ops = &fsidiv_clk_ops, | 485 | .ops = &fsidiv_clk_ops, |
486 | .parent = &div6_reparent_clks[DIV6_FSIA], /* late install */ | 486 | .parent = &div6_reparent_clks[DIV6_FSIA], /* late install */ |
487 | .mapping = &sh7372_fsidiva_clk_mapping, | 487 | .mapping = &fsidiva_clk_mapping, |
488 | }; | 488 | }; |
489 | 489 | ||
490 | static struct clk_mapping sh7372_fsidivb_clk_mapping = { | 490 | static struct clk_mapping fsidivb_clk_mapping = { |
491 | .phys = FSIDIVB, | 491 | .phys = FSIDIVB, |
492 | .len = 8, | 492 | .len = 8, |
493 | }; | 493 | }; |
@@ -495,7 +495,7 @@ static struct clk_mapping sh7372_fsidivb_clk_mapping = { | |||
495 | struct clk sh7372_fsidivb_clk = { | 495 | struct clk sh7372_fsidivb_clk = { |
496 | .ops = &fsidiv_clk_ops, | 496 | .ops = &fsidiv_clk_ops, |
497 | .parent = &div6_reparent_clks[DIV6_FSIB], /* late install */ | 497 | .parent = &div6_reparent_clks[DIV6_FSIB], /* late install */ |
498 | .mapping = &sh7372_fsidivb_clk_mapping, | 498 | .mapping = &fsidivb_clk_mapping, |
499 | }; | 499 | }; |
500 | 500 | ||
501 | static struct clk *late_main_clks[] = { | 501 | static struct clk *late_main_clks[] = { |
diff --git a/arch/arm/mach-shmobile/cpuidle.c b/arch/arm/mach-shmobile/cpuidle.c index 2e44f11f592e..1b2334277e85 100644 --- a/arch/arm/mach-shmobile/cpuidle.c +++ b/arch/arm/mach-shmobile/cpuidle.c | |||
@@ -26,65 +26,59 @@ void (*shmobile_cpuidle_modes[CPUIDLE_STATE_MAX])(void) = { | |||
26 | }; | 26 | }; |
27 | 27 | ||
28 | static int shmobile_cpuidle_enter(struct cpuidle_device *dev, | 28 | static int shmobile_cpuidle_enter(struct cpuidle_device *dev, |
29 | struct cpuidle_state *state) | 29 | struct cpuidle_driver *drv, |
30 | int index) | ||
30 | { | 31 | { |
31 | ktime_t before, after; | 32 | ktime_t before, after; |
32 | int requested_state = state - &dev->states[0]; | ||
33 | 33 | ||
34 | dev->last_state = &dev->states[requested_state]; | ||
35 | before = ktime_get(); | 34 | before = ktime_get(); |
36 | 35 | ||
37 | local_irq_disable(); | 36 | local_irq_disable(); |
38 | local_fiq_disable(); | 37 | local_fiq_disable(); |
39 | 38 | ||
40 | shmobile_cpuidle_modes[requested_state](); | 39 | shmobile_cpuidle_modes[index](); |
41 | 40 | ||
42 | local_irq_enable(); | 41 | local_irq_enable(); |
43 | local_fiq_enable(); | 42 | local_fiq_enable(); |
44 | 43 | ||
45 | after = ktime_get(); | 44 | after = ktime_get(); |
46 | return ktime_to_ns(ktime_sub(after, before)) >> 10; | 45 | dev->last_residency = ktime_to_ns(ktime_sub(after, before)) >> 10; |
46 | |||
47 | return index; | ||
47 | } | 48 | } |
48 | 49 | ||
49 | static struct cpuidle_device shmobile_cpuidle_dev; | 50 | static struct cpuidle_device shmobile_cpuidle_dev; |
50 | static struct cpuidle_driver shmobile_cpuidle_driver = { | 51 | static struct cpuidle_driver shmobile_cpuidle_driver = { |
51 | .name = "shmobile_cpuidle", | 52 | .name = "shmobile_cpuidle", |
52 | .owner = THIS_MODULE, | 53 | .owner = THIS_MODULE, |
54 | .states[0] = { | ||
55 | .name = "C1", | ||
56 | .desc = "WFI", | ||
57 | .exit_latency = 1, | ||
58 | .target_residency = 1 * 2, | ||
59 | .flags = CPUIDLE_FLAG_TIME_VALID, | ||
60 | }, | ||
61 | .safe_state_index = 0, /* C1 */ | ||
62 | .state_count = 1, | ||
53 | }; | 63 | }; |
54 | 64 | ||
55 | void (*shmobile_cpuidle_setup)(struct cpuidle_device *dev); | 65 | void (*shmobile_cpuidle_setup)(struct cpuidle_driver *drv); |
56 | 66 | ||
57 | static int shmobile_cpuidle_init(void) | 67 | static int shmobile_cpuidle_init(void) |
58 | { | 68 | { |
59 | struct cpuidle_device *dev = &shmobile_cpuidle_dev; | 69 | struct cpuidle_device *dev = &shmobile_cpuidle_dev; |
60 | struct cpuidle_state *state; | 70 | struct cpuidle_driver *drv = &shmobile_cpuidle_driver; |
61 | int i; | 71 | int i; |
62 | 72 | ||
63 | cpuidle_register_driver(&shmobile_cpuidle_driver); | 73 | for (i = 0; i < CPUIDLE_STATE_MAX; i++) |
64 | 74 | drv->states[i].enter = shmobile_cpuidle_enter; | |
65 | for (i = 0; i < CPUIDLE_STATE_MAX; i++) { | ||
66 | dev->states[i].name[0] = '\0'; | ||
67 | dev->states[i].desc[0] = '\0'; | ||
68 | dev->states[i].enter = shmobile_cpuidle_enter; | ||
69 | } | ||
70 | |||
71 | i = CPUIDLE_DRIVER_STATE_START; | ||
72 | |||
73 | state = &dev->states[i++]; | ||
74 | snprintf(state->name, CPUIDLE_NAME_LEN, "C1"); | ||
75 | strncpy(state->desc, "WFI", CPUIDLE_DESC_LEN); | ||
76 | state->exit_latency = 1; | ||
77 | state->target_residency = 1 * 2; | ||
78 | state->power_usage = 3; | ||
79 | state->flags = 0; | ||
80 | state->flags |= CPUIDLE_FLAG_TIME_VALID; | ||
81 | |||
82 | dev->safe_state = state; | ||
83 | dev->state_count = i; | ||
84 | 75 | ||
85 | if (shmobile_cpuidle_setup) | 76 | if (shmobile_cpuidle_setup) |
86 | shmobile_cpuidle_setup(dev); | 77 | shmobile_cpuidle_setup(drv); |
78 | |||
79 | cpuidle_register_driver(drv); | ||
87 | 80 | ||
81 | dev->state_count = drv->state_count; | ||
88 | cpuidle_register_device(dev); | 82 | cpuidle_register_device(dev); |
89 | 83 | ||
90 | return 0; | 84 | return 0; |
diff --git a/arch/arm/mach-shmobile/include/mach/common.h b/arch/arm/mach-shmobile/include/mach/common.h index c0cdbf997c91..834bd6cd508f 100644 --- a/arch/arm/mach-shmobile/include/mach/common.h +++ b/arch/arm/mach-shmobile/include/mach/common.h | |||
@@ -9,9 +9,9 @@ extern int clk_init(void); | |||
9 | extern void shmobile_handle_irq_intc(struct pt_regs *); | 9 | extern void shmobile_handle_irq_intc(struct pt_regs *); |
10 | extern void shmobile_handle_irq_gic(struct pt_regs *); | 10 | extern void shmobile_handle_irq_gic(struct pt_regs *); |
11 | extern struct platform_suspend_ops shmobile_suspend_ops; | 11 | extern struct platform_suspend_ops shmobile_suspend_ops; |
12 | struct cpuidle_device; | 12 | struct cpuidle_driver; |
13 | extern void (*shmobile_cpuidle_modes[])(void); | 13 | extern void (*shmobile_cpuidle_modes[])(void); |
14 | extern void (*shmobile_cpuidle_setup)(struct cpuidle_device *dev); | 14 | extern void (*shmobile_cpuidle_setup)(struct cpuidle_driver *drv); |
15 | 15 | ||
16 | extern void sh7367_init_irq(void); | 16 | extern void sh7367_init_irq(void); |
17 | extern void sh7367_add_early_devices(void); | 17 | extern void sh7367_add_early_devices(void); |
diff --git a/arch/arm/mach-shmobile/include/mach/sh73a0.h b/arch/arm/mach-shmobile/include/mach/sh73a0.h index 18ae6a990bc2..881d515a9686 100644 --- a/arch/arm/mach-shmobile/include/mach/sh73a0.h +++ b/arch/arm/mach-shmobile/include/mach/sh73a0.h | |||
@@ -470,6 +470,14 @@ enum { | |||
470 | GPIO_FN_SDHICMD2_PU, | 470 | GPIO_FN_SDHICMD2_PU, |
471 | GPIO_FN_MMCCMD0_PU, | 471 | GPIO_FN_MMCCMD0_PU, |
472 | GPIO_FN_MMCCMD1_PU, | 472 | GPIO_FN_MMCCMD1_PU, |
473 | GPIO_FN_MMCD0_0_PU, | ||
474 | GPIO_FN_MMCD0_1_PU, | ||
475 | GPIO_FN_MMCD0_2_PU, | ||
476 | GPIO_FN_MMCD0_3_PU, | ||
477 | GPIO_FN_MMCD0_4_PU, | ||
478 | GPIO_FN_MMCD0_5_PU, | ||
479 | GPIO_FN_MMCD0_6_PU, | ||
480 | GPIO_FN_MMCD0_7_PU, | ||
473 | GPIO_FN_FSIACK_PU, | 481 | GPIO_FN_FSIACK_PU, |
474 | GPIO_FN_FSIAILR_PU, | 482 | GPIO_FN_FSIAILR_PU, |
475 | GPIO_FN_FSIAIBT_PU, | 483 | GPIO_FN_FSIAIBT_PU, |
diff --git a/arch/arm/mach-shmobile/pfc-sh7367.c b/arch/arm/mach-shmobile/pfc-sh7367.c index 128555e76e43..e6e524654e67 100644 --- a/arch/arm/mach-shmobile/pfc-sh7367.c +++ b/arch/arm/mach-shmobile/pfc-sh7367.c | |||
@@ -21,68 +21,49 @@ | |||
21 | #include <linux/gpio.h> | 21 | #include <linux/gpio.h> |
22 | #include <mach/sh7367.h> | 22 | #include <mach/sh7367.h> |
23 | 23 | ||
24 | #define _1(fn, pfx, sfx) fn(pfx, sfx) | 24 | #define CPU_ALL_PORT(fn, pfx, sfx) \ |
25 | 25 | PORT_10(fn, pfx, sfx), PORT_90(fn, pfx, sfx), \ | |
26 | #define _10(fn, pfx, sfx) \ | 26 | PORT_10(fn, pfx##10, sfx), PORT_90(fn, pfx##1, sfx), \ |
27 | _1(fn, pfx##0, sfx), _1(fn, pfx##1, sfx), \ | 27 | PORT_10(fn, pfx##20, sfx), PORT_10(fn, pfx##21, sfx), \ |
28 | _1(fn, pfx##2, sfx), _1(fn, pfx##3, sfx), \ | 28 | PORT_10(fn, pfx##22, sfx), PORT_10(fn, pfx##23, sfx), \ |
29 | _1(fn, pfx##4, sfx), _1(fn, pfx##5, sfx), \ | 29 | PORT_10(fn, pfx##24, sfx), PORT_10(fn, pfx##25, sfx), \ |
30 | _1(fn, pfx##6, sfx), _1(fn, pfx##7, sfx), \ | 30 | PORT_10(fn, pfx##26, sfx), PORT_1(fn, pfx##270, sfx), \ |
31 | _1(fn, pfx##8, sfx), _1(fn, pfx##9, sfx) | 31 | PORT_1(fn, pfx##271, sfx), PORT_1(fn, pfx##272, sfx) |
32 | |||
33 | #define _90(fn, pfx, sfx) \ | ||
34 | _10(fn, pfx##1, sfx), _10(fn, pfx##2, sfx), \ | ||
35 | _10(fn, pfx##3, sfx), _10(fn, pfx##4, sfx), \ | ||
36 | _10(fn, pfx##5, sfx), _10(fn, pfx##6, sfx), \ | ||
37 | _10(fn, pfx##7, sfx), _10(fn, pfx##8, sfx), \ | ||
38 | _10(fn, pfx##9, sfx) | ||
39 | |||
40 | #define _273(fn, pfx, sfx) \ | ||
41 | _10(fn, pfx, sfx), _90(fn, pfx, sfx), \ | ||
42 | _10(fn, pfx##10, sfx), _90(fn, pfx##1, sfx), \ | ||
43 | _10(fn, pfx##20, sfx), _10(fn, pfx##21, sfx), \ | ||
44 | _10(fn, pfx##22, sfx), _10(fn, pfx##23, sfx), \ | ||
45 | _10(fn, pfx##24, sfx), _10(fn, pfx##25, sfx), \ | ||
46 | _10(fn, pfx##26, sfx), _1(fn, pfx##270, sfx), \ | ||
47 | _1(fn, pfx##271, sfx), _1(fn, pfx##272, sfx) | ||
48 | |||
49 | #define _PORT(pfx, sfx) pfx##_##sfx | ||
50 | #define PORT_273(str) _273(_PORT, PORT, str) | ||
51 | 32 | ||
52 | enum { | 33 | enum { |
53 | PINMUX_RESERVED = 0, | 34 | PINMUX_RESERVED = 0, |
54 | 35 | ||
55 | PINMUX_DATA_BEGIN, | 36 | PINMUX_DATA_BEGIN, |
56 | PORT_273(DATA), /* PORT0_DATA -> PORT272_DATA */ | 37 | PORT_ALL(DATA), /* PORT0_DATA -> PORT272_DATA */ |
57 | PINMUX_DATA_END, | 38 | PINMUX_DATA_END, |
58 | 39 | ||
59 | PINMUX_INPUT_BEGIN, | 40 | PINMUX_INPUT_BEGIN, |
60 | PORT_273(IN), /* PORT0_IN -> PORT272_IN */ | 41 | PORT_ALL(IN), /* PORT0_IN -> PORT272_IN */ |
61 | PINMUX_INPUT_END, | 42 | PINMUX_INPUT_END, |
62 | 43 | ||
63 | PINMUX_INPUT_PULLUP_BEGIN, | 44 | PINMUX_INPUT_PULLUP_BEGIN, |
64 | PORT_273(IN_PU), /* PORT0_IN_PU -> PORT272_IN_PU */ | 45 | PORT_ALL(IN_PU), /* PORT0_IN_PU -> PORT272_IN_PU */ |
65 | PINMUX_INPUT_PULLUP_END, | 46 | PINMUX_INPUT_PULLUP_END, |
66 | 47 | ||
67 | PINMUX_INPUT_PULLDOWN_BEGIN, | 48 | PINMUX_INPUT_PULLDOWN_BEGIN, |
68 | PORT_273(IN_PD), /* PORT0_IN_PD -> PORT272_IN_PD */ | 49 | PORT_ALL(IN_PD), /* PORT0_IN_PD -> PORT272_IN_PD */ |
69 | PINMUX_INPUT_PULLDOWN_END, | 50 | PINMUX_INPUT_PULLDOWN_END, |
70 | 51 | ||
71 | PINMUX_OUTPUT_BEGIN, | 52 | PINMUX_OUTPUT_BEGIN, |
72 | PORT_273(OUT), /* PORT0_OUT -> PORT272_OUT */ | 53 | PORT_ALL(OUT), /* PORT0_OUT -> PORT272_OUT */ |
73 | PINMUX_OUTPUT_END, | 54 | PINMUX_OUTPUT_END, |
74 | 55 | ||
75 | PINMUX_FUNCTION_BEGIN, | 56 | PINMUX_FUNCTION_BEGIN, |
76 | PORT_273(FN_IN), /* PORT0_FN_IN -> PORT272_FN_IN */ | 57 | PORT_ALL(FN_IN), /* PORT0_FN_IN -> PORT272_FN_IN */ |
77 | PORT_273(FN_OUT), /* PORT0_FN_OUT -> PORT272_FN_OUT */ | 58 | PORT_ALL(FN_OUT), /* PORT0_FN_OUT -> PORT272_FN_OUT */ |
78 | PORT_273(FN0), /* PORT0_FN0 -> PORT272_FN0 */ | 59 | PORT_ALL(FN0), /* PORT0_FN0 -> PORT272_FN0 */ |
79 | PORT_273(FN1), /* PORT0_FN1 -> PORT272_FN1 */ | 60 | PORT_ALL(FN1), /* PORT0_FN1 -> PORT272_FN1 */ |
80 | PORT_273(FN2), /* PORT0_FN2 -> PORT272_FN2 */ | 61 | PORT_ALL(FN2), /* PORT0_FN2 -> PORT272_FN2 */ |
81 | PORT_273(FN3), /* PORT0_FN3 -> PORT272_FN3 */ | 62 | PORT_ALL(FN3), /* PORT0_FN3 -> PORT272_FN3 */ |
82 | PORT_273(FN4), /* PORT0_FN4 -> PORT272_FN4 */ | 63 | PORT_ALL(FN4), /* PORT0_FN4 -> PORT272_FN4 */ |
83 | PORT_273(FN5), /* PORT0_FN5 -> PORT272_FN5 */ | 64 | PORT_ALL(FN5), /* PORT0_FN5 -> PORT272_FN5 */ |
84 | PORT_273(FN6), /* PORT0_FN6 -> PORT272_FN6 */ | 65 | PORT_ALL(FN6), /* PORT0_FN6 -> PORT272_FN6 */ |
85 | PORT_273(FN7), /* PORT0_FN7 -> PORT272_FN7 */ | 66 | PORT_ALL(FN7), /* PORT0_FN7 -> PORT272_FN7 */ |
86 | 67 | ||
87 | MSELBCR_MSEL2_1, MSELBCR_MSEL2_0, | 68 | MSELBCR_MSEL2_1, MSELBCR_MSEL2_0, |
88 | PINMUX_FUNCTION_END, | 69 | PINMUX_FUNCTION_END, |
@@ -327,41 +308,6 @@ enum { | |||
327 | PINMUX_MARK_END, | 308 | PINMUX_MARK_END, |
328 | }; | 309 | }; |
329 | 310 | ||
330 | #define PORT_DATA_I(nr) \ | ||
331 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_IN) | ||
332 | |||
333 | #define PORT_DATA_I_PD(nr) \ | ||
334 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
335 | PORT##nr##_IN, PORT##nr##_IN_PD) | ||
336 | |||
337 | #define PORT_DATA_I_PU(nr) \ | ||
338 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
339 | PORT##nr##_IN, PORT##nr##_IN_PU) | ||
340 | |||
341 | #define PORT_DATA_I_PU_PD(nr) \ | ||
342 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
343 | PORT##nr##_IN, PORT##nr##_IN_PD, PORT##nr##_IN_PU) | ||
344 | |||
345 | #define PORT_DATA_O(nr) \ | ||
346 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT) | ||
347 | |||
348 | #define PORT_DATA_IO(nr) \ | ||
349 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \ | ||
350 | PORT##nr##_IN) | ||
351 | |||
352 | #define PORT_DATA_IO_PD(nr) \ | ||
353 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \ | ||
354 | PORT##nr##_IN, PORT##nr##_IN_PD) | ||
355 | |||
356 | #define PORT_DATA_IO_PU(nr) \ | ||
357 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \ | ||
358 | PORT##nr##_IN, PORT##nr##_IN_PU) | ||
359 | |||
360 | #define PORT_DATA_IO_PU_PD(nr) \ | ||
361 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \ | ||
362 | PORT##nr##_IN, PORT##nr##_IN_PD, PORT##nr##_IN_PU) | ||
363 | |||
364 | |||
365 | static pinmux_enum_t pinmux_data[] = { | 311 | static pinmux_enum_t pinmux_data[] = { |
366 | 312 | ||
367 | /* specify valid pin states for each pin in GPIO mode */ | 313 | /* specify valid pin states for each pin in GPIO mode */ |
@@ -1098,13 +1044,9 @@ static pinmux_enum_t pinmux_data[] = { | |||
1098 | PINMUX_DATA(DIVLOCK_MARK, PORT272_FN1), | 1044 | PINMUX_DATA(DIVLOCK_MARK, PORT272_FN1), |
1099 | }; | 1045 | }; |
1100 | 1046 | ||
1101 | #define _GPIO_PORT(pfx, sfx) PINMUX_GPIO(GPIO_PORT##pfx, PORT##pfx##_DATA) | ||
1102 | #define GPIO_PORT_273() _273(_GPIO_PORT, , unused) | ||
1103 | #define GPIO_FN(str) PINMUX_GPIO(GPIO_FN_##str, str##_MARK) | ||
1104 | |||
1105 | static struct pinmux_gpio pinmux_gpios[] = { | 1047 | static struct pinmux_gpio pinmux_gpios[] = { |
1106 | /* 49-1 -> 49-6 (GPIO) */ | 1048 | /* 49-1 -> 49-6 (GPIO) */ |
1107 | GPIO_PORT_273(), | 1049 | GPIO_PORT_ALL(), |
1108 | 1050 | ||
1109 | /* Special Pull-up / Pull-down Functions */ | 1051 | /* Special Pull-up / Pull-down Functions */ |
1110 | GPIO_FN(PORT48_KEYIN0_PU), GPIO_FN(PORT49_KEYIN1_PU), | 1052 | GPIO_FN(PORT48_KEYIN0_PU), GPIO_FN(PORT49_KEYIN1_PU), |
@@ -1345,22 +1287,6 @@ static struct pinmux_gpio pinmux_gpios[] = { | |||
1345 | GPIO_FN(DIVLOCK), | 1287 | GPIO_FN(DIVLOCK), |
1346 | }; | 1288 | }; |
1347 | 1289 | ||
1348 | /* helper for top 4 bits in PORTnCR */ | ||
1349 | #define PCRH(in, in_pd, in_pu, out) \ | ||
1350 | 0, (out), (in), 0, \ | ||
1351 | 0, 0, 0, 0, \ | ||
1352 | 0, 0, (in_pd), 0, \ | ||
1353 | 0, 0, (in_pu), 0 | ||
1354 | |||
1355 | #define PORTCR(nr, reg) \ | ||
1356 | { PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) { \ | ||
1357 | PCRH(PORT##nr##_IN, PORT##nr##_IN_PD, \ | ||
1358 | PORT##nr##_IN_PU, PORT##nr##_OUT), \ | ||
1359 | PORT##nr##_FN0, PORT##nr##_FN1, PORT##nr##_FN2, \ | ||
1360 | PORT##nr##_FN3, PORT##nr##_FN4, PORT##nr##_FN5, \ | ||
1361 | PORT##nr##_FN6, PORT##nr##_FN7 } \ | ||
1362 | } | ||
1363 | |||
1364 | static struct pinmux_cfg_reg pinmux_config_regs[] = { | 1290 | static struct pinmux_cfg_reg pinmux_config_regs[] = { |
1365 | PORTCR(0, 0xe6050000), /* PORT0CR */ | 1291 | PORTCR(0, 0xe6050000), /* PORT0CR */ |
1366 | PORTCR(1, 0xe6050001), /* PORT1CR */ | 1292 | PORTCR(1, 0xe6050001), /* PORT1CR */ |
diff --git a/arch/arm/mach-shmobile/pfc-sh7372.c b/arch/arm/mach-shmobile/pfc-sh7372.c index 9c265dae138a..1bd6585a6acf 100644 --- a/arch/arm/mach-shmobile/pfc-sh7372.c +++ b/arch/arm/mach-shmobile/pfc-sh7372.c | |||
@@ -25,27 +25,13 @@ | |||
25 | #include <linux/gpio.h> | 25 | #include <linux/gpio.h> |
26 | #include <mach/sh7372.h> | 26 | #include <mach/sh7372.h> |
27 | 27 | ||
28 | #define _1(fn, pfx, sfx) fn(pfx, sfx) | 28 | #define CPU_ALL_PORT(fn, pfx, sfx) \ |
29 | 29 | PORT_10(fn, pfx, sfx), PORT_90(fn, pfx, sfx), \ | |
30 | #define _10(fn, pfx, sfx) \ | 30 | PORT_10(fn, pfx##10, sfx), PORT_10(fn, pfx##11, sfx), \ |
31 | _1(fn, pfx##0, sfx), _1(fn, pfx##1, sfx), \ | 31 | PORT_10(fn, pfx##12, sfx), PORT_10(fn, pfx##13, sfx), \ |
32 | _1(fn, pfx##2, sfx), _1(fn, pfx##3, sfx), \ | 32 | PORT_10(fn, pfx##14, sfx), PORT_10(fn, pfx##15, sfx), \ |
33 | _1(fn, pfx##4, sfx), _1(fn, pfx##5, sfx), \ | 33 | PORT_10(fn, pfx##16, sfx), PORT_10(fn, pfx##17, sfx), \ |
34 | _1(fn, pfx##6, sfx), _1(fn, pfx##7, sfx), \ | 34 | PORT_10(fn, pfx##18, sfx), PORT_1(fn, pfx##190, sfx) |
35 | _1(fn, pfx##8, sfx), _1(fn, pfx##9, sfx) | ||
36 | |||
37 | #define _80(fn, pfx, sfx) \ | ||
38 | _10(fn, pfx##1, sfx), _10(fn, pfx##2, sfx), \ | ||
39 | _10(fn, pfx##3, sfx), _10(fn, pfx##4, sfx), \ | ||
40 | _10(fn, pfx##5, sfx), _10(fn, pfx##6, sfx), \ | ||
41 | _10(fn, pfx##7, sfx), _10(fn, pfx##8, sfx) | ||
42 | |||
43 | #define _190(fn, pfx, sfx) \ | ||
44 | _10(fn, pfx, sfx), _80(fn, pfx, sfx), _10(fn, pfx##9, sfx), \ | ||
45 | _10(fn, pfx##10, sfx), _80(fn, pfx##1, sfx), _1(fn, pfx##190, sfx) | ||
46 | |||
47 | #define _PORT(pfx, sfx) pfx##_##sfx | ||
48 | #define PORT_ALL(str) _190(_PORT, PORT, str) | ||
49 | 35 | ||
50 | enum { | 36 | enum { |
51 | PINMUX_RESERVED = 0, | 37 | PINMUX_RESERVED = 0, |
@@ -381,108 +367,124 @@ enum { | |||
381 | PINMUX_MARK_END, | 367 | PINMUX_MARK_END, |
382 | }; | 368 | }; |
383 | 369 | ||
384 | /* PORT_DATA_I_PD(nr) */ | ||
385 | #define _I___D(nr) \ | ||
386 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
387 | PORT##nr##_IN, PORT##nr##_IN_PD) | ||
388 | |||
389 | /* PORT_DATA_I_PU(nr) */ | ||
390 | #define _I__U_(nr) \ | ||
391 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
392 | PORT##nr##_IN, PORT##nr##_IN_PU) | ||
393 | |||
394 | /* PORT_DATA_I_PU_PD(nr) */ | ||
395 | #define _I__UD(nr) \ | ||
396 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
397 | PORT##nr##_IN, PORT##nr##_IN_PD, PORT##nr##_IN_PU) | ||
398 | |||
399 | /* PORT_DATA_O(nr) */ | ||
400 | #define __O___(nr) \ | ||
401 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT) | ||
402 | |||
403 | /* PORT_DATA_IO(nr) */ | ||
404 | #define _IO___(nr) \ | ||
405 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \ | ||
406 | PORT##nr##_IN) | ||
407 | |||
408 | /* PORT_DATA_IO_PD(nr) */ | ||
409 | #define _IO__D(nr) \ | ||
410 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \ | ||
411 | PORT##nr##_IN, PORT##nr##_IN_PD) | ||
412 | |||
413 | /* PORT_DATA_IO_PU(nr) */ | ||
414 | #define _IO_U_(nr) \ | ||
415 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \ | ||
416 | PORT##nr##_IN, PORT##nr##_IN_PU) | ||
417 | |||
418 | /* PORT_DATA_IO_PU_PD(nr) */ | ||
419 | #define _IO_UD(nr) \ | ||
420 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \ | ||
421 | PORT##nr##_IN, PORT##nr##_IN_PD, PORT##nr##_IN_PU) | ||
422 | |||
423 | |||
424 | static pinmux_enum_t pinmux_data[] = { | 370 | static pinmux_enum_t pinmux_data[] = { |
425 | 371 | ||
426 | /* specify valid pin states for each pin in GPIO mode */ | 372 | /* specify valid pin states for each pin in GPIO mode */ |
427 | 373 | PORT_DATA_IO_PD(0), PORT_DATA_IO_PD(1), | |
428 | _IO__D(0), _IO__D(1), __O___(2), _I___D(3), _I___D(4), | 374 | PORT_DATA_O(2), PORT_DATA_I_PD(3), |
429 | _I___D(5), _IO_UD(6), _I___D(7), _IO__D(8), __O___(9), | 375 | PORT_DATA_I_PD(4), PORT_DATA_I_PD(5), |
430 | 376 | PORT_DATA_IO_PU_PD(6), PORT_DATA_I_PD(7), | |
431 | __O___(10), __O___(11), _IO_UD(12), _IO__D(13), _IO__D(14), | 377 | PORT_DATA_IO_PD(8), PORT_DATA_O(9), |
432 | __O___(15), _IO__D(16), _IO__D(17), _I___D(18), _IO___(19), | 378 | |
433 | 379 | PORT_DATA_O(10), PORT_DATA_O(11), | |
434 | _IO___(20), _IO___(21), _IO___(22), _IO___(23), _IO___(24), | 380 | PORT_DATA_IO_PU_PD(12), PORT_DATA_IO_PD(13), |
435 | _IO___(25), _IO___(26), _IO___(27), _IO___(28), _IO___(29), | 381 | PORT_DATA_IO_PD(14), PORT_DATA_O(15), |
436 | 382 | PORT_DATA_IO_PD(16), PORT_DATA_IO_PD(17), | |
437 | _IO___(30), _IO___(31), _IO___(32), _IO___(33), _IO___(34), | 383 | PORT_DATA_I_PD(18), PORT_DATA_IO(19), |
438 | _IO___(35), _IO___(36), _IO___(37), _IO___(38), _IO___(39), | 384 | |
439 | 385 | PORT_DATA_IO(20), PORT_DATA_IO(21), | |
440 | _IO___(40), _IO___(41), _IO___(42), _IO___(43), _IO___(44), | 386 | PORT_DATA_IO(22), PORT_DATA_IO(23), |
441 | _IO___(45), _IO_U_(46), _IO_U_(47), _IO_U_(48), _IO_U_(49), | 387 | PORT_DATA_IO(24), PORT_DATA_IO(25), |
442 | 388 | PORT_DATA_IO(26), PORT_DATA_IO(27), | |
443 | _IO_U_(50), _IO_U_(51), _IO_U_(52), _IO_U_(53), _IO_U_(54), | 389 | PORT_DATA_IO(28), PORT_DATA_IO(29), |
444 | _IO_U_(55), _IO_U_(56), _IO_U_(57), _IO_U_(58), _IO_U_(59), | 390 | |
445 | 391 | PORT_DATA_IO(30), PORT_DATA_IO(31), | |
446 | _IO_U_(60), _IO_U_(61), _IO___(62), __O___(63), __O___(64), | 392 | PORT_DATA_IO(32), PORT_DATA_IO(33), |
447 | _IO_U_(65), __O___(66), _IO_U_(67), __O___(68), _IO___(69), /*66?*/ | 393 | PORT_DATA_IO(34), PORT_DATA_IO(35), |
448 | 394 | PORT_DATA_IO(36), PORT_DATA_IO(37), | |
449 | _IO___(70), _IO___(71), __O___(72), _I__U_(73), _I__UD(74), | 395 | PORT_DATA_IO(38), PORT_DATA_IO(39), |
450 | _IO_UD(75), _IO_UD(76), _IO_UD(77), _IO_UD(78), _IO_UD(79), | 396 | |
451 | 397 | PORT_DATA_IO(40), PORT_DATA_IO(41), | |
452 | _IO_UD(80), _IO_UD(81), _IO_UD(82), _IO_UD(83), _IO_UD(84), | 398 | PORT_DATA_IO(42), PORT_DATA_IO(43), |
453 | _IO_UD(85), _IO_UD(86), _IO_UD(87), _IO_UD(88), _IO_UD(89), | 399 | PORT_DATA_IO(44), PORT_DATA_IO(45), |
454 | 400 | PORT_DATA_IO_PU(46), PORT_DATA_IO_PU(47), | |
455 | _IO_UD(90), _IO_UD(91), _IO_UD(92), _IO_UD(93), _IO_UD(94), | 401 | PORT_DATA_IO_PU(48), PORT_DATA_IO_PU(49), |
456 | _IO_UD(95), _IO_U_(96), _IO_UD(97), _IO_UD(98), __O___(99), /*99?*/ | 402 | |
457 | 403 | PORT_DATA_IO_PU(50), PORT_DATA_IO_PU(51), | |
458 | _IO__D(100), _IO__D(101), _IO__D(102), _IO__D(103), _IO__D(104), | 404 | PORT_DATA_IO_PU(52), PORT_DATA_IO_PU(53), |
459 | _IO__D(105), _IO_U_(106), _IO_U_(107), _IO_U_(108), _IO_U_(109), | 405 | PORT_DATA_IO_PU(54), PORT_DATA_IO_PU(55), |
460 | 406 | PORT_DATA_IO_PU(56), PORT_DATA_IO_PU(57), | |
461 | _IO_U_(110), _IO_U_(111), _IO__D(112), _IO__D(113), _IO_U_(114), | 407 | PORT_DATA_IO_PU(58), PORT_DATA_IO_PU(59), |
462 | _IO_U_(115), _IO_U_(116), _IO_U_(117), _IO_U_(118), _IO_U_(119), | 408 | |
463 | 409 | PORT_DATA_IO_PU(60), PORT_DATA_IO_PU(61), | |
464 | _IO_U_(120), _IO__D(121), _IO__D(122), _IO__D(123), _IO__D(124), | 410 | PORT_DATA_IO(62), PORT_DATA_O(63), |
465 | _IO__D(125), _IO__D(126), _IO__D(127), _IO__D(128), _IO_UD(129), | 411 | PORT_DATA_O(64), PORT_DATA_IO_PU(65), |
466 | 412 | PORT_DATA_O(66), PORT_DATA_IO_PU(67), /*66?*/ | |
467 | _IO_UD(130), _IO_UD(131), _IO_UD(132), _IO_UD(133), _IO_UD(134), | 413 | PORT_DATA_O(68), PORT_DATA_IO(69), |
468 | _IO_UD(135), _IO__D(136), _IO__D(137), _IO__D(138), _IO__D(139), | 414 | |
469 | 415 | PORT_DATA_IO(70), PORT_DATA_IO(71), | |
470 | _IO__D(140), _IO__D(141), _IO__D(142), _IO_UD(143), _IO__D(144), | 416 | PORT_DATA_O(72), PORT_DATA_I_PU(73), |
471 | _IO__D(145), _IO__D(146), _IO__D(147), _IO__D(148), _IO__D(149), | 417 | PORT_DATA_I_PU_PD(74), PORT_DATA_IO_PU_PD(75), |
472 | 418 | PORT_DATA_IO_PU_PD(76), PORT_DATA_IO_PU_PD(77), | |
473 | _IO__D(150), _IO__D(151), _IO_UD(152), _I___D(153), _IO_UD(154), | 419 | PORT_DATA_IO_PU_PD(78), PORT_DATA_IO_PU_PD(79), |
474 | _I___D(155), _IO__D(156), _IO__D(157), _I___D(158), _IO__D(159), | 420 | |
475 | 421 | PORT_DATA_IO_PU_PD(80), PORT_DATA_IO_PU_PD(81), | |
476 | __O___(160), _IO__D(161), _IO__D(162), _IO__D(163), _I___D(164), | 422 | PORT_DATA_IO_PU_PD(82), PORT_DATA_IO_PU_PD(83), |
477 | _IO__D(165), _I___D(166), _I___D(167), _I___D(168), _I___D(169), | 423 | PORT_DATA_IO_PU_PD(84), PORT_DATA_IO_PU_PD(85), |
478 | 424 | PORT_DATA_IO_PU_PD(86), PORT_DATA_IO_PU_PD(87), | |
479 | _I___D(170), __O___(171), _IO_UD(172), _IO_UD(173), _IO_UD(174), | 425 | PORT_DATA_IO_PU_PD(88), PORT_DATA_IO_PU_PD(89), |
480 | _IO_UD(175), _IO_UD(176), _IO_UD(177), _IO_UD(178), __O___(179), | 426 | |
481 | 427 | PORT_DATA_IO_PU_PD(90), PORT_DATA_IO_PU_PD(91), | |
482 | _IO_UD(180), _IO_UD(181), _IO_UD(182), _IO_UD(183), _IO_UD(184), | 428 | PORT_DATA_IO_PU_PD(92), PORT_DATA_IO_PU_PD(93), |
483 | __O___(185), _IO_UD(186), _IO_UD(187), _IO_UD(188), _IO_UD(189), | 429 | PORT_DATA_IO_PU_PD(94), PORT_DATA_IO_PU_PD(95), |
484 | 430 | PORT_DATA_IO_PU(96), PORT_DATA_IO_PU_PD(97), | |
485 | _IO_UD(190), | 431 | PORT_DATA_IO_PU_PD(98), PORT_DATA_O(99), /*99?*/ |
432 | |||
433 | PORT_DATA_IO_PD(100), PORT_DATA_IO_PD(101), | ||
434 | PORT_DATA_IO_PD(102), PORT_DATA_IO_PD(103), | ||
435 | PORT_DATA_IO_PD(104), PORT_DATA_IO_PD(105), | ||
436 | PORT_DATA_IO_PU(106), PORT_DATA_IO_PU(107), | ||
437 | PORT_DATA_IO_PU(108), PORT_DATA_IO_PU(109), | ||
438 | |||
439 | PORT_DATA_IO_PU(110), PORT_DATA_IO_PU(111), | ||
440 | PORT_DATA_IO_PD(112), PORT_DATA_IO_PD(113), | ||
441 | PORT_DATA_IO_PU(114), PORT_DATA_IO_PU(115), | ||
442 | PORT_DATA_IO_PU(116), PORT_DATA_IO_PU(117), | ||
443 | PORT_DATA_IO_PU(118), PORT_DATA_IO_PU(119), | ||
444 | |||
445 | PORT_DATA_IO_PU(120), PORT_DATA_IO_PD(121), | ||
446 | PORT_DATA_IO_PD(122), PORT_DATA_IO_PD(123), | ||
447 | PORT_DATA_IO_PD(124), PORT_DATA_IO_PD(125), | ||
448 | PORT_DATA_IO_PD(126), PORT_DATA_IO_PD(127), | ||
449 | PORT_DATA_IO_PD(128), PORT_DATA_IO_PU_PD(129), | ||
450 | |||
451 | PORT_DATA_IO_PU_PD(130), PORT_DATA_IO_PU_PD(131), | ||
452 | PORT_DATA_IO_PU_PD(132), PORT_DATA_IO_PU_PD(133), | ||
453 | PORT_DATA_IO_PU_PD(134), PORT_DATA_IO_PU_PD(135), | ||
454 | PORT_DATA_IO_PD(136), PORT_DATA_IO_PD(137), | ||
455 | PORT_DATA_IO_PD(138), PORT_DATA_IO_PD(139), | ||
456 | |||
457 | PORT_DATA_IO_PD(140), PORT_DATA_IO_PD(141), | ||
458 | PORT_DATA_IO_PD(142), PORT_DATA_IO_PU_PD(143), | ||
459 | PORT_DATA_IO_PD(144), PORT_DATA_IO_PD(145), | ||
460 | PORT_DATA_IO_PD(146), PORT_DATA_IO_PD(147), | ||
461 | PORT_DATA_IO_PD(148), PORT_DATA_IO_PD(149), | ||
462 | |||
463 | PORT_DATA_IO_PD(150), PORT_DATA_IO_PD(151), | ||
464 | PORT_DATA_IO_PU_PD(152), PORT_DATA_I_PD(153), | ||
465 | PORT_DATA_IO_PU_PD(154), PORT_DATA_I_PD(155), | ||
466 | PORT_DATA_IO_PD(156), PORT_DATA_IO_PD(157), | ||
467 | PORT_DATA_I_PD(158), PORT_DATA_IO_PD(159), | ||
468 | |||
469 | PORT_DATA_O(160), PORT_DATA_IO_PD(161), | ||
470 | PORT_DATA_IO_PD(162), PORT_DATA_IO_PD(163), | ||
471 | PORT_DATA_I_PD(164), PORT_DATA_IO_PD(165), | ||
472 | PORT_DATA_I_PD(166), PORT_DATA_I_PD(167), | ||
473 | PORT_DATA_I_PD(168), PORT_DATA_I_PD(169), | ||
474 | |||
475 | PORT_DATA_I_PD(170), PORT_DATA_O(171), | ||
476 | PORT_DATA_IO_PU_PD(172), PORT_DATA_IO_PU_PD(173), | ||
477 | PORT_DATA_IO_PU_PD(174), PORT_DATA_IO_PU_PD(175), | ||
478 | PORT_DATA_IO_PU_PD(176), PORT_DATA_IO_PU_PD(177), | ||
479 | PORT_DATA_IO_PU_PD(178), PORT_DATA_O(179), | ||
480 | |||
481 | PORT_DATA_IO_PU_PD(180), PORT_DATA_IO_PU_PD(181), | ||
482 | PORT_DATA_IO_PU_PD(182), PORT_DATA_IO_PU_PD(183), | ||
483 | PORT_DATA_IO_PU_PD(184), PORT_DATA_O(185), | ||
484 | PORT_DATA_IO_PU_PD(186), PORT_DATA_IO_PU_PD(187), | ||
485 | PORT_DATA_IO_PU_PD(188), PORT_DATA_IO_PU_PD(189), | ||
486 | |||
487 | PORT_DATA_IO_PU_PD(190), | ||
486 | 488 | ||
487 | /* IRQ */ | 489 | /* IRQ */ |
488 | PINMUX_DATA(IRQ0_6_MARK, PORT6_FN0, MSEL1CR_0_0), | 490 | PINMUX_DATA(IRQ0_6_MARK, PORT6_FN0, MSEL1CR_0_0), |
@@ -926,10 +928,6 @@ static pinmux_enum_t pinmux_data[] = { | |||
926 | PINMUX_DATA(MFIv4_MARK, MSEL4CR_6_1), | 928 | PINMUX_DATA(MFIv4_MARK, MSEL4CR_6_1), |
927 | }; | 929 | }; |
928 | 930 | ||
929 | #define _GPIO_PORT(pfx, sfx) PINMUX_GPIO(GPIO_PORT##pfx, PORT##pfx##_DATA) | ||
930 | #define GPIO_PORT_ALL() _190(_GPIO_PORT, , unused) | ||
931 | #define GPIO_FN(str) PINMUX_GPIO(GPIO_FN_##str, str##_MARK) | ||
932 | |||
933 | static struct pinmux_gpio pinmux_gpios[] = { | 931 | static struct pinmux_gpio pinmux_gpios[] = { |
934 | 932 | ||
935 | /* PORT */ | 933 | /* PORT */ |
@@ -1201,22 +1199,6 @@ static struct pinmux_gpio pinmux_gpios[] = { | |||
1201 | GPIO_FN(SDENC_DV_CLKI), | 1199 | GPIO_FN(SDENC_DV_CLKI), |
1202 | }; | 1200 | }; |
1203 | 1201 | ||
1204 | /* helper for top 4 bits in PORTnCR */ | ||
1205 | #define PCRH(in, in_pd, in_pu, out) \ | ||
1206 | 0, (out), (in), 0, \ | ||
1207 | 0, 0, 0, 0, \ | ||
1208 | 0, 0, (in_pd), 0, \ | ||
1209 | 0, 0, (in_pu), 0 | ||
1210 | |||
1211 | #define PORTCR(nr, reg) \ | ||
1212 | { PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) { \ | ||
1213 | PCRH(PORT##nr##_IN, PORT##nr##_IN_PD, \ | ||
1214 | PORT##nr##_IN_PU, PORT##nr##_OUT), \ | ||
1215 | PORT##nr##_FN0, PORT##nr##_FN1, PORT##nr##_FN2, \ | ||
1216 | PORT##nr##_FN3, PORT##nr##_FN4, PORT##nr##_FN5, \ | ||
1217 | PORT##nr##_FN6, PORT##nr##_FN7 } \ | ||
1218 | } | ||
1219 | |||
1220 | static struct pinmux_cfg_reg pinmux_config_regs[] = { | 1202 | static struct pinmux_cfg_reg pinmux_config_regs[] = { |
1221 | PORTCR(0, 0xE6051000), /* PORT0CR */ | 1203 | PORTCR(0, 0xE6051000), /* PORT0CR */ |
1222 | PORTCR(1, 0xE6051001), /* PORT1CR */ | 1204 | PORTCR(1, 0xE6051001), /* PORT1CR */ |
diff --git a/arch/arm/mach-shmobile/pfc-sh7377.c b/arch/arm/mach-shmobile/pfc-sh7377.c index 613e6842ad05..2f10511946ad 100644 --- a/arch/arm/mach-shmobile/pfc-sh7377.c +++ b/arch/arm/mach-shmobile/pfc-sh7377.c | |||
@@ -22,84 +22,65 @@ | |||
22 | #include <linux/gpio.h> | 22 | #include <linux/gpio.h> |
23 | #include <mach/sh7377.h> | 23 | #include <mach/sh7377.h> |
24 | 24 | ||
25 | #define _1(fn, pfx, sfx) fn(pfx, sfx) | 25 | #define CPU_ALL_PORT(fn, pfx, sfx) \ |
26 | 26 | PORT_10(fn, pfx, sfx), PORT_90(fn, pfx, sfx), \ | |
27 | #define _10(fn, pfx, sfx) \ | 27 | PORT_10(fn, pfx##10, sfx), \ |
28 | _1(fn, pfx##0, sfx), _1(fn, pfx##1, sfx), \ | 28 | PORT_1(fn, pfx##110, sfx), PORT_1(fn, pfx##111, sfx), \ |
29 | _1(fn, pfx##2, sfx), _1(fn, pfx##3, sfx), \ | 29 | PORT_1(fn, pfx##112, sfx), PORT_1(fn, pfx##113, sfx), \ |
30 | _1(fn, pfx##4, sfx), _1(fn, pfx##5, sfx), \ | 30 | PORT_1(fn, pfx##114, sfx), PORT_1(fn, pfx##115, sfx), \ |
31 | _1(fn, pfx##6, sfx), _1(fn, pfx##7, sfx), \ | 31 | PORT_1(fn, pfx##116, sfx), PORT_1(fn, pfx##117, sfx), \ |
32 | _1(fn, pfx##8, sfx), _1(fn, pfx##9, sfx) | 32 | PORT_1(fn, pfx##118, sfx), \ |
33 | 33 | PORT_1(fn, pfx##128, sfx), PORT_1(fn, pfx##129, sfx), \ | |
34 | #define _90(fn, pfx, sfx) \ | 34 | PORT_10(fn, pfx##13, sfx), PORT_10(fn, pfx##14, sfx), \ |
35 | _10(fn, pfx##1, sfx), _10(fn, pfx##2, sfx), \ | 35 | PORT_10(fn, pfx##15, sfx), \ |
36 | _10(fn, pfx##3, sfx), _10(fn, pfx##4, sfx), \ | 36 | PORT_1(fn, pfx##160, sfx), PORT_1(fn, pfx##161, sfx), \ |
37 | _10(fn, pfx##5, sfx), _10(fn, pfx##6, sfx), \ | 37 | PORT_1(fn, pfx##162, sfx), PORT_1(fn, pfx##163, sfx), \ |
38 | _10(fn, pfx##7, sfx), _10(fn, pfx##8, sfx), \ | 38 | PORT_1(fn, pfx##164, sfx), \ |
39 | _10(fn, pfx##9, sfx) | 39 | PORT_1(fn, pfx##192, sfx), PORT_1(fn, pfx##193, sfx), \ |
40 | 40 | PORT_1(fn, pfx##194, sfx), PORT_1(fn, pfx##195, sfx), \ | |
41 | #define _265(fn, pfx, sfx) \ | 41 | PORT_1(fn, pfx##196, sfx), PORT_1(fn, pfx##197, sfx), \ |
42 | _10(fn, pfx, sfx), _90(fn, pfx, sfx), \ | 42 | PORT_1(fn, pfx##198, sfx), PORT_1(fn, pfx##199, sfx), \ |
43 | _10(fn, pfx##10, sfx), \ | 43 | PORT_10(fn, pfx##20, sfx), PORT_10(fn, pfx##21, sfx), \ |
44 | _1(fn, pfx##110, sfx), _1(fn, pfx##111, sfx), \ | 44 | PORT_10(fn, pfx##22, sfx), PORT_10(fn, pfx##23, sfx), \ |
45 | _1(fn, pfx##112, sfx), _1(fn, pfx##113, sfx), \ | 45 | PORT_10(fn, pfx##24, sfx), PORT_10(fn, pfx##25, sfx), \ |
46 | _1(fn, pfx##114, sfx), _1(fn, pfx##115, sfx), \ | 46 | PORT_1(fn, pfx##260, sfx), PORT_1(fn, pfx##261, sfx), \ |
47 | _1(fn, pfx##116, sfx), _1(fn, pfx##117, sfx), \ | 47 | PORT_1(fn, pfx##262, sfx), PORT_1(fn, pfx##263, sfx), \ |
48 | _1(fn, pfx##118, sfx), \ | 48 | PORT_1(fn, pfx##264, sfx) |
49 | _1(fn, pfx##128, sfx), _1(fn, pfx##129, sfx), \ | ||
50 | _10(fn, pfx##13, sfx), _10(fn, pfx##14, sfx), \ | ||
51 | _10(fn, pfx##15, sfx), \ | ||
52 | _1(fn, pfx##160, sfx), _1(fn, pfx##161, sfx), \ | ||
53 | _1(fn, pfx##162, sfx), _1(fn, pfx##163, sfx), \ | ||
54 | _1(fn, pfx##164, sfx), \ | ||
55 | _1(fn, pfx##192, sfx), _1(fn, pfx##193, sfx), \ | ||
56 | _1(fn, pfx##194, sfx), _1(fn, pfx##195, sfx), \ | ||
57 | _1(fn, pfx##196, sfx), _1(fn, pfx##197, sfx), \ | ||
58 | _1(fn, pfx##198, sfx), _1(fn, pfx##199, sfx), \ | ||
59 | _10(fn, pfx##20, sfx), _10(fn, pfx##21, sfx), \ | ||
60 | _10(fn, pfx##22, sfx), _10(fn, pfx##23, sfx), \ | ||
61 | _10(fn, pfx##24, sfx), _10(fn, pfx##25, sfx), \ | ||
62 | _1(fn, pfx##260, sfx), _1(fn, pfx##261, sfx), \ | ||
63 | _1(fn, pfx##262, sfx), _1(fn, pfx##263, sfx), \ | ||
64 | _1(fn, pfx##264, sfx) | ||
65 | |||
66 | #define _PORT(pfx, sfx) pfx##_##sfx | ||
67 | #define PORT_265(str) _265(_PORT, PORT, str) | ||
68 | 49 | ||
69 | enum { | 50 | enum { |
70 | PINMUX_RESERVED = 0, | 51 | PINMUX_RESERVED = 0, |
71 | 52 | ||
72 | PINMUX_DATA_BEGIN, | 53 | PINMUX_DATA_BEGIN, |
73 | PORT_265(DATA), /* PORT0_DATA -> PORT264_DATA */ | 54 | PORT_ALL(DATA), /* PORT0_DATA -> PORT264_DATA */ |
74 | PINMUX_DATA_END, | 55 | PINMUX_DATA_END, |
75 | 56 | ||
76 | PINMUX_INPUT_BEGIN, | 57 | PINMUX_INPUT_BEGIN, |
77 | PORT_265(IN), /* PORT0_IN -> PORT264_IN */ | 58 | PORT_ALL(IN), /* PORT0_IN -> PORT264_IN */ |
78 | PINMUX_INPUT_END, | 59 | PINMUX_INPUT_END, |
79 | 60 | ||
80 | PINMUX_INPUT_PULLUP_BEGIN, | 61 | PINMUX_INPUT_PULLUP_BEGIN, |
81 | PORT_265(IN_PU), /* PORT0_IN_PU -> PORT264_IN_PU */ | 62 | PORT_ALL(IN_PU), /* PORT0_IN_PU -> PORT264_IN_PU */ |
82 | PINMUX_INPUT_PULLUP_END, | 63 | PINMUX_INPUT_PULLUP_END, |
83 | 64 | ||
84 | PINMUX_INPUT_PULLDOWN_BEGIN, | 65 | PINMUX_INPUT_PULLDOWN_BEGIN, |
85 | PORT_265(IN_PD), /* PORT0_IN_PD -> PORT264_IN_PD */ | 66 | PORT_ALL(IN_PD), /* PORT0_IN_PD -> PORT264_IN_PD */ |
86 | PINMUX_INPUT_PULLDOWN_END, | 67 | PINMUX_INPUT_PULLDOWN_END, |
87 | 68 | ||
88 | PINMUX_OUTPUT_BEGIN, | 69 | PINMUX_OUTPUT_BEGIN, |
89 | PORT_265(OUT), /* PORT0_OUT -> PORT264_OUT */ | 70 | PORT_ALL(OUT), /* PORT0_OUT -> PORT264_OUT */ |
90 | PINMUX_OUTPUT_END, | 71 | PINMUX_OUTPUT_END, |
91 | 72 | ||
92 | PINMUX_FUNCTION_BEGIN, | 73 | PINMUX_FUNCTION_BEGIN, |
93 | PORT_265(FN_IN), /* PORT0_FN_IN -> PORT264_FN_IN */ | 74 | PORT_ALL(FN_IN), /* PORT0_FN_IN -> PORT264_FN_IN */ |
94 | PORT_265(FN_OUT), /* PORT0_FN_OUT -> PORT264_FN_OUT */ | 75 | PORT_ALL(FN_OUT), /* PORT0_FN_OUT -> PORT264_FN_OUT */ |
95 | PORT_265(FN0), /* PORT0_FN0 -> PORT264_FN0 */ | 76 | PORT_ALL(FN0), /* PORT0_FN0 -> PORT264_FN0 */ |
96 | PORT_265(FN1), /* PORT0_FN1 -> PORT264_FN1 */ | 77 | PORT_ALL(FN1), /* PORT0_FN1 -> PORT264_FN1 */ |
97 | PORT_265(FN2), /* PORT0_FN2 -> PORT264_FN2 */ | 78 | PORT_ALL(FN2), /* PORT0_FN2 -> PORT264_FN2 */ |
98 | PORT_265(FN3), /* PORT0_FN3 -> PORT264_FN3 */ | 79 | PORT_ALL(FN3), /* PORT0_FN3 -> PORT264_FN3 */ |
99 | PORT_265(FN4), /* PORT0_FN4 -> PORT264_FN4 */ | 80 | PORT_ALL(FN4), /* PORT0_FN4 -> PORT264_FN4 */ |
100 | PORT_265(FN5), /* PORT0_FN5 -> PORT264_FN5 */ | 81 | PORT_ALL(FN5), /* PORT0_FN5 -> PORT264_FN5 */ |
101 | PORT_265(FN6), /* PORT0_FN6 -> PORT264_FN6 */ | 82 | PORT_ALL(FN6), /* PORT0_FN6 -> PORT264_FN6 */ |
102 | PORT_265(FN7), /* PORT0_FN7 -> PORT264_FN7 */ | 83 | PORT_ALL(FN7), /* PORT0_FN7 -> PORT264_FN7 */ |
103 | 84 | ||
104 | MSELBCR_MSEL17_1, MSELBCR_MSEL17_0, | 85 | MSELBCR_MSEL17_1, MSELBCR_MSEL17_0, |
105 | MSELBCR_MSEL16_1, MSELBCR_MSEL16_0, | 86 | MSELBCR_MSEL16_1, MSELBCR_MSEL16_0, |
@@ -360,45 +341,6 @@ enum { | |||
360 | PINMUX_MARK_END, | 341 | PINMUX_MARK_END, |
361 | }; | 342 | }; |
362 | 343 | ||
363 | #define PORT_DATA_I(nr) \ | ||
364 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_IN) | ||
365 | |||
366 | #define PORT_DATA_I_PD(nr) \ | ||
367 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
368 | PORT##nr##_IN, PORT##nr##_IN_PD) | ||
369 | |||
370 | #define PORT_DATA_I_PU(nr) \ | ||
371 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
372 | PORT##nr##_IN, PORT##nr##_IN_PU) | ||
373 | |||
374 | #define PORT_DATA_I_PU_PD(nr) \ | ||
375 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
376 | PORT##nr##_IN, PORT##nr##_IN_PD, \ | ||
377 | PORT##nr##_IN_PU) | ||
378 | |||
379 | #define PORT_DATA_O(nr) \ | ||
380 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
381 | PORT##nr##_OUT) | ||
382 | |||
383 | #define PORT_DATA_IO(nr) \ | ||
384 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
385 | PORT##nr##_OUT, PORT##nr##_IN) | ||
386 | |||
387 | #define PORT_DATA_IO_PD(nr) \ | ||
388 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
389 | PORT##nr##_OUT, PORT##nr##_IN, \ | ||
390 | PORT##nr##_IN_PD) | ||
391 | |||
392 | #define PORT_DATA_IO_PU(nr) \ | ||
393 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
394 | PORT##nr##_OUT, PORT##nr##_IN, \ | ||
395 | PORT##nr##_IN_PU) | ||
396 | |||
397 | #define PORT_DATA_IO_PU_PD(nr) \ | ||
398 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
399 | PORT##nr##_OUT, PORT##nr##_IN, \ | ||
400 | PORT##nr##_IN_PD, PORT##nr##_IN_PU) | ||
401 | |||
402 | static pinmux_enum_t pinmux_data[] = { | 344 | static pinmux_enum_t pinmux_data[] = { |
403 | /* specify valid pin states for each pin in GPIO mode */ | 345 | /* specify valid pin states for each pin in GPIO mode */ |
404 | /* 55-1 (GPIO) */ | 346 | /* 55-1 (GPIO) */ |
@@ -1078,13 +1020,9 @@ static pinmux_enum_t pinmux_data[] = { | |||
1078 | PINMUX_DATA(RESETOUTS_MARK, PORT264_FN1), | 1020 | PINMUX_DATA(RESETOUTS_MARK, PORT264_FN1), |
1079 | }; | 1021 | }; |
1080 | 1022 | ||
1081 | #define _GPIO_PORT(pfx, sfx) PINMUX_GPIO(GPIO_PORT##pfx, PORT##pfx##_DATA) | ||
1082 | #define GPIO_PORT_265() _265(_GPIO_PORT, , unused) | ||
1083 | #define GPIO_FN(str) PINMUX_GPIO(GPIO_FN_##str, str##_MARK) | ||
1084 | |||
1085 | static struct pinmux_gpio pinmux_gpios[] = { | 1023 | static struct pinmux_gpio pinmux_gpios[] = { |
1086 | /* 55-1 -> 55-5 (GPIO) */ | 1024 | /* 55-1 -> 55-5 (GPIO) */ |
1087 | GPIO_PORT_265(), | 1025 | GPIO_PORT_ALL(), |
1088 | 1026 | ||
1089 | /* Special Pull-up / Pull-down Functions */ | 1027 | /* Special Pull-up / Pull-down Functions */ |
1090 | GPIO_FN(PORT66_KEYIN0_PU), GPIO_FN(PORT67_KEYIN1_PU), | 1028 | GPIO_FN(PORT66_KEYIN0_PU), GPIO_FN(PORT67_KEYIN1_PU), |
@@ -1362,23 +1300,6 @@ static struct pinmux_gpio pinmux_gpios[] = { | |||
1362 | GPIO_FN(RESETOUTS), | 1300 | GPIO_FN(RESETOUTS), |
1363 | }; | 1301 | }; |
1364 | 1302 | ||
1365 | /* helper for top 4 bits in PORTnCR */ | ||
1366 | #define PCRH(in, in_pd, in_pu, out) \ | ||
1367 | 0, (out), (in), 0, \ | ||
1368 | 0, 0, 0, 0, \ | ||
1369 | 0, 0, (in_pd), 0, \ | ||
1370 | 0, 0, (in_pu), 0 | ||
1371 | |||
1372 | #define PORTCR(nr, reg) \ | ||
1373 | { PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) { \ | ||
1374 | PCRH(PORT##nr##_IN, PORT##nr##_IN_PD, \ | ||
1375 | PORT##nr##_IN_PU, PORT##nr##_OUT), \ | ||
1376 | PORT##nr##_FN0, PORT##nr##_FN1, \ | ||
1377 | PORT##nr##_FN2, PORT##nr##_FN3, \ | ||
1378 | PORT##nr##_FN4, PORT##nr##_FN5, \ | ||
1379 | PORT##nr##_FN6, PORT##nr##_FN7 } \ | ||
1380 | } | ||
1381 | |||
1382 | static struct pinmux_cfg_reg pinmux_config_regs[] = { | 1303 | static struct pinmux_cfg_reg pinmux_config_regs[] = { |
1383 | PORTCR(0, 0xe6050000), /* PORT0CR */ | 1304 | PORTCR(0, 0xe6050000), /* PORT0CR */ |
1384 | PORTCR(1, 0xe6050001), /* PORT1CR */ | 1305 | PORTCR(1, 0xe6050001), /* PORT1CR */ |
diff --git a/arch/arm/mach-shmobile/pfc-sh73a0.c b/arch/arm/mach-shmobile/pfc-sh73a0.c index 5abe02fbd6b9..e05634ce2e0d 100644 --- a/arch/arm/mach-shmobile/pfc-sh73a0.c +++ b/arch/arm/mach-shmobile/pfc-sh73a0.c | |||
@@ -24,83 +24,71 @@ | |||
24 | #include <mach/sh73a0.h> | 24 | #include <mach/sh73a0.h> |
25 | #include <mach/irqs.h> | 25 | #include <mach/irqs.h> |
26 | 26 | ||
27 | #define _1(fn, pfx, sfx) fn(pfx, sfx) | 27 | #define CPU_ALL_PORT(fn, pfx, sfx) \ |
28 | 28 | PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \ | |
29 | #define _10(fn, pfx, sfx) \ | 29 | PORT_10(fn, pfx##2, sfx), PORT_10(fn, pfx##3, sfx), \ |
30 | _1(fn, pfx##0, sfx), _1(fn, pfx##1, sfx), \ | 30 | PORT_10(fn, pfx##4, sfx), PORT_10(fn, pfx##5, sfx), \ |
31 | _1(fn, pfx##2, sfx), _1(fn, pfx##3, sfx), \ | 31 | PORT_10(fn, pfx##6, sfx), PORT_10(fn, pfx##7, sfx), \ |
32 | _1(fn, pfx##4, sfx), _1(fn, pfx##5, sfx), \ | 32 | PORT_10(fn, pfx##8, sfx), PORT_10(fn, pfx##9, sfx), \ |
33 | _1(fn, pfx##6, sfx), _1(fn, pfx##7, sfx), \ | 33 | PORT_10(fn, pfx##10, sfx), \ |
34 | _1(fn, pfx##8, sfx), _1(fn, pfx##9, sfx) | 34 | PORT_1(fn, pfx##110, sfx), PORT_1(fn, pfx##111, sfx), \ |
35 | 35 | PORT_1(fn, pfx##112, sfx), PORT_1(fn, pfx##113, sfx), \ | |
36 | #define _310(fn, pfx, sfx) \ | 36 | PORT_1(fn, pfx##114, sfx), PORT_1(fn, pfx##115, sfx), \ |
37 | _10(fn, pfx, sfx), _10(fn, pfx##1, sfx), \ | 37 | PORT_1(fn, pfx##116, sfx), PORT_1(fn, pfx##117, sfx), \ |
38 | _10(fn, pfx##2, sfx), _10(fn, pfx##3, sfx), \ | 38 | PORT_1(fn, pfx##118, sfx), \ |
39 | _10(fn, pfx##4, sfx), _10(fn, pfx##5, sfx), \ | 39 | PORT_1(fn, pfx##128, sfx), PORT_1(fn, pfx##129, sfx), \ |
40 | _10(fn, pfx##6, sfx), _10(fn, pfx##7, sfx), \ | 40 | PORT_10(fn, pfx##13, sfx), PORT_10(fn, pfx##14, sfx), \ |
41 | _10(fn, pfx##8, sfx), _10(fn, pfx##9, sfx), \ | 41 | PORT_10(fn, pfx##15, sfx), \ |
42 | _10(fn, pfx##10, sfx), \ | 42 | PORT_1(fn, pfx##160, sfx), PORT_1(fn, pfx##161, sfx), \ |
43 | _1(fn, pfx##110, sfx), _1(fn, pfx##111, sfx), \ | 43 | PORT_1(fn, pfx##162, sfx), PORT_1(fn, pfx##163, sfx), \ |
44 | _1(fn, pfx##112, sfx), _1(fn, pfx##113, sfx), \ | 44 | PORT_1(fn, pfx##164, sfx), \ |
45 | _1(fn, pfx##114, sfx), _1(fn, pfx##115, sfx), \ | 45 | PORT_1(fn, pfx##192, sfx), PORT_1(fn, pfx##193, sfx), \ |
46 | _1(fn, pfx##116, sfx), _1(fn, pfx##117, sfx), \ | 46 | PORT_1(fn, pfx##194, sfx), PORT_1(fn, pfx##195, sfx), \ |
47 | _1(fn, pfx##118, sfx), \ | 47 | PORT_1(fn, pfx##196, sfx), PORT_1(fn, pfx##197, sfx), \ |
48 | _1(fn, pfx##128, sfx), _1(fn, pfx##129, sfx), \ | 48 | PORT_1(fn, pfx##198, sfx), PORT_1(fn, pfx##199, sfx), \ |
49 | _10(fn, pfx##13, sfx), _10(fn, pfx##14, sfx), \ | 49 | PORT_10(fn, pfx##20, sfx), PORT_10(fn, pfx##21, sfx), \ |
50 | _10(fn, pfx##15, sfx), \ | 50 | PORT_10(fn, pfx##22, sfx), PORT_10(fn, pfx##23, sfx), \ |
51 | _1(fn, pfx##160, sfx), _1(fn, pfx##161, sfx), \ | 51 | PORT_10(fn, pfx##24, sfx), PORT_10(fn, pfx##25, sfx), \ |
52 | _1(fn, pfx##162, sfx), _1(fn, pfx##163, sfx), \ | 52 | PORT_10(fn, pfx##26, sfx), PORT_10(fn, pfx##27, sfx), \ |
53 | _1(fn, pfx##164, sfx), \ | 53 | PORT_1(fn, pfx##280, sfx), PORT_1(fn, pfx##281, sfx), \ |
54 | _1(fn, pfx##192, sfx), _1(fn, pfx##193, sfx), \ | 54 | PORT_1(fn, pfx##282, sfx), \ |
55 | _1(fn, pfx##194, sfx), _1(fn, pfx##195, sfx), \ | 55 | PORT_1(fn, pfx##288, sfx), PORT_1(fn, pfx##289, sfx), \ |
56 | _1(fn, pfx##196, sfx), _1(fn, pfx##197, sfx), \ | 56 | PORT_10(fn, pfx##29, sfx), PORT_10(fn, pfx##30, sfx) |
57 | _1(fn, pfx##198, sfx), _1(fn, pfx##199, sfx), \ | ||
58 | _10(fn, pfx##20, sfx), _10(fn, pfx##21, sfx), \ | ||
59 | _10(fn, pfx##22, sfx), _10(fn, pfx##23, sfx), \ | ||
60 | _10(fn, pfx##24, sfx), _10(fn, pfx##25, sfx), \ | ||
61 | _10(fn, pfx##26, sfx), _10(fn, pfx##27, sfx), \ | ||
62 | _1(fn, pfx##280, sfx), _1(fn, pfx##281, sfx), \ | ||
63 | _1(fn, pfx##282, sfx), \ | ||
64 | _1(fn, pfx##288, sfx), _1(fn, pfx##289, sfx), \ | ||
65 | _10(fn, pfx##29, sfx), _10(fn, pfx##30, sfx) | ||
66 | |||
67 | #define _PORT(pfx, sfx) pfx##_##sfx | ||
68 | #define PORT_310(str) _310(_PORT, PORT, str) | ||
69 | 57 | ||
70 | enum { | 58 | enum { |
71 | PINMUX_RESERVED = 0, | 59 | PINMUX_RESERVED = 0, |
72 | 60 | ||
73 | PINMUX_DATA_BEGIN, | 61 | PINMUX_DATA_BEGIN, |
74 | PORT_310(DATA), /* PORT0_DATA -> PORT309_DATA */ | 62 | PORT_ALL(DATA), /* PORT0_DATA -> PORT309_DATA */ |
75 | PINMUX_DATA_END, | 63 | PINMUX_DATA_END, |
76 | 64 | ||
77 | PINMUX_INPUT_BEGIN, | 65 | PINMUX_INPUT_BEGIN, |
78 | PORT_310(IN), /* PORT0_IN -> PORT309_IN */ | 66 | PORT_ALL(IN), /* PORT0_IN -> PORT309_IN */ |
79 | PINMUX_INPUT_END, | 67 | PINMUX_INPUT_END, |
80 | 68 | ||
81 | PINMUX_INPUT_PULLUP_BEGIN, | 69 | PINMUX_INPUT_PULLUP_BEGIN, |
82 | PORT_310(IN_PU), /* PORT0_IN_PU -> PORT309_IN_PU */ | 70 | PORT_ALL(IN_PU), /* PORT0_IN_PU -> PORT309_IN_PU */ |
83 | PINMUX_INPUT_PULLUP_END, | 71 | PINMUX_INPUT_PULLUP_END, |
84 | 72 | ||
85 | PINMUX_INPUT_PULLDOWN_BEGIN, | 73 | PINMUX_INPUT_PULLDOWN_BEGIN, |
86 | PORT_310(IN_PD), /* PORT0_IN_PD -> PORT309_IN_PD */ | 74 | PORT_ALL(IN_PD), /* PORT0_IN_PD -> PORT309_IN_PD */ |
87 | PINMUX_INPUT_PULLDOWN_END, | 75 | PINMUX_INPUT_PULLDOWN_END, |
88 | 76 | ||
89 | PINMUX_OUTPUT_BEGIN, | 77 | PINMUX_OUTPUT_BEGIN, |
90 | PORT_310(OUT), /* PORT0_OUT -> PORT309_OUT */ | 78 | PORT_ALL(OUT), /* PORT0_OUT -> PORT309_OUT */ |
91 | PINMUX_OUTPUT_END, | 79 | PINMUX_OUTPUT_END, |
92 | 80 | ||
93 | PINMUX_FUNCTION_BEGIN, | 81 | PINMUX_FUNCTION_BEGIN, |
94 | PORT_310(FN_IN), /* PORT0_FN_IN -> PORT309_FN_IN */ | 82 | PORT_ALL(FN_IN), /* PORT0_FN_IN -> PORT309_FN_IN */ |
95 | PORT_310(FN_OUT), /* PORT0_FN_OUT -> PORT309_FN_OUT */ | 83 | PORT_ALL(FN_OUT), /* PORT0_FN_OUT -> PORT309_FN_OUT */ |
96 | PORT_310(FN0), /* PORT0_FN0 -> PORT309_FN0 */ | 84 | PORT_ALL(FN0), /* PORT0_FN0 -> PORT309_FN0 */ |
97 | PORT_310(FN1), /* PORT0_FN1 -> PORT309_FN1 */ | 85 | PORT_ALL(FN1), /* PORT0_FN1 -> PORT309_FN1 */ |
98 | PORT_310(FN2), /* PORT0_FN2 -> PORT309_FN2 */ | 86 | PORT_ALL(FN2), /* PORT0_FN2 -> PORT309_FN2 */ |
99 | PORT_310(FN3), /* PORT0_FN3 -> PORT309_FN3 */ | 87 | PORT_ALL(FN3), /* PORT0_FN3 -> PORT309_FN3 */ |
100 | PORT_310(FN4), /* PORT0_FN4 -> PORT309_FN4 */ | 88 | PORT_ALL(FN4), /* PORT0_FN4 -> PORT309_FN4 */ |
101 | PORT_310(FN5), /* PORT0_FN5 -> PORT309_FN5 */ | 89 | PORT_ALL(FN5), /* PORT0_FN5 -> PORT309_FN5 */ |
102 | PORT_310(FN6), /* PORT0_FN6 -> PORT309_FN6 */ | 90 | PORT_ALL(FN6), /* PORT0_FN6 -> PORT309_FN6 */ |
103 | PORT_310(FN7), /* PORT0_FN7 -> PORT309_FN7 */ | 91 | PORT_ALL(FN7), /* PORT0_FN7 -> PORT309_FN7 */ |
104 | 92 | ||
105 | MSEL2CR_MSEL19_0, MSEL2CR_MSEL19_1, | 93 | MSEL2CR_MSEL19_0, MSEL2CR_MSEL19_1, |
106 | MSEL2CR_MSEL18_0, MSEL2CR_MSEL18_1, | 94 | MSEL2CR_MSEL18_0, MSEL2CR_MSEL18_1, |
@@ -508,6 +496,14 @@ enum { | |||
508 | SDHICMD2_PU_MARK, | 496 | SDHICMD2_PU_MARK, |
509 | MMCCMD0_PU_MARK, | 497 | MMCCMD0_PU_MARK, |
510 | MMCCMD1_PU_MARK, | 498 | MMCCMD1_PU_MARK, |
499 | MMCD0_0_PU_MARK, | ||
500 | MMCD0_1_PU_MARK, | ||
501 | MMCD0_2_PU_MARK, | ||
502 | MMCD0_3_PU_MARK, | ||
503 | MMCD0_4_PU_MARK, | ||
504 | MMCD0_5_PU_MARK, | ||
505 | MMCD0_6_PU_MARK, | ||
506 | MMCD0_7_PU_MARK, | ||
511 | FSIBISLD_PU_MARK, | 507 | FSIBISLD_PU_MARK, |
512 | FSIACK_PU_MARK, | 508 | FSIACK_PU_MARK, |
513 | FSIAILR_PU_MARK, | 509 | FSIAILR_PU_MARK, |
@@ -517,45 +513,6 @@ enum { | |||
517 | PINMUX_MARK_END, | 513 | PINMUX_MARK_END, |
518 | }; | 514 | }; |
519 | 515 | ||
520 | #define PORT_DATA_I(nr) \ | ||
521 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_IN) | ||
522 | |||
523 | #define PORT_DATA_I_PD(nr) \ | ||
524 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
525 | PORT##nr##_IN, PORT##nr##_IN_PD) | ||
526 | |||
527 | #define PORT_DATA_I_PU(nr) \ | ||
528 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
529 | PORT##nr##_IN, PORT##nr##_IN_PU) | ||
530 | |||
531 | #define PORT_DATA_I_PU_PD(nr) \ | ||
532 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
533 | PORT##nr##_IN, PORT##nr##_IN_PD, \ | ||
534 | PORT##nr##_IN_PU) | ||
535 | |||
536 | #define PORT_DATA_O(nr) \ | ||
537 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
538 | PORT##nr##_OUT) | ||
539 | |||
540 | #define PORT_DATA_IO(nr) \ | ||
541 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
542 | PORT##nr##_OUT, PORT##nr##_IN) | ||
543 | |||
544 | #define PORT_DATA_IO_PD(nr) \ | ||
545 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
546 | PORT##nr##_OUT, PORT##nr##_IN, \ | ||
547 | PORT##nr##_IN_PD) | ||
548 | |||
549 | #define PORT_DATA_IO_PU(nr) \ | ||
550 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
551 | PORT##nr##_OUT, PORT##nr##_IN, \ | ||
552 | PORT##nr##_IN_PU) | ||
553 | |||
554 | #define PORT_DATA_IO_PU_PD(nr) \ | ||
555 | PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \ | ||
556 | PORT##nr##_OUT, PORT##nr##_IN, \ | ||
557 | PORT##nr##_IN_PD, PORT##nr##_IN_PU) | ||
558 | |||
559 | static pinmux_enum_t pinmux_data[] = { | 516 | static pinmux_enum_t pinmux_data[] = { |
560 | /* specify valid pin states for each pin in GPIO mode */ | 517 | /* specify valid pin states for each pin in GPIO mode */ |
561 | 518 | ||
@@ -1561,6 +1518,24 @@ static pinmux_enum_t pinmux_data[] = { | |||
1561 | MSEL4CR_MSEL15_0), | 1518 | MSEL4CR_MSEL15_0), |
1562 | PINMUX_DATA(MMCCMD1_PU_MARK, PORT297_FN2, PORT297_IN_PU, | 1519 | PINMUX_DATA(MMCCMD1_PU_MARK, PORT297_FN2, PORT297_IN_PU, |
1563 | MSEL4CR_MSEL15_1), | 1520 | MSEL4CR_MSEL15_1), |
1521 | |||
1522 | PINMUX_DATA(MMCD0_0_PU_MARK, | ||
1523 | PORT271_FN1, PORT271_IN_PU, MSEL4CR_MSEL15_0), | ||
1524 | PINMUX_DATA(MMCD0_1_PU_MARK, | ||
1525 | PORT272_FN1, PORT272_IN_PU, MSEL4CR_MSEL15_0), | ||
1526 | PINMUX_DATA(MMCD0_2_PU_MARK, | ||
1527 | PORT273_FN1, PORT273_IN_PU, MSEL4CR_MSEL15_0), | ||
1528 | PINMUX_DATA(MMCD0_3_PU_MARK, | ||
1529 | PORT274_FN1, PORT274_IN_PU, MSEL4CR_MSEL15_0), | ||
1530 | PINMUX_DATA(MMCD0_4_PU_MARK, | ||
1531 | PORT275_FN1, PORT275_IN_PU, MSEL4CR_MSEL15_0), | ||
1532 | PINMUX_DATA(MMCD0_5_PU_MARK, | ||
1533 | PORT276_FN1, PORT276_IN_PU, MSEL4CR_MSEL15_0), | ||
1534 | PINMUX_DATA(MMCD0_6_PU_MARK, | ||
1535 | PORT277_FN1, PORT277_IN_PU, MSEL4CR_MSEL15_0), | ||
1536 | PINMUX_DATA(MMCD0_7_PU_MARK, | ||
1537 | PORT278_FN1, PORT278_IN_PU, MSEL4CR_MSEL15_0), | ||
1538 | |||
1564 | PINMUX_DATA(FSIBISLD_PU_MARK, PORT39_FN1, PORT39_IN_PU), | 1539 | PINMUX_DATA(FSIBISLD_PU_MARK, PORT39_FN1, PORT39_IN_PU), |
1565 | PINMUX_DATA(FSIACK_PU_MARK, PORT49_FN1, PORT49_IN_PU), | 1540 | PINMUX_DATA(FSIACK_PU_MARK, PORT49_FN1, PORT49_IN_PU), |
1566 | PINMUX_DATA(FSIAILR_PU_MARK, PORT50_FN5, PORT50_IN_PU), | 1541 | PINMUX_DATA(FSIAILR_PU_MARK, PORT50_FN5, PORT50_IN_PU), |
@@ -1568,12 +1543,8 @@ static pinmux_enum_t pinmux_data[] = { | |||
1568 | PINMUX_DATA(FSIAISLD_PU_MARK, PORT55_FN1, PORT55_IN_PU), | 1543 | PINMUX_DATA(FSIAISLD_PU_MARK, PORT55_FN1, PORT55_IN_PU), |
1569 | }; | 1544 | }; |
1570 | 1545 | ||
1571 | #define _GPIO_PORT(pfx, sfx) PINMUX_GPIO(GPIO_PORT##pfx, PORT##pfx##_DATA) | ||
1572 | #define GPIO_PORT_310() _310(_GPIO_PORT, , unused) | ||
1573 | #define GPIO_FN(str) PINMUX_GPIO(GPIO_FN_##str, str##_MARK) | ||
1574 | |||
1575 | static struct pinmux_gpio pinmux_gpios[] = { | 1546 | static struct pinmux_gpio pinmux_gpios[] = { |
1576 | GPIO_PORT_310(), | 1547 | GPIO_PORT_ALL(), |
1577 | 1548 | ||
1578 | /* Table 25-1 (Functions 0-7) */ | 1549 | /* Table 25-1 (Functions 0-7) */ |
1579 | GPIO_FN(VBUS_0), | 1550 | GPIO_FN(VBUS_0), |
@@ -2236,24 +2207,20 @@ static struct pinmux_gpio pinmux_gpios[] = { | |||
2236 | GPIO_FN(SDHICMD2_PU), | 2207 | GPIO_FN(SDHICMD2_PU), |
2237 | GPIO_FN(MMCCMD0_PU), | 2208 | GPIO_FN(MMCCMD0_PU), |
2238 | GPIO_FN(MMCCMD1_PU), | 2209 | GPIO_FN(MMCCMD1_PU), |
2210 | GPIO_FN(MMCD0_0_PU), | ||
2211 | GPIO_FN(MMCD0_1_PU), | ||
2212 | GPIO_FN(MMCD0_2_PU), | ||
2213 | GPIO_FN(MMCD0_3_PU), | ||
2214 | GPIO_FN(MMCD0_4_PU), | ||
2215 | GPIO_FN(MMCD0_5_PU), | ||
2216 | GPIO_FN(MMCD0_6_PU), | ||
2217 | GPIO_FN(MMCD0_7_PU), | ||
2239 | GPIO_FN(FSIACK_PU), | 2218 | GPIO_FN(FSIACK_PU), |
2240 | GPIO_FN(FSIAILR_PU), | 2219 | GPIO_FN(FSIAILR_PU), |
2241 | GPIO_FN(FSIAIBT_PU), | 2220 | GPIO_FN(FSIAIBT_PU), |
2242 | GPIO_FN(FSIAISLD_PU), | 2221 | GPIO_FN(FSIAISLD_PU), |
2243 | }; | 2222 | }; |
2244 | 2223 | ||
2245 | #define PORTCR(nr, reg) \ | ||
2246 | { PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) { \ | ||
2247 | 0, \ | ||
2248 | /*0001*/ PORT##nr##_OUT , \ | ||
2249 | /*0010*/ PORT##nr##_IN , 0, 0, 0, 0, 0, 0, 0, \ | ||
2250 | /*1010*/ PORT##nr##_IN_PD, 0, 0, 0, \ | ||
2251 | /*1110*/ PORT##nr##_IN_PU, 0, \ | ||
2252 | PORT##nr##_FN0, PORT##nr##_FN1, PORT##nr##_FN2, \ | ||
2253 | PORT##nr##_FN3, PORT##nr##_FN4, PORT##nr##_FN5, \ | ||
2254 | PORT##nr##_FN6, PORT##nr##_FN7, 0, 0, 0, 0, 0, 0, 0, 0 } \ | ||
2255 | } | ||
2256 | |||
2257 | static struct pinmux_cfg_reg pinmux_config_regs[] = { | 2224 | static struct pinmux_cfg_reg pinmux_config_regs[] = { |
2258 | PORTCR(0, 0xe6050000), /* PORT0CR */ | 2225 | PORTCR(0, 0xe6050000), /* PORT0CR */ |
2259 | PORTCR(1, 0xe6050001), /* PORT1CR */ | 2226 | PORTCR(1, 0xe6050001), /* PORT1CR */ |
diff --git a/arch/arm/mach-shmobile/pm-sh7372.c b/arch/arm/mach-shmobile/pm-sh7372.c index 79612737c5b2..0a5b22942fd3 100644 --- a/arch/arm/mach-shmobile/pm-sh7372.c +++ b/arch/arm/mach-shmobile/pm-sh7372.c | |||
@@ -402,22 +402,18 @@ static void sh7372_setup_a3sm(unsigned long msk, unsigned long msk2) | |||
402 | 402 | ||
403 | #ifdef CONFIG_CPU_IDLE | 403 | #ifdef CONFIG_CPU_IDLE |
404 | 404 | ||
405 | static void sh7372_cpuidle_setup(struct cpuidle_device *dev) | 405 | static void sh7372_cpuidle_setup(struct cpuidle_driver *drv) |
406 | { | 406 | { |
407 | struct cpuidle_state *state; | 407 | struct cpuidle_state *state = &drv->states[drv->state_count]; |
408 | int i = dev->state_count; | ||
409 | 408 | ||
410 | state = &dev->states[i]; | ||
411 | snprintf(state->name, CPUIDLE_NAME_LEN, "C2"); | 409 | snprintf(state->name, CPUIDLE_NAME_LEN, "C2"); |
412 | strncpy(state->desc, "Core Standby Mode", CPUIDLE_DESC_LEN); | 410 | strncpy(state->desc, "Core Standby Mode", CPUIDLE_DESC_LEN); |
413 | state->exit_latency = 10; | 411 | state->exit_latency = 10; |
414 | state->target_residency = 20 + 10; | 412 | state->target_residency = 20 + 10; |
415 | state->power_usage = 1; /* perhaps not */ | 413 | state->flags = CPUIDLE_FLAG_TIME_VALID; |
416 | state->flags = 0; | 414 | shmobile_cpuidle_modes[drv->state_count] = sh7372_enter_core_standby; |
417 | state->flags |= CPUIDLE_FLAG_TIME_VALID; | ||
418 | shmobile_cpuidle_modes[i] = sh7372_enter_core_standby; | ||
419 | 415 | ||
420 | dev->state_count = i + 1; | 416 | drv->state_count++; |
421 | } | 417 | } |
422 | 418 | ||
423 | static void sh7372_cpuidle_init(void) | 419 | static void sh7372_cpuidle_init(void) |
diff --git a/arch/arm/mach-shmobile/pm_runtime.c b/arch/arm/mach-shmobile/pm_runtime.c deleted file mode 100644 index bd5c6a3b8c55..000000000000 --- a/arch/arm/mach-shmobile/pm_runtime.c +++ /dev/null | |||
@@ -1,67 +0,0 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-shmobile/pm_runtime.c | ||
3 | * | ||
4 | * Runtime PM support code for SuperH Mobile ARM | ||
5 | * | ||
6 | * Copyright (C) 2009-2010 Magnus Damm | ||
7 | * | ||
8 | * This file is subject to the terms and conditions of the GNU General Public | ||
9 | * License. See the file "COPYING" in the main directory of this archive | ||
10 | * for more details. | ||
11 | */ | ||
12 | |||
13 | #include <linux/init.h> | ||
14 | #include <linux/kernel.h> | ||
15 | #include <linux/io.h> | ||
16 | #include <linux/pm_runtime.h> | ||
17 | #include <linux/pm_domain.h> | ||
18 | #include <linux/pm_clock.h> | ||
19 | #include <linux/platform_device.h> | ||
20 | #include <linux/clk.h> | ||
21 | #include <linux/sh_clk.h> | ||
22 | #include <linux/bitmap.h> | ||
23 | #include <linux/slab.h> | ||
24 | |||
25 | #ifdef CONFIG_PM_RUNTIME | ||
26 | |||
27 | static int default_platform_runtime_idle(struct device *dev) | ||
28 | { | ||
29 | /* suspend synchronously to disable clocks immediately */ | ||
30 | return pm_runtime_suspend(dev); | ||
31 | } | ||
32 | |||
33 | static struct dev_pm_domain default_pm_domain = { | ||
34 | .ops = { | ||
35 | .runtime_suspend = pm_clk_suspend, | ||
36 | .runtime_resume = pm_clk_resume, | ||
37 | .runtime_idle = default_platform_runtime_idle, | ||
38 | USE_PLATFORM_PM_SLEEP_OPS | ||
39 | }, | ||
40 | }; | ||
41 | |||
42 | #define DEFAULT_PM_DOMAIN_PTR (&default_pm_domain) | ||
43 | |||
44 | #else | ||
45 | |||
46 | #define DEFAULT_PM_DOMAIN_PTR NULL | ||
47 | |||
48 | #endif /* CONFIG_PM_RUNTIME */ | ||
49 | |||
50 | static struct pm_clk_notifier_block platform_bus_notifier = { | ||
51 | .pm_domain = DEFAULT_PM_DOMAIN_PTR, | ||
52 | .con_ids = { NULL, }, | ||
53 | }; | ||
54 | |||
55 | static int __init sh_pm_runtime_init(void) | ||
56 | { | ||
57 | pm_clk_add_notifier(&platform_bus_type, &platform_bus_notifier); | ||
58 | return 0; | ||
59 | } | ||
60 | core_initcall(sh_pm_runtime_init); | ||
61 | |||
62 | static int __init sh_pm_runtime_late_init(void) | ||
63 | { | ||
64 | pm_genpd_poweroff_unused(); | ||
65 | return 0; | ||
66 | } | ||
67 | late_initcall(sh_pm_runtime_late_init); | ||
diff --git a/arch/arm/mach-tegra/board-dt.c b/arch/arm/mach-tegra/board-dt.c index d368f8dafcfd..74743ad3d2d3 100644 --- a/arch/arm/mach-tegra/board-dt.c +++ b/arch/arm/mach-tegra/board-dt.c | |||
@@ -101,6 +101,13 @@ static void __init tegra_dt_init(void) | |||
101 | 101 | ||
102 | tegra_clk_init_from_table(tegra_dt_clk_init_table); | 102 | tegra_clk_init_from_table(tegra_dt_clk_init_table); |
103 | 103 | ||
104 | /* | ||
105 | * Finished with the static registrations now; fill in the missing | ||
106 | * devices | ||
107 | */ | ||
108 | of_platform_populate(NULL, tegra_dt_match_table, | ||
109 | tegra20_auxdata_lookup, NULL); | ||
110 | |||
104 | for (i = 0; i < ARRAY_SIZE(pinmux_configs); i++) { | 111 | for (i = 0; i < ARRAY_SIZE(pinmux_configs); i++) { |
105 | if (of_machine_is_compatible(pinmux_configs[i].machine)) { | 112 | if (of_machine_is_compatible(pinmux_configs[i].machine)) { |
106 | pinmux_configs[i].init(); | 113 | pinmux_configs[i].init(); |
@@ -110,12 +117,6 @@ static void __init tegra_dt_init(void) | |||
110 | 117 | ||
111 | WARN(i == ARRAY_SIZE(pinmux_configs), | 118 | WARN(i == ARRAY_SIZE(pinmux_configs), |
112 | "Unknown platform! Pinmuxing not initialized\n"); | 119 | "Unknown platform! Pinmuxing not initialized\n"); |
113 | |||
114 | /* | ||
115 | * Finished with the static registrations now; fill in the missing | ||
116 | * devices | ||
117 | */ | ||
118 | of_platform_populate(NULL, tegra_dt_match_table, tegra20_auxdata_lookup, NULL); | ||
119 | } | 120 | } |
120 | 121 | ||
121 | static const char * tegra_dt_board_compat[] = { | 122 | static const char * tegra_dt_board_compat[] = { |
diff --git a/arch/arm/mach-tegra/board-harmony-pinmux.c b/arch/arm/mach-tegra/board-harmony-pinmux.c index e99b45618cd0..7a4a26d5174c 100644 --- a/arch/arm/mach-tegra/board-harmony-pinmux.c +++ b/arch/arm/mach-tegra/board-harmony-pinmux.c | |||
@@ -16,6 +16,8 @@ | |||
16 | 16 | ||
17 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
18 | #include <linux/gpio.h> | 18 | #include <linux/gpio.h> |
19 | #include <linux/of.h> | ||
20 | |||
19 | #include <mach/pinmux.h> | 21 | #include <mach/pinmux.h> |
20 | 22 | ||
21 | #include "gpio-names.h" | 23 | #include "gpio-names.h" |
@@ -161,7 +163,9 @@ static struct tegra_gpio_table gpio_table[] = { | |||
161 | 163 | ||
162 | void harmony_pinmux_init(void) | 164 | void harmony_pinmux_init(void) |
163 | { | 165 | { |
164 | platform_add_devices(pinmux_devices, ARRAY_SIZE(pinmux_devices)); | 166 | if (!of_machine_is_compatible("nvidia,tegra20")) |
167 | platform_add_devices(pinmux_devices, | ||
168 | ARRAY_SIZE(pinmux_devices)); | ||
165 | 169 | ||
166 | tegra_pinmux_config_table(harmony_pinmux, ARRAY_SIZE(harmony_pinmux)); | 170 | tegra_pinmux_config_table(harmony_pinmux, ARRAY_SIZE(harmony_pinmux)); |
167 | 171 | ||
diff --git a/arch/arm/mach-tegra/board-paz00-pinmux.c b/arch/arm/mach-tegra/board-paz00-pinmux.c index fb20894862b0..be30e215f4b7 100644 --- a/arch/arm/mach-tegra/board-paz00-pinmux.c +++ b/arch/arm/mach-tegra/board-paz00-pinmux.c | |||
@@ -16,6 +16,8 @@ | |||
16 | 16 | ||
17 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
18 | #include <linux/gpio.h> | 18 | #include <linux/gpio.h> |
19 | #include <linux/of.h> | ||
20 | |||
19 | #include <mach/pinmux.h> | 21 | #include <mach/pinmux.h> |
20 | 22 | ||
21 | #include "gpio-names.h" | 23 | #include "gpio-names.h" |
@@ -158,7 +160,9 @@ static struct tegra_gpio_table gpio_table[] = { | |||
158 | 160 | ||
159 | void paz00_pinmux_init(void) | 161 | void paz00_pinmux_init(void) |
160 | { | 162 | { |
161 | platform_add_devices(pinmux_devices, ARRAY_SIZE(pinmux_devices)); | 163 | if (!of_machine_is_compatible("nvidia,tegra20")) |
164 | platform_add_devices(pinmux_devices, | ||
165 | ARRAY_SIZE(pinmux_devices)); | ||
162 | 166 | ||
163 | tegra_pinmux_config_table(paz00_pinmux, ARRAY_SIZE(paz00_pinmux)); | 167 | tegra_pinmux_config_table(paz00_pinmux, ARRAY_SIZE(paz00_pinmux)); |
164 | 168 | ||
diff --git a/arch/arm/mach-tegra/board-seaboard-pinmux.c b/arch/arm/mach-tegra/board-seaboard-pinmux.c index fbce31daa3c9..b1c2972f62fe 100644 --- a/arch/arm/mach-tegra/board-seaboard-pinmux.c +++ b/arch/arm/mach-tegra/board-seaboard-pinmux.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
17 | #include <linux/init.h> | 17 | #include <linux/init.h> |
18 | #include <linux/gpio.h> | 18 | #include <linux/gpio.h> |
19 | #include <linux/of.h> | ||
19 | 20 | ||
20 | #include <mach/pinmux.h> | 21 | #include <mach/pinmux.h> |
21 | #include <mach/pinmux-t2.h> | 22 | #include <mach/pinmux-t2.h> |
@@ -191,6 +192,7 @@ static struct tegra_gpio_table common_gpio_table[] = { | |||
191 | { .gpio = TEGRA_GPIO_SD2_POWER, .enable = true }, | 192 | { .gpio = TEGRA_GPIO_SD2_POWER, .enable = true }, |
192 | { .gpio = TEGRA_GPIO_LIDSWITCH, .enable = true }, | 193 | { .gpio = TEGRA_GPIO_LIDSWITCH, .enable = true }, |
193 | { .gpio = TEGRA_GPIO_POWERKEY, .enable = true }, | 194 | { .gpio = TEGRA_GPIO_POWERKEY, .enable = true }, |
195 | { .gpio = TEGRA_GPIO_HP_DET, .enable = true }, | ||
194 | { .gpio = TEGRA_GPIO_ISL29018_IRQ, .enable = true }, | 196 | { .gpio = TEGRA_GPIO_ISL29018_IRQ, .enable = true }, |
195 | { .gpio = TEGRA_GPIO_CDC_IRQ, .enable = true }, | 197 | { .gpio = TEGRA_GPIO_CDC_IRQ, .enable = true }, |
196 | { .gpio = TEGRA_GPIO_USB1, .enable = true }, | 198 | { .gpio = TEGRA_GPIO_USB1, .enable = true }, |
@@ -218,7 +220,9 @@ static void __init update_pinmux(struct tegra_pingroup_config *newtbl, int size) | |||
218 | 220 | ||
219 | void __init seaboard_common_pinmux_init(void) | 221 | void __init seaboard_common_pinmux_init(void) |
220 | { | 222 | { |
221 | platform_add_devices(pinmux_devices, ARRAY_SIZE(pinmux_devices)); | 223 | if (!of_machine_is_compatible("nvidia,tegra20")) |
224 | platform_add_devices(pinmux_devices, | ||
225 | ARRAY_SIZE(pinmux_devices)); | ||
222 | 226 | ||
223 | tegra_pinmux_config_table(seaboard_pinmux, ARRAY_SIZE(seaboard_pinmux)); | 227 | tegra_pinmux_config_table(seaboard_pinmux, ARRAY_SIZE(seaboard_pinmux)); |
224 | 228 | ||
diff --git a/arch/arm/mach-tegra/board-trimslice-pinmux.c b/arch/arm/mach-tegra/board-trimslice-pinmux.c index 4969dd28a04c..7ab719d46da0 100644 --- a/arch/arm/mach-tegra/board-trimslice-pinmux.c +++ b/arch/arm/mach-tegra/board-trimslice-pinmux.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/gpio.h> | 16 | #include <linux/gpio.h> |
17 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
19 | #include <linux/of.h> | ||
19 | 20 | ||
20 | #include <mach/pinmux.h> | 21 | #include <mach/pinmux.h> |
21 | 22 | ||
@@ -157,7 +158,9 @@ static struct tegra_gpio_table gpio_table[] = { | |||
157 | 158 | ||
158 | void __init trimslice_pinmux_init(void) | 159 | void __init trimslice_pinmux_init(void) |
159 | { | 160 | { |
160 | platform_add_devices(pinmux_devices, ARRAY_SIZE(pinmux_devices)); | 161 | if (!of_machine_is_compatible("nvidia,tegra20")) |
162 | platform_add_devices(pinmux_devices, | ||
163 | ARRAY_SIZE(pinmux_devices)); | ||
161 | tegra_pinmux_config_table(trimslice_pinmux, ARRAY_SIZE(trimslice_pinmux)); | 164 | tegra_pinmux_config_table(trimslice_pinmux, ARRAY_SIZE(trimslice_pinmux)); |
162 | tegra_gpio_config(gpio_table, ARRAY_SIZE(gpio_table)); | 165 | tegra_gpio_config(gpio_table, ARRAY_SIZE(gpio_table)); |
163 | } | 166 | } |
diff --git a/arch/arm/plat-mxc/Kconfig b/arch/arm/plat-mxc/Kconfig index a08a95107a63..b3a1f2b3ada3 100644 --- a/arch/arm/plat-mxc/Kconfig +++ b/arch/arm/plat-mxc/Kconfig | |||
@@ -10,7 +10,7 @@ choice | |||
10 | 10 | ||
11 | config ARCH_IMX_V4_V5 | 11 | config ARCH_IMX_V4_V5 |
12 | bool "i.MX1, i.MX21, i.MX25, i.MX27" | 12 | bool "i.MX1, i.MX21, i.MX25, i.MX27" |
13 | select AUTO_ZRELADDR | 13 | select AUTO_ZRELADDR if !ZBOOT_ROM |
14 | select ARM_PATCH_PHYS_VIRT | 14 | select ARM_PATCH_PHYS_VIRT |
15 | help | 15 | help |
16 | This enables support for systems based on the Freescale i.MX ARMv4 | 16 | This enables support for systems based on the Freescale i.MX ARMv4 |
@@ -26,7 +26,7 @@ config ARCH_IMX_V6_V7 | |||
26 | 26 | ||
27 | config ARCH_MX5 | 27 | config ARCH_MX5 |
28 | bool "i.MX50, i.MX51, i.MX53" | 28 | bool "i.MX50, i.MX51, i.MX53" |
29 | select AUTO_ZRELADDR | 29 | select AUTO_ZRELADDR if !ZBOOT_ROM |
30 | select ARM_PATCH_PHYS_VIRT | 30 | select ARM_PATCH_PHYS_VIRT |
31 | help | 31 | help |
32 | This enables support for machines using Freescale's i.MX50 and i.MX53 | 32 | This enables support for machines using Freescale's i.MX50 and i.MX53 |
diff --git a/arch/arm/plat-mxc/avic.c b/arch/arm/plat-mxc/avic.c index 8875fb415f68..55f15699a383 100644 --- a/arch/arm/plat-mxc/avic.c +++ b/arch/arm/plat-mxc/avic.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/io.h> | 22 | #include <linux/io.h> |
23 | #include <mach/common.h> | 23 | #include <mach/common.h> |
24 | #include <asm/mach/irq.h> | 24 | #include <asm/mach/irq.h> |
25 | #include <asm/exception.h> | ||
25 | #include <mach/hardware.h> | 26 | #include <mach/hardware.h> |
26 | 27 | ||
27 | #include "irq-common.h" | 28 | #include "irq-common.h" |
diff --git a/arch/arm/plat-mxc/gic.c b/arch/arm/plat-mxc/gic.c index b3b8eed263b8..12f8f8109010 100644 --- a/arch/arm/plat-mxc/gic.c +++ b/arch/arm/plat-mxc/gic.c | |||
@@ -28,21 +28,14 @@ asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs) | |||
28 | if (irqnr == 1023) | 28 | if (irqnr == 1023) |
29 | break; | 29 | break; |
30 | 30 | ||
31 | if (irqnr > 29 && irqnr < 1021) | 31 | if (irqnr > 15 && irqnr < 1021) |
32 | handle_IRQ(irqnr, regs); | 32 | handle_IRQ(irqnr, regs); |
33 | #ifdef CONFIG_SMP | 33 | #ifdef CONFIG_SMP |
34 | else if (irqnr < 16) { | 34 | else { |
35 | writel_relaxed(irqstat, gic_cpu_base_addr + | 35 | writel_relaxed(irqstat, gic_cpu_base_addr + |
36 | GIC_CPU_EOI); | 36 | GIC_CPU_EOI); |
37 | handle_IPI(irqnr, regs); | 37 | handle_IPI(irqnr, regs); |
38 | } | 38 | } |
39 | #endif | 39 | #endif |
40 | #ifdef CONFIG_LOCAL_TIMERS | ||
41 | else if (irqnr == 29) { | ||
42 | writel_relaxed(irqstat, gic_cpu_base_addr + | ||
43 | GIC_CPU_EOI); | ||
44 | handle_local_timer(regs); | ||
45 | } | ||
46 | #endif | ||
47 | } while (1); | 40 | } while (1); |
48 | } | 41 | } |
diff --git a/arch/arm/plat-mxc/include/mach/entry-macro.S b/arch/arm/plat-mxc/include/mach/entry-macro.S index 9fe0dfcf4e7e..ca5cf26a04b1 100644 --- a/arch/arm/plat-mxc/include/mach/entry-macro.S +++ b/arch/arm/plat-mxc/include/mach/entry-macro.S | |||
@@ -25,6 +25,3 @@ | |||
25 | 25 | ||
26 | .macro test_for_ipi, irqnr, irqstat, base, tmp | 26 | .macro test_for_ipi, irqnr, irqstat, base, tmp |
27 | .endm | 27 | .endm |
28 | |||
29 | .macro test_for_ltirq, irqnr, irqstat, base, tmp | ||
30 | .endm | ||
diff --git a/arch/arm/plat-mxc/tzic.c b/arch/arm/plat-mxc/tzic.c index e993a184189a..a3c164c7ba82 100644 --- a/arch/arm/plat-mxc/tzic.c +++ b/arch/arm/plat-mxc/tzic.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
18 | 18 | ||
19 | #include <asm/mach/irq.h> | 19 | #include <asm/mach/irq.h> |
20 | #include <asm/exception.h> | ||
20 | 21 | ||
21 | #include <mach/hardware.h> | 22 | #include <mach/hardware.h> |
22 | #include <mach/common.h> | 23 | #include <mach/common.h> |
diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c index 2def4e1990ed..af3b92be8459 100644 --- a/arch/arm/plat-omap/dmtimer.c +++ b/arch/arm/plat-omap/dmtimer.c | |||
@@ -35,6 +35,7 @@ | |||
35 | * 675 Mass Ave, Cambridge, MA 02139, USA. | 35 | * 675 Mass Ave, Cambridge, MA 02139, USA. |
36 | */ | 36 | */ |
37 | 37 | ||
38 | #include <linux/module.h> | ||
38 | #include <linux/io.h> | 39 | #include <linux/io.h> |
39 | #include <linux/slab.h> | 40 | #include <linux/slab.h> |
40 | #include <linux/err.h> | 41 | #include <linux/err.h> |
diff --git a/arch/arm/plat-omap/i2c.c b/arch/arm/plat-omap/i2c.c index 679cbd49c019..db071bc71c4d 100644 --- a/arch/arm/plat-omap/i2c.c +++ b/arch/arm/plat-omap/i2c.c | |||
@@ -184,7 +184,7 @@ static inline int omap2_i2c_add_bus(int bus_id) | |||
184 | NULL, 0, 0); | 184 | NULL, 0, 0); |
185 | WARN(IS_ERR(pdev), "Could not build omap_device for %s\n", name); | 185 | WARN(IS_ERR(pdev), "Could not build omap_device for %s\n", name); |
186 | 186 | ||
187 | return PTR_ERR(pdev); | 187 | return PTR_RET(pdev); |
188 | } | 188 | } |
189 | #else | 189 | #else |
190 | static inline int omap2_i2c_add_bus(int bus_id) | 190 | static inline int omap2_i2c_add_bus(int bus_id) |
diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h index 2f9026942229..408a12f79205 100644 --- a/arch/arm/plat-omap/include/plat/cpu.h +++ b/arch/arm/plat-omap/include/plat/cpu.h | |||
@@ -399,6 +399,13 @@ void omap2_check_revision(void); | |||
399 | 399 | ||
400 | /* | 400 | /* |
401 | * Runtime detection of OMAP3 features | 401 | * Runtime detection of OMAP3 features |
402 | * | ||
403 | * OMAP3_HAS_IO_CHAIN_CTRL: Some later members of the OMAP3 chip | ||
404 | * family have OS-level control over the I/O chain clock. This is | ||
405 | * to avoid a window during which wakeups could potentially be lost | ||
406 | * during powerdomain transitions. If this bit is set, it | ||
407 | * indicates that the chip does support OS-level control of this | ||
408 | * feature. | ||
402 | */ | 409 | */ |
403 | extern u32 omap_features; | 410 | extern u32 omap_features; |
404 | 411 | ||
@@ -410,9 +417,10 @@ extern u32 omap_features; | |||
410 | #define OMAP3_HAS_192MHZ_CLK BIT(5) | 417 | #define OMAP3_HAS_192MHZ_CLK BIT(5) |
411 | #define OMAP3_HAS_IO_WAKEUP BIT(6) | 418 | #define OMAP3_HAS_IO_WAKEUP BIT(6) |
412 | #define OMAP3_HAS_SDRC BIT(7) | 419 | #define OMAP3_HAS_SDRC BIT(7) |
413 | #define OMAP4_HAS_MPU_1GHZ BIT(8) | 420 | #define OMAP3_HAS_IO_CHAIN_CTRL BIT(8) |
414 | #define OMAP4_HAS_MPU_1_2GHZ BIT(9) | 421 | #define OMAP4_HAS_MPU_1GHZ BIT(9) |
415 | #define OMAP4_HAS_MPU_1_5GHZ BIT(10) | 422 | #define OMAP4_HAS_MPU_1_2GHZ BIT(10) |
423 | #define OMAP4_HAS_MPU_1_5GHZ BIT(11) | ||
416 | 424 | ||
417 | 425 | ||
418 | #define OMAP3_HAS_FEATURE(feat,flag) \ | 426 | #define OMAP3_HAS_FEATURE(feat,flag) \ |
@@ -429,12 +437,11 @@ OMAP3_HAS_FEATURE(isp, ISP) | |||
429 | OMAP3_HAS_FEATURE(192mhz_clk, 192MHZ_CLK) | 437 | OMAP3_HAS_FEATURE(192mhz_clk, 192MHZ_CLK) |
430 | OMAP3_HAS_FEATURE(io_wakeup, IO_WAKEUP) | 438 | OMAP3_HAS_FEATURE(io_wakeup, IO_WAKEUP) |
431 | OMAP3_HAS_FEATURE(sdrc, SDRC) | 439 | OMAP3_HAS_FEATURE(sdrc, SDRC) |
440 | OMAP3_HAS_FEATURE(io_chain_ctrl, IO_CHAIN_CTRL) | ||
432 | 441 | ||
433 | /* | 442 | /* |
434 | * Runtime detection of OMAP4 features | 443 | * Runtime detection of OMAP4 features |
435 | */ | 444 | */ |
436 | extern u32 omap_features; | ||
437 | |||
438 | #define OMAP4_HAS_FEATURE(feat, flag) \ | 445 | #define OMAP4_HAS_FEATURE(feat, flag) \ |
439 | static inline unsigned int omap4_has_ ##feat(void) \ | 446 | static inline unsigned int omap4_has_ ##feat(void) \ |
440 | { \ | 447 | { \ |
diff --git a/arch/arm/plat-omap/include/plat/dmtimer.h b/arch/arm/plat-omap/include/plat/dmtimer.h index d11025e6e7a4..9418f00b6c38 100644 --- a/arch/arm/plat-omap/include/plat/dmtimer.h +++ b/arch/arm/plat-omap/include/plat/dmtimer.h | |||
@@ -104,7 +104,7 @@ struct dmtimer_platform_data { | |||
104 | 104 | ||
105 | bool loses_context; | 105 | bool loses_context; |
106 | 106 | ||
107 | u32 (*get_context_loss_count)(struct device *dev); | 107 | int (*get_context_loss_count)(struct device *dev); |
108 | }; | 108 | }; |
109 | 109 | ||
110 | struct omap_dm_timer *omap_dm_timer_request(void); | 110 | struct omap_dm_timer *omap_dm_timer_request(void); |
@@ -279,7 +279,7 @@ struct omap_dm_timer { | |||
279 | struct platform_device *pdev; | 279 | struct platform_device *pdev; |
280 | struct list_head node; | 280 | struct list_head node; |
281 | 281 | ||
282 | u32 (*get_context_loss_count)(struct device *dev); | 282 | int (*get_context_loss_count)(struct device *dev); |
283 | }; | 283 | }; |
284 | 284 | ||
285 | int omap_dm_timer_prepare(struct omap_dm_timer *timer); | 285 | int omap_dm_timer_prepare(struct omap_dm_timer *timer); |
diff --git a/arch/arm/plat-omap/include/plat/omap-alsa.h b/arch/arm/plat-omap/include/plat/omap-alsa.h deleted file mode 100644 index b53055b390d0..000000000000 --- a/arch/arm/plat-omap/include/plat/omap-alsa.h +++ /dev/null | |||
@@ -1,123 +0,0 @@ | |||
1 | /* | ||
2 | * arch/arm/plat-omap/include/mach/omap-alsa.h | ||
3 | * | ||
4 | * Alsa Driver for AIC23 and TSC2101 codecs on OMAP platform boards. | ||
5 | * | ||
6 | * Copyright (C) 2006 Mika Laitio <lamikr@cc.jyu.fi> | ||
7 | * | ||
8 | * Copyright (C) 2005 Instituto Nokia de Tecnologia - INdT - Manaus Brazil | ||
9 | * Written by Daniel Petrini, David Cohen, Anderson Briglia | ||
10 | * {daniel.petrini, david.cohen, anderson.briglia}@indt.org.br | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or modify it | ||
13 | * under the terms of the GNU General Public License as published by the | ||
14 | * Free Software Foundation; either version 2 of the License, or (at your | ||
15 | * option) any later version. | ||
16 | * | ||
17 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED | ||
18 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
19 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN | ||
20 | * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
21 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
22 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | ||
23 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
24 | * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
27 | * | ||
28 | * You should have received a copy of the GNU General Public License along | ||
29 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
30 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
31 | * | ||
32 | * History | ||
33 | * ------- | ||
34 | * | ||
35 | * 2005/07/25 INdT-10LE Kernel Team - Alsa driver for omap osk, | ||
36 | * original version based in sa1100 driver | ||
37 | * and omap oss driver. | ||
38 | */ | ||
39 | |||
40 | #ifndef __OMAP_ALSA_H | ||
41 | #define __OMAP_ALSA_H | ||
42 | |||
43 | #include <plat/dma.h> | ||
44 | #include <sound/core.h> | ||
45 | #include <sound/pcm.h> | ||
46 | #include <plat/mcbsp.h> | ||
47 | #include <linux/platform_device.h> | ||
48 | |||
49 | #define DMA_BUF_SIZE (1024 * 8) | ||
50 | |||
51 | /* | ||
52 | * Buffer management for alsa and dma | ||
53 | */ | ||
54 | struct audio_stream { | ||
55 | char *id; /* identification string */ | ||
56 | int stream_id; /* numeric identification */ | ||
57 | int dma_dev; /* dma number of that device */ | ||
58 | int *lch; /* Chain of channels this stream is linked to */ | ||
59 | char started; /* to store if the chain was started or not */ | ||
60 | int dma_q_head; /* DMA Channel Q Head */ | ||
61 | int dma_q_tail; /* DMA Channel Q Tail */ | ||
62 | char dma_q_count; /* DMA Channel Q Count */ | ||
63 | int active:1; /* we are using this stream for transfer now */ | ||
64 | int period; /* current transfer period */ | ||
65 | int periods; /* current count of periods registerd in the DMA engine */ | ||
66 | spinlock_t dma_lock; /* for locking in DMA operations */ | ||
67 | struct snd_pcm_substream *stream; /* the pcm stream */ | ||
68 | unsigned linked:1; /* dma channels linked */ | ||
69 | int offset; /* store start position of the last period in the alsa buffer */ | ||
70 | int (*hw_start)(void); /* interface to start HW interface, e.g. McBSP */ | ||
71 | int (*hw_stop)(void); /* interface to stop HW interface, e.g. McBSP */ | ||
72 | }; | ||
73 | |||
74 | /* | ||
75 | * Alsa card structure for aic23 | ||
76 | */ | ||
77 | struct snd_card_omap_codec { | ||
78 | struct snd_card *card; | ||
79 | struct snd_pcm *pcm; | ||
80 | long samplerate; | ||
81 | struct audio_stream s[2]; /* playback & capture */ | ||
82 | }; | ||
83 | |||
84 | /* Codec specific information and function pointers. | ||
85 | * Codec (omap-alsa-aic23.c and omap-alsa-tsc2101.c) | ||
86 | * are responsible for defining the function pointers. | ||
87 | */ | ||
88 | struct omap_alsa_codec_config { | ||
89 | char *name; | ||
90 | struct omap_mcbsp_reg_cfg *mcbsp_regs_alsa; | ||
91 | struct snd_pcm_hw_constraint_list *hw_constraints_rates; | ||
92 | struct snd_pcm_hardware *snd_omap_alsa_playback; | ||
93 | struct snd_pcm_hardware *snd_omap_alsa_capture; | ||
94 | void (*codec_configure_dev)(void); | ||
95 | void (*codec_set_samplerate)(long); | ||
96 | void (*codec_clock_setup)(void); | ||
97 | int (*codec_clock_on)(void); | ||
98 | int (*codec_clock_off)(void); | ||
99 | int (*get_default_samplerate)(void); | ||
100 | }; | ||
101 | |||
102 | /*********** Mixer function prototypes *************************/ | ||
103 | int snd_omap_mixer(struct snd_card_omap_codec *); | ||
104 | void snd_omap_init_mixer(void); | ||
105 | |||
106 | #ifdef CONFIG_PM | ||
107 | void snd_omap_suspend_mixer(void); | ||
108 | void snd_omap_resume_mixer(void); | ||
109 | #endif | ||
110 | |||
111 | int snd_omap_alsa_post_probe(struct platform_device *pdev, struct omap_alsa_codec_config *config); | ||
112 | int snd_omap_alsa_remove(struct platform_device *pdev); | ||
113 | #ifdef CONFIG_PM | ||
114 | int snd_omap_alsa_suspend(struct platform_device *pdev, pm_message_t state); | ||
115 | int snd_omap_alsa_resume(struct platform_device *pdev); | ||
116 | #else | ||
117 | #define snd_omap_alsa_suspend NULL | ||
118 | #define snd_omap_alsa_resume NULL | ||
119 | #endif | ||
120 | |||
121 | void callback_omap_alsa_sound_dma(void *); | ||
122 | |||
123 | #endif | ||
diff --git a/arch/arm/plat-omap/include/plat/omap-pm.h b/arch/arm/plat-omap/include/plat/omap-pm.h index 0840df813f4f..67faa7b8fe92 100644 --- a/arch/arm/plat-omap/include/plat/omap-pm.h +++ b/arch/arm/plat-omap/include/plat/omap-pm.h | |||
@@ -342,9 +342,9 @@ unsigned long omap_pm_cpu_get_freq(void); | |||
342 | * driver must restore device context. If the number of context losses | 342 | * driver must restore device context. If the number of context losses |
343 | * exceeds the maximum positive integer, the function will wrap to 0 and | 343 | * exceeds the maximum positive integer, the function will wrap to 0 and |
344 | * continue counting. Returns the number of context losses for this device, | 344 | * continue counting. Returns the number of context losses for this device, |
345 | * or zero upon error. | 345 | * or negative value upon error. |
346 | */ | 346 | */ |
347 | u32 omap_pm_get_dev_context_loss_count(struct device *dev); | 347 | int omap_pm_get_dev_context_loss_count(struct device *dev); |
348 | 348 | ||
349 | void omap_pm_enable_off_mode(void); | 349 | void omap_pm_enable_off_mode(void); |
350 | void omap_pm_disable_off_mode(void); | 350 | void omap_pm_disable_off_mode(void); |
diff --git a/arch/arm/plat-omap/include/plat/omap_device.h b/arch/arm/plat-omap/include/plat/omap_device.h index 12c5b0c345bf..51423d2727a5 100644 --- a/arch/arm/plat-omap/include/plat/omap_device.h +++ b/arch/arm/plat-omap/include/plat/omap_device.h | |||
@@ -107,7 +107,7 @@ struct device *omap_device_get_by_hwmod_name(const char *oh_name); | |||
107 | int omap_device_align_pm_lat(struct platform_device *pdev, | 107 | int omap_device_align_pm_lat(struct platform_device *pdev, |
108 | u32 new_wakeup_lat_limit); | 108 | u32 new_wakeup_lat_limit); |
109 | struct powerdomain *omap_device_get_pwrdm(struct omap_device *od); | 109 | struct powerdomain *omap_device_get_pwrdm(struct omap_device *od); |
110 | u32 omap_device_get_context_loss_count(struct platform_device *pdev); | 110 | int omap_device_get_context_loss_count(struct platform_device *pdev); |
111 | 111 | ||
112 | /* Other */ | 112 | /* Other */ |
113 | 113 | ||
diff --git a/arch/arm/plat-omap/include/plat/omap_hwmod.h b/arch/arm/plat-omap/include/plat/omap_hwmod.h index 5419f1a2aaa4..8b372ede17c1 100644 --- a/arch/arm/plat-omap/include/plat/omap_hwmod.h +++ b/arch/arm/plat-omap/include/plat/omap_hwmod.h | |||
@@ -600,7 +600,7 @@ int omap_hwmod_for_each_by_class(const char *classname, | |||
600 | void *user); | 600 | void *user); |
601 | 601 | ||
602 | int omap_hwmod_set_postsetup_state(struct omap_hwmod *oh, u8 state); | 602 | int omap_hwmod_set_postsetup_state(struct omap_hwmod *oh, u8 state); |
603 | u32 omap_hwmod_get_context_loss_count(struct omap_hwmod *oh); | 603 | int omap_hwmod_get_context_loss_count(struct omap_hwmod *oh); |
604 | 604 | ||
605 | int omap_hwmod_no_setup_reset(struct omap_hwmod *oh); | 605 | int omap_hwmod_no_setup_reset(struct omap_hwmod *oh); |
606 | 606 | ||
diff --git a/arch/arm/plat-omap/omap-pm-noop.c b/arch/arm/plat-omap/omap-pm-noop.c index b0471bb2d47d..3dc3801aace4 100644 --- a/arch/arm/plat-omap/omap-pm-noop.c +++ b/arch/arm/plat-omap/omap-pm-noop.c | |||
@@ -27,7 +27,7 @@ | |||
27 | #include <plat/omap_device.h> | 27 | #include <plat/omap_device.h> |
28 | 28 | ||
29 | static bool off_mode_enabled; | 29 | static bool off_mode_enabled; |
30 | static u32 dummy_context_loss_counter; | 30 | static int dummy_context_loss_counter; |
31 | 31 | ||
32 | /* | 32 | /* |
33 | * Device-driver-originated constraints (via board-*.c files) | 33 | * Device-driver-originated constraints (via board-*.c files) |
@@ -311,22 +311,32 @@ void omap_pm_disable_off_mode(void) | |||
311 | 311 | ||
312 | #ifdef CONFIG_ARCH_OMAP2PLUS | 312 | #ifdef CONFIG_ARCH_OMAP2PLUS |
313 | 313 | ||
314 | u32 omap_pm_get_dev_context_loss_count(struct device *dev) | 314 | int omap_pm_get_dev_context_loss_count(struct device *dev) |
315 | { | 315 | { |
316 | struct platform_device *pdev = to_platform_device(dev); | 316 | struct platform_device *pdev = to_platform_device(dev); |
317 | u32 count; | 317 | int count; |
318 | 318 | ||
319 | if (WARN_ON(!dev)) | 319 | if (WARN_ON(!dev)) |
320 | return 0; | 320 | return -ENODEV; |
321 | 321 | ||
322 | if (dev->parent == &omap_device_parent) { | 322 | if (dev->parent == &omap_device_parent) { |
323 | count = omap_device_get_context_loss_count(pdev); | 323 | count = omap_device_get_context_loss_count(pdev); |
324 | } else { | 324 | } else { |
325 | WARN_ONCE(off_mode_enabled, "omap_pm: using dummy context loss counter; device %s should be converted to omap_device", | 325 | WARN_ONCE(off_mode_enabled, "omap_pm: using dummy context loss counter; device %s should be converted to omap_device", |
326 | dev_name(dev)); | 326 | dev_name(dev)); |
327 | if (off_mode_enabled) | 327 | |
328 | dummy_context_loss_counter++; | ||
329 | count = dummy_context_loss_counter; | 328 | count = dummy_context_loss_counter; |
329 | |||
330 | if (off_mode_enabled) { | ||
331 | count++; | ||
332 | /* | ||
333 | * Context loss count has to be a non-negative value. | ||
334 | * Clear the sign bit to get a value range from 0 to | ||
335 | * INT_MAX. | ||
336 | */ | ||
337 | count &= INT_MAX; | ||
338 | dummy_context_loss_counter = count; | ||
339 | } | ||
330 | } | 340 | } |
331 | 341 | ||
332 | pr_debug("OMAP PM: context loss count for dev %s = %d\n", | 342 | pr_debug("OMAP PM: context loss count for dev %s = %d\n", |
@@ -337,7 +347,7 @@ u32 omap_pm_get_dev_context_loss_count(struct device *dev) | |||
337 | 347 | ||
338 | #else | 348 | #else |
339 | 349 | ||
340 | u32 omap_pm_get_dev_context_loss_count(struct device *dev) | 350 | int omap_pm_get_dev_context_loss_count(struct device *dev) |
341 | { | 351 | { |
342 | return dummy_context_loss_counter; | 352 | return dummy_context_loss_counter; |
343 | } | 353 | } |
diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c index cd90bedd9306..e8d98693d2dd 100644 --- a/arch/arm/plat-omap/omap_device.c +++ b/arch/arm/plat-omap/omap_device.c | |||
@@ -78,6 +78,7 @@ | |||
78 | #undef DEBUG | 78 | #undef DEBUG |
79 | 79 | ||
80 | #include <linux/kernel.h> | 80 | #include <linux/kernel.h> |
81 | #include <linux/export.h> | ||
81 | #include <linux/platform_device.h> | 82 | #include <linux/platform_device.h> |
82 | #include <linux/slab.h> | 83 | #include <linux/slab.h> |
83 | #include <linux/err.h> | 84 | #include <linux/err.h> |
@@ -426,7 +427,7 @@ static int _omap_device_notifier_call(struct notifier_block *nb, | |||
426 | * return the context loss counter for that hwmod, otherwise return | 427 | * return the context loss counter for that hwmod, otherwise return |
427 | * zero. | 428 | * zero. |
428 | */ | 429 | */ |
429 | u32 omap_device_get_context_loss_count(struct platform_device *pdev) | 430 | int omap_device_get_context_loss_count(struct platform_device *pdev) |
430 | { | 431 | { |
431 | struct omap_device *od; | 432 | struct omap_device *od; |
432 | u32 ret = 0; | 433 | u32 ret = 0; |
diff --git a/arch/arm/plat-pxa/include/plat/pxa3xx_nand.h b/arch/arm/plat-pxa/include/plat/pxa3xx_nand.h index 442301fe48b4..c42f39f20195 100644 --- a/arch/arm/plat-pxa/include/plat/pxa3xx_nand.h +++ b/arch/arm/plat-pxa/include/plat/pxa3xx_nand.h | |||
@@ -41,6 +41,19 @@ struct pxa3xx_nand_flash { | |||
41 | struct pxa3xx_nand_timing *timing; /* NAND Flash timing */ | 41 | struct pxa3xx_nand_timing *timing; /* NAND Flash timing */ |
42 | }; | 42 | }; |
43 | 43 | ||
44 | /* | ||
45 | * Current pxa3xx_nand controller has two chip select which | ||
46 | * both be workable. | ||
47 | * | ||
48 | * Notice should be taken that: | ||
49 | * When you want to use this feature, you should not enable the | ||
50 | * keep configuration feature, for two chip select could be | ||
51 | * attached with different nand chip. The different page size | ||
52 | * and timing requirement make the keep configuration impossible. | ||
53 | */ | ||
54 | |||
55 | /* The max num of chip select current support */ | ||
56 | #define NUM_CHIP_SELECT (2) | ||
44 | struct pxa3xx_nand_platform_data { | 57 | struct pxa3xx_nand_platform_data { |
45 | 58 | ||
46 | /* the data flash bus is shared between the Static Memory | 59 | /* the data flash bus is shared between the Static Memory |
@@ -52,8 +65,11 @@ struct pxa3xx_nand_platform_data { | |||
52 | /* allow platform code to keep OBM/bootloader defined NFC config */ | 65 | /* allow platform code to keep OBM/bootloader defined NFC config */ |
53 | int keep_config; | 66 | int keep_config; |
54 | 67 | ||
55 | const struct mtd_partition *parts; | 68 | /* indicate how many chip selects will be used */ |
56 | unsigned int nr_parts; | 69 | int num_cs; |
70 | |||
71 | const struct mtd_partition *parts[NUM_CHIP_SELECT]; | ||
72 | unsigned int nr_parts[NUM_CHIP_SELECT]; | ||
57 | 73 | ||
58 | const struct pxa3xx_nand_flash * flash; | 74 | const struct pxa3xx_nand_flash * flash; |
59 | size_t num_flash; | 75 | size_t num_flash; |
diff --git a/arch/arm/plat-samsung/dma-ops.c b/arch/arm/plat-samsung/dma-ops.c index 6e3d9abc9e2e..93a994a5dd8f 100644 --- a/arch/arm/plat-samsung/dma-ops.c +++ b/arch/arm/plat-samsung/dma-ops.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/errno.h> | 14 | #include <linux/errno.h> |
15 | #include <linux/amba/pl330.h> | 15 | #include <linux/amba/pl330.h> |
16 | #include <linux/scatterlist.h> | 16 | #include <linux/scatterlist.h> |
17 | #include <linux/export.h> | ||
17 | 18 | ||
18 | #include <mach/dma.h> | 19 | #include <mach/dma.h> |
19 | 20 | ||
diff --git a/arch/arm/plat-samsung/s3c-dma-ops.c b/arch/arm/plat-samsung/s3c-dma-ops.c index 582333c70585..781494912827 100644 --- a/arch/arm/plat-samsung/s3c-dma-ops.c +++ b/arch/arm/plat-samsung/s3c-dma-ops.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/errno.h> | 14 | #include <linux/errno.h> |
15 | #include <linux/slab.h> | 15 | #include <linux/slab.h> |
16 | #include <linux/types.h> | 16 | #include <linux/types.h> |
17 | #include <linux/export.h> | ||
17 | 18 | ||
18 | #include <mach/dma.h> | 19 | #include <mach/dma.h> |
19 | 20 | ||