Merge tag 'dt' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 23 Jul 2012 23:17:43 +0000 (16:17 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 23 Jul 2012 23:17:43 +0000 (16:17 -0700)
Pull arm-soc device tree description updates from Arnd Bergmann:
 "This branch contains two kinds of updates: Some platforms in the
  process of getting converted to device tree based booting, and the
  platform specific patches necessary for that are included here.

  Other platforms are already converted, so we just need to update the
  actual device tree source files and the binding documents to add
  support for new board and new drivers.

  In the future we will probably separate those into two branches, and
  in the long run, the plan is to move the device tree source files out
  of the kernel repository, but that has to wait until we have completed
  a much larger portion of the binding documents."

Fix up trivial conflicts in arch/arm/mach-imx/clk-imx6q.c due to newly
added clkdev registers next to a few removed unnecessary ones.

* tag 'dt' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (119 commits)
  ARM: LPC32xx: Add PWM to base dts file
  ARM: EXYNOS: mark the DMA channel binding for SPI as preliminary
  ARM: dts: Add nodes for spi controllers for SAMSUNG EXYNOS5 platforms
  ARM: EXYNOS: Enable platform support for SPI controllers for EXYNOS5
  ARM: EXYNOS: Add spi clock support for EXYNOS5
  ARM: dts: Add nodes for spi controllers for SAMSUNG EXYNOS4 platforms
  ARM: EXYNOS: Enable platform support for SPI controllers for EXYNOX4
  ARM: EXYNOS: Fix the incorrect hierarchy of spi controller bus clock
  ARM: ux500: Remove PMU platform registration when booting with DT
  ARM: ux500: Remove temporary snowball_of_platform_devs enablement structure
  ARM: ux500: Ensure vendor specific properties have the vendor's identifier
  pinctrl: pinctrl-nomadik: Append sleepmode property with vendor specific prefixes
  ARM: ux500: Move rtc-pl031 registration to Device Tree when enabled
  ARM: ux500: Enable the AB8500 RTC for all DT:ed DB8500 based devices
  ARM: ux500: Correctly reference IRQs supplied by the AB8500 from Device Tree
  ARM: ux500: Apply ab8500-debug node do the db8500 DT structure
  ARM: ux500: Add a ab8500-usb Device Tree node for db8500 based devices
  ARM: ux500: Add db8500 Device Tree node for misc/ab8500-pwm
  ARM: ux500: Add db8500 Device Tree node for ab8500-sysctrl
  ARM: ux500: Enable LED heartbeat functionality on Snowbal via DT
  ...

1  2 
arch/arm/boot/dts/db8500.dtsi
arch/arm/boot/dts/omap4-panda.dts
arch/arm/boot/dts/omap4-sdp.dts
arch/arm/mach-imx/Kconfig
arch/arm/mach-imx/clk-imx6q.c
arch/arm/plat-samsung/devs.c

index ec2be92b270d63f456d1e703a1cfa5c632a1218b,e9c2e92f75cbe32b0f57bd0251fc8b1ea4fcf836..3180a9c588b921d21ac9cea8b28e1c91b634686b
@@@ -48,7 -48,7 +48,7 @@@
                };
  
                rtc@80154000 {
-                       compatible = "stericsson,db8500-rtc";
+                       compatible = "arm,rtc-pl031", "arm,primecell";
                        reg = <0x80154000 0x1000>;
                        interrupts = <0 18 0x4>;
                };
@@@ -60,7 -60,7 +60,7 @@@
                        interrupts = <0 119 0x4>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
-                       supports-sleepmode;
+                       st,supports-sleepmode;
                        gpio-controller;
                        #gpio-cells = <2>;
                        gpio-bank = <0>;
@@@ -73,7 -73,7 +73,7 @@@
                        interrupts = <0 120 0x4>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
-                       supports-sleepmode;
+                       st,supports-sleepmode;
                        gpio-controller;
                        #gpio-cells = <2>;
                        gpio-bank = <1>;
@@@ -86,7 -86,7 +86,7 @@@
                        interrupts = <0 121 0x4>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
-                       supports-sleepmode;
+                       st,supports-sleepmode;
                        gpio-controller;
                        #gpio-cells = <2>;
                        gpio-bank = <2>;
@@@ -99,7 -99,7 +99,7 @@@
                        interrupts = <0 122 0x4>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
-                       supports-sleepmode;
+                       st,supports-sleepmode;
                        gpio-controller;
                        #gpio-cells = <2>;
                        gpio-bank = <3>;
                        interrupts = <0 123 0x4>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
-                       supports-sleepmode;
+                       st,supports-sleepmode;
                        gpio-controller;
                        #gpio-cells = <2>;
                        gpio-bank = <4>;
                        interrupts = <0 124 0x4>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
-                       supports-sleepmode;
+                       st,supports-sleepmode;
                        gpio-controller;
                        #gpio-cells = <2>;
                        gpio-bank = <5>;
                        interrupts = <0 125 0x4>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
-                       supports-sleepmode;
+                       st,supports-sleepmode;
                        gpio-controller;
                        #gpio-cells = <2>;
                        gpio-bank = <6>;
                        interrupts = <0 126 0x4>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
-                       supports-sleepmode;
+                       st,supports-sleepmode;
                        gpio-controller;
                        #gpio-cells = <2>;
                        gpio-bank = <7>;
                        interrupts = <0 127 0x4>;
                        interrupt-controller;
                        #interrupt-cells = <2>;
-                       supports-sleepmode;
+                       st,supports-sleepmode;
                        gpio-controller;
                        #gpio-cells = <2>;
                        gpio-bank = <8>;
  
                                // DB8500_REGULATOR_VAPE
                                db8500_vape_reg: db8500_vape {
 +                                      regulator-compatible = "db8500_vape";
                                        regulator-name = "db8500-vape";
                                        regulator-always-on;
                                };
  
                                // DB8500_REGULATOR_VARM
                                db8500_varm_reg: db8500_varm {
 +                                      regulator-compatible = "db8500_varm";
                                        regulator-name = "db8500-varm";
                                };
  
                                // DB8500_REGULATOR_VMODEM
                                db8500_vmodem_reg: db8500_vmodem {
 +                                      regulator-compatible = "db8500_vmodem";
                                        regulator-name = "db8500-vmodem";
                                };
  
                                // DB8500_REGULATOR_VPLL
                                db8500_vpll_reg: db8500_vpll {
 +                                      regulator-compatible = "db8500_vpll";
                                        regulator-name = "db8500-vpll";
                                };
  
                                // DB8500_REGULATOR_VSMPS1
                                db8500_vsmps1_reg: db8500_vsmps1 {
 +                                      regulator-compatible = "db8500_vsmps1";
                                        regulator-name = "db8500-vsmps1";
                                };
  
                                // DB8500_REGULATOR_VSMPS2
                                db8500_vsmps2_reg: db8500_vsmps2 {
 +                                      regulator-compatible = "db8500_vsmps2";
                                        regulator-name = "db8500-vsmps2";
                                };
  
                                // DB8500_REGULATOR_VSMPS3
                                db8500_vsmps3_reg: db8500_vsmps3 {
 +                                      regulator-compatible = "db8500_vsmps3";
                                        regulator-name = "db8500-vsmps3";
                                };
  
                                // DB8500_REGULATOR_VRF1
                                db8500_vrf1_reg: db8500_vrf1 {
 +                                      regulator-compatible = "db8500_vrf1";
                                        regulator-name = "db8500-vrf1";
                                };
  
                                // DB8500_REGULATOR_SWITCH_SVAMMDSP
                                db8500_sva_mmdsp_reg: db8500_sva_mmdsp {
 +                                      regulator-compatible = "db8500_sva_mmdsp";
                                        regulator-name = "db8500-sva-mmdsp";
                                };
  
                                // DB8500_REGULATOR_SWITCH_SVAMMDSPRET
                                db8500_sva_mmdsp_ret_reg: db8500_sva_mmdsp_ret {
 +                                      regulator-compatible = "db8500_sva_mmdsp_ret";
                                        regulator-name = "db8500-sva-mmdsp-ret";
                                };
  
                                // DB8500_REGULATOR_SWITCH_SVAPIPE
                                db8500_sva_pipe_reg: db8500_sva_pipe {
 +                                      regulator-compatible = "db8500_sva_pipe";
                                        regulator-name = "db8500_sva_pipe";
                                };
  
                                // DB8500_REGULATOR_SWITCH_SIAMMDSP
                                db8500_sia_mmdsp_reg: db8500_sia_mmdsp {
 +                                      regulator-compatible = "db8500_sia_mmdsp";
                                        regulator-name = "db8500_sia_mmdsp";
                                };
  
  
                                // DB8500_REGULATOR_SWITCH_SIAPIPE
                                db8500_sia_pipe_reg: db8500_sia_pipe {
 +                                      regulator-compatible = "db8500_sia_pipe";
                                        regulator-name = "db8500-sia-pipe";
                                };
  
                                // DB8500_REGULATOR_SWITCH_SGA
                                db8500_sga_reg: db8500_sga {
 +                                      regulator-compatible = "db8500_sga";
                                        regulator-name = "db8500-sga";
                                        vin-supply = <&db8500_vape_reg>;
                                };
  
                                // DB8500_REGULATOR_SWITCH_B2R2_MCDE
                                db8500_b2r2_mcde_reg: db8500_b2r2_mcde {
 +                                      regulator-compatible = "db8500_b2r2_mcde";
                                        regulator-name = "db8500-b2r2-mcde";
                                        vin-supply = <&db8500_vape_reg>;
                                };
  
                                // DB8500_REGULATOR_SWITCH_ESRAM12
                                db8500_esram12_reg: db8500_esram12 {
 +                                      regulator-compatible = "db8500_esram12";
                                        regulator-name = "db8500-esram12";
                                };
  
                                // DB8500_REGULATOR_SWITCH_ESRAM12RET
                                db8500_esram12_ret_reg: db8500_esram12_ret {
 +                                      regulator-compatible = "db8500_esram12_ret";
                                        regulator-name = "db8500-esram12-ret";
                                };
  
                                // DB8500_REGULATOR_SWITCH_ESRAM34
                                db8500_esram34_reg: db8500_esram34 {
 +                                      regulator-compatible = "db8500_esram34";
                                        regulator-name = "db8500-esram34";
                                };
  
                                // DB8500_REGULATOR_SWITCH_ESRAM34RET
                                db8500_esram34_ret_reg: db8500_esram34_ret {
 +                                      regulator-compatible = "db8500_esram34_ret";
                                        regulator-name = "db8500-esram34-ret";
                                };
                        };
                                compatible = "stericsson,ab8500";
                                reg = <5>; /* mailbox 5 is i2c */
                                interrupts = <0 40 0x4>;
+                               interrupt-controller;
+                               #interrupt-cells = <2>;
+                               ab8500-rtc {
+                                       compatible = "stericsson,ab8500-rtc";
+                                       interrupts = <17 0x4
+                                                     18 0x4>;
+                                       interrupt-names = "60S", "ALARM";
+                               };
+                               ab8500-gpadc {
+                                       compatible = "stericsson,ab8500-gpadc";
+                                       interrupts = <32 0x4
+                                                     39 0x4>;
+                                       interrupt-names = "HW_CONV_END", "SW_CONV_END";
+                                       vddadc-supply = <&ab8500_ldo_tvout_reg>;
+                               };
+                               ab8500-usb {
+                                       compatible = "stericsson,ab8500-usb";
+                                       interrupts = < 90 0x4
+                                                      96 0x4
+                                                      14 0x4
+                                                      15 0x4
+                                                      79 0x4
+                                                      74 0x4
+                                                      75 0x4>;
+                                       interrupt-names = "ID_WAKEUP_R",
+                                                         "ID_WAKEUP_F",
+                                                         "VBUS_DET_F",
+                                                         "VBUS_DET_R",
+                                                         "USB_LINK_STATUS",
+                                                         "USB_ADP_PROBE_PLUG",
+                                                         "USB_ADP_PROBE_UNPLUG";
+                                       vddulpivio18-supply = <&ab8500_ldo_initcore_reg>;
+                                       v-ape-supply = <&db8500_vape_reg>;
+                                       musb_1v8-supply = <&db8500_vsmps2_reg>;
+                               };
+                               ab8500-ponkey {
+                                       compatible = "stericsson,ab8500-ponkey";
+                                       interrupts = <6 0x4
+                                                     7 0x4>;
+                                       interrupt-names = "ONKEY_DBF", "ONKEY_DBR";
+                               };
+                               ab8500-sysctrl {
+                                       compatible = "stericsson,ab8500-sysctrl";
+                               };
+                               ab8500-pwm {
+                                       compatible = "stericsson,ab8500-pwm";
+                               };
+                               ab8500-debugfs {
+                                       compatible = "stericsson,ab8500-debug";
+                               };
  
                                ab8500-regulators {
                                        compatible = "stericsson,ab8500-regulator";
  
                                        // supplies to the display/camera
                                        ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {
 +                                              regulator-compatible = "ab8500_ldo_aux1";
                                                regulator-name = "V-DISPLAY";
                                                regulator-min-microvolt = <2500000>;
                                                regulator-max-microvolt = <2900000>;
  
                                        // supplies to the on-board eMMC
                                        ab8500_ldo_aux2_reg: ab8500_ldo_aux2 {
 +                                              regulator-compatible = "ab8500_ldo_aux2";
                                                regulator-name = "V-eMMC1";
                                                regulator-min-microvolt = <1100000>;
                                                regulator-max-microvolt = <3300000>;
  
                                        // supply for VAUX3; SDcard slots
                                        ab8500_ldo_aux3_reg: ab8500_ldo_aux3 {
 +                                              regulator-compatible = "ab8500_ldo_aux3";
                                                regulator-name = "V-MMC-SD";
                                                regulator-min-microvolt = <1100000>;
                                                regulator-max-microvolt = <3300000>;
  
                                        // supply for v-intcore12; VINTCORE12 LDO
                                        ab8500_ldo_initcore_reg: ab8500_ldo_initcore {
 +                                              regulator-compatible = "ab8500_ldo_initcore";
                                                regulator-name = "V-INTCORE";
                                        };
  
                                        // supply for tvout; gpadc; TVOUT LDO
                                        ab8500_ldo_tvout_reg: ab8500_ldo_tvout {
 +                                              regulator-compatible = "ab8500_ldo_tvout";
                                                regulator-name = "V-TVOUT";
                                        };
  
                                        // supply for ab8500-usb; USB LDO
                                        ab8500_ldo_usb_reg: ab8500_ldo_usb {
 +                                              regulator-compatible = "ab8500_ldo_usb";
                                                regulator-name = "dummy";
                                        };
  
                                        // supply for ab8500-vaudio; VAUDIO LDO
                                        ab8500_ldo_audio_reg: ab8500_ldo_audio {
 +                                              regulator-compatible = "ab8500_ldo_audio";
                                                regulator-name = "V-AUD";
                                        };
  
                                        // supply for v-anamic1 VAMic1-LDO
                                        ab8500_ldo_anamic1_reg: ab8500_ldo_anamic1 {
 +                                              regulator-compatible = "ab8500_ldo_anamic1";
                                                regulator-name = "V-AMIC1";
                                        };
  
                                        // supply for v-amic2; VAMIC2 LDO; reuse constants for AMIC1
                                        ab8500_ldo_amamic2_reg: ab8500_ldo_amamic2 {
 +                                              regulator-compatible = "ab8500_ldo_amamic2";
                                                regulator-name = "V-AMIC2";
                                        };
  
                                        // supply for v-dmic; VDMIC LDO
                                        ab8500_ldo_dmic_reg: ab8500_ldo_dmic {
 +                                              regulator-compatible = "ab8500_ldo_dmic";
                                                regulator-name = "V-DMIC";
                                        };
  
                                        // supply for U8500 CSI/DSI; VANA LDO
                                        ab8500_ldo_ana_reg: ab8500_ldo_ana {
 +                                              regulator-compatible = "ab8500_ldo_ana";
                                                regulator-name = "V-CSI/DSI";
                                        };
                                };
index 9d8abf0938e00a4ed2ad7e9980b82ee2b845778a,f57f5e8d0035fb91ba1b4f240f40aea10c841c8d..9880c12877b3f5347ef4d5c84cdfadeb028a67d1
                        linux,default-trigger = "mmc0";
                };
        };
+       sound: sound {
+               compatible = "ti,abe-twl6040";
+               ti,model = "PandaBoard";
+               ti,mclk-freq = <38400000>;
+               ti,mcpdm = <&mcpdm>;
+               ti,twl6040 = <&twl6040>;
+               /* Audio routing */
+               ti,audio-routing =
+                       "Headset Stereophone", "HSOL",
+                       "Headset Stereophone", "HSOR",
+                       "Ext Spk", "HFL",
+                       "Ext Spk", "HFR",
+                       "Line Out", "AUXL",
+                       "Line Out", "AUXR",
+                       "HSMIC", "Headset Mic",
+                       "Headset Mic", "Headset Mic Bias",
+                       "AFML", "Line In",
+                       "AFMR", "Line In";
+       };
  };
  
  &i2c1 {
                interrupts = <0 7 4>; /* IRQ_SYS_1N cascaded to gic */
                interrupt-parent = <&gic>;
        };
+       twl6040: twl@4b {
+               compatible = "ti,twl6040";
+               reg = <0x4b>;
+               /* SPI = 0, IRQ# = 119, 4 = active high level-sensitive */
+               interrupts = <0 119 4>; /* IRQ_SYS_2N cascaded to gic */
+               interrupt-parent = <&gic>;
+               ti,audpwron-gpio = <&gpio4 31 0>;  /* gpio line 127 */
+               vio-supply = <&v1v8>;
+               v2v1-supply = <&v2v1>;
+               enable-active-high;
+       };
  };
  
  /include/ "twl6030.dtsi"
  };
  
  &mmc2 {
 -      status = "disable";
 +      status = "disabled";
  };
  
  &mmc3 {
 -      status = "disable";
 +      status = "disabled";
  };
  
  &mmc4 {
 -      status = "disable";
 +      status = "disabled";
  };
  
  &mmc5 {
index 9b1c13a16c2cb53009b0cdfa61ce31f00ef59985,a18cf103e1715e588a862e5a4b46072735f11000..72216e932fc0c7c8d5632a0df5173d7bfe05bbe8
                regulator-boot-on;
        };
  
+       vbat: fixedregulator@2 {
+               compatible = "regulator-fixed";
+               regulator-name = "VBAT";
+               regulator-min-microvolt = <3750000>;
+               regulator-max-microvolt = <3750000>;
+               regulator-boot-on;
+       };
        leds {
                compatible = "gpio-leds";
                debug0 {
                        gpios = <&gpio5 11 0>; /* 139 */
                };
        };
+       sound {
+               compatible = "ti,abe-twl6040";
+               ti,model = "SDP4430";
+               ti,jack-detection = <1>;
+               ti,mclk-freq = <38400000>;
+               ti,mcpdm = <&mcpdm>;
+               ti,dmic = <&dmic>;
+               ti,twl6040 = <&twl6040>;
+               /* Audio routing */
+               ti,audio-routing =
+                       "Headset Stereophone", "HSOL",
+                       "Headset Stereophone", "HSOR",
+                       "Earphone Spk", "EP",
+                       "Ext Spk", "HFL",
+                       "Ext Spk", "HFR",
+                       "Line Out", "AUXL",
+                       "Line Out", "AUXR",
+                       "Vibrator", "VIBRAL",
+                       "Vibrator", "VIBRAR",
+                       "HSMIC", "Headset Mic",
+                       "Headset Mic", "Headset Mic Bias",
+                       "MAINMIC", "Main Handset Mic",
+                       "Main Handset Mic", "Main Mic Bias",
+                       "SUBMIC", "Sub Handset Mic",
+                       "Sub Handset Mic", "Main Mic Bias",
+                       "AFML", "Line In",
+                       "AFMR", "Line In",
+                       "DMic", "Digital Mic",
+                       "Digital Mic", "Digital Mic1 Bias";
+       };
  };
  
  &i2c1 {
                interrupts = <0 7 4>; /* IRQ_SYS_1N cascaded to gic */
                interrupt-parent = <&gic>;
        };
+       twl6040: twl@4b {
+               compatible = "ti,twl6040";
+               reg = <0x4b>;
+               /* SPI = 0, IRQ# = 119, 4 = active high level-sensitive */
+               interrupts = <0 119 4>; /* IRQ_SYS_2N cascaded to gic */
+               interrupt-parent = <&gic>;
+               ti,audpwron-gpio = <&gpio4 31 0>;  /* gpio line 127 */
+               vio-supply = <&v1v8>;
+               v2v1-supply = <&v2v1>;
+               enable-active-high;
+               /* regulators for vibra motor */
+               vddvibl-supply = <&vbat>;
+               vddvibr-supply = <&vbat>;
+               vibra {
+                       /* Vibra driver, motor resistance parameters */
+                       ti,vibldrv-res = <8>;
+                       ti,vibrdrv-res = <3>;
+                       ti,viblmotor-res = <10>;
+                       ti,vibrmotor-res = <10>;
+               };
+       };
  };
  
  /include/ "twl6030.dtsi"
  };
  
  &mmc3 {
 -      status = "disable";
 +      status = "disabled";
  };
  
  &mmc4 {
 -      status = "disable";
 +      status = "disabled";
  };
  
  &mmc5 {
index 1bba37c6598bef2fd7b1d1afea73e5ca5df209de,5f87f2e2ddaecb61de28642fde43ee3bc094187c..7616101a35f0590addd7cbfe5d88027aba2f1cef
@@@ -52,6 -52,7 +52,7 @@@ config SOC_IMX2
        select ARCH_MX25
        select COMMON_CLK
        select CPU_ARM926T
+       select HAVE_CAN_FLEXCAN if CAN
        select ARCH_MXC_IOMUX_V3
        select MXC_AVIC
  
@@@ -73,12 -74,13 +74,13 @@@ config SOC_IMX3
  
  config SOC_IMX35
        bool
 -      select CPU_V6
 +      select CPU_V6K
        select ARCH_MXC_IOMUX_V3
        select COMMON_CLK
        select HAVE_EPIT
        select MXC_AVIC
        select SMP_ON_UP if SMP
+       select HAVE_CAN_FLEXCAN if CAN
  
  config SOC_IMX5
        select CPU_V7
@@@ -105,6 -107,7 +107,7 @@@ config     SOC_IMX5
        select SOC_IMX5
        select ARCH_MX5
        select ARCH_MX53
+       select HAVE_CAN_FLEXCAN if CAN
  
  if ARCH_IMX_V4_V5
  
@@@ -158,6 -161,7 +161,6 @@@ config MACH_MX25_3D
        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
@@@ -556,6 -560,14 +559,14 @@@ config MACH_BU
          Include support for BUGBase 1.3 platform. This includes specific
          configurations for the board and its peripherals.
  
+ config MACH_IMX31_DT
+       bool "Support i.MX31 platforms from device tree"
+       select SOC_IMX31
+       select USE_OF
+       help
+         Include support for Freescale i.MX31 based platforms
+         using the device tree for discovery.
  comment "MX35 platforms:"
  
  config MACH_PCM043
@@@ -588,7 -600,6 +599,7 @@@ config MACH_MX35_3D
        select IMX_HAVE_PLATFORM_IPU_CORE
        select IMX_HAVE_PLATFORM_MXC_EHCI
        select IMX_HAVE_PLATFORM_MXC_NAND
 +      select IMX_HAVE_PLATFORM_MXC_RTC
        select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
        help
          Include support for MX35PDK platform. This includes specific
@@@ -826,10 -837,12 +837,12 @@@ config SOC_IMX6
        select COMMON_CLK
        select CPU_V7
        select HAVE_ARM_SCU
+       select HAVE_CAN_FLEXCAN if CAN
        select HAVE_IMX_GPC
        select HAVE_IMX_MMDC
        select HAVE_IMX_SRC
        select HAVE_SMP
+       select MFD_ANATOP
        select PINCTRL
        select PINCTRL_IMX6Q
        select USE_OF
index abb42e7453a9d5abe5665bc855bdc986ca28c638,d5e88c0d5e6c6aab19232b930692ebd205f061c5..ea89520b6e223fd3ab4db3227574c7299605e265
@@@ -147,12 -147,12 +147,12 @@@ enum mx6q_clks 
        esai, gpt_ipg, gpt_ipg_per, gpu2d_core, gpu3d_core, hdmi_iahb,
        hdmi_isfr, i2c1, i2c2, i2c3, iim, enfc, ipu1, ipu1_di0, ipu1_di1, ipu2,
        ipu2_di0, ldb_di0, ldb_di1, ipu2_di1, hsi_tx, mlb, mmdc_ch0_axi,
-       mmdc_ch1_axi, ocram, openvg_axi, pcie_axi, pwm1, pwm2, pwm3, pwm4,
+       mmdc_ch1_axi, ocram, openvg_axi, pcie_axi, pwm1, pwm2, pwm3, pwm4, per1_bch,
        gpmi_bch_apb, gpmi_bch, gpmi_io, gpmi_apb, sata, sdma, spba, ssi1,
        ssi2, ssi3, uart_ipg, uart_serial, usboh3, usdhc1, usdhc2, usdhc3,
        usdhc4, vdo_axi, vpu_axi, cko1, pll1_sys, pll2_bus, pll3_usb_otg,
        pll4_audio, pll5_video, pll6_mlb, pll7_usb_host, pll8_enet, ssi1_ipg,
-       ssi2_ipg, ssi3_ipg, rom,
+       ssi2_ipg, ssi3_ipg, rom, usbphy1, usbphy2,
        clk_max
  };
  
@@@ -198,6 -198,9 +198,9 @@@ int __init mx6q_clocks_init(void
        clk[pll7_usb_host] = imx_clk_pllv3(IMX_PLLV3_USB,       "pll7_usb_host","osc", base + 0x20, 0x2000,   0x3);
        clk[pll8_enet]     = imx_clk_pllv3(IMX_PLLV3_ENET,      "pll8_enet",    "osc", base + 0xe0, 0x182000, 0x3);
  
+       clk[usbphy1] = imx_clk_gate("usbphy1", "pll3_usb_otg", base + 0x10, 6);
+       clk[usbphy2] = imx_clk_gate("usbphy2", "pll7_usb_host", base + 0x20, 6);
        /*                                name              parent_name        reg       idx */
        clk[pll2_pfd0_352m] = imx_clk_pfd("pll2_pfd0_352m", "pll2_bus",     base + 0x100, 0);
        clk[pll2_pfd1_594m] = imx_clk_pfd("pll2_pfd1_594m", "pll2_bus",     base + 0x100, 1);
        clk[ahb]               = imx_clk_busy_divider("ahb",               "periph",      base + 0x14, 10,  3,   base + 0x48, 1);
  
        /*                                name             parent_name          reg         shift */
-       clk[apbh_dma]     = imx_clk_gate2("apbh_dma",      "ahb",               base + 0x68, 4);
+       clk[apbh_dma]     = imx_clk_gate2("apbh_dma",      "usdhc3",            base + 0x68, 4);
        clk[asrc]         = imx_clk_gate2("asrc",          "asrc_podf",         base + 0x68, 6);
        clk[can1_ipg]     = imx_clk_gate2("can1_ipg",      "ipg",               base + 0x68, 14);
        clk[can1_serial]  = imx_clk_gate2("can1_serial",   "can_root",          base + 0x68, 16);
        clk[ocram]        = imx_clk_gate2("ocram",         "ahb",               base + 0x74, 28);
        clk[openvg_axi]   = imx_clk_gate2("openvg_axi",    "axi",               base + 0x74, 30);
        clk[pcie_axi]     = imx_clk_gate2("pcie_axi",      "pcie_axi_sel",      base + 0x78, 0);
+       clk[per1_bch]     = imx_clk_gate2("per1_bch",      "usdhc3",            base + 0x78, 12);
        clk[pwm1]         = imx_clk_gate2("pwm1",          "ipg_per",           base + 0x78, 16);
        clk[pwm2]         = imx_clk_gate2("pwm2",          "ipg_per",           base + 0x78, 18);
        clk[pwm3]         = imx_clk_gate2("pwm3",          "ipg_per",           base + 0x78, 20);
                        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[apbh_dma], NULL, "110000.dma-apbh");
+       clk_register_clkdev(clk[per1_bch], "per1_bch", "112000.gpmi-nand");
+       clk_register_clkdev(clk[gpmi_bch_apb], "gpmi_bch_apb", "112000.gpmi-nand");
+       clk_register_clkdev(clk[gpmi_bch], "gpmi_bch", "112000.gpmi-nand");
+       clk_register_clkdev(clk[gpmi_apb], "gpmi_apb", "112000.gpmi-nand");
+       clk_register_clkdev(clk[gpmi_io], "gpmi_io", "112000.gpmi-nand");
+       clk_register_clkdev(clk[usboh3], NULL, "2184000.usb");
+       clk_register_clkdev(clk[usboh3], NULL, "2184200.usb");
+       clk_register_clkdev(clk[usboh3], NULL, "2184400.usb");
+       clk_register_clkdev(clk[usboh3], NULL, "2184600.usb");
+       clk_register_clkdev(clk[usbphy1], NULL, "20c9000.usbphy");
+       clk_register_clkdev(clk[usbphy2], NULL, "20ca000.usbphy");
        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");
index 6303974c2ee06af0e81a4f60437f0fac86d2f4f6,86d075870a52145fc18bd1cab636f594a6d1575f..74e31ce355388bd7c2062b35fb30e09ca085b3f5
@@@ -126,8 -126,7 +126,8 @@@ struct platform_device s3c_device_adc 
  #ifdef CONFIG_CPU_S3C2440
  static struct resource s3c_camif_resource[] = {
        [0] = DEFINE_RES_MEM(S3C2440_PA_CAMIF, S3C2440_SZ_CAMIF),
 -      [1] = DEFINE_RES_IRQ(IRQ_CAM),
 +      [1] = DEFINE_RES_IRQ(IRQ_S3C2440_CAM_C),
 +      [2] = DEFINE_RES_IRQ(IRQ_S3C2440_CAM_P),
  };
  
  struct platform_device s3c_device_camif = {
@@@ -1513,7 -1512,7 +1513,7 @@@ static struct resource s3c64xx_spi0_res
  };
  
  struct platform_device s3c64xx_device_spi0 = {
-       .name           = "s3c64xx-spi",
+       .name           = "s3c6410-spi",
        .id             = 0,
        .num_resources  = ARRAY_SIZE(s3c64xx_spi0_resource),
        .resource       = s3c64xx_spi0_resource,
        },
  };
  
- void __init s3c64xx_spi0_set_platdata(struct s3c64xx_spi_info *pd,
-                                     int src_clk_nr, int num_cs)
+ void __init s3c64xx_spi0_set_platdata(int (*cfg_gpio)(void), int src_clk_nr,
+                                               int num_cs)
  {
-       if (!pd) {
-               pr_err("%s:Need to pass platform data\n", __func__);
-               return;
-       }
+       struct s3c64xx_spi_info pd;
  
        /* Reject invalid configuration */
        if (!num_cs || src_clk_nr < 0) {
                return;
        }
  
-       pd->num_cs = num_cs;
-       pd->src_clk_nr = src_clk_nr;
-       if (!pd->cfg_gpio)
-               pd->cfg_gpio = s3c64xx_spi0_cfg_gpio;
+       pd.num_cs = num_cs;
+       pd.src_clk_nr = src_clk_nr;
+       pd.cfg_gpio = (cfg_gpio) ? cfg_gpio : s3c64xx_spi0_cfg_gpio;
  
-       s3c_set_platdata(pd, sizeof(*pd), &s3c64xx_device_spi0);
+       s3c_set_platdata(&pd, sizeof(pd), &s3c64xx_device_spi0);
  }
  #endif /* CONFIG_S3C64XX_DEV_SPI0 */
  
@@@ -1555,7 -1550,7 +1551,7 @@@ static struct resource s3c64xx_spi1_res
  };
  
  struct platform_device s3c64xx_device_spi1 = {
-       .name           = "s3c64xx-spi",
+       .name           = "s3c6410-spi",
        .id             = 1,
        .num_resources  = ARRAY_SIZE(s3c64xx_spi1_resource),
        .resource       = s3c64xx_spi1_resource,
        },
  };
  
- void __init s3c64xx_spi1_set_platdata(struct s3c64xx_spi_info *pd,
-                                     int src_clk_nr, int num_cs)
+ void __init s3c64xx_spi1_set_platdata(int (*cfg_gpio)(void), int src_clk_nr,
+                                               int num_cs)
  {
-       if (!pd) {
-               pr_err("%s:Need to pass platform data\n", __func__);
-               return;
-       }
        /* Reject invalid configuration */
        if (!num_cs || src_clk_nr < 0) {
                pr_err("%s: Invalid SPI configuration\n", __func__);
                return;
        }
  
-       pd->num_cs = num_cs;
-       pd->src_clk_nr = src_clk_nr;
-       if (!pd->cfg_gpio)
-               pd->cfg_gpio = s3c64xx_spi1_cfg_gpio;
+       pd.num_cs = num_cs;
+       pd.src_clk_nr = src_clk_nr;
+       pd.cfg_gpio = (cfg_gpio) ? cfg_gpio : s3c64xx_spi1_cfg_gpio;
  
-       s3c_set_platdata(pd, sizeof(*pd), &s3c64xx_device_spi1);
+       s3c_set_platdata(&pd, sizeof(pd), &s3c64xx_device_spi1);
  }
  #endif /* CONFIG_S3C64XX_DEV_SPI1 */
  
@@@ -1597,7 -1586,7 +1587,7 @@@ static struct resource s3c64xx_spi2_res
  };
  
  struct platform_device s3c64xx_device_spi2 = {
-       .name           = "s3c64xx-spi",
+       .name           = "s3c6410-spi",
        .id             = 2,
        .num_resources  = ARRAY_SIZE(s3c64xx_spi2_resource),
        .resource       = s3c64xx_spi2_resource,
        },
  };
  
- void __init s3c64xx_spi2_set_platdata(struct s3c64xx_spi_info *pd,
-                                     int src_clk_nr, int num_cs)
+ void __init s3c64xx_spi2_set_platdata(int (*cfg_gpio)(void), int src_clk_nr,
+                                               int num_cs)
  {
-       if (!pd) {
-               pr_err("%s:Need to pass platform data\n", __func__);
-               return;
-       }
+       struct s3c64xx_spi_info pd;
  
        /* Reject invalid configuration */
        if (!num_cs || src_clk_nr < 0) {
                return;
        }
  
-       pd->num_cs = num_cs;
-       pd->src_clk_nr = src_clk_nr;
-       if (!pd->cfg_gpio)
-               pd->cfg_gpio = s3c64xx_spi2_cfg_gpio;
+       pd.num_cs = num_cs;
+       pd.src_clk_nr = src_clk_nr;
+       pd.cfg_gpio = (cfg_gpio) ? cfg_gpio : s3c64xx_spi2_cfg_gpio;
  
-       s3c_set_platdata(pd, sizeof(*pd), &s3c64xx_device_spi2);
+       s3c_set_platdata(&pd, sizeof(pd), &s3c64xx_device_spi2);
  }
  #endif /* CONFIG_S3C64XX_DEV_SPI2 */