diff options
| -rw-r--r-- | Documentation/devicetree/bindings/mtd/orion-nand.txt | 4 | ||||
| -rw-r--r-- | MAINTAINERS | 11 | ||||
| -rw-r--r-- | arch/arm/Kconfig | 2 | ||||
| -rw-r--r-- | arch/arm/boot/dts/kirkwood-dns320.dts | 2 | ||||
| -rw-r--r-- | arch/arm/boot/dts/kirkwood-dns325.dts | 2 | ||||
| -rw-r--r-- | arch/arm/boot/dts/kirkwood-dreamplug.dts | 2 | ||||
| -rw-r--r-- | arch/arm/boot/dts/kirkwood-ib62x0.dts | 2 | ||||
| -rw-r--r-- | arch/arm/boot/dts/kirkwood-iconnect.dts | 2 | ||||
| -rw-r--r-- | arch/arm/boot/dts/kirkwood.dtsi | 6 | ||||
| -rw-r--r-- | arch/arm/boot/dts/tegra20-trimslice.dts | 2 | ||||
| -rw-r--r-- | arch/arm/mach-dove/common.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-kirkwood/common.c | 70 | ||||
| -rw-r--r-- | arch/arm/mach-mxs/mach-mxs.c | 8 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/board-harmony-power.c | 33 | ||||
| -rw-r--r-- | drivers/crypto/mv_cesa.c | 4 | ||||
| -rw-r--r-- | drivers/mmc/host/mvsdio.c | 4 | ||||
| -rw-r--r-- | drivers/mtd/nand/orion_nand.c | 6 | ||||
| -rw-r--r-- | drivers/net/ethernet/marvell/mv643xx_eth.c | 6 | ||||
| -rw-r--r-- | drivers/rtc/rtc-mv.c | 2 | ||||
| -rw-r--r-- | drivers/usb/host/ehci-orion.c | 4 | ||||
| -rw-r--r-- | sound/soc/kirkwood/kirkwood-i2s.c | 8 |
21 files changed, 133 insertions, 51 deletions
diff --git a/Documentation/devicetree/bindings/mtd/orion-nand.txt b/Documentation/devicetree/bindings/mtd/orion-nand.txt index b2356b7d2fa4..2d6ab660e603 100644 --- a/Documentation/devicetree/bindings/mtd/orion-nand.txt +++ b/Documentation/devicetree/bindings/mtd/orion-nand.txt | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | NAND support for Marvell Orion SoC platforms | 1 | NAND support for Marvell Orion SoC platforms |
| 2 | 2 | ||
| 3 | Required properties: | 3 | Required properties: |
| 4 | - compatible : "mrvl,orion-nand". | 4 | - compatible : "marvell,orion-nand". |
| 5 | - reg : Base physical address of the NAND and length of memory mapped | 5 | - reg : Base physical address of the NAND and length of memory mapped |
| 6 | region | 6 | region |
| 7 | 7 | ||
| @@ -24,7 +24,7 @@ nand@f4000000 { | |||
| 24 | ale = <1>; | 24 | ale = <1>; |
| 25 | bank-width = <1>; | 25 | bank-width = <1>; |
| 26 | chip-delay = <25>; | 26 | chip-delay = <25>; |
| 27 | compatible = "mrvl,orion-nand"; | 27 | compatible = "marvell,orion-nand"; |
| 28 | reg = <0xf4000000 0x400>; | 28 | reg = <0xf4000000 0x400>; |
| 29 | 29 | ||
| 30 | partition@0 { | 30 | partition@0 { |
diff --git a/MAINTAINERS b/MAINTAINERS index 3bc49687b653..bd451649f13a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -1186,6 +1186,17 @@ S: Maintained | |||
| 1186 | F: arch/arm/mach-pxa/vpac270.c | 1186 | F: arch/arm/mach-pxa/vpac270.c |
| 1187 | F: arch/arm/mach-pxa/include/mach/vpac270.h | 1187 | F: arch/arm/mach-pxa/include/mach/vpac270.h |
| 1188 | 1188 | ||
| 1189 | ARM/VT8500 ARM ARCHITECTURE | ||
| 1190 | M: Tony Prisk <linux@prisktech.co.nz> | ||
| 1191 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||
| 1192 | S: Maintained | ||
| 1193 | F: arch/arm/mach-vt8500/ | ||
| 1194 | F: drivers/video/vt8500lcdfb.* | ||
| 1195 | F: drivers/video/wm8505fb* | ||
| 1196 | F: drivers/video/wmt_ge_rops.* | ||
| 1197 | F: drivers/tty/serial/vt8500_serial.c | ||
| 1198 | F: drivers/rtc/rtc-vt8500-c | ||
| 1199 | |||
| 1189 | ARM/ZIPIT Z2 SUPPORT | 1200 | ARM/ZIPIT Z2 SUPPORT |
| 1190 | M: Marek Vasut <marek.vasut@gmail.com> | 1201 | M: Marek Vasut <marek.vasut@gmail.com> |
| 1191 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 1202 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index b25c9d3c379a..9124ff75fe53 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
| @@ -279,7 +279,6 @@ config ARCH_INTEGRATOR | |||
| 279 | select ICST | 279 | select ICST |
| 280 | select GENERIC_CLOCKEVENTS | 280 | select GENERIC_CLOCKEVENTS |
| 281 | select PLAT_VERSATILE | 281 | select PLAT_VERSATILE |
| 282 | select PLAT_VERSATILE_CLOCK | ||
| 283 | select PLAT_VERSATILE_FPGA_IRQ | 282 | select PLAT_VERSATILE_FPGA_IRQ |
| 284 | select NEED_MACH_IO_H | 283 | select NEED_MACH_IO_H |
| 285 | select NEED_MACH_MEMORY_H | 284 | select NEED_MACH_MEMORY_H |
| @@ -336,7 +335,6 @@ config ARCH_VEXPRESS | |||
| 336 | select ICST | 335 | select ICST |
| 337 | select NO_IOPORT | 336 | select NO_IOPORT |
| 338 | select PLAT_VERSATILE | 337 | select PLAT_VERSATILE |
| 339 | select PLAT_VERSATILE_CLOCK | ||
| 340 | select PLAT_VERSATILE_CLCD | 338 | select PLAT_VERSATILE_CLCD |
| 341 | select REGULATOR_FIXED_VOLTAGE if REGULATOR | 339 | select REGULATOR_FIXED_VOLTAGE if REGULATOR |
| 342 | help | 340 | help |
diff --git a/arch/arm/boot/dts/kirkwood-dns320.dts b/arch/arm/boot/dts/kirkwood-dns320.dts index dc09a735b04a..9a33077130e8 100644 --- a/arch/arm/boot/dts/kirkwood-dns320.dts +++ b/arch/arm/boot/dts/kirkwood-dns320.dts | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | / { | 5 | / { |
| 6 | model = "D-Link DNS-320 NAS (Rev A1)"; | 6 | model = "D-Link DNS-320 NAS (Rev A1)"; |
| 7 | compatible = "dlink,dns-320-a1", "dlink,dns-320", "dlink,dns-kirkwood", "mrvl,kirkwood-88f6281", "mrvl,kirkwood"; | 7 | compatible = "dlink,dns-320-a1", "dlink,dns-320", "dlink,dns-kirkwood", "marvell,kirkwood-88f6281", "marvell,kirkwood"; |
| 8 | 8 | ||
| 9 | memory { | 9 | memory { |
| 10 | device_type = "memory"; | 10 | device_type = "memory"; |
diff --git a/arch/arm/boot/dts/kirkwood-dns325.dts b/arch/arm/boot/dts/kirkwood-dns325.dts index c2a5562525d2..16734c1b5dfe 100644 --- a/arch/arm/boot/dts/kirkwood-dns325.dts +++ b/arch/arm/boot/dts/kirkwood-dns325.dts | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | / { | 5 | / { |
| 6 | model = "D-Link DNS-325 NAS (Rev A1)"; | 6 | model = "D-Link DNS-325 NAS (Rev A1)"; |
| 7 | compatible = "dlink,dns-325-a1", "dlink,dns-325", "dlink,dns-kirkwood", "mrvl,kirkwood-88f6281", "mrvl,kirkwood"; | 7 | compatible = "dlink,dns-325-a1", "dlink,dns-325", "dlink,dns-kirkwood", "marvell,kirkwood-88f6281", "marvell,kirkwood"; |
| 8 | 8 | ||
| 9 | memory { | 9 | memory { |
| 10 | device_type = "memory"; | 10 | device_type = "memory"; |
diff --git a/arch/arm/boot/dts/kirkwood-dreamplug.dts b/arch/arm/boot/dts/kirkwood-dreamplug.dts index a5376b84227f..78b0f06a09a2 100644 --- a/arch/arm/boot/dts/kirkwood-dreamplug.dts +++ b/arch/arm/boot/dts/kirkwood-dreamplug.dts | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | / { | 5 | / { |
| 6 | model = "Globalscale Technologies Dreamplug"; | 6 | model = "Globalscale Technologies Dreamplug"; |
| 7 | compatible = "globalscale,dreamplug-003-ds2001", "globalscale,dreamplug", "mrvl,kirkwood-88f6281", "mrvl,kirkwood"; | 7 | compatible = "globalscale,dreamplug-003-ds2001", "globalscale,dreamplug", "marvell,kirkwood-88f6281", "marvell,kirkwood"; |
| 8 | 8 | ||
| 9 | memory { | 9 | memory { |
| 10 | device_type = "memory"; | 10 | device_type = "memory"; |
diff --git a/arch/arm/boot/dts/kirkwood-ib62x0.dts b/arch/arm/boot/dts/kirkwood-ib62x0.dts index ada0f0c23085..f59dcf6dc45f 100644 --- a/arch/arm/boot/dts/kirkwood-ib62x0.dts +++ b/arch/arm/boot/dts/kirkwood-ib62x0.dts | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | / { | 5 | / { |
| 6 | model = "RaidSonic ICY BOX IB-NAS62x0 (Rev B)"; | 6 | model = "RaidSonic ICY BOX IB-NAS62x0 (Rev B)"; |
| 7 | compatible = "raidsonic,ib-nas6210-b", "raidsonic,ib-nas6220-b", "raidsonic,ib-nas6210", "raidsonic,ib-nas6220", "raidsonic,ib-nas62x0", "mrvl,kirkwood-88f6281", "mrvl,kirkwood"; | 7 | compatible = "raidsonic,ib-nas6210-b", "raidsonic,ib-nas6220-b", "raidsonic,ib-nas6210", "raidsonic,ib-nas6220", "raidsonic,ib-nas62x0", "marvell,kirkwood-88f6281", "marvell,kirkwood"; |
| 8 | 8 | ||
| 9 | memory { | 9 | memory { |
| 10 | device_type = "memory"; | 10 | device_type = "memory"; |
diff --git a/arch/arm/boot/dts/kirkwood-iconnect.dts b/arch/arm/boot/dts/kirkwood-iconnect.dts index 1ba75d4adecc..026a1f82d813 100644 --- a/arch/arm/boot/dts/kirkwood-iconnect.dts +++ b/arch/arm/boot/dts/kirkwood-iconnect.dts | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | / { | 5 | / { |
| 6 | model = "Iomega Iconnect"; | 6 | model = "Iomega Iconnect"; |
| 7 | compatible = "iom,iconnect-1.1", "iom,iconnect", "mrvl,kirkwood-88f6281", "mrvl,kirkwood"; | 7 | compatible = "iom,iconnect-1.1", "iom,iconnect", "marvell,kirkwood-88f6281", "marvell,kirkwood"; |
| 8 | 8 | ||
| 9 | memory { | 9 | memory { |
| 10 | device_type = "memory"; | 10 | device_type = "memory"; |
diff --git a/arch/arm/boot/dts/kirkwood.dtsi b/arch/arm/boot/dts/kirkwood.dtsi index 926528b81baa..f95dbc190ab6 100644 --- a/arch/arm/boot/dts/kirkwood.dtsi +++ b/arch/arm/boot/dts/kirkwood.dtsi | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /include/ "skeleton.dtsi" | 1 | /include/ "skeleton.dtsi" |
| 2 | 2 | ||
| 3 | / { | 3 | / { |
| 4 | compatible = "mrvl,kirkwood"; | 4 | compatible = "marvell,kirkwood"; |
| 5 | 5 | ||
| 6 | ocp@f1000000 { | 6 | ocp@f1000000 { |
| 7 | compatible = "simple-bus"; | 7 | compatible = "simple-bus"; |
| @@ -28,7 +28,7 @@ | |||
| 28 | }; | 28 | }; |
| 29 | 29 | ||
| 30 | rtc@10300 { | 30 | rtc@10300 { |
| 31 | compatible = "mrvl,kirkwood-rtc", "mrvl,orion-rtc"; | 31 | compatible = "marvell,kirkwood-rtc", "marvell,orion-rtc"; |
| 32 | reg = <0x10300 0x20>; | 32 | reg = <0x10300 0x20>; |
| 33 | interrupts = <53>; | 33 | interrupts = <53>; |
| 34 | }; | 34 | }; |
| @@ -39,7 +39,7 @@ | |||
| 39 | cle = <0>; | 39 | cle = <0>; |
| 40 | ale = <1>; | 40 | ale = <1>; |
| 41 | bank-width = <1>; | 41 | bank-width = <1>; |
| 42 | compatible = "mrvl,orion-nand"; | 42 | compatible = "marvell,orion-nand"; |
| 43 | reg = <0x3000000 0x400>; | 43 | reg = <0x3000000 0x400>; |
| 44 | chip-delay = <25>; | 44 | chip-delay = <25>; |
| 45 | /* set partition map and/or chip-delay in board dts */ | 45 | /* set partition map and/or chip-delay in board dts */ |
diff --git a/arch/arm/boot/dts/tegra20-trimslice.dts b/arch/arm/boot/dts/tegra20-trimslice.dts index 9de5636023f6..27fb8a67ea42 100644 --- a/arch/arm/boot/dts/tegra20-trimslice.dts +++ b/arch/arm/boot/dts/tegra20-trimslice.dts | |||
| @@ -276,9 +276,11 @@ | |||
| 276 | 276 | ||
| 277 | usb@c5000000 { | 277 | usb@c5000000 { |
| 278 | status = "okay"; | 278 | status = "okay"; |
| 279 | nvidia,vbus-gpio = <&gpio 170 0>; /* gpio PV2 */ | ||
| 279 | }; | 280 | }; |
| 280 | 281 | ||
| 281 | usb@c5004000 { | 282 | usb@c5004000 { |
| 283 | status = "okay"; | ||
| 282 | nvidia,phy-reset-gpio = <&gpio 168 0>; /* gpio PV0 */ | 284 | nvidia,phy-reset-gpio = <&gpio 168 0>; /* gpio PV0 */ |
| 283 | }; | 285 | }; |
| 284 | 286 | ||
diff --git a/arch/arm/mach-dove/common.c b/arch/arm/mach-dove/common.c index 9493076fc594..4db5de54b6a7 100644 --- a/arch/arm/mach-dove/common.c +++ b/arch/arm/mach-dove/common.c | |||
| @@ -101,8 +101,8 @@ void __init dove_ehci1_init(void) | |||
| 101 | ****************************************************************************/ | 101 | ****************************************************************************/ |
| 102 | void __init dove_ge00_init(struct mv643xx_eth_platform_data *eth_data) | 102 | void __init dove_ge00_init(struct mv643xx_eth_platform_data *eth_data) |
| 103 | { | 103 | { |
| 104 | orion_ge00_init(eth_data, | 104 | orion_ge00_init(eth_data, DOVE_GE00_PHYS_BASE, |
| 105 | DOVE_GE00_PHYS_BASE, IRQ_DOVE_GE00_SUM, 0); | 105 | IRQ_DOVE_GE00_SUM, IRQ_DOVE_GE00_ERR); |
| 106 | } | 106 | } |
| 107 | 107 | ||
| 108 | /***************************************************************************** | 108 | /***************************************************************************** |
diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c index f261cd242643..c9201539ffbd 100644 --- a/arch/arm/mach-kirkwood/common.c +++ b/arch/arm/mach-kirkwood/common.c | |||
| @@ -67,6 +67,14 @@ void __init kirkwood_map_io(void) | |||
| 67 | * CLK tree | 67 | * CLK tree |
| 68 | ****************************************************************************/ | 68 | ****************************************************************************/ |
| 69 | 69 | ||
| 70 | static void enable_sata0(void) | ||
| 71 | { | ||
| 72 | /* Enable PLL and IVREF */ | ||
| 73 | writel(readl(SATA0_PHY_MODE_2) | 0xf, SATA0_PHY_MODE_2); | ||
| 74 | /* Enable PHY */ | ||
| 75 | writel(readl(SATA0_IF_CTRL) & ~0x200, SATA0_IF_CTRL); | ||
| 76 | } | ||
| 77 | |||
| 70 | static void disable_sata0(void) | 78 | static void disable_sata0(void) |
| 71 | { | 79 | { |
| 72 | /* Disable PLL and IVREF */ | 80 | /* Disable PLL and IVREF */ |
| @@ -75,6 +83,14 @@ static void disable_sata0(void) | |||
| 75 | writel(readl(SATA0_IF_CTRL) | 0x200, SATA0_IF_CTRL); | 83 | writel(readl(SATA0_IF_CTRL) | 0x200, SATA0_IF_CTRL); |
| 76 | } | 84 | } |
| 77 | 85 | ||
| 86 | static void enable_sata1(void) | ||
| 87 | { | ||
| 88 | /* Enable PLL and IVREF */ | ||
| 89 | writel(readl(SATA1_PHY_MODE_2) | 0xf, SATA1_PHY_MODE_2); | ||
| 90 | /* Enable PHY */ | ||
| 91 | writel(readl(SATA1_IF_CTRL) & ~0x200, SATA1_IF_CTRL); | ||
| 92 | } | ||
| 93 | |||
| 78 | static void disable_sata1(void) | 94 | static void disable_sata1(void) |
| 79 | { | 95 | { |
| 80 | /* Disable PLL and IVREF */ | 96 | /* Disable PLL and IVREF */ |
| @@ -107,23 +123,38 @@ static void disable_pcie1(void) | |||
| 107 | } | 123 | } |
| 108 | } | 124 | } |
| 109 | 125 | ||
| 110 | /* An extended version of the gated clk. This calls fn() before | 126 | /* An extended version of the gated clk. This calls fn_en()/fn_dis |
| 111 | * disabling the clock. We use this to turn off PHYs etc. */ | 127 | * before enabling/disabling the clock. We use this to turn on/off |
| 128 | * PHYs etc. */ | ||
| 112 | struct clk_gate_fn { | 129 | struct clk_gate_fn { |
| 113 | struct clk_gate gate; | 130 | struct clk_gate gate; |
| 114 | void (*fn)(void); | 131 | void (*fn_en)(void); |
| 132 | void (*fn_dis)(void); | ||
| 115 | }; | 133 | }; |
| 116 | 134 | ||
| 117 | #define to_clk_gate_fn(_gate) container_of(_gate, struct clk_gate_fn, gate) | 135 | #define to_clk_gate_fn(_gate) container_of(_gate, struct clk_gate_fn, gate) |
| 118 | #define to_clk_gate(_hw) container_of(_hw, struct clk_gate, hw) | 136 | #define to_clk_gate(_hw) container_of(_hw, struct clk_gate, hw) |
| 119 | 137 | ||
| 138 | static int clk_gate_fn_enable(struct clk_hw *hw) | ||
| 139 | { | ||
| 140 | struct clk_gate *gate = to_clk_gate(hw); | ||
| 141 | struct clk_gate_fn *gate_fn = to_clk_gate_fn(gate); | ||
| 142 | int ret; | ||
| 143 | |||
| 144 | ret = clk_gate_ops.enable(hw); | ||
| 145 | if (!ret && gate_fn->fn_en) | ||
| 146 | gate_fn->fn_en(); | ||
| 147 | |||
| 148 | return ret; | ||
| 149 | } | ||
| 150 | |||
| 120 | static void clk_gate_fn_disable(struct clk_hw *hw) | 151 | static void clk_gate_fn_disable(struct clk_hw *hw) |
| 121 | { | 152 | { |
| 122 | struct clk_gate *gate = to_clk_gate(hw); | 153 | struct clk_gate *gate = to_clk_gate(hw); |
| 123 | struct clk_gate_fn *gate_fn = to_clk_gate_fn(gate); | 154 | struct clk_gate_fn *gate_fn = to_clk_gate_fn(gate); |
| 124 | 155 | ||
| 125 | if (gate_fn->fn) | 156 | if (gate_fn->fn_dis) |
| 126 | gate_fn->fn(); | 157 | gate_fn->fn_dis(); |
| 127 | 158 | ||
| 128 | clk_gate_ops.disable(hw); | 159 | clk_gate_ops.disable(hw); |
| 129 | } | 160 | } |
| @@ -135,7 +166,7 @@ static struct clk __init *clk_register_gate_fn(struct device *dev, | |||
| 135 | const char *parent_name, unsigned long flags, | 166 | const char *parent_name, unsigned long flags, |
| 136 | void __iomem *reg, u8 bit_idx, | 167 | void __iomem *reg, u8 bit_idx, |
| 137 | u8 clk_gate_flags, spinlock_t *lock, | 168 | u8 clk_gate_flags, spinlock_t *lock, |
| 138 | void (*fn)(void)) | 169 | void (*fn_en)(void), void (*fn_dis)(void)) |
| 139 | { | 170 | { |
| 140 | struct clk_gate_fn *gate_fn; | 171 | struct clk_gate_fn *gate_fn; |
| 141 | struct clk *clk; | 172 | struct clk *clk; |
| @@ -159,11 +190,14 @@ static struct clk __init *clk_register_gate_fn(struct device *dev, | |||
| 159 | gate_fn->gate.flags = clk_gate_flags; | 190 | gate_fn->gate.flags = clk_gate_flags; |
| 160 | gate_fn->gate.lock = lock; | 191 | gate_fn->gate.lock = lock; |
| 161 | gate_fn->gate.hw.init = &init; | 192 | gate_fn->gate.hw.init = &init; |
| 162 | gate_fn->fn = fn; | 193 | gate_fn->fn_en = fn_en; |
| 194 | gate_fn->fn_dis = fn_dis; | ||
| 163 | 195 | ||
| 164 | /* ops is the gate ops, but with our disable function */ | 196 | /* ops is the gate ops, but with our enable/disable functions */ |
| 165 | if (clk_gate_fn_ops.disable != clk_gate_fn_disable) { | 197 | if (clk_gate_fn_ops.enable != clk_gate_fn_enable || |
| 198 | clk_gate_fn_ops.disable != clk_gate_fn_disable) { | ||
| 166 | clk_gate_fn_ops = clk_gate_ops; | 199 | clk_gate_fn_ops = clk_gate_ops; |
| 200 | clk_gate_fn_ops.enable = clk_gate_fn_enable; | ||
| 167 | clk_gate_fn_ops.disable = clk_gate_fn_disable; | 201 | clk_gate_fn_ops.disable = clk_gate_fn_disable; |
| 168 | } | 202 | } |
| 169 | 203 | ||
| @@ -187,11 +221,12 @@ static struct clk __init *kirkwood_register_gate(const char *name, u8 bit_idx) | |||
| 187 | 221 | ||
| 188 | static struct clk __init *kirkwood_register_gate_fn(const char *name, | 222 | static struct clk __init *kirkwood_register_gate_fn(const char *name, |
| 189 | u8 bit_idx, | 223 | u8 bit_idx, |
| 190 | void (*fn)(void)) | 224 | void (*fn_en)(void), |
| 225 | void (*fn_dis)(void)) | ||
| 191 | { | 226 | { |
| 192 | return clk_register_gate_fn(NULL, name, "tclk", 0, | 227 | return clk_register_gate_fn(NULL, name, "tclk", 0, |
| 193 | (void __iomem *)CLOCK_GATING_CTRL, | 228 | (void __iomem *)CLOCK_GATING_CTRL, |
| 194 | bit_idx, 0, &gating_lock, fn); | 229 | bit_idx, 0, &gating_lock, fn_en, fn_dis); |
| 195 | } | 230 | } |
| 196 | 231 | ||
| 197 | static struct clk *ge0, *ge1; | 232 | static struct clk *ge0, *ge1; |
| @@ -208,18 +243,18 @@ void __init kirkwood_clk_init(void) | |||
| 208 | ge0 = kirkwood_register_gate("ge0", CGC_BIT_GE0); | 243 | ge0 = kirkwood_register_gate("ge0", CGC_BIT_GE0); |
| 209 | ge1 = kirkwood_register_gate("ge1", CGC_BIT_GE1); | 244 | ge1 = kirkwood_register_gate("ge1", CGC_BIT_GE1); |
| 210 | sata0 = kirkwood_register_gate_fn("sata0", CGC_BIT_SATA0, | 245 | sata0 = kirkwood_register_gate_fn("sata0", CGC_BIT_SATA0, |
| 211 | disable_sata0); | 246 | enable_sata0, disable_sata0); |
| 212 | sata1 = kirkwood_register_gate_fn("sata1", CGC_BIT_SATA1, | 247 | sata1 = kirkwood_register_gate_fn("sata1", CGC_BIT_SATA1, |
| 213 | disable_sata1); | 248 | enable_sata1, disable_sata1); |
| 214 | usb0 = kirkwood_register_gate("usb0", CGC_BIT_USB0); | 249 | usb0 = kirkwood_register_gate("usb0", CGC_BIT_USB0); |
| 215 | sdio = kirkwood_register_gate("sdio", CGC_BIT_SDIO); | 250 | sdio = kirkwood_register_gate("sdio", CGC_BIT_SDIO); |
| 216 | crypto = kirkwood_register_gate("crypto", CGC_BIT_CRYPTO); | 251 | crypto = kirkwood_register_gate("crypto", CGC_BIT_CRYPTO); |
| 217 | xor0 = kirkwood_register_gate("xor0", CGC_BIT_XOR0); | 252 | xor0 = kirkwood_register_gate("xor0", CGC_BIT_XOR0); |
| 218 | xor1 = kirkwood_register_gate("xor1", CGC_BIT_XOR1); | 253 | xor1 = kirkwood_register_gate("xor1", CGC_BIT_XOR1); |
| 219 | pex0 = kirkwood_register_gate_fn("pex0", CGC_BIT_PEX0, | 254 | pex0 = kirkwood_register_gate_fn("pex0", CGC_BIT_PEX0, |
| 220 | disable_pcie0); | 255 | NULL, disable_pcie0); |
| 221 | pex1 = kirkwood_register_gate_fn("pex1", CGC_BIT_PEX1, | 256 | pex1 = kirkwood_register_gate_fn("pex1", CGC_BIT_PEX1, |
| 222 | disable_pcie1); | 257 | NULL, disable_pcie1); |
| 223 | audio = kirkwood_register_gate("audio", CGC_BIT_AUDIO); | 258 | audio = kirkwood_register_gate("audio", CGC_BIT_AUDIO); |
| 224 | kirkwood_register_gate("tdm", CGC_BIT_TDM); | 259 | kirkwood_register_gate("tdm", CGC_BIT_TDM); |
| 225 | kirkwood_register_gate("tsu", CGC_BIT_TSU); | 260 | kirkwood_register_gate("tsu", CGC_BIT_TSU); |
| @@ -241,6 +276,11 @@ void __init kirkwood_clk_init(void) | |||
| 241 | orion_clkdev_add("0", "pcie", pex0); | 276 | orion_clkdev_add("0", "pcie", pex0); |
| 242 | orion_clkdev_add("1", "pcie", pex1); | 277 | orion_clkdev_add("1", "pcie", pex1); |
| 243 | orion_clkdev_add(NULL, "kirkwood-i2s", audio); | 278 | orion_clkdev_add(NULL, "kirkwood-i2s", audio); |
| 279 | |||
| 280 | /* Marvell says runit is used by SPI, UART, NAND, TWSI, ..., | ||
| 281 | * so should never be gated. | ||
| 282 | */ | ||
| 283 | clk_prepare_enable(runit); | ||
| 244 | } | 284 | } |
| 245 | 285 | ||
| 246 | /***************************************************************************** | 286 | /***************************************************************************** |
diff --git a/arch/arm/mach-mxs/mach-mxs.c b/arch/arm/mach-mxs/mach-mxs.c index 648bdd05d38b..8dabfe81d07c 100644 --- a/arch/arm/mach-mxs/mach-mxs.c +++ b/arch/arm/mach-mxs/mach-mxs.c | |||
| @@ -162,7 +162,7 @@ enum mac_oui { | |||
| 162 | static void __init update_fec_mac_prop(enum mac_oui oui) | 162 | static void __init update_fec_mac_prop(enum mac_oui oui) |
| 163 | { | 163 | { |
| 164 | struct device_node *np, *from = NULL; | 164 | struct device_node *np, *from = NULL; |
| 165 | struct property *oldmac, *newmac; | 165 | struct property *newmac; |
| 166 | const u32 *ocotp = mxs_get_ocotp(); | 166 | const u32 *ocotp = mxs_get_ocotp(); |
| 167 | u8 *macaddr; | 167 | u8 *macaddr; |
| 168 | u32 val; | 168 | u32 val; |
| @@ -208,11 +208,7 @@ static void __init update_fec_mac_prop(enum mac_oui oui) | |||
| 208 | macaddr[4] = (val >> 8) & 0xff; | 208 | macaddr[4] = (val >> 8) & 0xff; |
| 209 | macaddr[5] = (val >> 0) & 0xff; | 209 | macaddr[5] = (val >> 0) & 0xff; |
| 210 | 210 | ||
| 211 | oldmac = of_find_property(np, newmac->name, NULL); | 211 | prom_update_property(np, newmac); |
| 212 | if (oldmac) | ||
| 213 | prom_update_property(np, newmac, oldmac); | ||
| 214 | else | ||
| 215 | prom_add_property(np, newmac); | ||
| 216 | } | 212 | } |
| 217 | } | 213 | } |
| 218 | 214 | ||
diff --git a/arch/arm/mach-tegra/board-harmony-power.c b/arch/arm/mach-tegra/board-harmony-power.c index 44dcb2e869b5..8fd387bf31f0 100644 --- a/arch/arm/mach-tegra/board-harmony-power.c +++ b/arch/arm/mach-tegra/board-harmony-power.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <linux/platform_device.h> | 19 | #include <linux/platform_device.h> |
| 20 | #include <linux/gpio.h> | 20 | #include <linux/gpio.h> |
| 21 | #include <linux/regulator/machine.h> | 21 | #include <linux/regulator/machine.h> |
| 22 | #include <linux/regulator/fixed.h> | ||
| 22 | #include <linux/mfd/tps6586x.h> | 23 | #include <linux/mfd/tps6586x.h> |
| 23 | #include <linux/of.h> | 24 | #include <linux/of.h> |
| 24 | #include <linux/of_i2c.h> | 25 | #include <linux/of_i2c.h> |
| @@ -34,7 +35,9 @@ static struct regulator_consumer_supply tps658621_ldo0_supply[] = { | |||
| 34 | }; | 35 | }; |
| 35 | 36 | ||
| 36 | static struct regulator_init_data ldo0_data = { | 37 | static struct regulator_init_data ldo0_data = { |
| 38 | .supply_regulator = "vdd_sm2", | ||
| 37 | .constraints = { | 39 | .constraints = { |
| 40 | .name = "vdd_ldo0", | ||
| 38 | .min_uV = 3300 * 1000, | 41 | .min_uV = 3300 * 1000, |
| 39 | .max_uV = 3300 * 1000, | 42 | .max_uV = 3300 * 1000, |
| 40 | .valid_modes_mask = (REGULATOR_MODE_NORMAL | | 43 | .valid_modes_mask = (REGULATOR_MODE_NORMAL | |
| @@ -48,9 +51,11 @@ static struct regulator_init_data ldo0_data = { | |||
| 48 | .consumer_supplies = tps658621_ldo0_supply, | 51 | .consumer_supplies = tps658621_ldo0_supply, |
| 49 | }; | 52 | }; |
| 50 | 53 | ||
| 51 | #define HARMONY_REGULATOR_INIT(_id, _minmv, _maxmv) \ | 54 | #define HARMONY_REGULATOR_INIT(_id, _name, _supply, _minmv, _maxmv) \ |
| 52 | static struct regulator_init_data _id##_data = { \ | 55 | static struct regulator_init_data _id##_data = { \ |
| 56 | .supply_regulator = _supply, \ | ||
| 53 | .constraints = { \ | 57 | .constraints = { \ |
| 58 | .name = _name, \ | ||
| 54 | .min_uV = (_minmv)*1000, \ | 59 | .min_uV = (_minmv)*1000, \ |
| 55 | .max_uV = (_maxmv)*1000, \ | 60 | .max_uV = (_maxmv)*1000, \ |
| 56 | .valid_modes_mask = (REGULATOR_MODE_NORMAL | \ | 61 | .valid_modes_mask = (REGULATOR_MODE_NORMAL | \ |
| @@ -61,18 +66,18 @@ static struct regulator_init_data ldo0_data = { | |||
| 61 | }, \ | 66 | }, \ |
| 62 | } | 67 | } |
| 63 | 68 | ||
| 64 | HARMONY_REGULATOR_INIT(sm0, 725, 1500); | 69 | HARMONY_REGULATOR_INIT(sm0, "vdd_sm0", "vdd_sys", 725, 1500); |
| 65 | HARMONY_REGULATOR_INIT(sm1, 725, 1500); | 70 | HARMONY_REGULATOR_INIT(sm1, "vdd_sm1", "vdd_sys", 725, 1500); |
| 66 | HARMONY_REGULATOR_INIT(sm2, 3000, 4550); | 71 | HARMONY_REGULATOR_INIT(sm2, "vdd_sm2", "vdd_sys", 3000, 4550); |
| 67 | HARMONY_REGULATOR_INIT(ldo1, 725, 1500); | 72 | HARMONY_REGULATOR_INIT(ldo1, "vdd_ldo1", "vdd_sm2", 725, 1500); |
| 68 | HARMONY_REGULATOR_INIT(ldo2, 725, 1500); | 73 | HARMONY_REGULATOR_INIT(ldo2, "vdd_ldo2", "vdd_sm2", 725, 1500); |
| 69 | HARMONY_REGULATOR_INIT(ldo3, 1250, 3300); | 74 | HARMONY_REGULATOR_INIT(ldo3, "vdd_ldo3", "vdd_sm2", 1250, 3300); |
| 70 | HARMONY_REGULATOR_INIT(ldo4, 1700, 2475); | 75 | HARMONY_REGULATOR_INIT(ldo4, "vdd_ldo4", "vdd_sm2", 1700, 2475); |
| 71 | HARMONY_REGULATOR_INIT(ldo5, 1250, 3300); | 76 | HARMONY_REGULATOR_INIT(ldo5, "vdd_ldo5", NULL, 1250, 3300); |
| 72 | HARMONY_REGULATOR_INIT(ldo6, 1250, 3300); | 77 | HARMONY_REGULATOR_INIT(ldo6, "vdd_ldo6", "vdd_sm2", 1250, 3300); |
| 73 | HARMONY_REGULATOR_INIT(ldo7, 1250, 3300); | 78 | HARMONY_REGULATOR_INIT(ldo7, "vdd_ldo7", "vdd_sm2", 1250, 3300); |
| 74 | HARMONY_REGULATOR_INIT(ldo8, 1250, 3300); | 79 | HARMONY_REGULATOR_INIT(ldo8, "vdd_ldo8", "vdd_sm2", 1250, 3300); |
| 75 | HARMONY_REGULATOR_INIT(ldo9, 1250, 3300); | 80 | HARMONY_REGULATOR_INIT(ldo9, "vdd_ldo9", "vdd_sm2", 1250, 3300); |
| 76 | 81 | ||
| 77 | #define TPS_REG(_id, _data) \ | 82 | #define TPS_REG(_id, _data) \ |
| 78 | { \ | 83 | { \ |
| @@ -115,6 +120,8 @@ static struct i2c_board_info __initdata harmony_regulators[] = { | |||
| 115 | int __init harmony_regulator_init(void) | 120 | int __init harmony_regulator_init(void) |
| 116 | { | 121 | { |
| 117 | if (machine_is_harmony()) { | 122 | if (machine_is_harmony()) { |
| 123 | regulator_register_always_on(0, "vdd_sys", | ||
| 124 | NULL, 0, 5000000); | ||
| 118 | i2c_register_board_info(3, harmony_regulators, 1); | 125 | i2c_register_board_info(3, harmony_regulators, 1); |
| 119 | } else { /* Harmony, booted using device tree */ | 126 | } else { /* Harmony, booted using device tree */ |
| 120 | struct device_node *np; | 127 | struct device_node *np; |
diff --git a/drivers/crypto/mv_cesa.c b/drivers/crypto/mv_cesa.c index 0d4071754352..21c1a87032b7 100644 --- a/drivers/crypto/mv_cesa.c +++ b/drivers/crypto/mv_cesa.c | |||
| @@ -1127,6 +1127,10 @@ err_unreg_ecb: | |||
| 1127 | crypto_unregister_alg(&mv_aes_alg_ecb); | 1127 | crypto_unregister_alg(&mv_aes_alg_ecb); |
| 1128 | err_irq: | 1128 | err_irq: |
| 1129 | free_irq(irq, cp); | 1129 | free_irq(irq, cp); |
| 1130 | if (!IS_ERR(cp->clk)) { | ||
| 1131 | clk_disable_unprepare(cp->clk); | ||
| 1132 | clk_put(cp->clk); | ||
| 1133 | } | ||
| 1130 | err_thread: | 1134 | err_thread: |
| 1131 | kthread_stop(cp->queue_th); | 1135 | kthread_stop(cp->queue_th); |
| 1132 | err_unmap_sram: | 1136 | err_unmap_sram: |
diff --git a/drivers/mmc/host/mvsdio.c b/drivers/mmc/host/mvsdio.c index 3b9136c1a475..a61cb5fca22d 100644 --- a/drivers/mmc/host/mvsdio.c +++ b/drivers/mmc/host/mvsdio.c | |||
| @@ -839,6 +839,10 @@ out: | |||
| 839 | if (r) | 839 | if (r) |
| 840 | release_resource(r); | 840 | release_resource(r); |
| 841 | if (mmc) | 841 | if (mmc) |
| 842 | if (!IS_ERR_OR_NULL(host->clk)) { | ||
| 843 | clk_disable_unprepare(host->clk); | ||
| 844 | clk_put(host->clk); | ||
| 845 | } | ||
| 842 | mmc_free_host(mmc); | 846 | mmc_free_host(mmc); |
| 843 | 847 | ||
| 844 | return ret; | 848 | return ret; |
diff --git a/drivers/mtd/nand/orion_nand.c b/drivers/mtd/nand/orion_nand.c index 513dc88a05ca..fc5a868c436e 100644 --- a/drivers/mtd/nand/orion_nand.c +++ b/drivers/mtd/nand/orion_nand.c | |||
| @@ -183,6 +183,10 @@ static int __init orion_nand_probe(struct platform_device *pdev) | |||
| 183 | return 0; | 183 | return 0; |
| 184 | 184 | ||
| 185 | no_dev: | 185 | no_dev: |
| 186 | if (!IS_ERR(clk)) { | ||
| 187 | clk_disable_unprepare(clk); | ||
| 188 | clk_put(clk); | ||
| 189 | } | ||
| 186 | platform_set_drvdata(pdev, NULL); | 190 | platform_set_drvdata(pdev, NULL); |
| 187 | iounmap(io_base); | 191 | iounmap(io_base); |
| 188 | no_res: | 192 | no_res: |
| @@ -214,7 +218,7 @@ static int __devexit orion_nand_remove(struct platform_device *pdev) | |||
| 214 | 218 | ||
| 215 | #ifdef CONFIG_OF | 219 | #ifdef CONFIG_OF |
| 216 | static struct of_device_id orion_nand_of_match_table[] = { | 220 | static struct of_device_id orion_nand_of_match_table[] = { |
| 217 | { .compatible = "mrvl,orion-nand", }, | 221 | { .compatible = "marvell,orion-nand", }, |
| 218 | {}, | 222 | {}, |
| 219 | }; | 223 | }; |
| 220 | #endif | 224 | #endif |
diff --git a/drivers/net/ethernet/marvell/mv643xx_eth.c b/drivers/net/ethernet/marvell/mv643xx_eth.c index 770ee557924c..087b9e0669f1 100644 --- a/drivers/net/ethernet/marvell/mv643xx_eth.c +++ b/drivers/net/ethernet/marvell/mv643xx_eth.c | |||
| @@ -2983,6 +2983,12 @@ static int mv643xx_eth_probe(struct platform_device *pdev) | |||
| 2983 | return 0; | 2983 | return 0; |
| 2984 | 2984 | ||
| 2985 | out: | 2985 | out: |
| 2986 | #if defined(CONFIG_HAVE_CLK) | ||
| 2987 | if (!IS_ERR(mp->clk)) { | ||
| 2988 | clk_disable_unprepare(mp->clk); | ||
| 2989 | clk_put(mp->clk); | ||
| 2990 | } | ||
| 2991 | #endif | ||
| 2986 | free_netdev(dev); | 2992 | free_netdev(dev); |
| 2987 | 2993 | ||
| 2988 | return err; | 2994 | return err; |
diff --git a/drivers/rtc/rtc-mv.c b/drivers/rtc/rtc-mv.c index b2185f4255aa..ebc1649d45d6 100644 --- a/drivers/rtc/rtc-mv.c +++ b/drivers/rtc/rtc-mv.c | |||
| @@ -297,7 +297,7 @@ static int __exit mv_rtc_remove(struct platform_device *pdev) | |||
| 297 | 297 | ||
| 298 | #ifdef CONFIG_OF | 298 | #ifdef CONFIG_OF |
| 299 | static struct of_device_id rtc_mv_of_match_table[] = { | 299 | static struct of_device_id rtc_mv_of_match_table[] = { |
| 300 | { .compatible = "mrvl,orion-rtc", }, | 300 | { .compatible = "marvell,orion-rtc", }, |
| 301 | {} | 301 | {} |
| 302 | }; | 302 | }; |
| 303 | #endif | 303 | #endif |
diff --git a/drivers/usb/host/ehci-orion.c b/drivers/usb/host/ehci-orion.c index 9408da83eaf1..8892d3642cef 100644 --- a/drivers/usb/host/ehci-orion.c +++ b/drivers/usb/host/ehci-orion.c | |||
| @@ -283,6 +283,10 @@ static int __devinit ehci_orion_drv_probe(struct platform_device *pdev) | |||
| 283 | err4: | 283 | err4: |
| 284 | usb_put_hcd(hcd); | 284 | usb_put_hcd(hcd); |
| 285 | err3: | 285 | err3: |
| 286 | if (!IS_ERR(clk)) { | ||
| 287 | clk_disable_unprepare(clk); | ||
| 288 | clk_put(clk); | ||
| 289 | } | ||
| 286 | iounmap(regs); | 290 | iounmap(regs); |
| 287 | err2: | 291 | err2: |
| 288 | release_mem_region(res->start, resource_size(res)); | 292 | release_mem_region(res->start, resource_size(res)); |
diff --git a/sound/soc/kirkwood/kirkwood-i2s.c b/sound/soc/kirkwood/kirkwood-i2s.c index fa4556750451..7646dd7f30cb 100644 --- a/sound/soc/kirkwood/kirkwood-i2s.c +++ b/sound/soc/kirkwood/kirkwood-i2s.c | |||
| @@ -458,7 +458,13 @@ static __devinit int kirkwood_i2s_dev_probe(struct platform_device *pdev) | |||
| 458 | } | 458 | } |
| 459 | clk_prepare_enable(priv->clk); | 459 | clk_prepare_enable(priv->clk); |
| 460 | 460 | ||
| 461 | return snd_soc_register_dai(&pdev->dev, &kirkwood_i2s_dai); | 461 | err = snd_soc_register_dai(&pdev->dev, &kirkwood_i2s_dai); |
| 462 | if (!err) | ||
| 463 | return 0; | ||
| 464 | dev_err(&pdev->dev, "snd_soc_register_dai failed\n"); | ||
| 465 | |||
| 466 | clk_disable_unprepare(priv->clk); | ||
| 467 | clk_put(priv->clk); | ||
| 462 | 468 | ||
| 463 | err_ioremap: | 469 | err_ioremap: |
| 464 | iounmap(priv->io); | 470 | iounmap(priv->io); |
