diff options
Diffstat (limited to 'arch')
202 files changed, 1768 insertions, 2474 deletions
diff --git a/arch/arm/boot/dts/at91sam9260.dtsi b/arch/arm/boot/dts/at91sam9260.dtsi index f449efc9825..66389c1c6f6 100644 --- a/arch/arm/boot/dts/at91sam9260.dtsi +++ b/arch/arm/boot/dts/at91sam9260.dtsi @@ -52,10 +52,11 @@  			ranges;  			aic: interrupt-controller@fffff000 { -				#interrupt-cells = <2>; +				#interrupt-cells = <3>;  				compatible = "atmel,at91rm9200-aic";  				interrupt-controller;  				reg = <0xfffff000 0x200>; +				atmel,external-irqs = <29 30 31>;  			};  			ramc0: ramc@ffffea00 { @@ -81,25 +82,25 @@  			pit: timer@fffffd30 {  				compatible = "atmel,at91sam9260-pit";  				reg = <0xfffffd30 0xf>; -				interrupts = <1 4>; +				interrupts = <1 4 7>;  			};  			tcb0: timer@fffa0000 {  				compatible = "atmel,at91rm9200-tcb";  				reg = <0xfffa0000 0x100>; -				interrupts = <17 4 18 4 19 4>; +				interrupts = <17 4 0 18 4 0 19 4 0>;  			};  			tcb1: timer@fffdc000 {  				compatible = "atmel,at91rm9200-tcb";  				reg = <0xfffdc000 0x100>; -				interrupts = <26 4 27 4 28 4>; +				interrupts = <26 4 0 27 4 0 28 4 0>;  			};  			pioA: gpio@fffff400 {  				compatible = "atmel,at91rm9200-gpio";  				reg = <0xfffff400 0x100>; -				interrupts = <2 4>; +				interrupts = <2 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -108,7 +109,7 @@  			pioB: gpio@fffff600 {  				compatible = "atmel,at91rm9200-gpio";  				reg = <0xfffff600 0x100>; -				interrupts = <3 4>; +				interrupts = <3 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -117,7 +118,7 @@  			pioC: gpio@fffff800 {  				compatible = "atmel,at91rm9200-gpio";  				reg = <0xfffff800 0x100>; -				interrupts = <4 4>; +				interrupts = <4 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -126,14 +127,14 @@  			dbgu: serial@fffff200 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xfffff200 0x200>; -				interrupts = <1 4>; +				interrupts = <1 4 7>;  				status = "disabled";  			};  			usart0: serial@fffb0000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xfffb0000 0x200>; -				interrupts = <6 4>; +				interrupts = <6 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -142,7 +143,7 @@  			usart1: serial@fffb4000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xfffb4000 0x200>; -				interrupts = <7 4>; +				interrupts = <7 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -151,7 +152,7 @@  			usart2: serial@fffb8000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xfffb8000 0x200>; -				interrupts = <8 4>; +				interrupts = <8 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -160,7 +161,7 @@  			usart3: serial@fffd0000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xfffd0000 0x200>; -				interrupts = <23 4>; +				interrupts = <23 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -169,7 +170,7 @@  			usart4: serial@fffd4000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xfffd4000 0x200>; -				interrupts = <24 4>; +				interrupts = <24 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -178,7 +179,7 @@  			usart5: serial@fffd8000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xfffd8000 0x200>; -				interrupts = <25 4>; +				interrupts = <25 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -187,21 +188,21 @@  			macb0: ethernet@fffc4000 {  				compatible = "cdns,at32ap7000-macb", "cdns,macb";  				reg = <0xfffc4000 0x100>; -				interrupts = <21 4>; +				interrupts = <21 4 3>;  				status = "disabled";  			};  			usb1: gadget@fffa4000 {  				compatible = "atmel,at91rm9200-udc";  				reg = <0xfffa4000 0x4000>; -				interrupts = <10 4>; +				interrupts = <10 4 2>;  				status = "disabled";  			};  			adc0: adc@fffe0000 {  				compatible = "atmel,at91sam9260-adc";  				reg = <0xfffe0000 0x100>; -				interrupts = <5 4>; +				interrupts = <5 4 0>;  				atmel,adc-use-external-triggers;  				atmel,adc-channels-used = <0xf>;  				atmel,adc-vref = <3300>; @@ -253,7 +254,7 @@  		usb0: ohci@00500000 {  			compatible = "atmel,at91rm9200-ohci", "usb-ohci";  			reg = <0x00500000 0x100000>; -			interrupts = <20 4>; +			interrupts = <20 4 2>;  			status = "disabled";  		};  	}; diff --git a/arch/arm/boot/dts/at91sam9263.dtsi b/arch/arm/boot/dts/at91sam9263.dtsi index 0209913a65a..b460d6ce9eb 100644 --- a/arch/arm/boot/dts/at91sam9263.dtsi +++ b/arch/arm/boot/dts/at91sam9263.dtsi @@ -48,10 +48,11 @@  			ranges;  			aic: interrupt-controller@fffff000 { -				#interrupt-cells = <2>; +				#interrupt-cells = <3>;  				compatible = "atmel,at91rm9200-aic";  				interrupt-controller;  				reg = <0xfffff000 0x200>; +				atmel,external-irqs = <30 31>;  			};  			pmc: pmc@fffffc00 { @@ -68,13 +69,13 @@  			pit: timer@fffffd30 {  				compatible = "atmel,at91sam9260-pit";  				reg = <0xfffffd30 0xf>; -				interrupts = <1 4>; +				interrupts = <1 4 7>;  			};  			tcb0: timer@fff7c000 {  				compatible = "atmel,at91rm9200-tcb";  				reg = <0xfff7c000 0x100>; -				interrupts = <19 4>; +				interrupts = <19 4 0>;  			};  			rstc@fffffd00 { @@ -90,7 +91,7 @@  			pioA: gpio@fffff200 {  				compatible = "atmel,at91rm9200-gpio";  				reg = <0xfffff200 0x100>; -				interrupts = <2 4>; +				interrupts = <2 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -99,7 +100,7 @@  			pioB: gpio@fffff400 {  				compatible = "atmel,at91rm9200-gpio";  				reg = <0xfffff400 0x100>; -				interrupts = <3 4>; +				interrupts = <3 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -108,7 +109,7 @@  			pioC: gpio@fffff600 {  				compatible = "atmel,at91rm9200-gpio";  				reg = <0xfffff600 0x100>; -				interrupts = <4 4>; +				interrupts = <4 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -117,7 +118,7 @@  			pioD: gpio@fffff800 {  				compatible = "atmel,at91rm9200-gpio";  				reg = <0xfffff800 0x100>; -				interrupts = <4 4>; +				interrupts = <4 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -126,7 +127,7 @@  			pioE: gpio@fffffa00 {  				compatible = "atmel,at91rm9200-gpio";  				reg = <0xfffffa00 0x100>; -				interrupts = <4 4>; +				interrupts = <4 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -135,14 +136,14 @@  			dbgu: serial@ffffee00 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xffffee00 0x200>; -				interrupts = <1 4>; +				interrupts = <1 4 7>;  				status = "disabled";  			};  			usart0: serial@fff8c000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xfff8c000 0x200>; -				interrupts = <7 4>; +				interrupts = <7 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -151,7 +152,7 @@  			usart1: serial@fff90000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xfff90000 0x200>; -				interrupts = <8 4>; +				interrupts = <8 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -160,7 +161,7 @@  			usart2: serial@fff94000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xfff94000 0x200>; -				interrupts = <9 4>; +				interrupts = <9 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -169,14 +170,14 @@  			macb0: ethernet@fffbc000 {  				compatible = "cdns,at32ap7000-macb", "cdns,macb";  				reg = <0xfffbc000 0x100>; -				interrupts = <21 4>; +				interrupts = <21 4 3>;  				status = "disabled";  			};  			usb1: gadget@fff78000 {  				compatible = "atmel,at91rm9200-udc";  				reg = <0xfff78000 0x4000>; -				interrupts = <24 4>; +				interrupts = <24 4 2>;  				status = "disabled";  			};  		}; @@ -200,7 +201,7 @@  		usb0: ohci@00a00000 {  			compatible = "atmel,at91rm9200-ohci", "usb-ohci";  			reg = <0x00a00000 0x100000>; -			interrupts = <29 4>; +			interrupts = <29 4 2>;  			status = "disabled";  		};  	}; diff --git a/arch/arm/boot/dts/at91sam9g45.dtsi b/arch/arm/boot/dts/at91sam9g45.dtsi index 7dbccaf199f..bafa8806fc1 100644 --- a/arch/arm/boot/dts/at91sam9g45.dtsi +++ b/arch/arm/boot/dts/at91sam9g45.dtsi @@ -53,10 +53,11 @@  			ranges;  			aic: interrupt-controller@fffff000 { -				#interrupt-cells = <2>; +				#interrupt-cells = <3>;  				compatible = "atmel,at91rm9200-aic";  				interrupt-controller;  				reg = <0xfffff000 0x200>; +				atmel,external-irqs = <31>;  			};  			ramc0: ramc@ffffe400 { @@ -78,7 +79,7 @@  			pit: timer@fffffd30 {  				compatible = "atmel,at91sam9260-pit";  				reg = <0xfffffd30 0xf>; -				interrupts = <1 4>; +				interrupts = <1 4 7>;  			}; @@ -90,25 +91,25 @@  			tcb0: timer@fff7c000 {  				compatible = "atmel,at91rm9200-tcb";  				reg = <0xfff7c000 0x100>; -				interrupts = <18 4>; +				interrupts = <18 4 0>;  			};  			tcb1: timer@fffd4000 {  				compatible = "atmel,at91rm9200-tcb";  				reg = <0xfffd4000 0x100>; -				interrupts = <18 4>; +				interrupts = <18 4 0>;  			};  			dma: dma-controller@ffffec00 {  				compatible = "atmel,at91sam9g45-dma";  				reg = <0xffffec00 0x200>; -				interrupts = <21 4>; +				interrupts = <21 4 0>;  			};  			pioA: gpio@fffff200 {  				compatible = "atmel,at91rm9200-gpio";  				reg = <0xfffff200 0x100>; -				interrupts = <2 4>; +				interrupts = <2 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -117,7 +118,7 @@  			pioB: gpio@fffff400 {  				compatible = "atmel,at91rm9200-gpio";  				reg = <0xfffff400 0x100>; -				interrupts = <3 4>; +				interrupts = <3 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -126,7 +127,7 @@  			pioC: gpio@fffff600 {  				compatible = "atmel,at91rm9200-gpio";  				reg = <0xfffff600 0x100>; -				interrupts = <4 4>; +				interrupts = <4 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -135,7 +136,7 @@  			pioD: gpio@fffff800 {  				compatible = "atmel,at91rm9200-gpio";  				reg = <0xfffff800 0x100>; -				interrupts = <5 4>; +				interrupts = <5 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -144,7 +145,7 @@  			pioE: gpio@fffffa00 {  				compatible = "atmel,at91rm9200-gpio";  				reg = <0xfffffa00 0x100>; -				interrupts = <5 4>; +				interrupts = <5 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -153,14 +154,14 @@  			dbgu: serial@ffffee00 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xffffee00 0x200>; -				interrupts = <1 4>; +				interrupts = <1 4 7>;  				status = "disabled";  			};  			usart0: serial@fff8c000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xfff8c000 0x200>; -				interrupts = <7 4>; +				interrupts = <7 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -169,7 +170,7 @@  			usart1: serial@fff90000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xfff90000 0x200>; -				interrupts = <8 4>; +				interrupts = <8 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -178,7 +179,7 @@  			usart2: serial@fff94000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xfff94000 0x200>; -				interrupts = <9 4>; +				interrupts = <9 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -187,7 +188,7 @@  			usart3: serial@fff98000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xfff98000 0x200>; -				interrupts = <10 4>; +				interrupts = <10 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -196,14 +197,14 @@  			macb0: ethernet@fffbc000 {  				compatible = "cdns,at32ap7000-macb", "cdns,macb";  				reg = <0xfffbc000 0x100>; -				interrupts = <25 4>; +				interrupts = <25 4 3>;  				status = "disabled";  			};  			adc0: adc@fffb0000 {  				compatible = "atmel,at91sam9260-adc";  				reg = <0xfffb0000 0x100>; -				interrupts = <20 4>; +				interrupts = <20 4 0>;  				atmel,adc-use-external-triggers;  				atmel,adc-channels-used = <0xff>;  				atmel,adc-vref = <3300>; @@ -257,14 +258,14 @@  		usb0: ohci@00700000 {  			compatible = "atmel,at91rm9200-ohci", "usb-ohci";  			reg = <0x00700000 0x100000>; -			interrupts = <22 4>; +			interrupts = <22 4 2>;  			status = "disabled";  		};  		usb1: ehci@00800000 {  			compatible = "atmel,at91sam9g45-ehci", "usb-ehci";  			reg = <0x00800000 0x100000>; -			interrupts = <22 4>; +			interrupts = <22 4 2>;  			status = "disabled";  		};  	}; diff --git a/arch/arm/boot/dts/at91sam9n12.dtsi b/arch/arm/boot/dts/at91sam9n12.dtsi index cb84de791b5..bfac0dfc332 100644 --- a/arch/arm/boot/dts/at91sam9n12.dtsi +++ b/arch/arm/boot/dts/at91sam9n12.dtsi @@ -50,7 +50,7 @@  			ranges;  			aic: interrupt-controller@fffff000 { -				#interrupt-cells = <2>; +				#interrupt-cells = <3>;  				compatible = "atmel,at91rm9200-aic";  				interrupt-controller;  				reg = <0xfffff000 0x200>; @@ -74,7 +74,7 @@  			pit: timer@fffffe30 {  				compatible = "atmel,at91sam9260-pit";  				reg = <0xfffffe30 0xf>; -				interrupts = <1 4>; +				interrupts = <1 4 7>;  			};  			shdwc@fffffe10 { @@ -85,25 +85,25 @@  			tcb0: timer@f8008000 {  				compatible = "atmel,at91sam9x5-tcb";  				reg = <0xf8008000 0x100>; -				interrupts = <17 4>; +				interrupts = <17 4 0>;  			};  			tcb1: timer@f800c000 {  				compatible = "atmel,at91sam9x5-tcb";  				reg = <0xf800c000 0x100>; -				interrupts = <17 4>; +				interrupts = <17 4 0>;  			};  			dma: dma-controller@ffffec00 {  				compatible = "atmel,at91sam9g45-dma";  				reg = <0xffffec00 0x200>; -				interrupts = <20 4>; +				interrupts = <20 4 0>;  			};  			pioA: gpio@fffff400 {  				compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio";  				reg = <0xfffff400 0x100>; -				interrupts = <2 4>; +				interrupts = <2 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -112,7 +112,7 @@  			pioB: gpio@fffff600 {  				compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio";  				reg = <0xfffff600 0x100>; -				interrupts = <2 4>; +				interrupts = <2 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -121,7 +121,7 @@  			pioC: gpio@fffff800 {  				compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio";  				reg = <0xfffff800 0x100>; -				interrupts = <3 4>; +				interrupts = <3 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -130,7 +130,7 @@  			pioD: gpio@fffffa00 {  				compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio";  				reg = <0xfffffa00 0x100>; -				interrupts = <3 4>; +				interrupts = <3 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -139,14 +139,14 @@  			dbgu: serial@fffff200 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xfffff200 0x200>; -				interrupts = <1 4>; +				interrupts = <1 4 7>;  				status = "disabled";  			};  			usart0: serial@f801c000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xf801c000 0x4000>; -				interrupts = <5 4>; +				interrupts = <5 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -155,7 +155,7 @@  			usart1: serial@f8020000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xf8020000 0x4000>; -				interrupts = <6 4>; +				interrupts = <6 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -164,7 +164,7 @@  			usart2: serial@f8024000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xf8024000 0x4000>; -				interrupts = <7 4>; +				interrupts = <7 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -173,7 +173,7 @@  			usart3: serial@f8028000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xf8028000 0x4000>; -				interrupts = <8 4>; +				interrupts = <8 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -201,7 +201,7 @@  		usb0: ohci@00500000 {  			compatible = "atmel,at91rm9200-ohci", "usb-ohci";  			reg = <0x00500000 0x00100000>; -			interrupts = <22 4>; +			interrupts = <22 4 2>;  			status = "disabled";  		};  	}; diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi index 6b3ef4339ae..4a18c393b13 100644 --- a/arch/arm/boot/dts/at91sam9x5.dtsi +++ b/arch/arm/boot/dts/at91sam9x5.dtsi @@ -51,10 +51,11 @@  			ranges;  			aic: interrupt-controller@fffff000 { -				#interrupt-cells = <2>; +				#interrupt-cells = <3>;  				compatible = "atmel,at91rm9200-aic";  				interrupt-controller;  				reg = <0xfffff000 0x200>; +				atmel,external-irqs = <31>;  			};  			ramc0: ramc@ffffe800 { @@ -80,37 +81,37 @@  			pit: timer@fffffe30 {  				compatible = "atmel,at91sam9260-pit";  				reg = <0xfffffe30 0xf>; -				interrupts = <1 4>; +				interrupts = <1 4 7>;  			};  			tcb0: timer@f8008000 {  				compatible = "atmel,at91sam9x5-tcb";  				reg = <0xf8008000 0x100>; -				interrupts = <17 4>; +				interrupts = <17 4 0>;  			};  			tcb1: timer@f800c000 {  				compatible = "atmel,at91sam9x5-tcb";  				reg = <0xf800c000 0x100>; -				interrupts = <17 4>; +				interrupts = <17 4 0>;  			};  			dma0: dma-controller@ffffec00 {  				compatible = "atmel,at91sam9g45-dma";  				reg = <0xffffec00 0x200>; -				interrupts = <20 4>; +				interrupts = <20 4 0>;  			};  			dma1: dma-controller@ffffee00 {  				compatible = "atmel,at91sam9g45-dma";  				reg = <0xffffee00 0x200>; -				interrupts = <21 4>; +				interrupts = <21 4 0>;  			};  			pioA: gpio@fffff400 {  				compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio";  				reg = <0xfffff400 0x100>; -				interrupts = <2 4>; +				interrupts = <2 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -119,7 +120,7 @@  			pioB: gpio@fffff600 {  				compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio";  				reg = <0xfffff600 0x100>; -				interrupts = <2 4>; +				interrupts = <2 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -128,7 +129,7 @@  			pioC: gpio@fffff800 {  				compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio";  				reg = <0xfffff800 0x100>; -				interrupts = <3 4>; +				interrupts = <3 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -137,7 +138,7 @@  			pioD: gpio@fffffa00 {  				compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio";  				reg = <0xfffffa00 0x100>; -				interrupts = <3 4>; +				interrupts = <3 4 1>;  				#gpio-cells = <2>;  				gpio-controller;  				interrupt-controller; @@ -146,14 +147,14 @@  			dbgu: serial@fffff200 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xfffff200 0x200>; -				interrupts = <1 4>; +				interrupts = <1 4 7>;  				status = "disabled";  			};  			usart0: serial@f801c000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xf801c000 0x200>; -				interrupts = <5 4>; +				interrupts = <5 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -162,7 +163,7 @@  			usart1: serial@f8020000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xf8020000 0x200>; -				interrupts = <6 4>; +				interrupts = <6 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -171,7 +172,7 @@  			usart2: serial@f8024000 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xf8024000 0x200>; -				interrupts = <7 4>; +				interrupts = <7 4 5>;  				atmel,use-dma-rx;  				atmel,use-dma-tx;  				status = "disabled"; @@ -180,21 +181,21 @@  			macb0: ethernet@f802c000 {  				compatible = "cdns,at32ap7000-macb", "cdns,macb";  				reg = <0xf802c000 0x100>; -				interrupts = <24 4>; +				interrupts = <24 4 3>;  				status = "disabled";  			};  			macb1: ethernet@f8030000 {  				compatible = "cdns,at32ap7000-macb", "cdns,macb";  				reg = <0xf8030000 0x100>; -				interrupts = <27 4>; +				interrupts = <27 4 3>;  				status = "disabled";  			};  			adc0: adc@f804c000 {  				compatible = "atmel,at91sam9260-adc";  				reg = <0xf804c000 0x100>; -				interrupts = <19 4>; +				interrupts = <19 4 0>;  				atmel,adc-use-external;  				atmel,adc-channels-used = <0xffff>;  				atmel,adc-vref = <3300>; @@ -248,14 +249,14 @@  		usb0: ohci@00600000 {  			compatible = "atmel,at91rm9200-ohci", "usb-ohci";  			reg = <0x00600000 0x100000>; -			interrupts = <22 4>; +			interrupts = <22 4 2>;  			status = "disabled";  		};  		usb1: ehci@00700000 {  			compatible = "atmel,at91sam9g45-ehci", "usb-ehci";  			reg = <0x00700000 0x100000>; -			interrupts = <22 4>; +			interrupts = <22 4 2>;  			status = "disabled";  		};  	}; diff --git a/arch/arm/boot/dts/tegra-harmony.dts b/arch/arm/boot/dts/tegra20-harmony.dts index 7de701365fc..f146dbf6f7f 100644 --- a/arch/arm/boot/dts/tegra-harmony.dts +++ b/arch/arm/boot/dts/tegra20-harmony.dts @@ -307,7 +307,6 @@  		cd-gpios = <&gpio 58 0>; /* gpio PH2 */  		wp-gpios = <&gpio 59 0>; /* gpio PH3 */  		power-gpios = <&gpio 70 0>; /* gpio PI6 */ -		support-8bit;  		bus-width = <8>;  	}; diff --git a/arch/arm/boot/dts/tegra-paz00.dts b/arch/arm/boot/dts/tegra20-paz00.dts index bfeb117d5ae..684a9e1ff7e 100644 --- a/arch/arm/boot/dts/tegra-paz00.dts +++ b/arch/arm/boot/dts/tegra20-paz00.dts @@ -301,7 +301,6 @@  	sdhci@c8000600 {  		status = "okay"; -		support-8bit;  		bus-width = <8>;  	}; diff --git a/arch/arm/boot/dts/tegra-seaboard.dts b/arch/arm/boot/dts/tegra20-seaboard.dts index 89cb7f2acd9..b797901d040 100644 --- a/arch/arm/boot/dts/tegra-seaboard.dts +++ b/arch/arm/boot/dts/tegra20-seaboard.dts @@ -334,7 +334,7 @@  		};  	}; -	emc { +	memory-controller@0x7000f400 {  		emc-table@190000 {  			reg = <190000>;  			compatible = "nvidia,tegra20-emc-table"; @@ -397,7 +397,6 @@  	sdhci@c8000600 {  		status = "okay"; -		support-8bit;  		bus-width = <8>;  	}; diff --git a/arch/arm/boot/dts/tegra-trimslice.dts b/arch/arm/boot/dts/tegra20-trimslice.dts index 9de5636023f..9de5636023f 100644 --- a/arch/arm/boot/dts/tegra-trimslice.dts +++ b/arch/arm/boot/dts/tegra20-trimslice.dts diff --git a/arch/arm/boot/dts/tegra-ventana.dts b/arch/arm/boot/dts/tegra20-ventana.dts index 445343b0fbd..be90544e6b5 100644 --- a/arch/arm/boot/dts/tegra-ventana.dts +++ b/arch/arm/boot/dts/tegra20-ventana.dts @@ -314,7 +314,6 @@  	sdhci@c8000600 {  		status = "okay"; -		support-8bit;  		bus-width = <8>;  	}; diff --git a/arch/arm/boot/dts/tegra20.dtsi b/arch/arm/boot/dts/tegra20.dtsi index c417d67e902..9f1921634eb 100644 --- a/arch/arm/boot/dts/tegra20.dtsi +++ b/arch/arm/boot/dts/tegra20.dtsi @@ -72,7 +72,7 @@  		reg = <0x70002800 0x200>;  		interrupts = <0 13 0x04>;  		nvidia,dma-request-selector = <&apbdma 2>; -		status = "disable"; +		status = "disabled";  	};  	tegra_i2s2: i2s@70002a00 { @@ -80,7 +80,7 @@  		reg = <0x70002a00 0x200>;  		interrupts = <0 3 0x04>;  		nvidia,dma-request-selector = <&apbdma 1>; -		status = "disable"; +		status = "disabled";  	};  	serial@70006000 { @@ -88,7 +88,7 @@  		reg = <0x70006000 0x40>;  		reg-shift = <2>;  		interrupts = <0 36 0x04>; -		status = "disable"; +		status = "disabled";  	};  	serial@70006040 { @@ -96,7 +96,7 @@  		reg = <0x70006040 0x40>;  		reg-shift = <2>;  		interrupts = <0 37 0x04>; -		status = "disable"; +		status = "disabled";  	};  	serial@70006200 { @@ -104,7 +104,7 @@  		reg = <0x70006200 0x100>;  		reg-shift = <2>;  		interrupts = <0 46 0x04>; -		status = "disable"; +		status = "disabled";  	};  	serial@70006300 { @@ -112,7 +112,7 @@  		reg = <0x70006300 0x100>;  		reg-shift = <2>;  		interrupts = <0 90 0x04>; -		status = "disable"; +		status = "disabled";  	};  	serial@70006400 { @@ -120,7 +120,7 @@  		reg = <0x70006400 0x100>;  		reg-shift = <2>;  		interrupts = <0 91 0x04>; -		status = "disable"; +		status = "disabled";  	};  	i2c@7000c000 { @@ -129,7 +129,7 @@  		interrupts = <0 38 0x04>;  		#address-cells = <1>;  		#size-cells = <0>; -		status = "disable"; +		status = "disabled";  	};  	i2c@7000c400 { @@ -138,7 +138,7 @@  		interrupts = <0 84 0x04>;  		#address-cells = <1>;  		#size-cells = <0>; -		status = "disable"; +		status = "disabled";  	};  	i2c@7000c500 { @@ -147,7 +147,7 @@  		interrupts = <0 92 0x04>;  		#address-cells = <1>;  		#size-cells = <0>; -		status = "disable"; +		status = "disabled";  	};  	i2c@7000d000 { @@ -156,7 +156,7 @@  		interrupts = <0 53 0x04>;  		#address-cells = <1>;  		#size-cells = <0>; -		status = "disable"; +		status = "disabled";  	};  	pmc { @@ -164,7 +164,7 @@  		reg = <0x7000e400 0x400>;  	}; -	mc { +	memory-controller@0x7000f000 {  		compatible = "nvidia,tegra20-mc";  		reg = <0x7000f000 0x024  		       0x7000f03c 0x3c4>; @@ -177,7 +177,7 @@  		       0x58000000 0x02000000>;	/* GART aperture */  	}; -	emc { +	memory-controller@0x7000f400 {  		compatible = "nvidia,tegra20-emc";  		reg = <0x7000f400 0x200>;  		#address-cells = <1>; @@ -190,7 +190,7 @@  		interrupts = <0 20 0x04>;  		phy_type = "utmi";  		nvidia,has-legacy-mode; -		status = "disable"; +		status = "disabled";  	};  	usb@c5004000 { @@ -198,7 +198,7 @@  		reg = <0xc5004000 0x4000>;  		interrupts = <0 21 0x04>;  		phy_type = "ulpi"; -		status = "disable"; +		status = "disabled";  	};  	usb@c5008000 { @@ -206,35 +206,35 @@  		reg = <0xc5008000 0x4000>;  		interrupts = <0 97 0x04>;  		phy_type = "utmi"; -		status = "disable"; +		status = "disabled";  	};  	sdhci@c8000000 {  		compatible = "nvidia,tegra20-sdhci";  		reg = <0xc8000000 0x200>;  		interrupts = <0 14 0x04>; -		status = "disable"; +		status = "disabled";  	};  	sdhci@c8000200 {  		compatible = "nvidia,tegra20-sdhci";  		reg = <0xc8000200 0x200>;  		interrupts = <0 15 0x04>; -		status = "disable"; +		status = "disabled";  	};  	sdhci@c8000400 {  		compatible = "nvidia,tegra20-sdhci";  		reg = <0xc8000400 0x200>;  		interrupts = <0 19 0x04>; -		status = "disable"; +		status = "disabled";  	};  	sdhci@c8000600 {  		compatible = "nvidia,tegra20-sdhci";  		reg = <0xc8000600 0x200>;  		interrupts = <0 31 0x04>; -		status = "disable"; +		status = "disabled";  	};  	pmu { diff --git a/arch/arm/boot/dts/tegra-cardhu.dts b/arch/arm/boot/dts/tegra30-cardhu.dts index 36321bceec4..c169bced131 100644 --- a/arch/arm/boot/dts/tegra-cardhu.dts +++ b/arch/arm/boot/dts/tegra30-cardhu.dts @@ -144,7 +144,6 @@  	sdhci@78000600 {  		status = "okay"; -		support-8bit;  		bus-width = <8>;  	}; diff --git a/arch/arm/boot/dts/tegra30.dtsi b/arch/arm/boot/dts/tegra30.dtsi index 2dcc09e784b..da740191771 100644 --- a/arch/arm/boot/dts/tegra30.dtsi +++ b/arch/arm/boot/dts/tegra30.dtsi @@ -82,7 +82,7 @@  		reg = <0x70006000 0x40>;  		reg-shift = <2>;  		interrupts = <0 36 0x04>; -		status = "disable"; +		status = "disabled";  	};  	serial@70006040 { @@ -90,7 +90,7 @@  		reg = <0x70006040 0x40>;  		reg-shift = <2>;  		interrupts = <0 37 0x04>; -		status = "disable"; +		status = "disabled";  	};  	serial@70006200 { @@ -98,7 +98,7 @@  		reg = <0x70006200 0x100>;  		reg-shift = <2>;  		interrupts = <0 46 0x04>; -		status = "disable"; +		status = "disabled";  	};  	serial@70006300 { @@ -106,7 +106,7 @@  		reg = <0x70006300 0x100>;  		reg-shift = <2>;  		interrupts = <0 90 0x04>; -		status = "disable"; +		status = "disabled";  	};  	serial@70006400 { @@ -114,7 +114,7 @@  		reg = <0x70006400 0x100>;  		reg-shift = <2>;  		interrupts = <0 91 0x04>; -		status = "disable"; +		status = "disabled";  	};  	i2c@7000c000 { @@ -123,7 +123,7 @@  		interrupts = <0 38 0x04>;  		#address-cells = <1>;  		#size-cells = <0>; -		status = "disable"; +		status = "disabled";  	};  	i2c@7000c400 { @@ -132,7 +132,7 @@  		interrupts = <0 84 0x04>;  		#address-cells = <1>;  		#size-cells = <0>; -		status = "disable"; +		status = "disabled";  	};  	i2c@7000c500 { @@ -141,7 +141,7 @@  		interrupts = <0 92 0x04>;  		#address-cells = <1>;  		#size-cells = <0>; -		status = "disable"; +		status = "disabled";  	};  	i2c@7000c700 { @@ -150,7 +150,7 @@  		interrupts = <0 120 0x04>;  		#address-cells = <1>;  		#size-cells = <0>; -		status = "disable"; +		status = "disabled";  	};  	i2c@7000d000 { @@ -159,7 +159,7 @@  		interrupts = <0 53 0x04>;  		#address-cells = <1>;  		#size-cells = <0>; -		status = "disable"; +		status = "disabled";  	};  	pmc { @@ -167,7 +167,7 @@  		reg = <0x7000e400 0x400>;  	}; -	mc { +	memory-controller {  		compatible = "nvidia,tegra30-mc";  		reg = <0x7000f000 0x010  		       0x7000f03c 0x1b4 @@ -201,35 +201,35 @@  			compatible = "nvidia,tegra30-i2s";  			reg = <0x70080300 0x100>;  			nvidia,ahub-cif-ids = <4 4>; -			status = "disable"; +			status = "disabled";  		};  		tegra_i2s1: i2s@70080400 {  			compatible = "nvidia,tegra30-i2s";  			reg = <0x70080400 0x100>;  			nvidia,ahub-cif-ids = <5 5>; -			status = "disable"; +			status = "disabled";  		};  		tegra_i2s2: i2s@70080500 {  			compatible = "nvidia,tegra30-i2s";  			reg = <0x70080500 0x100>;  			nvidia,ahub-cif-ids = <6 6>; -			status = "disable"; +			status = "disabled";  		};  		tegra_i2s3: i2s@70080600 {  			compatible = "nvidia,tegra30-i2s";  			reg = <0x70080600 0x100>;  			nvidia,ahub-cif-ids = <7 7>; -			status = "disable"; +			status = "disabled";  		};  		tegra_i2s4: i2s@70080700 {  			compatible = "nvidia,tegra30-i2s";  			reg = <0x70080700 0x100>;  			nvidia,ahub-cif-ids = <8 8>; -			status = "disable"; +			status = "disabled";  		};  	}; @@ -237,28 +237,28 @@  		compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci";  		reg = <0x78000000 0x200>;  		interrupts = <0 14 0x04>; -		status = "disable"; +		status = "disabled";  	};  	sdhci@78000200 {  		compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci";  		reg = <0x78000200 0x200>;  		interrupts = <0 15 0x04>; -		status = "disable"; +		status = "disabled";  	};  	sdhci@78000400 {  		compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci";  		reg = <0x78000400 0x200>;  		interrupts = <0 19 0x04>; -		status = "disable"; +		status = "disabled";  	};  	sdhci@78000600 {  		compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci";  		reg = <0x78000600 0x200>;  		interrupts = <0 31 0x04>; -		status = "disable"; +		status = "disabled";  	};  	pmu { diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c index 8349d4e97e2..16cedb42c0c 100644 --- a/arch/arm/kernel/irq.c +++ b/arch/arm/kernel/irq.c @@ -40,13 +40,6 @@  #include <asm/mach/irq.h>  #include <asm/mach/time.h> -/* - * No architecture-specific irq_finish function defined in arm/arch/irqs.h. - */ -#ifndef irq_finish -#define irq_finish(irq) do { } while (0) -#endif -  unsigned long irq_err_count;  int arch_show_interrupts(struct seq_file *p, int prec) @@ -85,9 +78,6 @@ void handle_IRQ(unsigned int irq, struct pt_regs *regs)  		generic_handle_irq(irq);  	} -	/* AT91 specific workaround */ -	irq_finish(irq); -  	irq_exit();  	set_irq_regs(old_regs);  } diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig index 19505c0a3f0..c8050b14e61 100644 --- a/arch/arm/mach-at91/Kconfig +++ b/arch/arm/mach-at91/Kconfig @@ -29,12 +29,16 @@ comment "Atmel AT91 Processor"  config SOC_AT91SAM9  	bool  	select CPU_ARM926T +	select MULTI_IRQ_HANDLER +	select SPARSE_IRQ  	select AT91_SAM9_TIME  	select AT91_SAM9_SMC  config SOC_AT91RM9200  	bool "AT91RM9200"  	select CPU_ARM920T +	select MULTI_IRQ_HANDLER +	select SPARSE_IRQ  	select GENERIC_CLOCKEVENTS  	select HAVE_AT91_DBGU0 @@ -140,6 +144,8 @@ config ARCH_AT91SAM9G45  config ARCH_AT91X40  	bool "AT91x40"  	depends on !MMU +	select MULTI_IRQ_HANDLER +	select SPARSE_IRQ  	select ARCH_USES_GETTIMEOFFSET  endchoice diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c index 26917687fc3..6f50c672227 100644 --- a/arch/arm/mach-at91/at91rm9200.c +++ b/arch/arm/mach-at91/at91rm9200.c @@ -17,6 +17,7 @@  #include <asm/mach/map.h>  #include <asm/system_misc.h>  #include <mach/at91rm9200.h> +#include <mach/at91_aic.h>  #include <mach/at91_pmc.h>  #include <mach/at91_st.h>  #include <mach/cpu.h> diff --git a/arch/arm/mach-at91/at91rm9200_devices.c b/arch/arm/mach-at91/at91rm9200_devices.c index e6b7d0533dd..01fb7325fec 100644 --- a/arch/arm/mach-at91/at91rm9200_devices.c +++ b/arch/arm/mach-at91/at91rm9200_devices.c @@ -41,8 +41,8 @@ static struct resource usbh_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91RM9200_ID_UHP, -		.end	= AT91RM9200_ID_UHP, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_UHP, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_UHP,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -94,8 +94,8 @@ static struct resource udc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91RM9200_ID_UDP, -		.end	= AT91RM9200_ID_UDP, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_UDP, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_UDP,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -145,8 +145,8 @@ static struct resource eth_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91RM9200_ID_EMAC, -		.end	= AT91RM9200_ID_EMAC, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_EMAC, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_EMAC,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -305,8 +305,8 @@ static struct resource mmc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91RM9200_ID_MCI, -		.end	= AT91RM9200_ID_MCI, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_MCI, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_MCI,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -488,8 +488,8 @@ static struct resource twi_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91RM9200_ID_TWI, -		.end	= AT91RM9200_ID_TWI, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_TWI, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_TWI,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -532,8 +532,8 @@ static struct resource spi_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91RM9200_ID_SPI, -		.end	= AT91RM9200_ID_SPI, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_SPI, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_SPI,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -598,18 +598,18 @@ static struct resource tcb0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91RM9200_ID_TC0, -		.end	= AT91RM9200_ID_TC0, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_TC0, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_TC0,  		.flags	= IORESOURCE_IRQ,  	},  	[2] = { -		.start	= AT91RM9200_ID_TC1, -		.end	= AT91RM9200_ID_TC1, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_TC1, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_TC1,  		.flags	= IORESOURCE_IRQ,  	},  	[3] = { -		.start	= AT91RM9200_ID_TC2, -		.end	= AT91RM9200_ID_TC2, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_TC2, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_TC2,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -628,18 +628,18 @@ static struct resource tcb1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91RM9200_ID_TC3, -		.end	= AT91RM9200_ID_TC3, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_TC3, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_TC3,  		.flags	= IORESOURCE_IRQ,  	},  	[2] = { -		.start	= AT91RM9200_ID_TC4, -		.end	= AT91RM9200_ID_TC4, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_TC4, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_TC4,  		.flags	= IORESOURCE_IRQ,  	},  	[3] = { -		.start	= AT91RM9200_ID_TC5, -		.end	= AT91RM9200_ID_TC5, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_TC5, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_TC5,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -673,8 +673,8 @@ static struct resource rtc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91_ID_SYS, -		.end	= AT91_ID_SYS, +		.start	= NR_IRQS_LEGACY + AT91_ID_SYS, +		.end	= NR_IRQS_LEGACY + AT91_ID_SYS,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -729,8 +729,8 @@ static struct resource ssc0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91RM9200_ID_SSC0, -		.end	= AT91RM9200_ID_SSC0, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_SSC0, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_SSC0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -771,8 +771,8 @@ static struct resource ssc1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91RM9200_ID_SSC1, -		.end	= AT91RM9200_ID_SSC1, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_SSC1, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_SSC1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -813,8 +813,8 @@ static struct resource ssc2_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91RM9200_ID_SSC2, -		.end	= AT91RM9200_ID_SSC2, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_SSC2, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_SSC2,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -897,8 +897,8 @@ static struct resource dbgu_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91_ID_SYS, -		.end	= AT91_ID_SYS, +		.start	= NR_IRQS_LEGACY + AT91_ID_SYS, +		.end	= NR_IRQS_LEGACY + AT91_ID_SYS,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -935,8 +935,8 @@ static struct resource uart0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91RM9200_ID_US0, -		.end	= AT91RM9200_ID_US0, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_US0, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_US0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -984,8 +984,8 @@ static struct resource uart1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91RM9200_ID_US1, -		.end	= AT91RM9200_ID_US1, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_US1, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_US1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1035,8 +1035,8 @@ static struct resource uart2_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91RM9200_ID_US2, -		.end	= AT91RM9200_ID_US2, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_US2, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_US2,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1078,8 +1078,8 @@ static struct resource uart3_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91RM9200_ID_US3, -		.end	= AT91RM9200_ID_US3, +		.start	= NR_IRQS_LEGACY + AT91RM9200_ID_US3, +		.end	= NR_IRQS_LEGACY + AT91RM9200_ID_US3,  		.flags	= IORESOURCE_IRQ,  	},  }; diff --git a/arch/arm/mach-at91/at91sam9260.c b/arch/arm/mach-at91/at91sam9260.c index 2b1e438ed87..30c7f26a466 100644 --- a/arch/arm/mach-at91/at91sam9260.c +++ b/arch/arm/mach-at91/at91sam9260.c @@ -20,6 +20,7 @@  #include <mach/cpu.h>  #include <mach/at91_dbgu.h>  #include <mach/at91sam9260.h> +#include <mach/at91_aic.h>  #include <mach/at91_pmc.h>  #include <mach/at91_rstc.h> diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c index 0ded951f785..7b9c2ba396e 100644 --- a/arch/arm/mach-at91/at91sam9260_devices.c +++ b/arch/arm/mach-at91/at91sam9260_devices.c @@ -45,8 +45,8 @@ static struct resource usbh_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_UHP, -		.end	= AT91SAM9260_ID_UHP, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_UHP, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_UHP,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -98,8 +98,8 @@ static struct resource udc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_UDP, -		.end	= AT91SAM9260_ID_UDP, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_UDP, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_UDP,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -149,8 +149,8 @@ static struct resource eth_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_EMAC, -		.end	= AT91SAM9260_ID_EMAC, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_EMAC, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_EMAC,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -223,8 +223,8 @@ static struct resource mmc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_MCI, -		.end	= AT91SAM9260_ID_MCI, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_MCI, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_MCI,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -305,8 +305,8 @@ static struct resource mmc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_MCI, -		.end	= AT91SAM9260_ID_MCI, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_MCI, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_MCI,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -496,8 +496,8 @@ static struct resource twi_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_TWI, -		.end	= AT91SAM9260_ID_TWI, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_TWI, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_TWI,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -540,8 +540,8 @@ static struct resource spi0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_SPI0, -		.end	= AT91SAM9260_ID_SPI0, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_SPI0, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_SPI0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -566,8 +566,8 @@ static struct resource spi1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_SPI1, -		.end	= AT91SAM9260_ID_SPI1, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_SPI1, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_SPI1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -652,18 +652,18 @@ static struct resource tcb0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_TC0, -		.end	= AT91SAM9260_ID_TC0, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_TC0, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_TC0,  		.flags	= IORESOURCE_IRQ,  	},  	[2] = { -		.start	= AT91SAM9260_ID_TC1, -		.end	= AT91SAM9260_ID_TC1, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_TC1, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_TC1,  		.flags	= IORESOURCE_IRQ,  	},  	[3] = { -		.start	= AT91SAM9260_ID_TC2, -		.end	= AT91SAM9260_ID_TC2, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_TC2, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_TC2,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -682,18 +682,18 @@ static struct resource tcb1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_TC3, -		.end	= AT91SAM9260_ID_TC3, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_TC3, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_TC3,  		.flags	= IORESOURCE_IRQ,  	},  	[2] = { -		.start	= AT91SAM9260_ID_TC4, -		.end	= AT91SAM9260_ID_TC4, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_TC4, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_TC4,  		.flags	= IORESOURCE_IRQ,  	},  	[3] = { -		.start	= AT91SAM9260_ID_TC5, -		.end	= AT91SAM9260_ID_TC5, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_TC5, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_TC5,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -807,8 +807,8 @@ static struct resource ssc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_SSC, -		.end	= AT91SAM9260_ID_SSC, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_SSC, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_SSC,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -882,8 +882,8 @@ static struct resource dbgu_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91_ID_SYS, -		.end	= AT91_ID_SYS, +		.start	= NR_IRQS_LEGACY + AT91_ID_SYS, +		.end	= NR_IRQS_LEGACY + AT91_ID_SYS,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -920,8 +920,8 @@ static struct resource uart0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_US0, -		.end	= AT91SAM9260_ID_US0, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_US0, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_US0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -971,8 +971,8 @@ static struct resource uart1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_US1, -		.end	= AT91SAM9260_ID_US1, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_US1, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_US1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1014,8 +1014,8 @@ static struct resource uart2_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_US2, -		.end	= AT91SAM9260_ID_US2, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_US2, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_US2,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1057,8 +1057,8 @@ static struct resource uart3_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_US3, -		.end	= AT91SAM9260_ID_US3, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_US3, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_US3,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1100,8 +1100,8 @@ static struct resource uart4_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_US4, -		.end	= AT91SAM9260_ID_US4, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_US4, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_US4,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1138,8 +1138,8 @@ static struct resource uart5_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_US5, -		.end	= AT91SAM9260_ID_US5, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_US5, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_US5,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1357,8 +1357,8 @@ static struct resource adc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9260_ID_ADC, -		.end	= AT91SAM9260_ID_ADC, +		.start	= NR_IRQS_LEGACY + AT91SAM9260_ID_ADC, +		.end	= NR_IRQS_LEGACY + AT91SAM9260_ID_ADC,  		.flags	= IORESOURCE_IRQ,  	},  }; diff --git a/arch/arm/mach-at91/at91sam9261.c b/arch/arm/mach-at91/at91sam9261.c index c77d503d09d..f40762c5fed 100644 --- a/arch/arm/mach-at91/at91sam9261.c +++ b/arch/arm/mach-at91/at91sam9261.c @@ -19,6 +19,7 @@  #include <asm/system_misc.h>  #include <mach/cpu.h>  #include <mach/at91sam9261.h> +#include <mach/at91_aic.h>  #include <mach/at91_pmc.h>  #include <mach/at91_rstc.h> diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c index 9295e90b08f..8df5c1bdff9 100644 --- a/arch/arm/mach-at91/at91sam9261_devices.c +++ b/arch/arm/mach-at91/at91sam9261_devices.c @@ -45,8 +45,8 @@ static struct resource usbh_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9261_ID_UHP, -		.end	= AT91SAM9261_ID_UHP, +		.start	= NR_IRQS_LEGACY + AT91SAM9261_ID_UHP, +		.end	= NR_IRQS_LEGACY + AT91SAM9261_ID_UHP,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -98,8 +98,8 @@ static struct resource udc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9261_ID_UDP, -		.end	= AT91SAM9261_ID_UDP, +		.start	= NR_IRQS_LEGACY + AT91SAM9261_ID_UDP, +		.end	= NR_IRQS_LEGACY + AT91SAM9261_ID_UDP,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -148,8 +148,8 @@ static struct resource mmc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9261_ID_MCI, -		.end	= AT91SAM9261_ID_MCI, +		.start	= NR_IRQS_LEGACY + AT91SAM9261_ID_MCI, +		.end	= NR_IRQS_LEGACY + AT91SAM9261_ID_MCI,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -310,8 +310,8 @@ static struct resource twi_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9261_ID_TWI, -		.end	= AT91SAM9261_ID_TWI, +		.start	= NR_IRQS_LEGACY + AT91SAM9261_ID_TWI, +		.end	= NR_IRQS_LEGACY + AT91SAM9261_ID_TWI,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -354,8 +354,8 @@ static struct resource spi0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9261_ID_SPI0, -		.end	= AT91SAM9261_ID_SPI0, +		.start	= NR_IRQS_LEGACY + AT91SAM9261_ID_SPI0, +		.end	= NR_IRQS_LEGACY + AT91SAM9261_ID_SPI0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -380,8 +380,8 @@ static struct resource spi1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9261_ID_SPI1, -		.end	= AT91SAM9261_ID_SPI1, +		.start	= NR_IRQS_LEGACY + AT91SAM9261_ID_SPI1, +		.end	= NR_IRQS_LEGACY + AT91SAM9261_ID_SPI1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -468,8 +468,8 @@ static struct resource lcdc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9261_ID_LCDC, -		.end	= AT91SAM9261_ID_LCDC, +		.start	= NR_IRQS_LEGACY + AT91SAM9261_ID_LCDC, +		.end	= NR_IRQS_LEGACY + AT91SAM9261_ID_LCDC,  		.flags	= IORESOURCE_IRQ,  	},  #if defined(CONFIG_FB_INTSRAM) @@ -566,18 +566,18 @@ static struct resource tcb_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9261_ID_TC0, -		.end	= AT91SAM9261_ID_TC0, +		.start	= NR_IRQS_LEGACY + AT91SAM9261_ID_TC0, +		.end	= NR_IRQS_LEGACY + AT91SAM9261_ID_TC0,  		.flags	= IORESOURCE_IRQ,  	},  	[2] = { -		.start	= AT91SAM9261_ID_TC1, -		.end	= AT91SAM9261_ID_TC1, +		.start	= NR_IRQS_LEGACY + AT91SAM9261_ID_TC1, +		.end	= NR_IRQS_LEGACY + AT91SAM9261_ID_TC1,  		.flags	= IORESOURCE_IRQ,  	},  	[3] = { -		.start	= AT91SAM9261_ID_TC2, -		.end	= AT91SAM9261_ID_TC2, +		.start	= NR_IRQS_LEGACY + AT91SAM9261_ID_TC2, +		.end	= NR_IRQS_LEGACY + AT91SAM9261_ID_TC2,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -689,8 +689,8 @@ static struct resource ssc0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9261_ID_SSC0, -		.end	= AT91SAM9261_ID_SSC0, +		.start	= NR_IRQS_LEGACY + AT91SAM9261_ID_SSC0, +		.end	= NR_IRQS_LEGACY + AT91SAM9261_ID_SSC0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -731,8 +731,8 @@ static struct resource ssc1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9261_ID_SSC1, -		.end	= AT91SAM9261_ID_SSC1, +		.start	= NR_IRQS_LEGACY + AT91SAM9261_ID_SSC1, +		.end	= NR_IRQS_LEGACY + AT91SAM9261_ID_SSC1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -773,8 +773,8 @@ static struct resource ssc2_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9261_ID_SSC2, -		.end	= AT91SAM9261_ID_SSC2, +		.start	= NR_IRQS_LEGACY + AT91SAM9261_ID_SSC2, +		.end	= NR_IRQS_LEGACY + AT91SAM9261_ID_SSC2,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -857,8 +857,8 @@ static struct resource dbgu_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91_ID_SYS, -		.end	= AT91_ID_SYS, +		.start	= NR_IRQS_LEGACY + AT91_ID_SYS, +		.end	= NR_IRQS_LEGACY + AT91_ID_SYS,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -895,8 +895,8 @@ static struct resource uart0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9261_ID_US0, -		.end	= AT91SAM9261_ID_US0, +		.start	= NR_IRQS_LEGACY + AT91SAM9261_ID_US0, +		.end	= NR_IRQS_LEGACY + AT91SAM9261_ID_US0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -938,8 +938,8 @@ static struct resource uart1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9261_ID_US1, -		.end	= AT91SAM9261_ID_US1, +		.start	= NR_IRQS_LEGACY + AT91SAM9261_ID_US1, +		.end	= NR_IRQS_LEGACY + AT91SAM9261_ID_US1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -981,8 +981,8 @@ static struct resource uart2_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9261_ID_US2, -		.end	= AT91SAM9261_ID_US2, +		.start	= NR_IRQS_LEGACY + AT91SAM9261_ID_US2, +		.end	= NR_IRQS_LEGACY + AT91SAM9261_ID_US2,  		.flags	= IORESOURCE_IRQ,  	},  }; diff --git a/arch/arm/mach-at91/at91sam9263.c b/arch/arm/mach-at91/at91sam9263.c index ed91c7e9f7c..84b38105231 100644 --- a/arch/arm/mach-at91/at91sam9263.c +++ b/arch/arm/mach-at91/at91sam9263.c @@ -18,6 +18,7 @@  #include <asm/mach/map.h>  #include <asm/system_misc.h>  #include <mach/at91sam9263.h> +#include <mach/at91_aic.h>  #include <mach/at91_pmc.h>  #include <mach/at91_rstc.h> diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c index 175e0009eaa..eb6bbf86fb9 100644 --- a/arch/arm/mach-at91/at91sam9263_devices.c +++ b/arch/arm/mach-at91/at91sam9263_devices.c @@ -44,8 +44,8 @@ static struct resource usbh_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_UHP, -		.end	= AT91SAM9263_ID_UHP, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_UHP, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_UHP,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -104,8 +104,8 @@ static struct resource udc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_UDP, -		.end	= AT91SAM9263_ID_UDP, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_UDP, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_UDP,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -155,8 +155,8 @@ static struct resource eth_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_EMAC, -		.end	= AT91SAM9263_ID_EMAC, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_EMAC, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_EMAC,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -229,8 +229,8 @@ static struct resource mmc0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_MCI0, -		.end	= AT91SAM9263_ID_MCI0, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_MCI0, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_MCI0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -254,8 +254,8 @@ static struct resource mmc1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_MCI1, -		.end	= AT91SAM9263_ID_MCI1, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_MCI1, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_MCI1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -567,8 +567,8 @@ static struct resource twi_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_TWI, -		.end	= AT91SAM9263_ID_TWI, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_TWI, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_TWI,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -611,8 +611,8 @@ static struct resource spi0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_SPI0, -		.end	= AT91SAM9263_ID_SPI0, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_SPI0, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_SPI0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -637,8 +637,8 @@ static struct resource spi1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_SPI1, -		.end	= AT91SAM9263_ID_SPI1, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_SPI1, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_SPI1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -725,8 +725,8 @@ static struct resource ac97_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_AC97C, -		.end	= AT91SAM9263_ID_AC97C, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_AC97C, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_AC97C,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -776,8 +776,8 @@ static struct resource can_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_CAN, -		.end	= AT91SAM9263_ID_CAN, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_CAN, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_CAN,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -816,8 +816,8 @@ static struct resource lcdc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_LCDC, -		.end	= AT91SAM9263_ID_LCDC, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_LCDC, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_LCDC,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -883,8 +883,8 @@ struct resource isi_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_ISI, -		.end	= AT91SAM9263_ID_ISI, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_ISI, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_ISI,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -940,8 +940,8 @@ static struct resource tcb_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_TCB, -		.end	= AT91SAM9263_ID_TCB, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_TCB, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_TCB,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1108,8 +1108,8 @@ static struct resource pwm_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_PWMC, -		.end	= AT91SAM9263_ID_PWMC, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_PWMC, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_PWMC,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1161,8 +1161,8 @@ static struct resource ssc0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_SSC0, -		.end	= AT91SAM9263_ID_SSC0, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_SSC0, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_SSC0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1203,8 +1203,8 @@ static struct resource ssc1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_SSC1, -		.end	= AT91SAM9263_ID_SSC1, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_SSC1, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_SSC1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1284,8 +1284,8 @@ static struct resource dbgu_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91_ID_SYS, -		.end	= AT91_ID_SYS, +		.start	= NR_IRQS_LEGACY + AT91_ID_SYS, +		.end	= NR_IRQS_LEGACY + AT91_ID_SYS,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1322,8 +1322,8 @@ static struct resource uart0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_US0, -		.end	= AT91SAM9263_ID_US0, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_US0, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_US0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1365,8 +1365,8 @@ static struct resource uart1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_US1, -		.end	= AT91SAM9263_ID_US1, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_US1, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_US1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1408,8 +1408,8 @@ static struct resource uart2_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9263_ID_US2, -		.end	= AT91SAM9263_ID_US2, +		.start	= NR_IRQS_LEGACY + AT91SAM9263_ID_US2, +		.end	= NR_IRQS_LEGACY + AT91SAM9263_ID_US2,  		.flags	= IORESOURCE_IRQ,  	},  }; diff --git a/arch/arm/mach-at91/at91sam926x_time.c b/arch/arm/mach-at91/at91sam926x_time.c index a94758b4273..ffc0957d762 100644 --- a/arch/arm/mach-at91/at91sam926x_time.c +++ b/arch/arm/mach-at91/at91sam926x_time.c @@ -137,7 +137,7 @@ static struct irqaction at91sam926x_pit_irq = {  	.name		= "at91_tick",  	.flags		= IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,  	.handler	= at91sam926x_pit_interrupt, -	.irq		= AT91_ID_SYS, +	.irq		= NR_IRQS_LEGACY + AT91_ID_SYS,  };  static void at91sam926x_pit_reset(void) diff --git a/arch/arm/mach-at91/at91sam9g45.c b/arch/arm/mach-at91/at91sam9g45.c index 4792682d52b..977127368a7 100644 --- a/arch/arm/mach-at91/at91sam9g45.c +++ b/arch/arm/mach-at91/at91sam9g45.c @@ -18,6 +18,7 @@  #include <asm/mach/map.h>  #include <asm/system_misc.h>  #include <mach/at91sam9g45.h> +#include <mach/at91_aic.h>  #include <mach/at91_pmc.h>  #include <mach/cpu.h> diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index 933fc9afe7d..40fb79df2de 100644 --- a/arch/arm/mach-at91/at91sam9g45_devices.c +++ b/arch/arm/mach-at91/at91sam9g45_devices.c @@ -53,8 +53,8 @@ static struct resource hdmac_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_DMA, -		.end	= AT91SAM9G45_ID_DMA, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_DMA, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_DMA,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -94,8 +94,8 @@ static struct resource usbh_ohci_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_UHPHS, -		.end	= AT91SAM9G45_ID_UHPHS, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_UHPHS, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_UHPHS,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -156,8 +156,8 @@ static struct resource usbh_ehci_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_UHPHS, -		.end	= AT91SAM9G45_ID_UHPHS, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_UHPHS, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_UHPHS,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -213,8 +213,8 @@ static struct resource usba_udc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[2] = { -		.start	= AT91SAM9G45_ID_UDPHS, -		.end	= AT91SAM9G45_ID_UDPHS, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_UDPHS, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_UDPHS,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -296,8 +296,8 @@ static struct resource eth_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_EMAC, -		.end	= AT91SAM9G45_ID_EMAC, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_EMAC, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_EMAC,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -370,8 +370,8 @@ static struct resource mmc0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_MCI0, -		.end	= AT91SAM9G45_ID_MCI0, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_MCI0, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_MCI0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -395,8 +395,8 @@ static struct resource mmc1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_MCI1, -		.end	= AT91SAM9G45_ID_MCI1, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_MCI1, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_MCI1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -645,8 +645,8 @@ static struct resource twi0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_TWI0, -		.end	= AT91SAM9G45_ID_TWI0, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_TWI0, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_TWI0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -665,8 +665,8 @@ static struct resource twi1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_TWI1, -		.end	= AT91SAM9G45_ID_TWI1, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_TWI1, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_TWI1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -720,8 +720,8 @@ static struct resource spi0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_SPI0, -		.end	= AT91SAM9G45_ID_SPI0, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_SPI0, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_SPI0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -746,8 +746,8 @@ static struct resource spi1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_SPI1, -		.end	= AT91SAM9G45_ID_SPI1, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_SPI1, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_SPI1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -834,8 +834,8 @@ static struct resource ac97_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_AC97C, -		.end	= AT91SAM9G45_ID_AC97C, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_AC97C, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_AC97C,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -887,8 +887,8 @@ struct resource isi_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_ISI, -		.end	= AT91SAM9G45_ID_ISI, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_ISI, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_ISI,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -979,8 +979,8 @@ static struct resource lcdc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_LCDC, -		.end	= AT91SAM9G45_ID_LCDC, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_LCDC, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_LCDC,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1054,8 +1054,8 @@ static struct resource tcb0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_TCB, -		.end	= AT91SAM9G45_ID_TCB, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_TCB, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_TCB,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1075,8 +1075,8 @@ static struct resource tcb1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_TCB, -		.end	= AT91SAM9G45_ID_TCB, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_TCB, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_TCB,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1110,8 +1110,8 @@ static struct resource rtc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91_ID_SYS, -		.end	= AT91_ID_SYS, +		.start	= NR_IRQS_LEGACY + AT91_ID_SYS, +		.end	= NR_IRQS_LEGACY + AT91_ID_SYS,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1147,8 +1147,8 @@ static struct resource tsadcc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_TSC, -		.end	= AT91SAM9G45_ID_TSC, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_TSC, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_TSC,  		.flags	= IORESOURCE_IRQ,  	}  }; @@ -1197,8 +1197,8 @@ static struct resource adc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_TSC, -		.end	= AT91SAM9G45_ID_TSC, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_TSC, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_TSC,  		.flags	= IORESOURCE_IRQ,  	}  }; @@ -1400,8 +1400,8 @@ static struct resource pwm_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_PWMC, -		.end	= AT91SAM9G45_ID_PWMC, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_PWMC, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_PWMC,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1453,8 +1453,8 @@ static struct resource ssc0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_SSC0, -		.end	= AT91SAM9G45_ID_SSC0, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_SSC0, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_SSC0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1495,8 +1495,8 @@ static struct resource ssc1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_SSC1, -		.end	= AT91SAM9G45_ID_SSC1, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_SSC1, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_SSC1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1575,8 +1575,8 @@ static struct resource dbgu_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91_ID_SYS, -		.end	= AT91_ID_SYS, +		.start	= NR_IRQS_LEGACY + AT91_ID_SYS, +		.end	= NR_IRQS_LEGACY + AT91_ID_SYS,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1613,8 +1613,8 @@ static struct resource uart0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_US0, -		.end	= AT91SAM9G45_ID_US0, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_US0, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_US0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1656,8 +1656,8 @@ static struct resource uart1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_US1, -		.end	= AT91SAM9G45_ID_US1, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_US1, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_US1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1699,8 +1699,8 @@ static struct resource uart2_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_US2, -		.end	= AT91SAM9G45_ID_US2, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_US2, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_US2,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1742,8 +1742,8 @@ static struct resource uart3_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9G45_ID_US3, -		.end	= AT91SAM9G45_ID_US3, +		.start	= NR_IRQS_LEGACY + AT91SAM9G45_ID_US3, +		.end	= NR_IRQS_LEGACY + AT91SAM9G45_ID_US3,  		.flags	= IORESOURCE_IRQ,  	},  }; diff --git a/arch/arm/mach-at91/at91sam9rl.c b/arch/arm/mach-at91/at91sam9rl.c index e420085a57e..72ce50a50de 100644 --- a/arch/arm/mach-at91/at91sam9rl.c +++ b/arch/arm/mach-at91/at91sam9rl.c @@ -19,6 +19,7 @@  #include <mach/cpu.h>  #include <mach/at91_dbgu.h>  #include <mach/at91sam9rl.h> +#include <mach/at91_aic.h>  #include <mach/at91_pmc.h>  #include <mach/at91_rstc.h> diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c index 9c0b1481a9a..f09fff93217 100644 --- a/arch/arm/mach-at91/at91sam9rl_devices.c +++ b/arch/arm/mach-at91/at91sam9rl_devices.c @@ -41,8 +41,8 @@ static struct resource hdmac_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[2] = { -		.start	= AT91SAM9RL_ID_DMA, -		.end	= AT91SAM9RL_ID_DMA, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_DMA, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_DMA,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -84,8 +84,8 @@ static struct resource usba_udc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[2] = { -		.start	= AT91SAM9RL_ID_UDPHS, -		.end	= AT91SAM9RL_ID_UDPHS, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_UDPHS, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_UDPHS,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -172,8 +172,8 @@ static struct resource mmc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9RL_ID_MCI, -		.end	= AT91SAM9RL_ID_MCI, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_MCI, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_MCI,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -339,8 +339,8 @@ static struct resource twi_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9RL_ID_TWI0, -		.end	= AT91SAM9RL_ID_TWI0, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_TWI0, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_TWI0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -383,8 +383,8 @@ static struct resource spi_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9RL_ID_SPI, -		.end	= AT91SAM9RL_ID_SPI, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_SPI, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_SPI,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -452,8 +452,8 @@ static struct resource ac97_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9RL_ID_AC97C, -		.end	= AT91SAM9RL_ID_AC97C, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_AC97C, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_AC97C,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -507,8 +507,8 @@ static struct resource lcdc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9RL_ID_LCDC, -		.end	= AT91SAM9RL_ID_LCDC, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_LCDC, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_LCDC,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -574,18 +574,18 @@ static struct resource tcb_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9RL_ID_TC0, -		.end	= AT91SAM9RL_ID_TC0, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_TC0, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_TC0,  		.flags	= IORESOURCE_IRQ,  	},  	[2] = { -		.start	= AT91SAM9RL_ID_TC1, -		.end	= AT91SAM9RL_ID_TC1, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_TC1, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_TC1,  		.flags	= IORESOURCE_IRQ,  	},  	[3] = { -		.start	= AT91SAM9RL_ID_TC2, -		.end	= AT91SAM9RL_ID_TC2, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_TC2, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_TC2,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -621,8 +621,8 @@ static struct resource tsadcc_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9RL_ID_TSC, -		.end	= AT91SAM9RL_ID_TSC, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_TSC, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_TSC,  		.flags	= IORESOURCE_IRQ,  	}  }; @@ -768,8 +768,8 @@ static struct resource pwm_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9RL_ID_PWMC, -		.end	= AT91SAM9RL_ID_PWMC, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_PWMC, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_PWMC,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -821,8 +821,8 @@ static struct resource ssc0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9RL_ID_SSC0, -		.end	= AT91SAM9RL_ID_SSC0, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_SSC0, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_SSC0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -863,8 +863,8 @@ static struct resource ssc1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9RL_ID_SSC1, -		.end	= AT91SAM9RL_ID_SSC1, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_SSC1, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_SSC1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -943,8 +943,8 @@ static struct resource dbgu_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91_ID_SYS, -		.end	= AT91_ID_SYS, +		.start	= NR_IRQS_LEGACY + AT91_ID_SYS, +		.end	= NR_IRQS_LEGACY + AT91_ID_SYS,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -981,8 +981,8 @@ static struct resource uart0_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9RL_ID_US0, -		.end	= AT91SAM9RL_ID_US0, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_US0, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_US0,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1032,8 +1032,8 @@ static struct resource uart1_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9RL_ID_US1, -		.end	= AT91SAM9RL_ID_US1, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_US1, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_US1,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1075,8 +1075,8 @@ static struct resource uart2_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9RL_ID_US2, -		.end	= AT91SAM9RL_ID_US2, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_US2, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_US2,  		.flags	= IORESOURCE_IRQ,  	},  }; @@ -1118,8 +1118,8 @@ static struct resource uart3_resources[] = {  		.flags	= IORESOURCE_MEM,  	},  	[1] = { -		.start	= AT91SAM9RL_ID_US3, -		.end	= AT91SAM9RL_ID_US3, +		.start	= NR_IRQS_LEGACY + AT91SAM9RL_ID_US3, +		.end	= NR_IRQS_LEGACY + AT91SAM9RL_ID_US3,  		.flags	= IORESOURCE_IRQ,  	},  }; diff --git a/arch/arm/mach-at91/at91sam9x5.c b/arch/arm/mach-at91/at91sam9x5.c index 1b144b4d3ce..477cf9d0667 100644 --- a/arch/arm/mach-at91/at91sam9x5.c +++ b/arch/arm/mach-at91/at91sam9x5.c @@ -312,8 +312,6 @@ static void __init at91sam9x5_map_io(void)  void __init at91sam9x5_initialize(void)  { -	at91_extern_irq = (1 << AT91SAM9X5_ID_IRQ0); -  	/* Register GPIO subsystem (using DT) */  	at91_gpio_init(NULL, 0);  } @@ -321,47 +319,9 @@ void __init at91sam9x5_initialize(void)  /* --------------------------------------------------------------------   *  Interrupt initialization   * -------------------------------------------------------------------- */ -/* - * The default interrupt priority levels (0 = lowest, 7 = highest). - */ -static unsigned int at91sam9x5_default_irq_priority[NR_AIC_IRQS] __initdata = { -	7,	/* Advanced Interrupt Controller (FIQ) */ -	7,	/* System Peripherals */ -	1,	/* Parallel IO Controller A and B */ -	1,	/* Parallel IO Controller C and D */ -	4,	/* Soft Modem */ -	5,	/* USART 0 */ -	5,	/* USART 1 */ -	5,	/* USART 2 */ -	5,	/* USART 3 */ -	6,	/* Two-Wire Interface 0 */ -	6,	/* Two-Wire Interface 1 */ -	6,	/* Two-Wire Interface 2 */ -	0,	/* Multimedia Card Interface 0 */ -	5,	/* Serial Peripheral Interface 0 */ -	5,	/* Serial Peripheral Interface 1 */ -	5,	/* UART 0 */ -	5,	/* UART 1 */ -	0,	/* Timer Counter 0, 1, 2, 3, 4 and 5 */ -	0,	/* Pulse Width Modulation Controller */ -	0,	/* ADC Controller */ -	0,	/* DMA Controller 0 */ -	0,	/* DMA Controller 1 */ -	2,	/* USB Host High Speed port */ -	2,	/* USB Device High speed port */ -	3,	/* Ethernet MAC 0 */ -	3,	/* LDC Controller or Image Sensor Interface */ -	0,	/* Multimedia Card Interface 1 */ -	3,	/* Ethernet MAC 1 */ -	4,	/* Synchronous Serial Interface */ -	4,	/* CAN Controller 0 */ -	4,	/* CAN Controller 1 */ -	0,	/* Advanced Interrupt Controller (IRQ0) */ -};  struct at91_init_soc __initdata at91sam9x5_soc = {  	.map_io = at91sam9x5_map_io, -	.default_irq_priority = at91sam9x5_default_irq_priority,  	.register_clocks = at91sam9x5_register_clocks,  	.init = at91sam9x5_initialize,  }; diff --git a/arch/arm/mach-at91/at91x40.c b/arch/arm/mach-at91/at91x40.c index d62fe090d81..46090e642d8 100644 --- a/arch/arm/mach-at91/at91x40.c +++ b/arch/arm/mach-at91/at91x40.c @@ -13,10 +13,12 @@  #include <linux/kernel.h>  #include <linux/init.h>  #include <linux/irq.h> +#include <linux/io.h>  #include <asm/proc-fns.h>  #include <asm/system_misc.h>  #include <asm/mach/arch.h>  #include <mach/at91x40.h> +#include <mach/at91_aic.h>  #include <mach/at91_st.h>  #include <mach/timex.h>  #include "generic.h" diff --git a/arch/arm/mach-at91/board-1arm.c b/arch/arm/mach-at91/board-1arm.c index 271f994314a..22d8856094f 100644 --- a/arch/arm/mach-at91/board-1arm.c +++ b/arch/arm/mach-at91/board-1arm.c @@ -36,6 +36,7 @@  #include <mach/board.h>  #include <mach/cpu.h> +#include <mach/at91_aic.h>  #include "generic.h" @@ -91,6 +92,7 @@ MACHINE_START(ONEARM, "Ajeco 1ARM single board computer")  	/* Maintainer: Lennert Buytenhek <buytenh@wantstofly.org> */  	.timer		= &at91rm9200_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= onearm_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= onearm_board_init, diff --git a/arch/arm/mach-at91/board-afeb-9260v1.c b/arch/arm/mach-at91/board-afeb-9260v1.c index b7d8aa7b81e..de7be193181 100644 --- a/arch/arm/mach-at91/board-afeb-9260v1.c +++ b/arch/arm/mach-at91/board-afeb-9260v1.c @@ -44,6 +44,7 @@  #include <asm/mach/irq.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include "generic.h" @@ -212,6 +213,7 @@ MACHINE_START(AFEB9260, "Custom afeb9260 board")  	/* Maintainer: Sergey Lapin <slapin@ossfans.org> */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= afeb9260_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= afeb9260_board_init, diff --git a/arch/arm/mach-at91/board-cam60.c b/arch/arm/mach-at91/board-cam60.c index 29d3ef0a50f..477e708497b 100644 --- a/arch/arm/mach-at91/board-cam60.c +++ b/arch/arm/mach-at91/board-cam60.c @@ -39,6 +39,7 @@  #include <asm/mach/irq.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91sam9_smc.h>  #include "sam9_smc.h" @@ -188,6 +189,7 @@ MACHINE_START(CAM60, "KwikByte CAM60")  	/* Maintainer: KwikByte */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= cam60_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= cam60_board_init, diff --git a/arch/arm/mach-at91/board-carmeva.c b/arch/arm/mach-at91/board-carmeva.c index 44328a6d460..a5b002f32a6 100644 --- a/arch/arm/mach-at91/board-carmeva.c +++ b/arch/arm/mach-at91/board-carmeva.c @@ -36,6 +36,7 @@  #include <mach/hardware.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include "generic.h" @@ -158,6 +159,7 @@ MACHINE_START(CARMEVA, "Carmeva")  	/* Maintainer: Conitec Datasystems */  	.timer		= &at91rm9200_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= carmeva_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= carmeva_board_init, diff --git a/arch/arm/mach-at91/board-cpu9krea.c b/arch/arm/mach-at91/board-cpu9krea.c index 69951ec7dbf..ecbc13b594d 100644 --- a/arch/arm/mach-at91/board-cpu9krea.c +++ b/arch/arm/mach-at91/board-cpu9krea.c @@ -41,6 +41,7 @@  #include <mach/hardware.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91sam9_smc.h>  #include <mach/at91sam9260_matrix.h>  #include <mach/at91_matrix.h> @@ -376,6 +377,7 @@ MACHINE_START(CPUAT9G20, "Eukrea CPU9G20")  	/* Maintainer: Eric Benard - EUKREA Electromatique */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= cpu9krea_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= cpu9krea_board_init, diff --git a/arch/arm/mach-at91/board-cpuat91.c b/arch/arm/mach-at91/board-cpuat91.c index 895cf2dba61..2e6d043c82f 100644 --- a/arch/arm/mach-at91/board-cpuat91.c +++ b/arch/arm/mach-at91/board-cpuat91.c @@ -37,6 +37,7 @@  #include <asm/mach/irq.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91rm9200_mc.h>  #include <mach/at91_ramc.h>  #include <mach/cpu.h> @@ -178,6 +179,7 @@ MACHINE_START(CPUAT91, "Eukrea")  	/* Maintainer: Eric Benard - EUKREA Electromatique */  	.timer		= &at91rm9200_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= cpuat91_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= cpuat91_board_init, diff --git a/arch/arm/mach-at91/board-csb337.c b/arch/arm/mach-at91/board-csb337.c index cd813361cd2..462bc319cbc 100644 --- a/arch/arm/mach-at91/board-csb337.c +++ b/arch/arm/mach-at91/board-csb337.c @@ -39,6 +39,7 @@  #include <mach/hardware.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include "generic.h" @@ -252,6 +253,7 @@ MACHINE_START(CSB337, "Cogent CSB337")  	/* Maintainer: Bill Gatliff */  	.timer		= &at91rm9200_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= csb337_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= csb337_board_init, diff --git a/arch/arm/mach-at91/board-csb637.c b/arch/arm/mach-at91/board-csb637.c index 7c8b05a57d7..872871ab116 100644 --- a/arch/arm/mach-at91/board-csb637.c +++ b/arch/arm/mach-at91/board-csb637.c @@ -36,6 +36,7 @@  #include <mach/hardware.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include "generic.h" @@ -133,6 +134,7 @@ MACHINE_START(CSB637, "Cogent CSB637")  	/* Maintainer: Bill Gatliff */  	.timer		= &at91rm9200_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= csb637_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= csb637_board_init, diff --git a/arch/arm/mach-at91/board-dt.c b/arch/arm/mach-at91/board-dt.c index a1fce05aa7a..e8f45c4e0ea 100644 --- a/arch/arm/mach-at91/board-dt.c +++ b/arch/arm/mach-at91/board-dt.c @@ -16,6 +16,7 @@  #include <linux/of_platform.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <asm/setup.h>  #include <asm/irq.h> @@ -53,6 +54,7 @@ DT_MACHINE_START(at91sam_dt, "Atmel AT91SAM (Device Tree)")  	/* Maintainer: Atmel */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= at91_dt_initialize,  	.init_irq	= at91_dt_init_irq,  	.init_machine	= at91_dt_device_init, diff --git a/arch/arm/mach-at91/board-eb01.c b/arch/arm/mach-at91/board-eb01.c index d2023f27c65..01f66e99ece 100644 --- a/arch/arm/mach-at91/board-eb01.c +++ b/arch/arm/mach-at91/board-eb01.c @@ -28,6 +28,7 @@  #include <asm/mach/arch.h>  #include <asm/mach/map.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include "generic.h"  static void __init at91eb01_init_irq(void) @@ -43,6 +44,7 @@ static void __init at91eb01_init_early(void)  MACHINE_START(AT91EB01, "Atmel AT91 EB01")  	/* Maintainer: Greg Ungerer <gerg@snapgear.com> */  	.timer		= &at91x40_timer, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= at91eb01_init_early,  	.init_irq	= at91eb01_init_irq,  MACHINE_END diff --git a/arch/arm/mach-at91/board-eb9200.c b/arch/arm/mach-at91/board-eb9200.c index bd101729798..d1e1f3fc0a4 100644 --- a/arch/arm/mach-at91/board-eb9200.c +++ b/arch/arm/mach-at91/board-eb9200.c @@ -36,6 +36,7 @@  #include <asm/mach/irq.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include "generic.h" @@ -118,6 +119,7 @@ static void __init eb9200_board_init(void)  MACHINE_START(ATEB9200, "Embest ATEB9200")  	.timer		= &at91rm9200_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= eb9200_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= eb9200_board_init, diff --git a/arch/arm/mach-at91/board-ecbat91.c b/arch/arm/mach-at91/board-ecbat91.c index 89cc3726a9c..9c24cb25707 100644 --- a/arch/arm/mach-at91/board-ecbat91.c +++ b/arch/arm/mach-at91/board-ecbat91.c @@ -39,6 +39,7 @@  #include <mach/board.h>  #include <mach/cpu.h> +#include <mach/at91_aic.h>  #include "generic.h" @@ -170,6 +171,7 @@ MACHINE_START(ECBAT91, "emQbit's ECB_AT91")  	/* Maintainer: emQbit.com */  	.timer		= &at91rm9200_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= ecb_at91init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= ecb_at91board_init, diff --git a/arch/arm/mach-at91/board-eco920.c b/arch/arm/mach-at91/board-eco920.c index 558546cf63f..82bdfde3405 100644 --- a/arch/arm/mach-at91/board-eco920.c +++ b/arch/arm/mach-at91/board-eco920.c @@ -25,6 +25,7 @@  #include <asm/mach/map.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91rm9200_mc.h>  #include <mach/at91_ramc.h>  #include <mach/cpu.h> @@ -132,6 +133,7 @@ MACHINE_START(ECO920, "eco920")  	/* Maintainer: Sascha Hauer */  	.timer		= &at91rm9200_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= eco920_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= eco920_board_init, diff --git a/arch/arm/mach-at91/board-flexibity.c b/arch/arm/mach-at91/board-flexibity.c index 47658f78105..6cc83a87d77 100644 --- a/arch/arm/mach-at91/board-flexibity.c +++ b/arch/arm/mach-at91/board-flexibity.c @@ -34,6 +34,7 @@  #include <mach/hardware.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include "generic.h" @@ -160,6 +161,7 @@ MACHINE_START(FLEXIBITY, "Flexibity Connect")  	/* Maintainer: Maxim Osipov */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= flexibity_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= flexibity_board_init, diff --git a/arch/arm/mach-at91/board-foxg20.c b/arch/arm/mach-at91/board-foxg20.c index 33411e6ecb1..69ab1247ef8 100644 --- a/arch/arm/mach-at91/board-foxg20.c +++ b/arch/arm/mach-at91/board-foxg20.c @@ -42,6 +42,7 @@  #include <asm/mach/irq.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91sam9_smc.h>  #include "sam9_smc.h" @@ -262,6 +263,7 @@ MACHINE_START(ACMENETUSFOXG20, "Acme Systems srl FOX Board G20")  	/* Maintainer: Sergio Tanzilli */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= foxg20_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= foxg20_board_init, diff --git a/arch/arm/mach-at91/board-gsia18s.c b/arch/arm/mach-at91/board-gsia18s.c index 3e0dfa643a8..a9d5e78118c 100644 --- a/arch/arm/mach-at91/board-gsia18s.c +++ b/arch/arm/mach-at91/board-gsia18s.c @@ -31,6 +31,7 @@  #include <asm/mach/arch.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91sam9_smc.h>  #include <mach/gsia18s.h>  #include <mach/stamp9g20.h> @@ -575,6 +576,7 @@ static void __init gsia18s_board_init(void)  MACHINE_START(GSIA18S, "GS_IA18_S")  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= gsia18s_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= gsia18s_board_init, diff --git a/arch/arm/mach-at91/board-kafa.c b/arch/arm/mach-at91/board-kafa.c index f260657f32b..64c1dbf88a0 100644 --- a/arch/arm/mach-at91/board-kafa.c +++ b/arch/arm/mach-at91/board-kafa.c @@ -35,6 +35,7 @@  #include <asm/mach/irq.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/cpu.h>  #include "generic.h" @@ -93,6 +94,7 @@ MACHINE_START(KAFA, "Sperry-Sun KAFA")  	/* Maintainer: Sergei Sharonov */  	.timer		= &at91rm9200_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= kafa_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= kafa_board_init, diff --git a/arch/arm/mach-at91/board-kb9202.c b/arch/arm/mach-at91/board-kb9202.c index ba39db5482b..5d96cb85175 100644 --- a/arch/arm/mach-at91/board-kb9202.c +++ b/arch/arm/mach-at91/board-kb9202.c @@ -37,6 +37,7 @@  #include <mach/board.h>  #include <mach/cpu.h> +#include <mach/at91_aic.h>  #include <mach/at91rm9200_mc.h>  #include <mach/at91_ramc.h> @@ -133,6 +134,7 @@ MACHINE_START(KB9200, "KB920x")  	/* Maintainer: KwikByte, Inc. */  	.timer		= &at91rm9200_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= kb9202_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= kb9202_board_init, diff --git a/arch/arm/mach-at91/board-neocore926.c b/arch/arm/mach-at91/board-neocore926.c index d2f4cc16176..18103c5d993 100644 --- a/arch/arm/mach-at91/board-neocore926.c +++ b/arch/arm/mach-at91/board-neocore926.c @@ -45,6 +45,7 @@  #include <mach/hardware.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91sam9_smc.h>  #include "sam9_smc.h" @@ -378,6 +379,7 @@ MACHINE_START(NEOCORE926, "ADENEO NEOCORE 926")  	/* Maintainer: ADENEO */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= neocore926_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= neocore926_board_init, diff --git a/arch/arm/mach-at91/board-pcontrol-g20.c b/arch/arm/mach-at91/board-pcontrol-g20.c index 7fe63834242..9ca3e32c54c 100644 --- a/arch/arm/mach-at91/board-pcontrol-g20.c +++ b/arch/arm/mach-at91/board-pcontrol-g20.c @@ -30,6 +30,7 @@  #include <asm/mach/arch.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91sam9_smc.h>  #include <mach/stamp9g20.h> @@ -218,6 +219,7 @@ MACHINE_START(PCONTROL_G20, "PControl G20")  	/* Maintainer: pgsellmann@portner-elektronik.at */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= pcontrol_g20_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= pcontrol_g20_board_init, diff --git a/arch/arm/mach-at91/board-picotux200.c b/arch/arm/mach-at91/board-picotux200.c index b45c0a5d5ca..12706550450 100644 --- a/arch/arm/mach-at91/board-picotux200.c +++ b/arch/arm/mach-at91/board-picotux200.c @@ -38,6 +38,7 @@  #include <asm/mach/irq.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91rm9200_mc.h>  #include <mach/at91_ramc.h> @@ -120,6 +121,7 @@ MACHINE_START(PICOTUX2XX, "picotux 200")  	/* Maintainer: Kleinhenz Elektronik GmbH */  	.timer		= &at91rm9200_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= picotux200_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= picotux200_board_init, diff --git a/arch/arm/mach-at91/board-qil-a9260.c b/arch/arm/mach-at91/board-qil-a9260.c index 0c61bf0d272..bf351e28542 100644 --- a/arch/arm/mach-at91/board-qil-a9260.c +++ b/arch/arm/mach-at91/board-qil-a9260.c @@ -41,6 +41,7 @@  #include <mach/hardware.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91sam9_smc.h>  #include <mach/at91_shdwc.h> @@ -258,6 +259,7 @@ MACHINE_START(QIL_A9260, "CALAO QIL_A9260")  	/* Maintainer: calao-systems */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= ek_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= ek_board_init, diff --git a/arch/arm/mach-at91/board-rm9200dk.c b/arch/arm/mach-at91/board-rm9200dk.c index afd7a471376..cc2bf979607 100644 --- a/arch/arm/mach-at91/board-rm9200dk.c +++ b/arch/arm/mach-at91/board-rm9200dk.c @@ -40,6 +40,7 @@  #include <mach/hardware.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91rm9200_mc.h>  #include <mach/at91_ramc.h> @@ -223,6 +224,7 @@ MACHINE_START(AT91RM9200DK, "Atmel AT91RM9200-DK")  	/* Maintainer: SAN People/Atmel */  	.timer		= &at91rm9200_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= dk_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= dk_board_init, diff --git a/arch/arm/mach-at91/board-rm9200ek.c b/arch/arm/mach-at91/board-rm9200ek.c index 2b15b8adec4..62e19e64c9d 100644 --- a/arch/arm/mach-at91/board-rm9200ek.c +++ b/arch/arm/mach-at91/board-rm9200ek.c @@ -40,6 +40,7 @@  #include <mach/hardware.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91rm9200_mc.h>  #include <mach/at91_ramc.h> @@ -190,6 +191,7 @@ MACHINE_START(AT91RM9200EK, "Atmel AT91RM9200-EK")  	/* Maintainer: SAN People/Atmel */  	.timer		= &at91rm9200_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= ek_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= ek_board_init, diff --git a/arch/arm/mach-at91/board-rsi-ews.c b/arch/arm/mach-at91/board-rsi-ews.c index 24ab9be7510..c3b43aefdb7 100644 --- a/arch/arm/mach-at91/board-rsi-ews.c +++ b/arch/arm/mach-at91/board-rsi-ews.c @@ -26,6 +26,7 @@  #include <mach/hardware.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <linux/gpio.h> @@ -225,6 +226,7 @@ MACHINE_START(RSI_EWS, "RSI EWS")  	/* Maintainer: Josef Holzmayr <holzmayr@rsi-elektrotechnik.de> */  	.timer		= &at91rm9200_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= rsi_ews_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= rsi_ews_board_init, diff --git a/arch/arm/mach-at91/board-sam9-l9260.c b/arch/arm/mach-at91/board-sam9-l9260.c index cdd21f2595d..7bf6da70d7d 100644 --- a/arch/arm/mach-at91/board-sam9-l9260.c +++ b/arch/arm/mach-at91/board-sam9-l9260.c @@ -38,6 +38,7 @@  #include <asm/mach/irq.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91sam9_smc.h>  #include "sam9_smc.h" @@ -202,6 +203,7 @@ MACHINE_START(SAM9_L9260, "Olimex SAM9-L9260")  	/* Maintainer: Olimex */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= ek_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= ek_board_init, diff --git a/arch/arm/mach-at91/board-sam9260ek.c b/arch/arm/mach-at91/board-sam9260ek.c index 7b3c3913551..889c1bf71eb 100644 --- a/arch/arm/mach-at91/board-sam9260ek.c +++ b/arch/arm/mach-at91/board-sam9260ek.c @@ -42,6 +42,7 @@  #include <mach/hardware.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91sam9_smc.h>  #include <mach/at91_shdwc.h>  #include <mach/system_rev.h> @@ -344,6 +345,7 @@ MACHINE_START(AT91SAM9260EK, "Atmel AT91SAM9260-EK")  	/* Maintainer: Atmel */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= ek_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= ek_board_init, diff --git a/arch/arm/mach-at91/board-sam9261ek.c b/arch/arm/mach-at91/board-sam9261ek.c index 2736453821b..2269be5fa38 100644 --- a/arch/arm/mach-at91/board-sam9261ek.c +++ b/arch/arm/mach-at91/board-sam9261ek.c @@ -46,6 +46,7 @@  #include <mach/hardware.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91sam9_smc.h>  #include <mach/at91_shdwc.h>  #include <mach/system_rev.h> @@ -615,6 +616,7 @@ MACHINE_START(AT91SAM9G10EK, "Atmel AT91SAM9G10-EK")  	/* Maintainer: Atmel */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= ek_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= ek_board_init, diff --git a/arch/arm/mach-at91/board-sam9263ek.c b/arch/arm/mach-at91/board-sam9263ek.c index 983cb98d246..82adf581afc 100644 --- a/arch/arm/mach-at91/board-sam9263ek.c +++ b/arch/arm/mach-at91/board-sam9263ek.c @@ -45,6 +45,7 @@  #include <mach/hardware.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91sam9_smc.h>  #include <mach/at91_shdwc.h>  #include <mach/system_rev.h> @@ -443,6 +444,7 @@ MACHINE_START(AT91SAM9263EK, "Atmel AT91SAM9263-EK")  	/* Maintainer: Atmel */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= ek_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= ek_board_init, diff --git a/arch/arm/mach-at91/board-sam9g20ek.c b/arch/arm/mach-at91/board-sam9g20ek.c index 6860d345110..4ea4ee00364 100644 --- a/arch/arm/mach-at91/board-sam9g20ek.c +++ b/arch/arm/mach-at91/board-sam9g20ek.c @@ -44,6 +44,7 @@  #include <asm/mach/irq.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91sam9_smc.h>  #include <mach/system_rev.h> @@ -413,6 +414,7 @@ MACHINE_START(AT91SAM9G20EK, "Atmel AT91SAM9G20-EK")  	/* Maintainer: Atmel */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= ek_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= ek_board_init, @@ -422,6 +424,7 @@ MACHINE_START(AT91SAM9G20EK_2MMC, "Atmel AT91SAM9G20-EK 2 MMC Slot Mod")  	/* Maintainer: Atmel */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= ek_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= ek_board_init, diff --git a/arch/arm/mach-at91/board-sam9m10g45ek.c b/arch/arm/mach-at91/board-sam9m10g45ek.c index 63163dc7df4..3d48ec15468 100644 --- a/arch/arm/mach-at91/board-sam9m10g45ek.c +++ b/arch/arm/mach-at91/board-sam9m10g45ek.c @@ -43,6 +43,7 @@  #include <asm/mach/irq.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91sam9_smc.h>  #include <mach/at91_shdwc.h>  #include <mach/system_rev.h> @@ -503,6 +504,7 @@ MACHINE_START(AT91SAM9M10G45EK, "Atmel AT91SAM9M10G45-EK")  	/* Maintainer: Atmel */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= ek_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= ek_board_init, diff --git a/arch/arm/mach-at91/board-sam9rlek.c b/arch/arm/mach-at91/board-sam9rlek.c index be3239f13da..e7dc3ead704 100644 --- a/arch/arm/mach-at91/board-sam9rlek.c +++ b/arch/arm/mach-at91/board-sam9rlek.c @@ -31,6 +31,7 @@  #include <mach/hardware.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91sam9_smc.h>  #include <mach/at91_shdwc.h> @@ -319,6 +320,7 @@ MACHINE_START(AT91SAM9RLEK, "Atmel AT91SAM9RL-EK")  	/* Maintainer: Atmel */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= ek_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= ek_board_init, diff --git a/arch/arm/mach-at91/board-snapper9260.c b/arch/arm/mach-at91/board-snapper9260.c index 9d446f1bb45..a4e031a039f 100644 --- a/arch/arm/mach-at91/board-snapper9260.c +++ b/arch/arm/mach-at91/board-snapper9260.c @@ -33,6 +33,7 @@  #include <mach/hardware.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91sam9_smc.h>  #include "sam9_smc.h" @@ -178,6 +179,7 @@ static void __init snapper9260_board_init(void)  MACHINE_START(SNAPPER_9260, "Bluewater Systems Snapper 9260/9G20 module")  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= snapper9260_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= snapper9260_board_init, diff --git a/arch/arm/mach-at91/board-stamp9g20.c b/arch/arm/mach-at91/board-stamp9g20.c index ee86f9d7ee7..29eae1626bf 100644 --- a/arch/arm/mach-at91/board-stamp9g20.c +++ b/arch/arm/mach-at91/board-stamp9g20.c @@ -26,6 +26,7 @@  #include <asm/mach/arch.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91sam9_smc.h>  #include "sam9_smc.h" @@ -287,6 +288,7 @@ MACHINE_START(PORTUXG20, "taskit PortuxG20")  	/* Maintainer: taskit GmbH */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= stamp9g20_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= portuxg20_board_init, @@ -296,6 +298,7 @@ MACHINE_START(STAMP9G20, "taskit Stamp9G20")  	/* Maintainer: taskit GmbH */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= stamp9g20_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= stamp9g20evb_board_init, diff --git a/arch/arm/mach-at91/board-usb-a926x.c b/arch/arm/mach-at91/board-usb-a926x.c index 95393fcaf19..c1476b9fe7b 100644 --- a/arch/arm/mach-at91/board-usb-a926x.c +++ b/arch/arm/mach-at91/board-usb-a926x.c @@ -42,6 +42,7 @@  #include <mach/hardware.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91sam9_smc.h>  #include <mach/at91_shdwc.h> @@ -358,6 +359,7 @@ MACHINE_START(USB_A9263, "CALAO USB_A9263")  	/* Maintainer: calao-systems */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= ek_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= ek_board_init, @@ -367,6 +369,7 @@ MACHINE_START(USB_A9260, "CALAO USB_A9260")  	/* Maintainer: calao-systems */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= ek_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= ek_board_init, @@ -376,6 +379,7 @@ MACHINE_START(USB_A9G20, "CALAO USB_A92G0")  	/* Maintainer: Jean-Christophe PLAGNIOL-VILLARD */  	.timer		= &at91sam926x_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= ek_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= ek_board_init, diff --git a/arch/arm/mach-at91/board-yl-9200.c b/arch/arm/mach-at91/board-yl-9200.c index d56665ea4b5..516d340549d 100644 --- a/arch/arm/mach-at91/board-yl-9200.c +++ b/arch/arm/mach-at91/board-yl-9200.c @@ -44,6 +44,7 @@  #include <mach/hardware.h>  #include <mach/board.h> +#include <mach/at91_aic.h>  #include <mach/at91rm9200_mc.h>  #include <mach/at91_ramc.h>  #include <mach/cpu.h> @@ -590,6 +591,7 @@ MACHINE_START(YL9200, "uCdragon YL-9200")  	/* Maintainer: S.Birtles */  	.timer		= &at91rm9200_timer,  	.map_io		= at91_map_io, +	.handle_irq	= at91_aic_handle_irq,  	.init_early	= yl9200_init_early,  	.init_irq	= at91_init_irq_default,  	.init_machine	= yl9200_board_init, diff --git a/arch/arm/mach-at91/generic.h b/arch/arm/mach-at91/generic.h index 0a60bf83703..f4965067765 100644 --- a/arch/arm/mach-at91/generic.h +++ b/arch/arm/mach-at91/generic.h @@ -29,6 +29,8 @@ extern void __init at91x40_init_interrupts(unsigned int priority[]);  extern void __init at91_aic_init(unsigned int priority[]);  extern int  __init at91_aic_of_init(struct device_node *node,  				    struct device_node *parent); +extern int  __init at91_aic5_of_init(struct device_node *node, +				    struct device_node *parent);   /* Timer */ diff --git a/arch/arm/mach-at91/gpio.c b/arch/arm/mach-at91/gpio.c index 325837a264c..be42cf0e74b 100644 --- a/arch/arm/mach-at91/gpio.c +++ b/arch/arm/mach-at91/gpio.c @@ -26,6 +26,8 @@  #include <linux/of_irq.h>  #include <linux/of_gpio.h> +#include <asm/mach/irq.h> +  #include <mach/hardware.h>  #include <mach/at91_pio.h> @@ -585,15 +587,14 @@ static struct irq_chip gpio_irqchip = {  static void gpio_irq_handler(unsigned irq, struct irq_desc *desc)  { +	struct irq_chip *chip = irq_desc_get_chip(desc);  	struct irq_data *idata = irq_desc_get_irq_data(desc); -	struct irq_chip *chip = irq_data_get_irq_chip(idata);  	struct at91_gpio_chip *at91_gpio = irq_data_get_irq_chip_data(idata);  	void __iomem	*pio = at91_gpio->regbase;  	unsigned long	isr;  	int		n; -	/* temporarily mask (level sensitive) parent IRQ */ -	chip->irq_ack(idata); +	chained_irq_enter(chip, desc);  	for (;;) {  		/* Reading ISR acks pending (edge triggered) GPIO interrupts.  		 * When there none are pending, we're finished unless we need @@ -614,7 +615,7 @@ static void gpio_irq_handler(unsigned irq, struct irq_desc *desc)  			n = find_next_bit(&isr, BITS_PER_LONG, n + 1);  		}  	} -	chip->irq_unmask(idata); +	chained_irq_exit(chip, desc);  	/* now it may re-trigger */  } diff --git a/arch/arm/mach-at91/include/mach/at91_aic.h b/arch/arm/mach-at91/include/mach/at91_aic.h index 3045781c473..eaea66197fa 100644 --- a/arch/arm/mach-at91/include/mach/at91_aic.h +++ b/arch/arm/mach-at91/include/mach/at91_aic.h @@ -23,12 +23,23 @@ extern void __iomem *at91_aic_base;  	__raw_readl(at91_aic_base + field)  #define at91_aic_write(field, value) \ -	__raw_writel(value, at91_aic_base + field); +	__raw_writel(value, at91_aic_base + field)  #else  .extern at91_aic_base  #endif +/* Number of irq lines managed by AIC */ +#define NR_AIC_IRQS	32 +#define NR_AIC5_IRQS	128 + +#define AT91_AIC5_SSR		0x0			/* Source Select Register [AIC5] */ +#define 	AT91_AIC5_INTSEL_MSK	(0x7f << 0)		/* Interrupt Line Selection Mask */ + +#define AT91_AIC_IRQ_MIN_PRIORITY	0 +#define AT91_AIC_IRQ_MAX_PRIORITY	7 +  #define AT91_AIC_SMR(n)		((n) * 4)		/* Source Mode Registers 0-31 */ +#define AT91_AIC5_SMR		0x4			/* Source Mode Register [AIC5] */  #define		AT91_AIC_PRIOR		(7 << 0)		/* Priority Level */  #define		AT91_AIC_SRCTYPE	(3 << 5)		/* Interrupt Source Type */  #define			AT91_AIC_SRCTYPE_LOW		(0 << 5) @@ -37,29 +48,52 @@ extern void __iomem *at91_aic_base;  #define			AT91_AIC_SRCTYPE_RISING		(3 << 5)  #define AT91_AIC_SVR(n)		(0x80 + ((n) * 4))	/* Source Vector Registers 0-31 */ +#define AT91_AIC5_SVR		0x8			/* Source Vector Register [AIC5] */  #define AT91_AIC_IVR		0x100			/* Interrupt Vector Register */ +#define AT91_AIC5_IVR		0x10			/* Interrupt Vector Register [AIC5] */  #define AT91_AIC_FVR		0x104			/* Fast Interrupt Vector Register */ +#define AT91_AIC5_FVR		0x14			/* Fast Interrupt Vector Register [AIC5] */  #define AT91_AIC_ISR		0x108			/* Interrupt Status Register */ +#define AT91_AIC5_ISR		0x18			/* Interrupt Status Register [AIC5] */  #define		AT91_AIC_IRQID		(0x1f << 0)		/* Current Interrupt Identifier */  #define AT91_AIC_IPR		0x10c			/* Interrupt Pending Register */ +#define AT91_AIC5_IPR0		0x20			/* Interrupt Pending Register 0 [AIC5] */ +#define AT91_AIC5_IPR1		0x24			/* Interrupt Pending Register 1 [AIC5] */ +#define AT91_AIC5_IPR2		0x28			/* Interrupt Pending Register 2 [AIC5] */ +#define AT91_AIC5_IPR3		0x2c			/* Interrupt Pending Register 3 [AIC5] */  #define AT91_AIC_IMR		0x110			/* Interrupt Mask Register */ +#define AT91_AIC5_IMR		0x30			/* Interrupt Mask Register [AIC5] */  #define AT91_AIC_CISR		0x114			/* Core Interrupt Status Register */ +#define AT91_AIC5_CISR		0x34			/* Core Interrupt Status Register [AIC5] */  #define		AT91_AIC_NFIQ		(1 << 0)		/* nFIQ Status */  #define		AT91_AIC_NIRQ		(1 << 1)		/* nIRQ Status */  #define AT91_AIC_IECR		0x120			/* Interrupt Enable Command Register */ +#define AT91_AIC5_IECR		0x40			/* Interrupt Enable Command Register [AIC5] */  #define AT91_AIC_IDCR		0x124			/* Interrupt Disable Command Register */ +#define AT91_AIC5_IDCR		0x44			/* Interrupt Disable Command Register [AIC5] */  #define AT91_AIC_ICCR		0x128			/* Interrupt Clear Command Register */ +#define AT91_AIC5_ICCR		0x48			/* Interrupt Clear Command Register [AIC5] */  #define AT91_AIC_ISCR		0x12c			/* Interrupt Set Command Register */ +#define AT91_AIC5_ISCR		0x4c			/* Interrupt Set Command Register [AIC5] */  #define AT91_AIC_EOICR		0x130			/* End of Interrupt Command Register */ +#define AT91_AIC5_EOICR		0x38			/* End of Interrupt Command Register [AIC5] */  #define AT91_AIC_SPU		0x134			/* Spurious Interrupt Vector Register */ +#define AT91_AIC5_SPU		0x3c			/* Spurious Interrupt Vector Register [AIC5] */  #define AT91_AIC_DCR		0x138			/* Debug Control Register */ +#define AT91_AIC5_DCR		0x6c			/* Debug Control Register [AIC5] */  #define		AT91_AIC_DCR_PROT	(1 << 0)		/* Protection Mode */  #define		AT91_AIC_DCR_GMSK	(1 << 1)		/* General Mask */  #define AT91_AIC_FFER		0x140			/* Fast Forcing Enable Register [SAM9 only] */ +#define AT91_AIC5_FFER		0x50			/* Fast Forcing Enable Register [AIC5] */  #define AT91_AIC_FFDR		0x144			/* Fast Forcing Disable Register [SAM9 only] */ +#define AT91_AIC5_FFDR		0x54			/* Fast Forcing Disable Register [AIC5] */  #define AT91_AIC_FFSR		0x148			/* Fast Forcing Status Register [SAM9 only] */ +#define AT91_AIC5_FFSR		0x58			/* Fast Forcing Status Register [AIC5] */ + +void at91_aic_handle_irq(struct pt_regs *regs); +void at91_aic5_handle_irq(struct pt_regs *regs);  #endif diff --git a/arch/arm/mach-at91/include/mach/at91_spi.h b/arch/arm/mach-at91/include/mach/at91_spi.h deleted file mode 100644 index 2f6ba0c5636..00000000000 --- a/arch/arm/mach-at91/include/mach/at91_spi.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * arch/arm/mach-at91/include/mach/at91_spi.h - * - * Copyright (C) 2005 Ivan Kokshaysky - * Copyright (C) SAN People - * - * Serial Peripheral Interface (SPI) registers. - * Based on AT91RM9200 datasheet revision E. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - */ - -#ifndef AT91_SPI_H -#define AT91_SPI_H - -#define AT91_SPI_CR			0x00		/* Control Register */ -#define		AT91_SPI_SPIEN		(1 <<  0)		/* SPI Enable */ -#define		AT91_SPI_SPIDIS		(1 <<  1)		/* SPI Disable */ -#define		AT91_SPI_SWRST		(1 <<  7)		/* SPI Software Reset */ -#define		AT91_SPI_LASTXFER	(1 << 24)		/* Last Transfer [SAM9261 only] */ - -#define AT91_SPI_MR			0x04		/* Mode Register */ -#define		AT91_SPI_MSTR		(1    <<  0)		/* Master/Slave Mode */ -#define		AT91_SPI_PS		(1    <<  1)		/* Peripheral Select */ -#define			AT91_SPI_PS_FIXED	(0 << 1) -#define			AT91_SPI_PS_VARIABLE	(1 << 1) -#define		AT91_SPI_PCSDEC		(1    <<  2)		/* Chip Select Decode */ -#define		AT91_SPI_DIV32		(1    <<  3)		/* Clock Selection [AT91RM9200 only] */ -#define		AT91_SPI_MODFDIS	(1    <<  4)		/* Mode Fault Detection */ -#define		AT91_SPI_LLB		(1    <<  7)		/* Local Loopback Enable */ -#define		AT91_SPI_PCS		(0xf  << 16)		/* Peripheral Chip Select */ -#define		AT91_SPI_DLYBCS		(0xff << 24)		/* Delay Between Chip Selects */ - -#define AT91_SPI_RDR		0x08			/* Receive Data Register */ -#define		AT91_SPI_RD		(0xffff <<  0)		/* Receive Data */ -#define		AT91_SPI_PCS		(0xf	<< 16)		/* Peripheral Chip Select */ - -#define AT91_SPI_TDR		0x0c			/* Transmit Data Register */ -#define		AT91_SPI_TD		(0xffff <<  0)		/* Transmit Data */ -#define		AT91_SPI_PCS		(0xf	<< 16)		/* Peripheral Chip Select */ -#define		AT91_SPI_LASTXFER	(1	<< 24)		/* Last Transfer [SAM9261 only] */ - -#define AT91_SPI_SR		0x10			/* Status Register */ -#define		AT91_SPI_RDRF		(1 <<  0)		/* Receive Data Register Full */ -#define		AT91_SPI_TDRE		(1 <<  1)		/* Transmit Data Register Full */ -#define		AT91_SPI_MODF		(1 <<  2)		/* Mode Fault Error */ -#define		AT91_SPI_OVRES		(1 <<  3)		/* Overrun Error Status */ -#define		AT91_SPI_ENDRX		(1 <<  4)		/* End of RX buffer */ -#define		AT91_SPI_ENDTX		(1 <<  5)		/* End of TX buffer */ -#define		AT91_SPI_RXBUFF		(1 <<  6)		/* RX Buffer Full */ -#define		AT91_SPI_TXBUFE		(1 <<  7)		/* TX Buffer Empty */ -#define		AT91_SPI_NSSR		(1 <<  8)		/* NSS Rising [SAM9261 only] */ -#define		AT91_SPI_TXEMPTY	(1 <<  9)		/* Transmission Register Empty [SAM9261 only] */ -#define		AT91_SPI_SPIENS		(1 << 16)		/* SPI Enable Status */ - -#define AT91_SPI_IER		0x14			/* Interrupt Enable Register */ -#define AT91_SPI_IDR		0x18			/* Interrupt Disable Register */ -#define AT91_SPI_IMR		0x1c			/* Interrupt Mask Register */ - -#define AT91_SPI_CSR(n)		(0x30 + ((n) * 4))	/* Chip Select Registers 0-3 */ -#define		AT91_SPI_CPOL		(1    <<  0)		/* Clock Polarity */ -#define		AT91_SPI_NCPHA		(1    <<  1)		/* Clock Phase */ -#define		AT91_SPI_CSAAT		(1    <<  3)		/* Chip Select Active After Transfer [SAM9261 only] */ -#define		AT91_SPI_BITS		(0xf  <<  4)		/* Bits Per Transfer */ -#define			AT91_SPI_BITS_8		(0 << 4) -#define			AT91_SPI_BITS_9		(1 << 4) -#define			AT91_SPI_BITS_10	(2 << 4) -#define			AT91_SPI_BITS_11	(3 << 4) -#define			AT91_SPI_BITS_12	(4 << 4) -#define			AT91_SPI_BITS_13	(5 << 4) -#define			AT91_SPI_BITS_14	(6 << 4) -#define			AT91_SPI_BITS_15	(7 << 4) -#define			AT91_SPI_BITS_16	(8 << 4) -#define		AT91_SPI_SCBR		(0xff <<  8)		/* Serial Clock Baud Rate */ -#define		AT91_SPI_DLYBS		(0xff << 16)		/* Delay before SPCK */ -#define		AT91_SPI_DLYBCT		(0xff << 24)		/* Delay between Consecutive Transfers */ - -#endif diff --git a/arch/arm/mach-at91/include/mach/at91_ssc.h b/arch/arm/mach-at91/include/mach/at91_ssc.h deleted file mode 100644 index a81114c11c7..00000000000 --- a/arch/arm/mach-at91/include/mach/at91_ssc.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * arch/arm/mach-at91/include/mach/at91_ssc.h - * - * Copyright (C) SAN People - * - * Serial Synchronous Controller (SSC) registers. - * Based on AT91RM9200 datasheet revision E. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - */ - -#ifndef AT91_SSC_H -#define AT91_SSC_H - -#define AT91_SSC_CR		0x00	/* Control Register */ -#define		AT91_SSC_RXEN		(1 <<  0)	/* Receive Enable */ -#define		AT91_SSC_RXDIS		(1 <<  1)	/* Receive Disable */ -#define		AT91_SSC_TXEN		(1 <<  8)	/* Transmit Enable */ -#define		AT91_SSC_TXDIS		(1 <<  9)	/* Transmit Disable */ -#define		AT91_SSC_SWRST		(1 << 15)	/* Software Reset */ - -#define AT91_SSC_CMR		0x04	/* Clock Mode Register */ -#define		AT91_SSC_CMR_DIV	(0xfff << 0)	/* Clock Divider */ - -#define AT91_SSC_RCMR		0x10	/* Receive Clock Mode Register */ -#define		AT91_SSC_CKS		(3    <<  0)	/* Clock Selection */ -#define			AT91_SSC_CKS_DIV		(0 << 0) -#define			AT91_SSC_CKS_CLOCK		(1 << 0) -#define			AT91_SSC_CKS_PIN		(2 << 0) -#define		AT91_SSC_CKO		(7    <<  2)	/* Clock Output Mode Selection */ -#define			AT91_SSC_CKO_NONE		(0 << 2) -#define			AT91_SSC_CKO_CONTINUOUS		(1 << 2) -#define		AT91_SSC_CKI		(1    <<  5)	/* Clock Inversion */ -#define			AT91_SSC_CKI_FALLING		(0 << 5) -#define			AT91_SSC_CK_RISING		(1 << 5) -#define		AT91_SSC_CKG		(1    <<  6)	/* Receive Clock Gating Selection [AT91SAM9261 only] */ -#define			AT91_SSC_CKG_NONE		(0 << 6) -#define			AT91_SSC_CKG_RFLOW		(1 << 6) -#define			AT91_SSC_CKG_RFHIGH		(2 << 6) -#define		AT91_SSC_START		(0xf  <<  8)	/* Start Selection */ -#define			AT91_SSC_START_CONTINUOUS	(0 << 8) -#define			AT91_SSC_START_TX_RX		(1 << 8) -#define			AT91_SSC_START_LOW_RF		(2 << 8) -#define			AT91_SSC_START_HIGH_RF		(3 << 8) -#define			AT91_SSC_START_FALLING_RF	(4 << 8) -#define			AT91_SSC_START_RISING_RF	(5 << 8) -#define			AT91_SSC_START_LEVEL_RF		(6 << 8) -#define			AT91_SSC_START_EDGE_RF		(7 << 8) -#define		AT91_SSC_STOP		(1    << 12)	/* Receive Stop Selection [AT91SAM9261 only] */ -#define		AT91_SSC_STTDLY		(0xff << 16)	/* Start Delay */ -#define		AT91_SSC_PERIOD		(0xff << 24)	/* Period Divider Selection */ - -#define AT91_SSC_RFMR		0x14	/* Receive Frame Mode Register */ -#define		AT91_SSC_DATALEN	(0x1f <<  0)	/* Data Length */ -#define		AT91_SSC_LOOP		(1    <<  5)	/* Loop Mode */ -#define		AT91_SSC_MSBF		(1    <<  7)	/* Most Significant Bit First */ -#define		AT91_SSC_DATNB		(0xf  <<  8)	/* Data Number per Frame */ -#define		AT91_SSC_FSLEN		(0xf  << 16)	/* Frame Sync Length */ -#define		AT91_SSC_FSOS		(7    << 20)	/* Frame Sync Output Selection */ -#define			AT91_SSC_FSOS_NONE		(0 << 20) -#define			AT91_SSC_FSOS_NEGATIVE		(1 << 20) -#define			AT91_SSC_FSOS_POSITIVE		(2 << 20) -#define			AT91_SSC_FSOS_LOW		(3 << 20) -#define			AT91_SSC_FSOS_HIGH		(4 << 20) -#define			AT91_SSC_FSOS_TOGGLE		(5 << 20) -#define		AT91_SSC_FSEDGE		(1    << 24)	/* Frame Sync Edge Detection */ -#define			AT91_SSC_FSEDGE_POSITIVE	(0 << 24) -#define			AT91_SSC_FSEDGE_NEGATIVE	(1 << 24) - -#define AT91_SSC_TCMR		0x18	/* Transmit Clock Mode Register */ -#define AT91_SSC_TFMR		0x1c	/* Transmit Fram Mode Register */ -#define		AT91_SSC_DATDEF		(1 <<  5)	/* Data Default Value */ -#define		AT91_SSC_FSDEN		(1 << 23)	/* Frame Sync Data Enable */ - -#define AT91_SSC_RHR		0x20	/* Receive Holding Register */ -#define AT91_SSC_THR		0x24	/* Transmit Holding Register */ -#define AT91_SSC_RSHR		0x30	/* Receive Sync Holding Register */ -#define AT91_SSC_TSHR		0x34	/* Transmit Sync Holding Register */ - -#define AT91_SSC_RC0R		0x38	/* Receive Compare 0 Register [AT91SAM9261 only] */ -#define AT91_SSC_RC1R		0x3c	/* Receive Compare 1 Register [AT91SAM9261 only] */ - -#define AT91_SSC_SR		0x40	/* Status Register */ -#define		AT91_SSC_TXRDY		(1 <<  0)	/* Transmit Ready */ -#define		AT91_SSC_TXEMPTY	(1 <<  1)	/* Transmit Empty */ -#define		AT91_SSC_ENDTX		(1 <<  2)	/* End of Transmission */ -#define		AT91_SSC_TXBUFE		(1 <<  3)	/* Transmit Buffer Empty */ -#define		AT91_SSC_RXRDY		(1 <<  4)	/* Receive Ready */ -#define		AT91_SSC_OVRUN		(1 <<  5)	/* Receive Overrun */ -#define		AT91_SSC_ENDRX		(1 <<  6)	/* End of Reception */ -#define		AT91_SSC_RXBUFF		(1 <<  7)	/* Receive Buffer Full */ -#define		AT91_SSC_CP0		(1 <<  8)	/* Compare 0 [AT91SAM9261 only] */ -#define		AT91_SSC_CP1		(1 <<  9)	/* Compare 1 [AT91SAM9261 only] */ -#define		AT91_SSC_TXSYN		(1 << 10)	/* Transmit Sync */ -#define		AT91_SSC_RXSYN		(1 << 11)	/* Receive Sync */ -#define		AT91_SSC_TXENA		(1 << 16)	/* Transmit Enable */ -#define		AT91_SSC_RXENA		(1 << 17)	/* Receive Enable */ - -#define AT91_SSC_IER		0x44	/* Interrupt Enable Register */ -#define AT91_SSC_IDR		0x48	/* Interrupt Disable Register */ -#define AT91_SSC_IMR		0x4c	/* Interrupt Mask Register */ - -#endif diff --git a/arch/arm/mach-at91/include/mach/entry-macro.S b/arch/arm/mach-at91/include/mach/entry-macro.S deleted file mode 100644 index 903bf205a33..00000000000 --- a/arch/arm/mach-at91/include/mach/entry-macro.S +++ /dev/null @@ -1,27 +0,0 @@ -/* - * arch/arm/mach-at91/include/mach/entry-macro.S - * - *  Copyright (C) 2003-2005 SAN People - * - * Low-level IRQ helper macros for AT91RM9200 platforms - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#include <mach/hardware.h> -#include <mach/at91_aic.h> - -	.macro  get_irqnr_preamble, base, tmp -	ldr	\base, =at91_aic_base		@ base virtual address of AIC peripheral -	ldr	\base, [\base] -	.endm - -	.macro	get_irqnr_and_base, irqnr, irqstat, base, tmp -	ldr	\irqnr, [\base, #AT91_AIC_IVR]		@ read IRQ vector register: de-asserts nIRQ to processor (and clears interrupt) -	ldr	\irqstat, [\base, #AT91_AIC_ISR]	@ read interrupt source number -	teq	\irqstat, #0				@ ISR is 0 when no current interrupt, or spurious interrupt -	streq	\tmp, [\base, #AT91_AIC_EOICR]		@ not going to be handled further, then ACK it now. -	.endm - diff --git a/arch/arm/mach-at91/include/mach/irqs.h b/arch/arm/mach-at91/include/mach/irqs.h deleted file mode 100644 index ac8b7dfc85e..00000000000 --- a/arch/arm/mach-at91/include/mach/irqs.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * arch/arm/mach-at91/include/mach/irqs.h - * - *  Copyright (C) 2004 SAN People - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ - -#ifndef __ASM_ARCH_IRQS_H -#define __ASM_ARCH_IRQS_H - -#include <linux/io.h> -#include <mach/at91_aic.h> - -#define NR_AIC_IRQS 32 - - -/* - * Acknowledge interrupt with AIC after interrupt has been handled. - *   (by kernel/irq.c) - */ -#define irq_finish(irq) do { at91_aic_write(AT91_AIC_EOICR, 0); } while (0) - - -/* - * IRQ interrupt symbols are the AT91xxx_ID_* symbols - * for IRQs handled directly through the AIC, or else the AT91_PIN_* - * symbols in gpio.h for ones handled indirectly as GPIOs. - * We make provision for 5 banks of GPIO. - */ -#define	NR_IRQS		(NR_AIC_IRQS + (5 * 32)) - -/* FIQ is AIC source 0. */ -#define FIQ_START AT91_ID_FIQ - -#endif diff --git a/arch/arm/mach-at91/irq.c b/arch/arm/mach-at91/irq.c index cfcfcbe3626..1e02c0e49dc 100644 --- a/arch/arm/mach-at91/irq.c +++ b/arch/arm/mach-at91/irq.c @@ -23,6 +23,7 @@  #include <linux/init.h>  #include <linux/module.h>  #include <linux/mm.h> +#include <linux/bitmap.h>  #include <linux/types.h>  #include <linux/irq.h>  #include <linux/of.h> @@ -30,38 +31,218 @@  #include <linux/of_irq.h>  #include <linux/irqdomain.h>  #include <linux/err.h> +#include <linux/slab.h>  #include <mach/hardware.h>  #include <asm/irq.h>  #include <asm/setup.h> +#include <asm/exception.h>  #include <asm/mach/arch.h>  #include <asm/mach/irq.h>  #include <asm/mach/map.h> +#include <mach/at91_aic.h> +  void __iomem *at91_aic_base;  static struct irq_domain *at91_aic_domain;  static struct device_node *at91_aic_np; +static unsigned int n_irqs = NR_AIC_IRQS; +static unsigned long at91_aic_caps = 0; + +/* AIC5 introduces a Source Select Register */ +#define AT91_AIC_CAP_AIC5	(1 << 0) +#define has_aic5()		(at91_aic_caps & AT91_AIC_CAP_AIC5) + +#ifdef CONFIG_PM + +static unsigned long *wakeups; +static unsigned long *backups; + +#define set_backup(bit) set_bit(bit, backups) +#define clear_backup(bit) clear_bit(bit, backups) + +static int at91_aic_pm_init(void) +{ +	backups = kzalloc(BITS_TO_LONGS(n_irqs) * sizeof(*backups), GFP_KERNEL); +	if (!backups) +		return -ENOMEM; + +	wakeups = kzalloc(BITS_TO_LONGS(n_irqs) * sizeof(*backups), GFP_KERNEL); +	if (!wakeups) { +		kfree(backups); +		return -ENOMEM; +	} + +	return 0; +} + +static int at91_aic_set_wake(struct irq_data *d, unsigned value) +{ +	if (unlikely(d->hwirq >= n_irqs)) +		return -EINVAL; + +	if (value) +		set_bit(d->hwirq, wakeups); +	else +		clear_bit(d->hwirq, wakeups); + +	return 0; +} + +void at91_irq_suspend(void) +{ +	int i = 0, bit; + +	if (has_aic5()) { +		/* disable enabled irqs */ +		while ((bit = find_next_bit(backups, n_irqs, i)) < n_irqs) { +			at91_aic_write(AT91_AIC5_SSR, +				       bit & AT91_AIC5_INTSEL_MSK); +			at91_aic_write(AT91_AIC5_IDCR, 1); +			i = bit; +		} +		/* enable wakeup irqs */ +		i = 0; +		while ((bit = find_next_bit(wakeups, n_irqs, i)) < n_irqs) { +			at91_aic_write(AT91_AIC5_SSR, +				       bit & AT91_AIC5_INTSEL_MSK); +			at91_aic_write(AT91_AIC5_IECR, 1); +			i = bit; +		} +	} else { +		at91_aic_write(AT91_AIC_IDCR, *backups); +		at91_aic_write(AT91_AIC_IECR, *wakeups); +	} +} + +void at91_irq_resume(void) +{ +	int i = 0, bit; + +	if (has_aic5()) { +		/* disable wakeup irqs */ +		while ((bit = find_next_bit(wakeups, n_irqs, i)) < n_irqs) { +			at91_aic_write(AT91_AIC5_SSR, +				       bit & AT91_AIC5_INTSEL_MSK); +			at91_aic_write(AT91_AIC5_IDCR, 1); +			i = bit; +		} +		/* enable irqs disabled for suspend */ +		i = 0; +		while ((bit = find_next_bit(backups, n_irqs, i)) < n_irqs) { +			at91_aic_write(AT91_AIC5_SSR, +				       bit & AT91_AIC5_INTSEL_MSK); +			at91_aic_write(AT91_AIC5_IECR, 1); +			i = bit; +		} +	} else { +		at91_aic_write(AT91_AIC_IDCR, *wakeups); +		at91_aic_write(AT91_AIC_IECR, *backups); +	} +} + +#else +static inline int at91_aic_pm_init(void) +{ +	return 0; +} + +#define set_backup(bit) +#define clear_backup(bit) +#define at91_aic_set_wake	NULL + +#endif /* CONFIG_PM */ + +asmlinkage void __exception_irq_entry +at91_aic_handle_irq(struct pt_regs *regs) +{ +	u32 irqnr; +	u32 irqstat; + +	irqnr = at91_aic_read(AT91_AIC_IVR); +	irqstat = at91_aic_read(AT91_AIC_ISR); + +	/* +	 * ISR value is 0 when there is no current interrupt or when there is +	 * a spurious interrupt +	 */ +	if (!irqstat) +		at91_aic_write(AT91_AIC_EOICR, 0); +	else +		handle_IRQ(irqnr, regs); +} + +asmlinkage void __exception_irq_entry +at91_aic5_handle_irq(struct pt_regs *regs) +{ +	u32 irqnr; +	u32 irqstat; + +	irqnr = at91_aic_read(AT91_AIC5_IVR); +	irqstat = at91_aic_read(AT91_AIC5_ISR); + +	if (!irqstat) +		at91_aic_write(AT91_AIC5_EOICR, 0); +	else +		handle_IRQ(irqnr, regs); +}  static void at91_aic_mask_irq(struct irq_data *d)  {  	/* Disable interrupt on AIC */  	at91_aic_write(AT91_AIC_IDCR, 1 << d->hwirq); +	/* Update ISR cache */ +	clear_backup(d->hwirq); +} + +static void __maybe_unused at91_aic5_mask_irq(struct irq_data *d) +{ +	/* Disable interrupt on AIC5 */ +	at91_aic_write(AT91_AIC5_SSR, d->hwirq & AT91_AIC5_INTSEL_MSK); +	at91_aic_write(AT91_AIC5_IDCR, 1); +	/* Update ISR cache */ +	clear_backup(d->hwirq);  }  static void at91_aic_unmask_irq(struct irq_data *d)  {  	/* Enable interrupt on AIC */  	at91_aic_write(AT91_AIC_IECR, 1 << d->hwirq); +	/* Update ISR cache */ +	set_backup(d->hwirq); +} + +static void __maybe_unused at91_aic5_unmask_irq(struct irq_data *d) +{ +	/* Enable interrupt on AIC5 */ +	at91_aic_write(AT91_AIC5_SSR, d->hwirq & AT91_AIC5_INTSEL_MSK); +	at91_aic_write(AT91_AIC5_IECR, 1); +	/* Update ISR cache */ +	set_backup(d->hwirq);  } -unsigned int at91_extern_irq; +static void at91_aic_eoi(struct irq_data *d) +{ +	/* +	 * Mark end-of-interrupt on AIC, the controller doesn't care about +	 * the value written. Moreover it's a write-only register. +	 */ +	at91_aic_write(AT91_AIC_EOICR, 0); +} -#define is_extern_irq(hwirq) ((1 << (hwirq)) & at91_extern_irq) +static void __maybe_unused at91_aic5_eoi(struct irq_data *d) +{ +	at91_aic_write(AT91_AIC5_EOICR, 0); +} -static int at91_aic_set_type(struct irq_data *d, unsigned type) +unsigned long *at91_extern_irq; + +#define is_extern_irq(hwirq) test_bit(hwirq, at91_extern_irq) + +static int at91_aic_compute_srctype(struct irq_data *d, unsigned type)  { -	unsigned int smr, srctype; +	int srctype;  	switch (type) {  	case IRQ_TYPE_LEVEL_HIGH: @@ -74,65 +255,51 @@ static int at91_aic_set_type(struct irq_data *d, unsigned type)  		if ((d->hwirq == AT91_ID_FIQ) || is_extern_irq(d->hwirq))		/* only supported on external interrupts */  			srctype = AT91_AIC_SRCTYPE_LOW;  		else -			return -EINVAL; +			srctype = -EINVAL;  		break;  	case IRQ_TYPE_EDGE_FALLING:  		if ((d->hwirq == AT91_ID_FIQ) || is_extern_irq(d->hwirq))		/* only supported on external interrupts */  			srctype = AT91_AIC_SRCTYPE_FALLING;  		else -			return -EINVAL; +			srctype = -EINVAL;  		break;  	default: -		return -EINVAL; +		srctype = -EINVAL;  	} -	smr = at91_aic_read(AT91_AIC_SMR(d->hwirq)) & ~AT91_AIC_SRCTYPE; -	at91_aic_write(AT91_AIC_SMR(d->hwirq), smr | srctype); -	return 0; +	return srctype;  } -#ifdef CONFIG_PM - -static u32 wakeups; -static u32 backups; - -static int at91_aic_set_wake(struct irq_data *d, unsigned value) +static int at91_aic_set_type(struct irq_data *d, unsigned type)  { -	if (unlikely(d->hwirq >= NR_AIC_IRQS)) -		return -EINVAL; +	unsigned int smr; +	int srctype; -	if (value) -		wakeups |= (1 << d->hwirq); -	else -		wakeups &= ~(1 << d->hwirq); +	srctype = at91_aic_compute_srctype(d, type); +	if (srctype < 0) +		return srctype; -	return 0; -} - -void at91_irq_suspend(void) -{ -	backups = at91_aic_read(AT91_AIC_IMR); -	at91_aic_write(AT91_AIC_IDCR, backups); -	at91_aic_write(AT91_AIC_IECR, wakeups); -} +	if (has_aic5()) { +		at91_aic_write(AT91_AIC5_SSR, +			       d->hwirq & AT91_AIC5_INTSEL_MSK); +		smr = at91_aic_read(AT91_AIC5_SMR) & ~AT91_AIC_SRCTYPE; +		at91_aic_write(AT91_AIC5_SMR, smr | srctype); +	} else { +		smr = at91_aic_read(AT91_AIC_SMR(d->hwirq)) +		      & ~AT91_AIC_SRCTYPE; +		at91_aic_write(AT91_AIC_SMR(d->hwirq), smr | srctype); +	} -void at91_irq_resume(void) -{ -	at91_aic_write(AT91_AIC_IDCR, wakeups); -	at91_aic_write(AT91_AIC_IECR, backups); +	return 0;  } -#else -#define at91_aic_set_wake	NULL -#endif -  static struct irq_chip at91_aic_chip = {  	.name		= "AIC", -	.irq_ack	= at91_aic_mask_irq,  	.irq_mask	= at91_aic_mask_irq,  	.irq_unmask	= at91_aic_unmask_irq,  	.irq_set_type	= at91_aic_set_type,  	.irq_set_wake	= at91_aic_set_wake, +	.irq_eoi	= at91_aic_eoi,  };  static void __init at91_aic_hw_init(unsigned int spu_vector) @@ -161,41 +328,172 @@ static void __init at91_aic_hw_init(unsigned int spu_vector)  	at91_aic_write(AT91_AIC_ICCR, 0xFFFFFFFF);  } +static void __init __maybe_unused at91_aic5_hw_init(unsigned int spu_vector) +{ +	int i; + +	/* +	 * Perform 8 End Of Interrupt Command to make sure AIC +	 * will not Lock out nIRQ +	 */ +	for (i = 0; i < 8; i++) +		at91_aic_write(AT91_AIC5_EOICR, 0); + +	/* +	 * Spurious Interrupt ID in Spurious Vector Register. +	 * When there is no current interrupt, the IRQ Vector Register +	 * reads the value stored in AIC_SPU +	 */ +	at91_aic_write(AT91_AIC5_SPU, spu_vector); + +	/* No debugging in AIC: Debug (Protect) Control Register */ +	at91_aic_write(AT91_AIC5_DCR, 0); + +	/* Disable and clear all interrupts initially */ +	for (i = 0; i < n_irqs; i++) { +		at91_aic_write(AT91_AIC5_SSR, i & AT91_AIC5_INTSEL_MSK); +		at91_aic_write(AT91_AIC5_IDCR, 1); +		at91_aic_write(AT91_AIC5_ICCR, 1); +	} +} +  #if defined(CONFIG_OF) +static unsigned int *at91_aic_irq_priorities; +  static int at91_aic_irq_map(struct irq_domain *h, unsigned int virq,  							irq_hw_number_t hw)  {  	/* Put virq number in Source Vector Register */  	at91_aic_write(AT91_AIC_SVR(hw), virq); -	/* Active Low interrupt, without priority */ -	at91_aic_write(AT91_AIC_SMR(hw), AT91_AIC_SRCTYPE_LOW); +	/* Active Low interrupt, with priority */ +	at91_aic_write(AT91_AIC_SMR(hw), +		       AT91_AIC_SRCTYPE_LOW | at91_aic_irq_priorities[hw]); -	irq_set_chip_and_handler(virq, &at91_aic_chip, handle_level_irq); +	irq_set_chip_and_handler(virq, &at91_aic_chip, handle_fasteoi_irq);  	set_irq_flags(virq, IRQF_VALID | IRQF_PROBE);  	return 0;  } +static int at91_aic5_irq_map(struct irq_domain *h, unsigned int virq, +		irq_hw_number_t hw) +{ +	at91_aic_write(AT91_AIC5_SSR, hw & AT91_AIC5_INTSEL_MSK); + +	/* Put virq number in Source Vector Register */ +	at91_aic_write(AT91_AIC5_SVR, virq); + +	/* Active Low interrupt, with priority */ +	at91_aic_write(AT91_AIC5_SMR, +		       AT91_AIC_SRCTYPE_LOW | at91_aic_irq_priorities[hw]); + +	irq_set_chip_and_handler(virq, &at91_aic_chip, handle_fasteoi_irq); +	set_irq_flags(virq, IRQF_VALID | IRQF_PROBE); + +	return 0; +} + +static int at91_aic_irq_domain_xlate(struct irq_domain *d, struct device_node *ctrlr, +				const u32 *intspec, unsigned int intsize, +				irq_hw_number_t *out_hwirq, unsigned int *out_type) +{ +	if (WARN_ON(intsize < 3)) +		return -EINVAL; +	if (WARN_ON(intspec[0] >= n_irqs)) +		return -EINVAL; +	if (WARN_ON((intspec[2] < AT91_AIC_IRQ_MIN_PRIORITY) +		    || (intspec[2] > AT91_AIC_IRQ_MAX_PRIORITY))) +		return -EINVAL; + +	*out_hwirq = intspec[0]; +	*out_type = intspec[1] & IRQ_TYPE_SENSE_MASK; +	at91_aic_irq_priorities[*out_hwirq] = intspec[2]; + +	return 0; +} +  static struct irq_domain_ops at91_aic_irq_ops = {  	.map	= at91_aic_irq_map, -	.xlate	= irq_domain_xlate_twocell, +	.xlate	= at91_aic_irq_domain_xlate,  }; -int __init at91_aic_of_init(struct device_node *node, -				     struct device_node *parent) +int __init at91_aic_of_common_init(struct device_node *node, +				    struct device_node *parent)  { +	struct property *prop; +	const __be32 *p; +	u32 val; + +	at91_extern_irq = kzalloc(BITS_TO_LONGS(n_irqs) +				  * sizeof(*at91_extern_irq), GFP_KERNEL); +	if (!at91_extern_irq) +		return -ENOMEM; + +	if (at91_aic_pm_init()) { +		kfree(at91_extern_irq); +		return -ENOMEM; +	} + +	at91_aic_irq_priorities = kzalloc(n_irqs +					  * sizeof(*at91_aic_irq_priorities), +					  GFP_KERNEL); +	if (!at91_aic_irq_priorities) +		return -ENOMEM; +  	at91_aic_base = of_iomap(node, 0);  	at91_aic_np = node; -	at91_aic_domain = irq_domain_add_linear(at91_aic_np, NR_AIC_IRQS, +	at91_aic_domain = irq_domain_add_linear(at91_aic_np, n_irqs,  						&at91_aic_irq_ops, NULL);  	if (!at91_aic_domain)  		panic("Unable to add AIC irq domain (DT)\n"); +	of_property_for_each_u32(node, "atmel,external-irqs", prop, p, val) { +		if (val >= n_irqs) +			pr_warn("AIC: external irq %d >= %d skip it\n", +				val, n_irqs); +		else +			set_bit(val, at91_extern_irq); +	} +  	irq_set_default_host(at91_aic_domain); -	at91_aic_hw_init(NR_AIC_IRQS); +	return 0; +} + +int __init at91_aic_of_init(struct device_node *node, +				     struct device_node *parent) +{ +	int err; + +	err = at91_aic_of_common_init(node, parent); +	if (err) +		return err; + +	at91_aic_hw_init(n_irqs); + +	return 0; +} + +int __init at91_aic5_of_init(struct device_node *node, +				     struct device_node *parent) +{ +	int err; + +	at91_aic_caps |= AT91_AIC_CAP_AIC5; +	n_irqs = NR_AIC5_IRQS; +	at91_aic_chip.irq_ack           = at91_aic5_mask_irq; +	at91_aic_chip.irq_mask		= at91_aic5_mask_irq; +	at91_aic_chip.irq_unmask	= at91_aic5_unmask_irq; +	at91_aic_chip.irq_eoi		= at91_aic5_eoi; +	at91_aic_irq_ops.map		= at91_aic5_irq_map; + +	err = at91_aic_of_common_init(node, parent); +	if (err) +		return err; + +	at91_aic5_hw_init(n_irqs);  	return 0;  } @@ -204,22 +502,25 @@ int __init at91_aic_of_init(struct device_node *node,  /*   * Initialize the AIC interrupt controller.   */ -void __init at91_aic_init(unsigned int priority[NR_AIC_IRQS]) +void __init at91_aic_init(unsigned int *priority)  {  	unsigned int i;  	int irq_base; +	if (at91_aic_pm_init()) +		panic("Unable to allocate bit maps\n"); +  	at91_aic_base = ioremap(AT91_AIC, 512);  	if (!at91_aic_base)  		panic("Unable to ioremap AIC registers\n");  	/* Add irq domain for AIC */ -	irq_base = irq_alloc_descs(-1, 0, NR_AIC_IRQS, 0); +	irq_base = irq_alloc_descs(-1, 0, n_irqs, 0);  	if (irq_base < 0) {  		WARN(1, "Cannot allocate irq_descs, assuming pre-allocated\n");  		irq_base = 0;  	} -	at91_aic_domain = irq_domain_add_legacy(at91_aic_np, NR_AIC_IRQS, +	at91_aic_domain = irq_domain_add_legacy(at91_aic_np, n_irqs,  						irq_base, 0,  						&irq_domain_simple_ops, NULL); @@ -232,15 +533,14 @@ void __init at91_aic_init(unsigned int priority[NR_AIC_IRQS])  	 * The IVR is used by macro get_irqnr_and_base to read and verify.  	 * The irq number is NR_AIC_IRQS when a spurious interrupt has occurred.  	 */ -	for (i = 0; i < NR_AIC_IRQS; i++) { +	for (i = 0; i < n_irqs; i++) {  		/* Put hardware irq number in Source Vector Register: */ -		at91_aic_write(AT91_AIC_SVR(i), i); +		at91_aic_write(AT91_AIC_SVR(i), NR_IRQS_LEGACY + i);  		/* Active Low interrupt, with the specified priority */  		at91_aic_write(AT91_AIC_SMR(i), AT91_AIC_SRCTYPE_LOW | priority[i]); - -		irq_set_chip_and_handler(i, &at91_aic_chip, handle_level_irq); +		irq_set_chip_and_handler(NR_IRQS_LEGACY + i, &at91_aic_chip, handle_fasteoi_irq);  		set_irq_flags(i, IRQF_VALID | IRQF_PROBE);  	} -	at91_aic_hw_init(NR_AIC_IRQS); +	at91_aic_hw_init(n_irqs);  } diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c index 1bfaad62873..2c2d86505a5 100644 --- a/arch/arm/mach-at91/pm.c +++ b/arch/arm/mach-at91/pm.c @@ -25,6 +25,7 @@  #include <asm/mach/time.h>  #include <asm/mach/irq.h> +#include <mach/at91_aic.h>  #include <mach/at91_pmc.h>  #include <mach/cpu.h> diff --git a/arch/arm/mach-clps711x/common.c b/arch/arm/mach-clps711x/common.c index c965fd8eb31..f15293bd797 100644 --- a/arch/arm/mach-clps711x/common.c +++ b/arch/arm/mach-clps711x/common.c @@ -26,7 +26,6 @@  #include <linux/io.h>  #include <linux/irq.h>  #include <linux/sched.h> -#include <linux/timex.h>  #include <asm/sizes.h>  #include <mach/hardware.h> @@ -188,7 +187,6 @@ static struct irqaction clps711x_timer_irq = {  static void __init clps711x_timer_init(void)  { -	struct timespec tv;  	unsigned int syscon;  	syscon = clps_readl(SYSCON1); @@ -198,10 +196,6 @@ static void __init clps711x_timer_init(void)  	clps_writel(LATCH-1, TC2D); /* 512kHz / 100Hz - 1 */  	setup_irq(IRQ_TC2OI, &clps711x_timer_irq); - -	tv.tv_nsec = 0; -	tv.tv_sec = clps_readl(RTCDR); -	do_settimeofday(&tv);  }  struct sys_timer clps711x_timer = { diff --git a/arch/arm/mach-clps711x/include/mach/memory.h b/arch/arm/mach-clps711x/include/mach/memory.h index 3a032a67725..fc0e028d940 100644 --- a/arch/arm/mach-clps711x/include/mach/memory.h +++ b/arch/arm/mach-clps711x/include/mach/memory.h @@ -25,26 +25,6 @@   */  #define PLAT_PHYS_OFFSET	UL(0xc0000000) -#if !defined(CONFIG_ARCH_CDB89712) && !defined (CONFIG_ARCH_AUTCPU12) - -#define __virt_to_bus(x)	((x) - PAGE_OFFSET) -#define __bus_to_virt(x)	((x) + PAGE_OFFSET) -#define __pfn_to_bus(x)		(__pfn_to_phys(x) - PHYS_OFFSET) -#define __bus_to_pfn(x)		__phys_to_pfn((x) + PHYS_OFFSET) - -#endif - - -/* - * Like the SA1100, the EDB7211 has a large gap between physical RAM - * banks.  In 2.2, the Psion (CL-PS7110) port added custom support for - * discontiguous physical memory.  In 2.4, we can use the standard - * Linux NUMA support. - * - * This is not necessary for EP7211 implementations with only one used - * memory bank.  For those systems, simply undefine CONFIG_DISCONTIGMEM. - */ -  /*   * The PS7211 allows up to 256MB max per DRAM bank, but the EDB7211   * uses only one of the two banks (bank #1).  However, even within @@ -54,23 +34,6 @@   * them, so we use 24 for the node max shift to get 16MB node sizes.   */ -/* - * Because of the wide memory address space between physical RAM banks on the  - * SA1100, it's much more convenient to use Linux's NUMA support to implement - * our memory map representation.  Assuming all memory nodes have equal access  - * characteristics, we then have generic discontiguous memory support. - * - * Of course, all this isn't mandatory for SA1100 implementations with only - * one used memory bank.  For those, simply undefine CONFIG_DISCONTIGMEM. - * - * The nodes are matched with the physical memory bank addresses which are  - * incidentally the same as virtual addresses. - *  - * 	node 0:  0xc0000000 - 0xc7ffffff - * 	node 1:  0xc8000000 - 0xcfffffff - * 	node 2:  0xd0000000 - 0xd7ffffff - * 	node 3:  0xd8000000 - 0xdfffffff - */  #define SECTION_SIZE_BITS	24  #define MAX_PHYSMEM_BITS	32 diff --git a/arch/arm/mach-clps711x/p720t.c b/arch/arm/mach-clps711x/p720t.c index 42ee8f33eaf..f266d90b9ef 100644 --- a/arch/arm/mach-clps711x/p720t.c +++ b/arch/arm/mach-clps711x/p720t.c @@ -86,17 +86,7 @@ static void __init p720t_map_io(void)  	iotable_init(p720t_io_desc, ARRAY_SIZE(p720t_io_desc));  } -MACHINE_START(P720T, "ARM-Prospector720T") -	/* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ -	.atag_offset	= 0x100, -	.fixup		= fixup_p720t, -	.map_io		= p720t_map_io, -	.init_irq	= clps711x_init_irq, -	.timer		= &clps711x_timer, -	.restart	= clps711x_restart, -MACHINE_END - -static int p720t_hw_init(void) +static void __init p720t_init_early(void)  {  	/*  	 * Power down as much as possible in case we don't @@ -111,13 +101,19 @@ static int p720t_hw_init(void)  	PLD_CODEC = 0;  	PLD_TCH   = 0;  	PLD_SPI   = 0; -#ifndef CONFIG_DEBUG_LL -	PLD_COM2  = 0; -	PLD_COM1  = 0; -#endif - -	return 0; +	if (!IS_ENABLED(CONFIG_DEBUG_LL)) { +		PLD_COM2 = 0; +		PLD_COM1 = 0; +	}  } -__initcall(p720t_hw_init); - +MACHINE_START(P720T, "ARM-Prospector720T") +	/* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ +	.atag_offset	= 0x100, +	.fixup		= fixup_p720t, +	.init_early	= p720t_init_early, +	.map_io		= p720t_map_io, +	.init_irq	= clps711x_init_irq, +	.timer		= &clps711x_timer, +	.restart	= clps711x_restart, +MACHINE_END diff --git a/arch/arm/mach-davinci/include/mach/dm365.h b/arch/arm/mach-davinci/include/mach/dm365.h deleted file mode 100644 index b9bf3d6a442..00000000000 --- a/arch/arm/mach-davinci/include/mach/dm365.h +++ /dev/null @@ -1 +0,0 @@ -/* empty, remove once unused */ diff --git a/arch/arm/mach-davinci/include/mach/dm646x.h b/arch/arm/mach-davinci/include/mach/dm646x.h deleted file mode 100644 index b9bf3d6a442..00000000000 --- a/arch/arm/mach-davinci/include/mach/dm646x.h +++ /dev/null @@ -1 +0,0 @@ -/* empty, remove once unused */ diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c index 742edd3bbec..0ec1a91388c 100644 --- a/arch/arm/mach-exynos/common.c +++ b/arch/arm/mach-exynos/common.c @@ -712,31 +712,6 @@ static int __init exynos4_l2x0_cache_init(void)  early_initcall(exynos4_l2x0_cache_init);  #endif -static int __init exynos5_l2_cache_init(void) -{ -	unsigned int val; - -	if (!soc_is_exynos5250()) -		return 0; - -	asm volatile("mrc p15, 0, %0, c1, c0, 0\n" -		     "bic %0, %0, #(1 << 2)\n"	/* cache disable */ -		     "mcr p15, 0, %0, c1, c0, 0\n" -		     "mrc p15, 1, %0, c9, c0, 2\n" -		     : "=r"(val)); - -	val |= (1 << 9) | (1 << 5) | (2 << 6) | (2 << 0); - -	asm volatile("mcr p15, 1, %0, c9, c0, 2\n" : : "r"(val)); -	asm volatile("mrc p15, 0, %0, c1, c0, 0\n" -		     "orr %0, %0, #(1 << 2)\n"	/* cache enable */ -		     "mcr p15, 0, %0, c1, c0, 0\n" -		     : : "r"(val)); - -	return 0; -} -early_initcall(exynos5_l2_cache_init); -  static int __init exynos_init(void)  {  	printk(KERN_INFO "EXYNOS: Initializing architecture\n"); diff --git a/arch/arm/mach-exynos/include/mach/spi-clocks.h b/arch/arm/mach-exynos/include/mach/spi-clocks.h deleted file mode 100644 index c71a5fba6a8..00000000000 --- a/arch/arm/mach-exynos/include/mach/spi-clocks.h +++ /dev/null @@ -1,16 +0,0 @@ -/* linux/arch/arm/mach-exynos4/include/mach/spi-clocks.h - * - * Copyright (C) 2011 Samsung Electronics Co. Ltd. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef __ASM_ARCH_SPI_CLKS_H -#define __ASM_ARCH_SPI_CLKS_H __FILE__ - -/* Must source from SCLK_SPI */ -#define EXYNOS_SPI_SRCCLK_SCLK		0 - -#endif /* __ASM_ARCH_SPI_CLKS_H */ diff --git a/arch/arm/mach-exynos/mach-nuri.c b/arch/arm/mach-exynos/mach-nuri.c index 656f8fc9add..f3b328d0aff 100644 --- a/arch/arm/mach-exynos/mach-nuri.c +++ b/arch/arm/mach-exynos/mach-nuri.c @@ -50,7 +50,6 @@  #include <plat/gpio-cfg.h>  #include <plat/iic.h>  #include <plat/mfc.h> -#include <plat/pd.h>  #include <plat/fimc-core.h>  #include <plat/camport.h>  #include <plat/mipi_csis.h> diff --git a/arch/arm/mach-exynos/mach-origen.c b/arch/arm/mach-exynos/mach-origen.c index f5572be9d7b..873c708fd34 100644 --- a/arch/arm/mach-exynos/mach-origen.c +++ b/arch/arm/mach-exynos/mach-origen.c @@ -38,7 +38,6 @@  #include <plat/clock.h>  #include <plat/gpio-cfg.h>  #include <plat/backlight.h> -#include <plat/pd.h>  #include <plat/fb.h>  #include <plat/mfc.h> diff --git a/arch/arm/mach-exynos/mach-smdkv310.c b/arch/arm/mach-exynos/mach-smdkv310.c index 262e9e446a9..5fb209c4a59 100644 --- a/arch/arm/mach-exynos/mach-smdkv310.c +++ b/arch/arm/mach-exynos/mach-smdkv310.c @@ -34,7 +34,6 @@  #include <plat/keypad.h>  #include <plat/sdhci.h>  #include <plat/iic.h> -#include <plat/pd.h>  #include <plat/gpio-cfg.h>  #include <plat/backlight.h>  #include <plat/mfc.h> diff --git a/arch/arm/mach-exynos/mach-universal_c210.c b/arch/arm/mach-exynos/mach-universal_c210.c index cd92fa86ba4..68719f57dce 100644 --- a/arch/arm/mach-exynos/mach-universal_c210.c +++ b/arch/arm/mach-exynos/mach-universal_c210.c @@ -39,7 +39,6 @@  #include <plat/fb.h>  #include <plat/mfc.h>  #include <plat/sdhci.h> -#include <plat/pd.h>  #include <plat/regs-fb-v4.h>  #include <plat/fimc-core.h>  #include <plat/s5p-time.h> diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index eff4db5de0d..0da882a3c06 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -158,7 +158,6 @@ config MACH_MX25_3DS  	select IMX_HAVE_PLATFORM_IMX2_WDT  	select IMX_HAVE_PLATFORM_IMXDI_RTC  	select IMX_HAVE_PLATFORM_IMX_I2C -	select IMX_HAVE_PLATFORM_IMX_SSI  	select IMX_HAVE_PLATFORM_IMX_FB  	select IMX_HAVE_PLATFORM_IMX_KEYPAD  	select IMX_HAVE_PLATFORM_IMX_UART diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c index e1a17ac7b3b..abb42e7453a 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c @@ -388,12 +388,9 @@ int __init mx6q_clocks_init(void)  			pr_err("i.MX6q clk %d: register failed with %ld\n",  				i, PTR_ERR(clk[i])); -	clk_register_clkdev(clk[mmdc_ch0_axi], NULL, "mmdc_ch0_axi"); -	clk_register_clkdev(clk[mmdc_ch1_axi], NULL, "mmdc_ch1_axi");  	clk_register_clkdev(clk[gpt_ipg], "ipg", "imx-gpt.0");  	clk_register_clkdev(clk[gpt_ipg_per], "per", "imx-gpt.0");  	clk_register_clkdev(clk[twd], NULL, "smp_twd"); -	clk_register_clkdev(clk[usboh3], NULL, "usboh3");  	clk_register_clkdev(clk[uart_serial], "per", "2020000.serial");  	clk_register_clkdev(clk[uart_ipg], "ipg", "2020000.serial");  	clk_register_clkdev(clk[uart_serial], "per", "21e8000.serial"); diff --git a/arch/arm/mach-imx/devices-imx21.h b/arch/arm/mach-imx/devices-imx21.h index 2628e0c474d..93ece55f75d 100644 --- a/arch/arm/mach-imx/devices-imx21.h +++ b/arch/arm/mach-imx/devices-imx21.h @@ -14,7 +14,7 @@ extern const struct imx_imx21_hcd_data imx21_imx21_hcd_data;  	imx_add_imx21_hcd(&imx21_imx21_hcd_data, pdata)  extern const struct imx_imx2_wdt_data imx21_imx2_wdt_data; -#define imx21_add_imx2_wdt(pdata)	\ +#define imx21_add_imx2_wdt()	\  	imx_add_imx2_wdt(&imx21_imx2_wdt_data)  extern const struct imx_imx_fb_data imx21_imx_fb_data; @@ -50,7 +50,7 @@ extern const struct imx_mxc_nand_data imx21_mxc_nand_data;  	imx_add_mxc_nand(&imx21_mxc_nand_data, pdata)  extern const struct imx_mxc_w1_data imx21_mxc_w1_data; -#define imx21_add_mxc_w1(pdata)	\ +#define imx21_add_mxc_w1()	\  	imx_add_mxc_w1(&imx21_mxc_w1_data)  extern const struct imx_spi_imx_data imx21_cspi_data[]; diff --git a/arch/arm/mach-imx/devices-imx25.h b/arch/arm/mach-imx/devices-imx25.h index efa0761c508..f8e03dd1f11 100644 --- a/arch/arm/mach-imx/devices-imx25.h +++ b/arch/arm/mach-imx/devices-imx25.h @@ -24,11 +24,11 @@ extern const struct imx_fsl_usb2_udc_data imx25_fsl_usb2_udc_data;  	imx_add_fsl_usb2_udc(&imx25_fsl_usb2_udc_data, pdata)  extern struct imx_imxdi_rtc_data imx25_imxdi_rtc_data; -#define imx25_add_imxdi_rtc(pdata)	\ +#define imx25_add_imxdi_rtc()	\  	imx_add_imxdi_rtc(&imx25_imxdi_rtc_data)  extern const struct imx_imx2_wdt_data imx25_imx2_wdt_data; -#define imx25_add_imx2_wdt(pdata)	\ +#define imx25_add_imx2_wdt()	\  	imx_add_imx2_wdt(&imx25_imx2_wdt_data)  extern const struct imx_imx_fb_data imx25_imx_fb_data; diff --git a/arch/arm/mach-imx/devices-imx27.h b/arch/arm/mach-imx/devices-imx27.h index 28537a5d904..436c5720fe6 100644 --- a/arch/arm/mach-imx/devices-imx27.h +++ b/arch/arm/mach-imx/devices-imx27.h @@ -18,7 +18,7 @@ extern const struct imx_fsl_usb2_udc_data imx27_fsl_usb2_udc_data;  	imx_add_fsl_usb2_udc(&imx27_fsl_usb2_udc_data, pdata)  extern const struct imx_imx2_wdt_data imx27_imx2_wdt_data; -#define imx27_add_imx2_wdt(pdata)	\ +#define imx27_add_imx2_wdt()	\  	imx_add_imx2_wdt(&imx27_imx2_wdt_data)  extern const struct imx_imx_fb_data imx27_imx_fb_data; @@ -50,7 +50,7 @@ extern const struct imx_imx_uart_1irq_data imx27_imx_uart_data[];  extern const struct imx_mx2_camera_data imx27_mx2_camera_data;  #define imx27_add_mx2_camera(pdata)	\  	imx_add_mx2_camera(&imx27_mx2_camera_data, pdata) -#define imx27_add_mx2_emmaprp(pdata)	\ +#define imx27_add_mx2_emmaprp()	\  	imx_add_mx2_emmaprp(&imx27_mx2_camera_data)  extern const struct imx_mxc_ehci_data imx27_mxc_ehci_otg_data; @@ -69,7 +69,7 @@ extern const struct imx_mxc_nand_data imx27_mxc_nand_data;  	imx_add_mxc_nand(&imx27_mxc_nand_data, pdata)  extern const struct imx_mxc_w1_data imx27_mxc_w1_data; -#define imx27_add_mxc_w1(pdata)	\ +#define imx27_add_mxc_w1()	\  	imx_add_mxc_w1(&imx27_mxc_w1_data)  extern const struct imx_spi_imx_data imx27_cspi_data[]; diff --git a/arch/arm/mach-imx/devices-imx31.h b/arch/arm/mach-imx/devices-imx31.h index 488e241a6db..13f533d0aa5 100644 --- a/arch/arm/mach-imx/devices-imx31.h +++ b/arch/arm/mach-imx/devices-imx31.h @@ -14,7 +14,7 @@ extern const struct imx_fsl_usb2_udc_data imx31_fsl_usb2_udc_data;  	imx_add_fsl_usb2_udc(&imx31_fsl_usb2_udc_data, pdata)  extern const struct imx_imx2_wdt_data imx31_imx2_wdt_data; -#define imx31_add_imx2_wdt(pdata)       \ +#define imx31_add_imx2_wdt()       \  	imx_add_imx2_wdt(&imx31_imx2_wdt_data)  extern const struct imx_imx_i2c_data imx31_imx_i2c_data[]; @@ -65,11 +65,11 @@ extern const struct imx_mxc_nand_data imx31_mxc_nand_data;  	imx_add_mxc_nand(&imx31_mxc_nand_data, pdata)  extern const struct imx_mxc_rtc_data imx31_mxc_rtc_data; -#define imx31_add_mxc_rtc(pdata)	\ +#define imx31_add_mxc_rtc()	\  	imx_add_mxc_rtc(&imx31_mxc_rtc_data)  extern const struct imx_mxc_w1_data imx31_mxc_w1_data; -#define imx31_add_mxc_w1(pdata)	\ +#define imx31_add_mxc_w1()	\  	imx_add_mxc_w1(&imx31_mxc_w1_data)  extern const struct imx_spi_imx_data imx31_cspi_data[]; diff --git a/arch/arm/mach-imx/devices-imx35.h b/arch/arm/mach-imx/devices-imx35.h index 7b99ef0bb50..27245ce9cab 100644 --- a/arch/arm/mach-imx/devices-imx35.h +++ b/arch/arm/mach-imx/devices-imx35.h @@ -24,7 +24,7 @@ extern const struct imx_flexcan_data imx35_flexcan_data[];  #define imx35_add_flexcan1(pdata)	imx35_add_flexcan(1, pdata)  extern const struct imx_imx2_wdt_data imx35_imx2_wdt_data; -#define imx35_add_imx2_wdt(pdata)       \ +#define imx35_add_imx2_wdt()       \  	imx_add_imx2_wdt(&imx35_imx2_wdt_data)  extern const struct imx_imx_i2c_data imx35_imx_i2c_data[]; @@ -69,7 +69,7 @@ extern const struct imx_mxc_nand_data imx35_mxc_nand_data;  	imx_add_mxc_nand(&imx35_mxc_nand_data, pdata)  extern const struct imx_mxc_w1_data imx35_mxc_w1_data; -#define imx35_add_mxc_w1(pdata)	\ +#define imx35_add_mxc_w1()	\  	imx_add_mxc_w1(&imx35_mxc_w1_data)  extern const struct imx_sdhci_esdhc_imx_data imx35_sdhci_esdhc_imx_data[]; diff --git a/arch/arm/mach-imx/devices-imx51.h b/arch/arm/mach-imx/devices-imx51.h index af488bc0e22..9f171872519 100644 --- a/arch/arm/mach-imx/devices-imx51.h +++ b/arch/arm/mach-imx/devices-imx51.h @@ -55,7 +55,7 @@ extern const struct imx_spi_imx_data imx51_ecspi_data[];  	imx_add_spi_imx(&imx51_ecspi_data[id], pdata)  extern const struct imx_imx2_wdt_data imx51_imx2_wdt_data[]; -#define imx51_add_imx2_wdt(id, pdata)	\ +#define imx51_add_imx2_wdt(id)	\  	imx_add_imx2_wdt(&imx51_imx2_wdt_data[id])  extern const struct imx_mxc_pwm_data imx51_mxc_pwm_data[]; diff --git a/arch/arm/mach-imx/devices-imx53.h b/arch/arm/mach-imx/devices-imx53.h index 6e1e5d1f8c3..77e0db96c44 100644 --- a/arch/arm/mach-imx/devices-imx53.h +++ b/arch/arm/mach-imx/devices-imx53.h @@ -30,7 +30,7 @@ extern const struct imx_spi_imx_data imx53_ecspi_data[];  	imx_add_spi_imx(&imx53_ecspi_data[id], pdata)  extern const struct imx_imx2_wdt_data imx53_imx2_wdt_data[]; -#define imx53_add_imx2_wdt(id, pdata)	\ +#define imx53_add_imx2_wdt(id)	\  	imx_add_imx2_wdt(&imx53_imx2_wdt_data[id])  extern const struct imx_imx_ssi_data imx53_imx_ssi_data[]; diff --git a/arch/arm/mach-imx/imx27-dt.c b/arch/arm/mach-imx/imx27-dt.c index eee0cc8d92a..52efe4d5149 100644 --- a/arch/arm/mach-imx/imx27-dt.c +++ b/arch/arm/mach-imx/imx27-dt.c @@ -75,7 +75,7 @@ static struct sys_timer imx27_timer = {  	.init = imx27_timer_init,  }; -static const char *imx27_dt_board_compat[] __initdata = { +static const char * const imx27_dt_board_compat[] __initconst = {  	"fsl,imx27",  	NULL  }; diff --git a/arch/arm/mach-imx/mach-cpuimx27.c b/arch/arm/mach-imx/mach-cpuimx27.c index d085aea0870..9a3b06e688c 100644 --- a/arch/arm/mach-imx/mach-cpuimx27.c +++ b/arch/arm/mach-imx/mach-cpuimx27.c @@ -233,18 +233,18 @@ static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {  	.phy_mode       = FSL_USB2_PHY_ULPI,  }; -static int otg_mode_host; +static bool otg_mode_host __initdata;  static int __init eukrea_cpuimx27_otg_mode(char *options)  {  	if (!strcmp(options, "host")) -		otg_mode_host = 1; +		otg_mode_host = true;  	else if (!strcmp(options, "device")) -		otg_mode_host = 0; +		otg_mode_host = false;  	else  		pr_info("otg_mode neither \"host\" nor \"device\". "  			"Defaulting to device\n"); -	return 0; +	return 1;  }  __setup("otg_mode=", eukrea_cpuimx27_otg_mode); @@ -266,8 +266,8 @@ static void __init eukrea_cpuimx27_init(void)  	imx27_add_fec(NULL);  	platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); -	imx27_add_imx2_wdt(NULL); -	imx27_add_mxc_w1(NULL); +	imx27_add_imx2_wdt(); +	imx27_add_mxc_w1();  #if defined(CONFIG_MACH_EUKREA_CPUIMX27_USESDHC2)  	/* SDHC2 can be used for Wifi */ diff --git a/arch/arm/mach-imx/mach-cpuimx35.c b/arch/arm/mach-imx/mach-cpuimx35.c index 6450303f1a7..1634e54ffed 100644 --- a/arch/arm/mach-imx/mach-cpuimx35.c +++ b/arch/arm/mach-imx/mach-cpuimx35.c @@ -141,18 +141,18 @@ static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {  	.workaround	= FLS_USB2_WORKAROUND_ENGCM09152,  }; -static int otg_mode_host; +static bool otg_mode_host __initdata;  static int __init eukrea_cpuimx35_otg_mode(char *options)  {  	if (!strcmp(options, "host")) -		otg_mode_host = 1; +		otg_mode_host = true;  	else if (!strcmp(options, "device")) -		otg_mode_host = 0; +		otg_mode_host = false;  	else  		pr_info("otg_mode neither \"host\" nor \"device\". "  			"Defaulting to device\n"); -	return 0; +	return 1;  }  __setup("otg_mode=", eukrea_cpuimx35_otg_mode); @@ -167,7 +167,7 @@ static void __init eukrea_cpuimx35_init(void)  			ARRAY_SIZE(eukrea_cpuimx35_pads));  	imx35_add_fec(NULL); -	imx35_add_imx2_wdt(NULL); +	imx35_add_imx2_wdt();  	imx35_add_imx_uart0(&uart_pdata);  	imx35_add_mxc_nand(&eukrea_cpuimx35_nand_board_info); diff --git a/arch/arm/mach-imx/mach-cpuimx51sd.c b/arch/arm/mach-imx/mach-cpuimx51sd.c index 1e09de50cbc..e78b40b4146 100644 --- a/arch/arm/mach-imx/mach-cpuimx51sd.c +++ b/arch/arm/mach-imx/mach-cpuimx51sd.c @@ -217,18 +217,18 @@ static const struct mxc_usbh_platform_data usbh1_config __initconst = {  	.portsc	= MXC_EHCI_MODE_ULPI,  }; -static int otg_mode_host; +static bool otg_mode_host __initdata;  static int __init eukrea_cpuimx51sd_otg_mode(char *options)  {  	if (!strcmp(options, "host")) -		otg_mode_host = 1; +		otg_mode_host = true;  	else if (!strcmp(options, "device")) -		otg_mode_host = 0; +		otg_mode_host = false;  	else  		pr_info("otg_mode neither \"host\" nor \"device\". "  			"Defaulting to device\n"); -	return 0; +	return 1;  }  __setup("otg_mode=", eukrea_cpuimx51sd_otg_mode); @@ -292,7 +292,7 @@ static void __init eukrea_cpuimx51sd_init(void)  	imx51_add_imx_uart(0, &uart_pdata);  	imx51_add_mxc_nand(&eukrea_cpuimx51sd_nand_board_info); -	imx51_add_imx2_wdt(0, NULL); +	imx51_add_imx2_wdt(0);  	gpio_request(ETH_RST, "eth_rst");  	gpio_set_value(ETH_RST, 1); diff --git a/arch/arm/mach-imx/mach-eukrea_cpuimx25.c b/arch/arm/mach-imx/mach-eukrea_cpuimx25.c index d1e04e676e3..017bbb70ea4 100644 --- a/arch/arm/mach-imx/mach-eukrea_cpuimx25.c +++ b/arch/arm/mach-imx/mach-eukrea_cpuimx25.c @@ -109,18 +109,18 @@ static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {  	.workaround     = FLS_USB2_WORKAROUND_ENGCM09152,  }; -static int otg_mode_host; +static bool otg_mode_host __initdata;  static int __init eukrea_cpuimx25_otg_mode(char *options)  {  	if (!strcmp(options, "host")) -		otg_mode_host = 1; +		otg_mode_host = true;  	else if (!strcmp(options, "device")) -		otg_mode_host = 0; +		otg_mode_host = false;  	else  		pr_info("otg_mode neither \"host\" nor \"device\". "  			"Defaulting to device\n"); -	return 0; +	return 1;  }  __setup("otg_mode=", eukrea_cpuimx25_otg_mode); @@ -134,9 +134,9 @@ static void __init eukrea_cpuimx25_init(void)  	imx25_add_imx_uart0(&uart_pdata);  	imx25_add_mxc_nand(&eukrea_cpuimx25_nand_board_info); -	imx25_add_imxdi_rtc(NULL); +	imx25_add_imxdi_rtc();  	imx25_add_fec(&mx25_fec_pdata); -	imx25_add_imx2_wdt(NULL); +	imx25_add_imx2_wdt();  	i2c_register_board_info(0, eukrea_cpuimx25_i2c_devices,  				ARRAY_SIZE(eukrea_cpuimx25_i2c_devices)); diff --git a/arch/arm/mach-imx/mach-imx27ipcam.c b/arch/arm/mach-imx/mach-imx27ipcam.c index c9d350c5dcc..7381387a890 100644 --- a/arch/arm/mach-imx/mach-imx27ipcam.c +++ b/arch/arm/mach-imx/mach-imx27ipcam.c @@ -57,7 +57,7 @@ static void __init mx27ipcam_init(void)  	imx27_add_imx_uart0(NULL);  	imx27_add_fec(NULL); -	imx27_add_imx2_wdt(NULL); +	imx27_add_imx2_wdt();  }  static void __init mx27ipcam_timer_init(void) diff --git a/arch/arm/mach-imx/mach-mx25_3ds.c b/arch/arm/mach-imx/mach-mx25_3ds.c index f26734298aa..ce247fd1269 100644 --- a/arch/arm/mach-imx/mach-mx25_3ds.c +++ b/arch/arm/mach-imx/mach-mx25_3ds.c @@ -237,9 +237,9 @@ static void __init mx25pdk_init(void)  	imx25_add_fsl_usb2_udc(&otg_device_pdata);  	imx25_add_mxc_ehci_hs(&usbh2_pdata);  	imx25_add_mxc_nand(&mx25pdk_nand_board_info); -	imx25_add_imxdi_rtc(NULL); +	imx25_add_imxdi_rtc();  	imx25_add_imx_fb(&mx25pdk_fb_pdata); -	imx25_add_imx2_wdt(NULL); +	imx25_add_imx2_wdt();  	mx25pdk_fec_reset();  	imx25_add_fec(&mx25_fec_pdata); diff --git a/arch/arm/mach-imx/mach-mx27_3ds.c b/arch/arm/mach-imx/mach-mx27_3ds.c index c6d385c5225..ce9a5c26290 100644 --- a/arch/arm/mach-imx/mach-mx27_3ds.c +++ b/arch/arm/mach-imx/mach-mx27_3ds.c @@ -241,18 +241,18 @@ static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {  	.phy_mode       = FSL_USB2_PHY_ULPI,  }; -static int otg_mode_host; +static bool otg_mode_host __initdata;  static int __init mx27_3ds_otg_mode(char *options)  {  	if (!strcmp(options, "host")) -		otg_mode_host = 1; +		otg_mode_host = true;  	else if (!strcmp(options, "device")) -		otg_mode_host = 0; +		otg_mode_host = false;  	else  		pr_info("otg_mode neither \"host\" nor \"device\". "  			"Defaulting to device\n"); -	return 0; +	return 1;  }  __setup("otg_mode=", mx27_3ds_otg_mode); @@ -480,7 +480,7 @@ static void __init mx27pdk_init(void)  	imx27_add_fec(NULL);  	imx27_add_imx_keypad(&mx27_3ds_keymap_data);  	imx27_add_mxc_mmc(0, &sdhc1_pdata); -	imx27_add_imx2_wdt(NULL); +	imx27_add_imx2_wdt();  	otg_phy_init();  	if (otg_mode_host) { diff --git a/arch/arm/mach-imx/mach-mx27ads.c b/arch/arm/mach-imx/mach-mx27ads.c index 0228d2e07fe..7936bb32264 100644 --- a/arch/arm/mach-imx/mach-mx27ads.c +++ b/arch/arm/mach-imx/mach-mx27ads.c @@ -310,7 +310,7 @@ static void __init mx27ads_board_init(void)  	imx27_add_fec(NULL);  	platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); -	imx27_add_mxc_w1(NULL); +	imx27_add_mxc_w1();  }  static void __init mx27ads_timer_init(void) diff --git a/arch/arm/mach-imx/mach-mx31_3ds.c b/arch/arm/mach-imx/mach-mx31_3ds.c index 4eafdf275ea..928e1dcbc6a 100644 --- a/arch/arm/mach-imx/mach-mx31_3ds.c +++ b/arch/arm/mach-imx/mach-mx31_3ds.c @@ -671,18 +671,18 @@ static const struct fsl_usb2_platform_data usbotg_pdata __initconst = {  	.phy_mode	= FSL_USB2_PHY_ULPI,  }; -static int otg_mode_host; +static bool otg_mode_host __initdata;  static int __init mx31_3ds_otg_mode(char *options)  {  	if (!strcmp(options, "host")) -		otg_mode_host = 1; +		otg_mode_host = true;  	else if (!strcmp(options, "device")) -		otg_mode_host = 0; +		otg_mode_host = false;  	else  		pr_info("otg_mode neither \"host\" nor \"device\". "  			"Defaulting to device\n"); -	return 0; +	return 1;  }  __setup("otg_mode=", mx31_3ds_otg_mode); @@ -739,7 +739,7 @@ static void __init mx31_3ds_init(void)  	if (mxc_expio_init(MX31_CS5_BASE_ADDR, EXPIO_PARENT_INT))  		printk(KERN_WARNING "Init of the debug board failed, all "  				    "devices on the debug board are unusable.\n"); -	imx31_add_imx2_wdt(NULL); +	imx31_add_imx2_wdt();  	imx31_add_imx_i2c0(&mx31_3ds_i2c0_data);  	imx31_add_mxc_mmc(0, &sdhc1_pdata); diff --git a/arch/arm/mach-imx/mach-mx31moboard.c b/arch/arm/mach-imx/mach-mx31moboard.c index 016791f038b..63e84e67b99 100644 --- a/arch/arm/mach-imx/mach-mx31moboard.c +++ b/arch/arm/mach-imx/mach-mx31moboard.c @@ -544,7 +544,7 @@ static void __init mx31moboard_init(void)  	platform_add_devices(devices, ARRAY_SIZE(devices));  	gpio_led_register_device(-1, &mx31moboard_led_pdata); -	imx31_add_imx2_wdt(NULL); +	imx31_add_imx2_wdt();  	imx31_add_imx_uart0(&uart0_pdata);  	imx31_add_imx_uart4(&uart4_pdata); diff --git a/arch/arm/mach-imx/mach-mx35_3ds.c b/arch/arm/mach-imx/mach-mx35_3ds.c index 28aa19476de..6bff8790731 100644 --- a/arch/arm/mach-imx/mach-mx35_3ds.c +++ b/arch/arm/mach-imx/mach-mx35_3ds.c @@ -540,18 +540,18 @@ static const struct mxc_usbh_platform_data usb_host_pdata __initconst = {  	.portsc		= MXC_EHCI_MODE_SERIAL,  }; -static int otg_mode_host; +static bool otg_mode_host __initdata;  static int __init mx35_3ds_otg_mode(char *options)  {  	if (!strcmp(options, "host")) -		otg_mode_host = 1; +		otg_mode_host = true;  	else if (!strcmp(options, "device")) -		otg_mode_host = 0; +		otg_mode_host = false;  	else  		pr_info("otg_mode neither \"host\" nor \"device\". "  			"Defaulting to device\n"); -	return 0; +	return 1;  }  __setup("otg_mode=", mx35_3ds_otg_mode); @@ -571,7 +571,7 @@ static void __init mx35_3ds_init(void)  	mxc_iomux_v3_setup_multiple_pads(mx35pdk_pads, ARRAY_SIZE(mx35pdk_pads));  	imx35_add_fec(NULL); -	imx35_add_imx2_wdt(NULL); +	imx35_add_imx2_wdt();  	platform_add_devices(devices, ARRAY_SIZE(devices));  	imx35_add_imx_uart0(&uart_pdata); diff --git a/arch/arm/mach-imx/mach-mx51_3ds.c b/arch/arm/mach-imx/mach-mx51_3ds.c index 3c5b163923f..2edb563b968 100644 --- a/arch/arm/mach-imx/mach-mx51_3ds.c +++ b/arch/arm/mach-imx/mach-mx51_3ds.c @@ -154,7 +154,7 @@ static void __init mx51_3ds_init(void)  	imx51_add_sdhci_esdhc_imx(0, NULL);  	imx51_add_imx_keypad(&mx51_3ds_map_data); -	imx51_add_imx2_wdt(0, NULL); +	imx51_add_imx2_wdt(0);  }  static void __init mx51_3ds_timer_init(void) diff --git a/arch/arm/mach-imx/mach-mx51_babbage.c b/arch/arm/mach-imx/mach-mx51_babbage.c index dde397014d4..7b31cbde877 100644 --- a/arch/arm/mach-imx/mach-mx51_babbage.c +++ b/arch/arm/mach-imx/mach-mx51_babbage.c @@ -307,18 +307,18 @@ static const struct mxc_usbh_platform_data usbh1_config __initconst = {  	.portsc	= MXC_EHCI_MODE_ULPI,  }; -static int otg_mode_host; +static bool otg_mode_host __initdata;  static int __init babbage_otg_mode(char *options)  {  	if (!strcmp(options, "host")) -		otg_mode_host = 1; +		otg_mode_host = true;  	else if (!strcmp(options, "device")) -		otg_mode_host = 0; +		otg_mode_host = false;  	else  		pr_info("otg_mode neither \"host\" nor \"device\". "  			"Defaulting to device\n"); -	return 0; +	return 1;  }  __setup("otg_mode=", babbage_otg_mode); @@ -411,7 +411,7 @@ static void __init mx51_babbage_init(void)  	spi_register_board_info(mx51_babbage_spi_board_info,  		ARRAY_SIZE(mx51_babbage_spi_board_info));  	imx51_add_ecspi(0, &mx51_babbage_spi_pdata); -	imx51_add_imx2_wdt(0, NULL); +	imx51_add_imx2_wdt(0);  }  static void __init mx51_babbage_timer_init(void) diff --git a/arch/arm/mach-imx/mach-mx53_ard.c b/arch/arm/mach-imx/mach-mx53_ard.c index 05641980dc5..4a7593a953e 100644 --- a/arch/arm/mach-imx/mach-mx53_ard.c +++ b/arch/arm/mach-imx/mach-mx53_ard.c @@ -243,7 +243,7 @@ static void __init mx53_ard_board_init(void)  	platform_add_devices(devices, ARRAY_SIZE(devices));  	imx53_add_sdhci_esdhc_imx(0, &mx53_ard_sd1_data); -	imx53_add_imx2_wdt(0, NULL); +	imx53_add_imx2_wdt(0);  	imx53_add_imx_i2c(1, &mx53_ard_i2c2_data);  	imx53_add_imx_i2c(2, &mx53_ard_i2c3_data);  	imx_add_gpio_keys(&ard_button_data); diff --git a/arch/arm/mach-imx/mach-mx53_evk.c b/arch/arm/mach-imx/mach-mx53_evk.c index 5a72188b9cd..a1060b26fb2 100644 --- a/arch/arm/mach-imx/mach-mx53_evk.c +++ b/arch/arm/mach-imx/mach-mx53_evk.c @@ -154,7 +154,7 @@ static void __init mx53_evk_board_init(void)  	spi_register_board_info(mx53_evk_spi_board_info,  		ARRAY_SIZE(mx53_evk_spi_board_info));  	imx53_add_ecspi(0, &mx53_evk_spi_data); -	imx53_add_imx2_wdt(0, NULL); +	imx53_add_imx2_wdt(0);  	gpio_led_register_device(-1, &mx53evk_leds_data);  } diff --git a/arch/arm/mach-imx/mach-mx53_loco.c b/arch/arm/mach-imx/mach-mx53_loco.c index 37f67cac15a..388c415d6b6 100644 --- a/arch/arm/mach-imx/mach-mx53_loco.c +++ b/arch/arm/mach-imx/mach-mx53_loco.c @@ -283,7 +283,7 @@ static void __init mx53_loco_board_init(void)  	imx53_add_imx_uart(0, NULL);  	mx53_loco_fec_reset();  	imx53_add_fec(&mx53_loco_fec_data); -	imx53_add_imx2_wdt(0, NULL); +	imx53_add_imx2_wdt(0);  	ret = gpio_request_one(LOCO_ACCEL_EN, GPIOF_OUT_INIT_HIGH, "accel_en");  	if (ret) diff --git a/arch/arm/mach-imx/mach-mx53_smd.c b/arch/arm/mach-imx/mach-mx53_smd.c index 8e972c5c3e1..f297df7ccb3 100644 --- a/arch/arm/mach-imx/mach-mx53_smd.c +++ b/arch/arm/mach-imx/mach-mx53_smd.c @@ -138,7 +138,7 @@ static void __init mx53_smd_board_init(void)  	mx53_smd_init_uart();  	mx53_smd_fec_reset();  	imx53_add_fec(&mx53_smd_fec_data); -	imx53_add_imx2_wdt(0, NULL); +	imx53_add_imx2_wdt(0);  	imx53_add_imx_i2c(0, &mx53_smd_i2c_data);  	imx53_add_sdhci_esdhc_imx(0, NULL);  	imx53_add_sdhci_esdhc_imx(1, NULL); diff --git a/arch/arm/mach-imx/mach-pca100.c b/arch/arm/mach-imx/mach-pca100.c index 541152e450c..d37ed25003b 100644 --- a/arch/arm/mach-imx/mach-pca100.c +++ b/arch/arm/mach-imx/mach-pca100.c @@ -298,18 +298,18 @@ static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {  	.phy_mode       = FSL_USB2_PHY_ULPI,  }; -static int otg_mode_host; +static bool otg_mode_host __initdata;  static int __init pca100_otg_mode(char *options)  {  	if (!strcmp(options, "host")) -		otg_mode_host = 1; +		otg_mode_host = true;  	else if (!strcmp(options, "device")) -		otg_mode_host = 0; +		otg_mode_host = false;  	else  		pr_info("otg_mode neither \"host\" nor \"device\". "  			"Defaulting to device\n"); -	return 0; +	return 1;  }  __setup("otg_mode=", pca100_otg_mode); @@ -408,8 +408,8 @@ static void __init pca100_init(void)  	imx27_add_imx_fb(&pca100_fb_data);  	imx27_add_fec(NULL); -	imx27_add_imx2_wdt(NULL); -	imx27_add_mxc_w1(NULL); +	imx27_add_imx2_wdt(); +	imx27_add_mxc_w1();  }  static void __init pca100_timer_init(void) diff --git a/arch/arm/mach-imx/mach-pcm037.c b/arch/arm/mach-imx/mach-pcm037.c index 0a40004154f..cd48712a6f5 100644 --- a/arch/arm/mach-imx/mach-pcm037.c +++ b/arch/arm/mach-imx/mach-pcm037.c @@ -557,18 +557,18 @@ static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {  	.phy_mode       = FSL_USB2_PHY_ULPI,  }; -static int otg_mode_host; +static bool otg_mode_host __initdata;  static int __init pcm037_otg_mode(char *options)  {  	if (!strcmp(options, "host")) -		otg_mode_host = 1; +		otg_mode_host = true;  	else if (!strcmp(options, "device")) -		otg_mode_host = 0; +		otg_mode_host = false;  	else  		pr_info("otg_mode neither \"host\" nor \"device\". "  			"Defaulting to device\n"); -	return 0; +	return 1;  }  __setup("otg_mode=", pcm037_otg_mode); @@ -619,13 +619,13 @@ static void __init pcm037_init(void)  	platform_add_devices(devices, ARRAY_SIZE(devices)); -	imx31_add_imx2_wdt(NULL); +	imx31_add_imx2_wdt();  	imx31_add_imx_uart0(&uart_pdata);  	/* XXX: should't this have .flags = 0 (i.e. no RTSCTS) on PCM037_EET? */  	imx31_add_imx_uart1(&uart_pdata);  	imx31_add_imx_uart2(&uart_pdata); -	imx31_add_mxc_w1(NULL); +	imx31_add_mxc_w1();  	/* LAN9217 IRQ pin */  	ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1), "lan9217-irq"); diff --git a/arch/arm/mach-imx/mach-pcm038.c b/arch/arm/mach-imx/mach-pcm038.c index 2f3debe2a11..3fbb89d74fc 100644 --- a/arch/arm/mach-imx/mach-pcm038.c +++ b/arch/arm/mach-imx/mach-pcm038.c @@ -332,8 +332,8 @@ static void __init pcm038_init(void)  	imx27_add_fec(NULL);  	platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); -	imx27_add_imx2_wdt(NULL); -	imx27_add_mxc_w1(NULL); +	imx27_add_imx2_wdt(); +	imx27_add_mxc_w1();  #ifdef CONFIG_MACH_PCM970_BASEBOARD  	pcm970_baseboard_init(); diff --git a/arch/arm/mach-imx/mach-pcm043.c b/arch/arm/mach-imx/mach-pcm043.c index 73585f55cca..1f20f222375 100644 --- a/arch/arm/mach-imx/mach-pcm043.c +++ b/arch/arm/mach-imx/mach-pcm043.c @@ -330,18 +330,18 @@ static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {  	.phy_mode       = FSL_USB2_PHY_UTMI,  }; -static int otg_mode_host; +static bool otg_mode_host __initdata;  static int __init pcm043_otg_mode(char *options)  {  	if (!strcmp(options, "host")) -		otg_mode_host = 1; +		otg_mode_host = true;  	else if (!strcmp(options, "device")) -		otg_mode_host = 0; +		otg_mode_host = false;  	else  		pr_info("otg_mode neither \"host\" nor \"device\". "  			"Defaulting to device\n"); -	return 0; +	return 1;  }  __setup("otg_mode=", pcm043_otg_mode); @@ -363,7 +363,7 @@ static void __init pcm043_init(void)  	imx35_add_fec(NULL);  	platform_add_devices(devices, ARRAY_SIZE(devices)); -	imx35_add_imx2_wdt(NULL); +	imx35_add_imx2_wdt();  	imx35_add_imx_uart0(&uart_pdata);  	imx35_add_mxc_nand(&pcm037_nand_board_info); diff --git a/arch/arm/mach-imx/mach-qong.c b/arch/arm/mach-imx/mach-qong.c index 260621055b6..a13087b11a6 100644 --- a/arch/arm/mach-imx/mach-qong.c +++ b/arch/arm/mach-imx/mach-qong.c @@ -252,7 +252,7 @@ static void __init qong_init(void)  	mxc_init_imx_uart();  	qong_init_nor_mtd();  	qong_init_fpga(); -	imx31_add_imx2_wdt(NULL); +	imx31_add_imx2_wdt();  }  static void __init qong_timer_init(void) diff --git a/arch/arm/mach-imx/mach-vpr200.c b/arch/arm/mach-imx/mach-vpr200.c index add8c69c6c1..b26209d4bce 100644 --- a/arch/arm/mach-imx/mach-vpr200.c +++ b/arch/arm/mach-imx/mach-vpr200.c @@ -272,7 +272,7 @@ static void __init vpr200_board_init(void)  	mxc_iomux_v3_setup_multiple_pads(vpr200_pads, ARRAY_SIZE(vpr200_pads));  	imx35_add_fec(NULL); -	imx35_add_imx2_wdt(NULL); +	imx35_add_imx2_wdt();  	imx_add_gpio_keys(&vpr200_gpio_keys_data);  	platform_add_devices(devices, ARRAY_SIZE(devices)); diff --git a/arch/arm/mach-imx/mx31lite-db.c b/arch/arm/mach-imx/mx31lite-db.c index bf0fb87946b..fa60ef6ac7f 100644 --- a/arch/arm/mach-imx/mx31lite-db.c +++ b/arch/arm/mach-imx/mx31lite-db.c @@ -191,6 +191,6 @@ void __init mx31lite_db_init(void)  	imx31_add_mxc_mmc(0, &mmc_pdata);  	imx31_add_spi_imx0(&spi0_pdata);  	gpio_led_register_device(-1, &litekit_led_platform_data); -	imx31_add_imx2_wdt(NULL); -	imx31_add_mxc_rtc(NULL); +	imx31_add_imx2_wdt(); +	imx31_add_mxc_rtc();  } diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c index f2f8a584701..c53469802c0 100644 --- a/arch/arm/mach-omap1/board-ams-delta.c +++ b/arch/arm/mach-omap1/board-ams-delta.c @@ -37,12 +37,12 @@  #include <plat/board-ams-delta.h>  #include <plat/keypad.h>  #include <plat/mux.h> -#include <plat/usb.h>  #include <plat/board.h>  #include <mach/hardware.h>  #include <mach/ams-delta-fiq.h>  #include <mach/camera.h> +#include <mach/usb.h>  #include "iomap.h"  #include "common.h" diff --git a/arch/arm/mach-omap1/board-generic.c b/arch/arm/mach-omap1/board-generic.c index e75e2d55a2d..6ec385e2b98 100644 --- a/arch/arm/mach-omap1/board-generic.c +++ b/arch/arm/mach-omap1/board-generic.c @@ -23,8 +23,10 @@  #include <asm/mach/map.h>  #include <plat/mux.h> -#include <plat/usb.h>  #include <plat/board.h> + +#include <mach/usb.h> +  #include "common.h"  /* assume no Mini-AB port */ diff --git a/arch/arm/mach-omap1/board-h2.c b/arch/arm/mach-omap1/board-h2.c index a28e989a63f..44a4ab195fb 100644 --- a/arch/arm/mach-omap1/board-h2.c +++ b/arch/arm/mach-omap1/board-h2.c @@ -40,11 +40,11 @@  #include <plat/dma.h>  #include <plat/tc.h>  #include <plat/irda.h> -#include <plat/usb.h>  #include <plat/keypad.h>  #include <plat/flash.h>  #include <mach/hardware.h> +#include <mach/usb.h>  #include "common.h"  #include "board-h2.h" diff --git a/arch/arm/mach-omap1/board-h3.c b/arch/arm/mach-omap1/board-h3.c index 108a8640fc6..86cb5a04a40 100644 --- a/arch/arm/mach-omap1/board-h3.c +++ b/arch/arm/mach-omap1/board-h3.c @@ -40,13 +40,13 @@  #include <plat/mux.h>  #include <plat/tc.h> -#include <plat/usb.h>  #include <plat/keypad.h>  #include <plat/dma.h>  #include <plat/flash.h>  #include <mach/hardware.h>  #include <mach/irqs.h> +#include <mach/usb.h>  #include "common.h"  #include "board-h3.h" diff --git a/arch/arm/mach-omap1/board-htcherald.c b/arch/arm/mach-omap1/board-htcherald.c index 118a9d4a4c5..b3f6e943e66 100644 --- a/arch/arm/mach-omap1/board-htcherald.c +++ b/arch/arm/mach-omap1/board-htcherald.c @@ -44,10 +44,10 @@  #include <plat/omap7xx.h>  #include <plat/board.h>  #include <plat/keypad.h> -#include <plat/usb.h>  #include <plat/mmc.h>  #include <mach/irqs.h> +#include <mach/usb.h>  #include "common.h" diff --git a/arch/arm/mach-omap1/board-innovator.c b/arch/arm/mach-omap1/board-innovator.c index 7970223a559..f21c2966daa 100644 --- a/arch/arm/mach-omap1/board-innovator.c +++ b/arch/arm/mach-omap1/board-innovator.c @@ -35,11 +35,11 @@  #include <plat/flash.h>  #include <plat/fpga.h>  #include <plat/tc.h> -#include <plat/usb.h>  #include <plat/keypad.h>  #include <plat/mmc.h>  #include <mach/hardware.h> +#include <mach/usb.h>  #include "iomap.h"  #include "common.h" diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c index 7212ae97f44..4007a372481 100644 --- a/arch/arm/mach-omap1/board-nokia770.c +++ b/arch/arm/mach-omap1/board-nokia770.c @@ -26,7 +26,6 @@  #include <asm/mach/map.h>  #include <plat/mux.h> -#include <plat/usb.h>  #include <plat/board.h>  #include <plat/keypad.h>  #include <plat/lcd_mipid.h> @@ -34,6 +33,7 @@  #include <plat/clock.h>  #include <mach/hardware.h> +#include <mach/usb.h>  #include "common.h" diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c index da8d872d3d1..8784705edb6 100644 --- a/arch/arm/mach-omap1/board-osk.c +++ b/arch/arm/mach-omap1/board-osk.c @@ -45,11 +45,11 @@  #include <asm/mach/map.h>  #include <plat/flash.h> -#include <plat/usb.h>  #include <plat/mux.h>  #include <plat/tc.h>  #include <mach/hardware.h> +#include <mach/usb.h>  #include "common.h" diff --git a/arch/arm/mach-omap1/board-palmte.c b/arch/arm/mach-omap1/board-palmte.c index 949b62a7369..26bcb9defcd 100644 --- a/arch/arm/mach-omap1/board-palmte.c +++ b/arch/arm/mach-omap1/board-palmte.c @@ -35,7 +35,6 @@  #include <plat/flash.h>  #include <plat/mux.h> -#include <plat/usb.h>  #include <plat/tc.h>  #include <plat/dma.h>  #include <plat/board.h> @@ -43,6 +42,7 @@  #include <plat/keypad.h>  #include <mach/hardware.h> +#include <mach/usb.h>  #include "common.h" diff --git a/arch/arm/mach-omap1/board-palmtt.c b/arch/arm/mach-omap1/board-palmtt.c index 7f1e1cf2bf4..4d099446dfa 100644 --- a/arch/arm/mach-omap1/board-palmtt.c +++ b/arch/arm/mach-omap1/board-palmtt.c @@ -35,7 +35,6 @@  #include <plat/led.h>  #include <plat/flash.h>  #include <plat/mux.h> -#include <plat/usb.h>  #include <plat/dma.h>  #include <plat/tc.h>  #include <plat/board.h> @@ -43,6 +42,7 @@  #include <plat/keypad.h>  #include <mach/hardware.h> +#include <mach/usb.h>  #include "common.h" diff --git a/arch/arm/mach-omap1/board-palmz71.c b/arch/arm/mach-omap1/board-palmz71.c index 3c71c6bace2..cc71a26723e 100644 --- a/arch/arm/mach-omap1/board-palmz71.c +++ b/arch/arm/mach-omap1/board-palmz71.c @@ -37,7 +37,6 @@  #include <plat/flash.h>  #include <plat/mux.h> -#include <plat/usb.h>  #include <plat/dma.h>  #include <plat/tc.h>  #include <plat/board.h> @@ -45,6 +44,7 @@  #include <plat/keypad.h>  #include <mach/hardware.h> +#include <mach/usb.h>  #include "common.h" diff --git a/arch/arm/mach-omap1/board-sx1.c b/arch/arm/mach-omap1/board-sx1.c index 3b7b82b1368..8c665bd16ac 100644 --- a/arch/arm/mach-omap1/board-sx1.c +++ b/arch/arm/mach-omap1/board-sx1.c @@ -37,13 +37,13 @@  #include <plat/mux.h>  #include <plat/dma.h>  #include <plat/irda.h> -#include <plat/usb.h>  #include <plat/tc.h>  #include <plat/board.h>  #include <plat/keypad.h>  #include <plat/board-sx1.h>  #include <mach/hardware.h> +#include <mach/usb.h>  #include "common.h" diff --git a/arch/arm/mach-omap1/board-voiceblue.c b/arch/arm/mach-omap1/board-voiceblue.c index afd67f0ec49..3497769eb35 100644 --- a/arch/arm/mach-omap1/board-voiceblue.c +++ b/arch/arm/mach-omap1/board-voiceblue.c @@ -35,9 +35,10 @@  #include <plat/flash.h>  #include <plat/mux.h>  #include <plat/tc.h> -#include <plat/usb.h> +#include <plat/board.h>  #include <mach/hardware.h> +#include <mach/usb.h>  #include "common.h" diff --git a/arch/arm/mach-omap1/clock_data.c b/arch/arm/mach-omap1/clock_data.c index c6ce93f71d0..c007d80dfb6 100644 --- a/arch/arm/mach-omap1/clock_data.c +++ b/arch/arm/mach-omap1/clock_data.c @@ -25,10 +25,11 @@  #include <plat/clock.h>  #include <plat/cpu.h>  #include <plat/clkdev_omap.h> +#include <plat/board.h>  #include <plat/sram.h>	/* for omap_sram_reprogram_clock() */ -#include <plat/usb.h>   /* for OTG_BASE */  #include <mach/hardware.h> +#include <mach/usb.h>   /* for OTG_BASE */  #include "iomap.h"  #include "clock.h" diff --git a/arch/arm/mach-omap1/include/mach/usb.h b/arch/arm/mach-omap1/include/mach/usb.h new file mode 100644 index 00000000000..753cd5ce694 --- /dev/null +++ b/arch/arm/mach-omap1/include/mach/usb.h @@ -0,0 +1,165 @@ +/* + * FIXME correct answer depends on hmc_mode, + * as does (on omap1) any nonzero value for config->otg port number + */ +#ifdef	CONFIG_USB_GADGET_OMAP +#define	is_usb0_device(config)	1 +#else +#define	is_usb0_device(config)	0 +#endif + +struct omap_usb_config { +	/* Configure drivers according to the connectors on your board: +	 *  - "A" connector (rectagular) +	 *	... for host/OHCI use, set "register_host". +	 *  - "B" connector (squarish) or "Mini-B" +	 *	... for device/gadget use, set "register_dev". +	 *  - "Mini-AB" connector (very similar to Mini-B) +	 *	... for OTG use as device OR host, initialize "otg" +	 */ +	unsigned	register_host:1; +	unsigned	register_dev:1; +	u8		otg;	/* port number, 1-based:  usb1 == 2 */ + +	u8		hmc_mode; + +	/* implicitly true if otg:  host supports remote wakeup? */ +	u8		rwc; + +	/* signaling pins used to talk to transceiver on usbN: +	 *  0 == usbN unused +	 *  2 == usb0-only, using internal transceiver +	 *  3 == 3 wire bidirectional +	 *  4 == 4 wire bidirectional +	 *  6 == 6 wire unidirectional (or TLL) +	 */ +	u8		pins[3]; + +	struct platform_device *udc_device; +	struct platform_device *ohci_device; +	struct platform_device *otg_device; + +	u32 (*usb0_init)(unsigned nwires, unsigned is_device); +	u32 (*usb1_init)(unsigned nwires); +	u32 (*usb2_init)(unsigned nwires, unsigned alt_pingroup); + +	int (*ocpi_enable)(void); +}; + +void omap_otg_init(struct omap_usb_config *config); + +#if defined(CONFIG_USB) || defined(CONFIG_USB_MODULE) +void omap1_usb_init(struct omap_usb_config *pdata); +#else +static inline void omap1_usb_init(struct omap_usb_config *pdata) +{ +} +#endif + +#define OMAP1_OTG_BASE			0xfffb0400 +#define OMAP1_UDC_BASE			0xfffb4000 +#define OMAP1_OHCI_BASE			0xfffba000 + +#define OMAP2_OHCI_BASE			0x4805e000 +#define OMAP2_UDC_BASE			0x4805e200 +#define OMAP2_OTG_BASE			0x4805e300 +#define OTG_BASE			OMAP1_OTG_BASE +#define UDC_BASE			OMAP1_UDC_BASE +#define OMAP_OHCI_BASE			OMAP1_OHCI_BASE + +/* + * OTG and transceiver registers, for OMAPs starting with ARM926 + */ +#define OTG_REV				(OTG_BASE + 0x00) +#define OTG_SYSCON_1			(OTG_BASE + 0x04) +#	define	 USB2_TRX_MODE(w)	(((w)>>24)&0x07) +#	define	 USB1_TRX_MODE(w)	(((w)>>20)&0x07) +#	define	 USB0_TRX_MODE(w)	(((w)>>16)&0x07) +#	define	 OTG_IDLE_EN		(1 << 15) +#	define	 HST_IDLE_EN		(1 << 14) +#	define	 DEV_IDLE_EN		(1 << 13) +#	define	 OTG_RESET_DONE		(1 << 2) +#	define	 OTG_SOFT_RESET		(1 << 1) +#define OTG_SYSCON_2			(OTG_BASE + 0x08) +#	define	 OTG_EN			(1 << 31) +#	define	 USBX_SYNCHRO		(1 << 30) +#	define	 OTG_MST16		(1 << 29) +#	define	 SRP_GPDATA		(1 << 28) +#	define	 SRP_GPDVBUS		(1 << 27) +#	define	 SRP_GPUVBUS(w)		(((w)>>24)&0x07) +#	define	 A_WAIT_VRISE(w)	(((w)>>20)&0x07) +#	define	 B_ASE_BRST(w)		(((w)>>16)&0x07) +#	define	 SRP_DPW		(1 << 14) +#	define	 SRP_DATA		(1 << 13) +#	define	 SRP_VBUS		(1 << 12) +#	define	 OTG_PADEN		(1 << 10) +#	define	 HMC_PADEN		(1 << 9) +#	define	 UHOST_EN		(1 << 8) +#	define	 HMC_TLLSPEED		(1 << 7) +#	define	 HMC_TLLATTACH		(1 << 6) +#	define	 OTG_HMC(w)		(((w)>>0)&0x3f) +#define OTG_CTRL			(OTG_BASE + 0x0c) +#	define	 OTG_USB2_EN		(1 << 29) +#	define	 OTG_USB2_DP		(1 << 28) +#	define	 OTG_USB2_DM		(1 << 27) +#	define	 OTG_USB1_EN		(1 << 26) +#	define	 OTG_USB1_DP		(1 << 25) +#	define	 OTG_USB1_DM		(1 << 24) +#	define	 OTG_USB0_EN		(1 << 23) +#	define	 OTG_USB0_DP		(1 << 22) +#	define	 OTG_USB0_DM		(1 << 21) +#	define	 OTG_ASESSVLD		(1 << 20) +#	define	 OTG_BSESSEND		(1 << 19) +#	define	 OTG_BSESSVLD		(1 << 18) +#	define	 OTG_VBUSVLD		(1 << 17) +#	define	 OTG_ID			(1 << 16) +#	define	 OTG_DRIVER_SEL		(1 << 15) +#	define	 OTG_A_SETB_HNPEN	(1 << 12) +#	define	 OTG_A_BUSREQ		(1 << 11) +#	define	 OTG_B_HNPEN		(1 << 9) +#	define	 OTG_B_BUSREQ		(1 << 8) +#	define	 OTG_BUSDROP		(1 << 7) +#	define	 OTG_PULLDOWN		(1 << 5) +#	define	 OTG_PULLUP		(1 << 4) +#	define	 OTG_DRV_VBUS		(1 << 3) +#	define	 OTG_PD_VBUS		(1 << 2) +#	define	 OTG_PU_VBUS		(1 << 1) +#	define	 OTG_PU_ID		(1 << 0) +#define OTG_IRQ_EN			(OTG_BASE + 0x10)	/* 16-bit */ +#	define	 DRIVER_SWITCH		(1 << 15) +#	define	 A_VBUS_ERR		(1 << 13) +#	define	 A_REQ_TMROUT		(1 << 12) +#	define	 A_SRP_DETECT		(1 << 11) +#	define	 B_HNP_FAIL		(1 << 10) +#	define	 B_SRP_TMROUT		(1 << 9) +#	define	 B_SRP_DONE		(1 << 8) +#	define	 B_SRP_STARTED		(1 << 7) +#	define	 OPRT_CHG		(1 << 0) +#define OTG_IRQ_SRC			(OTG_BASE + 0x14)	/* 16-bit */ +	// same bits as in IRQ_EN +#define OTG_OUTCTRL			(OTG_BASE + 0x18)	/* 16-bit */ +#	define	 OTGVPD			(1 << 14) +#	define	 OTGVPU			(1 << 13) +#	define	 OTGPUID		(1 << 12) +#	define	 USB2VDR		(1 << 10) +#	define	 USB2PDEN		(1 << 9) +#	define	 USB2PUEN		(1 << 8) +#	define	 USB1VDR		(1 << 6) +#	define	 USB1PDEN		(1 << 5) +#	define	 USB1PUEN		(1 << 4) +#	define	 USB0VDR		(1 << 2) +#	define	 USB0PDEN		(1 << 1) +#	define	 USB0PUEN		(1 << 0) +#define OTG_TEST			(OTG_BASE + 0x20)	/* 16-bit */ +#define OTG_VENDOR_CODE			(OTG_BASE + 0xfc)	/* 16-bit */ + +/*-------------------------------------------------------------------------*/ + +/* OMAP1 */ +#define	USB_TRANSCEIVER_CTRL		(0xfffe1000 + 0x0064) +#	define	CONF_USB2_UNI_R		(1 << 8) +#	define	CONF_USB1_UNI_R		(1 << 7) +#	define	CONF_USB_PORT0_R(x)	(((x)>>4)&0x7) +#	define	CONF_USB0_ISOLATE_R	(1 << 3) +#	define	CONF_USB_PWRDN_DM_R	(1 << 2) +#	define	CONF_USB_PWRDN_DP_R	(1 << 1) diff --git a/arch/arm/mach-omap1/usb.c b/arch/arm/mach-omap1/usb.c index e61afd92276..65f88176fba 100644 --- a/arch/arm/mach-omap1/usb.c +++ b/arch/arm/mach-omap1/usb.c @@ -27,7 +27,8 @@  #include <asm/irq.h>  #include <plat/mux.h> -#include <plat/usb.h> + +#include <mach/usb.h>  #include "common.h" @@ -55,6 +56,119 @@  #define INT_USB_IRQ_HGEN	INT_USB_HHC_1  #define INT_USB_IRQ_OTG		IH2_BASE + 8 +#ifdef	CONFIG_ARCH_OMAP_OTG + +void __init +omap_otg_init(struct omap_usb_config *config) +{ +	u32		syscon; +	int		alt_pingroup = 0; + +	/* NOTE:  no bus or clock setup (yet?) */ + +	syscon = omap_readl(OTG_SYSCON_1) & 0xffff; +	if (!(syscon & OTG_RESET_DONE)) +		pr_debug("USB resets not complete?\n"); + +	//omap_writew(0, OTG_IRQ_EN); + +	/* pin muxing and transceiver pinouts */ +	if (config->pins[0] > 2)	/* alt pingroup 2 */ +		alt_pingroup = 1; +	syscon |= config->usb0_init(config->pins[0], is_usb0_device(config)); +	syscon |= config->usb1_init(config->pins[1]); +	syscon |= config->usb2_init(config->pins[2], alt_pingroup); +	pr_debug("OTG_SYSCON_1 = %08x\n", omap_readl(OTG_SYSCON_1)); +	omap_writel(syscon, OTG_SYSCON_1); + +	syscon = config->hmc_mode; +	syscon |= USBX_SYNCHRO | (4 << 16) /* B_ASE0_BRST */; +#ifdef	CONFIG_USB_OTG +	if (config->otg) +		syscon |= OTG_EN; +#endif +	if (cpu_class_is_omap1()) +		pr_debug("USB_TRANSCEIVER_CTRL = %03x\n", +			 omap_readl(USB_TRANSCEIVER_CTRL)); +	pr_debug("OTG_SYSCON_2 = %08x\n", omap_readl(OTG_SYSCON_2)); +	omap_writel(syscon, OTG_SYSCON_2); + +	printk("USB: hmc %d", config->hmc_mode); +	if (!alt_pingroup) +		printk(", usb2 alt %d wires", config->pins[2]); +	else if (config->pins[0]) +		printk(", usb0 %d wires%s", config->pins[0], +			is_usb0_device(config) ? " (dev)" : ""); +	if (config->pins[1]) +		printk(", usb1 %d wires", config->pins[1]); +	if (!alt_pingroup && config->pins[2]) +		printk(", usb2 %d wires", config->pins[2]); +	if (config->otg) +		printk(", Mini-AB on usb%d", config->otg - 1); +	printk("\n"); + +	if (cpu_class_is_omap1()) { +		u16 w; + +		/* leave USB clocks/controllers off until needed */ +		w = omap_readw(ULPD_SOFT_REQ); +		w &= ~SOFT_USB_CLK_REQ; +		omap_writew(w, ULPD_SOFT_REQ); + +		w = omap_readw(ULPD_CLOCK_CTRL); +		w &= ~USB_MCLK_EN; +		w |= DIS_USB_PVCI_CLK; +		omap_writew(w, ULPD_CLOCK_CTRL); +	} +	syscon = omap_readl(OTG_SYSCON_1); +	syscon |= HST_IDLE_EN|DEV_IDLE_EN|OTG_IDLE_EN; + +#ifdef	CONFIG_USB_GADGET_OMAP +	if (config->otg || config->register_dev) { +		struct platform_device *udc_device = config->udc_device; +		int status; + +		syscon &= ~DEV_IDLE_EN; +		udc_device->dev.platform_data = config; +		status = platform_device_register(udc_device); +		if (status) +			pr_debug("can't register UDC device, %d\n", status); +	} +#endif + +#if	defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) +	if (config->otg || config->register_host) { +		struct platform_device *ohci_device = config->ohci_device; +		int status; + +		syscon &= ~HST_IDLE_EN; +		ohci_device->dev.platform_data = config; +		status = platform_device_register(ohci_device); +		if (status) +			pr_debug("can't register OHCI device, %d\n", status); +	} +#endif + +#ifdef	CONFIG_USB_OTG +	if (config->otg) { +		struct platform_device *otg_device = config->otg_device; +		int status; + +		syscon &= ~OTG_IDLE_EN; +		otg_device->dev.platform_data = config; +		status = platform_device_register(otg_device); +		if (status) +			pr_debug("can't register OTG device, %d\n", status); +	} +#endif +	pr_debug("OTG_SYSCON_1 = %08x\n", omap_readl(OTG_SYSCON_1)); +	omap_writel(syscon, OTG_SYSCON_1); +} + +#else +void omap_otg_init(struct omap_usb_config *config) {} +#endif +  #ifdef	CONFIG_USB_GADGET_OMAP  static struct resource udc_resources[] = { diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 2f4ace6f91d..184469517f1 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig @@ -66,19 +66,16 @@ config SOC_OMAP2420  	depends on ARCH_OMAP2  	default y  	select OMAP_DM_TIMER -	select ARCH_OMAP_OTG  config SOC_OMAP2430  	bool "OMAP2430 support"  	depends on ARCH_OMAP2  	default y -	select ARCH_OMAP_OTG  config SOC_OMAP3430  	bool "OMAP3430 support"  	depends on ARCH_OMAP3  	default y -	select ARCH_OMAP_OTG  config SOC_TI81XX  	bool "TI81XX support" diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index 6be43ac5c35..8e8ef8200bf 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile @@ -119,7 +119,6 @@ obj-$(CONFIG_ARCH_OMAP4)		+= powerdomains44xx_data.o  # PRCM clockdomain control  clockdomain-common			+= clockdomain.o -clockdomain-common			+= clockdomains_common_data.o  obj-$(CONFIG_ARCH_OMAP2)		+= $(clockdomain-common)  obj-$(CONFIG_ARCH_OMAP2)		+= clockdomain2xxx_3xxx.o  obj-$(CONFIG_ARCH_OMAP2)		+= clockdomains2xxx_3xxx_data.o @@ -247,9 +246,6 @@ obj-y					+= $(omap-flash-y) $(omap-flash-m)  omap-hsmmc-$(CONFIG_MMC_OMAP_HS)	:= hsmmc.o  obj-y					+= $(omap-hsmmc-m) $(omap-hsmmc-y) - -usbfs-$(CONFIG_ARCH_OMAP_OTG)		:= usb-fs.o -obj-y					+= $(usbfs-m) $(usbfs-y)  obj-y					+= usb-musb.o  obj-y					+= omap_phy_internal.o diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-omap2/board-2430sdp.c index 0dac4db0113..9511584fdc4 100644 --- a/arch/arm/mach-omap2/board-2430sdp.c +++ b/arch/arm/mach-omap2/board-2430sdp.c @@ -251,16 +251,6 @@ static struct omap2_hsmmc_info mmc[] __initdata = {  	{}	/* Terminator */  }; -static struct omap_usb_config sdp2430_usb_config __initdata = { -	.otg		= 1, -#ifdef  CONFIG_USB_GADGET_OMAP -	.hmc_mode	= 0x0, -#elif   defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) -	.hmc_mode	= 0x1, -#endif -	.pins[0]	= 3, -}; -  #ifdef CONFIG_OMAP_MUX  static struct omap_board_mux board_mux[] __initdata = {  	{ .reg_offset = OMAP_MUX_TERMINATOR }, @@ -277,7 +267,6 @@ static void __init omap_2430sdp_init(void)  	omap_serial_init();  	omap_sdrc_init(NULL, NULL);  	omap_hsmmc_init(mmc); -	omap2_usbfs_init(&sdp2430_usb_config);  	omap_mux_init_signal("usb0hs_stp", OMAP_PULL_ENA | OMAP_PULL_UP);  	usb_musb_init(NULL); diff --git a/arch/arm/mach-omap2/board-apollon.c b/arch/arm/mach-omap2/board-apollon.c index 502c31e123b..519bcd3079e 100644 --- a/arch/arm/mach-omap2/board-apollon.c +++ b/arch/arm/mach-omap2/board-apollon.c @@ -35,7 +35,6 @@  #include <asm/mach/flash.h>  #include <plat/led.h> -#include <plat/usb.h>  #include <plat/board.h>  #include "common.h"  #include <plat/gpmc.h> @@ -253,13 +252,6 @@ out:  	clk_put(gpmc_fck);  } -static struct omap_usb_config apollon_usb_config __initdata = { -	.register_dev	= 1, -	.hmc_mode	= 0x14,	/* 0:dev 1:host1 2:disable */ - -	.pins[0]	= 6, -}; -  static struct panel_generic_dpi_data apollon_panel_data = {  	.name			= "apollon",  }; @@ -297,15 +289,6 @@ static void __init apollon_led_init(void)  	gpio_request_array(apollon_gpio_leds, ARRAY_SIZE(apollon_gpio_leds));  } -static void __init apollon_usb_init(void) -{ -	/* USB device */ -	/* DEVICE_SUSPEND */ -	omap_mux_init_signal("mcbsp2_clkx.gpio_12", 0); -	gpio_request_one(12, GPIOF_OUT_INIT_LOW, "USB suspend"); -	omap2_usbfs_init(&apollon_usb_config); -} -  #ifdef CONFIG_OMAP_MUX  static struct omap_board_mux board_mux[] __initdata = {  	{ .reg_offset = OMAP_MUX_TERMINATOR }, @@ -321,7 +304,6 @@ static void __init omap_apollon_init(void)  	apollon_init_smc91x();  	apollon_led_init();  	apollon_flash_init(); -	apollon_usb_init();  	/* REVISIT: where's the correct place */  	omap_mux_init_signal("sys_nirq", OMAP_PULL_ENA | OMAP_PULL_UP); diff --git a/arch/arm/mach-omap2/board-h4.c b/arch/arm/mach-omap2/board-h4.c index 876becf8205..ace20482e3e 100644 --- a/arch/arm/mach-omap2/board-h4.c +++ b/arch/arm/mach-omap2/board-h4.c @@ -32,7 +32,6 @@  #include <asm/mach/arch.h>  #include <asm/mach/map.h> -#include <plat/usb.h>  #include <plat/board.h>  #include "common.h"  #include <plat/menelaus.h> @@ -329,17 +328,6 @@ static void __init h4_init_flash(void)  	h4_flash_resource.end	= base + SZ_64M - 1;  } -static struct omap_usb_config h4_usb_config __initdata = { -	/* S1.10 OFF -- usb "download port" -	 * usb0 switched to Mini-B port and isp1105 transceiver; -	 * S2.POS3 = ON, S2.POS4 = OFF ... to enable battery charging -	 */ -	.register_dev	= 1, -	.pins[0]	= 3, -/*	.hmc_mode	= 0x14,*/	/* 0:dev 1:host 2:disable */ -	.hmc_mode	= 0x00,		/* 0:dev|otg 1:disable 2:disable */ -}; -  static struct at24_platform_data m24c01 = {  	.byte_len	= SZ_1K / 8,  	.page_size	= 16, @@ -381,7 +369,6 @@ static void __init omap_h4_init(void)  			ARRAY_SIZE(h4_i2c_board_info));  	platform_add_devices(h4_devices, ARRAY_SIZE(h4_devices)); -	omap2_usbfs_init(&h4_usb_config);  	omap_serial_init();  	omap_sdrc_init(NULL, NULL);  	h4_init_flash(); diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c index bace9308a4d..7e39015357b 100644 --- a/arch/arm/mach-omap2/clock2420_data.c +++ b/arch/arm/mach-omap2/clock2420_data.c @@ -1774,8 +1774,6 @@ static struct omap_clk omap2420_clks[] = {  	CLK(NULL,	"osc_ck",	&osc_ck,	CK_242X),  	CLK(NULL,	"sys_ck",	&sys_ck,	CK_242X),  	CLK(NULL,	"alt_ck",	&alt_ck,	CK_242X), -	CLK("omap-mcbsp.1",	"pad_fck",	&mcbsp_clks,	CK_242X), -	CLK("omap-mcbsp.2",	"pad_fck",	&mcbsp_clks,	CK_242X),  	CLK(NULL,	"mcbsp_clks",	&mcbsp_clks,	CK_242X),  	/* internal analog sources */  	CLK(NULL,	"dpll_ck",	&dpll_ck,	CK_242X), @@ -1784,8 +1782,6 @@ static struct omap_clk omap2420_clks[] = {  	/* internal prcm root sources */  	CLK(NULL,	"func_54m_ck",	&func_54m_ck,	CK_242X),  	CLK(NULL,	"core_ck",	&core_ck,	CK_242X), -	CLK("omap-mcbsp.1",	"prcm_fck",	&func_96m_ck,	CK_242X), -	CLK("omap-mcbsp.2",	"prcm_fck",	&func_96m_ck,	CK_242X),  	CLK(NULL,	"func_96m_ck",	&func_96m_ck,	CK_242X),  	CLK(NULL,	"func_48m_ck",	&func_48m_ck,	CK_242X),  	CLK(NULL,	"func_12m_ck",	&func_12m_ck,	CK_242X), diff --git a/arch/arm/mach-omap2/clock2430_data.c b/arch/arm/mach-omap2/clock2430_data.c index 3b4d09a5039..90a08c3b12a 100644 --- a/arch/arm/mach-omap2/clock2430_data.c +++ b/arch/arm/mach-omap2/clock2430_data.c @@ -1858,11 +1858,6 @@ static struct omap_clk omap2430_clks[] = {  	CLK(NULL,	"osc_ck",	&osc_ck,	CK_243X),  	CLK(NULL,	"sys_ck",	&sys_ck,	CK_243X),  	CLK(NULL,	"alt_ck",	&alt_ck,	CK_243X), -	CLK("omap-mcbsp.1",	"pad_fck",	&mcbsp_clks,	CK_243X), -	CLK("omap-mcbsp.2",	"pad_fck",	&mcbsp_clks,	CK_243X), -	CLK("omap-mcbsp.3",	"pad_fck",	&mcbsp_clks,	CK_243X), -	CLK("omap-mcbsp.4",	"pad_fck",	&mcbsp_clks,	CK_243X), -	CLK("omap-mcbsp.5",	"pad_fck",	&mcbsp_clks,	CK_243X),  	CLK(NULL,	"mcbsp_clks",	&mcbsp_clks,	CK_243X),  	/* internal analog sources */  	CLK(NULL,	"dpll_ck",	&dpll_ck,	CK_243X), @@ -1871,11 +1866,6 @@ static struct omap_clk omap2430_clks[] = {  	/* internal prcm root sources */  	CLK(NULL,	"func_54m_ck",	&func_54m_ck,	CK_243X),  	CLK(NULL,	"core_ck",	&core_ck,	CK_243X), -	CLK("omap-mcbsp.1",	"prcm_fck",	&func_96m_ck,	CK_243X), -	CLK("omap-mcbsp.2",	"prcm_fck",	&func_96m_ck,	CK_243X), -	CLK("omap-mcbsp.3",	"prcm_fck",	&func_96m_ck,	CK_243X), -	CLK("omap-mcbsp.4",	"prcm_fck",	&func_96m_ck,	CK_243X), -	CLK("omap-mcbsp.5",	"prcm_fck",	&func_96m_ck,	CK_243X),  	CLK(NULL,	"func_96m_ck",	&func_96m_ck,	CK_243X),  	CLK(NULL,	"func_48m_ck",	&func_48m_ck,	CK_243X),  	CLK(NULL,	"func_12m_ck",	&func_12m_ck,	CK_243X), diff --git a/arch/arm/mach-omap2/clock3xxx_data.c b/arch/arm/mach-omap2/clock3xxx_data.c index a67aaa97dcd..049061778a8 100644 --- a/arch/arm/mach-omap2/clock3xxx_data.c +++ b/arch/arm/mach-omap2/clock3xxx_data.c @@ -3240,11 +3240,6 @@ static struct omap_clk omap3xxx_clks[] = {  	CLK(NULL,	"osc_sys_ck",	&osc_sys_ck,	CK_3XXX),  	CLK(NULL,	"sys_ck",	&sys_ck,	CK_3XXX),  	CLK(NULL,	"sys_altclk",	&sys_altclk,	CK_3XXX), -	CLK("omap-mcbsp.1",	"pad_fck",	&mcbsp_clks,	CK_3XXX), -	CLK("omap-mcbsp.2",	"pad_fck",	&mcbsp_clks,	CK_3XXX), -	CLK("omap-mcbsp.3",	"pad_fck",	&mcbsp_clks,	CK_3XXX), -	CLK("omap-mcbsp.4",	"pad_fck",	&mcbsp_clks,	CK_3XXX), -	CLK("omap-mcbsp.5",	"pad_fck",	&mcbsp_clks,	CK_3XXX),  	CLK(NULL,	"mcbsp_clks",	&mcbsp_clks,	CK_3XXX),  	CLK(NULL,	"sys_clkout1",	&sys_clkout1,	CK_3XXX),  	CLK(NULL,	"dpll1_ck",	&dpll1_ck,	CK_3XXX), @@ -3311,8 +3306,6 @@ static struct omap_clk omap3xxx_clks[] = {  	CLK(NULL,	"ts_fck",	&ts_fck,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX),  	CLK(NULL,	"usbtll_fck",	&usbtll_fck,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX),  	CLK("usbhs_omap",	"usbtll_fck",	&usbtll_fck,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK("omap-mcbsp.1",	"prcm_fck",	&core_96m_fck,	CK_3XXX), -	CLK("omap-mcbsp.5",	"prcm_fck",	&core_96m_fck,	CK_3XXX),  	CLK(NULL,	"core_96m_fck",	&core_96m_fck,	CK_3XXX),  	CLK(NULL,	"mmchs3_fck",	&mmchs3_fck,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX),  	CLK(NULL,	"mmchs2_fck",	&mmchs2_fck,	CK_3XXX), @@ -3417,9 +3410,6 @@ static struct omap_clk omap3xxx_clks[] = {  	CLK(NULL,	"omap_32ksync_ick", &omap_32ksync_ick, CK_3XXX),  	CLK(NULL,	"gpt12_ick",	&gpt12_ick,	CK_3XXX),  	CLK(NULL,	"gpt1_ick",	&gpt1_ick,	CK_3XXX), -	CLK("omap-mcbsp.2",	"prcm_fck",	&per_96m_fck,	CK_3XXX), -	CLK("omap-mcbsp.3",	"prcm_fck",	&per_96m_fck,	CK_3XXX), -	CLK("omap-mcbsp.4",	"prcm_fck",	&per_96m_fck,	CK_3XXX),  	CLK(NULL,	"per_96m_fck",	&per_96m_fck,	CK_3XXX),  	CLK(NULL,	"per_48m_fck",	&per_48m_fck,	CK_3XXX),  	CLK(NULL,	"uart3_fck",	&uart3_fck,	CK_3XXX), diff --git a/arch/arm/mach-omap2/clockdomain.h b/arch/arm/mach-omap2/clockdomain.h index 6227e9505c2..c9523c6164b 100644 --- a/arch/arm/mach-omap2/clockdomain.h +++ b/arch/arm/mach-omap2/clockdomain.h @@ -210,7 +210,5 @@ extern struct clkdm_ops omap4_clkdm_operations;  extern struct clkdm_dep gfx_24xx_wkdeps[];  extern struct clkdm_dep dsp_24xx_wkdeps[];  extern struct clockdomain wkup_common_clkdm; -extern struct clockdomain prm_common_clkdm; -extern struct clockdomain cm_common_clkdm;  #endif diff --git a/arch/arm/mach-omap2/clockdomains2420_data.c b/arch/arm/mach-omap2/clockdomains2420_data.c index 0ab8e46d5b2..5c741852fac 100644 --- a/arch/arm/mach-omap2/clockdomains2420_data.c +++ b/arch/arm/mach-omap2/clockdomains2420_data.c @@ -131,8 +131,6 @@ static struct clockdomain dss_2420_clkdm = {  static struct clockdomain *clockdomains_omap242x[] __initdata = {  	&wkup_common_clkdm, -	&cm_common_clkdm, -	&prm_common_clkdm,  	&mpu_2420_clkdm,  	&iva1_2420_clkdm,  	&dsp_2420_clkdm, diff --git a/arch/arm/mach-omap2/clockdomains2430_data.c b/arch/arm/mach-omap2/clockdomains2430_data.c index 3645ed04489..f09617555e1 100644 --- a/arch/arm/mach-omap2/clockdomains2430_data.c +++ b/arch/arm/mach-omap2/clockdomains2430_data.c @@ -157,8 +157,6 @@ static struct clockdomain dss_2430_clkdm = {  static struct clockdomain *clockdomains_omap243x[] __initdata = {  	&wkup_common_clkdm, -	&cm_common_clkdm, -	&prm_common_clkdm,  	&mpu_2430_clkdm,  	&mdm_clkdm,  	&dsp_2430_clkdm, diff --git a/arch/arm/mach-omap2/clockdomains3xxx_data.c b/arch/arm/mach-omap2/clockdomains3xxx_data.c index 8e35080026d..56089c49142 100644 --- a/arch/arm/mach-omap2/clockdomains3xxx_data.c +++ b/arch/arm/mach-omap2/clockdomains3xxx_data.c @@ -454,8 +454,6 @@ static struct clkdm_autodep clkdm_am35x_autodeps[] = {  static struct clockdomain *clockdomains_common[] __initdata = {  	&wkup_common_clkdm, -	&cm_common_clkdm, -	&prm_common_clkdm,  	&neon_clkdm,  	&core_l3_3xxx_clkdm,  	&core_l4_3xxx_clkdm, diff --git a/arch/arm/mach-omap2/clockdomains44xx_data.c b/arch/arm/mach-omap2/clockdomains44xx_data.c index 7f2133abe7d..63d60a773d3 100644 --- a/arch/arm/mach-omap2/clockdomains44xx_data.c +++ b/arch/arm/mach-omap2/clockdomains44xx_data.c @@ -430,8 +430,6 @@ static struct clockdomain *clockdomains_omap44xx[] __initdata = {  	&l4_wkup_44xx_clkdm,  	&emu_sys_44xx_clkdm,  	&l3_dma_44xx_clkdm, -	&prm_common_clkdm, -	&cm_common_clkdm,  	NULL  }; diff --git a/arch/arm/mach-omap2/clockdomains_common_data.c b/arch/arm/mach-omap2/clockdomains_common_data.c deleted file mode 100644 index 615b1f04967..00000000000 --- a/arch/arm/mach-omap2/clockdomains_common_data.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * OMAP2+-common clockdomain data - * - * Copyright (C) 2008-2012 Texas Instruments, Inc. - * Copyright (C) 2008-2010 Nokia Corporation - * - * Paul Walmsley, Jouni Högander - */ - -#include <linux/kernel.h> -#include <linux/io.h> - -#include "clockdomain.h" - -/* These are implicit clockdomains - they are never defined as such in TRM */ -struct clockdomain prm_common_clkdm = { -	.name		= "prm_clkdm", -	.pwrdm		= { .name = "wkup_pwrdm" }, -}; - -struct clockdomain cm_common_clkdm = { -	.name		= "cm_clkdm", -	.pwrdm		= { .name = "core_pwrdm" }, -}; diff --git a/arch/arm/mach-omap2/control.c b/arch/arm/mach-omap2/control.c index 08e674bb041..3223b81e753 100644 --- a/arch/arm/mach-omap2/control.c +++ b/arch/arm/mach-omap2/control.c @@ -241,6 +241,49 @@ void omap3_ctrl_write_boot_mode(u8 bootmode)  #endif +/** + * omap_ctrl_write_dsp_boot_addr - set boot address for a remote processor + * @bootaddr: physical address of the boot loader + * + * Set boot address for the boot loader of a supported processor + * when a power ON sequence occurs. + */ +void omap_ctrl_write_dsp_boot_addr(u32 bootaddr) +{ +	u32 offset = cpu_is_omap243x() ? OMAP243X_CONTROL_IVA2_BOOTADDR : +		     cpu_is_omap34xx() ? OMAP343X_CONTROL_IVA2_BOOTADDR : +		     cpu_is_omap44xx() ? OMAP4_CTRL_MODULE_CORE_DSP_BOOTADDR : +		     0; + +	if (!offset) { +		pr_err("%s: unsupported omap type\n", __func__); +		return; +	} + +	omap_ctrl_writel(bootaddr, offset); +} + +/** + * omap_ctrl_write_dsp_boot_mode - set boot mode for a remote processor + * @bootmode: 8-bit value to pass to some boot code + * + * Sets boot mode for the boot loader of a supported processor + * when a power ON sequence occurs. + */ +void omap_ctrl_write_dsp_boot_mode(u8 bootmode) +{ +	u32 offset = cpu_is_omap243x() ? OMAP243X_CONTROL_IVA2_BOOTMOD : +		     cpu_is_omap34xx() ? OMAP343X_CONTROL_IVA2_BOOTMOD : +		     0; + +	if (!offset) { +		pr_err("%s: unsupported omap type\n", __func__); +		return; +	} + +	omap_ctrl_writel(bootmode, offset); +} +  #if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM)  /*   * Clears the scratchpad contents in case of cold boot- diff --git a/arch/arm/mach-omap2/control.h b/arch/arm/mach-omap2/control.h index a406fd045ce..fcc98f822d9 100644 --- a/arch/arm/mach-omap2/control.h +++ b/arch/arm/mach-omap2/control.h @@ -397,6 +397,8 @@ extern u32 omap3_arm_context[128];  extern void omap3_control_save_context(void);  extern void omap3_control_restore_context(void);  extern void omap3_ctrl_write_boot_mode(u8 bootmode); +extern void omap_ctrl_write_dsp_boot_addr(u32 bootaddr); +extern void omap_ctrl_write_dsp_boot_mode(u8 bootmode);  extern void omap3630_ctrl_disable_rta(void);  extern int omap3_ctrl_save_padconf(void);  #else diff --git a/arch/arm/mach-omap2/dsp.c b/arch/arm/mach-omap2/dsp.c index 88ffa1e645c..a636ebc16b3 100644 --- a/arch/arm/mach-omap2/dsp.c +++ b/arch/arm/mach-omap2/dsp.c @@ -23,6 +23,7 @@  #include <asm/memblock.h> +#include "control.h"  #include "cm2xxx_3xxx.h"  #include "prm2xxx_3xxx.h"  #ifdef CONFIG_BRIDGE_DVFS @@ -46,6 +47,9 @@ static struct omap_dsp_platform_data omap_dsp_pdata __initdata = {  	.dsp_cm_read = omap2_cm_read_mod_reg,  	.dsp_cm_write = omap2_cm_write_mod_reg,  	.dsp_cm_rmw_bits = omap2_cm_rmw_mod_reg_bits, + +	.set_bootaddr = omap_ctrl_write_dsp_boot_addr, +	.set_bootmode = omap_ctrl_write_dsp_boot_mode,  };  static phys_addr_t omap_dsp_phys_mempool_base; diff --git a/arch/arm/mach-omap2/include/mach/ctrl_module_core_44xx.h b/arch/arm/mach-omap2/include/mach/ctrl_module_core_44xx.h index 2f7ac70a20d..01970824e0e 100644 --- a/arch/arm/mach-omap2/include/mach/ctrl_module_core_44xx.h +++ b/arch/arm/mach-omap2/include/mach/ctrl_module_core_44xx.h @@ -42,6 +42,7 @@  #define OMAP4_CTRL_MODULE_CORE_STD_FUSE_OPP_DPLL_1		0x0268  #define OMAP4_CTRL_MODULE_CORE_STATUS				0x02c4  #define OMAP4_CTRL_MODULE_CORE_DEV_CONF				0x0300 +#define OMAP4_CTRL_MODULE_CORE_DSP_BOOTADDR			0x0304  #define OMAP4_CTRL_MODULE_CORE_LDOVBB_IVA_VOLTAGE_CTRL		0x0314  #define OMAP4_CTRL_MODULE_CORE_LDOVBB_MPU_VOLTAGE_CTRL		0x0318  #define OMAP4_CTRL_MODULE_CORE_LDOSRAM_IVA_VOLTAGE_CTRL		0x0320 diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 2d710f50fca..bdc1ec2edb4 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c @@ -166,6 +166,31 @@   */  #define LINKS_PER_OCP_IF		2 +/** + * struct omap_hwmod_soc_ops - fn ptrs for some SoC-specific operations + * @enable_module: function to enable a module (via MODULEMODE) + * @disable_module: function to disable a module (via MODULEMODE) + * + * XXX Eventually this functionality will be hidden inside the PRM/CM + * device drivers.  Until then, this should avoid huge blocks of cpu_is_*() + * conditionals in this code. + */ +struct omap_hwmod_soc_ops { +	void (*enable_module)(struct omap_hwmod *oh); +	int (*disable_module)(struct omap_hwmod *oh); +	int (*wait_target_ready)(struct omap_hwmod *oh); +	int (*assert_hardreset)(struct omap_hwmod *oh, +				struct omap_hwmod_rst_info *ohri); +	int (*deassert_hardreset)(struct omap_hwmod *oh, +				  struct omap_hwmod_rst_info *ohri); +	int (*is_hardreset_asserted)(struct omap_hwmod *oh, +				     struct omap_hwmod_rst_info *ohri); +	int (*init_clkdm)(struct omap_hwmod *oh); +}; + +/* soc_ops: adapts the omap_hwmod code to the currently-booted SoC */ +static struct omap_hwmod_soc_ops soc_ops; +  /* omap_hwmod_list contains all registered struct omap_hwmods */  static LIST_HEAD(omap_hwmod_list); @@ -186,6 +211,9 @@ static struct omap_hwmod_link *linkspace;   */  static unsigned short free_ls, max_ls, ls_supp; +/* inited: set to true once the hwmod code is initialized */ +static bool inited; +  /* Private functions */  /** @@ -771,23 +799,19 @@ static void _disable_optional_clocks(struct omap_hwmod *oh)  }  /** - * _enable_module - enable CLKCTRL modulemode on OMAP4 + * _omap4_enable_module - enable CLKCTRL modulemode on OMAP4   * @oh: struct omap_hwmod *   *   * Enables the PRCM module mode related to the hwmod @oh.   * No return value.   */ -static void _enable_module(struct omap_hwmod *oh) +static void _omap4_enable_module(struct omap_hwmod *oh)  { -	/* The module mode does not exist prior OMAP4 */ -	if (cpu_is_omap24xx() || cpu_is_omap34xx()) -		return; -  	if (!oh->clkdm || !oh->prcm.omap4.modulemode)  		return; -	pr_debug("omap_hwmod: %s: _enable_module: %d\n", -		 oh->name, oh->prcm.omap4.modulemode); +	pr_debug("omap_hwmod: %s: %s: %d\n", +		 oh->name, __func__, oh->prcm.omap4.modulemode);  	omap4_cminst_module_enable(oh->prcm.omap4.modulemode,  				   oh->clkdm->prcm_partition, @@ -807,10 +831,7 @@ static void _enable_module(struct omap_hwmod *oh)   */  static int _omap4_wait_target_disable(struct omap_hwmod *oh)  { -	if (!cpu_is_omap44xx()) -		return 0; - -	if (!oh) +	if (!oh || !oh->clkdm)  		return -EINVAL;  	if (oh->_int_flags & _HWMOD_NO_MPU_PORT) @@ -1301,24 +1322,20 @@ static struct omap_hwmod *_lookup(const char *name)  	return oh;  } +  /**   * _init_clkdm - look up a clockdomain name, store pointer in omap_hwmod   * @oh: struct omap_hwmod *   *   * Convert a clockdomain name stored in a struct omap_hwmod into a   * clockdomain pointer, and save it into the struct omap_hwmod. - * return -EINVAL if clkdm_name does not exist or if the lookup failed. + * Return -EINVAL if the clkdm_name lookup failed.   */  static int _init_clkdm(struct omap_hwmod *oh)  { -	if (cpu_is_omap24xx() || cpu_is_omap34xx()) +	if (!oh->clkdm_name)  		return 0; -	if (!oh->clkdm_name) { -		pr_warning("omap_hwmod: %s: no clkdm_name\n", oh->name); -		return -EINVAL; -	} -  	oh->clkdm = clkdm_lookup(oh->clkdm_name);  	if (!oh->clkdm) {  		pr_warning("omap_hwmod: %s: could not associate to clkdm %s\n", @@ -1354,7 +1371,8 @@ static int _init_clocks(struct omap_hwmod *oh, void *data)  	ret |= _init_main_clk(oh);  	ret |= _init_interface_clks(oh);  	ret |= _init_opt_clks(oh); -	ret |= _init_clkdm(oh); +	if (soc_ops.init_clkdm) +		ret |= soc_ops.init_clkdm(oh);  	if (!ret)  		oh->_state = _HWMOD_STATE_CLKS_INITED; @@ -1365,53 +1383,6 @@ static int _init_clocks(struct omap_hwmod *oh, void *data)  }  /** - * _wait_target_ready - wait for a module to leave slave idle - * @oh: struct omap_hwmod * - * - * Wait for a module @oh to leave slave idle.  Returns 0 if the module - * does not have an IDLEST bit or if the module successfully leaves - * slave idle; otherwise, pass along the return value of the - * appropriate *_cm*_wait_module_ready() function. - */ -static int _wait_target_ready(struct omap_hwmod *oh) -{ -	struct omap_hwmod_ocp_if *os; -	int ret; - -	if (!oh) -		return -EINVAL; - -	if (oh->flags & HWMOD_NO_IDLEST) -		return 0; - -	os = _find_mpu_rt_port(oh); -	if (!os) -		return 0; - -	/* XXX check module SIDLEMODE */ - -	/* XXX check clock enable states */ - -	if (cpu_is_omap24xx() || cpu_is_omap34xx()) { -		ret = omap2_cm_wait_module_ready(oh->prcm.omap2.module_offs, -						 oh->prcm.omap2.idlest_reg_id, -						 oh->prcm.omap2.idlest_idle_bit); -	} else if (cpu_is_omap44xx()) { -		if (!oh->clkdm) -			return -EINVAL; - -		ret = omap4_cminst_wait_module_ready(oh->clkdm->prcm_partition, -						     oh->clkdm->cm_inst, -						     oh->clkdm->clkdm_offs, -						     oh->prcm.omap4.clkctrl_offs); -	} else { -		BUG(); -	}; - -	return ret; -} - -/**   * _lookup_hardreset - fill register bit info for this hwmod/reset line   * @oh: struct omap_hwmod *   * @name: name of the reset line in the context of this hwmod @@ -1447,32 +1418,31 @@ static u8 _lookup_hardreset(struct omap_hwmod *oh, const char *name,   * @oh: struct omap_hwmod *   * @name: name of the reset line to lookup and assert   * - * Some IP like dsp, ipu or iva contain processor that require - * an HW reset line to be assert / deassert in order to enable fully - * the IP. + * Some IP like dsp, ipu or iva contain processor that require an HW + * reset line to be assert / deassert in order to enable fully the IP. + * Returns -EINVAL if @oh is null, -ENOSYS if we have no way of + * asserting the hardreset line on the currently-booted SoC, or passes + * along the return value from _lookup_hardreset() or the SoC's + * assert_hardreset code.   */  static int _assert_hardreset(struct omap_hwmod *oh, const char *name)  {  	struct omap_hwmod_rst_info ohri; -	u8 ret; +	u8 ret = -EINVAL;  	if (!oh)  		return -EINVAL; +	if (!soc_ops.assert_hardreset) +		return -ENOSYS; +  	ret = _lookup_hardreset(oh, name, &ohri);  	if (IS_ERR_VALUE(ret))  		return ret; -	if (cpu_is_omap24xx() || cpu_is_omap34xx()) -		return omap2_prm_assert_hardreset(oh->prcm.omap2.module_offs, -						  ohri.rst_shift); -	else if (cpu_is_omap44xx()) -		return omap4_prminst_assert_hardreset(ohri.rst_shift, -				  oh->clkdm->pwrdm.ptr->prcm_partition, -				  oh->clkdm->pwrdm.ptr->prcm_offs, -				  oh->prcm.omap4.rstctrl_offs); -	else -		return -EINVAL; +	ret = soc_ops.assert_hardreset(oh, &ohri); + +	return ret;  }  /** @@ -1481,38 +1451,29 @@ static int _assert_hardreset(struct omap_hwmod *oh, const char *name)   * @oh: struct omap_hwmod *   * @name: name of the reset line to look up and deassert   * - * Some IP like dsp, ipu or iva contain processor that require - * an HW reset line to be assert / deassert in order to enable fully - * the IP. + * Some IP like dsp, ipu or iva contain processor that require an HW + * reset line to be assert / deassert in order to enable fully the IP. + * Returns -EINVAL if @oh is null, -ENOSYS if we have no way of + * deasserting the hardreset line on the currently-booted SoC, or passes + * along the return value from _lookup_hardreset() or the SoC's + * deassert_hardreset code.   */  static int _deassert_hardreset(struct omap_hwmod *oh, const char *name)  {  	struct omap_hwmod_rst_info ohri; -	int ret; +	int ret = -EINVAL;  	if (!oh)  		return -EINVAL; +	if (!soc_ops.deassert_hardreset) +		return -ENOSYS; +  	ret = _lookup_hardreset(oh, name, &ohri);  	if (IS_ERR_VALUE(ret))  		return ret; -	if (cpu_is_omap24xx() || cpu_is_omap34xx()) { -		ret = omap2_prm_deassert_hardreset(oh->prcm.omap2.module_offs, -						   ohri.rst_shift, -						   ohri.st_shift); -	} else if (cpu_is_omap44xx()) { -		if (ohri.st_shift) -			pr_err("omap_hwmod: %s: %s: hwmod data error: OMAP4 does not support st_shift\n", -			       oh->name, name); -		ret = omap4_prminst_deassert_hardreset(ohri.rst_shift, -				  oh->clkdm->pwrdm.ptr->prcm_partition, -				  oh->clkdm->pwrdm.ptr->prcm_offs, -				  oh->prcm.omap4.rstctrl_offs); -	} else { -		return -EINVAL; -	} - +	ret = soc_ops.deassert_hardreset(oh, &ohri);  	if (ret == -EBUSY)  		pr_warning("omap_hwmod: %s: failed to hardreset\n", oh->name); @@ -1525,31 +1486,28 @@ static int _deassert_hardreset(struct omap_hwmod *oh, const char *name)   * @oh: struct omap_hwmod *   * @name: name of the reset line to look up and read   * - * Return the state of the reset line. + * Return the state of the reset line.  Returns -EINVAL if @oh is + * null, -ENOSYS if we have no way of reading the hardreset line + * status on the currently-booted SoC, or passes along the return + * value from _lookup_hardreset() or the SoC's is_hardreset_asserted + * code.   */  static int _read_hardreset(struct omap_hwmod *oh, const char *name)  {  	struct omap_hwmod_rst_info ohri; -	u8 ret; +	u8 ret = -EINVAL;  	if (!oh)  		return -EINVAL; +	if (!soc_ops.is_hardreset_asserted) +		return -ENOSYS; +  	ret = _lookup_hardreset(oh, name, &ohri);  	if (IS_ERR_VALUE(ret))  		return ret; -	if (cpu_is_omap24xx() || cpu_is_omap34xx()) { -		return omap2_prm_is_hardreset_asserted(oh->prcm.omap2.module_offs, -						       ohri.st_shift); -	} else if (cpu_is_omap44xx()) { -		return omap4_prminst_is_hardreset_asserted(ohri.rst_shift, -				  oh->clkdm->pwrdm.ptr->prcm_partition, -				  oh->clkdm->pwrdm.ptr->prcm_offs, -				  oh->prcm.omap4.rstctrl_offs); -	} else { -		return -EINVAL; -	} +	return soc_ops.is_hardreset_asserted(oh, &ohri);  }  /** @@ -1587,10 +1545,6 @@ static int _omap4_disable_module(struct omap_hwmod *oh)  {  	int v; -	/* The module mode does not exist prior OMAP4 */ -	if (!cpu_is_omap44xx()) -		return -EINVAL; -  	if (!oh->clkdm || !oh->prcm.omap4.modulemode)  		return -EINVAL; @@ -1830,9 +1784,11 @@ static int _enable(struct omap_hwmod *oh)  	}  	_enable_clocks(oh); -	_enable_module(oh); +	if (soc_ops.enable_module) +		soc_ops.enable_module(oh); -	r = _wait_target_ready(oh); +	r = (soc_ops.wait_target_ready) ? soc_ops.wait_target_ready(oh) : +		-EINVAL;  	if (!r) {  		/*  		 * Set the clockdomain to HW_AUTO only if the target is ready, @@ -1886,7 +1842,8 @@ static int _idle(struct omap_hwmod *oh)  		_idle_sysc(oh);  	_del_initiator_dep(oh, mpu_oh); -	_omap4_disable_module(oh); +	if (soc_ops.disable_module) +		soc_ops.disable_module(oh);  	/*  	 * The module must be in idle mode before disabling any parents @@ -1991,7 +1948,8 @@ static int _shutdown(struct omap_hwmod *oh)  	if (oh->_state == _HWMOD_STATE_ENABLED) {  		_del_initiator_dep(oh, mpu_oh);  		/* XXX what about the other system initiators here? dma, dsp */ -		_omap4_disable_module(oh); +		if (soc_ops.disable_module) +			soc_ops.disable_module(oh);  		_disable_clocks(oh);  		if (oh->clkdm)  			clkdm_hwmod_disable(oh->clkdm, oh); @@ -2447,6 +2405,194 @@ static int __init _alloc_linkspace(struct omap_hwmod_ocp_if **ois)  	return 0;  } +/* Static functions intended only for use in soc_ops field function pointers */ + +/** + * _omap2_wait_target_ready - wait for a module to leave slave idle + * @oh: struct omap_hwmod * + * + * Wait for a module @oh to leave slave idle.  Returns 0 if the module + * does not have an IDLEST bit or if the module successfully leaves + * slave idle; otherwise, pass along the return value of the + * appropriate *_cm*_wait_module_ready() function. + */ +static int _omap2_wait_target_ready(struct omap_hwmod *oh) +{ +	if (!oh) +		return -EINVAL; + +	if (oh->flags & HWMOD_NO_IDLEST) +		return 0; + +	if (!_find_mpu_rt_port(oh)) +		return 0; + +	/* XXX check module SIDLEMODE, hardreset status, enabled clocks */ + +	return omap2_cm_wait_module_ready(oh->prcm.omap2.module_offs, +					  oh->prcm.omap2.idlest_reg_id, +					  oh->prcm.omap2.idlest_idle_bit); +} + +/** + * _omap4_wait_target_ready - wait for a module to leave slave idle + * @oh: struct omap_hwmod * + * + * Wait for a module @oh to leave slave idle.  Returns 0 if the module + * does not have an IDLEST bit or if the module successfully leaves + * slave idle; otherwise, pass along the return value of the + * appropriate *_cm*_wait_module_ready() function. + */ +static int _omap4_wait_target_ready(struct omap_hwmod *oh) +{ +	if (!oh || !oh->clkdm) +		return -EINVAL; + +	if (oh->flags & HWMOD_NO_IDLEST) +		return 0; + +	if (!_find_mpu_rt_port(oh)) +		return 0; + +	/* XXX check module SIDLEMODE, hardreset status */ + +	return omap4_cminst_wait_module_ready(oh->clkdm->prcm_partition, +					      oh->clkdm->cm_inst, +					      oh->clkdm->clkdm_offs, +					      oh->prcm.omap4.clkctrl_offs); +} + +/** + * _omap2_assert_hardreset - call OMAP2 PRM hardreset fn with hwmod args + * @oh: struct omap_hwmod * to assert hardreset + * @ohri: hardreset line data + * + * Call omap2_prm_assert_hardreset() with parameters extracted from + * the hwmod @oh and the hardreset line data @ohri.  Only intended for + * use as an soc_ops function pointer.  Passes along the return value + * from omap2_prm_assert_hardreset().  XXX This function is scheduled + * for removal when the PRM code is moved into drivers/. + */ +static int _omap2_assert_hardreset(struct omap_hwmod *oh, +				   struct omap_hwmod_rst_info *ohri) +{ +	return omap2_prm_assert_hardreset(oh->prcm.omap2.module_offs, +					  ohri->rst_shift); +} + +/** + * _omap2_deassert_hardreset - call OMAP2 PRM hardreset fn with hwmod args + * @oh: struct omap_hwmod * to deassert hardreset + * @ohri: hardreset line data + * + * Call omap2_prm_deassert_hardreset() with parameters extracted from + * the hwmod @oh and the hardreset line data @ohri.  Only intended for + * use as an soc_ops function pointer.  Passes along the return value + * from omap2_prm_deassert_hardreset().  XXX This function is + * scheduled for removal when the PRM code is moved into drivers/. + */ +static int _omap2_deassert_hardreset(struct omap_hwmod *oh, +				     struct omap_hwmod_rst_info *ohri) +{ +	return omap2_prm_deassert_hardreset(oh->prcm.omap2.module_offs, +					    ohri->rst_shift, +					    ohri->st_shift); +} + +/** + * _omap2_is_hardreset_asserted - call OMAP2 PRM hardreset fn with hwmod args + * @oh: struct omap_hwmod * to test hardreset + * @ohri: hardreset line data + * + * Call omap2_prm_is_hardreset_asserted() with parameters extracted + * from the hwmod @oh and the hardreset line data @ohri.  Only + * intended for use as an soc_ops function pointer.  Passes along the + * return value from omap2_prm_is_hardreset_asserted().  XXX This + * function is scheduled for removal when the PRM code is moved into + * drivers/. + */ +static int _omap2_is_hardreset_asserted(struct omap_hwmod *oh, +					struct omap_hwmod_rst_info *ohri) +{ +	return omap2_prm_is_hardreset_asserted(oh->prcm.omap2.module_offs, +					       ohri->st_shift); +} + +/** + * _omap4_assert_hardreset - call OMAP4 PRM hardreset fn with hwmod args + * @oh: struct omap_hwmod * to assert hardreset + * @ohri: hardreset line data + * + * Call omap4_prminst_assert_hardreset() with parameters extracted + * from the hwmod @oh and the hardreset line data @ohri.  Only + * intended for use as an soc_ops function pointer.  Passes along the + * return value from omap4_prminst_assert_hardreset().  XXX This + * function is scheduled for removal when the PRM code is moved into + * drivers/. + */ +static int _omap4_assert_hardreset(struct omap_hwmod *oh, +				   struct omap_hwmod_rst_info *ohri) +{ +	if (!oh->clkdm) +		return -EINVAL; + +	return omap4_prminst_assert_hardreset(ohri->rst_shift, +				oh->clkdm->pwrdm.ptr->prcm_partition, +				oh->clkdm->pwrdm.ptr->prcm_offs, +				oh->prcm.omap4.rstctrl_offs); +} + +/** + * _omap4_deassert_hardreset - call OMAP4 PRM hardreset fn with hwmod args + * @oh: struct omap_hwmod * to deassert hardreset + * @ohri: hardreset line data + * + * Call omap4_prminst_deassert_hardreset() with parameters extracted + * from the hwmod @oh and the hardreset line data @ohri.  Only + * intended for use as an soc_ops function pointer.  Passes along the + * return value from omap4_prminst_deassert_hardreset().  XXX This + * function is scheduled for removal when the PRM code is moved into + * drivers/. + */ +static int _omap4_deassert_hardreset(struct omap_hwmod *oh, +				     struct omap_hwmod_rst_info *ohri) +{ +	if (!oh->clkdm) +		return -EINVAL; + +	if (ohri->st_shift) +		pr_err("omap_hwmod: %s: %s: hwmod data error: OMAP4 does not support st_shift\n", +		       oh->name, ohri->name); +	return omap4_prminst_deassert_hardreset(ohri->rst_shift, +				oh->clkdm->pwrdm.ptr->prcm_partition, +				oh->clkdm->pwrdm.ptr->prcm_offs, +				oh->prcm.omap4.rstctrl_offs); +} + +/** + * _omap4_is_hardreset_asserted - call OMAP4 PRM hardreset fn with hwmod args + * @oh: struct omap_hwmod * to test hardreset + * @ohri: hardreset line data + * + * Call omap4_prminst_is_hardreset_asserted() with parameters + * extracted from the hwmod @oh and the hardreset line data @ohri. + * Only intended for use as an soc_ops function pointer.  Passes along + * the return value from omap4_prminst_is_hardreset_asserted().  XXX + * This function is scheduled for removal when the PRM code is moved + * into drivers/. + */ +static int _omap4_is_hardreset_asserted(struct omap_hwmod *oh, +					struct omap_hwmod_rst_info *ohri) +{ +	if (!oh->clkdm) +		return -EINVAL; + +	return omap4_prminst_is_hardreset_asserted(ohri->rst_shift, +				oh->clkdm->pwrdm.ptr->prcm_partition, +				oh->clkdm->pwrdm.ptr->prcm_offs, +				oh->prcm.omap4.rstctrl_offs); +} +  /* Public functions */  u32 omap_hwmod_read(struct omap_hwmod *oh, u16 reg_offs) @@ -2579,12 +2725,18 @@ int omap_hwmod_for_each(int (*fn)(struct omap_hwmod *oh, void *data),   *   * Intended to be called early in boot before the clock framework is   * initialized.  If @ois is not null, will register all omap_hwmods - * listed in @ois that are valid for this chip.  Returns 0. + * listed in @ois that are valid for this chip.  Returns -EINVAL if + * omap_hwmod_init() hasn't been called before calling this function, + * -ENOMEM if the link memory area can't be allocated, or 0 upon + * success.   */  int __init omap_hwmod_register_links(struct omap_hwmod_ocp_if **ois)  {  	int r, i; +	if (!inited) +		return -EINVAL; +  	if (!ois)  		return 0; @@ -3417,3 +3569,32 @@ int omap_hwmod_pad_route_irq(struct omap_hwmod *oh, int pad_idx, int irq_idx)  	return 0;  } + +/** + * omap_hwmod_init - initialize the hwmod code + * + * Sets up some function pointers needed by the hwmod code to operate on the + * currently-booted SoC.  Intended to be called once during kernel init + * before any hwmods are registered.  No return value. + */ +void __init omap_hwmod_init(void) +{ +	if (cpu_is_omap24xx() || cpu_is_omap34xx()) { +		soc_ops.wait_target_ready = _omap2_wait_target_ready; +		soc_ops.assert_hardreset = _omap2_assert_hardreset; +		soc_ops.deassert_hardreset = _omap2_deassert_hardreset; +		soc_ops.is_hardreset_asserted = _omap2_is_hardreset_asserted; +	} else if (cpu_is_omap44xx()) { +		soc_ops.enable_module = _omap4_enable_module; +		soc_ops.disable_module = _omap4_disable_module; +		soc_ops.wait_target_ready = _omap4_wait_target_ready; +		soc_ops.assert_hardreset = _omap4_assert_hardreset; +		soc_ops.deassert_hardreset = _omap4_deassert_hardreset; +		soc_ops.is_hardreset_asserted = _omap4_is_hardreset_asserted; +		soc_ops.init_clkdm = _init_clkdm; +	} else { +		WARN(1, "omap_hwmod: unknown SoC type\n"); +	} + +	inited = true; +} diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c index a7640d1b215..50cfab61b0e 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c @@ -192,6 +192,11 @@ static struct omap_hwmod_class omap2420_mcbsp_hwmod_class = {  	.name = "mcbsp",  }; +static struct omap_hwmod_opt_clk mcbsp_opt_clks[] = { +	{ .role = "pad_fck", .clk = "mcbsp_clks" }, +	{ .role = "prcm_fck", .clk = "func_96m_ck" }, +}; +  /* mcbsp1 */  static struct omap_hwmod_irq_info omap2420_mcbsp1_irqs[] = {  	{ .name = "tx", .irq = 59 }, @@ -214,6 +219,8 @@ static struct omap_hwmod omap2420_mcbsp1_hwmod = {  			.idlest_idle_bit = OMAP24XX_ST_MCBSP1_SHIFT,  		},  	}, +	.opt_clks	= mcbsp_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(mcbsp_opt_clks),  };  /* mcbsp2 */ @@ -238,6 +245,8 @@ static struct omap_hwmod omap2420_mcbsp2_hwmod = {  			.idlest_idle_bit = OMAP24XX_ST_MCBSP2_SHIFT,  		},  	}, +	.opt_clks	= mcbsp_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(mcbsp_opt_clks),  };  static struct omap_hwmod_class_sysconfig omap2420_msdi_sysc = { @@ -585,5 +594,6 @@ static struct omap_hwmod_ocp_if *omap2420_hwmod_ocp_ifs[] __initdata = {  int __init omap2420_hwmod_init(void)  { +	omap_hwmod_init();  	return omap_hwmod_register_links(omap2420_hwmod_ocp_ifs);  } diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c index 4d726498123..58b5bc196d3 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c @@ -296,6 +296,11 @@ static struct omap_hwmod_class omap2430_mcbsp_hwmod_class = {  	.rev  = MCBSP_CONFIG_TYPE2,  }; +static struct omap_hwmod_opt_clk mcbsp_opt_clks[] = { +	{ .role = "pad_fck", .clk = "mcbsp_clks" }, +	{ .role = "prcm_fck", .clk = "func_96m_ck" }, +}; +  /* mcbsp1 */  static struct omap_hwmod_irq_info omap2430_mcbsp1_irqs[] = {  	{ .name = "tx",		.irq = 59 }, @@ -320,6 +325,8 @@ static struct omap_hwmod omap2430_mcbsp1_hwmod = {  			.idlest_idle_bit = OMAP24XX_ST_MCBSP1_SHIFT,  		},  	}, +	.opt_clks	= mcbsp_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(mcbsp_opt_clks),  };  /* mcbsp2 */ @@ -345,6 +352,8 @@ static struct omap_hwmod omap2430_mcbsp2_hwmod = {  			.idlest_idle_bit = OMAP24XX_ST_MCBSP2_SHIFT,  		},  	}, +	.opt_clks	= mcbsp_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(mcbsp_opt_clks),  };  /* mcbsp3 */ @@ -370,6 +379,8 @@ static struct omap_hwmod omap2430_mcbsp3_hwmod = {  			.idlest_idle_bit = OMAP2430_ST_MCBSP3_SHIFT,  		},  	}, +	.opt_clks	= mcbsp_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(mcbsp_opt_clks),  };  /* mcbsp4 */ @@ -401,6 +412,8 @@ static struct omap_hwmod omap2430_mcbsp4_hwmod = {  			.idlest_idle_bit = OMAP2430_ST_MCBSP4_SHIFT,  		},  	}, +	.opt_clks	= mcbsp_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(mcbsp_opt_clks),  };  /* mcbsp5 */ @@ -432,6 +445,8 @@ static struct omap_hwmod omap2430_mcbsp5_hwmod = {  			.idlest_idle_bit = OMAP2430_ST_MCBSP5_SHIFT,  		},  	}, +	.opt_clks	= mcbsp_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(mcbsp_opt_clks),  };  /* MMC/SD/SDIO common */ @@ -938,5 +953,6 @@ static struct omap_hwmod_ocp_if *omap2430_hwmod_ocp_ifs[] __initdata = {  int __init omap2430_hwmod_init(void)  { +	omap_hwmod_init();  	return omap_hwmod_register_links(omap2430_hwmod_ocp_ifs);  } diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index a8653af1969..892c7c74097 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c @@ -1093,6 +1093,17 @@ static struct omap_hwmod_class omap3xxx_mcbsp_hwmod_class = {  	.rev  = MCBSP_CONFIG_TYPE3,  }; +/* McBSP functional clock mapping */ +static struct omap_hwmod_opt_clk mcbsp15_opt_clks[] = { +	{ .role = "pad_fck", .clk = "mcbsp_clks" }, +	{ .role = "prcm_fck", .clk = "core_96m_fck" }, +}; + +static struct omap_hwmod_opt_clk mcbsp234_opt_clks[] = { +	{ .role = "pad_fck", .clk = "mcbsp_clks" }, +	{ .role = "prcm_fck", .clk = "per_96m_fck" }, +}; +  /* mcbsp1 */  static struct omap_hwmod_irq_info omap3xxx_mcbsp1_irqs[] = {  	{ .name = "common", .irq = 16 }, @@ -1116,6 +1127,8 @@ static struct omap_hwmod omap3xxx_mcbsp1_hwmod = {  			.idlest_idle_bit = OMAP3430_ST_MCBSP1_SHIFT,  		},  	}, +	.opt_clks	= mcbsp15_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(mcbsp15_opt_clks),  };  /* mcbsp2 */ @@ -1145,6 +1158,8 @@ static struct omap_hwmod omap3xxx_mcbsp2_hwmod = {  			.idlest_idle_bit = OMAP3430_ST_MCBSP2_SHIFT,  		},  	}, +	.opt_clks	= mcbsp234_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(mcbsp234_opt_clks),  	.dev_attr	= &omap34xx_mcbsp2_dev_attr,  }; @@ -1175,6 +1190,8 @@ static struct omap_hwmod omap3xxx_mcbsp3_hwmod = {  			.idlest_idle_bit = OMAP3430_ST_MCBSP3_SHIFT,  		},  	}, +	.opt_clks	= mcbsp234_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(mcbsp234_opt_clks),  	.dev_attr	= &omap34xx_mcbsp3_dev_attr,  }; @@ -1207,6 +1224,8 @@ static struct omap_hwmod omap3xxx_mcbsp4_hwmod = {  			.idlest_idle_bit = OMAP3430_ST_MCBSP4_SHIFT,  		},  	}, +	.opt_clks	= mcbsp234_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(mcbsp234_opt_clks),  };  /* mcbsp5 */ @@ -1238,6 +1257,8 @@ static struct omap_hwmod omap3xxx_mcbsp5_hwmod = {  			.idlest_idle_bit = OMAP3430_ST_MCBSP5_SHIFT,  		},  	}, +	.opt_clks	= mcbsp15_opt_clks, +	.opt_clks_cnt	= ARRAY_SIZE(mcbsp15_opt_clks),  };  /* 'mcbsp sidetone' class */ @@ -3404,6 +3425,8 @@ int __init omap3xxx_hwmod_init(void)  	struct omap_hwmod_ocp_if **h = NULL;  	unsigned int rev; +	omap_hwmod_init(); +  	/* Register hwmod links common to all OMAP3 */  	r = omap_hwmod_register_links(omap3xxx_hwmod_ocp_ifs);  	if (r < 0) diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c index b7bcba5221b..4cab6318d33 100644 --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c @@ -2544,14 +2544,12 @@ static struct omap_hwmod omap44xx_prcm_mpu_hwmod = {  static struct omap_hwmod omap44xx_cm_core_aon_hwmod = {  	.name		= "cm_core_aon",  	.class		= &omap44xx_prcm_hwmod_class, -	.clkdm_name	= "cm_clkdm",  };  /* cm_core */  static struct omap_hwmod omap44xx_cm_core_hwmod = {  	.name		= "cm_core",  	.class		= &omap44xx_prcm_hwmod_class, -	.clkdm_name	= "cm_clkdm",  };  /* prm */ @@ -2568,7 +2566,6 @@ static struct omap_hwmod_rst_info omap44xx_prm_resets[] = {  static struct omap_hwmod omap44xx_prm_hwmod = {  	.name		= "prm",  	.class		= &omap44xx_prcm_hwmod_class, -	.clkdm_name	= "prm_clkdm",  	.mpu_irqs	= omap44xx_prm_irqs,  	.rst_lines	= omap44xx_prm_resets,  	.rst_lines_cnt	= ARRAY_SIZE(omap44xx_prm_resets), @@ -6148,6 +6145,7 @@ static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = {  int __init omap44xx_hwmod_init(void)  { +	omap_hwmod_init();  	return omap_hwmod_register_links(omap44xx_hwmod_ocp_ifs);  } diff --git a/arch/arm/mach-omap2/usb-fs.c b/arch/arm/mach-omap2/usb-fs.c deleted file mode 100644 index 1481078763b..00000000000 --- a/arch/arm/mach-omap2/usb-fs.c +++ /dev/null @@ -1,359 +0,0 @@ -/* - * Platform level USB initialization for FS USB OTG controller on omap1 and 24xx - * - * Copyright (C) 2004 Texas Instruments, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ - -#include <linux/module.h> -#include <linux/kernel.h> -#include <linux/types.h> -#include <linux/errno.h> -#include <linux/init.h> -#include <linux/platform_device.h> -#include <linux/clk.h> -#include <linux/err.h> - -#include <asm/irq.h> - -#include <plat/usb.h> -#include <plat/board.h> - -#include "control.h" -#include "mux.h" - -#define INT_USB_IRQ_GEN		INT_24XX_USB_IRQ_GEN -#define INT_USB_IRQ_NISO	INT_24XX_USB_IRQ_NISO -#define INT_USB_IRQ_ISO		INT_24XX_USB_IRQ_ISO -#define INT_USB_IRQ_HGEN	INT_24XX_USB_IRQ_HGEN -#define INT_USB_IRQ_OTG		INT_24XX_USB_IRQ_OTG - -#if defined(CONFIG_ARCH_OMAP2) - -#ifdef	CONFIG_USB_GADGET_OMAP - -static struct resource udc_resources[] = { -	/* order is significant! */ -	{		/* registers */ -		.start		= UDC_BASE, -		.end		= UDC_BASE + 0xff, -		.flags		= IORESOURCE_MEM, -	}, {		/* general IRQ */ -		.start		= INT_USB_IRQ_GEN, -		.flags		= IORESOURCE_IRQ, -	}, {		/* PIO IRQ */ -		.start		= INT_USB_IRQ_NISO, -		.flags		= IORESOURCE_IRQ, -	}, {		/* SOF IRQ */ -		.start		= INT_USB_IRQ_ISO, -		.flags		= IORESOURCE_IRQ, -	}, -}; - -static u64 udc_dmamask = ~(u32)0; - -static struct platform_device udc_device = { -	.name		= "omap_udc", -	.id		= -1, -	.dev = { -		.dma_mask		= &udc_dmamask, -		.coherent_dma_mask	= 0xffffffff, -	}, -	.num_resources	= ARRAY_SIZE(udc_resources), -	.resource	= udc_resources, -}; - -static inline void udc_device_init(struct omap_usb_config *pdata) -{ -	pdata->udc_device = &udc_device; -} - -#else - -static inline void udc_device_init(struct omap_usb_config *pdata) -{ -} - -#endif - -#if	defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) - -/* The dmamask must be set for OHCI to work */ -static u64 ohci_dmamask = ~(u32)0; - -static struct resource ohci_resources[] = { -	{ -		.start	= OMAP_OHCI_BASE, -		.end	= OMAP_OHCI_BASE + 0xff, -		.flags	= IORESOURCE_MEM, -	}, -	{ -		.start	= INT_USB_IRQ_HGEN, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device ohci_device = { -	.name			= "ohci", -	.id			= -1, -	.dev = { -		.dma_mask		= &ohci_dmamask, -		.coherent_dma_mask	= 0xffffffff, -	}, -	.num_resources	= ARRAY_SIZE(ohci_resources), -	.resource		= ohci_resources, -}; - -static inline void ohci_device_init(struct omap_usb_config *pdata) -{ -	pdata->ohci_device = &ohci_device; -} - -#else - -static inline void ohci_device_init(struct omap_usb_config *pdata) -{ -} - -#endif - -#if	defined(CONFIG_USB_OTG) && defined(CONFIG_ARCH_OMAP_OTG) - -static struct resource otg_resources[] = { -	/* order is significant! */ -	{ -		.start		= OTG_BASE, -		.end		= OTG_BASE + 0xff, -		.flags		= IORESOURCE_MEM, -	}, { -		.start		= INT_USB_IRQ_OTG, -		.flags		= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device otg_device = { -	.name		= "omap_otg", -	.id		= -1, -	.num_resources	= ARRAY_SIZE(otg_resources), -	.resource	= otg_resources, -}; - -static inline void otg_device_init(struct omap_usb_config *pdata) -{ -	pdata->otg_device = &otg_device; -} - -#else - -static inline void otg_device_init(struct omap_usb_config *pdata) -{ -} - -#endif - -static void omap2_usb_devconf_clear(u8 port, u32 mask) -{ -	u32 r; - -	r = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0); -	r &= ~USBTXWRMODEI(port, mask); -	omap_ctrl_writel(r, OMAP2_CONTROL_DEVCONF0); -} - -static void omap2_usb_devconf_set(u8 port, u32 mask) -{ -	u32 r; - -	r = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0); -	r |= USBTXWRMODEI(port, mask); -	omap_ctrl_writel(r, OMAP2_CONTROL_DEVCONF0); -} - -static void omap2_usb2_disable_5pinbitll(void) -{ -	u32 r; - -	r = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0); -	r &= ~(USBTXWRMODEI(2, USB_BIDIR_TLL) | USBT2TLL5PI); -	omap_ctrl_writel(r, OMAP2_CONTROL_DEVCONF0); -} - -static void omap2_usb2_enable_5pinunitll(void) -{ -	u32 r; - -	r = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0); -	r |= USBTXWRMODEI(2, USB_UNIDIR_TLL) | USBT2TLL5PI; -	omap_ctrl_writel(r, OMAP2_CONTROL_DEVCONF0); -} - -static u32 __init omap2_usb0_init(unsigned nwires, unsigned is_device) -{ -	u32	syscon1 = 0; - -	omap2_usb_devconf_clear(0, USB_BIDIR_TLL); - -	if (nwires == 0) -		return 0; - -	if (is_device) -		omap_mux_init_signal("usb0_puen", 0); - -	omap_mux_init_signal("usb0_dat", 0); -	omap_mux_init_signal("usb0_txen", 0); -	omap_mux_init_signal("usb0_se0", 0); -	if (nwires != 3) -		omap_mux_init_signal("usb0_rcv", 0); - -	switch (nwires) { -	case 3: -		syscon1 = 2; -		omap2_usb_devconf_set(0, USB_BIDIR); -		break; -	case 4: -		syscon1 = 1; -		omap2_usb_devconf_set(0, USB_BIDIR); -		break; -	case 6: -		syscon1 = 3; -		omap_mux_init_signal("usb0_vp", 0); -		omap_mux_init_signal("usb0_vm", 0); -		omap2_usb_devconf_set(0, USB_UNIDIR); -		break; -	default: -		printk(KERN_ERR "illegal usb%d %d-wire transceiver\n", -			0, nwires); -	} - -	return syscon1 << 16; -} - -static u32 __init omap2_usb1_init(unsigned nwires) -{ -	u32	syscon1 = 0; - -	omap2_usb_devconf_clear(1, USB_BIDIR_TLL); - -	if (nwires == 0) -		return 0; - -	/* NOTE:  board-specific code must set up pin muxing for usb1, -	 * since each signal could come out on either of two balls. -	 */ - -	switch (nwires) { -	case 2: -		/* NOTE: board-specific code must override this setting if -		 * this TLL link is not using DP/DM -		 */ -		syscon1 = 1; -		omap2_usb_devconf_set(1, USB_BIDIR_TLL); -		break; -	case 3: -		syscon1 = 2; -		omap2_usb_devconf_set(1, USB_BIDIR); -		break; -	case 4: -		syscon1 = 1; -		omap2_usb_devconf_set(1, USB_BIDIR); -		break; -	case 6: -	default: -		printk(KERN_ERR "illegal usb%d %d-wire transceiver\n", -			1, nwires); -	} - -	return syscon1 << 20; -} - -static u32 __init omap2_usb2_init(unsigned nwires, unsigned alt_pingroup) -{ -	u32	syscon1 = 0; - -	omap2_usb2_disable_5pinbitll(); -	alt_pingroup = 0; - -	/* NOTE omap1 erratum: must leave USB2_UNI_R set if usb0 in use */ -	if (alt_pingroup || nwires == 0) -		return 0; - -	omap_mux_init_signal("usb2_dat", 0); -	omap_mux_init_signal("usb2_se0", 0); -	if (nwires > 2) -		omap_mux_init_signal("usb2_txen", 0); -	if (nwires > 3) -		omap_mux_init_signal("usb2_rcv", 0); - -	switch (nwires) { -	case 2: -		/* NOTE: board-specific code must override this setting if -		 * this TLL link is not using DP/DM -		 */ -		syscon1 = 1; -		omap2_usb_devconf_set(2, USB_BIDIR_TLL); -		break; -	case 3: -		syscon1 = 2; -		omap2_usb_devconf_set(2, USB_BIDIR); -		break; -	case 4: -		syscon1 = 1; -		omap2_usb_devconf_set(2, USB_BIDIR); -		break; -	case 5: -		/* NOTE: board-specific code must mux this setting depending -		 * on TLL link using DP/DM.  Something must also -		 * set up OTG_SYSCON2.HMC_TLL{ATTACH,SPEED} -		 * 2420: hdq_sio.usb2_tllse0 or vlynq_rx0.usb2_tllse0 -		 * 2430: hdq_sio.usb2_tllse0 or sdmmc2_dat0.usb2_tllse0 -		 */ - -		syscon1 = 3; -		omap2_usb2_enable_5pinunitll(); -		break; -	case 6: -	default: -		printk(KERN_ERR "illegal usb%d %d-wire transceiver\n", -			2, nwires); -	} - -	return syscon1 << 24; -} - -void __init omap2_usbfs_init(struct omap_usb_config *pdata) -{ -	struct clk *ick; - -	if (!cpu_is_omap24xx()) -		return; - -	ick = clk_get(NULL, "usb_l4_ick"); -	if (IS_ERR(ick)) -		return; - -	clk_enable(ick); -	pdata->usb0_init = omap2_usb0_init; -	pdata->usb1_init = omap2_usb1_init; -	pdata->usb2_init = omap2_usb2_init; -	udc_device_init(pdata); -	ohci_device_init(pdata); -	otg_device_init(pdata); -	omap_otg_init(pdata); -	clk_disable(ick); -	clk_put(ick); -} - -#endif diff --git a/arch/arm/mach-s3c24xx/common-smdk.c b/arch/arm/mach-s3c24xx/common-smdk.c index 084604be6ad..87e75a250d5 100644 --- a/arch/arm/mach-s3c24xx/common-smdk.c +++ b/arch/arm/mach-s3c24xx/common-smdk.c @@ -182,19 +182,21 @@ static struct platform_device __initdata *smdk_devs[] = {  	&smdk_led7,  }; +static const struct gpio smdk_led_gpios[] = { +	{ S3C2410_GPF(4), GPIOF_OUT_INIT_HIGH, NULL }, +	{ S3C2410_GPF(5), GPIOF_OUT_INIT_HIGH, NULL }, +	{ S3C2410_GPF(6), GPIOF_OUT_INIT_HIGH, NULL }, +	{ S3C2410_GPF(7), GPIOF_OUT_INIT_HIGH, NULL }, +}; +  void __init smdk_machine_init(void)  {  	/* Configure the LEDs (even if we have no LED support)*/ -	s3c_gpio_cfgpin(S3C2410_GPF(4), S3C2410_GPIO_OUTPUT); -	s3c_gpio_cfgpin(S3C2410_GPF(5), S3C2410_GPIO_OUTPUT); -	s3c_gpio_cfgpin(S3C2410_GPF(6), S3C2410_GPIO_OUTPUT); -	s3c_gpio_cfgpin(S3C2410_GPF(7), S3C2410_GPIO_OUTPUT); - -	s3c2410_gpio_setpin(S3C2410_GPF(4), 1); -	s3c2410_gpio_setpin(S3C2410_GPF(5), 1); -	s3c2410_gpio_setpin(S3C2410_GPF(6), 1); -	s3c2410_gpio_setpin(S3C2410_GPF(7), 1); +	int ret = gpio_request_array(smdk_led_gpios, +				     ARRAY_SIZE(smdk_led_gpios)); +	if (!WARN_ON(ret < 0)) +		gpio_free_array(smdk_led_gpios, ARRAY_SIZE(smdk_led_gpios));  	if (machine_is_smdk2443())  		smdk_nand_info.twrph0 = 50; diff --git a/arch/arm/mach-s3c24xx/common.c b/arch/arm/mach-s3c24xx/common.c index 56cdd34cce4..0c9e9a785ef 100644 --- a/arch/arm/mach-s3c24xx/common.c +++ b/arch/arm/mach-s3c24xx/common.c @@ -41,7 +41,6 @@  #include <asm/mach/arch.h>  #include <asm/mach/map.h> -#include <mach/regs-clock.h>  #include <mach/regs-gpio.h>  #include <plat/regs-serial.h> diff --git a/arch/arm/mach-s3c24xx/include/mach/bast-pmu.h b/arch/arm/mach-s3c24xx/include/mach/bast-pmu.h deleted file mode 100644 index 4c38b39b741..00000000000 --- a/arch/arm/mach-s3c24xx/include/mach/bast-pmu.h +++ /dev/null @@ -1,40 +0,0 @@ -/* arch/arm/mach-s3c2410/include/mach/bast-pmu.h - * - * Copyright (c) 2003-2004 Simtec Electronics - *	Ben Dooks <ben@simtec.co.uk> - *	Vincent Sanders <vince@simtec.co.uk> - * - * Machine BAST - Power Management chip - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. -*/ - -#ifndef __ASM_ARCH_BASTPMU_H -#define __ASM_ARCH_BASTPMU_H "08_OCT_2004" - -#define BASTPMU_REG_IDENT	(0x00) -#define BASTPMU_REG_VERSION	(0x01) -#define BASTPMU_REG_DDCCTRL	(0x02) -#define BASTPMU_REG_POWER	(0x03) -#define BASTPMU_REG_RESET	(0x04) -#define BASTPMU_REG_GWO		(0x05) -#define BASTPMU_REG_WOL		(0x06) -#define BASTPMU_REG_WOR		(0x07) -#define BASTPMU_REG_UID		(0x09) - -#define BASTPMU_EEPROM		(0xC0) - -#define BASTPMU_EEP_UID		(BASTPMU_EEPROM + 0) -#define BASTPMU_EEP_WOL		(BASTPMU_EEPROM + 8) -#define BASTPMU_EEP_WOR		(BASTPMU_EEPROM + 9) - -#define BASTPMU_IDENT_0		0x53 -#define BASTPMU_IDENT_1		0x42 -#define BASTPMU_IDENT_2		0x50 -#define BASTPMU_IDENT_3		0x4d - -#define BASTPMU_RESET_GUARD	(0x55) - -#endif /* __ASM_ARCH_BASTPMU_H */ diff --git a/arch/arm/mach-s3c24xx/include/mach/gpio-nrs.h b/arch/arm/mach-s3c24xx/include/mach/gpio-nrs.h index 019ea86057f..3890a05948f 100644 --- a/arch/arm/mach-s3c24xx/include/mach/gpio-nrs.h +++ b/arch/arm/mach-s3c24xx/include/mach/gpio-nrs.h @@ -93,26 +93,5 @@ enum s3c_gpio_number {  #define S3C2410_GPL(_nr)	(S3C2410_GPIO_L_START + (_nr))  #define S3C2410_GPM(_nr)	(S3C2410_GPIO_M_START + (_nr)) -/* compatibility until drivers can be modified */ - -#define S3C2410_GPA0	S3C2410_GPA(0) -#define S3C2410_GPA1	S3C2410_GPA(1) -#define S3C2410_GPA3	S3C2410_GPA(3) -#define S3C2410_GPA7	S3C2410_GPA(7) - -#define S3C2410_GPE0	S3C2410_GPE(0) -#define S3C2410_GPE1	S3C2410_GPE(1) -#define S3C2410_GPE2	S3C2410_GPE(2) -#define S3C2410_GPE3	S3C2410_GPE(3) -#define S3C2410_GPE4	S3C2410_GPE(4) -#define S3C2410_GPE5	S3C2410_GPE(5) -#define S3C2410_GPE6	S3C2410_GPE(6) -#define S3C2410_GPE7	S3C2410_GPE(7) -#define S3C2410_GPE8	S3C2410_GPE(8) -#define S3C2410_GPE9	S3C2410_GPE(9) -#define S3C2410_GPE10	S3C2410_GPE(10) - -#define S3C2410_GPH10	S3C2410_GPH(10) -  #endif /* __MACH_GPIONRS_H */ diff --git a/arch/arm/mach-s3c24xx/include/mach/gta02.h b/arch/arm/mach-s3c24xx/include/mach/gta02.h index 3a56a229cac..21739348215 100644 --- a/arch/arm/mach-s3c24xx/include/mach/gta02.h +++ b/arch/arm/mach-s3c24xx/include/mach/gta02.h @@ -3,82 +3,13 @@  #include <mach/regs-gpio.h> -/* Different hardware revisions, passed in ATAG_REVISION by u-boot */ -#define GTA02v1_SYSTEM_REV	0x00000310 -#define GTA02v2_SYSTEM_REV	0x00000320 -#define GTA02v3_SYSTEM_REV	0x00000330 -#define GTA02v4_SYSTEM_REV	0x00000340 -#define GTA02v5_SYSTEM_REV	0x00000350 -/* since A7 is basically same as A6, we use A6 PCB ID */ -#define GTA02v6_SYSTEM_REV	0x00000360 - -#define GTA02_GPIO_n3DL_GSM	S3C2410_GPA(13)	/* v1 + v2 + v3 only */ - -#define GTA02_GPIO_PWR_LED1	S3C2410_GPB(0) -#define GTA02_GPIO_PWR_LED2	S3C2410_GPB(1)  #define GTA02_GPIO_AUX_LED	S3C2410_GPB(2) -#define GTA02_GPIO_VIBRATOR_ON	S3C2410_GPB(3) -#define GTA02_GPIO_MODEM_RST	S3C2410_GPB(5) -#define GTA02_GPIO_BT_EN	S3C2410_GPB(6) -#define GTA02_GPIO_MODEM_ON	S3C2410_GPB(7) -#define GTA02_GPIO_EXTINT8	S3C2410_GPB(8)  #define GTA02_GPIO_USB_PULLUP	S3C2410_GPB(9) - -#define GTA02_GPIO_PIO5		S3C2410_GPC(5)	/* v3 + v4 only */ - -#define GTA02v3_GPIO_nG1_CS	S3C2410_GPD(12)	/* v3 + v4 only */ -#define GTA02v3_GPIO_nG2_CS	S3C2410_GPD(13)	/* v3 + v4 only */ -#define GTA02v5_GPIO_HDQ	S3C2410_GPD(14)   /* v5 + */ - -#define GTA02_GPIO_nG1_INT	S3C2410_GPF(0) -#define GTA02_GPIO_IO1		S3C2410_GPF(1) -#define GTA02_GPIO_PIO_2	S3C2410_GPF(2)	/* v2 + v3 + v4 only */ -#define GTA02_GPIO_JACK_INSERT	S3C2410_GPF(4) -#define GTA02_GPIO_WLAN_GPIO1	S3C2410_GPF(5)	/* v2 + v3 + v4 only */  #define GTA02_GPIO_AUX_KEY	S3C2410_GPF(6)  #define GTA02_GPIO_HOLD_KEY	S3C2410_GPF(7) - -#define GTA02_GPIO_3D_IRQ	S3C2410_GPG(4) -#define GTA02v2_GPIO_nG2_INT	S3C2410_GPG(8)	/* v2 + v3 + v4 only */ -#define GTA02v3_GPIO_nUSB_OC	S3C2410_GPG(9)	/* v3 + v4 only */ -#define GTA02v3_GPIO_nUSB_FLT	S3C2410_GPG(10)	/* v3 + v4 only */ -#define GTA02v3_GPIO_nGSM_OC	S3C2410_GPG(11)	/* v3 + v4 only */ -  #define GTA02_GPIO_AMP_SHUT	S3C2410_GPJ(1)	/* v2 + v3 + v4 only */ -#define GTA02v1_GPIO_WLAN_GPIO10	S3C2410_GPJ(2)  #define GTA02_GPIO_HP_IN	S3C2410_GPJ(2)	/* v2 + v3 + v4 only */ -#define GTA02_GPIO_INT0		S3C2410_GPJ(3)	/* v2 + v3 + v4 only */ -#define GTA02_GPIO_nGSM_EN	S3C2410_GPJ(4) -#define GTA02_GPIO_3D_RESET	S3C2410_GPJ(5) -#define GTA02_GPIO_nDL_GSM	S3C2410_GPJ(6)	/* v4 + v5 only */ -#define GTA02_GPIO_WLAN_GPIO0	S3C2410_GPJ(7) -#define GTA02v1_GPIO_BAT_ID	S3C2410_GPJ(8) -#define GTA02_GPIO_KEEPACT	S3C2410_GPJ(8) -#define GTA02v1_GPIO_HP_IN	S3C2410_GPJ(10) -#define GTA02_CHIP_PWD		S3C2410_GPJ(11)	/* v2 + v3 + v4 only */ -#define GTA02_GPIO_nWLAN_RESET	S3C2410_GPJ(12)	/* v2 + v3 + v4 only */ -#define GTA02_IRQ_GSENSOR_1	IRQ_EINT0 -#define GTA02_IRQ_MODEM		IRQ_EINT1 -#define GTA02_IRQ_PIO_2		IRQ_EINT2	/* v2 + v3 + v4 only */ -#define GTA02_IRQ_nJACK_INSERT	IRQ_EINT4 -#define GTA02_IRQ_WLAN_GPIO1	IRQ_EINT5 -#define GTA02_IRQ_AUX		IRQ_EINT6 -#define GTA02_IRQ_nHOLD		IRQ_EINT7  #define GTA02_IRQ_PCF50633	IRQ_EINT9 -#define GTA02_IRQ_3D		IRQ_EINT12 -#define GTA02_IRQ_GSENSOR_2	IRQ_EINT16	/* v2 + v3 + v4 only */ -#define GTA02v3_IRQ_nUSB_OC	IRQ_EINT17	/* v3 + v4 only */ -#define GTA02v3_IRQ_nUSB_FLT	IRQ_EINT18	/* v3 + v4 only */ -#define GTA02v3_IRQ_nGSM_OC	IRQ_EINT19	/* v3 + v4 only */ - -/* returns 00 000 on GTA02 A5 and earlier, A6 returns 01 001 */ -#define GTA02_PCB_ID1_0		S3C2410_GPC(13) -#define GTA02_PCB_ID1_1		S3C2410_GPC(15) -#define GTA02_PCB_ID1_2		S3C2410_GPD(0) -#define GTA02_PCB_ID2_0		S3C2410_GPD(3) -#define GTA02_PCB_ID2_1		S3C2410_GPD(4) - -int gta02_get_pcb_revision(void);  #endif /* _GTA02_H */ diff --git a/arch/arm/mach-s3c24xx/include/mach/regs-gpio.h b/arch/arm/mach-s3c24xx/include/mach/regs-gpio.h index cac1ad6b582..a11a638bd59 100644 --- a/arch/arm/mach-s3c24xx/include/mach/regs-gpio.h +++ b/arch/arm/mach-s3c24xx/include/mach/regs-gpio.h @@ -302,7 +302,7 @@  /* S3C2410:   * Port G consists of 8 GPIO/IRQ/Special function   * - * GPGCON has 2 bits for each of the input pins on port F + * GPGCON has 2 bits for each of the input pins on port G   *   00 = 0 input, 1 output, 2 interrupt (EINT0..7), 3 special func   *   * pull up works like all other ports. @@ -366,7 +366,7 @@  /* Port H consists of11 GPIO/serial/Misc pins   * - * GPGCON has 2 bits for each of the input pins on port F + * GPHCON has 2 bits for each of the input pins on port H   *   00 = 0 input, 1 output, 2 interrupt (EINT0..7), 3 special func   *   * pull up works like all other ports. @@ -427,6 +427,19 @@   * for the 2412/2413 from the 2410/2440/2442  */ +/* + * Port J consists of 13 GPIO/Camera pins. GPJCON has 2 bits + * for each of the pins on port J. + *   00 - input, 01 output, 10 - camera + * + * Pull up works like all other ports. + */ + +#define S3C2413_GPJCON	   S3C2410_GPIOREG(0x80) +#define S3C2413_GPJDAT	   S3C2410_GPIOREG(0x84) +#define S3C2413_GPJUP	   S3C2410_GPIOREG(0x88) +#define S3C2413_GPJSLPCON  S3C2410_GPIOREG(0x8C) +  /* S3C2443 and above */  #define S3C2440_GPJCON	   S3C2410_GPIOREG(0xD0)  #define S3C2440_GPJDAT	   S3C2410_GPIOREG(0xD4) diff --git a/arch/arm/mach-s3c24xx/include/mach/regs-gpioj.h b/arch/arm/mach-s3c24xx/include/mach/regs-gpioj.h deleted file mode 100644 index 19575e06111..00000000000 --- a/arch/arm/mach-s3c24xx/include/mach/regs-gpioj.h +++ /dev/null @@ -1,70 +0,0 @@ -/* arch/arm/mach-s3c2410/include/mach/regs-gpioj.h - * - * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk> - *		      http://www.simtec.co.uk/products/SWLINUX/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * S3C2440 GPIO J register definitions -*/ - - -#ifndef __ASM_ARCH_REGS_GPIOJ_H -#define __ASM_ARCH_REGS_GPIOJ_H "gpioj" - -/* Port J consists of 13 GPIO/Camera pins - * - * GPJCON has 2 bits for each of the input pins on port F - *   00 = 0 input, 1 output, 2 Camera - * - * pull up works like all other ports. -*/ - -#define S3C2413_GPJCON		S3C2410_GPIOREG(0x80) -#define S3C2413_GPJDAT		S3C2410_GPIOREG(0x84) -#define S3C2413_GPJUP		S3C2410_GPIOREG(0x88) -#define S3C2413_GPJSLPCON	S3C2410_GPIOREG(0x8C) - -#define S3C2440_GPJ0_OUTP       (0x01 << 0) -#define S3C2440_GPJ0_CAMDATA0   (0x02 << 0) - -#define S3C2440_GPJ1_OUTP       (0x01 << 2) -#define S3C2440_GPJ1_CAMDATA1   (0x02 << 2) - -#define S3C2440_GPJ2_OUTP       (0x01 << 4) -#define S3C2440_GPJ2_CAMDATA2   (0x02 << 4) - -#define S3C2440_GPJ3_OUTP       (0x01 << 6) -#define S3C2440_GPJ3_CAMDATA3   (0x02 << 6) - -#define S3C2440_GPJ4_OUTP       (0x01 << 8) -#define S3C2440_GPJ4_CAMDATA4   (0x02 << 8) - -#define S3C2440_GPJ5_OUTP       (0x01 << 10) -#define S3C2440_GPJ5_CAMDATA5   (0x02 << 10) - -#define S3C2440_GPJ6_OUTP       (0x01 << 12) -#define S3C2440_GPJ6_CAMDATA6   (0x02 << 12) - -#define S3C2440_GPJ7_OUTP       (0x01 << 14) -#define S3C2440_GPJ7_CAMDATA7   (0x02 << 14) - -#define S3C2440_GPJ8_OUTP       (0x01 << 16) -#define S3C2440_GPJ8_CAMPCLK    (0x02 << 16) - -#define S3C2440_GPJ9_OUTP       (0x01 << 18) -#define S3C2440_GPJ9_CAMVSYNC   (0x02 << 18) - -#define S3C2440_GPJ10_OUTP      (0x01 << 20) -#define S3C2440_GPJ10_CAMHREF   (0x02 << 20) - -#define S3C2440_GPJ11_OUTP      (0x01 << 22) -#define S3C2440_GPJ11_CAMCLKOUT (0x02 << 22) - -#define S3C2440_GPJ12_OUTP      (0x01 << 24) -#define S3C2440_GPJ12_CAMRESET  (0x02 << 24) - -#endif	/* __ASM_ARCH_REGS_GPIOJ_H */ - diff --git a/arch/arm/mach-s3c24xx/mach-gta02.c b/arch/arm/mach-s3c24xx/mach-gta02.c index 0f29f64a3ee..92e1f93a6bc 100644 --- a/arch/arm/mach-s3c24xx/mach-gta02.c +++ b/arch/arm/mach-s3c24xx/mach-gta02.c @@ -71,7 +71,6 @@  #include <mach/regs-irq.h>  #include <mach/regs-gpio.h> -#include <mach/regs-gpioj.h>  #include <mach/fb.h>  #include <plat/usb-control.h> diff --git a/arch/arm/mach-s3c24xx/mach-mini2440.c b/arch/arm/mach-s3c24xx/mach-mini2440.c index f092b188ab7..bd6d2525deb 100644 --- a/arch/arm/mach-s3c24xx/mach-mini2440.c +++ b/arch/arm/mach-s3c24xx/mach-mini2440.c @@ -634,8 +634,8 @@ static void __init mini2440_init(void)  	s3c_gpio_cfgpin(S3C2410_GPC(0), S3C2410_GPC0_LEND);  	/* Turn the backlight early on */ -	WARN_ON(gpio_request(S3C2410_GPG(4), "backlight")); -	gpio_direction_output(S3C2410_GPG(4), 1); +	WARN_ON(gpio_request_one(S3C2410_GPG(4), GPIOF_OUT_INIT_HIGH, NULL)); +	gpio_free(S3C2410_GPG(4));  	/* remove pullup on optional PWM backlight -- unused on 3.5 and 7"s */  	s3c_gpio_setpull(S3C2410_GPB(1), S3C_GPIO_PULL_UP); diff --git a/arch/arm/mach-s3c24xx/mach-qt2410.c b/arch/arm/mach-s3c24xx/mach-qt2410.c index b868dddcb83..678bbca2b5e 100644 --- a/arch/arm/mach-s3c24xx/mach-qt2410.c +++ b/arch/arm/mach-s3c24xx/mach-qt2410.c @@ -47,7 +47,6 @@  #include <asm/irq.h>  #include <asm/mach-types.h> -#include <mach/regs-gpio.h>  #include <mach/leds-gpio.h>  #include <mach/regs-lcd.h>  #include <plat/regs-serial.h> @@ -325,8 +324,9 @@ static void __init qt2410_machine_init(void)  	}  	s3c24xx_fb_set_platdata(&qt2410_fb_info); -	s3c_gpio_cfgpin(S3C2410_GPB(0), S3C2410_GPIO_OUTPUT); -	s3c2410_gpio_setpin(S3C2410_GPB(0), 1); +	/* set initial state of the LED GPIO */ +	WARN_ON(gpio_request_one(S3C2410_GPB(0), GPIOF_OUT_INIT_HIGH, NULL)); +	gpio_free(S3C2410_GPB(0));  	s3c24xx_udc_set_platdata(&qt2410_udc_cfg);  	s3c_i2c0_set_platdata(NULL); diff --git a/arch/arm/mach-s3c24xx/mach-rx1950.c b/arch/arm/mach-s3c24xx/mach-rx1950.c index a6762aae472..7ee73f27f20 100644 --- a/arch/arm/mach-s3c24xx/mach-rx1950.c +++ b/arch/arm/mach-s3c24xx/mach-rx1950.c @@ -42,7 +42,6 @@  #include <asm/mach-types.h>  #include <mach/regs-gpio.h> -#include <mach/regs-gpioj.h>  #include <mach/regs-lcd.h>  #include <mach/h1940.h>  #include <mach/fb.h> diff --git a/arch/arm/mach-s3c24xx/pm-s3c2410.c b/arch/arm/mach-s3c24xx/pm-s3c2410.c index 03f706dd600..949ae05e07c 100644 --- a/arch/arm/mach-s3c24xx/pm-s3c2410.c +++ b/arch/arm/mach-s3c24xx/pm-s3c2410.c @@ -77,8 +77,10 @@ static void s3c2410_pm_prepare(void)  		__raw_writel(calc, phys_to_virt(H1940_SUSPEND_CHECKSUM));  	} -	if ( machine_is_aml_m5900() ) -		s3c2410_gpio_setpin(S3C2410_GPF(2), 1); +	if (machine_is_aml_m5900()) { +		gpio_request_one(S3C2410_GPF(2), GPIOF_OUT_INIT_HIGH, NULL); +		gpio_free(S3C2410_GPF(2)); +	}  	if (machine_is_rx1950()) {  		/* According to S3C2442 user's manual, page 7-17, @@ -103,8 +105,10 @@ static void s3c2410_pm_resume(void)  	tmp &= S3C2410_GSTATUS2_OFFRESET;  	__raw_writel(tmp, S3C2410_GSTATUS2); -	if ( machine_is_aml_m5900() ) -		s3c2410_gpio_setpin(S3C2410_GPF(2), 0); +	if (machine_is_aml_m5900()) { +		gpio_request_one(S3C2410_GPF(2), GPIOF_OUT_INIT_LOW, NULL); +		gpio_free(S3C2410_GPF(2)); +	}  }  struct syscore_ops s3c2410_pm_syscore_ops = { diff --git a/arch/arm/mach-s3c24xx/pm-s3c2412.c b/arch/arm/mach-s3c24xx/pm-s3c2412.c index d04588506ec..c60f67a75af 100644 --- a/arch/arm/mach-s3c24xx/pm-s3c2412.c +++ b/arch/arm/mach-s3c24xx/pm-s3c2412.c @@ -26,7 +26,6 @@  #include <asm/irq.h>  #include <mach/regs-power.h> -#include <mach/regs-gpioj.h>  #include <mach/regs-gpio.h>  #include <mach/regs-dsc.h> diff --git a/arch/arm/mach-s3c24xx/s3c2412.c b/arch/arm/mach-s3c24xx/s3c2412.c index d4bc7f960bb..6c5f4031ff0 100644 --- a/arch/arm/mach-s3c24xx/s3c2412.c +++ b/arch/arm/mach-s3c24xx/s3c2412.c @@ -39,7 +39,6 @@  #include <plat/regs-serial.h>  #include <mach/regs-power.h>  #include <mach/regs-gpio.h> -#include <mach/regs-gpioj.h>  #include <mach/regs-dsc.h>  #include <plat/regs-spi.h>  #include <mach/regs-s3c2412.h> diff --git a/arch/arm/mach-s3c24xx/s3c244x.c b/arch/arm/mach-s3c24xx/s3c244x.c index 6f74118f60c..b0b60a1154d 100644 --- a/arch/arm/mach-s3c24xx/s3c244x.c +++ b/arch/arm/mach-s3c24xx/s3c244x.c @@ -36,7 +36,6 @@  #include <mach/regs-clock.h>  #include <plat/regs-serial.h>  #include <mach/regs-gpio.h> -#include <mach/regs-gpioj.h>  #include <mach/regs-dsc.h>  #include <plat/s3c2410.h> diff --git a/arch/arm/mach-s3c24xx/setup-ts.c b/arch/arm/mach-s3c24xx/setup-ts.c index ed263866367..4e11affce3a 100644 --- a/arch/arm/mach-s3c24xx/setup-ts.c +++ b/arch/arm/mach-s3c24xx/setup-ts.c @@ -16,7 +16,6 @@  struct platform_device; /* don't need the contents */  #include <mach/hardware.h> -#include <mach/regs-gpio.h>  /**   * s3c24xx_ts_cfg_gpio - configure gpio for s3c2410 systems @@ -27,8 +26,5 @@ struct platform_device; /* don't need the contents */   */  void s3c24xx_ts_cfg_gpio(struct platform_device *dev)  { -	s3c2410_gpio_cfgpin(S3C2410_GPG(12), S3C2410_GPG12_XMON); -	s3c2410_gpio_cfgpin(S3C2410_GPG(13), S3C2410_GPG13_nXPON); -	s3c2410_gpio_cfgpin(S3C2410_GPG(14), S3C2410_GPG14_YMON); -	s3c2410_gpio_cfgpin(S3C2410_GPG(15), S3C2410_GPG15_nYPON); +	s3c_gpio_cfgpin_range(S3C2410_GPG(12), 4, S3C_GPIO_SFN(3));  } diff --git a/arch/arm/mach-s3c64xx/include/mach/spi-clocks.h b/arch/arm/mach-s3c64xx/include/mach/spi-clocks.h deleted file mode 100644 index 9d0c43b4b68..00000000000 --- a/arch/arm/mach-s3c64xx/include/mach/spi-clocks.h +++ /dev/null @@ -1,18 +0,0 @@ -/* linux/arch/arm/mach-s3c64xx/include/mach/spi-clocks.h - * - * Copyright (C) 2009 Samsung Electronics Ltd. - *	Jaswinder Singh <jassi.brar@samsung.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef __S3C64XX_PLAT_SPI_CLKS_H -#define __S3C64XX_PLAT_SPI_CLKS_H __FILE__ - -#define S3C64XX_SPI_SRCCLK_PCLK		0 -#define S3C64XX_SPI_SRCCLK_SPIBUS	1 -#define S3C64XX_SPI_SRCCLK_48M		2 - -#endif /* __S3C64XX_PLAT_SPI_CLKS_H */ diff --git a/arch/arm/mach-s5p64x0/dma.c b/arch/arm/mach-s5p64x0/dma.c index 2ee5dc069b3..9c4ce085f58 100644 --- a/arch/arm/mach-s5p64x0/dma.c +++ b/arch/arm/mach-s5p64x0/dma.c @@ -36,8 +36,6 @@  #include <plat/devs.h>  #include <plat/irqs.h> -static u64 dma_dmamask = DMA_BIT_MASK(32); -  static u8 s5p6440_pdma_peri[] = {  	DMACH_UART0_RX,  	DMACH_UART0_TX, diff --git a/arch/arm/mach-s5p64x0/include/mach/spi-clocks.h b/arch/arm/mach-s5p64x0/include/mach/spi-clocks.h deleted file mode 100644 index 170a20a9643..00000000000 --- a/arch/arm/mach-s5p64x0/include/mach/spi-clocks.h +++ /dev/null @@ -1,20 +0,0 @@ -/* linux/arch/arm/mach-s5p64x0/include/mach/spi-clocks.h - * - * Copyright (c) 2010 Samsung Electronics Co., Ltd. - *		http://www.samsung.com - * - * Copyright (C) 2010 Samsung Electronics Co. Ltd. - *	Jaswinder Singh <jassi.brar@samsung.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. -*/ - -#ifndef __ASM_ARCH_SPI_CLKS_H -#define __ASM_ARCH_SPI_CLKS_H __FILE__ - -#define S5P64X0_SPI_SRCCLK_PCLK		0 -#define S5P64X0_SPI_SRCCLK_SCLK		1 - -#endif /* __ASM_ARCH_SPI_CLKS_H */ diff --git a/arch/arm/mach-s5pc100/dma.c b/arch/arm/mach-s5pc100/dma.c index afd8db2d599..b1418409709 100644 --- a/arch/arm/mach-s5pc100/dma.c +++ b/arch/arm/mach-s5pc100/dma.c @@ -33,8 +33,6 @@  #include <mach/irqs.h>  #include <mach/dma.h> -static u64 dma_dmamask = DMA_BIT_MASK(32); -  static u8 pdma0_peri[] = {  	DMACH_UART0_RX,  	DMACH_UART0_TX, diff --git a/arch/arm/mach-s5pc100/include/mach/spi-clocks.h b/arch/arm/mach-s5pc100/include/mach/spi-clocks.h deleted file mode 100644 index 65e426370bb..00000000000 --- a/arch/arm/mach-s5pc100/include/mach/spi-clocks.h +++ /dev/null @@ -1,18 +0,0 @@ -/* linux/arch/arm/mach-s5pc100/include/mach/spi-clocks.h - * - * Copyright (C) 2010 Samsung Electronics Co. Ltd. - *	Jaswinder Singh <jassi.brar@samsung.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef __S5PC100_PLAT_SPI_CLKS_H -#define __S5PC100_PLAT_SPI_CLKS_H __FILE__ - -#define S5PC100_SPI_SRCCLK_PCLK		0 -#define S5PC100_SPI_SRCCLK_48M		1 -#define S5PC100_SPI_SRCCLK_SPIBUS	2 - -#endif /* __S5PC100_PLAT_SPI_CLKS_H */ diff --git a/arch/arm/mach-s5pv210/include/mach/spi-clocks.h b/arch/arm/mach-s5pv210/include/mach/spi-clocks.h deleted file mode 100644 index 02acded5f73..00000000000 --- a/arch/arm/mach-s5pv210/include/mach/spi-clocks.h +++ /dev/null @@ -1,17 +0,0 @@ -/* linux/arch/arm/mach-s5pv210/include/mach/spi-clocks.h - * - * Copyright (C) 2010 Samsung Electronics Co. Ltd. - *	Jaswinder Singh <jassi.brar@samsung.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#ifndef __S5PV210_PLAT_SPI_CLKS_H -#define __S5PV210_PLAT_SPI_CLKS_H __FILE__ - -#define S5PV210_SPI_SRCCLK_PCLK		0 -#define S5PV210_SPI_SRCCLK_SCLK		1 - -#endif /* __S5PV210_PLAT_SPI_CLKS_H */ diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig index 6a113a9bb87..7c407393cd0 100644 --- a/arch/arm/mach-tegra/Kconfig +++ b/arch/arm/mach-tegra/Kconfig @@ -63,7 +63,6 @@ comment "Tegra board type"  config MACH_HARMONY         bool "Harmony board"         depends on ARCH_TEGRA_2x_SOC -       select MACH_HAS_SND_SOC_TEGRA_WM8903 if SND_SOC         help           Support for nVidia Harmony development platform @@ -71,7 +70,6 @@ config MACH_KAEN         bool "Kaen board"         depends on ARCH_TEGRA_2x_SOC         select MACH_SEABOARD -       select MACH_HAS_SND_SOC_TEGRA_WM8903 if SND_SOC         help           Support for the Kaen version of Seaboard @@ -84,7 +82,6 @@ config MACH_PAZ00  config MACH_SEABOARD         bool "Seaboard board"         depends on ARCH_TEGRA_2x_SOC -       select MACH_HAS_SND_SOC_TEGRA_WM8903 if SND_SOC         help           Support for nVidia Seaboard development platform. It will  	 also be included for some of the derivative boards that diff --git a/arch/arm/mach-tegra/Makefile b/arch/arm/mach-tegra/Makefile index 2eb4445ddb1..35253fdd1ba 100644 --- a/arch/arm/mach-tegra/Makefile +++ b/arch/arm/mach-tegra/Makefile @@ -8,9 +8,9 @@ obj-y                                   += timer.o  obj-y					+= fuse.o  obj-y					+= pmc.o  obj-y					+= flowctrl.o +obj-y					+= powergate.o  obj-$(CONFIG_CPU_IDLE)			+= cpuidle.o  obj-$(CONFIG_CPU_IDLE)			+= sleep.o -obj-$(CONFIG_ARCH_TEGRA_2x_SOC)		+= powergate.o  obj-$(CONFIG_ARCH_TEGRA_2x_SOC)         += tegra2_clocks.o  obj-$(CONFIG_ARCH_TEGRA_2x_SOC)		+= tegra2_emc.o  obj-$(CONFIG_ARCH_TEGRA_3x_SOC)		+= board-dt-tegra30.o diff --git a/arch/arm/mach-tegra/Makefile.boot b/arch/arm/mach-tegra/Makefile.boot index 9a82094092d..8040345bd97 100644 --- a/arch/arm/mach-tegra/Makefile.boot +++ b/arch/arm/mach-tegra/Makefile.boot @@ -2,9 +2,9 @@ zreladdr-$(CONFIG_ARCH_TEGRA_2x_SOC)	+= 0x00008000  params_phys-$(CONFIG_ARCH_TEGRA_2x_SOC)	:= 0x00000100  initrd_phys-$(CONFIG_ARCH_TEGRA_2x_SOC)	:= 0x00800000 -dtb-$(CONFIG_MACH_HARMONY) += tegra-harmony.dtb -dtb-$(CONFIG_MACH_PAZ00) += tegra-paz00.dtb -dtb-$(CONFIG_MACH_SEABOARD) += tegra-seaboard.dtb -dtb-$(CONFIG_MACH_TRIMSLICE) += tegra-trimslice.dtb -dtb-$(CONFIG_MACH_VENTANA) += tegra-ventana.dtb -dtb-$(CONFIG_ARCH_TEGRA_3x_SOC) += tegra-cardhu.dtb +dtb-$(CONFIG_MACH_HARMONY) += tegra20-harmony.dtb +dtb-$(CONFIG_MACH_PAZ00) += tegra20-paz00.dtb +dtb-$(CONFIG_MACH_SEABOARD) += tegra20-seaboard.dtb +dtb-$(CONFIG_MACH_TRIMSLICE) += tegra20-trimslice.dtb +dtb-$(CONFIG_MACH_VENTANA) += tegra20-ventana.dtb +dtb-$(CONFIG_ARCH_TEGRA_3x_SOC) += tegra30-cardhu.dtb diff --git a/arch/arm/mach-tegra/cpuidle.c b/arch/arm/mach-tegra/cpuidle.c index d83a8c0296f..566e2f88899 100644 --- a/arch/arm/mach-tegra/cpuidle.c +++ b/arch/arm/mach-tegra/cpuidle.c @@ -27,9 +27,9 @@  #include <linux/cpuidle.h>  #include <linux/hrtimer.h> -#include <mach/iomap.h> +#include <asm/proc-fns.h> -extern void tegra_cpu_wfi(void); +#include <mach/iomap.h>  static int tegra_idle_enter_lp3(struct cpuidle_device *dev,  				struct cpuidle_driver *drv, int index); @@ -64,7 +64,7 @@ static int tegra_idle_enter_lp3(struct cpuidle_device *dev,  	enter = ktime_get(); -	tegra_cpu_wfi(); +	cpu_do_idle();  	exit = ktime_sub(ktime_get(), enter);  	us = ktime_to_us(exit); diff --git a/arch/arm/mach-tegra/sleep.S b/arch/arm/mach-tegra/sleep.S index 5b20197bae7..d29b156a801 100644 --- a/arch/arm/mach-tegra/sleep.S +++ b/arch/arm/mach-tegra/sleep.S @@ -62,32 +62,3 @@  	movw	\reg, #:lower16:\val  	movt	\reg, #:upper16:\val  .endm - -/* - * tegra_cpu_wfi - * - * puts current CPU in clock-gated wfi using the flow controller - * - * corrupts r0-r3 - * must be called with MMU on - */ - -ENTRY(tegra_cpu_wfi) -	cpu_id	r0 -	cpu_to_halt_reg r1, r0 -	cpu_to_csr_reg r2, r0 -	mov32	r0, TEGRA_FLOW_CTRL_VIRT -	mov	r3, #FLOW_CTRL_CSR_INTR_FLAG | FLOW_CTRL_CSR_EVENT_FLAG -	str	r3, [r0, r2]	@ clear event & interrupt status -	mov	r3, #FLOW_CTRL_WAIT_FOR_INTERRUPT | FLOW_CTRL_JTAG_RESUME -	str	r3, [r0, r1]	@ put flow controller in wait irq mode -	dsb -	wfi -	mov	r3, #0 -	str	r3, [r0, r1]	@ clear flow controller halt status -	mov	r3, #FLOW_CTRL_CSR_INTR_FLAG | FLOW_CTRL_CSR_EVENT_FLAG -	str	r3, [r0, r2]	@ clear event & interrupt status -	dsb -	mov	pc, lr -ENDPROC(tegra_cpu_wfi) - diff --git a/arch/arm/plat-omap/Makefile b/arch/arm/plat-omap/Makefile index ed8605f0115..6d87532871c 100644 --- a/arch/arm/plat-omap/Makefile +++ b/arch/arm/plat-omap/Makefile @@ -4,7 +4,7 @@  # Common support  obj-y := common.o sram.o clock.o devices.o dma.o mux.o \ -	 usb.o fb.o counter_32k.o +	 fb.o counter_32k.o  obj-m :=  obj-n :=  obj-  := diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index cb16ade437c..7fe626761e5 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c @@ -573,22 +573,25 @@ EXPORT_SYMBOL(omap_set_dma_dest_burst_mode);  static inline void omap_enable_channel_irq(int lch)  { -	u32 status; -  	/* Clear CSR */  	if (cpu_class_is_omap1()) -		status = p->dma_read(CSR, lch); -	else if (cpu_class_is_omap2()) +		p->dma_read(CSR, lch); +	else  		p->dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR, lch);  	/* Enable some nice interrupts. */  	p->dma_write(dma_chan[lch].enabled_irqs, CICR, lch);  } -static void omap_disable_channel_irq(int lch) +static inline void omap_disable_channel_irq(int lch)  { -	if (cpu_class_is_omap2()) -		p->dma_write(0, CICR, lch); +	/* disable channel interrupts */ +	p->dma_write(0, CICR, lch); +	/* Clear CSR */ +	if (cpu_class_is_omap1()) +		p->dma_read(CSR, lch); +	else +		p->dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR, lch);  }  void omap_enable_dma_irq(int lch, u16 bits) @@ -632,14 +635,14 @@ static inline void disable_lnk(int lch)  	l = p->dma_read(CLNK_CTRL, lch);  	/* Disable interrupts */ +	omap_disable_channel_irq(lch); +  	if (cpu_class_is_omap1()) { -		p->dma_write(0, CICR, lch);  		/* Set the STOP_LNK bit */  		l |= 1 << 14;  	}  	if (cpu_class_is_omap2()) { -		omap_disable_channel_irq(lch);  		/* Clear the ENABLE_LNK bit */  		l &= ~(1 << 15);  	} @@ -657,6 +660,9 @@ static inline void omap2_enable_irq_lch(int lch)  		return;  	spin_lock_irqsave(&dma_chan_lock, flags); +	/* clear IRQ STATUS */ +	p->dma_write(1 << lch, IRQSTATUS_L0, lch); +	/* Enable interrupt */  	val = p->dma_read(IRQENABLE_L0, lch);  	val |= 1 << lch;  	p->dma_write(val, IRQENABLE_L0, lch); @@ -672,9 +678,12 @@ static inline void omap2_disable_irq_lch(int lch)  		return;  	spin_lock_irqsave(&dma_chan_lock, flags); +	/* Disable interrupt */  	val = p->dma_read(IRQENABLE_L0, lch);  	val &= ~(1 << lch);  	p->dma_write(val, IRQENABLE_L0, lch); +	/* clear IRQ STATUS */ +	p->dma_write(1 << lch, IRQSTATUS_L0, lch);  	spin_unlock_irqrestore(&dma_chan_lock, flags);  } @@ -745,11 +754,8 @@ int omap_request_dma(int dev_id, const char *dev_name,  	}  	if (cpu_class_is_omap2()) { -		omap2_enable_irq_lch(free_ch);  		omap_enable_channel_irq(free_ch); -		/* Clear the CSR register and IRQ status register */ -		p->dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR, free_ch); -		p->dma_write(1 << free_ch, IRQSTATUS_L0, 0); +		omap2_enable_irq_lch(free_ch);  	}  	*dma_ch_out = free_ch; @@ -768,27 +774,19 @@ void omap_free_dma(int lch)  		return;  	} -	if (cpu_class_is_omap1()) { -		/* Disable all DMA interrupts for the channel. */ -		p->dma_write(0, CICR, lch); -		/* Make sure the DMA transfer is stopped. */ -		p->dma_write(0, CCR, lch); -	} - -	if (cpu_class_is_omap2()) { +	/* Disable interrupt for logical channel */ +	if (cpu_class_is_omap2())  		omap2_disable_irq_lch(lch); -		/* Clear the CSR register and IRQ status register */ -		p->dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR, lch); -		p->dma_write(1 << lch, IRQSTATUS_L0, lch); +	/* Disable all DMA interrupts for the channel. */ +	omap_disable_channel_irq(lch); -		/* Disable all DMA interrupts for the channel. */ -		p->dma_write(0, CICR, lch); +	/* Make sure the DMA transfer is stopped. */ +	p->dma_write(0, CCR, lch); -		/* Make sure the DMA transfer is stopped. */ -		p->dma_write(0, CCR, lch); +	/* Clear registers */ +	if (cpu_class_is_omap2())  		omap_clear_dma(lch); -	}  	spin_lock_irqsave(&dma_chan_lock, flags);  	dma_chan[lch].dev_id = -1; @@ -943,8 +941,7 @@ void omap_stop_dma(int lch)  	u32 l;  	/* Disable all interrupts on the channel */ -	if (cpu_class_is_omap1()) -		p->dma_write(0, CICR, lch); +	omap_disable_channel_irq(lch);  	l = p->dma_read(CCR, lch);  	if (IS_DMA_ERRATA(DMA_ERRATA_i541) && diff --git a/arch/arm/plat-omap/include/plat/board.h b/arch/arm/plat-omap/include/plat/board.h index 4814c5b6530..e62f20a5c0a 100644 --- a/arch/arm/plat-omap/include/plat/board.h +++ b/arch/arm/plat-omap/include/plat/board.h @@ -57,44 +57,6 @@ struct omap_camera_sensor_config {  	int (*power_off)(void * data);  }; -struct omap_usb_config { -	/* Configure drivers according to the connectors on your board: -	 *  - "A" connector (rectagular) -	 *	... for host/OHCI use, set "register_host". -	 *  - "B" connector (squarish) or "Mini-B" -	 *	... for device/gadget use, set "register_dev". -	 *  - "Mini-AB" connector (very similar to Mini-B) -	 *	... for OTG use as device OR host, initialize "otg" -	 */ -	unsigned	register_host:1; -	unsigned	register_dev:1; -	u8		otg;	/* port number, 1-based:  usb1 == 2 */ - -	u8		hmc_mode; - -	/* implicitly true if otg:  host supports remote wakeup? */ -	u8		rwc; - -	/* signaling pins used to talk to transceiver on usbN: -	 *  0 == usbN unused -	 *  2 == usb0-only, using internal transceiver -	 *  3 == 3 wire bidirectional -	 *  4 == 4 wire bidirectional -	 *  6 == 6 wire unidirectional (or TLL) -	 */ -	u8		pins[3]; - -	struct platform_device *udc_device; -	struct platform_device *ohci_device; -	struct platform_device *otg_device; - -	u32 (*usb0_init)(unsigned nwires, unsigned is_device); -	u32 (*usb1_init)(unsigned nwires); -	u32 (*usb2_init)(unsigned nwires, unsigned alt_pingroup); - -	int (*ocpi_enable)(void); -}; -  struct omap_lcd_config {  	char panel_name[16];  	char ctrl_name[16]; diff --git a/arch/arm/plat-omap/include/plat/clock.h b/arch/arm/plat-omap/include/plat/clock.h index d0ef57c1d71..656b9862279 100644 --- a/arch/arm/plat-omap/include/plat/clock.h +++ b/arch/arm/plat-omap/include/plat/clock.h @@ -156,7 +156,6 @@ struct dpll_data {  	u8			min_divider;  	u16			max_divider;  	u8			modes; -#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4)  	void __iomem		*autoidle_reg;  	void __iomem		*idlest_reg;  	u32			autoidle_mask; @@ -167,7 +166,6 @@ struct dpll_data {  	u8			auto_recal_bit;  	u8			recal_en_bit;  	u8			recal_st_bit; -#  endif  	u8			flags;  }; diff --git a/arch/arm/plat-omap/include/plat/dsp.h b/arch/arm/plat-omap/include/plat/dsp.h index 9c604b390f9..5927709b190 100644 --- a/arch/arm/plat-omap/include/plat/dsp.h +++ b/arch/arm/plat-omap/include/plat/dsp.h @@ -18,6 +18,9 @@ struct omap_dsp_platform_data {  	u32 (*dsp_cm_read)(s16 , u16);  	u32 (*dsp_cm_rmw_bits)(u32, u32, s16, s16); +	void (*set_bootaddr)(u32); +	void (*set_bootmode)(u8); +  	phys_addr_t phys_mempool_base;  	phys_addr_t phys_mempool_size;  }; diff --git a/arch/arm/plat-omap/include/plat/omap_hwmod.h b/arch/arm/plat-omap/include/plat/omap_hwmod.h index c835b7194ff..a8ecc53b367 100644 --- a/arch/arm/plat-omap/include/plat/omap_hwmod.h +++ b/arch/arm/plat-omap/include/plat/omap_hwmod.h @@ -629,6 +629,8 @@ int omap_hwmod_no_setup_reset(struct omap_hwmod *oh);  int omap_hwmod_pad_route_irq(struct omap_hwmod *oh, int pad_idx, int irq_idx); +extern void __init omap_hwmod_init(void); +  /*   * Chip variant-specific hwmod init routines - XXX should be converted   * to use initcalls once the initial boot ordering is straightened out diff --git a/arch/arm/plat-omap/include/plat/usb.h b/arch/arm/plat-omap/include/plat/usb.h index 762eeb0626c..548a4c8d63d 100644 --- a/arch/arm/plat-omap/include/plat/usb.h +++ b/arch/arm/plat-omap/include/plat/usb.h @@ -44,6 +44,8 @@ struct usbhs_omap_board_data {  	struct regulator		*regulator[OMAP3_HS_USB_PORTS];  }; +#ifdef CONFIG_ARCH_OMAP2PLUS +  struct ehci_hcd_omap_platform_data {  	enum usbhs_omap_port_mode	port_mode[OMAP3_HS_USB_PORTS];  	int				reset_gpio_port[OMAP3_HS_USB_PORTS]; @@ -64,26 +66,6 @@ struct usbhs_omap_platform_data {  };  /*-------------------------------------------------------------------------*/ -#define OMAP1_OTG_BASE			0xfffb0400 -#define OMAP1_UDC_BASE			0xfffb4000 -#define OMAP1_OHCI_BASE			0xfffba000 - -#define OMAP2_OHCI_BASE			0x4805e000 -#define OMAP2_UDC_BASE			0x4805e200 -#define OMAP2_OTG_BASE			0x4805e300 - -#ifdef CONFIG_ARCH_OMAP1 - -#define OTG_BASE			OMAP1_OTG_BASE -#define UDC_BASE			OMAP1_UDC_BASE -#define OMAP_OHCI_BASE			OMAP1_OHCI_BASE - -#else - -#define OTG_BASE			OMAP2_OTG_BASE -#define UDC_BASE			OMAP2_UDC_BASE -#define OMAP_OHCI_BASE			OMAP2_OHCI_BASE -  struct omap_musb_board_data {  	u8	interface_type;  	u8	mode; @@ -107,44 +89,6 @@ extern int omap4430_phy_init(struct device *dev);  extern int omap4430_phy_exit(struct device *dev);  extern int omap4430_phy_suspend(struct device *dev, int suspend); -/* - * NOTE: Please update omap USB drivers to use ioremap + read/write - */ - -#define OMAP2_L4_IO_OFFSET	0xb2000000 -#define OMAP2_L4_IO_ADDRESS(pa)	IOMEM((pa) + OMAP2_L4_IO_OFFSET) - -static inline u8 omap_readb(u32 pa) -{ -	return __raw_readb(OMAP2_L4_IO_ADDRESS(pa)); -} - -static inline u16 omap_readw(u32 pa) -{ -	return __raw_readw(OMAP2_L4_IO_ADDRESS(pa)); -} - -static inline u32 omap_readl(u32 pa) -{ -	return __raw_readl(OMAP2_L4_IO_ADDRESS(pa)); -} - -static inline void omap_writeb(u8 v, u32 pa) -{ -	__raw_writeb(v, OMAP2_L4_IO_ADDRESS(pa)); -} - - -static inline void omap_writew(u16 v, u32 pa) -{ -	__raw_writew(v, OMAP2_L4_IO_ADDRESS(pa)); -} - -static inline void omap_writel(u32 v, u32 pa) -{ -	__raw_writel(v, OMAP2_L4_IO_ADDRESS(pa)); -} -  #endif  extern void am35x_musb_reset(void); @@ -153,142 +97,6 @@ extern void am35x_musb_clear_irq(void);  extern void am35x_set_mode(u8 musb_mode);  extern void ti81xx_musb_phy_power(u8 on); -/* - * FIXME correct answer depends on hmc_mode, - * as does (on omap1) any nonzero value for config->otg port number - */ -#ifdef	CONFIG_USB_GADGET_OMAP -#define	is_usb0_device(config)	1 -#else -#define	is_usb0_device(config)	0 -#endif - -void omap_otg_init(struct omap_usb_config *config); - -#if defined(CONFIG_USB) || defined(CONFIG_USB_MODULE) -void omap1_usb_init(struct omap_usb_config *pdata); -#else -static inline void omap1_usb_init(struct omap_usb_config *pdata) -{ -} -#endif - -#if defined(CONFIG_ARCH_OMAP_OTG) || defined(CONFIG_ARCH_OMAP_OTG_MODULE) -void omap2_usbfs_init(struct omap_usb_config *pdata); -#else -static inline void omap2_usbfs_init(struct omap_usb_config *pdata) -{ -} -#endif - -/*-------------------------------------------------------------------------*/ - -/* - * OTG and transceiver registers, for OMAPs starting with ARM926 - */ -#define OTG_REV				(OTG_BASE + 0x00) -#define OTG_SYSCON_1			(OTG_BASE + 0x04) -#	define	 USB2_TRX_MODE(w)	(((w)>>24)&0x07) -#	define	 USB1_TRX_MODE(w)	(((w)>>20)&0x07) -#	define	 USB0_TRX_MODE(w)	(((w)>>16)&0x07) -#	define	 OTG_IDLE_EN		(1 << 15) -#	define	 HST_IDLE_EN		(1 << 14) -#	define	 DEV_IDLE_EN		(1 << 13) -#	define	 OTG_RESET_DONE		(1 << 2) -#	define	 OTG_SOFT_RESET		(1 << 1) -#define OTG_SYSCON_2			(OTG_BASE + 0x08) -#	define	 OTG_EN			(1 << 31) -#	define	 USBX_SYNCHRO		(1 << 30) -#	define	 OTG_MST16		(1 << 29) -#	define	 SRP_GPDATA		(1 << 28) -#	define	 SRP_GPDVBUS		(1 << 27) -#	define	 SRP_GPUVBUS(w)		(((w)>>24)&0x07) -#	define	 A_WAIT_VRISE(w)	(((w)>>20)&0x07) -#	define	 B_ASE_BRST(w)		(((w)>>16)&0x07) -#	define	 SRP_DPW		(1 << 14) -#	define	 SRP_DATA		(1 << 13) -#	define	 SRP_VBUS		(1 << 12) -#	define	 OTG_PADEN		(1 << 10) -#	define	 HMC_PADEN		(1 << 9) -#	define	 UHOST_EN		(1 << 8) -#	define	 HMC_TLLSPEED		(1 << 7) -#	define	 HMC_TLLATTACH		(1 << 6) -#	define	 OTG_HMC(w)		(((w)>>0)&0x3f) -#define OTG_CTRL			(OTG_BASE + 0x0c) -#	define	 OTG_USB2_EN		(1 << 29) -#	define	 OTG_USB2_DP		(1 << 28) -#	define	 OTG_USB2_DM		(1 << 27) -#	define	 OTG_USB1_EN		(1 << 26) -#	define	 OTG_USB1_DP		(1 << 25) -#	define	 OTG_USB1_DM		(1 << 24) -#	define	 OTG_USB0_EN		(1 << 23) -#	define	 OTG_USB0_DP		(1 << 22) -#	define	 OTG_USB0_DM		(1 << 21) -#	define	 OTG_ASESSVLD		(1 << 20) -#	define	 OTG_BSESSEND		(1 << 19) -#	define	 OTG_BSESSVLD		(1 << 18) -#	define	 OTG_VBUSVLD		(1 << 17) -#	define	 OTG_ID			(1 << 16) -#	define	 OTG_DRIVER_SEL		(1 << 15) -#	define	 OTG_A_SETB_HNPEN	(1 << 12) -#	define	 OTG_A_BUSREQ		(1 << 11) -#	define	 OTG_B_HNPEN		(1 << 9) -#	define	 OTG_B_BUSREQ		(1 << 8) -#	define	 OTG_BUSDROP		(1 << 7) -#	define	 OTG_PULLDOWN		(1 << 5) -#	define	 OTG_PULLUP		(1 << 4) -#	define	 OTG_DRV_VBUS		(1 << 3) -#	define	 OTG_PD_VBUS		(1 << 2) -#	define	 OTG_PU_VBUS		(1 << 1) -#	define	 OTG_PU_ID		(1 << 0) -#define OTG_IRQ_EN			(OTG_BASE + 0x10)	/* 16-bit */ -#	define	 DRIVER_SWITCH		(1 << 15) -#	define	 A_VBUS_ERR		(1 << 13) -#	define	 A_REQ_TMROUT		(1 << 12) -#	define	 A_SRP_DETECT		(1 << 11) -#	define	 B_HNP_FAIL		(1 << 10) -#	define	 B_SRP_TMROUT		(1 << 9) -#	define	 B_SRP_DONE		(1 << 8) -#	define	 B_SRP_STARTED		(1 << 7) -#	define	 OPRT_CHG		(1 << 0) -#define OTG_IRQ_SRC			(OTG_BASE + 0x14)	/* 16-bit */ -	// same bits as in IRQ_EN -#define OTG_OUTCTRL			(OTG_BASE + 0x18)	/* 16-bit */ -#	define	 OTGVPD			(1 << 14) -#	define	 OTGVPU			(1 << 13) -#	define	 OTGPUID		(1 << 12) -#	define	 USB2VDR		(1 << 10) -#	define	 USB2PDEN		(1 << 9) -#	define	 USB2PUEN		(1 << 8) -#	define	 USB1VDR		(1 << 6) -#	define	 USB1PDEN		(1 << 5) -#	define	 USB1PUEN		(1 << 4) -#	define	 USB0VDR		(1 << 2) -#	define	 USB0PDEN		(1 << 1) -#	define	 USB0PUEN		(1 << 0) -#define OTG_TEST			(OTG_BASE + 0x20)	/* 16-bit */ -#define OTG_VENDOR_CODE			(OTG_BASE + 0xfc)	/* 16-bit */ - -/*-------------------------------------------------------------------------*/ - -/* OMAP1 */ -#define	USB_TRANSCEIVER_CTRL		(0xfffe1000 + 0x0064) -#	define	CONF_USB2_UNI_R		(1 << 8) -#	define	CONF_USB1_UNI_R		(1 << 7) -#	define	CONF_USB_PORT0_R(x)	(((x)>>4)&0x7) -#	define	CONF_USB0_ISOLATE_R	(1 << 3) -#	define	CONF_USB_PWRDN_DM_R	(1 << 2) -#	define	CONF_USB_PWRDN_DP_R	(1 << 1) - -/* OMAP2 */ -#	define	USB_UNIDIR			0x0 -#	define	USB_UNIDIR_TLL			0x1 -#	define	USB_BIDIR			0x2 -#	define	USB_BIDIR_TLL			0x3 -#	define	USBTXWRMODEI(port, x)	((x) << (22 - (port * 2))) -#	define	USBT2TLL5PI		(1 << 17) -#	define	USB0PUENACTLOI		(1 << 16) -#	define	USBSTANDBYCTRL		(1 << 15)  /* AM35x */  /* USB 2.0 PHY Control */  #define CONF2_PHY_GPIOMODE	(1 << 23) diff --git a/arch/arm/plat-omap/usb.c b/arch/arm/plat-omap/usb.c deleted file mode 100644 index daa0327381b..00000000000 --- a/arch/arm/plat-omap/usb.c +++ /dev/null @@ -1,145 +0,0 @@ - /* - * arch/arm/plat-omap/usb.c -- platform level USB initialization - * - * Copyright (C) 2004 Texas Instruments, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ - -#undef	DEBUG - -#include <linux/module.h> -#include <linux/kernel.h> -#include <linux/init.h> -#include <linux/platform_device.h> -#include <linux/io.h> - -#include <plat/usb.h> -#include <plat/board.h> - -#include <mach/hardware.h> - -#ifdef	CONFIG_ARCH_OMAP_OTG - -void __init -omap_otg_init(struct omap_usb_config *config) -{ -	u32		syscon; -	int		alt_pingroup = 0; - -	/* NOTE:  no bus or clock setup (yet?) */ - -	syscon = omap_readl(OTG_SYSCON_1) & 0xffff; -	if (!(syscon & OTG_RESET_DONE)) -		pr_debug("USB resets not complete?\n"); - -	//omap_writew(0, OTG_IRQ_EN); - -	/* pin muxing and transceiver pinouts */ -	if (config->pins[0] > 2)	/* alt pingroup 2 */ -		alt_pingroup = 1; -	syscon |= config->usb0_init(config->pins[0], is_usb0_device(config)); -	syscon |= config->usb1_init(config->pins[1]); -	syscon |= config->usb2_init(config->pins[2], alt_pingroup); -	pr_debug("OTG_SYSCON_1 = %08x\n", omap_readl(OTG_SYSCON_1)); -	omap_writel(syscon, OTG_SYSCON_1); - -	syscon = config->hmc_mode; -	syscon |= USBX_SYNCHRO | (4 << 16) /* B_ASE0_BRST */; -#ifdef	CONFIG_USB_OTG -	if (config->otg) -		syscon |= OTG_EN; -#endif -	if (cpu_class_is_omap1()) -		pr_debug("USB_TRANSCEIVER_CTRL = %03x\n", -			 omap_readl(USB_TRANSCEIVER_CTRL)); -	pr_debug("OTG_SYSCON_2 = %08x\n", omap_readl(OTG_SYSCON_2)); -	omap_writel(syscon, OTG_SYSCON_2); - -	printk("USB: hmc %d", config->hmc_mode); -	if (!alt_pingroup) -		printk(", usb2 alt %d wires", config->pins[2]); -	else if (config->pins[0]) -		printk(", usb0 %d wires%s", config->pins[0], -			is_usb0_device(config) ? " (dev)" : ""); -	if (config->pins[1]) -		printk(", usb1 %d wires", config->pins[1]); -	if (!alt_pingroup && config->pins[2]) -		printk(", usb2 %d wires", config->pins[2]); -	if (config->otg) -		printk(", Mini-AB on usb%d", config->otg - 1); -	printk("\n"); - -	if (cpu_class_is_omap1()) { -		u16 w; - -		/* leave USB clocks/controllers off until needed */ -		w = omap_readw(ULPD_SOFT_REQ); -		w &= ~SOFT_USB_CLK_REQ; -		omap_writew(w, ULPD_SOFT_REQ); - -		w = omap_readw(ULPD_CLOCK_CTRL); -		w &= ~USB_MCLK_EN; -		w |= DIS_USB_PVCI_CLK; -		omap_writew(w, ULPD_CLOCK_CTRL); -	} -	syscon = omap_readl(OTG_SYSCON_1); -	syscon |= HST_IDLE_EN|DEV_IDLE_EN|OTG_IDLE_EN; - -#ifdef	CONFIG_USB_GADGET_OMAP -	if (config->otg || config->register_dev) { -		struct platform_device *udc_device = config->udc_device; -		int status; - -		syscon &= ~DEV_IDLE_EN; -		udc_device->dev.platform_data = config; -		status = platform_device_register(udc_device); -		if (status) -			pr_debug("can't register UDC device, %d\n", status); -	} -#endif - -#if	defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) -	if (config->otg || config->register_host) { -		struct platform_device *ohci_device = config->ohci_device; -		int status; - -		syscon &= ~HST_IDLE_EN; -		ohci_device->dev.platform_data = config; -		status = platform_device_register(ohci_device); -		if (status) -			pr_debug("can't register OHCI device, %d\n", status); -	} -#endif - -#ifdef	CONFIG_USB_OTG -	if (config->otg) { -		struct platform_device *otg_device = config->otg_device; -		int status; - -		syscon &= ~OTG_IDLE_EN; -		otg_device->dev.platform_data = config; -		status = platform_device_register(otg_device); -		if (status) -			pr_debug("can't register OTG device, %d\n", status); -	} -#endif -	pr_debug("OTG_SYSCON_1 = %08x\n", omap_readl(OTG_SYSCON_1)); -	omap_writel(syscon, OTG_SYSCON_1); -} - -#else -void omap_otg_init(struct omap_usb_config *config) {} -#endif diff --git a/arch/arm/plat-samsung/Kconfig b/arch/arm/plat-samsung/Kconfig index a2fae4ea093..ffc84acb7e9 100644 --- a/arch/arm/plat-samsung/Kconfig +++ b/arch/arm/plat-samsung/Kconfig @@ -491,14 +491,6 @@ config S5P_SLEEP  	  Internal config node to apply common S5P sleep management code.  	  Can be selected by S5P and newer SoCs with similar sleep procedure. -comment "Power Domain" - -config SAMSUNG_PD -	bool "Samsung Power Domain" -	depends on PM_RUNTIME -	help -	  Say Y here if you want to control Power Domain by Runtime PM. -  config DEBUG_S3C_UART  	depends on PLAT_SAMSUNG  	int diff --git a/arch/arm/plat-samsung/Makefile b/arch/arm/plat-samsung/Makefile index 860b2db4db1..4bb58c2dc70 100644 --- a/arch/arm/plat-samsung/Makefile +++ b/arch/arm/plat-samsung/Makefile @@ -60,10 +60,6 @@ obj-$(CONFIG_SAMSUNG_WAKEMASK)	+= wakeup-mask.o  obj-$(CONFIG_S5P_PM)		+= s5p-pm.o s5p-irq-pm.o  obj-$(CONFIG_S5P_SLEEP)		+= s5p-sleep.o -# PD support - -obj-$(CONFIG_SAMSUNG_PD)	+= pd.o -  # PWM support  obj-$(CONFIG_HAVE_PWM)		+= pwm.o diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-samsung/include/plat/devs.h index 61ca2f356c5..5da4b4f38f4 100644 --- a/arch/arm/plat-samsung/include/plat/devs.h +++ b/arch/arm/plat-samsung/include/plat/devs.h @@ -131,7 +131,6 @@ extern struct platform_device exynos4_device_ohci;  extern struct platform_device exynos4_device_pcm0;  extern struct platform_device exynos4_device_pcm1;  extern struct platform_device exynos4_device_pcm2; -extern struct platform_device exynos4_device_pd[];  extern struct platform_device exynos4_device_spdif;  extern struct platform_device exynos_device_drm; diff --git a/arch/arm/plat-samsung/include/plat/fb.h b/arch/arm/plat-samsung/include/plat/fb.h index 536002ff2ab..b885322717a 100644 --- a/arch/arm/plat-samsung/include/plat/fb.h +++ b/arch/arm/plat-samsung/include/plat/fb.h @@ -43,7 +43,6 @@ struct s3c_fb_pd_win {   * @setup_gpio: Setup the external GPIO pins to the right state to transfer   *		the data from the display system to the connected display   *		device. - * @default_win: default window layer number to be used for UI layer.   * @vidcon0: The base vidcon0 values to control the panel data format.   * @vidcon1: The base vidcon1 values to control the panel data output.   * @vtiming: Video timing when connected to a RGB type panel. diff --git a/arch/arm/plat-samsung/include/plat/pd.h b/arch/arm/plat-samsung/include/plat/pd.h deleted file mode 100644 index abb4bc32716..00000000000 --- a/arch/arm/plat-samsung/include/plat/pd.h +++ /dev/null @@ -1,30 +0,0 @@ -/* linux/arch/arm/plat-samsung/include/plat/pd.h - * - * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. - *		http://www.samsung.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. -*/ - -#ifndef __ASM_PLAT_SAMSUNG_PD_H -#define __ASM_PLAT_SAMSUNG_PD_H __FILE__ - -struct samsung_pd_info { -	int (*enable)(struct device *dev); -	int (*disable)(struct device *dev); -	void __iomem *base; -}; - -enum exynos4_pd_block { -	PD_MFC, -	PD_G3D, -	PD_LCD0, -	PD_LCD1, -	PD_TV, -	PD_CAM, -	PD_GPS -}; - -#endif /* __ASM_PLAT_SAMSUNG_PD_H */ diff --git a/arch/arm/plat-samsung/pd.c b/arch/arm/plat-samsung/pd.c deleted file mode 100644 index 312b510d86b..00000000000 --- a/arch/arm/plat-samsung/pd.c +++ /dev/null @@ -1,95 +0,0 @@ -/* linux/arch/arm/plat-samsung/pd.c - * - * Copyright (c) 2010 Samsung Electronics Co., Ltd. - *		http://www.samsung.com - * - * Samsung Power domain support - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. -*/ - -#include <linux/init.h> -#include <linux/export.h> -#include <linux/platform_device.h> -#include <linux/err.h> -#include <linux/pm_runtime.h> - -#include <plat/pd.h> - -static int samsung_pd_probe(struct platform_device *pdev) -{ -	struct samsung_pd_info *pdata = pdev->dev.platform_data; -	struct device *dev = &pdev->dev; - -	if (!pdata) { -		dev_err(dev, "no device data specified\n"); -		return -ENOENT; -	} - -	pm_runtime_set_active(dev); -	pm_runtime_enable(dev); - -	dev_info(dev, "power domain registered\n"); -	return 0; -} - -static int __devexit samsung_pd_remove(struct platform_device *pdev) -{ -	struct device *dev = &pdev->dev; - -	pm_runtime_disable(dev); -	return 0; -} - -static int samsung_pd_runtime_suspend(struct device *dev) -{ -	struct samsung_pd_info *pdata = dev->platform_data; -	int ret = 0; - -	if (pdata->disable) -		ret = pdata->disable(dev); - -	dev_dbg(dev, "suspended\n"); -	return ret; -} - -static int samsung_pd_runtime_resume(struct device *dev) -{ -	struct samsung_pd_info *pdata = dev->platform_data; -	int ret = 0; - -	if (pdata->enable) -		ret = pdata->enable(dev); - -	dev_dbg(dev, "resumed\n"); -	return ret; -} - -static const struct dev_pm_ops samsung_pd_pm_ops = { -	.runtime_suspend	= samsung_pd_runtime_suspend, -	.runtime_resume		= samsung_pd_runtime_resume, -}; - -static struct platform_driver samsung_pd_driver = { -	.driver		= { -		.name		= "samsung-pd", -		.owner		= THIS_MODULE, -		.pm		= &samsung_pd_pm_ops, -	}, -	.probe		= samsung_pd_probe, -	.remove		= __devexit_p(samsung_pd_remove), -}; - -static int __init samsung_pd_init(void) -{ -	int ret; - -	ret = platform_driver_register(&samsung_pd_driver); -	if (ret) -		printk(KERN_ERR "%s: failed to add PD driver\n", __func__); - -	return ret; -} -arch_initcall(samsung_pd_init); diff --git a/arch/arm/plat-samsung/pwm.c b/arch/arm/plat-samsung/pwm.c index c559d8438c7..d3583050fb0 100644 --- a/arch/arm/plat-samsung/pwm.c +++ b/arch/arm/plat-samsung/pwm.c @@ -36,7 +36,6 @@ struct pwm_device {  	unsigned int		 duty_ns;  	unsigned char		 tcon_base; -	unsigned char		 running;  	unsigned char		 use_count;  	unsigned char		 pwm_id;  }; @@ -116,7 +115,6 @@ int pwm_enable(struct pwm_device *pwm)  	local_irq_restore(flags); -	pwm->running = 1;  	return 0;  } @@ -134,8 +132,6 @@ void pwm_disable(struct pwm_device *pwm)  	__raw_writel(tcon, S3C2410_TCON);  	local_irq_restore(flags); - -	pwm->running = 0;  }  EXPORT_SYMBOL(pwm_disable);  |