aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-03-28 15:34:33 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-03-28 15:34:33 -0400
commit09893ee84591b0417a9186a7e7cf1503ccf99ac2 (patch)
treeda8b044ad157b82203df04ae48cb60f4737cc390 /drivers
parent4bb2d1009f671815870e8f78e826e4f9071392a7 (diff)
parent7d1206bc2859c6e9f46e35ae697c138e7d7858a7 (diff)
Merge tag 'dt2' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull "ARM: More device tree support updates" from Olof Johansson: "This branch contains a number of updates for device tree support on several ARM platforms, in particular: * AT91 continues the device tree conversion adding support for a number of on-chip drivers and other functionality * ux500 adds probing of some of the core SoC blocks through device tree * Initial device tree support for ST SPEAr600 platforms * kirkwood continues the conversion to device-tree probing" Manually merge arch/arm/mach-ux500/Kconfig due to MACH_U8500 rename, and drivers/usb/gadget/at91_udc.c due to header file include cleanups. Also do an "evil merge" for the MACH_U8500 config option rename that the affected RMI4 touchscreen driver in staging. It's called MACH_MOP500 now, and it was missed during previous merges. * tag 'dt2' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (48 commits) ARM: SPEAr600: Add device-tree support to SPEAr600 boards ARM: ux500: Provide local timer support for Device Tree ARM: ux500: Enable PL022 SSP Controller in Device Tree ARM: ux500: Enable PL310 Level 2 Cache Controller in Device Tree ARM: ux500: Enable PL011 AMBA UART Controller for Device Tree ARM: ux500: Enable Cortex-A9 GIC (Generic Interrupt Controller) in Device Tree ARM: ux500: db8500: list most devices in the snowball device tree ARM: ux500: split dts file for snowball into generic part ARM: ux500: combine the board init functions for DT boot ARM: ux500: Initial Device Tree support for Snowball ARM: ux500: CONFIG: Enable Device Tree support for future endeavours ARM: kirkwood: use devicetree for rtc-mv ARM: kirkwood: rtc-mv devicetree bindings ARM: kirkwood: fdt: define uart[01] as disabled, enable uart0 ARM: kirkwood: fdt: facilitate new boards during fdt migration ARM: kirkwood: fdt: absorb kirkwood_init() ARM: kirkwood: fdt: use mrvl ticker symbol ARM: orion: wdt: use resource vice direct access ARM: Kirkwood: Remove tclk from kirkwood_asoc_platform_data. ARM: orion: spi: remove enable_clock_fix which is not used ...
Diffstat (limited to 'drivers')
-rw-r--r--drivers/i2c/busses/i2c-gpio.c98
-rw-r--r--drivers/mtd/nand/atmel_nand.c136
-rw-r--r--drivers/of/Kconfig4
-rw-r--r--drivers/of/Makefile1
-rw-r--r--drivers/of/of_mtd.c85
-rw-r--r--drivers/rtc/rtc-mv.c9
-rw-r--r--drivers/spi/spi-orion.c5
-rw-r--r--drivers/staging/ste_rmi4/Makefile2
-rw-r--r--drivers/usb/Kconfig2
-rw-r--r--drivers/usb/gadget/Kconfig2
-rw-r--r--drivers/usb/gadget/at91_udc.c40
-rw-r--r--drivers/usb/host/ehci-atmel.c24
-rw-r--r--drivers/usb/host/ohci-at91.c101
-rw-r--r--drivers/watchdog/orion_wdt.c24
14 files changed, 452 insertions, 81 deletions
diff --git a/drivers/i2c/busses/i2c-gpio.c b/drivers/i2c/busses/i2c-gpio.c
index a651779d9ff..c0330a41db0 100644
--- a/drivers/i2c/busses/i2c-gpio.c
+++ b/drivers/i2c/busses/i2c-gpio.c
@@ -14,8 +14,15 @@
14#include <linux/module.h> 14#include <linux/module.h>
15#include <linux/slab.h> 15#include <linux/slab.h>
16#include <linux/platform_device.h> 16#include <linux/platform_device.h>
17 17#include <linux/gpio.h>
18#include <asm/gpio.h> 18#include <linux/of_gpio.h>
19#include <linux/of_i2c.h>
20
21struct i2c_gpio_private_data {
22 struct i2c_adapter adap;
23 struct i2c_algo_bit_data bit_data;
24 struct i2c_gpio_platform_data pdata;
25};
19 26
20/* Toggle SDA by changing the direction of the pin */ 27/* Toggle SDA by changing the direction of the pin */
21static void i2c_gpio_setsda_dir(void *data, int state) 28static void i2c_gpio_setsda_dir(void *data, int state)
@@ -78,24 +85,62 @@ static int i2c_gpio_getscl(void *data)
78 return gpio_get_value(pdata->scl_pin); 85 return gpio_get_value(pdata->scl_pin);
79} 86}
80 87
88static int __devinit of_i2c_gpio_probe(struct device_node *np,
89 struct i2c_gpio_platform_data *pdata)
90{
91 u32 reg;
92
93 if (of_gpio_count(np) < 2)
94 return -ENODEV;
95
96 pdata->sda_pin = of_get_gpio(np, 0);
97 pdata->scl_pin = of_get_gpio(np, 1);
98
99 if (!gpio_is_valid(pdata->sda_pin) || !gpio_is_valid(pdata->scl_pin)) {
100 pr_err("%s: invalid GPIO pins, sda=%d/scl=%d\n",
101 np->full_name, pdata->sda_pin, pdata->scl_pin);
102 return -ENODEV;
103 }
104
105 of_property_read_u32(np, "i2c-gpio,delay-us", &pdata->udelay);
106
107 if (!of_property_read_u32(np, "i2c-gpio,timeout-ms", &reg))
108 pdata->timeout = msecs_to_jiffies(reg);
109
110 pdata->sda_is_open_drain =
111 of_property_read_bool(np, "i2c-gpio,sda-open-drain");
112 pdata->scl_is_open_drain =
113 of_property_read_bool(np, "i2c-gpio,scl-open-drain");
114 pdata->scl_is_output_only =
115 of_property_read_bool(np, "i2c-gpio,scl-output-only");
116
117 return 0;
118}
119
81static int __devinit i2c_gpio_probe(struct platform_device *pdev) 120static int __devinit i2c_gpio_probe(struct platform_device *pdev)
82{ 121{
122 struct i2c_gpio_private_data *priv;
83 struct i2c_gpio_platform_data *pdata; 123 struct i2c_gpio_platform_data *pdata;
84 struct i2c_algo_bit_data *bit_data; 124 struct i2c_algo_bit_data *bit_data;
85 struct i2c_adapter *adap; 125 struct i2c_adapter *adap;
86 int ret; 126 int ret;
87 127
88 pdata = pdev->dev.platform_data; 128 priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
89 if (!pdata) 129 if (!priv)
90 return -ENXIO; 130 return -ENOMEM;
91 131 adap = &priv->adap;
92 ret = -ENOMEM; 132 bit_data = &priv->bit_data;
93 adap = kzalloc(sizeof(struct i2c_adapter), GFP_KERNEL); 133 pdata = &priv->pdata;
94 if (!adap) 134
95 goto err_alloc_adap; 135 if (pdev->dev.of_node) {
96 bit_data = kzalloc(sizeof(struct i2c_algo_bit_data), GFP_KERNEL); 136 ret = of_i2c_gpio_probe(pdev->dev.of_node, pdata);
97 if (!bit_data) 137 if (ret)
98 goto err_alloc_bit_data; 138 return ret;
139 } else {
140 if (!pdev->dev.platform_data)
141 return -ENXIO;
142 memcpy(pdata, pdev->dev.platform_data, sizeof(*pdata));
143 }
99 144
100 ret = gpio_request(pdata->sda_pin, "sda"); 145 ret = gpio_request(pdata->sda_pin, "sda");
101 if (ret) 146 if (ret)
@@ -143,6 +188,7 @@ static int __devinit i2c_gpio_probe(struct platform_device *pdev)
143 adap->algo_data = bit_data; 188 adap->algo_data = bit_data;
144 adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; 189 adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
145 adap->dev.parent = &pdev->dev; 190 adap->dev.parent = &pdev->dev;
191 adap->dev.of_node = pdev->dev.of_node;
146 192
147 /* 193 /*
148 * If "dev->id" is negative we consider it as zero. 194 * If "dev->id" is negative we consider it as zero.
@@ -154,7 +200,9 @@ static int __devinit i2c_gpio_probe(struct platform_device *pdev)
154 if (ret) 200 if (ret)
155 goto err_add_bus; 201 goto err_add_bus;
156 202
157 platform_set_drvdata(pdev, adap); 203 of_i2c_register_devices(adap);
204
205 platform_set_drvdata(pdev, priv);
158 206
159 dev_info(&pdev->dev, "using pins %u (SDA) and %u (SCL%s)\n", 207 dev_info(&pdev->dev, "using pins %u (SDA) and %u (SCL%s)\n",
160 pdata->sda_pin, pdata->scl_pin, 208 pdata->sda_pin, pdata->scl_pin,
@@ -168,34 +216,40 @@ err_add_bus:
168err_request_scl: 216err_request_scl:
169 gpio_free(pdata->sda_pin); 217 gpio_free(pdata->sda_pin);
170err_request_sda: 218err_request_sda:
171 kfree(bit_data);
172err_alloc_bit_data:
173 kfree(adap);
174err_alloc_adap:
175 return ret; 219 return ret;
176} 220}
177 221
178static int __devexit i2c_gpio_remove(struct platform_device *pdev) 222static int __devexit i2c_gpio_remove(struct platform_device *pdev)
179{ 223{
224 struct i2c_gpio_private_data *priv;
180 struct i2c_gpio_platform_data *pdata; 225 struct i2c_gpio_platform_data *pdata;
181 struct i2c_adapter *adap; 226 struct i2c_adapter *adap;
182 227
183 adap = platform_get_drvdata(pdev); 228 priv = platform_get_drvdata(pdev);
184 pdata = pdev->dev.platform_data; 229 adap = &priv->adap;
230 pdata = &priv->pdata;
185 231
186 i2c_del_adapter(adap); 232 i2c_del_adapter(adap);
187 gpio_free(pdata->scl_pin); 233 gpio_free(pdata->scl_pin);
188 gpio_free(pdata->sda_pin); 234 gpio_free(pdata->sda_pin);
189 kfree(adap->algo_data);
190 kfree(adap);
191 235
192 return 0; 236 return 0;
193} 237}
194 238
239#if defined(CONFIG_OF)
240static const struct of_device_id i2c_gpio_dt_ids[] = {
241 { .compatible = "i2c-gpio", },
242 { /* sentinel */ }
243};
244
245MODULE_DEVICE_TABLE(of, i2c_gpio_dt_ids);
246#endif
247
195static struct platform_driver i2c_gpio_driver = { 248static struct platform_driver i2c_gpio_driver = {
196 .driver = { 249 .driver = {
197 .name = "i2c-gpio", 250 .name = "i2c-gpio",
198 .owner = THIS_MODULE, 251 .owner = THIS_MODULE,
252 .of_match_table = of_match_ptr(i2c_gpio_dt_ids),
199 }, 253 },
200 .probe = i2c_gpio_probe, 254 .probe = i2c_gpio_probe,
201 .remove = __devexit_p(i2c_gpio_remove), 255 .remove = __devexit_p(i2c_gpio_remove),
diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c
index 35b4fb55dbd..ae7e37d9ac1 100644
--- a/drivers/mtd/nand/atmel_nand.c
+++ b/drivers/mtd/nand/atmel_nand.c
@@ -27,6 +27,10 @@
27#include <linux/module.h> 27#include <linux/module.h>
28#include <linux/moduleparam.h> 28#include <linux/moduleparam.h>
29#include <linux/platform_device.h> 29#include <linux/platform_device.h>
30#include <linux/of.h>
31#include <linux/of_device.h>
32#include <linux/of_gpio.h>
33#include <linux/of_mtd.h>
30#include <linux/mtd/mtd.h> 34#include <linux/mtd/mtd.h>
31#include <linux/mtd/nand.h> 35#include <linux/mtd/nand.h>
32#include <linux/mtd/partitions.h> 36#include <linux/mtd/partitions.h>
@@ -34,22 +38,10 @@
34#include <linux/dmaengine.h> 38#include <linux/dmaengine.h>
35#include <linux/gpio.h> 39#include <linux/gpio.h>
36#include <linux/io.h> 40#include <linux/io.h>
41#include <linux/platform_data/atmel.h>
37 42
38#include <mach/board.h>
39#include <mach/cpu.h> 43#include <mach/cpu.h>
40 44
41#ifdef CONFIG_MTD_NAND_ATMEL_ECC_HW
42#define hard_ecc 1
43#else
44#define hard_ecc 0
45#endif
46
47#ifdef CONFIG_MTD_NAND_ATMEL_ECC_NONE
48#define no_ecc 1
49#else
50#define no_ecc 0
51#endif
52
53static int use_dma = 1; 45static int use_dma = 1;
54module_param(use_dma, int, 0); 46module_param(use_dma, int, 0);
55 47
@@ -95,7 +87,7 @@ struct atmel_nand_host {
95 struct mtd_info mtd; 87 struct mtd_info mtd;
96 void __iomem *io_base; 88 void __iomem *io_base;
97 dma_addr_t io_phys; 89 dma_addr_t io_phys;
98 struct atmel_nand_data *board; 90 struct atmel_nand_data board;
99 struct device *dev; 91 struct device *dev;
100 void __iomem *ecc; 92 void __iomem *ecc;
101 93
@@ -113,8 +105,8 @@ static int cpu_has_dma(void)
113 */ 105 */
114static void atmel_nand_enable(struct atmel_nand_host *host) 106static void atmel_nand_enable(struct atmel_nand_host *host)
115{ 107{
116 if (gpio_is_valid(host->board->enable_pin)) 108 if (gpio_is_valid(host->board.enable_pin))
117 gpio_set_value(host->board->enable_pin, 0); 109 gpio_set_value(host->board.enable_pin, 0);
118} 110}
119 111
120/* 112/*
@@ -122,8 +114,8 @@ static void atmel_nand_enable(struct atmel_nand_host *host)
122 */ 114 */
123static void atmel_nand_disable(struct atmel_nand_host *host) 115static void atmel_nand_disable(struct atmel_nand_host *host)
124{ 116{
125 if (gpio_is_valid(host->board->enable_pin)) 117 if (gpio_is_valid(host->board.enable_pin))
126 gpio_set_value(host->board->enable_pin, 1); 118 gpio_set_value(host->board.enable_pin, 1);
127} 119}
128 120
129/* 121/*
@@ -144,9 +136,9 @@ static void atmel_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl
144 return; 136 return;
145 137
146 if (ctrl & NAND_CLE) 138 if (ctrl & NAND_CLE)
147 writeb(cmd, host->io_base + (1 << host->board->cle)); 139 writeb(cmd, host->io_base + (1 << host->board.cle));
148 else 140 else
149 writeb(cmd, host->io_base + (1 << host->board->ale)); 141 writeb(cmd, host->io_base + (1 << host->board.ale));
150} 142}
151 143
152/* 144/*
@@ -157,8 +149,8 @@ static int atmel_nand_device_ready(struct mtd_info *mtd)
157 struct nand_chip *nand_chip = mtd->priv; 149 struct nand_chip *nand_chip = mtd->priv;
158 struct atmel_nand_host *host = nand_chip->priv; 150 struct atmel_nand_host *host = nand_chip->priv;
159 151
160 return gpio_get_value(host->board->rdy_pin) ^ 152 return gpio_get_value(host->board.rdy_pin) ^
161 !!host->board->rdy_pin_active_low; 153 !!host->board.rdy_pin_active_low;
162} 154}
163 155
164/* 156/*
@@ -273,7 +265,7 @@ static void atmel_read_buf(struct mtd_info *mtd, u8 *buf, int len)
273 if (atmel_nand_dma_op(mtd, buf, len, 1) == 0) 265 if (atmel_nand_dma_op(mtd, buf, len, 1) == 0)
274 return; 266 return;
275 267
276 if (host->board->bus_width_16) 268 if (host->board.bus_width_16)
277 atmel_read_buf16(mtd, buf, len); 269 atmel_read_buf16(mtd, buf, len);
278 else 270 else
279 atmel_read_buf8(mtd, buf, len); 271 atmel_read_buf8(mtd, buf, len);
@@ -289,7 +281,7 @@ static void atmel_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
289 if (atmel_nand_dma_op(mtd, (void *)buf, len, 0) == 0) 281 if (atmel_nand_dma_op(mtd, (void *)buf, len, 0) == 0)
290 return; 282 return;
291 283
292 if (host->board->bus_width_16) 284 if (host->board.bus_width_16)
293 atmel_write_buf16(mtd, buf, len); 285 atmel_write_buf16(mtd, buf, len);
294 else 286 else
295 atmel_write_buf8(mtd, buf, len); 287 atmel_write_buf8(mtd, buf, len);
@@ -481,6 +473,56 @@ static void atmel_nand_hwctl(struct mtd_info *mtd, int mode)
481 } 473 }
482} 474}
483 475
476#if defined(CONFIG_OF)
477static int __devinit atmel_of_init_port(struct atmel_nand_host *host,
478 struct device_node *np)
479{
480 u32 val;
481 int ecc_mode;
482 struct atmel_nand_data *board = &host->board;
483 enum of_gpio_flags flags;
484
485 if (of_property_read_u32(np, "atmel,nand-addr-offset", &val) == 0) {
486 if (val >= 32) {
487 dev_err(host->dev, "invalid addr-offset %u\n", val);
488 return -EINVAL;
489 }
490 board->ale = val;
491 }
492
493 if (of_property_read_u32(np, "atmel,nand-cmd-offset", &val) == 0) {
494 if (val >= 32) {
495 dev_err(host->dev, "invalid cmd-offset %u\n", val);
496 return -EINVAL;
497 }
498 board->cle = val;
499 }
500
501 ecc_mode = of_get_nand_ecc_mode(np);
502
503 board->ecc_mode = ecc_mode < 0 ? NAND_ECC_SOFT : ecc_mode;
504
505 board->on_flash_bbt = of_get_nand_on_flash_bbt(np);
506
507 if (of_get_nand_bus_width(np) == 16)
508 board->bus_width_16 = 1;
509
510 board->rdy_pin = of_get_gpio_flags(np, 0, &flags);
511 board->rdy_pin_active_low = (flags == OF_GPIO_ACTIVE_LOW);
512
513 board->enable_pin = of_get_gpio(np, 1);
514 board->det_pin = of_get_gpio(np, 2);
515
516 return 0;
517}
518#else
519static int __devinit atmel_of_init_port(struct atmel_nand_host *host,
520 struct device_node *np)
521{
522 return -EINVAL;
523}
524#endif
525
484/* 526/*
485 * Probe for the NAND device. 527 * Probe for the NAND device.
486 */ 528 */
@@ -491,6 +533,7 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
491 struct nand_chip *nand_chip; 533 struct nand_chip *nand_chip;
492 struct resource *regs; 534 struct resource *regs;
493 struct resource *mem; 535 struct resource *mem;
536 struct mtd_part_parser_data ppdata = {};
494 int res; 537 int res;
495 538
496 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); 539 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -517,8 +560,15 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
517 560
518 mtd = &host->mtd; 561 mtd = &host->mtd;
519 nand_chip = &host->nand_chip; 562 nand_chip = &host->nand_chip;
520 host->board = pdev->dev.platform_data;
521 host->dev = &pdev->dev; 563 host->dev = &pdev->dev;
564 if (pdev->dev.of_node) {
565 res = atmel_of_init_port(host, pdev->dev.of_node);
566 if (res)
567 goto err_nand_ioremap;
568 } else {
569 memcpy(&host->board, pdev->dev.platform_data,
570 sizeof(struct atmel_nand_data));
571 }
522 572
523 nand_chip->priv = host; /* link the private data structures */ 573 nand_chip->priv = host; /* link the private data structures */
524 mtd->priv = nand_chip; 574 mtd->priv = nand_chip;
@@ -529,26 +579,25 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
529 nand_chip->IO_ADDR_W = host->io_base; 579 nand_chip->IO_ADDR_W = host->io_base;
530 nand_chip->cmd_ctrl = atmel_nand_cmd_ctrl; 580 nand_chip->cmd_ctrl = atmel_nand_cmd_ctrl;
531 581
532 if (gpio_is_valid(host->board->rdy_pin)) 582 if (gpio_is_valid(host->board.rdy_pin))
533 nand_chip->dev_ready = atmel_nand_device_ready; 583 nand_chip->dev_ready = atmel_nand_device_ready;
534 584
585 nand_chip->ecc.mode = host->board.ecc_mode;
586
535 regs = platform_get_resource(pdev, IORESOURCE_MEM, 1); 587 regs = platform_get_resource(pdev, IORESOURCE_MEM, 1);
536 if (!regs && hard_ecc) { 588 if (!regs && nand_chip->ecc.mode == NAND_ECC_HW) {
537 printk(KERN_ERR "atmel_nand: can't get I/O resource " 589 printk(KERN_ERR "atmel_nand: can't get I/O resource "
538 "regs\nFalling back on software ECC\n"); 590 "regs\nFalling back on software ECC\n");
591 nand_chip->ecc.mode = NAND_ECC_SOFT;
539 } 592 }
540 593
541 nand_chip->ecc.mode = NAND_ECC_SOFT; /* enable ECC */ 594 if (nand_chip->ecc.mode == NAND_ECC_HW) {
542 if (no_ecc)
543 nand_chip->ecc.mode = NAND_ECC_NONE;
544 if (hard_ecc && regs) {
545 host->ecc = ioremap(regs->start, resource_size(regs)); 595 host->ecc = ioremap(regs->start, resource_size(regs));
546 if (host->ecc == NULL) { 596 if (host->ecc == NULL) {
547 printk(KERN_ERR "atmel_nand: ioremap failed\n"); 597 printk(KERN_ERR "atmel_nand: ioremap failed\n");
548 res = -EIO; 598 res = -EIO;
549 goto err_ecc_ioremap; 599 goto err_ecc_ioremap;
550 } 600 }
551 nand_chip->ecc.mode = NAND_ECC_HW;
552 nand_chip->ecc.calculate = atmel_nand_calculate; 601 nand_chip->ecc.calculate = atmel_nand_calculate;
553 nand_chip->ecc.correct = atmel_nand_correct; 602 nand_chip->ecc.correct = atmel_nand_correct;
554 nand_chip->ecc.hwctl = atmel_nand_hwctl; 603 nand_chip->ecc.hwctl = atmel_nand_hwctl;
@@ -558,7 +607,7 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
558 607
559 nand_chip->chip_delay = 20; /* 20us command delay time */ 608 nand_chip->chip_delay = 20; /* 20us command delay time */
560 609
561 if (host->board->bus_width_16) /* 16-bit bus width */ 610 if (host->board.bus_width_16) /* 16-bit bus width */
562 nand_chip->options |= NAND_BUSWIDTH_16; 611 nand_chip->options |= NAND_BUSWIDTH_16;
563 612
564 nand_chip->read_buf = atmel_read_buf; 613 nand_chip->read_buf = atmel_read_buf;
@@ -567,15 +616,15 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
567 platform_set_drvdata(pdev, host); 616 platform_set_drvdata(pdev, host);
568 atmel_nand_enable(host); 617 atmel_nand_enable(host);
569 618
570 if (gpio_is_valid(host->board->det_pin)) { 619 if (gpio_is_valid(host->board.det_pin)) {
571 if (gpio_get_value(host->board->det_pin)) { 620 if (gpio_get_value(host->board.det_pin)) {
572 printk(KERN_INFO "No SmartMedia card inserted.\n"); 621 printk(KERN_INFO "No SmartMedia card inserted.\n");
573 res = -ENXIO; 622 res = -ENXIO;
574 goto err_no_card; 623 goto err_no_card;
575 } 624 }
576 } 625 }
577 626
578 if (on_flash_bbt) { 627 if (host->board.on_flash_bbt || on_flash_bbt) {
579 printk(KERN_INFO "atmel_nand: Use On Flash BBT\n"); 628 printk(KERN_INFO "atmel_nand: Use On Flash BBT\n");
580 nand_chip->bbt_options |= NAND_BBT_USE_FLASH; 629 nand_chip->bbt_options |= NAND_BBT_USE_FLASH;
581 } 630 }
@@ -650,8 +699,9 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
650 } 699 }
651 700
652 mtd->name = "atmel_nand"; 701 mtd->name = "atmel_nand";
653 res = mtd_device_parse_register(mtd, NULL, 0, 702 ppdata.of_node = pdev->dev.of_node;
654 host->board->parts, host->board->num_parts); 703 res = mtd_device_parse_register(mtd, NULL, &ppdata,
704 host->board.parts, host->board.num_parts);
655 if (!res) 705 if (!res)
656 return res; 706 return res;
657 707
@@ -695,11 +745,21 @@ static int __exit atmel_nand_remove(struct platform_device *pdev)
695 return 0; 745 return 0;
696} 746}
697 747
748#if defined(CONFIG_OF)
749static const struct of_device_id atmel_nand_dt_ids[] = {
750 { .compatible = "atmel,at91rm9200-nand" },
751 { /* sentinel */ }
752};
753
754MODULE_DEVICE_TABLE(of, atmel_nand_dt_ids);
755#endif
756
698static struct platform_driver atmel_nand_driver = { 757static struct platform_driver atmel_nand_driver = {
699 .remove = __exit_p(atmel_nand_remove), 758 .remove = __exit_p(atmel_nand_remove),
700 .driver = { 759 .driver = {
701 .name = "atmel_nand", 760 .name = "atmel_nand",
702 .owner = THIS_MODULE, 761 .owner = THIS_MODULE,
762 .of_match_table = of_match_ptr(atmel_nand_dt_ids),
703 }, 763 },
704}; 764};
705 765
diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig
index 6ea51dcbc72..8e84ce9765a 100644
--- a/drivers/of/Kconfig
+++ b/drivers/of/Kconfig
@@ -91,4 +91,8 @@ config OF_PCI_IRQ
91 help 91 help
92 OpenFirmware PCI IRQ routing helpers 92 OpenFirmware PCI IRQ routing helpers
93 93
94config OF_MTD
95 depends on MTD
96 def_bool y
97
94endmenu # OF 98endmenu # OF
diff --git a/drivers/of/Makefile b/drivers/of/Makefile
index a73f5a51ff4..aa90e602c8a 100644
--- a/drivers/of/Makefile
+++ b/drivers/of/Makefile
@@ -12,3 +12,4 @@ obj-$(CONFIG_OF_SELFTEST) += selftest.o
12obj-$(CONFIG_OF_MDIO) += of_mdio.o 12obj-$(CONFIG_OF_MDIO) += of_mdio.o
13obj-$(CONFIG_OF_PCI) += of_pci.o 13obj-$(CONFIG_OF_PCI) += of_pci.o
14obj-$(CONFIG_OF_PCI_IRQ) += of_pci_irq.o 14obj-$(CONFIG_OF_PCI_IRQ) += of_pci_irq.o
15obj-$(CONFIG_OF_MTD) += of_mtd.o
diff --git a/drivers/of/of_mtd.c b/drivers/of/of_mtd.c
new file mode 100644
index 00000000000..e7cad627a5d
--- /dev/null
+++ b/drivers/of/of_mtd.c
@@ -0,0 +1,85 @@
1/*
2 * Copyright 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
3 *
4 * OF helpers for mtd.
5 *
6 * This file is released under the GPLv2
7 *
8 */
9#include <linux/kernel.h>
10#include <linux/of_mtd.h>
11#include <linux/mtd/nand.h>
12#include <linux/export.h>
13
14/**
15 * It maps 'enum nand_ecc_modes_t' found in include/linux/mtd/nand.h
16 * into the device tree binding of 'nand-ecc', so that MTD
17 * device driver can get nand ecc from device tree.
18 */
19static const char *nand_ecc_modes[] = {
20 [NAND_ECC_NONE] = "none",
21 [NAND_ECC_SOFT] = "soft",
22 [NAND_ECC_HW] = "hw",
23 [NAND_ECC_HW_SYNDROME] = "hw_syndrome",
24 [NAND_ECC_HW_OOB_FIRST] = "hw_oob_first",
25 [NAND_ECC_SOFT_BCH] = "soft_bch",
26};
27
28/**
29 * of_get_nand_ecc_mode - Get nand ecc mode for given device_node
30 * @np: Pointer to the given device_node
31 *
32 * The function gets ecc mode string from property 'nand-ecc-mode',
33 * and return its index in nand_ecc_modes table, or errno in error case.
34 */
35const int of_get_nand_ecc_mode(struct device_node *np)
36{
37 const char *pm;
38 int err, i;
39
40 err = of_property_read_string(np, "nand-ecc-mode", &pm);
41 if (err < 0)
42 return err;
43
44 for (i = 0; i < ARRAY_SIZE(nand_ecc_modes); i++)
45 if (!strcasecmp(pm, nand_ecc_modes[i]))
46 return i;
47
48 return -ENODEV;
49}
50EXPORT_SYMBOL_GPL(of_get_nand_ecc_mode);
51
52/**
53 * of_get_nand_bus_width - Get nand bus witdh for given device_node
54 * @np: Pointer to the given device_node
55 *
56 * return bus width option, or errno in error case.
57 */
58int of_get_nand_bus_width(struct device_node *np)
59{
60 u32 val;
61
62 if (of_property_read_u32(np, "nand-bus-width", &val))
63 return 8;
64
65 switch(val) {
66 case 8:
67 case 16:
68 return val;
69 default:
70 return -EIO;
71 }
72}
73EXPORT_SYMBOL_GPL(of_get_nand_bus_width);
74
75/**
76 * of_get_nand_on_flash_bbt - Get nand on flash bbt for given device_node
77 * @np: Pointer to the given device_node
78 *
79 * return true if present false other wise
80 */
81bool of_get_nand_on_flash_bbt(struct device_node *np)
82{
83 return of_property_read_bool(np, "nand-on-flash-bbt");
84}
85EXPORT_SYMBOL_GPL(of_get_nand_on_flash_bbt);
diff --git a/drivers/rtc/rtc-mv.c b/drivers/rtc/rtc-mv.c
index 1300962486d..b2185f4255a 100644
--- a/drivers/rtc/rtc-mv.c
+++ b/drivers/rtc/rtc-mv.c
@@ -12,6 +12,7 @@
12#include <linux/bcd.h> 12#include <linux/bcd.h>
13#include <linux/io.h> 13#include <linux/io.h>
14#include <linux/platform_device.h> 14#include <linux/platform_device.h>
15#include <linux/of.h>
15#include <linux/delay.h> 16#include <linux/delay.h>
16#include <linux/gfp.h> 17#include <linux/gfp.h>
17#include <linux/module.h> 18#include <linux/module.h>
@@ -294,11 +295,19 @@ static int __exit mv_rtc_remove(struct platform_device *pdev)
294 return 0; 295 return 0;
295} 296}
296 297
298#ifdef CONFIG_OF
299static struct of_device_id rtc_mv_of_match_table[] = {
300 { .compatible = "mrvl,orion-rtc", },
301 {}
302};
303#endif
304
297static struct platform_driver mv_rtc_driver = { 305static struct platform_driver mv_rtc_driver = {
298 .remove = __exit_p(mv_rtc_remove), 306 .remove = __exit_p(mv_rtc_remove),
299 .driver = { 307 .driver = {
300 .name = "rtc-mv", 308 .name = "rtc-mv",
301 .owner = THIS_MODULE, 309 .owner = THIS_MODULE,
310 .of_match_table = of_match_ptr(rtc_mv_of_match_table),
302 }, 311 },
303}; 312};
304 313
diff --git a/drivers/spi/spi-orion.c b/drivers/spi/spi-orion.c
index 13448c832c4..e496f799b7a 100644
--- a/drivers/spi/spi-orion.c
+++ b/drivers/spi/spi-orion.c
@@ -359,11 +359,6 @@ static int orion_spi_setup(struct spi_device *spi)
359 359
360 orion_spi = spi_master_get_devdata(spi->master); 360 orion_spi = spi_master_get_devdata(spi->master);
361 361
362 /* Fix ac timing if required. */
363 if (orion_spi->spi_info->enable_clock_fix)
364 orion_spi_setbits(orion_spi, ORION_SPI_IF_CONFIG_REG,
365 (1 << 14));
366
367 if ((spi->max_speed_hz == 0) 362 if ((spi->max_speed_hz == 0)
368 || (spi->max_speed_hz > orion_spi->max_speed)) 363 || (spi->max_speed_hz > orion_spi->max_speed))
369 spi->max_speed_hz = orion_spi->max_speed; 364 spi->max_speed_hz = orion_spi->max_speed;
diff --git a/drivers/staging/ste_rmi4/Makefile b/drivers/staging/ste_rmi4/Makefile
index 176f4690057..e4c03351420 100644
--- a/drivers/staging/ste_rmi4/Makefile
+++ b/drivers/staging/ste_rmi4/Makefile
@@ -2,4 +2,4 @@
2# Makefile for the RMI4 touchscreen driver. 2# Makefile for the RMI4 touchscreen driver.
3# 3#
4obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4) += synaptics_i2c_rmi4.o 4obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4) += synaptics_i2c_rmi4.o
5obj-$(CONFIG_MACH_U8500) += board-mop500-u8500uib-rmi4.o 5obj-$(CONFIG_MACH_MOP500) += board-mop500-u8500uib-rmi4.o
diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig
index 48ac6e781ba..cbd8f5f8059 100644
--- a/drivers/usb/Kconfig
+++ b/drivers/usb/Kconfig
@@ -44,7 +44,7 @@ config USB_ARCH_HAS_EHCI
44 default y if PPC_MPC512x 44 default y if PPC_MPC512x
45 default y if ARCH_IXP4XX 45 default y if ARCH_IXP4XX
46 default y if ARCH_W90X900 46 default y if ARCH_W90X900
47 default y if ARCH_AT91SAM9G45 47 default y if ARCH_AT91
48 default y if ARCH_MXC 48 default y if ARCH_MXC
49 default y if ARCH_OMAP3 49 default y if ARCH_OMAP3
50 default y if ARCH_CNS3XXX 50 default y if ARCH_CNS3XXX
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
index 26c0b75f152..2633f759511 100644
--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -137,7 +137,7 @@ choice
137 137
138config USB_AT91 138config USB_AT91
139 tristate "Atmel AT91 USB Device Port" 139 tristate "Atmel AT91 USB Device Port"
140 depends on ARCH_AT91 && !ARCH_AT91SAM9RL && !ARCH_AT91SAM9G45 140 depends on ARCH_AT91
141 help 141 help
142 Many Atmel AT91 processors (such as the AT91RM2000) have a 142 Many Atmel AT91 processors (such as the AT91RM2000) have a
143 full speed USB Device Port with support for five configurable 143 full speed USB Device Port with support for five configurable
diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c
index 2db5f68f796..36fd2b4b49a 100644
--- a/drivers/usb/gadget/at91_udc.c
+++ b/drivers/usb/gadget/at91_udc.c
@@ -29,6 +29,8 @@
29#include <linux/clk.h> 29#include <linux/clk.h>
30#include <linux/usb/ch9.h> 30#include <linux/usb/ch9.h>
31#include <linux/usb/gadget.h> 31#include <linux/usb/gadget.h>
32#include <linux/of.h>
33#include <linux/of_gpio.h>
32 34
33#include <asm/byteorder.h> 35#include <asm/byteorder.h>
34#include <mach/hardware.h> 36#include <mach/hardware.h>
@@ -1707,7 +1709,27 @@ static void at91udc_shutdown(struct platform_device *dev)
1707 spin_unlock_irqrestore(&udc->lock, flags); 1709 spin_unlock_irqrestore(&udc->lock, flags);
1708} 1710}
1709 1711
1710static int __init at91udc_probe(struct platform_device *pdev) 1712static void __devinit at91udc_of_init(struct at91_udc *udc,
1713 struct device_node *np)
1714{
1715 struct at91_udc_data *board = &udc->board;
1716 u32 val;
1717 enum of_gpio_flags flags;
1718
1719 if (of_property_read_u32(np, "atmel,vbus-polled", &val) == 0)
1720 board->vbus_polled = 1;
1721
1722 board->vbus_pin = of_get_named_gpio_flags(np, "atmel,vbus-gpio", 0,
1723 &flags);
1724 board->vbus_active_low = (flags & OF_GPIO_ACTIVE_LOW) ? 1 : 0;
1725
1726 board->pullup_pin = of_get_named_gpio_flags(np, "atmel,pullup-gpio", 0,
1727 &flags);
1728
1729 board->pullup_active_low = (flags & OF_GPIO_ACTIVE_LOW) ? 1 : 0;
1730}
1731
1732static int __devinit at91udc_probe(struct platform_device *pdev)
1711{ 1733{
1712 struct device *dev = &pdev->dev; 1734 struct device *dev = &pdev->dev;
1713 struct at91_udc *udc; 1735 struct at91_udc *udc;
@@ -1742,7 +1764,11 @@ static int __init at91udc_probe(struct platform_device *pdev)
1742 /* init software state */ 1764 /* init software state */
1743 udc = &controller; 1765 udc = &controller;
1744 udc->gadget.dev.parent = dev; 1766 udc->gadget.dev.parent = dev;
1745 udc->board = *(struct at91_udc_data *) dev->platform_data; 1767 if (pdev->dev.of_node)
1768 at91udc_of_init(udc, pdev->dev.of_node);
1769 else
1770 memcpy(&udc->board, dev->platform_data,
1771 sizeof(struct at91_udc_data));
1746 udc->pdev = pdev; 1772 udc->pdev = pdev;
1747 udc->enabled = 0; 1773 udc->enabled = 0;
1748 spin_lock_init(&udc->lock); 1774 spin_lock_init(&udc->lock);
@@ -1971,6 +1997,15 @@ static int at91udc_resume(struct platform_device *pdev)
1971#define at91udc_resume NULL 1997#define at91udc_resume NULL
1972#endif 1998#endif
1973 1999
2000#if defined(CONFIG_OF)
2001static const struct of_device_id at91_udc_dt_ids[] = {
2002 { .compatible = "atmel,at91rm9200-udc" },
2003 { /* sentinel */ }
2004};
2005
2006MODULE_DEVICE_TABLE(of, at91_udc_dt_ids);
2007#endif
2008
1974static struct platform_driver at91_udc_driver = { 2009static struct platform_driver at91_udc_driver = {
1975 .remove = __exit_p(at91udc_remove), 2010 .remove = __exit_p(at91udc_remove),
1976 .shutdown = at91udc_shutdown, 2011 .shutdown = at91udc_shutdown,
@@ -1979,6 +2014,7 @@ static struct platform_driver at91_udc_driver = {
1979 .driver = { 2014 .driver = {
1980 .name = (char *) driver_name, 2015 .name = (char *) driver_name,
1981 .owner = THIS_MODULE, 2016 .owner = THIS_MODULE,
2017 .of_match_table = of_match_ptr(at91_udc_dt_ids),
1982 }, 2018 },
1983}; 2019};
1984 2020
diff --git a/drivers/usb/host/ehci-atmel.c b/drivers/usb/host/ehci-atmel.c
index a5a3ef1f009..19f318ababa 100644
--- a/drivers/usb/host/ehci-atmel.c
+++ b/drivers/usb/host/ehci-atmel.c
@@ -13,6 +13,7 @@
13 13
14#include <linux/clk.h> 14#include <linux/clk.h>
15#include <linux/platform_device.h> 15#include <linux/platform_device.h>
16#include <linux/of_platform.h>
16 17
17/* interface and function clocks */ 18/* interface and function clocks */
18static struct clk *iclk, *fclk; 19static struct clk *iclk, *fclk;
@@ -115,6 +116,8 @@ static const struct hc_driver ehci_atmel_hc_driver = {
115 .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete, 116 .clear_tt_buffer_complete = ehci_clear_tt_buffer_complete,
116}; 117};
117 118
119static u64 at91_ehci_dma_mask = DMA_BIT_MASK(32);
120
118static int __devinit ehci_atmel_drv_probe(struct platform_device *pdev) 121static int __devinit ehci_atmel_drv_probe(struct platform_device *pdev)
119{ 122{
120 struct usb_hcd *hcd; 123 struct usb_hcd *hcd;
@@ -137,6 +140,13 @@ static int __devinit ehci_atmel_drv_probe(struct platform_device *pdev)
137 goto fail_create_hcd; 140 goto fail_create_hcd;
138 } 141 }
139 142
143 /* Right now device-tree probed devices don't get dma_mask set.
144 * Since shared usb code relies on it, set it here for now.
145 * Once we have dma capability bindings this can go away.
146 */
147 if (!pdev->dev.dma_mask)
148 pdev->dev.dma_mask = &at91_ehci_dma_mask;
149
140 hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev)); 150 hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev));
141 if (!hcd) { 151 if (!hcd) {
142 retval = -ENOMEM; 152 retval = -ENOMEM;
@@ -225,9 +235,21 @@ static int __devexit ehci_atmel_drv_remove(struct platform_device *pdev)
225 return 0; 235 return 0;
226} 236}
227 237
238#ifdef CONFIG_OF
239static const struct of_device_id atmel_ehci_dt_ids[] = {
240 { .compatible = "atmel,at91sam9g45-ehci" },
241 { /* sentinel */ }
242};
243
244MODULE_DEVICE_TABLE(of, atmel_ehci_dt_ids);
245#endif
246
228static struct platform_driver ehci_atmel_driver = { 247static struct platform_driver ehci_atmel_driver = {
229 .probe = ehci_atmel_drv_probe, 248 .probe = ehci_atmel_drv_probe,
230 .remove = __devexit_p(ehci_atmel_drv_remove), 249 .remove = __devexit_p(ehci_atmel_drv_remove),
231 .shutdown = usb_hcd_platform_shutdown, 250 .shutdown = usb_hcd_platform_shutdown,
232 .driver.name = "atmel-ehci", 251 .driver = {
252 .name = "atmel-ehci",
253 .of_match_table = of_match_ptr(atmel_ehci_dt_ids),
254 },
233}; 255};
diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
index 8e855eb0bf8..db8963f5fbc 100644
--- a/drivers/usb/host/ohci-at91.c
+++ b/drivers/usb/host/ohci-at91.c
@@ -14,6 +14,8 @@
14 14
15#include <linux/clk.h> 15#include <linux/clk.h>
16#include <linux/platform_device.h> 16#include <linux/platform_device.h>
17#include <linux/of_platform.h>
18#include <linux/of_gpio.h>
17 19
18#include <mach/hardware.h> 20#include <mach/hardware.h>
19#include <asm/gpio.h> 21#include <asm/gpio.h>
@@ -477,13 +479,109 @@ static irqreturn_t ohci_hcd_at91_overcurrent_irq(int irq, void *data)
477 return IRQ_HANDLED; 479 return IRQ_HANDLED;
478} 480}
479 481
482#ifdef CONFIG_OF
483static const struct of_device_id at91_ohci_dt_ids[] = {
484 { .compatible = "atmel,at91rm9200-ohci" },
485 { /* sentinel */ }
486};
487
488MODULE_DEVICE_TABLE(of, at91_ohci_dt_ids);
489
490static u64 at91_ohci_dma_mask = DMA_BIT_MASK(32);
491
492static int __devinit ohci_at91_of_init(struct platform_device *pdev)
493{
494 struct device_node *np = pdev->dev.of_node;
495 int i, ret, gpio;
496 enum of_gpio_flags flags;
497 struct at91_usbh_data *pdata;
498 u32 ports;
499
500 if (!np)
501 return 0;
502
503 /* Right now device-tree probed devices don't get dma_mask set.
504 * Since shared usb code relies on it, set it here for now.
505 * Once we have dma capability bindings this can go away.
506 */
507 if (!pdev->dev.dma_mask)
508 pdev->dev.dma_mask = &at91_ohci_dma_mask;
509
510 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
511 if (!pdata)
512 return -ENOMEM;
513
514 if (!of_property_read_u32(np, "num-ports", &ports))
515 pdata->ports = ports;
516
517 for (i = 0; i < 2; i++) {
518 gpio = of_get_named_gpio_flags(np, "atmel,vbus-gpio", i, &flags);
519 pdata->vbus_pin[i] = gpio;
520 if (!gpio_is_valid(gpio))
521 continue;
522 pdata->vbus_pin_active_low[i] = flags & OF_GPIO_ACTIVE_LOW;
523 ret = gpio_request(gpio, "ohci_vbus");
524 if (ret) {
525 dev_warn(&pdev->dev, "can't request vbus gpio %d", gpio);
526 continue;
527 }
528 ret = gpio_direction_output(gpio, !(flags & OF_GPIO_ACTIVE_LOW) ^ 1);
529 if (ret)
530 dev_warn(&pdev->dev, "can't put vbus gpio %d as output %d",
531 !(flags & OF_GPIO_ACTIVE_LOW) ^ 1, gpio);
532 }
533
534 for (i = 0; i < 2; i++) {
535 gpio = of_get_named_gpio_flags(np, "atmel,oc-gpio", i, &flags);
536 pdata->overcurrent_pin[i] = gpio;
537 if (!gpio_is_valid(gpio))
538 continue;
539 ret = gpio_request(gpio, "ohci_overcurrent");
540 if (ret) {
541 dev_err(&pdev->dev, "can't request overcurrent gpio %d", gpio);
542 continue;
543 }
544
545 ret = gpio_direction_input(gpio);
546 if (ret) {
547 dev_err(&pdev->dev, "can't configure overcurrent gpio %d as input", gpio);
548 continue;
549 }
550
551 ret = request_irq(gpio_to_irq(gpio),
552 ohci_hcd_at91_overcurrent_irq,
553 IRQF_SHARED, "ohci_overcurrent", pdev);
554 if (ret) {
555 gpio_free(gpio);
556 dev_warn(& pdev->dev, "cannot get GPIO IRQ for overcurrent\n");
557 }
558 }
559
560 pdev->dev.platform_data = pdata;
561
562 return 0;
563}
564#else
565static int __devinit ohci_at91_of_init(struct platform_device *pdev)
566{
567 return 0;
568}
569#endif
570
480/*-------------------------------------------------------------------------*/ 571/*-------------------------------------------------------------------------*/
481 572
482static int ohci_hcd_at91_drv_probe(struct platform_device *pdev) 573static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
483{ 574{
484 struct at91_usbh_data *pdata = pdev->dev.platform_data; 575 struct at91_usbh_data *pdata;
485 int i; 576 int i;
486 577
578 i = ohci_at91_of_init(pdev);
579
580 if (i)
581 return i;
582
583 pdata = pdev->dev.platform_data;
584
487 if (pdata) { 585 if (pdata) {
488 for (i = 0; i < ARRAY_SIZE(pdata->vbus_pin); i++) { 586 for (i = 0; i < ARRAY_SIZE(pdata->vbus_pin); i++) {
489 if (!gpio_is_valid(pdata->vbus_pin[i])) 587 if (!gpio_is_valid(pdata->vbus_pin[i]))
@@ -596,5 +694,6 @@ static struct platform_driver ohci_hcd_at91_driver = {
596 .driver = { 694 .driver = {
597 .name = "at91_ohci", 695 .name = "at91_ohci",
598 .owner = THIS_MODULE, 696 .owner = THIS_MODULE,
697 .of_match_table = of_match_ptr(at91_ohci_dt_ids),
599 }, 698 },
600}; 699};
diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c
index 4ad78f86851..1368e4ca310 100644
--- a/drivers/watchdog/orion_wdt.c
+++ b/drivers/watchdog/orion_wdt.c
@@ -28,9 +28,9 @@
28/* 28/*
29 * Watchdog timer block registers. 29 * Watchdog timer block registers.
30 */ 30 */
31#define TIMER_CTRL (TIMER_VIRT_BASE + 0x0000) 31#define TIMER_CTRL 0x0000
32#define WDT_EN 0x0010 32#define WDT_EN 0x0010
33#define WDT_VAL (TIMER_VIRT_BASE + 0x0024) 33#define WDT_VAL 0x0024
34 34
35#define WDT_MAX_CYCLE_COUNT 0xffffffff 35#define WDT_MAX_CYCLE_COUNT 0xffffffff
36#define WDT_IN_USE 0 36#define WDT_IN_USE 0
@@ -40,6 +40,7 @@ static int nowayout = WATCHDOG_NOWAYOUT;
40static int heartbeat = -1; /* module parameter (seconds) */ 40static int heartbeat = -1; /* module parameter (seconds) */
41static unsigned int wdt_max_duration; /* (seconds) */ 41static unsigned int wdt_max_duration; /* (seconds) */
42static unsigned int wdt_tclk; 42static unsigned int wdt_tclk;
43static void __iomem *wdt_reg;
43static unsigned long wdt_status; 44static unsigned long wdt_status;
44static DEFINE_SPINLOCK(wdt_lock); 45static DEFINE_SPINLOCK(wdt_lock);
45 46
@@ -48,7 +49,7 @@ static void orion_wdt_ping(void)
48 spin_lock(&wdt_lock); 49 spin_lock(&wdt_lock);
49 50
50 /* Reload watchdog duration */ 51 /* Reload watchdog duration */
51 writel(wdt_tclk * heartbeat, WDT_VAL); 52 writel(wdt_tclk * heartbeat, wdt_reg + WDT_VAL);
52 53
53 spin_unlock(&wdt_lock); 54 spin_unlock(&wdt_lock);
54} 55}
@@ -60,7 +61,7 @@ static void orion_wdt_enable(void)
60 spin_lock(&wdt_lock); 61 spin_lock(&wdt_lock);
61 62
62 /* Set watchdog duration */ 63 /* Set watchdog duration */
63 writel(wdt_tclk * heartbeat, WDT_VAL); 64 writel(wdt_tclk * heartbeat, wdt_reg + WDT_VAL);
64 65
65 /* Clear watchdog timer interrupt */ 66 /* Clear watchdog timer interrupt */
66 reg = readl(BRIDGE_CAUSE); 67 reg = readl(BRIDGE_CAUSE);
@@ -68,9 +69,9 @@ static void orion_wdt_enable(void)
68 writel(reg, BRIDGE_CAUSE); 69 writel(reg, BRIDGE_CAUSE);
69 70
70 /* Enable watchdog timer */ 71 /* Enable watchdog timer */
71 reg = readl(TIMER_CTRL); 72 reg = readl(wdt_reg + TIMER_CTRL);
72 reg |= WDT_EN; 73 reg |= WDT_EN;
73 writel(reg, TIMER_CTRL); 74 writel(reg, wdt_reg + TIMER_CTRL);
74 75
75 /* Enable reset on watchdog */ 76 /* Enable reset on watchdog */
76 reg = readl(RSTOUTn_MASK); 77 reg = readl(RSTOUTn_MASK);
@@ -92,9 +93,9 @@ static void orion_wdt_disable(void)
92 writel(reg, RSTOUTn_MASK); 93 writel(reg, RSTOUTn_MASK);
93 94
94 /* Disable watchdog timer */ 95 /* Disable watchdog timer */
95 reg = readl(TIMER_CTRL); 96 reg = readl(wdt_reg + TIMER_CTRL);
96 reg &= ~WDT_EN; 97 reg &= ~WDT_EN;
97 writel(reg, TIMER_CTRL); 98 writel(reg, wdt_reg + TIMER_CTRL);
98 99
99 spin_unlock(&wdt_lock); 100 spin_unlock(&wdt_lock);
100} 101}
@@ -102,7 +103,7 @@ static void orion_wdt_disable(void)
102static int orion_wdt_get_timeleft(int *time_left) 103static int orion_wdt_get_timeleft(int *time_left)
103{ 104{
104 spin_lock(&wdt_lock); 105 spin_lock(&wdt_lock);
105 *time_left = readl(WDT_VAL) / wdt_tclk; 106 *time_left = readl(wdt_reg + WDT_VAL) / wdt_tclk;
106 spin_unlock(&wdt_lock); 107 spin_unlock(&wdt_lock);
107 return 0; 108 return 0;
108} 109}
@@ -236,6 +237,7 @@ static struct miscdevice orion_wdt_miscdev = {
236static int __devinit orion_wdt_probe(struct platform_device *pdev) 237static int __devinit orion_wdt_probe(struct platform_device *pdev)
237{ 238{
238 struct orion_wdt_platform_data *pdata = pdev->dev.platform_data; 239 struct orion_wdt_platform_data *pdata = pdev->dev.platform_data;
240 struct resource *res;
239 int ret; 241 int ret;
240 242
241 if (pdata) { 243 if (pdata) {
@@ -245,6 +247,10 @@ static int __devinit orion_wdt_probe(struct platform_device *pdev)
245 return -ENODEV; 247 return -ENODEV;
246 } 248 }
247 249
250 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
251
252 wdt_reg = ioremap(res->start, resource_size(res));
253
248 if (orion_wdt_miscdev.parent) 254 if (orion_wdt_miscdev.parent)
249 return -EBUSY; 255 return -EBUSY;
250 orion_wdt_miscdev.parent = &pdev->dev; 256 orion_wdt_miscdev.parent = &pdev->dev;