aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/bus/Kconfig9
-rw-r--r--drivers/bus/Makefile1
-rw-r--r--drivers/bus/imx-weim.c138
-rw-r--r--drivers/clk/clk-nomadik.c576
-rw-r--r--drivers/clk/samsung/clk-exynos4.c9
-rw-r--r--drivers/clocksource/nomadik-mtu.c60
-rw-r--r--drivers/crypto/ux500/cryp/cryp_core.c6
-rw-r--r--drivers/crypto/ux500/hash/hash_core.c6
-rw-r--r--drivers/irqchip/irq-renesas-intc-irqpin.c9
-rw-r--r--drivers/pinctrl/pinctrl-nomadik.c6
-rw-r--r--drivers/regulator/ab8500.c8
11 files changed, 777 insertions, 51 deletions
diff --git a/drivers/bus/Kconfig b/drivers/bus/Kconfig
index 5286e2d333b0..1f70e84b442c 100644
--- a/drivers/bus/Kconfig
+++ b/drivers/bus/Kconfig
@@ -4,6 +4,15 @@
4 4
5menu "Bus devices" 5menu "Bus devices"
6 6
7config IMX_WEIM
8 bool "Freescale EIM DRIVER"
9 depends on ARCH_MXC
10 help
11 Driver for i.MX6 WEIM controller.
12 The WEIM(Wireless External Interface Module) works like a bus.
13 You can attach many different devices on it, such as NOR, onenand.
14 But now, we only support the Parallel NOR.
15
7config MVEBU_MBUS 16config MVEBU_MBUS
8 bool 17 bool
9 depends on PLAT_ORION 18 depends on PLAT_ORION
diff --git a/drivers/bus/Makefile b/drivers/bus/Makefile
index 670cea443802..8947bdd0de8b 100644
--- a/drivers/bus/Makefile
+++ b/drivers/bus/Makefile
@@ -2,6 +2,7 @@
2# Makefile for the bus drivers. 2# Makefile for the bus drivers.
3# 3#
4 4
5obj-$(CONFIG_IMX_WEIM) += imx-weim.o
5obj-$(CONFIG_MVEBU_MBUS) += mvebu-mbus.o 6obj-$(CONFIG_MVEBU_MBUS) += mvebu-mbus.o
6obj-$(CONFIG_OMAP_OCP2SCP) += omap-ocp2scp.o 7obj-$(CONFIG_OMAP_OCP2SCP) += omap-ocp2scp.o
7 8
diff --git a/drivers/bus/imx-weim.c b/drivers/bus/imx-weim.c
new file mode 100644
index 000000000000..349f14e886b7
--- /dev/null
+++ b/drivers/bus/imx-weim.c
@@ -0,0 +1,138 @@
1/*
2 * EIM driver for Freescale's i.MX chips
3 *
4 * Copyright (C) 2013 Freescale Semiconductor, Inc.
5 *
6 * This file is licensed under the terms of the GNU General Public
7 * License version 2. This program is licensed "as is" without any
8 * warranty of any kind, whether express or implied.
9 */
10#include <linux/module.h>
11#include <linux/clk.h>
12#include <linux/io.h>
13#include <linux/of_device.h>
14
15struct imx_weim {
16 void __iomem *base;
17 struct clk *clk;
18};
19
20static const struct of_device_id weim_id_table[] = {
21 { .compatible = "fsl,imx6q-weim", },
22 {}
23};
24MODULE_DEVICE_TABLE(of, weim_id_table);
25
26#define CS_TIMING_LEN 6
27#define CS_REG_RANGE 0x18
28
29/* Parse and set the timing for this device. */
30static int
31weim_timing_setup(struct platform_device *pdev, struct device_node *np)
32{
33 struct imx_weim *weim = platform_get_drvdata(pdev);
34 u32 value[CS_TIMING_LEN];
35 u32 cs_idx;
36 int ret;
37 int i;
38
39 /* get the CS index from this child node's "reg" property. */
40 ret = of_property_read_u32(np, "reg", &cs_idx);
41 if (ret)
42 return ret;
43
44 /* The weim has four chip selects. */
45 if (cs_idx > 3)
46 return -EINVAL;
47
48 ret = of_property_read_u32_array(np, "fsl,weim-cs-timing",
49 value, CS_TIMING_LEN);
50 if (ret)
51 return ret;
52
53 /* set the timing for WEIM */
54 for (i = 0; i < CS_TIMING_LEN; i++)
55 writel(value[i], weim->base + cs_idx * CS_REG_RANGE + i * 4);
56 return 0;
57}
58
59static int weim_parse_dt(struct platform_device *pdev)
60{
61 struct device_node *child;
62 int ret;
63
64 for_each_child_of_node(pdev->dev.of_node, child) {
65 if (!child->name)
66 continue;
67
68 ret = weim_timing_setup(pdev, child);
69 if (ret) {
70 dev_err(&pdev->dev, "%s set timing failed.\n",
71 child->full_name);
72 return ret;
73 }
74 }
75
76 ret = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev);
77 if (ret)
78 dev_err(&pdev->dev, "%s fail to create devices.\n",
79 pdev->dev.of_node->full_name);
80 return ret;
81}
82
83static int weim_probe(struct platform_device *pdev)
84{
85 struct imx_weim *weim;
86 struct resource *res;
87 int ret = -EINVAL;
88
89 weim = devm_kzalloc(&pdev->dev, sizeof(*weim), GFP_KERNEL);
90 if (!weim) {
91 ret = -ENOMEM;
92 goto weim_err;
93 }
94 platform_set_drvdata(pdev, weim);
95
96 /* get the resource */
97 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
98 weim->base = devm_ioremap_resource(&pdev->dev, res);
99 if (IS_ERR(weim->base)) {
100 ret = PTR_ERR(weim->base);
101 goto weim_err;
102 }
103
104 /* get the clock */
105 weim->clk = devm_clk_get(&pdev->dev, NULL);
106 if (IS_ERR(weim->clk))
107 goto weim_err;
108
109 ret = clk_prepare_enable(weim->clk);
110 if (ret)
111 goto weim_err;
112
113 /* parse the device node */
114 ret = weim_parse_dt(pdev);
115 if (ret) {
116 clk_disable_unprepare(weim->clk);
117 goto weim_err;
118 }
119
120 dev_info(&pdev->dev, "WEIM driver registered.\n");
121 return 0;
122
123weim_err:
124 return ret;
125}
126
127static struct platform_driver weim_driver = {
128 .driver = {
129 .name = "imx-weim",
130 .of_match_table = weim_id_table,
131 },
132 .probe = weim_probe,
133};
134
135module_platform_driver(weim_driver);
136MODULE_AUTHOR("Freescale Semiconductor Inc.");
137MODULE_DESCRIPTION("i.MX EIM Controller Driver");
138MODULE_LICENSE("GPL");
diff --git a/drivers/clk/clk-nomadik.c b/drivers/clk/clk-nomadik.c
index 6b4c70f7d23d..6d819a37f647 100644
--- a/drivers/clk/clk-nomadik.c
+++ b/drivers/clk/clk-nomadik.c
@@ -1,48 +1,566 @@
1/*
2 * Nomadik clock implementation
3 * Copyright (C) 2013 ST-Ericsson AB
4 * License terms: GNU General Public License (GPL) version 2
5 * Author: Linus Walleij <linus.walleij@linaro.org>
6 */
7
8#define pr_fmt(fmt) "Nomadik SRC clocks: " fmt
9
10#include <linux/bitops.h>
1#include <linux/clk.h> 11#include <linux/clk.h>
2#include <linux/clkdev.h> 12#include <linux/clkdev.h>
3#include <linux/err.h> 13#include <linux/err.h>
4#include <linux/io.h> 14#include <linux/io.h>
5#include <linux/clk-provider.h> 15#include <linux/clk-provider.h>
16#include <linux/of.h>
17#include <linux/of_address.h>
18#include <linux/debugfs.h>
19#include <linux/seq_file.h>
20#include <linux/spinlock.h>
21#include <linux/reboot.h>
6 22
7/* 23/*
8 * The Nomadik clock tree is described in the STN8815A12 DB V4.2 24 * The Nomadik clock tree is described in the STN8815A12 DB V4.2
9 * reference manual for the chip, page 94 ff. 25 * reference manual for the chip, page 94 ff.
26 * Clock IDs are in the STn8815 Reference Manual table 3, page 27.
10 */ 27 */
11 28
12void __init nomadik_clk_init(void) 29#define SRC_CR 0x00U
30#define SRC_XTALCR 0x0CU
31#define SRC_XTALCR_XTALTIMEN BIT(20)
32#define SRC_XTALCR_SXTALDIS BIT(19)
33#define SRC_XTALCR_MXTALSTAT BIT(2)
34#define SRC_XTALCR_MXTALEN BIT(1)
35#define SRC_XTALCR_MXTALOVER BIT(0)
36#define SRC_PLLCR 0x10U
37#define SRC_PLLCR_PLLTIMEN BIT(29)
38#define SRC_PLLCR_PLL2EN BIT(28)
39#define SRC_PLLCR_PLL1STAT BIT(2)
40#define SRC_PLLCR_PLL1EN BIT(1)
41#define SRC_PLLCR_PLL1OVER BIT(0)
42#define SRC_PLLFR 0x14U
43#define SRC_PCKEN0 0x24U
44#define SRC_PCKDIS0 0x28U
45#define SRC_PCKENSR0 0x2CU
46#define SRC_PCKSR0 0x30U
47#define SRC_PCKEN1 0x34U
48#define SRC_PCKDIS1 0x38U
49#define SRC_PCKENSR1 0x3CU
50#define SRC_PCKSR1 0x40U
51
52/* Lock protecting the SRC_CR register */
53static DEFINE_SPINLOCK(src_lock);
54/* Base address of the SRC */
55static void __iomem *src_base;
56
57/**
58 * struct clk_pll1 - Nomadik PLL1 clock
59 * @hw: corresponding clock hardware entry
60 * @id: PLL instance: 1 or 2
61 */
62struct clk_pll {
63 struct clk_hw hw;
64 int id;
65};
66
67/**
68 * struct clk_src - Nomadik src clock
69 * @hw: corresponding clock hardware entry
70 * @id: the clock ID
71 * @group1: true if the clock is in group1, else it is in group0
72 * @clkbit: bit 0...31 corresponding to the clock in each clock register
73 */
74struct clk_src {
75 struct clk_hw hw;
76 int id;
77 bool group1;
78 u32 clkbit;
79};
80
81#define to_pll(_hw) container_of(_hw, struct clk_pll, hw)
82#define to_src(_hw) container_of(_hw, struct clk_src, hw)
83
84static int pll_clk_enable(struct clk_hw *hw)
85{
86 struct clk_pll *pll = to_pll(hw);
87 u32 val;
88
89 spin_lock(&src_lock);
90 val = readl(src_base + SRC_PLLCR);
91 if (pll->id == 1) {
92 if (val & SRC_PLLCR_PLL1OVER) {
93 val |= SRC_PLLCR_PLL1EN;
94 writel(val, src_base + SRC_PLLCR);
95 }
96 } else if (pll->id == 2) {
97 val |= SRC_PLLCR_PLL2EN;
98 writel(val, src_base + SRC_PLLCR);
99 }
100 spin_unlock(&src_lock);
101 return 0;
102}
103
104static void pll_clk_disable(struct clk_hw *hw)
105{
106 struct clk_pll *pll = to_pll(hw);
107 u32 val;
108
109 spin_lock(&src_lock);
110 val = readl(src_base + SRC_PLLCR);
111 if (pll->id == 1) {
112 if (val & SRC_PLLCR_PLL1OVER) {
113 val &= ~SRC_PLLCR_PLL1EN;
114 writel(val, src_base + SRC_PLLCR);
115 }
116 } else if (pll->id == 2) {
117 val &= ~SRC_PLLCR_PLL2EN;
118 writel(val, src_base + SRC_PLLCR);
119 }
120 spin_unlock(&src_lock);
121}
122
123static int pll_clk_is_enabled(struct clk_hw *hw)
124{
125 struct clk_pll *pll = to_pll(hw);
126 u32 val;
127
128 val = readl(src_base + SRC_PLLCR);
129 if (pll->id == 1) {
130 if (val & SRC_PLLCR_PLL1OVER)
131 return !!(val & SRC_PLLCR_PLL1EN);
132 } else if (pll->id == 2) {
133 return !!(val & SRC_PLLCR_PLL2EN);
134 }
135 return 1;
136}
137
138static unsigned long pll_clk_recalc_rate(struct clk_hw *hw,
139 unsigned long parent_rate)
140{
141 struct clk_pll *pll = to_pll(hw);
142 u32 val;
143
144 val = readl(src_base + SRC_PLLFR);
145
146 if (pll->id == 1) {
147 u8 mul;
148 u8 div;
149
150 mul = (val >> 8) & 0x3FU;
151 mul += 2;
152 div = val & 0x07U;
153 return (parent_rate * mul) >> div;
154 }
155
156 if (pll->id == 2) {
157 u8 mul;
158
159 mul = (val >> 24) & 0x3FU;
160 mul += 2;
161 return (parent_rate * mul);
162 }
163
164 /* Unknown PLL */
165 return 0;
166}
167
168
169static const struct clk_ops pll_clk_ops = {
170 .enable = pll_clk_enable,
171 .disable = pll_clk_disable,
172 .is_enabled = pll_clk_is_enabled,
173 .recalc_rate = pll_clk_recalc_rate,
174};
175
176static struct clk * __init
177pll_clk_register(struct device *dev, const char *name,
178 const char *parent_name, u32 id)
13{ 179{
14 struct clk *clk; 180 struct clk *clk;
181 struct clk_pll *pll;
182 struct clk_init_data init;
15 183
16 clk = clk_register_fixed_rate(NULL, "apb_pclk", NULL, CLK_IS_ROOT, 0); 184 if (id != 1 && id != 2) {
17 clk_register_clkdev(clk, "apb_pclk", NULL); 185 pr_err("%s: the Nomadik has only PLL 1 & 2\n", __func__);
18 clk_register_clkdev(clk, NULL, "gpio.0"); 186 return ERR_PTR(-EINVAL);
19 clk_register_clkdev(clk, NULL, "gpio.1"); 187 }
20 clk_register_clkdev(clk, NULL, "gpio.2");
21 clk_register_clkdev(clk, NULL, "gpio.3");
22 clk_register_clkdev(clk, NULL, "rng");
23 clk_register_clkdev(clk, NULL, "fsmc-nand");
24 188
25 /* 189 pll = kzalloc(sizeof(*pll), GFP_KERNEL);
26 * The 2.4 MHz TIMCLK reference clock is active at boot time, this is 190 if (!pll) {
27 * actually the MXTALCLK @19.2 MHz divided by 8. This clock is used 191 pr_err("%s: could not allocate PLL clk\n", __func__);
28 * by the timers and watchdog. See page 105 ff. 192 return ERR_PTR(-ENOMEM);
29 */ 193 }
30 clk = clk_register_fixed_rate(NULL, "TIMCLK", NULL, CLK_IS_ROOT, 194
31 2400000); 195 init.name = name;
32 clk_register_clkdev(clk, NULL, "mtu0"); 196 init.ops = &pll_clk_ops;
33 clk_register_clkdev(clk, NULL, "mtu1"); 197 init.parent_names = (parent_name ? &parent_name : NULL);
198 init.num_parents = (parent_name ? 1 : 0);
199 pll->hw.init = &init;
200 pll->id = id;
201
202 pr_debug("register PLL1 clock \"%s\"\n", name);
203
204 clk = clk_register(dev, &pll->hw);
205 if (IS_ERR(clk))
206 kfree(pll);
207
208 return clk;
209}
210
211/*
212 * The Nomadik SRC clocks are gated, but not in the sense that
213 * you read-modify-write a register. Instead there are separate
214 * clock enable and clock disable registers. Writing a '1' bit in
215 * the enable register for a certain clock ungates that clock without
216 * affecting the other clocks. The disable register works the opposite
217 * way.
218 */
219
220static int src_clk_enable(struct clk_hw *hw)
221{
222 struct clk_src *sclk = to_src(hw);
223 u32 enreg = sclk->group1 ? SRC_PCKEN1 : SRC_PCKEN0;
224 u32 sreg = sclk->group1 ? SRC_PCKSR1 : SRC_PCKSR0;
225
226 writel(sclk->clkbit, src_base + enreg);
227 /* spin until enabled */
228 while (!(readl(src_base + sreg) & sclk->clkbit))
229 cpu_relax();
230 return 0;
231}
232
233static void src_clk_disable(struct clk_hw *hw)
234{
235 struct clk_src *sclk = to_src(hw);
236 u32 disreg = sclk->group1 ? SRC_PCKDIS1 : SRC_PCKDIS0;
237 u32 sreg = sclk->group1 ? SRC_PCKSR1 : SRC_PCKSR0;
238
239 writel(sclk->clkbit, src_base + disreg);
240 /* spin until disabled */
241 while (readl(src_base + sreg) & sclk->clkbit)
242 cpu_relax();
243}
244
245static int src_clk_is_enabled(struct clk_hw *hw)
246{
247 struct clk_src *sclk = to_src(hw);
248 u32 sreg = sclk->group1 ? SRC_PCKSR1 : SRC_PCKSR0;
249 u32 val = readl(src_base + sreg);
34 250
251 return !!(val & sclk->clkbit);
252}
253
254static unsigned long
255src_clk_recalc_rate(struct clk_hw *hw,
256 unsigned long parent_rate)
257{
258 return parent_rate;
259}
260
261static const struct clk_ops src_clk_ops = {
262 .enable = src_clk_enable,
263 .disable = src_clk_disable,
264 .is_enabled = src_clk_is_enabled,
265 .recalc_rate = src_clk_recalc_rate,
266};
267
268static struct clk * __init
269src_clk_register(struct device *dev, const char *name,
270 const char *parent_name, u8 id)
271{
272 struct clk *clk;
273 struct clk_src *sclk;
274 struct clk_init_data init;
275
276 sclk = kzalloc(sizeof(*sclk), GFP_KERNEL);
277 if (!sclk) {
278 pr_err("could not allocate SRC clock %s\n",
279 name);
280 return ERR_PTR(-ENOMEM);
281 }
282 init.name = name;
283 init.ops = &src_clk_ops;
284 /* Do not force-disable the static SDRAM controller */
285 if (id == 2)
286 init.flags = CLK_IGNORE_UNUSED;
287 else
288 init.flags = 0;
289 init.parent_names = (parent_name ? &parent_name : NULL);
290 init.num_parents = (parent_name ? 1 : 0);
291 sclk->hw.init = &init;
292 sclk->id = id;
293 sclk->group1 = (id > 31);
294 sclk->clkbit = BIT(id & 0x1f);
295
296 pr_debug("register clock \"%s\" ID: %d group: %d bits: %08x\n",
297 name, id, sclk->group1, sclk->clkbit);
298
299 clk = clk_register(dev, &sclk->hw);
300 if (IS_ERR(clk))
301 kfree(sclk);
302
303 return clk;
304}
305
306#ifdef CONFIG_DEBUG_FS
307
308static u32 src_pcksr0_boot;
309static u32 src_pcksr1_boot;
310
311static const char * const src_clk_names[] = {
312 "HCLKDMA0 ",
313 "HCLKSMC ",
314 "HCLKSDRAM ",
315 "HCLKDMA1 ",
316 "HCLKCLCD ",
317 "PCLKIRDA ",
318 "PCLKSSP ",
319 "PCLKUART0 ",
320 "PCLKSDI ",
321 "PCLKI2C0 ",
322 "PCLKI2C1 ",
323 "PCLKUART1 ",
324 "PCLMSP0 ",
325 "HCLKUSB ",
326 "HCLKDIF ",
327 "HCLKSAA ",
328 "HCLKSVA ",
329 "PCLKHSI ",
330 "PCLKXTI ",
331 "PCLKUART2 ",
332 "PCLKMSP1 ",
333 "PCLKMSP2 ",
334 "PCLKOWM ",
335 "HCLKHPI ",
336 "PCLKSKE ",
337 "PCLKHSEM ",
338 "HCLK3D ",
339 "HCLKHASH ",
340 "HCLKCRYP ",
341 "PCLKMSHC ",
342 "HCLKUSBM ",
343 "HCLKRNG ",
344 "RESERVED ",
345 "RESERVED ",
346 "RESERVED ",
347 "RESERVED ",
348 "CLDCLK ",
349 "IRDACLK ",
350 "SSPICLK ",
351 "UART0CLK ",
352 "SDICLK ",
353 "I2C0CLK ",
354 "I2C1CLK ",
355 "UART1CLK ",
356 "MSPCLK0 ",
357 "USBCLK ",
358 "DIFCLK ",
359 "IPI2CCLK ",
360 "IPBMCCLK ",
361 "HSICLKRX ",
362 "HSICLKTX ",
363 "UART2CLK ",
364 "MSPCLK1 ",
365 "MSPCLK2 ",
366 "OWMCLK ",
367 "RESERVED ",
368 "SKECLK ",
369 "RESERVED ",
370 "3DCLK ",
371 "PCLKMSP3 ",
372 "MSPCLK3 ",
373 "MSHCCLK ",
374 "USBMCLK ",
375 "RNGCCLK ",
376};
377
378static int nomadik_src_clk_show(struct seq_file *s, void *what)
379{
380 int i;
381 u32 src_pcksr0 = readl(src_base + SRC_PCKSR0);
382 u32 src_pcksr1 = readl(src_base + SRC_PCKSR1);
383 u32 src_pckensr0 = readl(src_base + SRC_PCKENSR0);
384 u32 src_pckensr1 = readl(src_base + SRC_PCKENSR1);
385
386 seq_printf(s, "Clock: Boot: Now: Request: ASKED:\n");
387 for (i = 0; i < ARRAY_SIZE(src_clk_names); i++) {
388 u32 pcksrb = (i < 0x20) ? src_pcksr0_boot : src_pcksr1_boot;
389 u32 pcksr = (i < 0x20) ? src_pcksr0 : src_pcksr1;
390 u32 pckreq = (i < 0x20) ? src_pckensr0 : src_pckensr1;
391 u32 mask = BIT(i & 0x1f);
392
393 seq_printf(s, "%s %s %s %s\n",
394 src_clk_names[i],
395 (pcksrb & mask) ? "on " : "off",
396 (pcksr & mask) ? "on " : "off",
397 (pckreq & mask) ? "on " : "off");
398 }
399 return 0;
400}
401
402static int nomadik_src_clk_open(struct inode *inode, struct file *file)
403{
404 return single_open(file, nomadik_src_clk_show, NULL);
405}
406
407static const struct file_operations nomadik_src_clk_debugfs_ops = {
408 .open = nomadik_src_clk_open,
409 .read = seq_read,
410 .llseek = seq_lseek,
411 .release = single_release,
412};
413
414static int __init nomadik_src_clk_init_debugfs(void)
415{
416 src_pcksr0_boot = readl(src_base + SRC_PCKSR0);
417 src_pcksr1_boot = readl(src_base + SRC_PCKSR1);
418 debugfs_create_file("nomadik-src-clk", S_IFREG | S_IRUGO,
419 NULL, NULL, &nomadik_src_clk_debugfs_ops);
420 return 0;
421}
422
423module_init(nomadik_src_clk_init_debugfs);
424
425#endif
426
427static void __init of_nomadik_pll_setup(struct device_node *np)
428{
429 struct clk *clk = ERR_PTR(-EINVAL);
430 const char *clk_name = np->name;
431 const char *parent_name;
432 u32 pll_id;
433
434 if (of_property_read_u32(np, "pll-id", &pll_id)) {
435 pr_err("%s: PLL \"%s\" missing pll-id property\n",
436 __func__, clk_name);
437 return;
438 }
439 parent_name = of_clk_get_parent_name(np, 0);
440 clk = pll_clk_register(NULL, clk_name, parent_name, pll_id);
441 if (!IS_ERR(clk))
442 of_clk_add_provider(np, of_clk_src_simple_get, clk);
443}
444
445static void __init of_nomadik_hclk_setup(struct device_node *np)
446{
447 struct clk *clk = ERR_PTR(-EINVAL);
448 const char *clk_name = np->name;
449 const char *parent_name;
450
451 parent_name = of_clk_get_parent_name(np, 0);
35 /* 452 /*
36 * At boot time, PLL2 is set to generate a set of fixed clocks, 453 * The HCLK divides PLL1 with 1 (passthru), 2, 3 or 4.
37 * one of them is CLK48, the 48 MHz clock, routed to the UART, MMC/SD
38 * I2C, IrDA, USB and SSP blocks.
39 */ 454 */
40 clk = clk_register_fixed_rate(NULL, "CLK48", NULL, CLK_IS_ROOT, 455 clk = clk_register_divider(NULL, clk_name, parent_name,
41 48000000); 456 0, src_base + SRC_CR,
42 clk_register_clkdev(clk, NULL, "uart0"); 457 13, 2,
43 clk_register_clkdev(clk, NULL, "uart1"); 458 CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO,
44 clk_register_clkdev(clk, NULL, "mmci"); 459 &src_lock);
45 clk_register_clkdev(clk, NULL, "ssp"); 460 if (!IS_ERR(clk))
46 clk_register_clkdev(clk, NULL, "nmk-i2c.0"); 461 of_clk_add_provider(np, of_clk_src_simple_get, clk);
47 clk_register_clkdev(clk, NULL, "nmk-i2c.1"); 462}
463
464static void __init of_nomadik_src_clk_setup(struct device_node *np)
465{
466 struct clk *clk = ERR_PTR(-EINVAL);
467 const char *clk_name = np->name;
468 const char *parent_name;
469 u32 clk_id;
470
471 if (of_property_read_u32(np, "clock-id", &clk_id)) {
472 pr_err("%s: SRC clock \"%s\" missing clock-id property\n",
473 __func__, clk_name);
474 return;
475 }
476 parent_name = of_clk_get_parent_name(np, 0);
477 clk = src_clk_register(NULL, clk_name, parent_name, clk_id);
478 if (!IS_ERR(clk))
479 of_clk_add_provider(np, of_clk_src_simple_get, clk);
480}
481
482static const __initconst struct of_device_id nomadik_src_match[] = {
483 { .compatible = "stericsson,nomadik-src" },
484 { /* sentinel */ }
485};
486
487static const __initconst struct of_device_id nomadik_src_clk_match[] = {
488 {
489 .compatible = "fixed-clock",
490 .data = of_fixed_clk_setup,
491 },
492 {
493 .compatible = "fixed-factor-clock",
494 .data = of_fixed_factor_clk_setup,
495 },
496 {
497 .compatible = "st,nomadik-pll-clock",
498 .data = of_nomadik_pll_setup,
499 },
500 {
501 .compatible = "st,nomadik-hclk-clock",
502 .data = of_nomadik_hclk_setup,
503 },
504 {
505 .compatible = "st,nomadik-src-clock",
506 .data = of_nomadik_src_clk_setup,
507 },
508 { /* sentinel */ }
509};
510
511static int nomadik_clk_reboot_handler(struct notifier_block *this,
512 unsigned long code,
513 void *unused)
514{
515 u32 val;
516
517 /* The main chrystal need to be enabled for reboot to work */
518 val = readl(src_base + SRC_XTALCR);
519 val &= ~SRC_XTALCR_MXTALOVER;
520 val |= SRC_XTALCR_MXTALEN;
521 pr_crit("force-enabling MXTALO\n");
522 writel(val, src_base + SRC_XTALCR);
523 return NOTIFY_OK;
524}
525
526static struct notifier_block nomadik_clk_reboot_notifier = {
527 .notifier_call = nomadik_clk_reboot_handler,
528};
529
530void __init nomadik_clk_init(void)
531{
532 struct device_node *np;
533 u32 val;
534
535 np = of_find_matching_node(NULL, nomadik_src_match);
536 if (!np) {
537 pr_crit("no matching node for SRC, aborting clock init\n");
538 return;
539 }
540 src_base = of_iomap(np, 0);
541 if (!src_base) {
542 pr_err("%s: must have src parent node with REGS (%s)\n",
543 __func__, np->name);
544 return;
545 }
546 val = readl(src_base + SRC_XTALCR);
547 pr_info("SXTALO is %s\n",
548 (val & SRC_XTALCR_SXTALDIS) ? "disabled" : "enabled");
549 pr_info("MXTAL is %s\n",
550 (val & SRC_XTALCR_MXTALSTAT) ? "enabled" : "disabled");
551 if (of_property_read_bool(np, "disable-sxtalo")) {
552 /* The machine uses an external oscillator circuit */
553 val |= SRC_XTALCR_SXTALDIS;
554 pr_info("disabling SXTALO\n");
555 }
556 if (of_property_read_bool(np, "disable-mxtalo")) {
557 /* Disable this too: also run by external oscillator */
558 val |= SRC_XTALCR_MXTALOVER;
559 val &= ~SRC_XTALCR_MXTALEN;
560 pr_info("disabling MXTALO\n");
561 }
562 writel(val, src_base + SRC_XTALCR);
563 register_reboot_notifier(&nomadik_clk_reboot_notifier);
564
565 of_clk_init(nomadik_src_clk_match);
48} 566}
diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c
index 3c1f88868f29..addc738a06fb 100644
--- a/drivers/clk/samsung/clk-exynos4.c
+++ b/drivers/clk/samsung/clk-exynos4.c
@@ -151,7 +151,7 @@ enum exynos4_clks {
151 sclk_audio1, sclk_audio2, sclk_spdif, sclk_spi0, sclk_spi1, sclk_spi2, 151 sclk_audio1, sclk_audio2, sclk_spdif, sclk_spi0, sclk_spi1, sclk_spi2,
152 sclk_slimbus, sclk_fimd1, sclk_mipi1, sclk_pcm1, sclk_pcm2, sclk_i2s1, 152 sclk_slimbus, sclk_fimd1, sclk_mipi1, sclk_pcm1, sclk_pcm2, sclk_i2s1,
153 sclk_i2s2, sclk_mipihsi, sclk_mfc, sclk_pcm0, sclk_g3d, sclk_pwm_isp, 153 sclk_i2s2, sclk_mipihsi, sclk_mfc, sclk_pcm0, sclk_g3d, sclk_pwm_isp,
154 sclk_spi0_isp, sclk_spi1_isp, sclk_uart_isp, 154 sclk_spi0_isp, sclk_spi1_isp, sclk_uart_isp, sclk_fimg2d,
155 155
156 /* gate clocks */ 156 /* gate clocks */
157 fimc0 = 256, fimc1, fimc2, fimc3, csis0, csis1, jpeg, smmu_fimc0, 157 fimc0 = 256, fimc1, fimc2, fimc3, csis0, csis1, jpeg, smmu_fimc0,
@@ -484,6 +484,9 @@ struct samsung_mux_clock exynos4x12_mux_clks[] __initdata = {
484 MUX(none, "mout_spi0_isp", group1_p4x12, E4X12_SRC_ISP, 4, 4), 484 MUX(none, "mout_spi0_isp", group1_p4x12, E4X12_SRC_ISP, 4, 4),
485 MUX(none, "mout_spi1_isp", group1_p4x12, E4X12_SRC_ISP, 8, 4), 485 MUX(none, "mout_spi1_isp", group1_p4x12, E4X12_SRC_ISP, 8, 4),
486 MUX(none, "mout_uart_isp", group1_p4x12, E4X12_SRC_ISP, 12, 4), 486 MUX(none, "mout_uart_isp", group1_p4x12, E4X12_SRC_ISP, 12, 4),
487 MUX(none, "mout_g2d0", sclk_ampll_p4210, SRC_DMC, 20, 1),
488 MUX(none, "mout_g2d1", sclk_evpll_p, SRC_DMC, 24, 1),
489 MUX(none, "mout_g2d", mout_g2d_p, SRC_DMC, 28, 1),
487}; 490};
488 491
489/* list of divider clocks supported in all exynos4 soc's */ 492/* list of divider clocks supported in all exynos4 soc's */
@@ -552,7 +555,7 @@ struct samsung_div_clock exynos4_div_clks[] __initdata = {
552/* list of divider clocks supported in exynos4210 soc */ 555/* list of divider clocks supported in exynos4210 soc */
553struct samsung_div_clock exynos4210_div_clks[] __initdata = { 556struct samsung_div_clock exynos4210_div_clks[] __initdata = {
554 DIV(aclk200, "aclk200", "mout_aclk200", DIV_TOP, 0, 3), 557 DIV(aclk200, "aclk200", "mout_aclk200", DIV_TOP, 0, 3),
555 DIV(none, "div_g2d", "mout_g2d", DIV_IMAGE, 0, 4), 558 DIV(sclk_fimg2d, "sclk_fimg2d", "mout_g2d", DIV_IMAGE, 0, 4),
556 DIV(none, "div_fimd1", "mout_fimd1", E4210_DIV_LCD1, 0, 4), 559 DIV(none, "div_fimd1", "mout_fimd1", E4210_DIV_LCD1, 0, 4),
557 DIV(none, "div_mipi1", "mout_mipi1", E4210_DIV_LCD1, 16, 4), 560 DIV(none, "div_mipi1", "mout_mipi1", E4210_DIV_LCD1, 16, 4),
558 DIV(none, "div_sata", "mout_sata", DIV_FSYS0, 20, 4), 561 DIV(none, "div_sata", "mout_sata", DIV_FSYS0, 20, 4),
@@ -582,6 +585,7 @@ struct samsung_div_clock exynos4x12_div_clks[] __initdata = {
582 DIV(none, "div_mpwm", "div_isp1", E4X12_DIV_ISP1, 0, 3), 585 DIV(none, "div_mpwm", "div_isp1", E4X12_DIV_ISP1, 0, 3),
583 DIV(div_mcuisp0, "div_mcuisp0", "aclk400_mcuisp", E4X12_DIV_ISP1, 4, 3), 586 DIV(div_mcuisp0, "div_mcuisp0", "aclk400_mcuisp", E4X12_DIV_ISP1, 4, 3),
584 DIV(div_mcuisp1, "div_mcuisp1", "div_mcuisp0", E4X12_DIV_ISP1, 8, 3), 587 DIV(div_mcuisp1, "div_mcuisp1", "div_mcuisp0", E4X12_DIV_ISP1, 8, 3),
588 DIV(sclk_fimg2d, "sclk_fimg2d", "mout_g2d", DIV_DMC1, 0, 4),
585}; 589};
586 590
587/* list of gate clocks supported in all exynos4 soc's */ 591/* list of gate clocks supported in all exynos4 soc's */
@@ -909,6 +913,7 @@ struct samsung_gate_clock exynos4x12_gate_clks[] __initdata = {
909 CLK_IGNORE_UNUSED, 0), 913 CLK_IGNORE_UNUSED, 0),
910 GATE(spi1_isp, "spi1_isp", "aclk200", E4X12_GATE_ISP1, 13, 914 GATE(spi1_isp, "spi1_isp", "aclk200", E4X12_GATE_ISP1, 13,
911 CLK_IGNORE_UNUSED, 0), 915 CLK_IGNORE_UNUSED, 0),
916 GATE(g2d, "g2d", "aclk200", GATE_IP_DMC, 23, 0, 0),
912}; 917};
913 918
914/* 919/*
diff --git a/drivers/clocksource/nomadik-mtu.c b/drivers/clocksource/nomadik-mtu.c
index e405531e1cc5..b9415b622f55 100644
--- a/drivers/clocksource/nomadik-mtu.c
+++ b/drivers/clocksource/nomadik-mtu.c
@@ -13,6 +13,9 @@
13#include <linux/io.h> 13#include <linux/io.h>
14#include <linux/clockchips.h> 14#include <linux/clockchips.h>
15#include <linux/clocksource.h> 15#include <linux/clocksource.h>
16#include <linux/of_address.h>
17#include <linux/of_irq.h>
18#include <linux/of_platform.h>
16#include <linux/clk.h> 19#include <linux/clk.h>
17#include <linux/jiffies.h> 20#include <linux/jiffies.h>
18#include <linux/delay.h> 21#include <linux/delay.h>
@@ -188,22 +191,15 @@ static struct irqaction nmdk_timer_irq = {
188 .dev_id = &nmdk_clkevt, 191 .dev_id = &nmdk_clkevt,
189}; 192};
190 193
191void __init nmdk_timer_init(void __iomem *base, int irq) 194static void __init __nmdk_timer_init(void __iomem *base, int irq,
195 struct clk *pclk, struct clk *clk)
192{ 196{
193 unsigned long rate; 197 unsigned long rate;
194 struct clk *clk0, *pclk0;
195 198
196 mtu_base = base; 199 mtu_base = base;
197 200
198 pclk0 = clk_get_sys("mtu0", "apb_pclk"); 201 BUG_ON(clk_prepare_enable(pclk));
199 BUG_ON(IS_ERR(pclk0)); 202 BUG_ON(clk_prepare_enable(clk));
200 BUG_ON(clk_prepare(pclk0) < 0);
201 BUG_ON(clk_enable(pclk0) < 0);
202
203 clk0 = clk_get_sys("mtu0", NULL);
204 BUG_ON(IS_ERR(clk0));
205 BUG_ON(clk_prepare(clk0) < 0);
206 BUG_ON(clk_enable(clk0) < 0);
207 203
208 /* 204 /*
209 * Tick rate is 2.4MHz for Nomadik and 2.4Mhz, 100MHz or 133 MHz 205 * Tick rate is 2.4MHz for Nomadik and 2.4Mhz, 100MHz or 133 MHz
@@ -213,7 +209,7 @@ void __init nmdk_timer_init(void __iomem *base, int irq)
213 * to wake-up at a max 127s a head in time. Dividing a 2.4 MHz timer 209 * to wake-up at a max 127s a head in time. Dividing a 2.4 MHz timer
214 * with 16 gives too low timer resolution. 210 * with 16 gives too low timer resolution.
215 */ 211 */
216 rate = clk_get_rate(clk0); 212 rate = clk_get_rate(clk);
217 if (rate > 32000000) { 213 if (rate > 32000000) {
218 rate /= 16; 214 rate /= 16;
219 clk_prescale = MTU_CRn_PRESCALE_16; 215 clk_prescale = MTU_CRn_PRESCALE_16;
@@ -247,3 +243,43 @@ void __init nmdk_timer_init(void __iomem *base, int irq)
247 mtu_delay_timer.freq = rate; 243 mtu_delay_timer.freq = rate;
248 register_current_timer_delay(&mtu_delay_timer); 244 register_current_timer_delay(&mtu_delay_timer);
249} 245}
246
247void __init nmdk_timer_init(void __iomem *base, int irq)
248{
249 struct clk *clk0, *pclk0;
250
251 pclk0 = clk_get_sys("mtu0", "apb_pclk");
252 BUG_ON(IS_ERR(pclk0));
253 clk0 = clk_get_sys("mtu0", NULL);
254 BUG_ON(IS_ERR(clk0));
255
256 __nmdk_timer_init(base, irq, pclk0, clk0);
257}
258
259static void __init nmdk_timer_of_init(struct device_node *node)
260{
261 struct clk *pclk;
262 struct clk *clk;
263 void __iomem *base;
264 int irq;
265
266 base = of_iomap(node, 0);
267 if (!base)
268 panic("Can't remap registers");
269
270 pclk = of_clk_get_by_name(node, "apb_pclk");
271 if (IS_ERR(pclk))
272 panic("could not get apb_pclk");
273
274 clk = of_clk_get_by_name(node, "timclk");
275 if (IS_ERR(clk))
276 panic("could not get timclk");
277
278 irq = irq_of_parse_and_map(node, 0);
279 if (irq <= 0)
280 panic("Can't parse IRQ");
281
282 __nmdk_timer_init(base, irq, pclk, clk);
283}
284CLOCKSOURCE_OF_DECLARE(nomadik_mtu, "st,nomadik-mtu",
285 nmdk_timer_of_init);
diff --git a/drivers/crypto/ux500/cryp/cryp_core.c b/drivers/crypto/ux500/cryp/cryp_core.c
index 32f480622b97..8c2777cf02f6 100644
--- a/drivers/crypto/ux500/cryp/cryp_core.c
+++ b/drivers/crypto/ux500/cryp/cryp_core.c
@@ -1743,6 +1743,11 @@ static int ux500_cryp_resume(struct device *dev)
1743 1743
1744static SIMPLE_DEV_PM_OPS(ux500_cryp_pm, ux500_cryp_suspend, ux500_cryp_resume); 1744static SIMPLE_DEV_PM_OPS(ux500_cryp_pm, ux500_cryp_suspend, ux500_cryp_resume);
1745 1745
1746static const struct of_device_id ux500_cryp_match[] = {
1747 { .compatible = "stericsson,ux500-cryp" },
1748 { },
1749};
1750
1746static struct platform_driver cryp_driver = { 1751static struct platform_driver cryp_driver = {
1747 .probe = ux500_cryp_probe, 1752 .probe = ux500_cryp_probe,
1748 .remove = ux500_cryp_remove, 1753 .remove = ux500_cryp_remove,
@@ -1750,6 +1755,7 @@ static struct platform_driver cryp_driver = {
1750 .driver = { 1755 .driver = {
1751 .owner = THIS_MODULE, 1756 .owner = THIS_MODULE,
1752 .name = "cryp1", 1757 .name = "cryp1",
1758 .of_match_table = ux500_cryp_match,
1753 .pm = &ux500_cryp_pm, 1759 .pm = &ux500_cryp_pm,
1754 } 1760 }
1755}; 1761};
diff --git a/drivers/crypto/ux500/hash/hash_core.c b/drivers/crypto/ux500/hash/hash_core.c
index cf5508967539..3b8f661d0edf 100644
--- a/drivers/crypto/ux500/hash/hash_core.c
+++ b/drivers/crypto/ux500/hash/hash_core.c
@@ -1961,6 +1961,11 @@ static int ux500_hash_resume(struct device *dev)
1961 1961
1962static SIMPLE_DEV_PM_OPS(ux500_hash_pm, ux500_hash_suspend, ux500_hash_resume); 1962static SIMPLE_DEV_PM_OPS(ux500_hash_pm, ux500_hash_suspend, ux500_hash_resume);
1963 1963
1964static const struct of_device_id ux500_hash_match[] = {
1965 { .compatible = "stericsson,ux500-hash" },
1966 { },
1967};
1968
1964static struct platform_driver hash_driver = { 1969static struct platform_driver hash_driver = {
1965 .probe = ux500_hash_probe, 1970 .probe = ux500_hash_probe,
1966 .remove = ux500_hash_remove, 1971 .remove = ux500_hash_remove,
@@ -1968,6 +1973,7 @@ static struct platform_driver hash_driver = {
1968 .driver = { 1973 .driver = {
1969 .owner = THIS_MODULE, 1974 .owner = THIS_MODULE,
1970 .name = "hash1", 1975 .name = "hash1",
1976 .of_match_table = ux500_hash_match,
1971 .pm = &ux500_hash_pm, 1977 .pm = &ux500_hash_pm,
1972 } 1978 }
1973}; 1979};
diff --git a/drivers/irqchip/irq-renesas-intc-irqpin.c b/drivers/irqchip/irq-renesas-intc-irqpin.c
index 5a68e5accec1..82cec63a9011 100644
--- a/drivers/irqchip/irq-renesas-intc-irqpin.c
+++ b/drivers/irqchip/irq-renesas-intc-irqpin.c
@@ -18,6 +18,7 @@
18 */ 18 */
19 19
20#include <linux/init.h> 20#include <linux/init.h>
21#include <linux/of.h>
21#include <linux/platform_device.h> 22#include <linux/platform_device.h>
22#include <linux/spinlock.h> 23#include <linux/spinlock.h>
23#include <linux/interrupt.h> 24#include <linux/interrupt.h>
@@ -347,8 +348,14 @@ static int intc_irqpin_probe(struct platform_device *pdev)
347 } 348 }
348 349
349 /* deal with driver instance configuration */ 350 /* deal with driver instance configuration */
350 if (pdata) 351 if (pdata) {
351 memcpy(&p->config, pdata, sizeof(*pdata)); 352 memcpy(&p->config, pdata, sizeof(*pdata));
353 } else {
354 of_property_read_u32(pdev->dev.of_node, "sense-bitfield-width",
355 &p->config.sense_bitfield_width);
356 p->config.control_parent = of_property_read_bool(pdev->dev.of_node,
357 "control-parent");
358 }
352 if (!p->config.sense_bitfield_width) 359 if (!p->config.sense_bitfield_width)
353 p->config.sense_bitfield_width = 4; /* default to 4 bits */ 360 p->config.sense_bitfield_width = 4; /* default to 4 bits */
354 361
diff --git a/drivers/pinctrl/pinctrl-nomadik.c b/drivers/pinctrl/pinctrl-nomadik.c
index 34281754b629..8a4f9c5c0b8e 100644
--- a/drivers/pinctrl/pinctrl-nomadik.c
+++ b/drivers/pinctrl/pinctrl-nomadik.c
@@ -2104,15 +2104,15 @@ static struct pinctrl_desc nmk_pinctrl_desc = {
2104 2104
2105static const struct of_device_id nmk_pinctrl_match[] = { 2105static const struct of_device_id nmk_pinctrl_match[] = {
2106 { 2106 {
2107 .compatible = "stericsson,nmk-pinctrl-stn8815", 2107 .compatible = "stericsson,stn8815-pinctrl",
2108 .data = (void *)PINCTRL_NMK_STN8815, 2108 .data = (void *)PINCTRL_NMK_STN8815,
2109 }, 2109 },
2110 { 2110 {
2111 .compatible = "stericsson,nmk-pinctrl", 2111 .compatible = "stericsson,db8500-pinctrl",
2112 .data = (void *)PINCTRL_NMK_DB8500, 2112 .data = (void *)PINCTRL_NMK_DB8500,
2113 }, 2113 },
2114 { 2114 {
2115 .compatible = "stericsson,nmk-pinctrl-db8540", 2115 .compatible = "stericsson,db8540-pinctrl",
2116 .data = (void *)PINCTRL_NMK_DB8540, 2116 .data = (void *)PINCTRL_NMK_DB8540,
2117 }, 2117 },
2118 {}, 2118 {},
diff --git a/drivers/regulator/ab8500.c b/drivers/regulator/ab8500.c
index f6656b8c28b6..a19045ee0ec4 100644
--- a/drivers/regulator/ab8500.c
+++ b/drivers/regulator/ab8500.c
@@ -2901,7 +2901,7 @@ static struct of_regulator_match ab8500_regulator_match[] = {
2901 { .name = "ab8500_ldo_tvout", .driver_data = (void *) AB8500_LDO_TVOUT, }, 2901 { .name = "ab8500_ldo_tvout", .driver_data = (void *) AB8500_LDO_TVOUT, },
2902 { .name = "ab8500_ldo_audio", .driver_data = (void *) AB8500_LDO_AUDIO, }, 2902 { .name = "ab8500_ldo_audio", .driver_data = (void *) AB8500_LDO_AUDIO, },
2903 { .name = "ab8500_ldo_anamic1", .driver_data = (void *) AB8500_LDO_ANAMIC1, }, 2903 { .name = "ab8500_ldo_anamic1", .driver_data = (void *) AB8500_LDO_ANAMIC1, },
2904 { .name = "ab8500_ldo_amamic2", .driver_data = (void *) AB8500_LDO_ANAMIC2, }, 2904 { .name = "ab8500_ldo_anamic2", .driver_data = (void *) AB8500_LDO_ANAMIC2, },
2905 { .name = "ab8500_ldo_dmic", .driver_data = (void *) AB8500_LDO_DMIC, }, 2905 { .name = "ab8500_ldo_dmic", .driver_data = (void *) AB8500_LDO_DMIC, },
2906 { .name = "ab8500_ldo_ana", .driver_data = (void *) AB8500_LDO_ANA, }, 2906 { .name = "ab8500_ldo_ana", .driver_data = (void *) AB8500_LDO_ANA, },
2907}; 2907};
@@ -2917,7 +2917,7 @@ static struct of_regulator_match ab8505_regulator_match[] = {
2917 { .name = "ab8500_ldo_adc", .driver_data = (void *) AB8505_LDO_ADC, }, 2917 { .name = "ab8500_ldo_adc", .driver_data = (void *) AB8505_LDO_ADC, },
2918 { .name = "ab8500_ldo_audio", .driver_data = (void *) AB8505_LDO_AUDIO, }, 2918 { .name = "ab8500_ldo_audio", .driver_data = (void *) AB8505_LDO_AUDIO, },
2919 { .name = "ab8500_ldo_anamic1", .driver_data = (void *) AB8505_LDO_ANAMIC1, }, 2919 { .name = "ab8500_ldo_anamic1", .driver_data = (void *) AB8505_LDO_ANAMIC1, },
2920 { .name = "ab8500_ldo_amamic2", .driver_data = (void *) AB8505_LDO_ANAMIC2, }, 2920 { .name = "ab8500_ldo_anamic2", .driver_data = (void *) AB8505_LDO_ANAMIC2, },
2921 { .name = "ab8500_ldo_aux8", .driver_data = (void *) AB8505_LDO_AUX8, }, 2921 { .name = "ab8500_ldo_aux8", .driver_data = (void *) AB8505_LDO_AUX8, },
2922 { .name = "ab8500_ldo_ana", .driver_data = (void *) AB8505_LDO_ANA, }, 2922 { .name = "ab8500_ldo_ana", .driver_data = (void *) AB8505_LDO_ANA, },
2923}; 2923};
@@ -2933,7 +2933,7 @@ static struct of_regulator_match ab8540_regulator_match[] = {
2933 { .name = "ab8500_ldo_tvout", .driver_data = (void *) AB8540_LDO_TVOUT, }, 2933 { .name = "ab8500_ldo_tvout", .driver_data = (void *) AB8540_LDO_TVOUT, },
2934 { .name = "ab8500_ldo_audio", .driver_data = (void *) AB8540_LDO_AUDIO, }, 2934 { .name = "ab8500_ldo_audio", .driver_data = (void *) AB8540_LDO_AUDIO, },
2935 { .name = "ab8500_ldo_anamic1", .driver_data = (void *) AB8540_LDO_ANAMIC1, }, 2935 { .name = "ab8500_ldo_anamic1", .driver_data = (void *) AB8540_LDO_ANAMIC1, },
2936 { .name = "ab8500_ldo_amamic2", .driver_data = (void *) AB8540_LDO_ANAMIC2, }, 2936 { .name = "ab8500_ldo_anamic2", .driver_data = (void *) AB8540_LDO_ANAMIC2, },
2937 { .name = "ab8500_ldo_dmic", .driver_data = (void *) AB8540_LDO_DMIC, }, 2937 { .name = "ab8500_ldo_dmic", .driver_data = (void *) AB8540_LDO_DMIC, },
2938 { .name = "ab8500_ldo_ana", .driver_data = (void *) AB8540_LDO_ANA, }, 2938 { .name = "ab8500_ldo_ana", .driver_data = (void *) AB8540_LDO_ANA, },
2939 { .name = "ab8500_ldo_sdio", .driver_data = (void *) AB8540_LDO_SDIO, }, 2939 { .name = "ab8500_ldo_sdio", .driver_data = (void *) AB8540_LDO_SDIO, },
@@ -2948,7 +2948,7 @@ static struct of_regulator_match ab9540_regulator_match[] = {
2948 { .name = "ab8500_ldo_tvout", .driver_data = (void *) AB9540_LDO_TVOUT, }, 2948 { .name = "ab8500_ldo_tvout", .driver_data = (void *) AB9540_LDO_TVOUT, },
2949 { .name = "ab8500_ldo_audio", .driver_data = (void *) AB9540_LDO_AUDIO, }, 2949 { .name = "ab8500_ldo_audio", .driver_data = (void *) AB9540_LDO_AUDIO, },
2950 { .name = "ab8500_ldo_anamic1", .driver_data = (void *) AB9540_LDO_ANAMIC1, }, 2950 { .name = "ab8500_ldo_anamic1", .driver_data = (void *) AB9540_LDO_ANAMIC1, },
2951 { .name = "ab8500_ldo_amamic2", .driver_data = (void *) AB9540_LDO_ANAMIC2, }, 2951 { .name = "ab8500_ldo_anamic2", .driver_data = (void *) AB9540_LDO_ANAMIC2, },
2952 { .name = "ab8500_ldo_dmic", .driver_data = (void *) AB9540_LDO_DMIC, }, 2952 { .name = "ab8500_ldo_dmic", .driver_data = (void *) AB9540_LDO_DMIC, },
2953 { .name = "ab8500_ldo_ana", .driver_data = (void *) AB9540_LDO_ANA, }, 2953 { .name = "ab8500_ldo_ana", .driver_data = (void *) AB9540_LDO_ANA, },
2954}; 2954};