Merge tag 'berlin-simple-mfd-4.2-1' of git://git.infradead.org/users/hesselba/linux...
authorArnd Bergmann <arnd@arndb.de>
Wed, 20 May 2015 21:04:54 +0000 (23:04 +0200)
committerArnd Bergmann <arnd@arndb.de>
Wed, 20 May 2015 21:04:54 +0000 (23:04 +0200)
Merge "Berlin simple-mfd for v4.2" from Sebastian Hesselbarth:
- based on arm-soc drivers/simple-mfd branch
- rework of chip/system ctrl nodes to simple-mfd probing for
  clk, pinctrl, and reset
- add adc node

* tag 'berlin-simple-mfd-4.2-1' of git://git.infradead.org/users/hesselba/linux-berlin:
  ARM: berlin: add an ADC node for the BG2Q
  ARM: berlin: remove useless chip and system ctrl compatibles
  clk: berlin: drop direct of_iomap of nodes reg property
  ARM: berlin: move BG2Q clock node
  ARM: berlin: move BG2CD clock node
  ARM: berlin: move BG2 clock node
  clk: berlin: prepare simple-mfd conversion
  pinctrl: berlin: drop SoC stub provided regmap
  ARM: berlin: move pinctrl to simple-mfd nodes
  pinctrl: berlin: prepare to use regmap provided by syscon
  reset: berlin: drop arch_initcall initialization
  ARM: berlin: move reset to simple-mfd nodes
  reset: berlin: convert to a platform driver
  ARM: berlin: prepare simple-mfd/syscon conversion of sys/chip ctrl nodes
  ARM: berlin: select MFD_SYSCON by default

arch/arm/boot/dts/berlin2.dtsi
arch/arm/boot/dts/berlin2cd.dtsi
arch/arm/boot/dts/berlin2q.dtsi
arch/arm/mach-berlin/Kconfig
drivers/clk/berlin/bg2.c
drivers/clk/berlin/bg2q.c
drivers/pinctrl/berlin/berlin-bg2.c
drivers/pinctrl/berlin/berlin-bg2cd.c
drivers/pinctrl/berlin/berlin-bg2q.c
drivers/pinctrl/berlin/berlin.c
drivers/reset/reset-berlin.c

index 63d00a6..4d2f527 100644 (file)
@@ -56,7 +56,7 @@
                sdhci0: sdhci@ab0000 {
                        compatible = "mrvl,pxav3-mmc";
                        reg = <0xab0000 0x200>;
-                       clocks = <&chip CLKID_SDIO0XIN>, <&chip CLKID_SDIO0>;
+                       clocks = <&chip_clk CLKID_SDIO0XIN>, <&chip_clk CLKID_SDIO0>;
                        clock-names = "io", "core";
                        interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
@@ -65,7 +65,7 @@
                sdhci1: sdhci@ab0800 {
                        compatible = "mrvl,pxav3-mmc";
                        reg = <0xab0800 0x200>;
-                       clocks = <&chip CLKID_SDIO1XIN>, <&chip CLKID_SDIO1>;
+                       clocks = <&chip_clk CLKID_SDIO1XIN>, <&chip_clk CLKID_SDIO1>;
                        clock-names = "io", "core";
                        interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
@@ -75,7 +75,7 @@
                        compatible = "mrvl,pxav3-mmc";
                        reg = <0xab1000 0x200>;
                        interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_NFC_ECC>, <&chip CLKID_NFC>;
+                       clocks = <&chip_clk CLKID_NFC_ECC>, <&chip_clk CLKID_NFC>;
                        clock-names = "io", "core";
                        pinctrl-0 = <&emmc_pmux>;
                        pinctrl-names = "default";
                        compatible = "arm,cortex-a9-twd-timer";
                        reg = <0xad0600 0x20>;
                        interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_HIGH)>;
-                       clocks = <&chip CLKID_TWD>;
+                       clocks = <&chip_clk CLKID_TWD>;
                };
 
                eth1: ethernet@b90000 {
                        compatible = "marvell,pxa168-eth";
                        reg = <0xb90000 0x10000>;
-                       clocks = <&chip CLKID_GETH1>;
+                       clocks = <&chip_clk CLKID_GETH1>;
                        interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
                        /* set by bootloader */
                        local-mac-address = [00 00 00 00 00 00];
                eth0: ethernet@e50000 {
                        compatible = "marvell,pxa168-eth";
                        reg = <0xe50000 0x10000>;
-                       clocks = <&chip CLKID_GETH0>;
+                       clocks = <&chip_clk CLKID_GETH0>;
                        interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
                        /* set by bootloader */
                        local-mac-address = [00 00 00 00 00 00];
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c00 0x14>;
                                interrupts = <8>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "okay";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c14 0x14>;
                                interrupts = <9>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "okay";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c28 0x14>;
                                interrupts = <10>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c3c 0x14>;
                                interrupts = <11>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c50 0x14>;
                                interrupts = <12>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c64 0x14>;
                                interrupts = <13>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c78 0x14>;
                                interrupts = <14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c8c 0x14>;
                                interrupts = <15>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                        compatible = "marvell,berlin2-ahci", "generic-ahci";
                        reg = <0xe90000 0x1000>;
                        interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_SATA>;
+                       clocks = <&chip_clk CLKID_SATA>;
                        #address-cells = <1>;
                        #size-cells = <0>;
 
                sata_phy: phy@e900a0 {
                        compatible = "marvell,berlin2-sata-phy";
                        reg = <0xe900a0 0x200>;
-                       clocks = <&chip CLKID_SATA>;
+                       clocks = <&chip_clk CLKID_SATA>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        #phy-cells = <1>;
                };
 
                chip: chip-control@ea0000 {
-                       compatible = "marvell,berlin2-chip-ctrl";
-                       #clock-cells = <1>;
-                       #reset-cells = <2>;
+                       compatible = "simple-mfd", "syscon";
                        reg = <0xea0000 0x400>;
-                       clocks = <&refclk>;
-                       clock-names = "refclk";
 
-                       emmc_pmux: emmc-pmux {
-                               groups = "G26";
-                               function = "emmc";
+                       chip_clk: clock {
+                               compatible = "marvell,berlin2-clk";
+                               #clock-cells = <1>;
+                               clocks = <&refclk>;
+                               clock-names = "refclk";
+                       };
+
+                       soc_pinctrl: pin-controller {
+                               compatible = "marvell,berlin2-soc-pinctrl";
+
+                               emmc_pmux: emmc-pmux {
+                                       groups = "G26";
+                                       function = "emmc";
+                               };
+                       };
+
+                       chip_rst: reset {
+                               compatible = "marvell,berlin2-reset";
+                               #reset-cells = <2>;
                        };
                };
 
                        };
 
                        sysctrl: system-controller@d000 {
-                               compatible = "marvell,berlin2-system-ctrl";
+                               compatible = "simple-mfd", "syscon";
                                reg = <0xd000 0x100>;
 
-                               uart0_pmux: uart0-pmux {
-                                       groups = "GSM4";
-                                       function = "uart0";
-                               };
-
-                               uart1_pmux: uart1-pmux {
-                                       groups = "GSM5";
-                                       function = "uart1";
-                               };
-
-                               uart2_pmux: uart2-pmux {
-                                       groups = "GSM3";
-                                       function = "uart2";
+                               sys_pinctrl: pin-controller {
+                                       compatible = "marvell,berlin2-system-pinctrl";
+                                       uart0_pmux: uart0-pmux {
+                                               groups = "GSM4";
+                                               function = "uart0";
+                                       };
+
+                                       uart1_pmux: uart1-pmux {
+                                               groups = "GSM5";
+                                               function = "uart1";
+                                       };
+                                       uart2_pmux: uart2-pmux {
+                                               groups = "GSM3";
+                                               function = "uart2";
+                                       };
                                };
                        };
 
index 81b670a..0a70d47 100644 (file)
@@ -53,7 +53,7 @@
                sdhci0: sdhci@ab0000 {
                        compatible = "mrvl,pxav3-mmc";
                        reg = <0xab0000 0x200>;
-                       clocks = <&chip CLKID_SDIO0XIN>, <&chip CLKID_SDIO0>;
+                       clocks = <&chip_clk CLKID_SDIO0XIN>, <&chip_clk CLKID_SDIO0>;
                        clock-names = "io", "core";
                        interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                        compatible = "arm,cortex-a9-twd-timer";
                        reg = <0xad0600 0x20>;
                        interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_HIGH)>;
-                       clocks = <&chip CLKID_TWD>;
+                       clocks = <&chip_clk CLKID_TWD>;
                };
 
                usb_phy0: usb-phy@b74000 {
                        compatible = "marvell,berlin2cd-usb-phy";
                        reg = <0xb74000 0x128>;
                        #phy-cells = <0>;
-                       resets = <&chip 0x178 23>;
+                       resets = <&chip_rst 0x178 23>;
                        status = "disabled";
                };
 
                        compatible = "marvell,berlin2cd-usb-phy";
                        reg = <0xb78000 0x128>;
                        #phy-cells = <0>;
-                       resets = <&chip 0x178 24>;
+                       resets = <&chip_rst 0x178 24>;
                        status = "disabled";
                };
 
                eth1: ethernet@b90000 {
                        compatible = "marvell,pxa168-eth";
                        reg = <0xb90000 0x10000>;
-                       clocks = <&chip CLKID_GETH1>;
+                       clocks = <&chip_clk CLKID_GETH1>;
                        interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
                        /* set by bootloader */
                        local-mac-address = [00 00 00 00 00 00];
                eth0: ethernet@e50000 {
                        compatible = "marvell,pxa168-eth";
                        reg = <0xe50000 0x10000>;
-                       clocks = <&chip CLKID_GETH0>;
+                       clocks = <&chip_clk CLKID_GETH0>;
                        interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
                        /* set by bootloader */
                        local-mac-address = [00 00 00 00 00 00];
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c00 0x14>;
                                interrupts = <8>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "okay";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c14 0x14>;
                                interrupts = <9>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "okay";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c28 0x14>;
                                interrupts = <10>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c3c 0x14>;
                                interrupts = <11>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c50 0x14>;
                                interrupts = <12>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c64 0x14>;
                                interrupts = <13>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c78 0x14>;
                                interrupts = <14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c8c 0x14>;
                                interrupts = <15>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                };
 
                chip: chip-control@ea0000 {
-                       compatible = "marvell,berlin2cd-chip-ctrl";
-                       #clock-cells = <1>;
-                       #reset-cells = <2>;
+                       compatible = "simple-mfd", "syscon";
                        reg = <0xea0000 0x400>;
-                       clocks = <&refclk>;
-                       clock-names = "refclk";
 
-                       uart0_pmux: uart0-pmux {
-                               groups = "G6";
-                               function = "uart0";
+                       chip_clk: clock {
+                               compatible = "marvell,berlin2-clk";
+                               #clock-cells = <1>;
+                               clocks = <&refclk>;
+                               clock-names = "refclk";
+                       };
+
+                       soc_pinctrl: pin-controller {
+                               compatible = "marvell,berlin2cd-soc-pinctrl";
+
+                               uart0_pmux: uart0-pmux {
+                                       groups = "G6";
+                                       function = "uart0";
+                               };
+                       };
+
+                       chip_rst: reset {
+                               compatible = "marvell,berlin2-reset";
+                               #reset-cells = <2>;
                        };
                };
 
                        compatible = "chipidea,usb2";
                        reg = <0xed0000 0x200>;
                        interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_USB0>;
+                       clocks = <&chip_clk CLKID_USB0>;
                        phys = <&usb_phy0>;
                        phy-names = "usb-phy";
                        status = "disabled";
                        compatible = "chipidea,usb2";
                        reg = <0xee0000 0x200>;
                        interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_USB1>;
+                       clocks = <&chip_clk CLKID_USB1>;
                        phys = <&usb_phy1>;
                        phy-names = "usb-phy";
                        status = "disabled";
                        };
 
                        sysctrl: system-controller@d000 {
-                               compatible = "marvell,berlin2cd-system-ctrl";
+                               compatible = "simple-mfd", "syscon";
                                reg = <0xd000 0x100>;
+
+                               sys_pinctrl: pin-controller {
+                                       compatible = "marvell,berlin2cd-system-pinctrl";
+                               };
                        };
 
                        sic: interrupt-controller@e000 {
index be53972..5a9d416 100644 (file)
@@ -74,7 +74,7 @@
                sdhci0: sdhci@ab0000 {
                        compatible = "mrvl,pxav3-mmc";
                        reg = <0xab0000 0x200>;
-                       clocks = <&chip CLKID_SDIO1XIN>;
+                       clocks = <&chip_clk CLKID_SDIO1XIN>;
                        interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                };
@@ -82,7 +82,7 @@
                sdhci1: sdhci@ab0800 {
                        compatible = "mrvl,pxav3-mmc";
                        reg = <0xab0800 0x200>;
-                       clocks = <&chip CLKID_SDIO1XIN>;
+                       clocks = <&chip_clk CLKID_SDIO1XIN>;
                        interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
                        status = "disabled";
                };
@@ -91,7 +91,7 @@
                        compatible = "mrvl,pxav3-mmc";
                        reg = <0xab1000 0x200>;
                        interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_NFC_ECC>, <&chip CLKID_NFC>;
+                       clocks = <&chip_clk CLKID_NFC_ECC>, <&chip_clk CLKID_NFC>;
                        clock-names = "io", "core";
                        status = "disabled";
                };
                local-timer@ad0600 {
                        compatible = "arm,cortex-a9-twd-timer";
                        reg = <0xad0600 0x20>;
-                       clocks = <&chip CLKID_TWD>;
+                       clocks = <&chip_clk CLKID_TWD>;
                        interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
                };
 
                        compatible = "marvell,berlin2-usb-phy";
                        reg = <0xa2f400 0x128>;
                        #phy-cells = <0>;
-                       resets = <&chip 0x104 14>;
+                       resets = <&chip_rst 0x104 14>;
                        status = "disabled";
                };
 
                        compatible = "chipidea,usb2";
                        reg = <0xa30000 0x10000>;
                        interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_USB2>;
+                       clocks = <&chip_clk CLKID_USB2>;
                        phys = <&usb_phy2>;
                        phy-names = "usb-phy";
                        status = "disabled";
                        compatible = "marvell,berlin2-usb-phy";
                        reg = <0xb74000 0x128>;
                        #phy-cells = <0>;
-                       resets = <&chip 0x104 12>;
+                       resets = <&chip_rst 0x104 12>;
                        status = "disabled";
                };
 
                        compatible = "marvell,berlin2-usb-phy";
                        reg = <0xb78000 0x128>;
                        #phy-cells = <0>;
-                       resets = <&chip 0x104 13>;
+                       resets = <&chip_rst 0x104 13>;
                        status = "disabled";
                };
 
                eth0: ethernet@b90000 {
                        compatible = "marvell,pxa168-eth";
                        reg = <0xb90000 0x10000>;
-                       clocks = <&chip CLKID_GETH0>;
+                       clocks = <&chip_clk CLKID_GETH0>;
                        interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
                        /* set by bootloader */
                        local-mac-address = [00 00 00 00 00 00];
                                reg = <0x1400 0x100>;
                                interrupt-parent = <&aic>;
                                interrupts = <4>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                pinctrl-0 = <&twsi0_pmux>;
                                pinctrl-names = "default";
                                status = "disabled";
                                reg = <0x1800 0x100>;
                                interrupt-parent = <&aic>;
                                interrupts = <5>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                pinctrl-0 = <&twsi1_pmux>;
                                pinctrl-names = "default";
                                status = "disabled";
                        timer0: timer@2c00 {
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c00 0x14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                interrupts = <8>;
                        };
                        timer1: timer@2c14 {
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c14 0x14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                        };
 
                        timer2: timer@2c28 {
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c28 0x14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                        timer3: timer@2c3c {
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c3c 0x14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                        timer4: timer@2c50 {
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c50 0x14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                        timer5: timer@2c64 {
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c64 0x14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                        timer6: timer@2c78 {
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c78 0x14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                        timer7: timer@2c8c {
                                compatible = "snps,dw-apb-timer";
                                reg = <0x2c8c 0x14>;
-                               clocks = <&chip CLKID_CFG>;
+                               clocks = <&chip_clk CLKID_CFG>;
                                clock-names = "timer";
                                status = "disabled";
                        };
                };
 
                chip: chip-control@ea0000 {
-                       compatible = "marvell,berlin2q-chip-ctrl";
-                       #clock-cells = <1>;
-                       #reset-cells = <2>;
+                       compatible = "simple-mfd", "syscon";
                        reg = <0xea0000 0x400>, <0xdd0170 0x10>;
-                       clocks = <&refclk>;
-                       clock-names = "refclk";
 
-                       twsi0_pmux: twsi0-pmux {
-                               groups = "G6";
-                               function = "twsi0";
+                       chip_clk: clock {
+                               compatible = "marvell,berlin2q-clk";
+                               #clock-cells = <1>;
+                               clocks = <&refclk>;
+                               clock-names = "refclk";
                        };
 
-                       twsi1_pmux: twsi1-pmux {
-                               groups = "G7";
-                               function = "twsi1";
+                       soc_pinctrl: pin-controller {
+                               compatible = "marvell,berlin2q-soc-pinctrl";
+
+                               twsi0_pmux: twsi0-pmux {
+                                       groups = "G6";
+                                       function = "twsi0";
+                               };
+
+                               twsi1_pmux: twsi1-pmux {
+                                       groups = "G7";
+                                       function = "twsi1";
+                               };
+                       };
+
+                       chip_rst: reset {
+                               compatible = "marvell,berlin2-reset";
+                               #reset-cells = <2>;
                        };
                };
 
                        compatible = "marvell,berlin2q-ahci", "generic-ahci";
                        reg = <0xe90000 0x1000>;
                        interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_SATA>;
+                       clocks = <&chip_clk CLKID_SATA>;
                        #address-cells = <1>;
                        #size-cells = <0>;
 
                sata_phy: phy@e900a0 {
                        compatible = "marvell,berlin2q-sata-phy";
                        reg = <0xe900a0 0x200>;
-                       clocks = <&chip CLKID_SATA>;
+                       clocks = <&chip_clk CLKID_SATA>;
                        #address-cells = <1>;
                        #size-cells = <0>;
                        #phy-cells = <1>;
                        compatible = "chipidea,usb2";
                        reg = <0xed0000 0x10000>;
                        interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_USB0>;
+                       clocks = <&chip_clk CLKID_USB0>;
                        phys = <&usb_phy0>;
                        phy-names = "usb-phy";
                        status = "disabled";
                        compatible = "chipidea,usb2";
                        reg = <0xee0000 0x10000>;
                        interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
-                       clocks = <&chip CLKID_USB1>;
+                       clocks = <&chip_clk CLKID_USB1>;
                        phys = <&usb_phy1>;
                        phy-names = "usb-phy";
                        status = "disabled";
                        };
 
                        sysctrl: pin-controller@d000 {
-                               compatible = "marvell,berlin2q-system-ctrl";
+                               compatible = "simple-mfd", "syscon";
                                reg = <0xd000 0x100>;
 
-                               uart0_pmux: uart0-pmux {
-                                       groups = "GSM12";
-                                       function = "uart0";
-                               };
+                               sys_pinctrl: pin-controller {
+                                       compatible = "marvell,berlin2q-system-pinctrl";
 
-                               uart1_pmux: uart1-pmux {
-                                       groups = "GSM14";
-                                       function = "uart1";
-                               };
+                                       uart0_pmux: uart0-pmux {
+                                               groups = "GSM12";
+                                               function = "uart0";
+                                       };
+
+                                       uart1_pmux: uart1-pmux {
+                                               groups = "GSM14";
+                                               function = "uart1";
+                                       };
+
+                                       twsi2_pmux: twsi2-pmux {
+                                               groups = "GSM13";
+                                               function = "twsi2";
+                                       };
 
-                               twsi2_pmux: twsi2-pmux {
-                                       groups = "GSM13";
-                                       function = "twsi2";
+                                       twsi3_pmux: twsi3-pmux {
+                                               groups = "GSM14";
+                                               function = "twsi3";
+                                       };
                                };
 
-                               twsi3_pmux: twsi3-pmux {
-                                       groups = "GSM14";
-                                       function = "twsi3";
+                               adc: adc {
+                                       compatible = "marvell,berlin2-adc";
+                                       interrupts = <12>, <14>;
+                                       interrupt-names = "adc", "tsen";
                                };
                        };
 
index 3e40a94..742d53a 100644 (file)
@@ -6,6 +6,7 @@ menuconfig ARCH_BERLIN
        select DW_APB_ICTL
        select DW_APB_TIMER_OF
        select GENERIC_IRQ_CHIP
+       select MFD_SYSCON
        select PINCTRL
 
 if ARCH_BERLIN
index 515fb13..73153fc 100644 (file)
@@ -502,12 +502,13 @@ static const struct berlin2_gate_data bg2_gates[] __initconst = {
 
 static void __init berlin2_clock_setup(struct device_node *np)
 {
+       struct device_node *parent_np = of_get_parent(np);
        const char *parent_names[9];
        struct clk *clk;
        u8 avpll_flags = 0;
        int n;
 
-       gbase = of_iomap(np, 0);
+       gbase = of_iomap(parent_np, 0);
        if (!gbase)
                return;
 
@@ -685,7 +686,5 @@ static void __init berlin2_clock_setup(struct device_node *np)
 bg2_fail:
        iounmap(gbase);
 }
-CLK_OF_DECLARE(berlin2_clock, "marvell,berlin2-chip-ctrl",
-              berlin2_clock_setup);
-CLK_OF_DECLARE(berlin2cd_clock, "marvell,berlin2cd-chip-ctrl",
+CLK_OF_DECLARE(berlin2_clk, "marvell,berlin2-clk",
               berlin2_clock_setup);
index 440ef81..221f40c 100644 (file)
@@ -290,18 +290,19 @@ static const struct berlin2_gate_data bg2q_gates[] __initconst = {
 
 static void __init berlin2q_clock_setup(struct device_node *np)
 {
+       struct device_node *parent_np = of_get_parent(np);
        const char *parent_names[9];
        struct clk *clk;
        int n;
 
-       gbase = of_iomap(np, 0);
+       gbase = of_iomap(parent_np, 0);
        if (!gbase) {
                pr_err("%s: Unable to map global base\n", np->full_name);
                return;
        }
 
        /* BG2Q CPU PLL is not part of global registers */
-       cpupll_base = of_iomap(np, 1);
+       cpupll_base = of_iomap(parent_np, 1);
        if (!cpupll_base) {
                pr_err("%s: Unable to map cpupll base\n", np->full_name);
                iounmap(gbase);
@@ -384,5 +385,5 @@ bg2q_fail:
        iounmap(cpupll_base);
        iounmap(gbase);
 }
-CLK_OF_DECLARE(berlin2q_clock, "marvell,berlin2q-chip-ctrl",
+CLK_OF_DECLARE(berlin2q_clk, "marvell,berlin2q-clk",
               berlin2q_clock_setup);
index b71a6ff..3769eae 100644 (file)
@@ -218,11 +218,11 @@ static const struct berlin_pinctrl_desc berlin2_sysmgr_pinctrl_data = {
 
 static const struct of_device_id berlin2_pinctrl_match[] = {
        {
-               .compatible = "marvell,berlin2-chip-ctrl",
+               .compatible = "marvell,berlin2-soc-pinctrl",
                .data = &berlin2_soc_pinctrl_data
        },
        {
-               .compatible = "marvell,berlin2-system-ctrl",
+               .compatible = "marvell,berlin2-system-pinctrl",
                .data = &berlin2_sysmgr_pinctrl_data
        },
        {}
@@ -233,28 +233,6 @@ static int berlin2_pinctrl_probe(struct platform_device *pdev)
 {
        const struct of_device_id *match =
                of_match_device(berlin2_pinctrl_match, &pdev->dev);
-       struct regmap_config *rmconfig;
-       struct regmap *regmap;
-       struct resource *res;
-       void __iomem *base;
-
-       rmconfig = devm_kzalloc(&pdev->dev, sizeof(*rmconfig), GFP_KERNEL);
-       if (!rmconfig)
-               return -ENOMEM;
-
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       base = devm_ioremap_resource(&pdev->dev, res);
-       if (IS_ERR(base))
-               return PTR_ERR(base);
-
-       rmconfig->reg_bits = 32,
-       rmconfig->val_bits = 32,
-       rmconfig->reg_stride = 4,
-       rmconfig->max_register = resource_size(res);
-
-       regmap = devm_regmap_init_mmio(&pdev->dev, base, rmconfig);
-       if (IS_ERR(regmap))
-               return PTR_ERR(regmap);
 
        return berlin_pinctrl_probe(pdev, match->data);
 }
index 19ac5a2..9e11f19 100644 (file)
@@ -161,11 +161,11 @@ static const struct berlin_pinctrl_desc berlin2cd_sysmgr_pinctrl_data = {
 
 static const struct of_device_id berlin2cd_pinctrl_match[] = {
        {
-               .compatible = "marvell,berlin2cd-chip-ctrl",
+               .compatible = "marvell,berlin2cd-soc-pinctrl",
                .data = &berlin2cd_soc_pinctrl_data
        },
        {
-               .compatible = "marvell,berlin2cd-system-ctrl",
+               .compatible = "marvell,berlin2cd-system-pinctrl",
                .data = &berlin2cd_sysmgr_pinctrl_data
        },
        {}
@@ -176,28 +176,6 @@ static int berlin2cd_pinctrl_probe(struct platform_device *pdev)
 {
        const struct of_device_id *match =
                of_match_device(berlin2cd_pinctrl_match, &pdev->dev);
-       struct regmap_config *rmconfig;
-       struct regmap *regmap;
-       struct resource *res;
-       void __iomem *base;
-
-       rmconfig = devm_kzalloc(&pdev->dev, sizeof(*rmconfig), GFP_KERNEL);
-       if (!rmconfig)
-               return -ENOMEM;
-
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       base = devm_ioremap_resource(&pdev->dev, res);
-       if (IS_ERR(base))
-               return PTR_ERR(base);
-
-       rmconfig->reg_bits = 32,
-       rmconfig->val_bits = 32,
-       rmconfig->reg_stride = 4,
-       rmconfig->max_register = resource_size(res);
-
-       regmap = devm_regmap_init_mmio(&pdev->dev, base, rmconfig);
-       if (IS_ERR(regmap))
-               return PTR_ERR(regmap);
 
        return berlin_pinctrl_probe(pdev, match->data);
 }
index bd9662e..ba7a8a8 100644 (file)
@@ -380,11 +380,11 @@ static const struct berlin_pinctrl_desc berlin2q_sysmgr_pinctrl_data = {
 
 static const struct of_device_id berlin2q_pinctrl_match[] = {
        {
-               .compatible = "marvell,berlin2q-chip-ctrl",
+               .compatible = "marvell,berlin2q-soc-pinctrl",
                .data = &berlin2q_soc_pinctrl_data,
        },
        {
-               .compatible = "marvell,berlin2q-system-ctrl",
+               .compatible = "marvell,berlin2q-system-pinctrl",
                .data = &berlin2q_sysmgr_pinctrl_data,
        },
        {}
@@ -395,28 +395,6 @@ static int berlin2q_pinctrl_probe(struct platform_device *pdev)
 {
        const struct of_device_id *match =
                of_match_device(berlin2q_pinctrl_match, &pdev->dev);
-       struct regmap_config *rmconfig;
-       struct regmap *regmap;
-       struct resource *res;
-       void __iomem *base;
-
-       rmconfig = devm_kzalloc(&pdev->dev, sizeof(*rmconfig), GFP_KERNEL);
-       if (!rmconfig)
-               return -ENOMEM;
-
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       base = devm_ioremap_resource(&pdev->dev, res);
-       if (IS_ERR(base))
-               return PTR_ERR(base);
-
-       rmconfig->reg_bits = 32,
-       rmconfig->val_bits = 32,
-       rmconfig->reg_stride = 4,
-       rmconfig->max_register = resource_size(res);
-
-       regmap = devm_regmap_init_mmio(&pdev->dev, base, rmconfig);
-       if (IS_ERR(regmap))
-               return PTR_ERR(regmap);
 
        return berlin_pinctrl_probe(pdev, match->data);
 }
index 7f0b0f9..65b0e21 100644 (file)
@@ -11,6 +11,7 @@
  */
 
 #include <linux/io.h>
+#include <linux/mfd/syscon.h>
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
@@ -295,13 +296,15 @@ int berlin_pinctrl_probe(struct platform_device *pdev,
                         const struct berlin_pinctrl_desc *desc)
 {
        struct device *dev = &pdev->dev;
+       struct device_node *parent_np = of_get_parent(dev->of_node);
        struct berlin_pinctrl *pctrl;
        struct regmap *regmap;
        int ret;
 
-       regmap = dev_get_regmap(&pdev->dev, NULL);
-       if (!regmap)
-               return -ENODEV;
+       regmap = syscon_node_to_regmap(parent_np);
+       of_node_put(parent_np);
+       if (IS_ERR(regmap))
+               return PTR_ERR(regmap);
 
        pctrl = devm_kzalloc(dev, sizeof(*pctrl), GFP_KERNEL);
        if (!pctrl)
index f8b48a1..3c922d3 100644 (file)
 
 #include <linux/delay.h>
 #include <linux/io.h>
+#include <linux/mfd/syscon.h>
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/platform_device.h>
+#include <linux/regmap.h>
 #include <linux/reset-controller.h>
 #include <linux/slab.h>
 #include <linux/types.h>
@@ -25,8 +27,7 @@
        container_of((p), struct berlin_reset_priv, rcdev)
 
 struct berlin_reset_priv {
-       void __iomem                    *base;
-       unsigned int                    size;
+       struct regmap                   *regmap;
        struct reset_controller_dev     rcdev;
 };
 
@@ -37,7 +38,7 @@ static int berlin_reset_reset(struct reset_controller_dev *rcdev,
        int offset = id >> 8;
        int mask = BIT(id & 0x1f);
 
-       writel(mask, priv->base + offset);
+       regmap_write(priv->regmap, offset, mask);
 
        /* let the reset be effective */
        udelay(10);
@@ -52,7 +53,6 @@ static struct reset_control_ops berlin_reset_ops = {
 static int berlin_reset_xlate(struct reset_controller_dev *rcdev,
                              const struct of_phandle_args *reset_spec)
 {
-       struct berlin_reset_priv *priv = to_berlin_reset_priv(rcdev);
        unsigned offset, bit;
 
        if (WARN_ON(reset_spec->args_count != rcdev->of_reset_n_cells))
@@ -61,71 +61,53 @@ static int berlin_reset_xlate(struct reset_controller_dev *rcdev,
        offset = reset_spec->args[0];
        bit = reset_spec->args[1];
 
-       if (offset >= priv->size)
-               return -EINVAL;
-
        if (bit >= BERLIN_MAX_RESETS)
                return -EINVAL;
 
        return (offset << 8) | bit;
 }
 
-static int __berlin_reset_init(struct device_node *np)
+static int berlin2_reset_probe(struct platform_device *pdev)
 {
+       struct device_node *parent_np = of_get_parent(pdev->dev.of_node);
        struct berlin_reset_priv *priv;
-       struct resource res;
-       resource_size_t size;
-       int ret;
 
-       priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+       priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
        if (!priv)
                return -ENOMEM;
 
-       ret = of_address_to_resource(np, 0, &res);
-       if (ret)
-               goto err;
-
-       size = resource_size(&res);
-       priv->base = ioremap(res.start, size);
-       if (!priv->base) {
-               ret = -ENOMEM;
-               goto err;
-       }
-       priv->size = size;
+       priv->regmap = syscon_node_to_regmap(parent_np);
+       of_node_put(parent_np);
+       if (IS_ERR(priv->regmap))
+               return PTR_ERR(priv->regmap);
 
        priv->rcdev.owner = THIS_MODULE;
        priv->rcdev.ops = &berlin_reset_ops;
-       priv->rcdev.of_node = np;
+       priv->rcdev.of_node = pdev->dev.of_node;
        priv->rcdev.of_reset_n_cells = 2;
        priv->rcdev.of_xlate = berlin_reset_xlate;
 
        reset_controller_register(&priv->rcdev);
 
        return 0;
-
-err:
-       kfree(priv);
-       return ret;
 }
 
-static const struct of_device_id berlin_reset_of_match[] __initconst = {
-       { .compatible = "marvell,berlin2-chip-ctrl" },
-       { .compatible = "marvell,berlin2cd-chip-ctrl" },
-       { .compatible = "marvell,berlin2q-chip-ctrl" },
+static const struct of_device_id berlin_reset_dt_match[] = {
+       { .compatible = "marvell,berlin2-reset" },
        { },
 };
+MODULE_DEVICE_TABLE(of, berlin_reset_dt_match);
+
+static struct platform_driver berlin_reset_driver = {
+       .probe  = berlin2_reset_probe,
+       .driver = {
+               .name = "berlin2-reset",
+               .of_match_table = berlin_reset_dt_match,
+       },
+};
+module_platform_driver(berlin_reset_driver);
 
-static int __init berlin_reset_init(void)
-{
-       struct device_node *np;
-       int ret;
-
-       for_each_matching_node(np, berlin_reset_of_match) {
-               ret = __berlin_reset_init(np);
-               if (ret)
-                       return ret;
-       }
-
-       return 0;
-}
-arch_initcall(berlin_reset_init);
+MODULE_AUTHOR("Antoine Tenart <antoine.tenart@free-electrons.com>");
+MODULE_AUTHOR("Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>");
+MODULE_DESCRIPTION("Marvell Berlin reset driver");
+MODULE_LICENSE("GPL");